欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

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

設(shè)計(jì)思路

定義一個(gè)Chess類,用16*16的二維數(shù)組的來(lái)表示一方棋手在棋局上的落子狀態(tài)。
通過(guò)控制鍵盤←↑→↓來(lái)選擇落點(diǎn),getch()函數(shù)可獲得用戶的鍵盤輸入,用coord控制臺(tái)屏幕上的坐標(biāo)。
勝利條件:Chess類的成員函數(shù)win(),每落一個(gè)棋子進(jìn)行win()的判斷,當(dāng)橫向、豎向或斜向存在同一顏色的連續(xù)五個(gè)棋子時(shí),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)?
{/*指定移動(dòng)光標(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)
{/*下棋(移動(dòng)+確認(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)
?? ??? ??? ?{/*上下左右移動(dòng)*/
?? ??? ??? ?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對(duì)象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<<"操作說(shuō)明:";
?? ?gotoxy(60,11);
?? ?cout<<"選擇落點(diǎn):←↑→↓";
?? ?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é)果

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

相關(guān)文章

  • C++實(shí)現(xiàn)數(shù)字雨效果

    C++實(shí)現(xiàn)數(shù)字雨效果

    這篇文章主要為大家詳細(xì)介紹了C++實(shí)現(xiàn)數(shù)字雨效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-08-08
  • C語(yǔ)言中6組指針和自增運(yùn)算符結(jié)合方式的運(yùn)算順序問(wèn)題

    C語(yǔ)言中6組指針和自增運(yùn)算符結(jié)合方式的運(yùn)算順序問(wèn)題

    本文通過(guò)代碼實(shí)現(xiàn)分析了6種組合:* p++,(* p)++,* (p++),++* p,++( * p), * (++p),需要的朋友可以參考下
    2015-07-07
  • c語(yǔ)言內(nèi)存泄露示例解析

    c語(yǔ)言內(nèi)存泄露示例解析

    從1988年著名的莫里斯蠕蟲 攻擊到有關(guān) Flash Player 和其他關(guān)鍵的零售級(jí)程序的最新安全警報(bào)都與緩沖區(qū)溢出有關(guān):“大多數(shù)計(jì)算機(jī)安全漏洞都是緩沖區(qū)溢出”,Rodney Bates 在 2004 年寫道
    2013-09-09
  • C++異步調(diào)用方法詳解

    C++異步調(diào)用方法詳解

    這篇文章主要介紹了C++異步調(diào)用方法,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-05-05
  • VC小技巧匯總之對(duì)話框技巧

    VC小技巧匯總之對(duì)話框技巧

    這篇文章主要介紹了VC小技巧匯總之對(duì)話框技巧,非常實(shí)用!對(duì)于進(jìn)行VC開發(fā)有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2014-07-07
  • C++中基類和派生類之間的轉(zhuǎn)換實(shí)例教程

    C++中基類和派生類之間的轉(zhuǎn)換實(shí)例教程

    這篇文章主要介紹了C++中基類和派生類之間的轉(zhuǎn)換,有助于深入理解C++面向?qū)ο蟪绦蛟O(shè)計(jì),需要的朋友可以參考下
    2014-08-08
  • C++有限狀態(tài)機(jī)實(shí)現(xiàn)詳解

    C++有限狀態(tài)機(jī)實(shí)現(xiàn)詳解

    這篇文章主要為大家詳細(xì)介紹了C++有限狀態(tài)機(jī)的相關(guān)資料,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-10-10
  • C++獲取當(dāng)前進(jìn)程IAT的方法

    C++獲取當(dāng)前進(jìn)程IAT的方法

    這篇文章主要介紹了C++獲取當(dāng)前進(jìn)程IAT的方法,實(shí)例講述了IAT(導(dǎo)入地址表)的獲取方法,在Windows應(yīng)用程序開發(fā)中有著非常實(shí)用的應(yīng)用價(jià)值,需要的朋友可以參考下
    2014-10-10
  • C C++ LeetCode題解在二叉樹中增加一行示例詳解

    C C++ LeetCode題解在二叉樹中增加一行示例詳解

    這篇文章主要為大家介紹了C C++ LeetCode題解在二叉樹中增加一行示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-10-10
  • C++中的Switch 語(yǔ)句詳情

    C++中的Switch 語(yǔ)句詳情

    在日常的開發(fā)當(dāng)中,我們經(jīng)常會(huì)遇到一種情況,我們用一個(gè)變量表示狀態(tài)。比如關(guān)閉-激活-完成,當(dāng)我們需要判斷狀態(tài)的時(shí)候,就需要羅列if-else語(yǔ)句。今天這篇文章我們就來(lái)介紹一下C++ Switch 語(yǔ)句,需要的朋友可以參考一下
    2021-11-11

最新評(píng)論