最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C++實現(xiàn)圖形界面雙人五子棋游戲

 更新時間:2022年05月05日 15:38:43   作者:SUN_NZ  
這篇文章主要為大家詳細(xì)介紹了C++實現(xiàn)圖形界面雙人五子棋游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下

本文實例為大家分享了C++實現(xiàn)圖形界面雙人五子棋游戲的具體代碼,供大家參考,具體內(nèi)容如下

設(shè)計思路

定義一個Chess類,用16*16的二維數(shù)組的來表示一方棋手在棋局上的落子狀態(tài)。
通過控制鍵盤←↑→↓來選擇落點,getch()函數(shù)可獲得用戶的鍵盤輸入,用coord控制臺屏幕上的坐標(biāo)。
勝利條件:Chess類的成員函數(shù)win(),每落一個棋子進(jìn)行win()的判斷,當(dāng)橫向、豎向或斜向存在同一顏色的連續(xù)五個棋子時,win()返回值1。

代碼如下

#include <windows.h> ?
#include <iostream> ?
#include<conio.h>
#include<cstring>
using namespace std; ?
COORD c;
class Chess
{/*一方棋局*/
private:
?? ?int p[15][15]; ? ?/*落子情況*/
public:
?? ?void newchess()
?? ?{/*空棋盤*/
?? ? ? ?for(int i=0;i<16;i++)
?? ??? ??? ?for(int j=0;j<16;j++)
?? ??? ??? ??? ?p[i][j]=0;
?? ?}
?? ?int win()
?? ?{/*判斷勝利*/
?? ? ? ?int i,j,f;
?? ??? ?for(i=0;i<16;i++)
?? ??? ?{/*橫向*/
?? ??? ??? ?j=f=0;
?? ??? ??? ?while(f<5&&j<16)
?? ??? ??? ?{
?? ??? ??? ??? ?if(p[i][j]) f++;
?? ??? ??? ??? ?else f=0;
?? ??? ??? ??? ?j++;
?? ??? ??? ?}
?? ??? ??? ?if(f==5) return 1;
?? ??? ?}
?? ??? ?for(j=0;j<16;j++)
?? ??? ?{/*豎向*/
?? ??? ??? ?i=f=0;
?? ??? ??? ?while(f<5&&i<16)
?? ??? ??? ?{
?? ??? ??? ??? ?if(p[i][j]) f++;
?? ??? ??? ??? ?else f=0;
?? ??? ??? ??? ?i++;
?? ??? ??? ?}
?? ??? ??? ?if(f==5) return 1;
?? ??? ?}
?? ??? ?for(i=0;i<12;i++)
?? ??? ?{/*下斜*/
?? ??? ??? ?j=f=0;
?? ??? ??? ?while(f<5&&j<12)
?? ??? ??? ?{
?? ??? ??? ??? ?if(p[i+f][j+f]) f++;
?? ??? ??? ??? ?else {f=0;j++;}
?? ??? ??? ?}
?? ??? ??? ?if(f==5) return 1;
?? ??? ?}
?? ??? ?for(i=4;i<16;i++)
?? ??? ?{/*上斜*/
?? ??? ??? ?j=f=0;
?? ??? ??? ?while(f<5&&j<12)
?? ??? ??? ?{
?? ??? ??? ??? ?if(p[i-f][j+f]) f++;
?? ??? ??? ??? ?else {f=0;j++;}
?? ??? ??? ?}
?? ??? ??? ?if(f==5) return 1;
?? ??? ?}
?? ??? ?return 0;
?? ?}
?? ?void go(int x,int y)
?? ?{/*落子*/
?? ? ? ?p[y][x]=1;
?? ?}
?? ?friend int gochess(int);
}A,B;/**/
void gotoxy(int x, int y)?
{/*指定移動光標(biāo)*/
? ? COORD coord;?
? ? coord.X=x;?
? ? coord.Y=y;?
? ? SetConsoleCursorPosition (GetStdHandle(STD_OUTPUT_HANDLE), coord);?
}
void chessboard()
{/*畫棋盤格*/
?? ?gotoxy(0,0);
?? ?cout<<"┏━━━┯━━━┯━━━┯━━━┯━━━┯━━━┯━━━┯━━━┯━━━┯━━━┯━━━┯━━━┯━━━┯━━━┓\n";
?? ?for(int i=0;i<13;i++)
?? ?{
?? ??? ?cout<<"┃ ? │ ? │ ? │ ? │ ? │ ? │ ? │ ? │ ? │ ? │ ? │ ? │ ? │ ? ┃\n";
?? ? ? ?cout<<"┠───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┨\n";
?? ?}
?? ?cout<<"┃ ? │ ? │ ? │ ? │ ? │ ? │ ? │ ? │ ? │ ? │ ? │ ? │ ? │ ? ┃\n";
?? ?cout<<"┗━━━┷━━━┷━━━┷━━━┷━━━┷━━━┷━━━┷━━━┷━━━┷━━━┷━━━┷━━━┷━━━┷━━━┛\n";
}

void put(int n)
{
?? ?if(n==1)
?? ?{
?? ? ? ?SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED);
?? ? ? ?cout<<"●\b";
?? ?}
?? ?else?
?? ?{
?? ??? ?SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_BLUE);
?? ??? ?cout<<"◆\b";
?? ?}
}
int gochess(int n)
{/*下棋(移動+確認(rèn))*/
?? ?int i,k,w;
?? ?while(k=_getch())
?? ?{
?? ??? ?switch(k)
?? ??? ?{
?? ??? ?case 13:/*按回車鍵下子*/
?? ??? ??? ?if(n==1)?
?? ??? ??? ?{
?? ??? ??? ??? ?put(n);
?? ??? ??? ??? ?A.p[c.X/4][c.Y/2]=1;
?? ??? ??? ??? ?return 1;
?? ??? ??? ?}
?? ??? ??? ?else?
?? ??? ??? ?{
?? ??? ??? ??? ?put(n);
?? ??? ??? ??? ?B.p[c.X/4][c.Y/2]=1;
?? ??? ??? ? ? ?return 1;
?? ??? ??? ?}
?? ? ? ?case 224:
?? ??? ? ? ?w=_getch();
?? ??? ??? ?switch(w)
?? ??? ??? ?{/*上下左右移動*/
?? ??? ??? ?case 72:?
?? ??? ??? ??? ?for(i=1;c.Y-2*i>=0;i++)
?? ??? ??? ??? ??? ?if(!A.p[c.X/4][(c.Y-2*i)/2]&&!B.p[c.X/4][(c.Y-2*i)/2])
?? ??? ??? ??? ??? ? ? ?{c.Y-=2*i;break;}
?? ??? ??? ??? ?break;
?? ??? ??? ?case 80:
?? ??? ??? ??? ?for(i=1;c.Y+2*i<=28;i++)
?? ??? ??? ??? ??? ?if(!A.p[c.X/4][(c.Y+2*i)/2]&&!B.p[c.X/4][(c.Y+2*i)/2])
?? ??? ??? ??? ??? ? ? ?{c.Y+=2*i;break;}
?? ??? ??? ??? ?break;
?? ??? ??? ?case 75:
?? ??? ??? ??? ?for(i=1;c.X-4*i>=0;i++)
?? ??? ??? ??? ??? ?if(!A.p[(c.X-4*i)/4][c.Y/2]&&!B.p[(c.X-4*i)/4][c.Y/2])
?? ??? ??? ??? ??? ? ? ?{c.X-=4*i;break;}
?? ??? ??? ??? ?break;
?? ??? ??? ?case 77:
?? ??? ??? ??? ?for(i=1;c.X+4*i<=56;i++)
?? ??? ??? ??? ??? ?if(!A.p[(c.X+4*i)/4][c.Y/2]&&!B.p[(c.X+4*i)/4][c.Y/2])
?? ??? ??? ??? ??? ? ? ?{c.X+=4*i;break;}
?? ??? ??? ??? ?break;
?? ??? ??? ?}
?? ??? ??? ?gotoxy(c.X,c.Y);
?? ??? ?}
?? ?}
}
int game()
{/*游戲開始*/
?? ?chessboard(); ? ? ? ? ? ? ? ? //畫棋盤

?? ?A.newchess();B.newchess(); ? ?//定義Chess對象A、B
?? ?c.X=28;c.Y=14;
?? ?gotoxy(c.X,c.Y); ? ? ? ? ? ? ?//光標(biāo)居中
?? ?while(1)
?? ?{
?? ? ? ?gochess(1);
?? ??? ?if(A.win())?
?? ??? ? ? ?return 1;
?? ??? ?gochess(2);
?? ??? ?if(B.win())?
? ? ? ? ? ? return 2;
?? ?}
}
int main() ?
{ ?
?? ?gotoxy(70,5);
?? ?SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_BLUE|FOREGROUND_GREEN);
?? ?cout<<"五子棋游戲";
?? ?gotoxy(60,9);
?? ?SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_GREEN|FOREGROUND_RED);
?? ?cout<<"操作說明:";
?? ?gotoxy(60,11);
?? ?cout<<"選擇落點:←↑→↓";
?? ?gotoxy(60,12);
?? ?cout<<"落子:回車鍵(←┘)";
?? ?SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_BLUE|FOREGROUND_GREEN|FOREGROUND_RED);
?? ?int f;
?? ?while(f=game())
?? ?{
?? ??? ?gotoxy(60,16);
?? ??? ?SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_GREEN|FOREGROUND_RED);
?? ? ? ?if(f==1)
?? ??? ?{
?? ??? ??? ?SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED);
?? ??? ??? ?cout<<"紅方勝?。?;
?? ??? ?}
?? ??? ?else?
?? ??? ?{
?? ??? ??? ?SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_BLUE);
?? ??? ??? ?cout<<"藍(lán)方勝??!";
?? ??? ?}

?? ??? ?gotoxy(60,18);
?? ??? ?SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_GREEN|FOREGROUND_BLUE|FOREGROUND_RED);
?? ??? ?cout<<"按任意鍵開始新游戲";
?? ??? ?f=_getch();
?? ??? ?cout<<"\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b ? ? ? ? ? ? ? ? ? ? ";
?? ??? ?gotoxy(60,16);
?? ??? ?cout<<"\b\b\b\b\b\b\b\b\b ? ? ? ? ? ? ? ? ? ? ";
?? ?}
} ?

運(yùn)行結(jié)果

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • MFC控件之CListCtrl的應(yīng)用實例教程

    MFC控件之CListCtrl的應(yīng)用實例教程

    這篇文章主要介紹了MFC控件中CListCtrl的應(yīng)用方法,包括了針對表格的一些操作,是MFC中比較重要的一個控件類,需要的朋友可以參考下
    2014-08-08
  • C++獲取硬件參數(shù)的示例詳解

    C++獲取硬件參數(shù)的示例詳解

    這篇文章主要為大家詳細(xì)介紹了如何使用C++獲取硬件參數(shù),文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2024-11-11
  • Dashboard Interface 應(yīng)用實現(xiàn)操作

    Dashboard Interface 應(yīng)用實現(xiàn)操作

    Dashboard Server Remote Control Interface是一個關(guān)鍵的功能,它為用戶提供了通過TCP/IP協(xié)議遠(yuǎn)程控制機(jī)器人的能力,執(zhí)行包括開關(guān)機(jī)、加載程序、檢查機(jī)器人狀態(tài)以及設(shè)置機(jī)器人操作模式等多種操作,本文介紹Dashboard Interface 應(yīng)用操作,感興趣的朋友跟隨小編一起看看吧
    2024-08-08
  • c語言單鏈表尾添加的深入講解

    c語言單鏈表尾添加的深入講解

    這篇文章主要給大家介紹了關(guān)于c語言單項鏈表尾添加的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-12-12
  • 詳解C++之C++11的牛逼特性

    詳解C++之C++11的牛逼特性

    這篇文章主要介紹了C++之C++11的牛逼特性,本文通過實例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友參考下吧
    2020-09-09
  • c++棧內(nèi)存和堆內(nèi)存的基本使用小結(jié)

    c++棧內(nèi)存和堆內(nèi)存的基本使用小結(jié)

    本文主要介紹了c++棧內(nèi)存和堆內(nèi)存的基本使用小結(jié),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2024-07-07
  • C語言實現(xiàn)簡單推箱子小游戲

    C語言實現(xiàn)簡單推箱子小游戲

    這篇文章主要為大家詳細(xì)介紹了C語言實現(xiàn)推箱子小游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-11-11
  • C語言水仙花數(shù)的實現(xiàn)

    C語言水仙花數(shù)的實現(xiàn)

    這篇文章主要介紹了C語言水仙花數(shù)的實現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-01-01
  • C語言中字符串的內(nèi)存地址操作的相關(guān)函數(shù)簡介

    C語言中字符串的內(nèi)存地址操作的相關(guān)函數(shù)簡介

    這篇文章主要介紹了C語言中字符串的內(nèi)存地址操作的相關(guān)函數(shù),包括bcopy()函數(shù)和bzero()函數(shù)以及bcmp()函數(shù),需要的朋友可以參考下
    2015-08-08
  • C與C++動態(tài)分配二維數(shù)組的實現(xiàn)方法

    C與C++動態(tài)分配二維數(shù)組的實現(xiàn)方法

    下面小編就為大家?guī)硪黄狢與C++動態(tài)分配二維數(shù)組的實現(xiàn)方法。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-12-12

最新評論

都兰县| 荆州市| 武邑县| 阳东县| 尚志市| 兴城市| 苏尼特右旗| 红河县| 墨玉县| 林西县| 庆阳市| 德庆县| 浦东新区| 潜江市| 吉木乃县| 乾安县| 新余市| 开远市| 宁化县| 西盟| 四川省| 荣昌县| 龙川县| 句容市| 连江县| 太白县| 平潭县| 建水县| 北票市| 电白县| 民和| 龙川县| 夏河县| 额尔古纳市| 日照市| 岑巩县| 霍州市| 青州市| 成安县| 永嘉县| 福州市|