前言:
知道如何玩三子棋游戏,肯定也知道如何实现三子棋游戏。
该文章将 以"C"语言的形式一步一步解析“三子棋”游戏是如何实现的。
用心完成就很简单哦~
游戏框架
平常所玩的三子棋游戏,是在一个棋盘上实现,按照一人一回合的走法去下棋,直到三连统一,或者棋盘饱满就结束游戏,按照这个思路把游戏的框架先构建起来。
1,屏幕上呈现游戏菜单
2,根据用户输入运行相应的选项
3,游戏具有可玩性
4,设置游戏属性
5,游戏运作
以上就是基本的三子棋游戏思路框架,下面按照这个框架思路一步一步的实现它。
游戏实现
一,游戏菜单
在互联网上运行游戏当然需要展示给玩家看的,游戏开始之前需要提供游戏菜单供玩家进行相应的选择操作。
🌰:
这样一个简简单单的游戏菜单用“printf“函数实现即可。
可按照自己喜欢的去款式设计
二,游戏选择与可玩性
游戏菜单供玩家提供相应的选择,在程序员的角度需要根据玩家输入的数让程序进行相应的运行,当然同时还得考虑如果玩家出现输入其它选择的现象。
🌰:
完成这一实现除了玩家不想玩的情况下,使游戏具有可玩性,玩玩一把还想玩............
很明显这就是一个循环体制
代码展示:
do
{
menu(); //游戏菜单
printf("\n");
printf("输入选择:");
scanf("%d",&input);
printf("\n");
switch (input)
{
case 1:
Game_Secondos();
game();
break;
case 0:
printf("退出游戏\n");
break;
default:
printf("输入错误\n");
Sleep(500);
system("cls");
break;
}
while (ch = getchar() != '\n')
;
} while (input);
}
do while语句设置循环体制,先让菜单,输入什么的运行起来(个人感觉最合适的循环体制)
这里用switch(if else if也可)语句来实现多分支的情况。
以上就是基本的菜单和选择界面。
三,游戏属性
三子棋是在一个3x3的棋盘上进行游戏的。
构建一个三子棋棋盘。
🌰:
可以用特殊字符来实现这个棋盘。并用数组来保存棋盘的数据。
代码展示:
1,设置棋盘
#define ROW 3//棋盘的大小(行)
#define LOW 3//棋盘的大小(列)
void game(void)
{
char board[ROW][LOW];
initial(board); //初始化棋盘
}
void initial(char board[ROW][LOW]) //初始棋盘
{
int i = 0, j = 0;
for (i = 0; i < ROW; i++)
{
for (j = 0; j < LOW; j++)
{
board[i][j] = ' ';
}
}
}
用数组保存棋盘数据,并将数据初始化为空格。
想想为什么要初始数组内容?
2、打印棋盘
void print(char board[ROW][LOW])
{
int i = 0;
int j = 0;
for (i = 0; i <=ROW; i++)
{
for (j = 0; j < LOW; j++)
{
printf("---");
if(j<LOW-1)
printf("|");
}
printf("\n");
if (i < ROW )
{
for (j = 0; j < LOW; j++)
{
printf(" %c ", board[i][j]);
if (j < LOW - 1)
printf("|");
}
printf("\n");
}
}
}
用”---“和”|“来打印棋盘的框架,用数组的数据显示当前棋盘内容,这里就是为什么将数组的内容初始化为空格的原因。
空格在屏幕上自然而然就什么也没有显示。
注意:在打印棋盘时,设置必要的条件让棋盘更好看一点。
3,输赢判断
char GameJudge(char board[ROW][LOW])
{
int flag = 0;
int x = 0;
int y = 0;
if ((board[0][0] == board[0][1] && board[0][1] == board[0][2]))
return board[0][0];
if ((board[1][0] == board[1][1] && board[1][1] == board[1][2]))
return board[1][0];
if ((board[2][0] == board[2][1] && board[2][1] == board[2][2]))
return board[2][0];
if ((board[0][0] == board[1][0] && board[1][0] == board[2][0]))
return board[0][0];
if ((board[0][1] == board[1][1] && board[1][1] == board[2][1]))
return board[0][1];
if ((board[0][2] == board[1][2] && board[1][2] == board[2][2]))
return board[0][2];
if ((board[0][0] == board[1][1] && board[1][1] == board[2][2]))
return board[0][0];
if ((board[2][0] == board[1][1] && board[1][1] == board[0][2]))
return board[2][0];
for (x = 0; x < ROW; x++)
{
for (y = 0; y < LOW; y++)
{
if (board[x][y] == ' ')
flag = 1;
}
}
if (flag == 1)
return 'G';
else
return 'P';
三子棋判断每行每列以及对角线的棋子是否相等,如果相等返回相应的棋子。
如果都不相等,判断是否平局棋盘是否满棋的情况,不满棋继续对弈。
四,游戏运作
棋盘属性以及游戏判别完成了,下面实现游戏的运作。
三子棋实现一对一的对弈情况,一人一回合进行走棋。
这里将分成玩家与电脑的博弈:
代码展示:
1,玩家走棋
void PlayerMove(char board[ROW][LOW], char ch)
{
int x = 0;
int y = 0;
again:
printf("请输入坐标:");
scanf("%d%d", &x, &y);
if(x>0 && x<=ROW && y>0 && y<=LOW && board[x-1][y-1] == ' ')
{
board[x - 1][y - 1] = ch;
}
else
{
printf("输入错误\n");
goto again;
}
}
注意:数组的下标是从0开始,根据玩家的视角对输入的坐标需要相应的减一,且考虑坐标位置是否正确(坐标溢出以及当前坐标有棋子的情况)。
2,电脑走棋
void ComputerMove(char board[ROW][LOW], char ch)
{
int x = 0;
int y = 0;
while (1)
{
x = rand() % ROW;
y = rand() % LOW;
if (board[x][y] == ' ')
{
board[x][y] = ch;
break;
}
}
}
电脑走棋这里用随机数生成坐标实现电脑走棋。同时判断该坐标是否空字符,是的则完成走棋。
3,总体运行
void game(void)
{
char board[ROW][LOW];
char ch = 0;
initial(board); //初始棋盘
while (1)
{
Sleep(500);
system("cls");
print(board);
PlayerMove(board, '*');
if ('*' == GameJudge(board))
{
printf("玩家胜利!\n");
print(board);
break;
}
else if ('P' == GameJudge(board))
{
printf("平局!\n");
print(board);
break;
}
ComputerMove(board, '#');
if ('#' == GameJudge(board))
{
printf("电脑胜利!\n");
print(board);
break;
}
else if ('P' == GameJudge(board))
{
printf("平局!\n");
print(board);
break;
}
}
}
将以上各种动作封装成函数,根据玩家电脑交替走棋并判断的方式用循环体制设计此程序,直到判断一方赢或者平来结束游戏。
五,运行效果
1,
2,
3,
✨完结撒花~~~✨