三子棋
三子棋是五子棋的简化版,一局游戏的具体流程是:
1.创建棋盘并初始化。
2.打印棋盘。
3.玩家落子(玩家通过输入行列坐标的方式来落子)。
4.判定胜负关系
5.电脑落子(随机位置落子)
6.判定胜负关系。
回到2继续执行。
C语言代码如下(示例):
#include<stdio.h>
#include<string.h>
#include<time.h>
#pragma warning (disable:4996)
#define Max_Row 3
#define Max_Col 3
//初始化棋盘
void init(char chessBoard[Max_Row][Max_Col])
{
for (int row = 0; row < Max_Row; row++){
for (int col = 0; col < Max_Col; col++){
chessBoard[row][col] = ' ';
}
}
}
//显示棋盘
void printChessBoard(char chessBoard[Max_Row][Max_Col])
{
printf("+---+---+---+\n");
for (int row = 0; row < Max_Row; row++){
printf("| %c | %c | %c |\n",chessBoard[row][0],
chessBoard[row][1], chessBoard[row][2]);
printf("+---+---+---+\n");
}
}
//玩家落子
void playerMove(char chessBoard[Max_Row][Max_Col])
{
while (1){
printf("请玩家输入坐标(row,col):");
int row = 0;
int col = 0;
scanf("%d %d", &row, &col);
//校验玩家输入的坐标是否合法
if (row < 0 || row >= Max_Row
|| col < 0 || col >= Max_Col){
printf("您的坐标位置不在合法范围[0,2]内!\n");
continue;
}
if (chessBoard[row][col] != ' '){
printf("您的坐标位置已经有子!\n");
continue;
}
chessBoard[row][col] = 'x';
break;
}
}
//电脑落子
void computerMove(char chessBoard[Max_Row][Max_Col])
{
while (1){
int row = rand() % Max_Row;
int col = rand() % Max_Col;
//确保随机数不能已经有子的位置
if (chessBoard[row][col] != ' '){
continue;
}
chessBoard[row][col] = 'o';
break;
}
}
//判断棋盘是否已满
int isFull(char chessBoard[Max_Row][Max_Col])
{
//找空格,如果找不到就是满了
for (int row = 0; row < Max_Row; row++){
for (int col = 0; col < Max_Col; col++){
if (chessBoard[row][col] == ' '){
return 0;
}
}
}
return 1;
}
//判断输赢的条件返回x玩家获胜,返回o电脑获胜,q表示和棋,' '胜负未分
char isWin(char chessBoard[Max_Row][Max_Col])
{
//判断所有行
for (int row = 0; row < Max_Row; row++){
if (chessBoard[row][0] != ' '
&& chessBoard[row][0] == chessBoard[row][1]
&& chessBoard[row][0] == chessBoard[row][2]){
return chessBoard[row][0];
}
}
//判断所有列
for (int col = 0; col < Max_Col; col++){
if (chessBoard[0][col] != ' '
&& chessBoard[0][col] == chessBoard[1][col]
&& chessBoard[0][col] == chessBoard[2][col]){
return chessBoard[0][col];
}
}
//判断两个对角线
if (chessBoard[0][0] != ' '
&& chessBoard[0][0] == chessBoard[1][1]
&& chessBoard[0][0] == chessBoard[2][2]){
return chessBoard[0][0];
}
if (chessBoard[2][0] != ' '
&&chessBoard[2][0] == chessBoard[1][1]
&& chessBoard[2][0] == chessBoard[0][2]){
return chessBoard[2][0];
}
//判断是否为和棋,看棋盘中是否有剩余空间
if (isFull(chessBoard)){
return 'q';
}
return ' ';//单引号中间是一个空格
}
void game()
{
//创建棋盘并初始化
char chessBoard[Max_Row][Max_Col] = { 0 };
init(chessBoard);
char winner=' ';
while (1){
printChessBoard(chessBoard);//显示棋盘
playerMove(chessBoard);//玩家落子
winner=isWin(chessBoard);//判断输赢
if (winner != ' '){
break;
}
computerMove(chessBoard);//电脑落子
winner = isWin(chessBoard);//判断输赢
if (winner != ' '){
break;
}
}
printChessBoard(chessBoard);//显示最终输赢的盘面
if (winner =='x'){
printf("恭喜您赢了!\n");
}
else if (winner =='o'){
printf("很遗憾,您输了!\n");
}
else{
printf("打成平局!\n");
}
}
int menu()
{
printf("========================\n");
printf("1.开始游戏\n");
printf("0.结束游戏\n");
printf("========================\n");
printf("请输入您的选择:");
int choice = 0;
scanf("%d",&choice);
return choice;
}
int main()
{
srand((unsigned int)time(0));
while (1){
int choice = menu();
if (choice == 1){
game();
}
else if (choice == 0){
printf("goodbye!\n");
break;
}
}
system("pause");
return 0;
}
具体效果如图所示:
小结
以上就是今天简单的一个小游戏编程,对我们学过的数组知识,可以更好的理解与应用,通过最近一段时间的学习,基本上对C语言的基本知识有了更深刻的理解,希望我们在学习的道路上能继续坚持,继续向更高的楼梯爬去。
写作不易,大侠请留步,来个赞再走吆!!!