C++实现简单的控制台小游戏——五子棋
实现控制台的五子棋游戏主要包括三部分内容:
1.绘制五子棋的棋盘;
2.player双方在制定的位置落下棋子;
3.判断是否获胜。
按照这个总体思路,完成控制台程序的代码如下:
绘制棋盘的函数如下(这里实现的是一个16*16的棋盘绘制):
void pan(void) { //1.打印五子棋棋盘的第一行 for(int i=0;i<17;i++) { if(0==i) cout<<" "; else cout<<hex<<i-1<<" "; } cout<<endl; //2.打印五子棋棋盘的剩余内容 for(int i=0;i<16;i++) { cout<<hex<<i<<" "; for(int j=0;j<16;j++) { if(0==piece[i][j]) { cout<<"* "; } else if(1==piece[i][j]) { cprintf("@",10); cout<<" "; } else { cprintf("0",12); cout<<" "; } } cout<<endl; } }
玩家下棋的函数如下:
void play(void) { int player=0; //代表黑方 while(1) { int x,y; //表示落子坐标 if(0==player) { cout<<"请黑方输入落子坐标(坐标值在0-15之间):"<<endl; cin>>x>>y; piece[x][y]=1; //重新绘制棋盘 pan(); //判断是否获胜 if(1==judge(player+1)) { cout<<"黑方获胜,游戏结束!"<<endl; break; } //切换下子方 player=1; //代表白方 } if(1==player) { cout<<"请白方输入落子坐标(坐标值在0-15之间):"<<endl; cin>>x>>y; piece[x][y]=2; //重新绘制棋盘 pan(); //判断是否获胜 if(1==judge(player+1)) { cout<<"白方获胜,游戏结束!"<<endl; break; } //切换下子方 player=0; } } }
判断是否获胜的函数如下:
//判断游戏获胜的函数 int judge(int player) { //1.判断横向 for(int i=0;i<16;i++) { for(int j=0;j<12;j++) { if(piece[i][j] & piece[i][j+1] & piece[i][j+2] & piece[i][j+3] & piece[i][j+4] == player) return 1; //代表游戏获胜 } } //2.判断纵向 for(int i=0;i<16;i++) { for(int j=0;j<12;j++) { if(piece[j][i] & piece[j+1][i] & piece[j+2][i] & piece[j+3][i] & piece[j+4][i] == player) return 1; //代表游戏获胜 } } //3.判断坐上到右下 //for(int i=0;i<16;i++) //{ for(int j=0;j<12;j++) { if(piece[j][j] & piece[j+1][j+1] & piece[j+2][j+2] & piece[j+3][j+3] & piece[j+4][j+4] == player) return 1; //代表游戏获胜 } //} //4.判断右上到左下 for(int j=0;j<12;j++) { if(piece[j][16-j] & piece[j+1][16-(j+1)] & piece[j+2][16-(j+2)] & piece[j+3][16-(j+3)] & piece[j+4][16-(j+4)] == player) return 1; //代表游戏获胜 } return 0; //代表没有获胜 }
主函数如下:
#include<iostream> using namespace std; //定义一个维维数组保存棋子的坐标 int piece[16][16]; int main() { //绘制棋盘 pan(); //开始游戏 play(); system("pause"); return 0; }
以上就是完成控制台操作的五子棋游戏主要内容。
另外,如果想在操作控制台时内容显示得更好看点,可以添加下面的函数来改变文本显示得颜色:
void cprintf(char* str, WORD color, ...) { WORD colorOld; HANDLE handle = ::GetStdHandle(STD_OUTPUT_HANDLE); CONSOLE_SCREEN_BUFFER_INFO csbi; GetConsoleScreenBufferInfo(handle, &csbi); colorOld = csbi.wAttributes; SetConsoleTextAttribute(handle, color); cout << str; SetConsoleTextAttribute(handle, colorOld); }
相关属性说明如下:
| wAttributes | 颜色 | 对应的值 |
| FOREGROUND_BLUE | 字体颜色:蓝 | 1 |
| FOREGROUND_GREEN | 字体颜色:绿 | 2 |
| FOREGROUND_RED | 字体颜色:红 | 4 |
| FOREGROUND_INTENSITY | 前景色高亮显示 | 8 |
| BACKGROUND_BLUE | 背景颜色:蓝 | 16 |
| BACKGROUND_GREEN | 背景颜色:绿 | 32 |
| BACKGROUND_RED |
背景颜色:红
|
64 |
| BACKGROUND_INTENSITY | 背景色高亮显示 | 128 |
浙公网安备 33010602011771号