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

C語(yǔ)言實(shí)現(xiàn)三子棋簡(jiǎn)單小游戲

 更新時(shí)間:2021年09月02日 13:12:08   作者:機(jī)械狗pp  
這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言實(shí)現(xiàn)三子棋簡(jiǎn)單小游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

三子棋 ,也叫井字棋,是一款大家都玩過(guò)的經(jīng)典小游戲,也是一個(gè)適合初學(xué)c語(yǔ)言的小伙伴練練手的小項(xiàng)目。

1.整個(gè)棋盤采用二維數(shù)組存儲(chǔ),下棋時(shí)只要獲取到x,y兩個(gè)方向的坐標(biāo)訪問(wèn)二維數(shù)組中的元素改變存儲(chǔ)的字符串樣式。

2.判斷輸贏或平局,直接窮舉就行了,判斷每行、每列、和對(duì)角線是否有三個(gè)棋子相連??稍O(shè)置一個(gè)帶返回值的檢查函數(shù),根據(jù)不一樣的返回值進(jìn)行不同操作。

3.其余的頁(yè)面菜單,和棋盤打印。只需要合理利用循環(huán)和判斷來(lái)打印相關(guān)內(nèi)容,很容易就能實(shí)現(xiàn)了。

效果展示

附上全部源碼,大家可以在自己的編譯器上跑一下試一試。

#define _CRT_SECURE_NO_WARNINGS
#define ROW 3
#define COL 3
#include<stdio.h>
#include<time.h>
#include<stdlib.h>
void InitBoard(char board[ROW][COL], int row, int col)
{
 int i = 0;
 for (i = 0; i < row; i++)
 {
  int j = 0;
  for (j = 0; j < col; j++)
  {
   board[i][j] = ' ';
  }
 }
}
void PrintBoard(char board[ROW][COL], int row, int col)
{
 int i = 0;
 for (i = 0; i < row; i++)
 {
  //打印數(shù)據(jù)
  int j = 0;
  for (j = 0; j < col; j++)
  {
   if (j == col - 1)
   {
    printf(" %c ", board[i][j]);
   }
   else
    printf(" %c |", board[i][j]);
  }
  printf("\n");
  //打印分割行
  if (i < row - 1)
  {
   for (j = 0; j < col; j++)
   {
    if (j == col - 1)
    {
     printf("---");
    }
    else
     printf("---|");
   }
   printf("\n");
  }
 }
}
void PlayerMove(char board[ROW][COL], int row, int col)
{
 int x = 0, y = 0;
 while (1)
 {
  printf("輸入要走的坐標(biāo):");
  scanf("%d %d", &x, &y);
  if (x >= 1 && x <= row && y >= 1 && y <= row)
  {
   if (board[x - 1][y - 1] == ' ')
   {
    board[x - 1][y - 1] = '*';
    return;
   }
   else
   {
    printf("該位置已有棋子,請(qǐng)重新選擇\n");
   }
  }
  else
  {
   printf("輸入錯(cuò)誤!\n");
  }
 }
}
void ComputerMove(char board[ROW][COL], int row, int col)
{
 int x = 0, y = 0;
 while (1)
 {
  x = rand() % row;
  y = rand() % col;
  if (board[x][y] == ' ')
  {
   board[x][y] = '#';
   return;
  }
 }
}
//1   玩家贏
//2   電腦贏
//3   繼續(xù)
//0   平局
int CheckBoard(char board[ROW][COL], int row, int col)
{
 int i = 0;
 for (i = 0; i < row; i++)
 {
  if (board[i][0] == board[i][1] && board[i][1] == board[i][2] && board[i][0] != ' ')
  {
   if (board[i][0] == '*')
   {
    return 1;
   }
   else
   {
    return 2;
   }
  }
  if (board[0][i] == board[1][i] && board[1][i] == board[2][i] && board[0][i] != ' ')
  {
   if (board[0][i] == '*')
   {
    return 1;
   }
   else
   {
    return 2;
   }
  }
 }
 if (board[0][0] == board[1][1] && board[1][1] == board[2][2] && board[0][0] != ' ')
 {
  if (board[0][0] == '*')
  {
   return 1;
  }
  else
  {
   return 2;
  }
 }
 if (board[0][2] == board[1][1] && board[1][1] == board[2][0] && board[0][2] != ' ')
 {
  if (board[0][2] == '*')
  {
   return 1;
  }
  else
  {
   return 2;
  }
 }
 for (i = 0; i < row; i++)
 {
  int j = 0;
  for (j = 0; j < col; j++)
  {
   if (board[i][j] == ' ')
   {
    return 3;
   }
  }
 }
 return 0;
}
void game()
{
 //三子棋的過(guò)程
 char board[ROW][COL];
 //初始化棋盤
 InitBoard(board, ROW, COL);
 //打印棋盤
 PrintBoard(board, ROW, COL);
 //下棋過(guò)程
 int ret = 0;
 while (1)
 {
  //玩家走
  PlayerMove(board, ROW, COL);
  PrintBoard(board, ROW, COL);
  ret = CheckBoard(board, ROW, COL);
  if (ret != 3)
  {
   break;
  }
  //電腦走
  ComputerMove(board, ROW, COL);
  PrintBoard(board, ROW, COL);
        system("cls");
  ret = CheckBoard(board, ROW, COL);
  if (ret != 3)
  {
   break;
  }
 }
 if (ret == 1)
 {
  printf("玩家贏\n");
  system("pause");
  system("cls");
 }
 else if (ret == 2)
 {
  printf("電腦贏\n");
  system("pause");
  system("cls");
 }
 else
 {
  printf("平局!\n");
  system("pause");
  system("cls");
 }
}
void menu()
{
 printf("**************************************\n");
 printf("******     1.begin   0.exit     ******\n");
 printf("**************************************\n");
}
int main()
{
 srand((unsigned)time(NULL));
 while (1)
 {
  menu();
  int select = 0;
  printf("請(qǐng)輸入你的選擇:");
  scanf("%d", &select);
  switch (select)
  {
  case 1:
   game();
   break;
  case 0:
   printf("退出當(dāng)前游戲!\n");
   system("pause");
   system("cls");
   return 0;
  default:
   printf("輸入錯(cuò)誤!請(qǐng)重新輸入\n");
  }
 }
 
 return 0;
}

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

相關(guān)文章

  • C++中ctemplate的使用

    C++中ctemplate的使用

    CTemplate是一種簡(jiǎn)單但功能強(qiáng)大的模板引擎,廣泛用于各種HTML模板解析和生成,本文主要介紹了C++中ctemplate的使用,具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-01-01
  • C++迭代器和顯示類型轉(zhuǎn)換方式

    C++迭代器和顯示類型轉(zhuǎn)換方式

    這篇文章主要介紹了C++迭代器和顯示類型轉(zhuǎn)換方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-04-04
  • OpenCV實(shí)現(xiàn)簡(jiǎn)單套索工具

    OpenCV實(shí)現(xiàn)簡(jiǎn)單套索工具

    這篇文章主要為大家詳細(xì)介紹了OpenCV實(shí)現(xiàn)簡(jiǎn)單套索工具,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-01-01
  • C++將二叉樹轉(zhuǎn)為雙向鏈表及判斷兩個(gè)鏈表是否相交

    C++將二叉樹轉(zhuǎn)為雙向鏈表及判斷兩個(gè)鏈表是否相交

    這篇文章主要介紹了C++將二叉樹轉(zhuǎn)為雙向鏈表及判斷兩個(gè)鏈表是否相交的方法,文中還給出了求兩個(gè)鏈表相交的第一個(gè)節(jié)點(diǎn)列的實(shí)現(xiàn)方法,需要的朋友可以參考下
    2016-02-02
  • Qt開發(fā)之使用socket實(shí)現(xiàn)遠(yuǎn)程控制

    Qt開發(fā)之使用socket實(shí)現(xiàn)遠(yuǎn)程控制

    本篇文章將會(huì)介紹下位機(jī)通過(guò)心跳包和上位機(jī)之間進(jìn)行數(shù)據(jù)交互和遠(yuǎn)程功能控制的實(shí)現(xiàn)方法。文中的示例代碼講解詳細(xì),感興趣的可以了解一下
    2022-11-11
  • 淺談mwArray和一般數(shù)組的區(qū)別

    淺談mwArray和一般數(shù)組的區(qū)別

    下面小編就為大家?guī)?lái)一篇淺談mwArray和一般數(shù)組的區(qū)別。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2016-12-12
  • Linux系統(tǒng)下C語(yǔ)言gets函數(shù)出現(xiàn)警告問(wèn)題的解決方法

    Linux系統(tǒng)下C語(yǔ)言gets函數(shù)出現(xiàn)警告問(wèn)題的解決方法

    這篇文章主要給大家介紹了關(guān)于在Linux系統(tǒng)下C語(yǔ)言gets函數(shù)出現(xiàn)警告問(wèn)題的解決方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2018-12-12
  • C++?socket通信遇到的問(wèn)題及解決方法

    C++?socket通信遇到的問(wèn)題及解決方法

    這篇文章主要介紹了C++?socket通信遇到的問(wèn)題,通過(guò)代碼修改來(lái)解決這個(gè)問(wèn)題,本文結(jié)合實(shí)例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2023-08-08
  • C++實(shí)現(xiàn)比較日期大小的示例代碼

    C++實(shí)現(xiàn)比較日期大小的示例代碼

    這篇文章主要為大家詳細(xì)介紹了如何使用C++實(shí)現(xiàn)比較日期大小的功能,文中的示例代碼講解詳細(xì),具有一定的學(xué)習(xí)價(jià)值,感興趣的可以了解一下
    2023-04-04
  • C++11的for循環(huán)的新用法(推薦)

    C++11的for循環(huán)的新用法(推薦)

    C++11這次的更新帶來(lái)了令很多C++程序員期待已久的for range循環(huán),每次看到j(luò)avascript, lua里的for range,心想要是C++能有多好,心里別提多酸了。這次C++11不負(fù)眾望,再也不用羨慕別家人的for range了。下面看下C++11的for循環(huán)的新用法
    2021-11-11

最新評(píng)論

花莲县| 西乌| 峨眉山市| 顺平县| 冕宁县| 寻甸| 濮阳市| 格尔木市| 远安县| 阜新| 永福县| 治多县| 徐汇区| 大英县| 齐河县| 固始县| 双牌县| 亚东县| 景宁| 乌拉特中旗| 独山县| 黔东| 天峨县| 张家界市| 广汉市| 旌德县| 湖北省| 琼结县| 雷山县| 泸西县| 绿春县| 临邑县| 肃北| 梁河县| 沐川县| 泰来县| 池州市| 望都县| 江津市| 白山市| 家居|