三子棋游戏实现步骤
用一个二维数组来表示棋盘(3*3),初始化打印为“ ”
用x表示玩家落子,用o表示电脑落子
玩家落子提示玩家输入一组坐标
电脑落子,随便找一个空格位置落子
判断:玩家胜利
电脑胜利
和棋
主程序步骤
先对棋盘进行初始化 Init(g_broad)
打印棋盘(初试棋盘全为空格)Print(g_broad)
玩家落子 检验游戏是否结束
电脑落子 检验游戏是否结束
循环执行第三部
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define ROW 3
#define COL 3
char g_broad[ROW][COL];
int Menu(int choice)
{
int i;
printf("======================\n");
printf("1.play game\n");
printf("2.exit game\n");
printf("======================\n");
printf("请输入你的选择:\n");
scanf("%d", &i);
return i;
}
void Init(char broad[ROW][COL])
{
int row, col;
for(row = 0; row < ROW; row++)
{
for(col = 0; col < COL; col++)
{
broad[row][col] = ' ';
}
}
}
void Print(char broad[ROW][COL])
{
int row;
for(row = 0; row < ROW; row++)
{
printf("| %c | %c | %c |\n", broad[row][0],
broad[row][1], broad[row][2]);
if(row < ROW -1)
{
printf(" ---|---|---\n");
}
}
}
void Playermove(char broad[ROW][COL])
{
int row, col;
printf("玩家落子!\n");
while(1)
{
printf("请输入你要下的位置(row, col):\n");
scanf("%d %d", &row, &col);
if(row < 0 || row >= ROW || col < 0 || col >= COL)
{
printf("您输入的坐标非法,请您重新输入!\n");
continue;
}
if(broad[row][col] != ' ')
{
printf("您输入的位置已经有子了,请重新输入!\n");
continue;
}
broad[row][col] = 'x';
break;
}
}
void Computermove(char broad[ROW][COL])
{
int row, col;
printf("电脑落子!\n");
while(1)
{
row = rand() % ROW;
col = rand() % COL;
if(broad[row][col] != ' ')
{
//重新输入
continue;
}
broad[row][col] = 'o';
break;
}
}
int Isfull(char broad[ROW][COL])
{
int row, col;
for(row = 0; row < ROW; row++)
{
for(col = 0; col < COL; col++)
{
if(broad[row][col] == ' ')
{
return 0;
}
}
}
return 1;
}
char Checkwinner(char broad[ROW][COL])
{
int row;
int col;
for(row = 0; row < ROW; row++)
{
//检查每行的相同
if(broad[row][0] == broad[row][1]
&& broad[row][0] == broad[row][2]
&& broad[row][0] != ' ')
{
return broad[row][0];
}
}
for(col = 0; col < COL; col++)
{
//检查每列的相同
if(broad[0][col] == broad[1][col]
&& broad[0][col] == broad[2][col]
&& broad[0][col] != ' ')
{
return broad[0][col];
}
}
//检查主对角线
if(broad[0][0] == broad[1][1]
&& broad[0][0] == broad[2][2]
&& broad[0][0] != ' ')
{
return broad[0][0];
}
//检查从对角线
if(broad[2][0] == broad[1][1]
&& broad[2][0] == broad[0][2]
&& broad[2][0] != ' ')
{
return broad[0][2];
}
//判断是否和棋 定义函数Isfull
if(Isfull(broad))
{
return 'q';
}
else
{
return ' ';
}
}
void Game()
{
char winner = ' ';
//随机种子的设置只需要程序启动的时候设置一次就好
//srand((unsigned int)time(0));
//对棋盘进行初始化
Init(g_broad);
while(1)
{
//打印棋盘
Print(g_broad);
//玩家落子
Playermove(g_broad);
//判断是否胜利,winner为‘x’玩家,‘o’电脑,‘q’和棋
winner = Checkwinner(g_broad);
if(winner != ' ')
{
break;
}
//电脑落子
Computermove(g_broad);
winner = Checkwinner(g_broad);
if(winner != ' ')
{
break;
}
}
Print(g_broad);
if(winner == 'x')
{
printf("恭喜玩家胜利!\n");
}
else if(winner == 'o')
{
printf("很遗憾电脑胜!\n");
}
else if(winner == 'q')
{
printf("此局平局!\n");
}
else
{
printf("程序出错!\n");
}
}
int main()
{
int choice = 0;
srand((unsigned int)time(0));
//choice = Menu(choice);
while(1)
{
choice = Menu(choice);
if(choice == 1)
{
Game();
}
else
{
printf("goodbye!\n");
break;
}
}
system("pause");
return 0;
}
运行结果演示:
再附上更改[row, col]之后的五子棋程序代码
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <string.h>
#define ROW 5
#define COL 5
char g_broad[ROW][ROW];
int Mneu(int i)
{
printf("==================\n");
printf("1.PLAY GAME!\n");
printf("2.EXIT GAME!\n");
printf("==================\n");
printf("请输入您的选择:");
scanf("%d", &i);
return i;
}
void Init(char broad[ROW][COL])
{
memset(broad, ' ', ROW * COL);
/*int row, col;
for(row = 0; row < ROW; row++)
{
for(col = 0; col < COL; col++)
{
broad[row][col] = ' ';
}
}
*/
}
void Print(char broad[ROW][COL])
{
int row;
for(row = 0; row < ROW; row++)
{
printf("| %c | %c | %c | %c | %c |\n", broad[row][0],
broad[row][1], broad[row][2], broad[row][3], broad[row][4]);
if(row < ROW - 1)
{
printf("|___|___|___|___|___|\n");
}
}
}
void Playermove(char broad[ROW][COL])
{
int row = 0;
int col = 0;
printf("玩家落子!\n");
while(1)
{
printf("请输入您要下的位置:");
scanf("%d %d", &row, &col);
if(row < 0 || row >= ROW || col < 0 || col >= COL)
{
printf("您的输入非法!请重新输入:");
continue;
}
if(broad[row][col] != ' ')
{
printf("此位置已经有子了!请您重新输入:");
continue;
}
broad[row][col] = 'x';
break;
}
}
void Computermove(char broad[ROW][COL])
{
int row = 0;
int col = 0;
printf("电脑落子!\n");
while(1)
{
row = rand() % ROW;
col = rand() % COL;
if(broad[row][col] != ' ')
{
continue;
}
broad[row][col] = 'o';
break;
}
}
int Isfull(char broad[ROW][COL])
{
int row = 0;
int col = 0;
for(row = 0; row < ROW; row++)
{
for(col = 0; col < COL; col++)
{
if(broad[row][col] == ' ')
{
return 0;
}
}
}
return 1;
}
char Checkwinner(char broad[ROW][COL])
{
int row;
int col;
for(row = 0; row < ROW; row++)
{
if(broad[row][0] == broad[row][1]
&& broad[row][0] == broad[row][2]
&& broad[row][0] == broad[row][3]
&& broad[row][0] == broad[row][4]
&& broad[row][0] != ' ')
{
return broad[row][0];
}
}
for(col = 0; col < COL; col++)
{
if(broad[0][col] == broad[1][col]
&& broad[0][col] == broad[2][col]
&& broad[0][col] == broad[3][col]
&& broad[0][col] == broad[4][col]
&& broad[0][col] != ' ')
{
return broad[0][col];
}
}
if(broad[0][0] == broad[1][1]
&& broad[0][0] == broad[2][2]
&& broad[0][0] == broad[3][3]
&& broad[0][0] == broad[4][4]
&& broad[0][0] != ' ')
{
return broad[0][0];
}
if(broad[4][0] == broad[3][1]
&& broad[4][0] == broad[2][2]
&& broad[4][0] == broad[1][3]
&& broad[4][0] == broad[0][4]
&& broad[4][0] != ' ')
{
return broad[4][0];
}
if(Isfull(g_broad))
{
return 'q';
}
else
{
return ' ';
}
}
void Game()
{
char winner = ' ';
clock_t start, finish;
start = clock();
srand((unsigned int)time(0));
Init(g_broad);
while(1)
{
Print(g_broad);
Playermove(g_broad);
winner = Checkwinner(g_broad);
if(winner != ' ')
{
break;
}
Computermove(g_broad);
winner = Checkwinner(g_broad);
if(winner != ' ')
{
break;
}
}
Print(g_broad);
finish = clock();
if(winner == 'x')
{
printf("恭喜玩家胜利!\n");
}
else if(winner == 'o')
{
printf("很遗憾!居然让傻子电脑赢了!\n");
}
else if(winner == 'q')
{
printf("此局平局!\n");
}
else
{
printf("抱歉!程序出错!\n");
}
printf("总共用时:%d秒\n", (int) (finish - start) / CLOCKS_PER_SEC );
}
int main()
{
int choice = 0;
while(1)
{
choice = Mneu(choice);
if(choice == 1)
{
Game();
}
else
{
printf("byebye!\n");
break;
}
}
system("pause");
return 0;
}
运行结果: