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

C++控制臺實現(xiàn)簡單人機對弈井字棋

 更新時間:2022年05月16日 08:27:25   作者:小雪菜本菜  
這篇文章主要為大家詳細介紹了C++控制臺實現(xiàn)簡單人機對弈井字棋,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下

本文實例為大家分享了C++實現(xiàn)簡單人機對弈井字棋的具體代碼,供大家參考,具體內(nèi)容如下

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 << "\t1\t2\t3\n";
?? ?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行的內(nè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列的內(nèi)容返回
?? ?}
?? ?if (board[0][0] == board[1][1] && board[1][1] == board[2][2] && board[0][0] != '-')//判斷捺對角線(\)的內(nèi)容是否全都相同
?? ??? ?return board[0][0];
?? ?else if (board[0][2] == board[1][1] && board[1][1] == board[2][0] && board[0][2] != '-')//判斷撇對角線(/)的內(nèi)容是否全都相同
?? ??? ?return board[0][2];
?? ?else if (isDone(row,col))//判斷是否是平局,如果是平局返回‘q'
?? ??? ?return 'q';
?? ?else //判斷是否還未產(chǎn)生游戲結(jié)果,如果還未產(chǎn)生游戲結(jié)果返回‘-'
?? ??? ?return '-';
}
?
void Game::getWinner()
{
?? ?char a;
?? ??? ?do
?? ??? ?{
?? ??? ??? ?print();?? ?//屏幕上打印一個棋盤
?? ??? ??? ?makeMove();?? ?//打印出棋盤之后,玩家開始下棋
?? ??? ??? ?a = getCurrentPlayer();?? ? //玩家下完棋后,開始判斷游戲結(jié)果
?? ??? ??? ?if (a != '-')?? ? ?// ?‘-':沒人贏
?? ??? ??? ?{
?? ??? ??? ??? ?break;?? ?//如果已經(jīng)分出勝負,跳出循環(huán)
?? ??? ??? ?}
?? ??? ??? ?computer_move(row,col);?? ?//如果沒有分出勝負,電腦下棋
?? ??? ??? ?a = getCurrentPlayer();?? ?//下完之后判斷游戲結(jié)果
?? ??? ?} 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)
{
?
?? ?//判斷數(shù)組當中每一個元素是否有'-',如果有'-',說明沒有滿,返回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] == '-')?? ? ? //判斷玩家輸入的位置是否已經(jīng)被占
?? ??? ??? ??? ?{
?? ??? ??? ??? ??? ?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));//利用函數(shù)生成隨機數(shù)
?? ?do
?? ?{
?? ??? ?int x = rand() % row;//控制隨機數(shù)小于3并把結(jié)果賦給橫坐標
?? ??? ?int y = rand() % col;//控制隨機數(shù)小于3并把結(jié)果賦給縱坐標
?? ??? ?if (board[x][y] == '-')//判斷電腦選擇的位置是否被占
?? ??? ?{
?? ??? ??? ?board[x][y] = 'O';//將電腦下棋的位置用‘O'占用
?? ??? ??? ?break;
?? ??? ?}
?? ?} while (1);
}

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

相關文章

最新評論