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

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)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • C語言?詳解如何刪除有序數(shù)組中的重復(fù)項

    C語言?詳解如何刪除有序數(shù)組中的重復(fù)項

    數(shù)組不擅長插入(添加)和刪除元素。數(shù)組的優(yōu)點在于它是連續(xù)的,所以查找數(shù)據(jù)速度很快。但這也是它的一個缺點。正因為它是連續(xù)的,所以當插入一個元素時,插入點后所有的元素全部都要向后移;而刪除一個元素時,刪除點后所有的元素全部都要向前移
    2022-03-03
  • C語言實現(xiàn)靜態(tài)版通訊錄的代碼分享

    C語言實現(xiàn)靜態(tài)版通訊錄的代碼分享

    這篇文章主要為大家詳細介紹了如何利用C語言實現(xiàn)一個簡單的靜態(tài)版通訊錄,主要運用了結(jié)構(gòu)體,一維數(shù)組,函數(shù),分支與循環(huán)語句等等知識,需要的可以參考一下
    2023-01-01
  • 詳解C語言中常用的失敗退出和成功返回

    詳解C語言中常用的失敗退出和成功返回

    在 C 語言中,封裝函數(shù)時,我們通常需要判斷函數(shù)調(diào)用是否成功,并據(jù)此采取不同的操作,例如,在調(diào)用系統(tǒng)函數(shù)或庫函數(shù)時,我們通常會使用一些錯誤處理機制,來輸出錯誤信息、退出程序或返回不同的狀態(tài),以下是如何參考使用這些錯誤處理機制的示例,需要的朋友可以參考下
    2024-12-12
  • C++布隆過濾器的使用示例

    C++布隆過濾器的使用示例

    寧可錯殺一千,也不放過一個,這是布隆過濾器的特點,本文主要介紹了C++布隆過濾器的使用示例,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-09-09
  • C++深入探究引用的本質(zhì)與意義

    C++深入探究引用的本質(zhì)與意義

    引用是C++一個很重要的特性,顧名思義是某一個變量或?qū)ο蟮膭e名,對引用的操作與對其所綁定的變量或?qū)ο蟮牟僮魍耆葍r,這篇文章主要給大家總結(jié)介紹了C++中引用的相關(guān)知識點,需要的朋友可以參考下
    2022-04-04
  • 基于epoll的多線程網(wǎng)絡(luò)服務(wù)程序設(shè)計

    基于epoll的多線程網(wǎng)絡(luò)服務(wù)程序設(shè)計

    這篇文章主要為大家詳細介紹了基于epoll的多線程網(wǎng)絡(luò)服務(wù)程序設(shè)計,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-08-08
  • C語言全面細致精講操作符的使用

    C語言全面細致精講操作符的使用

    C?語言提供了豐富的操作符,有:算術(shù)操作符,移位操作符,位操作符,賦值操作符,單目操作符,關(guān)系操作符,邏輯操作符,條件操作符等。接下了讓我們詳細了解掌握它
    2022-05-05
  • C++使用easyX庫實現(xiàn)三星環(huán)繞效果流程詳解

    C++使用easyX庫實現(xiàn)三星環(huán)繞效果流程詳解

    EasyX是針對C/C++的圖形庫,可以幫助使用C/C++語言的程序員快速上手圖形和游戲編程。這篇文章主要介紹了C++使用easyX庫實現(xiàn)三星環(huán)繞效果,需要的可以參考一下
    2022-10-10
  • 詳解C++編程中的私有繼承和公有繼承

    詳解C++編程中的私有繼承和公有繼承

    這篇文章主要介紹了詳解C++編程中的私有繼承和公有繼承,是C++入門學(xué)習(xí)中的基礎(chǔ)知識,需要的朋友可以參考下
    2015-09-09
  • C++實現(xiàn)冒泡排序(BubbleSort)

    C++實現(xiàn)冒泡排序(BubbleSort)

    這篇文章主要為大家詳細介紹了C++實現(xiàn)冒泡排序,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-04-04

最新評論

五峰| 固镇县| 博客| 凤阳县| 门头沟区| 庄浪县| 巴楚县| 资阳市| 偏关县| 连城县| 乾安县| 穆棱市| 江源县| 安塞县| 伊金霍洛旗| 玉山县| 荣昌县| 灵石县| 安溪县| 伽师县| 西贡区| 定州市| 乌拉特中旗| 阿城市| 运城市| 乌鲁木齐市| 滕州市| 苏尼特右旗| 澄城县| 万全县| 金阳县| 阿巴嘎旗| 惠水县| 景泰县| 满城县| 天台县| 巨鹿县| 嘉鱼县| 忻州市| 雷州市| 南安市|