制作一个简易的三子棋游戏
首先是主文件
#include<stdio.h>
#include"game.h"
void menu()
{
printf("进入三子棋游戏!\n");
printf("**************\n");
printf("*** 1.play****\n");
printf("*** 0.eixt****\n");
printf("**************\n");
printf("请选择->:\n");
}
void game()
{
char win = 'C';
char board[row][col];
//初始化棋盘
init_board(board,row,col);
//打印棋盘;
print_board(board, row, col);
while (1)
{
//玩家下棋
player_move(board, row, col);
//打印棋盘;
print_board(board, row, col);
//制作一个一秒延迟
Sleep(1000);
//判断输赢
// *
// #
//平 Q
//继续 C
win = is_win(board, row, col);
if (win != 'C')
{
break;
}
//电脑下棋
computer_move(board, row, col);
//打印棋盘;
print_board(board, row, col);
//判断输赢
win = is_win(board, row, col);
if (win != 'C')
{
break;
}
}
if (win == '*')//注意等于号
printf("恭喜玩家获得胜利!");
else if (win == '#')
printf("很遗憾,让电脑取得胜利");
else if (win == 'Q')
printf("平局");
Sleep(3000);
system("cls");
}
void test()
{
int play = 0;
do
{
menu();
scanf("%d", &play);
switch (play)
{
case 1:
printf("开始游戏!\n");
game();
break;
case 0:
printf("退出游戏!\n");
break;
default:
printf("选择错误,请重新输入。\n");
break;
}
} while (play);
}
int main()
{
srand((unsigned int)time(NULL));
test();
return 0;
}
创立了game.h的头文件
row与col是棋盘行列的大小
V是连续相同棋子的个数,同时也标志着它是几子棋
#include<windows.h>
#include<stdio.h>
#include<time.h>//使用时间戳
#include<stdlib.h>//打开系统和制作随机数
#define row 3
#define col 3//棋盘大小
#define V 3//确定三子棋
//初始化
void init_board(char borad[row][col], int ROW, int COL);
//打印棋盘
void print_board(char borad[row][col], int ROW, int COL);
//玩家进行选择//玩家下棋为‘*’,电脑下棋为‘#’
player_move(char board[row][col], int ROW, int COL);//行和列传形参//
//电脑下棋 电脑下棋为'#'
computer_move(char board[row][col], int ROW, int COL);
//棋盘是否下满
//int is_full(char borad[row][col], int ROW, int COL);//由于只用原函数中,故不引用头文件
//胜利条件
char is_win(char board[row][col], int ROW, int COL);
补全游戏game.c的源文件
#include"game.h"
void init_board(char borad[row][col], int ROW, int COL)
{
int i = 0;
int j = 0;
for (i = 0; i < row; i++)
for (j = 0; j < col; j++)
borad[i][j] = ' ';//字符使用单引号
}
void print_board(char borad[row][col], int ROW, int COL)
{
int i = 0;
for (i = 0; i < row; i++)
{
for (int j = 0; j < col; j++)
{
printf(" %c ", borad[i][j]);
if (j != col - 1)
printf("|");
}
printf("\n");
if (i != row - 1)//row-1是最后i可以取的数,而最后一个不需要"|"
{
for (int j = 0; j < col; j++)
{
printf("---");
if (j != col - 1)
printf("|");
}
printf("\n");
}
}
}
player_move(char board[row][col], int ROW, int COL)
{
printf("玩家下棋。\n");
printf("请输入要下棋的坐标:\n");
int x = 0;
int y = 0;
//int flag = 1;可以直接break
while (1)//防止玩家下棋非法
{
scanf("%d%d", &x, &y);
if (x > row || y > col || x <= 0 || y <= 0)
printf("坐标选择错误,请您重新选择!\n");
else
{
if (board[x - 1][y - 1] == ' ')
{
board[x - 1][y - 1] = '*';
break;
}
else
{
printf("这个位置已经下过棋了,请您重新选择!\n");
}
}
}
}
computer_move(char board[row][col], int ROW, int COL)
{
printf("电脑下棋。\n");
int x = 0;
int y = 0;
while (1)
{
x = rand() % row;//电脑下棋最大坐标为下标值
y = rand() % col;
if (board[x][y] == ' ')
{
board[x][y] = '#';
break;
}
}
}
static int is_full(char borad[row][col], int ROW, int COL)//判断棋盘是否填满//并且只在这一个函数中使用
{
int i = 0;
int j = 0;
for (i = 0; i < row; i++)
{
for (j = 0; j < col; j++)
{
if (borad[i][j] == ' ')
return 0;
}
}
return 0;
}
char is_win(char board[row][col], int ROW, int COL)
{
int i = 0;
int j = 0;
int flag = 1;
for (i = 0; i < row; i++)//判断每行是否结束
{
for (j = 0; j < col - 1; j++)
{
if (board[i][j] == board[i][j + 1] && board[i][j] != ' ')
{
flag++;
if (flag == V)
{
return board[i][j];
}
}
else
{
flag = 1;
}
}
}
for (j = 0; j < col; j++)//判断每列是否结束
{
for (i = 0; i < row - 1; i++)
{
if (board[i][j] == board[i + 1][j] && board[i][j] != ' ')
{
flag++;
if (flag == V)
{
return board[i][j];
}
}
else
{
flag = 1;
}
}
}
for (i = 0; i < row-1; i++)//判断每条右下斜线是否结束
{
for (j = 0; j < col - 1; j++)
{
if (board[i][j] == board[i + 1][j + 1] && board[i][j] != ' ')
{
flag++;
if (flag == V)
{
return board[i][j];
}
}
else
{
flag = 1;
}
}
}
for (i = row - 1; i > 0; i--)//判断每条左上斜线是否结束
{
for (j = 0; j < col - 1; j++)
{
if (board[i][j] == board[i-1][j + 1] && board[i][j] != ' ')
{
flag++;
if (flag == V)
{
return board[i][j];
}
}
else
{
flag = 1;
}
}
}
if (is_full(board, row, col)==1)
{
return 'Q';//字符Q
}
return 'C';
}
一整个游戏就制作完成了!