<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
本文範例為大家分享了C++實現簡單人機對弈井字棋的具體程式碼,供大家參考,具體內容如下
main.cpp
#include"TicTacToe.h" int main() { Game game; game.getWinner(); return 0; }
TicTacToe.h
#pragma once #include<iostream> using namespace std; #include<array> #include<ctime> class Game { public: Game(); void print(); char getCurrentPlayer(); void getWinner(); bool isDone(int row,int col); void makeMove(); void computer_move(int row, int col); protected: array <array< char, 3 >, 3 > board; int row; int col; }; TicTacToe.cpp #include"TicTacToe.h" Game::Game() { for (int i = 0; i < 3; i++) { for (int j = 0; j < 3; j++) { board[i][j] = '-'; } } this->col = 3; this->row = 3; } void Game::print() { cout << "t1t2t3n"; for (int i = 0; i < 3; i++) { cout << i + 1; for (int j = 0; j < 3; j++) { cout << "t"; cout << board[i][j]; } cout << endl; } } char Game::getCurrentPlayer() { int i = 0; for (; i < 3; i++)//判斷第i行是否全都相同 { if (board[i][0] == board[i][1] && board[i][1] == board[i][2] && board[i][0] != '-') return board[i][0];//將第i行的內容返回 } for (i = 0; i < 3; i++)//判斷第i列是否全都相同 { if (board[0][i] == board[1][i] && board[1][i] == board[2][i] && board[0][i] != '-') return board[0][i];//將第i列的內容返回 } if (board[0][0] == board[1][1] && board[1][1] == board[2][2] && board[0][0] != '-')//判斷捺對角線()的內容是否全都相同 return board[0][0]; else if (board[0][2] == board[1][1] && board[1][1] == board[2][0] && board[0][2] != '-')//判斷撇對角線(/)的內容是否全都相同 return board[0][2]; else if (isDone(row,col))//判斷是否是平局,如果是平局返回‘q' return 'q'; else //判斷是否還未產生遊戲結果,如果還未產生遊戲結果返回‘-' return '-'; } void Game::getWinner() { char a; do { print(); //螢幕上列印一個棋盤 makeMove(); //列印出棋盤之後,玩家開始下棋 a = getCurrentPlayer(); //玩家下完棋後,開始判斷遊戲結果 if (a != '-') // ‘-':沒人贏 { break; //如果已經分出勝負,跳出迴圈 } computer_move(row,col); //如果沒有分出勝負,電腦下棋 a = getCurrentPlayer(); //下完之後判斷遊戲結果 } while (a == '-'); if (a == 'X') //判斷玩家是否獲勝:‘x'代表玩家獲勝 printf("Congratulations,you win!n"); else if (a == 'O') //判斷玩家是否獲勝:‘o'代表電腦獲勝 printf("It's too bad,you lose!n"); else //判斷是否是平局 printf("Draw!n"); } bool Game::isDone(int row,int col) { //判斷陣列當中每一個元素是否有'-',如果有'-',說明沒有滿,返回0;否則返回1 int i, j; for (i = 0; i < row; i++) { for (j = 0; j < col; j++) if (board[i][j] == '-') //判斷是否有'-' return 0; //有'-'返回0 } return 1; //沒有'-'返回1 } void Game::makeMove() { int x, y;//先定義兩個變數,以便接收玩家下棋的座標 do { printf("Please input your coordinate:(x,y)!");//提示玩家下棋 scanf("%d%d", &x, &y); //接收玩家所下的位置 if (x >= 1 && x <= 3 && y >= 1 && y <= 3) //判斷玩家輸入座標是否有誤 if (board[x - 1][y - 1] == '-') //判斷玩家輸入的位置是否已經被佔 { board[x - 1][y - 1] = 'X'; //將玩家輸入的位置用‘x'佔用 break; } else//玩家輸入位置被佔,提示玩家重新輸入位置 printf("Error!This place was be used!n"); else//玩家輸入座標有誤,直接提示玩家error printf("Error!"); } while (1); } void Game::computer_move(int row,int col) { srand((unsigned long)time(NULL));//利用函數生成亂數 do { int x = rand() % row;//控制亂數小於3並把結果賦給橫座標 int y = rand() % col;//控制亂數小於3並把結果賦給縱座標 if (board[x][y] == '-')//判斷電腦選擇的位置是否被佔 { board[x][y] = 'O';//將電腦下棋的位置用‘O'佔用 break; } } while (1); }
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援it145.com。
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45