十年網(wǎng)站開發(fā)經(jīng)驗(yàn) + 多家企業(yè)客戶 + 靠譜的建站團(tuán)隊(duì)
量身定制 + 運(yùn)營維護(hù)+專業(yè)推廣+無憂售后,網(wǎng)站問題一站解決
前言哈嘍!😄各位的uu們,我是你的博客好友小夢,希望我的文章可以給您帶來一定的幫助,話不多說,文章推上!歡迎大家在評(píng)論區(qū)嘮嗑指正,覺得好的話別忘了一鍵三連哦!😘
? ? 哈嘍各位友友們😊,我今天又學(xué)到了很多有趣的知識(shí),現(xiàn)在迫不及待的想和大家分享一下!😘我僅已此文,手把手帶領(lǐng)大家在學(xué)習(xí)C語言知識(shí)的同時(shí),并實(shí)現(xiàn)一個(gè)簡易版的三子棋游戲。該游戲主要運(yùn)用了數(shù)組,函數(shù),分支與循環(huán)語句等等知識(shí),以及分文件書寫項(xiàng)目思想。都是精華內(nèi)容,可不要錯(cuò)過喲?。?!😍😍😍
分文件編寫項(xiàng)目 🙌分文件編寫的風(fēng)格是很重要的,為什么這樣說呢?主要有以下幾點(diǎn)優(yōu)勢:
游戲菜單界面(meun)設(shè)計(jì)的代碼編寫: 😍
void menu()
{printf("************************\n");
printf("************************\n");
printf("****** 1. play *******\n");
printf("****** 2. exit *******\n");
printf("************************\n");
printf("************************\n");
}
界面成果圖展示:
這里運(yùn)用到的是數(shù)組和for循環(huán)的相關(guān)知識(shí)。這里利用嵌套的for循環(huán)將一個(gè)二維數(shù)組的每一個(gè)元素進(jìn)行初識(shí)化,這里是先初始化為空格。
初始化棋盤的代碼編寫: 😍
//初始化棋盤
void InitBoard(char board[ROW][COL], int row, int col)
{for (int i = 0; i< row; i++)
{for (int j = 0; j< col; j++)
{ board[i][j] = ' ';
}
}
}
顯示棋盤 🙌這里是按照九宮格的形式來設(shè)計(jì)咋們的三子棋棋盤
顯示棋盤的代碼編寫: 😍
void DisplayBoard(char board[ROW][COL], int row, int col)
{//打印每一行的數(shù)據(jù)
for (int i = 0; i< row; i++)
{for (int j = 0; j< col; j++)
{ printf(" %c ",board[i][j]);
if (j< col-1)
{ printf("|");
}
}
printf("\n");
//打印分割線
for (int j = 0; j< col; j++)
{ printf("---");
if (j< col-1)
{ printf("|");
}
}
printf("\n");
}
}
界面成果圖展示:
玩家下棋的代碼編寫: 😍
//玩家下棋
void PlayerBoard(char board[ROW][COL], int row, int col)
{//普通玩家不知道數(shù)組下標(biāo)的原理,只知道棋盤方位。
int x = 0;
int y = 0;
printf("玩家下棋>:\n");
while (1)
{printf("請(qǐng)玩家輸入下棋的坐標(biāo)>:");
scanf("%d %d", &x, &y);
//下棋坐標(biāo)要合法
if (x >= 1 && x<= row && y >= 1 && y<= col)
{ //判斷下棋的位置有沒有被占
if (board[x - 1][y - 1] == ' ')
{ board[x - 1][y - 1] = '*';
DisplayBoard(board,row,col);
break;
}
else
{ printf("該坐標(biāo)已有棋子,請(qǐng)重新輸入下棋坐標(biāo)\n");
}
}
else
{ printf("玩家輸入下棋坐標(biāo)非法,請(qǐng)重新輸入>:\n");
}
}
}
計(jì)算機(jī)下棋 🙌計(jì)算機(jī)下棋的代碼編寫: 😍
//計(jì)算機(jī)下棋
void ComputerBoard(char board[ROW][COL], int row, int col)
{printf("計(jì)算機(jī)下棋>:\n");
while (1)
{int x = rand() % row;//取模運(yùn)算限制其下棋的行范圍0~2
int y = rand() % col;//取模運(yùn)算限制其下棋的列范圍0~2
if (board[x][y] == ' ')
{ board[x][y] = '#';
DisplayBoard(board, row, col);
break;
}
}
}
判斷結(jié)果 🙌判斷結(jié)果代碼實(shí)現(xiàn): 😍
//判斷棋盤是否為空的函數(shù)實(shí)現(xiàn)
int IsFull(char board[ROW][COL], int row, int col)
{for (int i = 0; i< row; i++)
{for (int j = 0; j< col; j++)
{ if (board[i][j] == ' ')//如果存在有空的情況,則返回 0
{ return 0;
}
}
}
return 1;//如果滿了則返回 1
}
// 有行,列,對(duì)角線獲勝的三種情況。特別注意要排除特殊情況:滿足獲勝的空格字符
char IsWin(char board[ROW][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][1] !=' ')
{ return board[i][1];
}
}
//判斷行獲勝條件
for (int j = 0; j< col; j++)
{if (board[0][j] == board[1][j] && board[1][j] == board[2][j] && board[1][j] != ' ')
{ return board[1][j];
}
}
//主對(duì)角線獲勝情況
if (board[0][0] == board[1][1] && board[1][1] == board[2][2] && board[1][1] != ' ')
{return board[1][1];
}
//副對(duì)角線獲勝情況
if (board[0][2] == board[1][1] && board[1][1] == board[2][0] && board[1][1] != ' ')
{return board[1][1];
}
int flag = IsFull(board, row, col);
//這里規(guī)定flag==1則表示棋盤下滿棋子了,平局,flag不為0則還沒下滿
if (flag == 1)
{return 'Q';
}
}
三子棋游戲的完整代碼 🙌三子棋頭文件代碼編寫: 😍
#pragma once
#include#include#include#define ROW 3 //表示ROW表示3行
#define COL 3 //表示COL表示3列
//初始化棋盤
void InitBoard(char board[ROW][COL], int row, int col);
//顯示棋盤
void DisplayBoard(char board[ROW][COL], int row, int col);
//玩家下棋
void PlayerBoard(char board[ROW][COL], int row, int col);
//計(jì)算機(jī)下棋
void ComputerBoard(char board[ROW][COL], int row, int col);
//判斷結(jié)果
char IsWin(char board[ROW][COL], int row, int col);
功能文件代碼編寫: 😍
#define _CRT_SECURE_NO_WARNINGS 1
#include"game.h"
//初始化棋盤
void InitBoard(char board[ROW][COL], int row, int col)
{for (int i = 0; i< row; i++)
{for (int j = 0; j< col; j++)
{ board[i][j] = ' ';
}
}
}
void DisplayBoard(char board[ROW][COL], int row, int col)
{//打印每一行的數(shù)據(jù)
for (int i = 0; i< row; i++)
{for (int j = 0; j< col; j++)
{ printf(" %c ",board[i][j]);
if (j< col-1)
{ printf("|");
}
}
printf("\n");
//打印分割線
for (int j = 0; j< col; j++)
{ printf("---");
if (j< col-1)
{ printf("|");
}
}
printf("\n");
}
}
//玩家下棋
void PlayerBoard(char board[ROW][COL], int row, int col)
{//普通玩家不知道數(shù)組下標(biāo)的原理,只知道棋盤方位。
int x = 0;
int y = 0;
printf("玩家下棋>:\n");
while (1)
{printf("請(qǐng)玩家輸入下棋的坐標(biāo)>:");
scanf("%d %d", &x, &y);
//下棋坐標(biāo)要合法
if (x >= 1 && x<= row && y >= 1 && y<= col)
{ //判斷下棋的位置有沒有被占
if (board[x - 1][y - 1] == ' ')
{ board[x - 1][y - 1] = '*';
DisplayBoard(board,row,col);
break;
}
else
{ printf("該坐標(biāo)已有棋子,請(qǐng)重新輸入下棋坐標(biāo)\n");
}
}
else
{ printf("玩家輸入下棋坐標(biāo)非法,請(qǐng)重新輸入>:\n");
}
}
}
//計(jì)算機(jī)下棋
void ComputerBoard(char board[ROW][COL], int row, int col)
{printf("計(jì)算機(jī)下棋>:\n");
while (1)
{int x = rand() % row;
int y = rand() % col;
if (board[x][y] == ' ')
{ board[x][y] = '#';
DisplayBoard(board, row, col);
break;
}
}
}
//判斷棋盤是否為空的函數(shù)實(shí)現(xiàn)
int IsFull(char board[ROW][COL], int row, int col)
{for (int i = 0; i< row; i++)
{for (int j = 0; j< col; j++)
{ if (board[i][j] == ' ')//如果存在有空的情況,則返回 0
{ return 0;
}
}
}
return 1;//如果滿了則返回 1
}
// 有行,列,對(duì)角線獲勝的三種情況。特別注意要排除特殊情況:滿足獲勝的空格字符
char IsWin(char board[ROW][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][1] !=' ')
{ return board[i][1];
}
}
//判斷行獲勝條件
for (int j = 0; j< col; j++)
{if (board[0][j] == board[1][j] && board[1][j] == board[2][j] && board[1][j] != ' ')
{ return board[1][j];
}
}
//主對(duì)角線獲勝情況
if (board[0][0] == board[1][1] && board[1][1] == board[2][2] && board[1][1] != ' ')
{return board[1][1];
}
//副對(duì)角線獲勝情況
if (board[0][2] == board[1][1] && board[1][1] == board[2][0] && board[1][1] != ' ')
{return board[1][1];
}
int flag = IsFull(board, row, col);
//這里規(guī)定flag==1則表示棋盤下滿棋子了,平局,flag不為0則還沒下滿
if (flag == 1)
{return 'Q';
}
}
測試文件代碼編寫: 😍
#define _CRT_SECURE_NO_WARNINGS 1//這句代碼是vs編譯器才需要用到的,在其他編譯器上只需要把這句代碼去掉即可
#include"game.h"
void menu()
{printf("************************\n");
printf("************************\n");
printf("****** 1. play *******\n");
printf("****** 2. exit *******\n");
printf("************************\n");
printf("************************\n");
}
void game()
{//首先需要?jiǎng)?chuàng)建一個(gè)三行三列的數(shù)組來接受下棋的記錄
char board[ROW][COL] = {0 };
char ret = '0';
//初始化棋盤
InitBoard(board,ROW,COL);
//打印棋盤
DisplayBoard(board, ROW, COL);
//玩游戲有四種情況:
//1. 玩家贏 輸出 * ;
//2.計(jì)算機(jī)贏 輸出 # ;
//3. 平局 輸出 Q ;
//4 .繼續(xù)玩 ;
while (1)
{//玩家下棋;
PlayerBoard(board, ROW, COL);
//判斷結(jié)果
ret = IsWin(board, ROW, COL);
if (ret == '*')
{ printf("恭喜玩家獲勝!\n");
break;
}
if (ret == 'Q')
{ printf("打平局!\n");
break;
}
//計(jì)算機(jī)下棋:
ComputerBoard(board, ROW, COL);
//判斷結(jié)果
ret = IsWin(board, ROW, COL);
if (ret == '#')
{ printf("恭喜計(jì)算機(jī)獲勝!\n");
break;
}
if (ret == 'Q')
{ printf("打平局!\n");
break;
}
}
}
void test()
{int input = 0;
srand((unsigned int)time(NULL));
do
{menu();
printf("請(qǐng)輸入功能選項(xiàng)>:\n");
scanf("%d", &input);
switch (input)
{case 1:
printf("開啟三子棋游戲\n");
game();
break;
case 0:
printf("已退出游戲!\n");
break;
}
} while (input);
}
int main()
{test();
return 0;
}
總結(jié)撒花💞? ?本篇文章旨在帶領(lǐng)大家學(xué)習(xí)學(xué)習(xí)語言,鞏固所學(xué)知識(shí),并同時(shí)帶領(lǐng)大家實(shí)現(xiàn)簡易版的三子棋游戲項(xiàng)目。如果我寫的有什么的不好之處或者不足之處,請(qǐng)?jiān)谖恼孪路浇o出你寶貴的意見😊。如果覺得我寫的好的話請(qǐng)點(diǎn)個(gè)贊贊和關(guān)注哦~😘😘😘
你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機(jī)房具備T級(jí)流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級(jí)服務(wù)器適合批量采購,新人活動(dòng)首月15元起,快前往官網(wǎng)查看詳情吧