C++實現五子棋小程式__資料庫

來源:互聯網
上載者:User

這是一個用C++寫的五子棋的小程式,關於A若是佔據了已經下了的位置處理的不好。改動 hight,與width ,與q[][] 可以將棋盤擴大。

#include<iostream>#include<vector>using namespace std;class qipan{public:    qipan() {}    ~qipan() {};    //向上下左右,斜的方向    char  left(int x, int y)    {//檢查是否合適        if (x >= 1 && x <= hight&& y - 1 >= 1 && y - 1 <= width)        {            return q[x][y - 1];        }        else {            return 'F';        }    }    char  right(int x, int y)    {        if (x >= 1 && x <= hight&&y + 1 >= 1 && y + 1 <= width)        {            return q[x][y + 1];        }        else {            return 'F';        }    }    char  up(int x, int y)    {        if (x - 1 >= 1 && x - 1 <= hight && y >= 1 && y <= width)        {            return q[x - 1][y];        }        else {            return 'F';        }    }    char down(int x, int y)    {        if (x + 1 >= 1 && x + 1 <= hight && y >= 1 && y <= width)        {            return q[x + 1][y];        }        else {            return 'F';        }    }    char left_up(int x, int y)    {        if (x - 1 >= 1 && x - 1 <= hight && y - 1 >= 1 && y - 1 <= width)        {            return q[x - 1][y - 1];        }        else {            return 'F';        }    }    char  left_down(int x, int y)    {        if (x + 1 >= 1 && x + 1 <= hight && y - 1 >= 1 && y - 1 <= width)        {            return q[x + 1][y - 1];        }        else {            return 'F';        }    }    char right_up(int x, int y)    {        if (x - 1 >= 1 && x - 1 <= hight && y + 1 >= 1 && y + 1 <= width)        {            return q[x - 1][y + 1];        }        else {            return 'F';        }    }    char right_down(int x, int y)    {        if (x + 1 >= 1 && x + 1 <= hight && y + 1 >= 1 && y + 1 <= width)        {            return q[x + 1][y + 1];        }        else {            return 'F';        }    }    void init_cur() {        h_cur = hang;        l_cur = lie;    }    bool win()    {        bool WIN = false;        char temp = q[hang][lie];        //以上為例,每次先看上面的5個,假如一樣,iter++;否則 break;再加上下的方向,同樣iter++;最後iter+1==5,WIN=true;並且退出        //各個方向重複,上下左右,斜著的。        //贏了直接退出。        //顯示是誰贏了        //左右        int  count_lr = 1;        init_cur();        for (int i = 0; i < 4; i++)        {            if (left(h_cur, l_cur) == temp)                count_lr++;            else                break;            l_cur--;        }        init_cur();        for (int i = 0; i < 4; i++)        {            if (right(h_cur, l_cur) == temp)                count_lr++;            else                break;            l_cur++;        }        if (count_lr == 5)            WIN = true;        //上下        int  count_ud = 1;        init_cur();        for (int i = 0; i < 4; i++)        {            if (up(h_cur, l_cur) == temp)                count_ud++;            else                break;            h_cur--;        }        init_cur();        for (int i = 0; i < 4; i++)        {            if (down(h_cur, l_cur) == temp)                count_ud++;            else                break;            h_cur++;        }        if (count_ud == 5)            WIN = true;        //左斜        int  count_lt = 1;        init_cur();        for (int i = 0; i < 4; i++)        {            if (left_up(h_cur, l_cur) == temp)                count_lt++;            else                break;            h_cur--;            l_cur--;        }        init_cur();        for (int i = 0; i < 4; i++)        {            if (left_down(h_cur, l_cur) == temp)                count_lt++;            else                break;            h_cur++;            l_cur--;        }        if (count_lt == 5)            WIN = true;        //右邊斜        int  count_rt = 1;        init_cur();        for (int i = 0; i < 4; i++)        {            if (right_up(h_cur, l_cur) == temp)                count_rt++;            else                break;            h_cur--;            l_cur++;        }        init_cur();        for (int i = 0; i < 4; i++)        {            if (right_down(h_cur, l_cur) == temp)                count_rt++;            else                break;            h_cur++;            l_cur++;        }        if (count_rt == 5)            WIN = true;        return WIN;    }    void qipan_array()    {        for (int i = 0; i < hight; i++) {            for (int j = 0; j < width; j++)                q[i][j] = '+';        }    }    void prin_qipan()    {        //列印二維數組;每一行要列印上行號,以及列號        for (int i = 0; i <hight; i++)        {            for (int j = 0; j < width; j++)            {                cout << q[i][j] << " ";            }            cout << i;            cout << endl;        }        for (int j = 0; j <width; j++)        {            cout << j << " ";        }        cout << endl << "________________________________" << endl;    }    int xiaqi(int player)    {        if (player == 1) {            q[hang][lie] = '*';        }        else if (player == 2)        {            q[hang][lie] = '@';        }        else            cout << "input player is wrong" << endl;        return 0;    }    //初始化行列    int gethang(int h)    {        hang = h;        return 0;    }    int getlie(int l)    {        lie = l;        return 0;    }    int h_cur;    int l_cur;    const int hight = 9;    const int width = 9;    int hang; int lie;    char q[9][9];};int main(){    int hang, lie;    qipan wzq;    wzq.qipan_array();    cout << "A 與B 玩五子棋" << endl;    cout << "A use * and B use @" << endl;    cout << "________________________________" << endl;    for (int i = 0; i < 15; i++) {        cout << "A 輸入行: ";        cin >> hang;        cout << "A 輸入列: ";        cin >> lie;        if (wzq.q[hang][lie] != '+')            cout << "輸入的行列數字已經有人佔據了" << endl;        else {            wzq.gethang(hang);            wzq.getlie(lie);            wzq.xiaqi(1);            wzq.prin_qipan();            if (wzq.win())            {                cout << "A is winner" << endl;                exit(0);            }        }        //b 開始了        cout << "B 輸入行: ";        cin >> hang;        cout << "B 輸入列: ";        cin >> lie;        if (wzq.q[hang][lie] != '+')            cout << "輸入的行列數字已經有人佔據了" << endl;        else {            wzq.gethang(hang);            wzq.getlie(lie);            wzq.xiaqi(2);            wzq.prin_qipan();            if (wzq.win())            {                cout << "B is winner" << endl;                exit(0);            }        }    }    return 0;}

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.