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

C語言實現(xiàn)三子棋簡單小游戲

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

三子棋 ,也叫井字棋,是一款大家都玩過的經典小游戲,也是一個適合初學c語言的小伙伴練練手的小項目。

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

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

3.其余的頁面菜單,和棋盤打印。只需要合理利用循環(huán)和判斷來打印相關內容,很容易就能實現(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ù)據
  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("輸入要走的坐標:");
  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("該位置已有棋子,請重新選擇\n");
   }
  }
  else
  {
   printf("輸入錯誤!\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()
{
 //三子棋的過程
 char board[ROW][COL];
 //初始化棋盤
 InitBoard(board, ROW, COL);
 //打印棋盤
 PrintBoard(board, ROW, COL);
 //下棋過程
 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("請輸入你的選擇:");
  scanf("%d", &select);
  switch (select)
  {
  case 1:
   game();
   break;
  case 0:
   printf("退出當前游戲!\n");
   system("pause");
   system("cls");
   return 0;
  default:
   printf("輸入錯誤!請重新輸入\n");
  }
 }
 
 return 0;
}

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

相關文章

  • C++中ctemplate的使用

    C++中ctemplate的使用

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

    C++迭代器和顯示類型轉換方式

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

    OpenCV實現(xiàn)簡單套索工具

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

    C++將二叉樹轉為雙向鏈表及判斷兩個鏈表是否相交

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

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

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

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

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

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

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

    C++?socket通信遇到的問題及解決方法

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

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

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

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

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

最新評論

清水河县| 射洪县| 星座| 东安县| 永和县| 呼伦贝尔市| 女性| 邯郸市| 舒兰市| 乌兰察布市| 休宁县| 商城县| 铜山县| 抚松县| 灵丘县| 策勒县| 遵义市| 贵溪市| 南通市| 嘉峪关市| 深州市| 安龙县| 长沙县| 清徐县| 西和县| 郁南县| 南京市| 苗栗县| 齐河县| 高台县| 富阳市| 武功县| 绵阳市| 佛教| 东明县| 灵武市| 满洲里市| 三河市| 白城市| 南丰县| 大英县|