C語言分裝實(shí)現(xiàn)三子棋游戲詳解
本文實(shí)例為大家分享了C語言分裝實(shí)現(xiàn)三子棋游戲的具體代碼,供大家參考,具體內(nèi)容如下
test.c --------------測試游戲的邏輯
game.h------------關(guān)于游戲相關(guān)函數(shù)的聲明
game.c------------游戲相關(guān)函數(shù)的實(shí)現(xiàn)
game.h
#include<stdio.h> #include<stdlib.h> #include<time.h> //符號的定義 #define ROW 3 #define COL 3 //函數(shù)聲明 void InitBoard(char board[ROW][COL], int row, int col); //初始化棋盤 void DisplayBoard(char board[ROW][COL], int row, int col); //打印棋盤 void PlayMove(char board[ROW][COL], int row, int col); //玩家下 char IsWin(char board[ROW][COL], int row, int col); //判斷輸贏 void ComputerMove(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 PlayMove(char board[ROW][COL], int row, int col)
{
int x = 0;
int y = 0;
printf("玩家走,請輸入坐標(biāo);>\n");
scanf("%d %d", &x, &y);
while (1)
{
if (x >= 1 && x <= row && y >= 1 && y <= col) //判斷坐標(biāo)是否合法
{
if (board[x-1][y-1] == ' ') //判斷坐標(biāo)是否被占用
{
board[x-1][y-1] = '*';
break;
}
else
printf("坐標(biāo)已被占用,請重新輸入\n");
}
else
printf("坐標(biāo)非法,請重新輸入\n");
}
}
void ComputerMove(char board[ROW][COL], int row, int col)
{
printf("電腦走\(yùn)n");
while (1)
{
int x = rand() % row;
int y = rand() % col;
if (board[x][y] == ' ') //判斷坐標(biāo)是否被占用
{
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 0; //棋盤未滿
}
}
return 1; // 棋盤滿了
}
char IsWin(char board[ROW][COL], int row, int col)
{
/*玩家贏 返回*
電腦贏 返回#
平局 返回P
繼續(xù)游戲 返回Q*/
int i = 0;
int j = 0;
for (i = 0; i < row; i++)
{
if (board[i][0] == board[i][1] && board[i][1] == board[i][2] && board[i][1] != ' ')
//判斷行是否相等
return board[i][0];
}
for (i = 0; i < col; i++)
{
if (board[0][i] == board[1][i] && board[1][i] == board[2][i] && board[1][i] != ' ')
//判斷列是否相等
return board[1][i];
}
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[0][2] != ' ')
//判斷對角線是否相等
return board[0][2];
int ret=IsFull(board, row, col); // 判斷是否平局(即判斷棋盤是否已滿) 此處row,col均為小寫
//如果棋盤滿了返回1,未滿返回0
if (ret == 1)
return 'P';
return 'Q'; //游戲繼續(xù)
}
test.c
#include"game.h"
void menu()
{
printf("********************\n");
printf("*****1.Play ********\n");
printf("*****0.Exit ********\n");
}
void game()
{
char board[ROW][COL];
char ret=0; //接收游戲狀態(tài)
InitBoard(board, ROW, COL); //初始化棋盤
DisplayBoard(board, ROW, COL); //打印棋盤
while (1)
{
PlayMove(board, ROW, COL); //玩家走
DisplayBoard(board, ROW, COL);
ret=IsWin(board, ROW, COL); //判斷輸贏
if (ret != 'Q')
break;
ComputerMove(board, ROW, COL); //電腦走
DisplayBoard(board, ROW, COL);
ret = IsWin(board, ROW, COL); //判斷輸贏
if (ret != 'Q')
break;
}
if (ret == '*')
printf("玩家勝\n");
if(ret=='#')
printf("電腦勝\n");
if (ret == 'P')
printf("平局\n");
DisplayBoard(board, ROW, COL); //展示棋盤
}
int main()
{
int input = 0;
srand((unsigned int)time(NULL));
do
{
menu();
printf("請選擇;>\n");
scanf("%d", &input);
switch (input)
{
case 1:
{
printf("開始游戲\n");
game();
break;
}
case 0:
{
printf("退出游戲\n");
break;
}
default:
{
printf("選擇錯誤,請重新選擇;>\n");
}
}
} while (input);
return 0;
}
代碼實(shí)現(xiàn)結(jié)果圖

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
c語言同名標(biāo)靶點(diǎn)自動匹配算法實(shí)現(xiàn)實(shí)例代碼
這篇文章主要介紹了c語言同名標(biāo)靶點(diǎn)自動匹配算法實(shí)現(xiàn)實(shí)例代碼,分享了相關(guān)代碼示例,小編覺得還是挺不錯的,具有一定借鑒價值,需要的朋友可以參考下2018-02-02
C語言實(shí)現(xiàn)獲取文件大小與創(chuàng)建修改時間
這篇文章主要為大家詳細(xì)介紹了如何通過C語言實(shí)現(xiàn)獲取文件大小、創(chuàng)建時間與修改時間,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2023-11-11
C++?超詳細(xì)分析數(shù)據(jù)結(jié)構(gòu)中的時間復(fù)雜度
時間復(fù)雜度一般指時間復(fù)雜性。?在計算機(jī)科學(xué)中,時間復(fù)雜性,又稱時間復(fù)雜度,算法的時間復(fù)雜度是一個函數(shù),它定性描述該算法的運(yùn)行時間2022-03-03
Qt圖形圖像開發(fā)之曲線圖表模塊QChart庫坐標(biāo)軸和數(shù)據(jù)不對應(yīng)、密集的散點(diǎn)圖無法顯示問題解決方法
這篇文章主要介紹了Qt圖形圖像開發(fā)之曲線圖表模塊QChart庫坐標(biāo)軸和數(shù)據(jù)不對應(yīng)、密集的散點(diǎn)圖無法顯示問題解決方法,需要的朋友可以參考下2020-03-03

