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

C語言實(shí)現(xiàn)簡單的三子棋

 更新時(shí)間:2020年11月11日 08:42:18   作者:一顆蘋果.  
這篇文章主要為大家詳細(xì)介紹了C語言實(shí)現(xiàn)簡單的三子棋,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

本文實(shí)例為大家分享了C語言實(shí)現(xiàn)簡單三子棋游戲的具體代碼,供大家參考,具體內(nèi)容如下

一、主要思想

1、創(chuàng)建一個(gè)3*3的棋盤(使用字符數(shù)組)
2、初始化棋盤(用空格填充)
3、打印棋盤(使其有可見的邊框)
4、玩家落子,用x表示(檢驗(yàn)是否越界,是否已經(jīng)落子,是否贏)
5、電腦落子,用o表示(檢驗(yàn)是否已經(jīng)落子,是否贏)  注:電腦在有效范圍內(nèi)隨機(jī)落子,使用當(dāng)前時(shí)間戳設(shè)置隨機(jī)種子即srand(time(0))
6、三種情況:玩家贏,電腦贏,和棋

二、代碼實(shí)現(xiàn)

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
//定義宏,棋盤的最大行數(shù)和最大列數(shù)為3
#define MAX_ROW 3
#define MAX_COL 3
 
//無論是玩家落子還是電腦落子,都需確定落子的行和列,以此確定在棋盤上的位置
 
//玩家落子
//玩家輸入之后,需要檢驗(yàn)是否輸入越界,該位置是否已經(jīng)落子
//若無這兩種情況,就將該位置賦值為'x',否則重新輸入
char playermove(char chessboard[MAX_ROW][MAX_COL])
{
 int row = 0;
 int col = 0;
 while (1){
 printf("請輸入您落子的位置:(row col)");
 scanf("%d %d", &row, &col);
 //校驗(yàn)
 //校驗(yàn)輸入是否輸入有誤
 if (row < 0 || row >= MAX_ROW || col<0 || col>=MAX_COL){
 printf("您的輸入越界!!\n");
 continue;
 }else if (chessboard[row][col]!=' '){
 printf("該位置已落子!!\n");
 continue;
 }else{
 chessboard[row][col] = 'x';
 return chessboard[row][col];
 }
 
 }
}
 
//電腦落子
//需要檢驗(yàn)該位置是否落子(無需檢驗(yàn)是否越界,因?yàn)槲覀冊O(shè)置的落子范圍為有效范圍)
//若無以上情況,就將該位置賦值為'o',否則,重新獲取隨機(jī)值
void computermove(char chessboard[MAX_ROW][MAX_COL])
{
 while (1){
 int row = rand() % MAX_ROW;   //獲取一個(gè)0~2范圍內(nèi)的隨機(jī)行數(shù)
 int col = rand() % MAX_COL;   //獲取一個(gè)0~2范圍內(nèi)的隨機(jī)列數(shù)
 //校驗(yàn)落子位置是否已經(jīng)落子
 if (chessboard[row][col] != ' '){
 continue;
 }
 chessboard[row][col] = 'o';
 break;
 }
 
}
 
//判斷是否為和棋,即判斷棋盤是否滿
//找到空格代表未滿,找不到,則滿了(因?yàn)槲覀兂跏蓟臅r(shí)候?qū)⑵灞P初始化為空格' ')
//滿返回1,未滿返回0
char isFull(char chessboard[MAX_ROW][MAX_COL])
{
 for (int row = 0; row < MAX_ROW; row++){
 for (int col = 0; col < MAX_COL; col++){
 //找到空格
 if (chessboard[row][col] == ' '){
 return 0;
 }
 }
 }
 //未找到,即滿了
 return 1;
}
 
//判斷是否贏
//'x'表示玩家獲勝
//'o'表示電腦獲勝
//' '表示勝負(fù)未分
//'h'表示和棋
char isWin(char chessboard[MAX_ROW][MAX_COL])
{
//同一行相同
//注意:相同應(yīng)排除空格相同的情況,以下同
 for (int row = 0; row < MAX_ROW; row++){
 if (chessboard[row][0]!=' '
 &&(chessboard[row][0] ==chessboard[row][1])
 &&(chessboard[row][0]== chessboard[row][2])){
 return chessboard[row][0];
 }
 }
//同一列相同
 for (int col = 0; col < MAX_COL; col++){
 if (chessboard[0][col]!=' '
 &&(chessboard[0][col] == chessboard[1][col])
 &&(chessboard[0][col] == chessboard[2][col])){
 return chessboard[0][col];
 }
 }
//對角線相同
 if (chessboard[0][0] != ' '
 && (chessboard[0][0] == chessboard[1][1])
 && (chessboard[0][0] == chessboard[2][2])){
 return chessboard[0][0];
 }
 if (chessboard[0][2] != ' ' 
 &&(chessboard[0][2] == chessboard[1][1])
 &&(chessboard[0][2] == chessboard[2][0])){
 return chessboard[0][2];
 }
//和棋
 if (isFull(chessboard)){
 return 'h';
 }
 return ' ';
}
 
//初始化棋盤,初始化為空格' '
void init(char chessboard[MAX_ROW][MAX_COL])
{
 for (int row = 0; row < MAX_ROW; row++){
 for (int col = 0; col < MAX_COL; col++){
 chessboard[row][col] = ' ';
 }
 }
}
//打印棋盤
void printchessboard(char chessboard[MAX_ROW][MAX_COL])
{
 printf("+---+---+---+\n");
 for (int row = 0; row < MAX_ROW; row++){
 printf("| %c | %c | %c |\n", chessboard[row][0], chessboard[row][1], chessboard[row][2]);
 printf("+---+---+---+\n");
 }
 
}
 
//游戲
void game()
{
 char chessboard[MAX_ROW][MAX_COL] = {0};
 init(chessboard);//初始化棋盤
 char winner = ' ';
 while (1){
 printchessboard(chessboard);//打印棋盤
 playermove(chessboard);//玩家落子
 //校驗(yàn),是否贏是否和棋
 winner = isWin(chessboard);
 if (winner != ' '){
 break;
 }
 computermove(chessboard);//電腦落子
 winner = isWin(chessboard);
 if (winner != ' '){
 break;
 }
 }
 if (winner == 'x'){
 printchessboard(chessboard);
 printf("恭喜您贏了!\n");
 }else if (winner == 'o'){
 printchessboard(chessboard);
 printf("很遺憾您輸了!\n");
 }else if (winner == 'h'){
 printchessboard(chessboard);
 printf("和棋!您和電腦棋技相當(dāng)~\n");
 }
}
 
//菜單
int menue(int choice)
{
 printf("************************\n");
 printf("1.開始游戲\n");
 printf("0.結(jié)束游戲\n");
 printf("************************\n");
 printf("請輸入您的選擇:");
 scanf("%d", &choice);
 return choice;
}
 
//主函數(shù)
int main()
{
 srand(time(0));
 int choice = 0;
 while (1){
 choice=menue(choice);
 if (choice == 1){
 game();
 }else if (choice == 0){
 break;
 }else{
 printf("您的輸入有誤,請重新輸入\n");
 continue;
 }
 }
 system("pause");
 return 0;
}

三、運(yùn)行結(jié)果

大概框架如此,也可以進(jìn)行優(yōu)化,比如system("cls")清屏等

更多有趣的經(jīng)典小游戲?qū)崿F(xiàn)專題,分享給大家:

C++經(jīng)典小游戲匯總

python經(jīng)典小游戲匯總

python俄羅斯方塊游戲集合

JavaScript經(jīng)典游戲 玩不停

java經(jīng)典小游戲匯總

javascript經(jīng)典小游戲匯總

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

相關(guān)文章

  • C語言 小游戲打磚塊實(shí)現(xiàn)流程詳解

    C語言 小游戲打磚塊實(shí)現(xiàn)流程詳解

    打磚塊游戲是一種動(dòng)作電子游戲的名稱。玩家操作一根螢?zāi)簧纤降摹鞍糇印保屢活w不斷彈來彈去的“球”在撞擊作為過關(guān)目標(biāo)消去的“磚塊”的途中不會(huì)落到螢?zāi)坏紫?。球碰到磚塊、棒子與底下以外的三邊會(huì)反彈,落到底下會(huì)失去一顆球,把磚塊全部消去就可以破關(guān)
    2021-11-11
  • 創(chuàng)建二叉樹 二叉樹如何刪除節(jié)點(diǎn)操作教程

    創(chuàng)建二叉樹 二叉樹如何刪除節(jié)點(diǎn)操作教程

    本文將詳細(xì)介紹二叉樹的創(chuàng)建,節(jié)點(diǎn)刪除,節(jié)點(diǎn)增加等一系列操作方法,需要的朋友可以參考下
    2012-12-12
  • Windows下Qt讀取系統(tǒng)的內(nèi)存、CPU、GPU等使用信息的示例代碼

    Windows下Qt讀取系統(tǒng)的內(nèi)存、CPU、GPU等使用信息的示例代碼

    在當(dāng)今計(jì)算機(jī)應(yīng)用廣泛的領(lǐng)域中,了解系統(tǒng)的內(nèi)存、CPU和GPU使用情況是非常重要的,本文將介紹如何使用Qt和Windows API來讀取系統(tǒng)的內(nèi)存、CPU和GPU使用詳細(xì)信息,將提供一個(gè)完整的示例代碼,需要的朋友可以參考下
    2024-01-01
  • Qt音視頻開發(fā)之利用ffmpeg實(shí)現(xiàn)解碼本地?cái)z像頭

    Qt音視頻開發(fā)之利用ffmpeg實(shí)現(xiàn)解碼本地?cái)z像頭

    一開始用ffmpeg做的是視頻流的解析,后面增加了本地視頻文件的支持,到后面發(fā)現(xiàn)ffmpeg也是支持本地?cái)z像頭設(shè)備的,所以本文就來用ffmpeg實(shí)現(xiàn)解碼本地?cái)z像頭功能吧
    2023-03-03
  • C語言中數(shù)據(jù)如何存儲(chǔ)進(jìn)內(nèi)存揭秘

    C語言中數(shù)據(jù)如何存儲(chǔ)進(jìn)內(nèi)存揭秘

    使用編程語言進(jìn)行編程時(shí),需要用到各種變量來存儲(chǔ)各種信息。變量保留的是它所存儲(chǔ)的值的內(nèi)存位置。這意味著,當(dāng)您創(chuàng)建一個(gè)變量時(shí),就會(huì)在內(nèi)存中保留一些空間。您可能需要存儲(chǔ)各種數(shù)據(jù)類型的信息,操作系統(tǒng)會(huì)根據(jù)變量的數(shù)據(jù)類型,來分配內(nèi)存和決定在保留內(nèi)存中存儲(chǔ)什么
    2022-08-08
  • C++中的構(gòu)造函數(shù)詳解

    C++中的構(gòu)造函數(shù)詳解

    這篇文章主要介紹了C++ 中構(gòu)造函數(shù)的實(shí)例詳解的相關(guān)資料,希望通過本文能幫助到大家,讓大家理解掌握這部分內(nèi)容,需要的朋友可以參考下
    2021-09-09
  • 基于MFC實(shí)現(xiàn)多線程進(jìn)度條

    基于MFC實(shí)現(xiàn)多線程進(jìn)度條

    這篇文章主要為大家詳細(xì)介紹了如何基于MFC實(shí)現(xiàn)多線程進(jìn)度條效果,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2025-01-01
  • C語言實(shí)現(xiàn)Linux下的socket文件傳輸實(shí)例

    C語言實(shí)現(xiàn)Linux下的socket文件傳輸實(shí)例

    這篇文章主要介紹了C語言實(shí)現(xiàn)Linux下的socket文件傳輸?shù)姆椒?較為詳細(xì)的分析了C語言文件Socket文件傳輸客戶端與服務(wù)器端相關(guān)實(shí)現(xiàn)技巧,需要的朋友可以參考下
    2015-06-06
  • xxx_cast類型轉(zhuǎn)換的實(shí)現(xiàn)方法

    xxx_cast類型轉(zhuǎn)換的實(shí)現(xiàn)方法

    下面小編就為大家?guī)硪黄獂xx_cast類型轉(zhuǎn)換的實(shí)現(xiàn)方法。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2016-12-12
  • Visual Studio 2022配置fftw第三方庫的詳細(xì)過程

    Visual Studio 2022配置fftw第三方庫的詳細(xì)過程

    FFTW是一個(gè)可以進(jìn)行可變長度一維或多維DFT的開源C程序庫,是目前最快的FFT算法實(shí)現(xiàn),本文簡述了在Windows平臺上,如何在C++中調(diào)用FFTW,所使用的IDE為Visual Studio 2022,感興趣的朋友一起看看吧
    2024-06-06

最新評論

华容县| 枣强县| 镇巴县| 商南县| 海林市| 莆田市| 遂宁市| 谢通门县| 通化县| 盐山县| 安岳县| 绥芬河市| 西畴县| 安远县| 呼图壁县| 阜新| 阿尔山市| 万山特区| 洮南市| 道孚县| 陇西县| 榆社县| 诸城市| 华容县| 渝中区| 依安县| 沁阳市| 桃园市| 五河县| 石城县| 霍邱县| 扬中市| 股票| 清苑县| 铁岭县| 陈巴尔虎旗| 万宁市| 云南省| 苍山县| 大庆市| 平利县|