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

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

 更新時間:2021年06月16日 09:34:40   作者:技術(shù)新人王小明  
這篇文章主要為大家詳細介紹了用C語言實現(xiàn)三子棋小游戲,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下

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

1. 規(guī)則介紹

三子棋是一種民間傳統(tǒng)游戲,又叫九宮棋、圈圈叉叉、一條龍、井字棋等。將正方形對角線連起來,相對兩邊依次擺上三個雙方棋子,只要將自己的三個棋子走成一條線,對方就算輸了。但是,有很多時候會出現(xiàn)和棋的情況。

2. 編寫思路

2.1 選擇界面的編寫

提供選擇界面(設(shè)計者可根據(jù)自己的喜好設(shè)定棋盤的大?。惠斎牒畏N數(shù)字或者符號開始或者退出游戲也可由設(shè)計者自己確定數(shù)字)

static void Menu()
{
 printf("---------------------\n");
 printf("|  1: Play  2: Exit |\n");
 printf("---------------------\n");
 printf("Please Select# ");
}

2.2 棋盤的編寫

首先我們應(yīng)該實現(xiàn)三行三列的棋盤,為后續(xù)使用方便,所以我們在前面宏定義行(ROW 3)列(COL 3)都為3;設(shè)計者也可以根據(jù)自己的喜歡設(shè)置不同樣式的棋盤;

static void Showboard(char board[][COL], int row, int col)
{
 printf("   |  1  |  2  |  3  |\n");
 printf("---------------------\n");
 for (int i = 0; i < row; i++){
  printf("%d  |", i + 1);
  
  for (int j = 0; j < col; j++){
   printf("  %c  |", board[i][j]);
   
  }
  printf("\n---------------------\n");
 }
}

2.3 玩家落子

設(shè)定讓玩家以(x,y)坐標的方式?jīng)Q定落子方位,在玩家輸入后,我們要設(shè)定判斷程序,判斷玩家輸入的坐標是否合法(在我們設(shè)定的坐標范圍內(nèi))、輸入的位置是否已經(jīng)落子;如果合法,且位置沒被占用,則在輸入的位置用符號代替玩家的棋子,這里用 ‘ X ' 表示玩家的棋子,為后續(xù)容易修改,在前面宏定義。

static void PlayerMove(char board[][COL], int row, int col)
{
 int x = 0;
 int y = 0;
 int quit = 0;
 while (!quit){
  printf("請輸入你的位置# ");
  scanf("%d %d", &x, &y);
  if (x<1 || x>3 || y<1 || y>3){
   printf("你輸入的坐標有誤!\n");
   continue;
  }
  else if (board[x - 1][y - 1] != ' '){
   printf("該坐標已被占用!\n");
   continue;
  }
  else {
   board[x - 1][y - 1] = P_COLOR;
   break;
  }
 }
}

2.4 三子連珠判定

設(shè)定三子連珠所有可能的情況,然后判定是否可以繼續(xù)進行游戲(返回NEXT),或者和棋(返回DRAW);

static char Judge(char board[][COL], int row, int col)
{
 for (int i = 0; i < row; i++){
  if (board[i][0] == board[i][1] && \
   board[i][1] == board[i][2] && \
   board[i][0] != ' '){
   return board[i][0];
  }
 }
 for (int j = 0; j < col; j++){
  if (board[0][j] == board[1][j] && \
   board[1][j] == board[2][j] && \
   board[0][j] != ' '){
   return board[0][j];
  }
 }
 if (board[0][0] == board[1][1] && \
  board[1][1] == board[2][2] && \
  board[0][0] != ' '){
  return board[1][1];
 }
 if (board[0][2] == board[1][1] && \
  board[1][1] == board[2][0] && \
  board[1][1] != ' '){
  return board[1][1];
 }
 for (int i = 0; i < row; i++){
  for (int j = 0; j < col; j++){
   if (board[i][j] == ' '){
    return NEXT;
   }
  }
 }
 return DRAW;
}

2.5 電腦落子方式

電腦落子方式我們采用生成隨機數(shù)

static void ComputerMove(char board[][COL], int row, int col)
{
 while (1){
  int x = rand() % row;
  int y = rand() % col;
  if (board[x][y] == ' '){
   board[x][y] = C_COLOR;
   break;
  }
 }
}

2.6 游戲邏輯

生成隨機數(shù),以便電腦落子使用;
生成二維數(shù)組作為棋盤,傳入行和列,然后用memset初始化;
展示棋盤;
玩家落子;
判定落子是否合法;如果合法則輪到計算機落子;
判斷計算機落子是否合法;如果合法則繼續(xù)循環(huán);
設(shè)定判斷循環(huán)出口;

static void Game()
{
 srand((unsigned long)time(NULL));
 char board[ROW][COL];
 memset(board, ' ', sizeof(board));
 char result = 'x';
 do{
  Showboard(board, ROW, COL);
  PlayerMove(board, ROW, COL);
  result = Judge(board, ROW, COL);
  if (result != NEXT){
   break;
  }
  ComputerMove(board, ROW, COL);
  result = Judge(board, ROW, COL);
  if (result != NEXT){
   break;
  }
 } while (1);
    Showboard(board, ROW, COL);
 if (P_COLOR == result){
  printf("you win!\n");
 }
 else if (C_COLOR == result){
  printf("you loss!\n");
 }
 else{
  printf("draw!\n");
 }
}

2.7 設(shè)定游戲開始or退出

首先展示菜單;輸入1開始游戲;輸入2則退出;將上述代碼整合后如下。

3. 整體代碼

#include<stdivo.h>
#include<time.h>
#include<Windows.h>

#pragma warning(disable:4996)

#define ROW 3
#define COL 3

#define P_COLOR 'X'
#define C_COLOR 'O'
#define NEXT 'N'
#define DRAW 'D'

static void Menu()
{
 printf("---------------------\n");
 printf("|  1: Play  2: Exit |\n");
 printf("---------------------\n");
 printf("Please Select# ");
}
static void Showboard(char board[][COL], int row, int col)
{
 printf("   |  1  |  2  |  3  |\n");
 printf("---------------------\n");
 for (int i = 0; i < row; i++){
  printf("%d  |", i + 1);
  
  for (int j = 0; j < col; j++){
   printf("  %c  |", board[i][j]);
   
  }
  printf("\n---------------------\n");
 }
}
static void PlayerMove(char board[][COL], int row, int col)
{
 int x = 0;
 int y = 0;
 int quit = 0;
 while (!quit){
  printf("請輸入你的位置# ");
  scanf("%d %d", &x, &y);
  if (x<1 || x>3 || y<1 || y>3){
   printf("你輸入的坐標有誤!\n");
   continue;
  }
  else if (board[x - 1][y - 1] != ' '){
   printf("該坐標已被占用!\n");
   continue;
  }
  else {
   board[x - 1][y - 1] = P_COLOR;
   break;
  }
 }
}
static char Judge(char board[][COL], int row, int col)
{
 for (int i = 0; i < row; i++){
  if (board[i][0] == board[i][1] && \
   board[i][1] == board[i][2] && \
   board[i][0] != ' '){
   return board[i][0];
  }
 }
 for (int j = 0; j < col; j++){
  if (board[0][j] == board[1][j] && \
   board[1][j] == board[2][j] && \
   board[0][j] != ' '){
   return board[0][j];
  }
 }
 if (board[0][0] == board[1][1] && \
  board[1][1] == board[2][2] && \
  board[0][0] != ' '){
  return board[1][1];
 }
 if (board[0][2] == board[1][1] && \
  board[1][1] == board[2][0] && \
  board[1][1] != ' '){
  return board[1][1];
 }
 for (int i = 0; i < row; i++){
  for (int j = 0; j < col; j++){
   if (board[i][j] == ' '){
    return NEXT;
   }
  }
 }
 return DRAW;
}
static void ComputerMove(char board[][COL], int row, int col)
{
 while (1){
  int x = rand() % row;
  int y = rand() % col;
  if (board[x][y] == ' '){
   board[x][y] = C_COLOR;
   break;
  }
 }
}
static void Game()
{
 srand((unsigned long)time(NULL));
 char board[ROW][COL];
 memset(board, ' ', sizeof(board));
 char result = 'x';
 do{
  Showboard(board, ROW, COL);
  PlayerMove(board, ROW, COL);
  result = Judge(board, ROW, COL);
  if (result != NEXT){
   break;
  }
  ComputerMove(board, ROW, COL);
  result = Judge(board, ROW, COL);
  if (result != NEXT){
   break;
  }
 } while (1);
    Showboard(board, ROW, COL);
 if (P_COLOR == result){
  printf("you win!\n");
 }
 else if (C_COLOR == result){
  printf("you loss!\n");
 }
 else{
  printf("draw!\n");
 }
}
int main()
{
 int quit = 0;
 int select = 0;
 while (!quit){
  Menu();
  scanf("%d", &select);
  switch (select){
  case 1:
   Game();
   printf("Play Again?\n");
   break;
  case 2:
   quit = 1;
   break;
  default:
   printf("\n");
   break;
  }
 }
 printf("ByeBye!\n");
 system("pause");
 return 0;
}

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

相關(guān)文章

  • C語言中const,volatile,restrict的用法總結(jié)

    C語言中const,volatile,restrict的用法總結(jié)

    以下是對C語言中const,volatile,restrict的用法進行了詳細的總結(jié)介紹,需要的朋友可以過來參考下
    2013-10-10
  • C語言之單向鏈表詳解及實例代碼

    C語言之單向鏈表詳解及實例代碼

    這篇文章主要介紹了C語言之單向鏈表的相關(guān)資料,及實例代碼,幫助大家學(xué)習(xí)參考,,需要的朋友可以參考下
    2016-09-09
  • C語言類型轉(zhuǎn)換與常量的細節(jié)深入理解探究

    C語言類型轉(zhuǎn)換與常量的細節(jié)深入理解探究

    這篇文章主要為大家介紹了C?語言類型轉(zhuǎn)換與常量的細節(jié)深入理解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-12-12
  • 帶你了解C++中vector的用法

    帶你了解C++中vector的用法

    大家好,本篇文章主要講的是帶你了解C++中vector的用法,感興趣的同學(xué)趕快來看一看吧,對你有幫助的話記得收藏一下
    2022-01-01
  • C++深入探究類與對象之友元與運算符重載

    C++深入探究類與對象之友元與運算符重載

    友元就是讓一個函數(shù)或者類,訪問另一個類中的私有成員;打個比方,這相當于是說:朋友是值得信任的,所以可以對他們公開一些自己的隱私,運算符重載的實質(zhì)就是函數(shù)重載或函數(shù)多態(tài),運算符重載是一種形式的C++多態(tài),目的在于讓人能夠用同名的函數(shù)來完成不同的基本操作
    2022-04-04
  • C++實現(xiàn)和電腦對戰(zhàn)三子棋實例

    C++實現(xiàn)和電腦對戰(zhàn)三子棋實例

    大家好,本篇文章主要講的是C++實現(xiàn)和電腦對戰(zhàn)三子棋實例,感興趣的同學(xué)趕快來看一看吧,對你有幫助的話記得收藏一下
    2022-01-01
  • C語言實現(xiàn)二值圖像模擬灰值圖像顯示效果

    C語言實現(xiàn)二值圖像模擬灰值圖像顯示效果

    這篇文章主要為大家詳細介紹了C語言實現(xiàn)二值圖像模擬灰值圖像顯示效果,分為圖案法、抖動法兩個方法實現(xiàn),文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-10-10
  • Visual?Studio?2022?配置?PCL?1.12.1?的問題小結(jié)

    Visual?Studio?2022?配置?PCL?1.12.1?的問題小結(jié)

    這篇文章主要介紹了Visual?Studio?2022?配置?PCL?1.12.1?的經(jīng)驗總結(jié)分享,本文通過圖文實例相結(jié)合給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-08-08
  • C語言超詳細講解循環(huán)與分支語句基礎(chǔ)

    C語言超詳細講解循環(huán)與分支語句基礎(chǔ)

    各位小伙伴們,今天給大家?guī)淼氖茄h(huán)與分支語句,本篇將會向大家介紹這些語句的格式和使用的基本方法,感興趣的朋友來看看吧
    2022-04-04
  • VC6.0代碼自動提示 VC6.0在win7環(huán)境下代碼提示智能化

    VC6.0代碼自動提示 VC6.0在win7環(huán)境下代碼提示智能化

    作為程序猿的你,是否已經(jīng)喜歡或習(xí)慣依賴IDE開發(fā)環(huán)境呢,有了IDE環(huán)境,即使你想不起方法全名,只要知道某個前綴,或哪怕在提示列表中,一一查詢,也可以找到自己想找的方法或?qū)傩?/div> 2013-01-01

最新評論

中西区| 什邡市| 西乌珠穆沁旗| 绥宁县| 嘉义市| 康定县| 农安县| 忻城县| 柯坪县| 图片| 天全县| 南丹县| 壤塘县| 临沭县| 宜城市| 辰溪县| 长治县| 新乐市| 广南县| 东安县| 太湖县| 库车县| 崇义县| 涿鹿县| 乌兰县| 罗甸县| 庆元县| 河东区| 湘潭县| 昔阳县| 江达县| 云梦县| 贡嘎县| 景东| 会同县| 略阳县| 临清市| 中卫市| 柳林县| 巴彦淖尔市| 达日县|