欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

C語(yǔ)言版的三子棋游戲

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

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

一、游戲說(shuō)明

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

二、游戲設(shè)計(jì)步驟

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

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

三、代碼實(shí)現(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)建和初始化游戲棋盤(pán)

本質(zhì)為創(chuàng)建一個(gè)二維數(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.打印出棋盤(pán)

利用循環(huán)的方式將字符排版成棋盤(pán)的樣式(n x n 的棋盤(pá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ī)定玩家的棋子為字符‘ * ',同時(shí)需判斷棋子坐標(biāo)的合理性

void  PlayerMove(char board[ROW][COL], int row, int col)
{
 int x = 0;
 int y = 0;
 printf("玩家走\(yùn)n");
 printf("請(qǐng)輸入坐標(biāo)>:");
 
 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("坐標(biāo)已被占用,請(qǐng)重新輸入\n");
  }
  else
   printf("坐標(biāo)非法,請(qǐng)重新輸入\n");
 }
}

5.電腦下棋

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

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

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

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

(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] != ' ')//判斷對(duì)角線
 {
  return board[0][0];
 }
 if (board[0][2] == board[1][1] && board[1][1] == board[2][0] && board[2][0] != ' ')//判斷對(duì)角線
 {
  return board[0][2];
 }
int ret = IsFull(board, row , col );
if (ret == 0)
{
 return 'Q';
}
else
    return 'C';
}

(2)判斷棋盤(pán)是否已滿(mǎn)的函數(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ù)的具體實(shí)現(xiàn),而為了方便,我們將代碼分為三個(gè)文件:
1.game.h------關(guān)于游戲相關(guān)的函數(shù)聲明,符號(hào)聲明及頭文件的包含
2.game.c------游戲相關(guān)函數(shù)的實(shí)現(xiàn)
3.test.c------測(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("玩家走\(yùn)n");
 printf("請(qǐng)輸入坐標(biāo)>:");
 
 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("坐標(biāo)已被占用,請(qǐng)重新輸入\n");
  }
  else
   printf("坐標(biāo)非法,請(qǐng)重新輸入\n");
 }
}

void ComputerMove(char board[ROW][COL], int row, int col)
{
 printf("電腦走\(yùn)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];//定義棋盤(pán)
 InitBoard(board, ROW, COL);//初始化棋盤(pán)
 DisplayBoard(board, ROW, COL);//打印棋盤(pán)
 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("請(qǐng)選擇:>");
  scanf("%d", &input);
  switch (input)
  {
  case 1:

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

四、運(yùn)行效果

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

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

相關(guān)文章

最新評(píng)論