亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

C語言版的三子棋游戲

 更新時間:2021年08月04日 16:36:52   作者:Chaser Feng  
這篇文章主要為大家詳細介紹了C語言版的三子棋游戲,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下

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

一、游戲說明

三子棋相信大家都不陌生,小時候經(jīng)常在紙上畫出九宮格就可以直接和小伙伴一起玩,規(guī)則就是誰先在九宮格中下出同一行三個一樣,或者同一列三個一樣,又或者對角線的三個一樣的棋子,誰就獲勝;其實在編程中,代碼也能實現(xiàn)人機版的三子棋小游戲,讓我們一起來看看如何實現(xiàn)的吧!

二、游戲設計步驟

將三子棋游戲的實現(xiàn)邏輯分為以下步驟:

1.創(chuàng)建菜單(選擇玩游戲或者退出游戲)
2.創(chuàng)建和初始化游戲棋盤(本質(zhì)上為一個二維數(shù)組)
3.打印出棋盤
4.玩家下棋(用‘ * '表示棋子)
5.判斷輸贏或者是否平局
6.電腦下棋(用‘ # '表示棋子)
7.判斷輸贏(同第5步)
8.回到第3步直至確定輸贏

三、代碼實現(xiàn)

1.創(chuàng)建菜單

規(guī)定輸入 1 為玩游戲,輸入 0 為退出游戲

void menu()
{
 printf("******************************\n");
 printf("**********  1.play  **********\n");
 printf("**********  0.exit  **********\n");
 printf("******************************\n");
}

2.創(chuàng)建和初始化游戲棋盤

本質(zhì)為創(chuàng)建一個二維數(shù)組并初始化

void InitBoard(char board[ROW][COL], int row, int col)
{
 int i = 0;
 int j = 0;
 for (i = 0; i < row; i++)
 {
  for (j = 0; j < col; j++)
  {
   board[i][j] = ' ';
  }
 }
}

3.打印出棋盤

利用循環(huán)的方式將字符排版成棋盤的樣式(n x n 的棋盤也同樣可以打?。?/p>

void DisplayBoard(char board[ROW][COL], int row, int col)
{
 int i = 0;
 int j = 0;
 for (i = 0; i < row; i++)
 {
  for (j = 0; j < col; j++)
  {
   printf(" %c ", board[i][j]);
   if (j < col - 1)
   {
    printf("|");
   }
  }
  printf("\n");
  if (i < row - 1)
  {
   for (j = 0; j < col; j++)
   {
    printf("---");
    if (j < col - 1)
    {
     printf("|");
    }
   }
  }
  printf("\n");
 }
}

4.玩家下棋

規(guī)定玩家的棋子為字符‘ * ',同時需判斷棋子坐標的合理性

void  PlayerMove(char board[ROW][COL], int row, int col)
{
 int x = 0;
 int y = 0;
 printf("玩家走\n");
 printf("請輸入坐標>:");
 
 while (1)
 {
  scanf("%d %d", &x, &y);
  if (x >= 1 && x <= 3 && y >= 1 && y <= 3)//判斷游戲合法性
  {
   if (board[x - 1][y - 1] == ' ')
   {
    board[x - 1][y - 1] = '*';
    break;
   }
   else
    printf("坐標已被占用,請重新輸入\n");
  }
  else
   printf("坐標非法,請重新輸入\n");
 }
}

5.電腦下棋

規(guī)定電腦的棋子為字符‘ # ',同樣需判斷棋子坐標的合理性

void ComputerMove(char board[ROW][COL], int row, int col)
{
 printf("電腦走\n");
 while (1)
 {
  int x = rand() % 3;
  int y = rand() % 3;
  if (board[x][y] == ' ')
  {
   board[x][y] = '#';
   break;
  }
 }
}

6.判斷輸贏或者是否平局

規(guī)定電腦贏返回字符‘ # ',玩家贏返回字符‘ * ',游戲繼續(xù)返回字符‘C',平局(即棋盤滿但還未出現(xiàn)勝負)則返回字符‘Q';而這里我們又需要注意,判斷輸贏的函數(shù)需返回一個字符,所以判斷棋盤是否已滿的函數(shù)需在判斷輸贏的函數(shù)中并且能返回一個字符,這樣才能保證游戲輸贏判斷的完整性

(1)判斷輸贏函數(shù):

char IsWin(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] != ' ')//判斷行是否相等
   return board[i][0];
 }
 for (i = 0; i < col; i++)
 {
  if (board[0][i] == board[1][i] && board[1][i] == board[2][i] && board[0][i] != ' ')//判斷列是否相等
   return board[0][i];
 }
 if (board[0][0] == board[1][1] && board[1][1] == board[2][2] && board[0][0] != ' ')//判斷對角線
 {
  return board[0][0];
 }
 if (board[0][2] == board[1][1] && board[1][1] == board[2][0] && board[2][0] != ' ')//判斷對角線
 {
  return board[0][2];
 }
int ret = IsFull(board, row , col );
if (ret == 0)
{
 return 'Q';
}
else
    return 'C';
}

(2)判斷棋盤是否已滿的函數(shù)

int IsFull(char board[ROW][COL], int row, int col)
{
 int i = 0;
 int j = 0;
 for (i = 0; i < row; i++)
 {
  for (j = 0; j < col; j++)
  {
   if (board[i][j] == ' ')
    return 1;
  }
 }
 return 0;
}

以上是各各步驟函數(shù)的具體實現(xiàn),而為了方便,我們將代碼分為三個文件:
1.game.h------關于游戲相關的函數(shù)聲明,符號聲明及頭文件的包含
2.game.c------游戲相關函數(shù)的實現(xiàn)
3.test.c------測試游戲的邏輯

具體如下:

game.h文件:

#include<stdio.h>
#include<time.h>
#define ROW 3
#define COL 3
void InitBoard(char board[ROW][COL],int row,int col);
void DisplayBoard(char board[ROW][COL], int row, int col);
void PlayerMove(char board[ROW][COL], int row, int col);
void ComputerMove(char board[ROW][COL], int row, int col);
char IsWin(char board[ROW][COL], int row, int col);

game.c文件:

#include"game.h"
void InitBoard(char board[ROW][COL], int row, int col)
{
 int i = 0;
 int j = 0;
 for (i = 0; i < row; i++)
 {
  for (j = 0; j < col; j++)
  {
   board[i][j] = ' ';
  }
 }
}

void DisplayBoard(char board[ROW][COL], int row, int col)
{
 int i = 0;
 int j = 0;
 for (i = 0; i < row; i++)
 {
  for (j = 0; j < col; j++)
  {
   printf(" %c ", board[i][j]);
   if (j < col - 1)
   {
    printf("|");
   }
  }
  printf("\n");
  if (i < row - 1)
  {
   for (j = 0; j < col; j++)
   {
    printf("---");
    if (j < col - 1)
    {
     printf("|");
    }
   }
  }
  printf("\n");
 }
}

void  PlayerMove(char board[ROW][COL], int row, int col)
{
 int x = 0;
 int y = 0;
 printf("玩家走\n");
 printf("請輸入坐標>:");
 
 while (1)
 {
  scanf("%d %d", &x, &y);
  if (x >= 1 && x <= 3 && y >= 1 && y <= 3)
  {
   if (board[x - 1][y - 1] == ' ')
   {
    board[x - 1][y - 1] = '*';
    break;
   }
   else
    printf("坐標已被占用,請重新輸入\n");
  }
  else
   printf("坐標非法,請重新輸入\n");
 }
}

void ComputerMove(char board[ROW][COL], int row, int col)
{
 printf("電腦走\n");
 while (1)
 {
  int x = rand() % 3;
  int y = rand() % 3;
  if (board[x][y] == ' ')
  {
   board[x][y] = '#';
   break;
  }
 }
}

int IsFull(char board[ROW][COL], int row, int col)
{
 int i = 0;
 int j = 0;
 for (i = 0; i < row; i++)
 {
  for (j = 0; j < col; j++)
  {
   if (board[i][j] == ' ')
    return 1;
  }
 }
 return 0;
}

char IsWin(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] != ' ')
   return board[i][0];
 }
 for (i = 0; i < col; i++)
 {
  if (board[0][i] == board[1][i] && board[1][i] == board[2][i] && board[0][i] != ' ')
   return board[0][i];
 }
 if (board[0][0] == board[1][1] && board[1][1] == board[2][2] && board[0][0] != ' ')
 {
  return board[0][0];
 }
 if (board[0][2] == board[1][1] && board[1][1] == board[2][2] && board[2][0] != ' ')
 {
  return board[0][2];
 }
int ret = IsFull(board, row , col );
if (ret == 0)
{
 return 'Q';
}
else
    return 'C';
}

test.c文件:

#include"game.h"

void menu()
{
 printf("******************************\n");
 printf("**********  1.play  **********\n");
 printf("**********  0.exit  **********\n");
 printf("******************************\n");
}

void game()
{
 char board[ROW][COL];//定義棋盤
 InitBoard(board, ROW, COL);//初始化棋盤
 DisplayBoard(board, ROW, COL);//打印棋盤
 char ret = 0;
//
 while (1)
 {
  PlayerMove(board, ROW, COL);
  DisplayBoard(board, ROW, COL);
  ret = IsWin(board, ROW, COL);
  if (ret != 'C')
   break;
  ComputerMove(board, ROW, COL);//電腦下棋
  DisplayBoard(board, ROW, COL);
  ret = IsWin(board, ROW, COL);
  if (ret != 'C')
   break;
 }
 if (ret == '*')
 {
  printf("玩家勝利!\n");
 }
 else if (ret == '#')
 {
  printf("電腦勝利!\n");
 }
 if(ret=='Q')
 {
  printf("平局\n");
 }
 DisplayBoard(board, ROW, COL);
}

int main()
{
 srand((unsigned int)time(NULL));
 
 int input = 0;
 do
 {
  menu();
  printf("請選擇:>");
  scanf("%d", &input);
  switch (input)
  {
  case 1:

   game();
   break;
  case 0:
   printf("游戲結(jié)束\n");
   break;
  default:
   printf(",文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下輸入錯誤,請重新輸入\n");
  }
 } while (input);
 return 0;
}

四、運行效果

玩游戲的三種情況分別如下:

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

相關文章

  • C語言實現(xiàn)通訊錄系統(tǒng)課程設計

    C語言實現(xiàn)通訊錄系統(tǒng)課程設計

    這篇文章主要為大家詳細介紹了C語言實現(xiàn)通訊錄系統(tǒng)課程設計,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-07-07
  • C++編程模板匹配超詳細的識別手寫數(shù)字實現(xiàn)示例

    C++編程模板匹配超詳細的識別手寫數(shù)字實現(xiàn)示例

    大家好!本篇文章是關于手寫數(shù)字識別的,接下來我將在這里記錄我的手寫數(shù)字識別的從零到有,我在這里把我自己的寫代碼過程發(fā)出來,希望能幫到和我一樣努力求知的人
    2021-10-10
  • 對比C語言中getc()函數(shù)和ungetc()函數(shù)的使用

    對比C語言中getc()函數(shù)和ungetc()函數(shù)的使用

    這篇文章主要介紹了對比C語言中getc()函數(shù)和ungetc()函數(shù)的使用,是C語言入門學習中的基礎知識,需要的朋友可以參考下
    2015-08-08
  • C++11新特性std::tuple的使用方法

    C++11新特性std::tuple的使用方法

    這篇文章主要介紹了C++11新特性-std::tuple的使用方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-10-10
  • C語言實現(xiàn)BMP格式圖片轉(zhuǎn)化為灰度

    C語言實現(xiàn)BMP格式圖片轉(zhuǎn)化為灰度

    這篇文章主要為大家詳細介紹了C語言實現(xiàn)BMP格式圖片轉(zhuǎn)化為灰度,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-10-10
  • C++類URL編碼和解碼使用技巧

    C++類URL編碼和解碼使用技巧

    在項目開發(fā)過程中,經(jīng)常會使用到c++ 的url編碼和解碼,本文將以此問題詳細介紹使用技巧,需要的朋友可以參考下
    2012-11-11
  • C++利用棧實現(xiàn)中綴表達式轉(zhuǎn)后綴表達式

    C++利用棧實現(xiàn)中綴表達式轉(zhuǎn)后綴表達式

    這篇文章主要為大家詳細介紹了C++利用棧實現(xiàn)中綴表達式轉(zhuǎn)后綴表達式,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-04-04
  • C語言中getch()函數(shù)詳解及簡單實例

    C語言中getch()函數(shù)詳解及簡單實例

    這篇文章主要介紹了C語言中getch()函數(shù)詳解及簡單實例的相關資料,需要的朋友可以參考下
    2017-03-03
  • C++實現(xiàn)猜牌小游戲

    C++實現(xiàn)猜牌小游戲

    這篇文章主要為大家詳細介紹了C++實現(xiàn)猜牌小游戲,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-07-07
  • c語言中形參與實參的關系解讀

    c語言中形參與實參的關系解讀

    這篇文章主要介紹了c語言中形參與實參的關系,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-07-07

最新評論