小伙伴們,大家好啊,這次我們來(lái)實(shí)現(xiàn)一個(gè)小游戲——三子棋)(井字游戲)
成都創(chuàng)新互聯(lián)公司專業(yè)為企業(yè)提供曹妃甸網(wǎng)站建設(shè)、曹妃甸做網(wǎng)站、曹妃甸網(wǎng)站設(shè)計(jì)、曹妃甸網(wǎng)站制作等企業(yè)網(wǎng)站建設(shè)、網(wǎng)頁(yè)設(shè)計(jì)與制作、曹妃甸企業(yè)網(wǎng)站模板建站服務(wù),10余年曹妃甸做網(wǎng)站經(jīng)驗(yàn),不只是建網(wǎng)站,更提供有價(jià)值的思路和整體網(wǎng)絡(luò)服務(wù)。相信大家都玩過(guò)這個(gè),玩法呢就是兩個(gè)人輪流下“井”中的棋,直到一方三字連成線,或者棋盤占滿
接下來(lái),跟著我的思路一起實(shí)現(xiàn)它吧!
一、主體 1、框架首先把基本框架寫出
2、主頁(yè) ①選擇主體然后我們思考,游戲首先要有主頁(yè)選項(xiàng),并且每次結(jié)束游戲后會(huì)返回游戲主頁(yè),這樣我們就可以先敲出這樣的代碼
#includeint main()
{
int input = 0;
do
{
printf("請(qǐng)選擇:>");
scanf("%d", &input);
switch (input)
{
case 1:
printf("三子棋\n");
break;
case 0:
printf("退出游戲\n");
break;
default:
printf("選擇錯(cuò)誤\n");
break;
}
} while (input);
return 0;
}
②主頁(yè)主體主頁(yè)我們簡(jiǎn)單設(shè)計(jì)一下
void menu()
{
printf("******************************\n");
printf("********* 1 . play *********\n");
printf("********* 0 . quit *********\n");
printf("******************************\n");
}
設(shè)計(jì)好自定義函數(shù)后,直接主函數(shù)引用它
#includevoid menu()
{
printf("******************************\n");
printf("********* 1 . play *********\n");
printf("********* 0 . quit *********\n");
printf("******************************\n");
}
int main()
{
int input = 0;
do
{
menu();
printf("請(qǐng)選擇:>");
scanf("%d", &input);
switch (input)
{
case 1:
printf("三子棋\n");
break;
case 0:
printf("退出游戲\n");
break;
default:
printf("選擇錯(cuò)誤\n");
break;
}
} while (input);
return 0;
}
效果大概就是這樣
主體大致就設(shè)計(jì)好了,接下來(lái),該設(shè)計(jì)大量自定義函數(shù)了
自定義函數(shù)我們可以用多個(gè)源文件和頭文件來(lái)時(shí)間連接
在主函數(shù)直接引用頭文件“game.h”
//test.c
#include"game.h"
void menu()
{
printf("******************************\n");
printf("********* 1 . play *********\n");
printf("********* 0 . quit *********\n");
printf("******************************\n");
}
int main()
{
int input = 0;
do
{
menu();
printf("請(qǐng)選擇:>");
scanf("%d", &input);
switch (input)
{
case 1:
printf("三子棋\n");
break;
case 0:
printf("退出游戲\n");
break;
default:
printf("選擇錯(cuò)誤\n");
break;
}
} while (input);
return 0;
}
二、客體
1、聲明數(shù)組三子棋我們可以用數(shù)組的方式來(lái)實(shí)現(xiàn),“井”字,三橫三縱,可以用二維數(shù)組
//game.h
#include#define POW 3
#define COL 3
//test.c
void game()
{
int board[POW][COL] = { 0 };
}
2、初始化數(shù)組三子棋下棋前,都是空白,我們可以用空格代替
//test.c
void game()
{
int board[POW][COL] = { 0 };
arr_init(board, POW, COL);
}
//game.c
#include"game.h"
//數(shù)組初始化
void arr_init(int board[POW][COL], int pow, int col)
{
int i = 0;
int j = 0;
for (i = 0; i< pow; i++)
{
for (j = 0; j< col; j++)
{
board[i][j] = ' ';
}
}
}
//game.h
#pragma once
#include#define POW 3
#define COL 3
//數(shù)組初始化
void arr_init(int board[POW][COL], int pow, int col);
3、打印棋盤棋盤是“井”狀的,它可以才分為“ |”和“---”反復(fù)打印實(shí)現(xiàn)
為了美觀,我們把數(shù)組內(nèi)容的左右分別加一個(gè)空格
//test.c
void game()
{
int board[POW][COL] = { 0 };
arr_init(board, POW, COL);
chess(board, POW, COL);
}
//game.c
void chess(int board[POW][COL], int pow, int col)
{
int i = 0;
int j = 0;
for (i = 0; i< pow; i++)
{
for (j = 0; j< col; j++)
{
printf(" %c ", board[i][j]);
if (j< pow - 1)
printf("|");
}
printf("\n");
if (i< col - 1)
{
for (j = 0; j< col; j++)
{
printf("---");
if (j< pow - 1)
printf("|");
}
printf("\n");
}
}
}
//game.h
#pragma once
#include#define POW 3
#define COL 3
//數(shù)組初始化
void arr_init(int board[POW][COL], int pow, int col);
//棋盤
void chess(int board[POW][COL], int pow, int col);
最后的效果大概是這樣
4、下棋接下來(lái)就是下棋了,下棋的順序大概是:玩家下棋,判斷勝負(fù),電腦下棋,判斷勝負(fù)的循環(huán)
輸入坐標(biāo)后既要判斷坐標(biāo)是否超綱也要判斷坐標(biāo)位置是否被占用
①玩家下棋//game.c
//玩家下棋
void playmove(int board[POW][COL], int pow, int col)
{
int x = 0;
int y = 0;
while (1)
{
printf("請(qǐng)輸入棋子坐標(biāo):>");
scanf("%d%d", &x, &y);
if (x >= 1 && x<= pow && y >= 1 && y<= col)
{
if (board[x - 1][y - 1] == ' ')
{
board[x - 1][y - 1] = '*';
break;
}
else printf("該位置已占用,請(qǐng)重新輸入\n");
}
else printf("請(qǐng)輸入正確坐標(biāo)\n");
}
}
②電腦下棋電腦下棋位置是隨機(jī)的,我們可以用隨機(jī)數(shù)來(lái)實(shí)現(xiàn),而隨機(jī)數(shù)需要rand,rand需要一個(gè)時(shí)刻變化的數(shù),所以使用時(shí)間戳是個(gè)不錯(cuò)的選擇
rand需要引用頭文件stdlib.h
時(shí)間戳需要引用頭文件time.h
//game.c
//電腦下棋
void computermove(int board[POW][COL], int pow, int col)
{
int x = 0;
int y = 0;
printf("電腦下棋\n");
while (1)
{
x = rand() % pow;
y = rand() % col;
if (board[x][y] == ' ')
{
board[x][y] = '#';
break;
}
}
}
//test.c
int main()
{
srand((unsigned int)time(NULL));
int input = 0;
do
{
menu();
printf("請(qǐng)選擇:>");
scanf("%d", &input);
switch (input)
{
case 1:
printf("三子棋\n");
game();
break;
case 0:
printf("退出游戲\n");
break;
default:
printf("選擇錯(cuò)誤\n");
break;
}
} while (input);
return 0;
}
//game.h
#pragma once
#include#include#include
③判斷輸贏既要判斷輸贏又要判斷是否平局
//game.c
//判斷輸贏
char ful(int board[POW][COL], int pow, int col)
{
int i = 0;
//判斷三橫
for (i = 0; i< pow; 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];
}
//判斷對(duì)角線
if (board[0][0] == board[1][1] && board[1][1] == board[2][2] && board[1][1] != ' ')
return board[0][0];
if (board[0][2] == board[1][1] && board[1][1] == board[2][0] && board[1][1] != ' ')
return board[1][1];
int j = 0;
for (i = 0; i< pow; i++)
{
for (j = 0; j< col; j++)
{
if (board[i][j] == ' ')
return 'C';
}
}
return 'Q';
}
如果返回值為? *玩家贏? ? ? ? 為#電腦贏? ? ? ? 為Q平局? ? ? ? 為C繼續(xù)
再按照玩家下棋,判斷勝負(fù),電腦下棋,判斷勝負(fù)的順序進(jìn)行循環(huán)
//test.c
void game()
{
int board[POW][COL] = { 0 };
arr_init(board, POW, COL);
char ret;
while (1)
{
chess(board, POW, COL);
playmove(board, POW, COL);
ret = ful(board, POW, COL);
if (ret != 'C')
break;
computermove(board, POW, COL);
ret = ful(board, POW, COL);
if (ret != 'C')
break;
}
if (ret == '*') printf("玩家勝利\n");
else if (ret == '#')
{
printf("電腦勝利\n");
chess(board, POW, COL);
}
else if (ret == 'Q')
{
printf("平局\n");
chess(board, POW, COL);
}
}
三、主體和客體連接//game.h
#pragma once
#include#include#include#define POW 3
#define COL 3
//數(shù)組初始化
void arr_init(int arr[POW][COL], int pow, int col);
//棋盤
void chess(int arr[POW][COL], int pow, int col);
//玩家下棋
void playmove(int arr[POW][COL], int pow, int col);
//電腦下棋
void computermove(int arr[POW][COL], int pow, int col);
//判斷輸贏
char ful(int arr[POW][COL], int pow, int col);
四、總代碼最后所有代碼為下
?
//game.h
#pragma once
#include#include#include#define POW 3
#define COL 3
//數(shù)組初始化
void arr_init(int arr[POW][COL], int pow, int col);
//棋盤
void chess(int arr[POW][COL], int pow, int col);
//玩家下棋
void playmove(int arr[POW][COL], int pow, int col);
//電腦下棋
void computermove(int arr[POW][COL], int pow, int col);
//判斷輸贏
char ful(int arr[POW][COL], int pow, int col);
?
//game.c
#include"game.h"
//數(shù)組初始化
void arr_init(int board[POW][COL], int pow, int col)
{
int i = 0;
int j = 0;
for (i = 0; i< pow; i++)
{
for (j = 0; j< col; j++)
{
board[i][j] = ' ';
}
}
}
//棋盤
void chess(int board[POW][COL], int pow, int col)
{
int i = 0;
int j = 0;
for (i = 0; i< pow; i++)
{
for (j = 0; j< col; j++)
{
printf(" %c ", board[i][j]);
if (j< pow - 1)
printf("|");
}
printf("\n");
if (i< col - 1)
{
for (j = 0; j< col; j++)
{
printf("---");
if (j< pow - 1)
printf("|");
}
printf("\n");
}
}
}
//玩家下棋
void playmove(int board[POW][COL], int pow, int col)
{
int x = 0;
int y = 0;
while (1)
{
printf("請(qǐng)輸入棋子坐標(biāo):>");
scanf("%d%d", &x, &y);
if (x >= 1 && x<= pow && y >= 1 && y<= col)
{
if (board[x - 1][y - 1] == ' ')
{
board[x - 1][y - 1] = '*';
break;
}
else printf("該位置已占用,請(qǐng)重新輸入\n");
}
else printf("請(qǐng)輸入正確坐標(biāo)\n");
}
}
//電腦下棋
void computermove(int board[POW][COL], int pow, int col)
{
int x = 0;
int y = 0;
printf("電腦下棋\n");
while (1)
{
x = rand() % pow;
y = rand() % col;
if (board[x][y] == ' ')
{
board[x][y] = '#';
break;
}
}
}
//判斷輸贏
char ful(int board[POW][COL], int pow, int col)
{
int i = 0;
for (i = 0; i< pow; 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[1][1] != ' ')
return board[0][0];
if (board[0][2] == board[1][1] && board[1][1] == board[2][0] && board[1][1] != ' ')
return board[1][1];
int j = 0;
for (i = 0; i< pow; i++)
{
for (j = 0; j< col; j++)
{
if (board[i][j] == ' ')
return 'C';
}
}
return 'Q';
}
//test.c
#include"game.h"
void menu()
{
printf("******************************\n");
printf("********* 1 . play *********\n");
printf("********* 0 . quit *********\n");
printf("******************************\n");
}
void game()
{
int board[POW][COL] = { 0 };
arr_init(board, POW, COL);
char ret;
while (1)
{
chess(board, POW, COL);
playmove(board, POW, COL);
ret = ful(board, POW, COL);
if (ret != 'C')
break;
computermove(board, POW, COL);
ret = ful(board, POW, COL);
if (ret != 'C')
break;
}
if (ret == '*') printf("玩家勝利\n");
else if (ret == '#')
{
printf("電腦勝利\n");
chess(board, POW, COL);
}
else if (ret == 'Q')
{
printf("平局\n");
chess(board, POW, COL);
}
}
int main()
{
srand((unsigned int)time(NULL));
int input = 0;
do
{
menu();
printf("請(qǐng)選擇:>");
scanf("%d", &input);
switch (input)
{
case 1:
printf("三子棋\n");
game();
break;
case 0:
printf("退出游戲\n");
break;
default:
printf("選擇錯(cuò)誤\n");
break;
}
} while (input);
return 0;
}
以上就是三子棋的全部?jī)?nèi)容,主要運(yùn)用的是對(duì)圖形的打印,數(shù)組的運(yùn)用,函數(shù)的運(yùn)用,條件語(yǔ)句和循環(huán),感謝觀看~
你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機(jī)房具備T級(jí)流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級(jí)服務(wù)器適合批量采購(gòu),新人活動(dòng)首月15元起,快前往官網(wǎng)查看詳情吧