三子棋的实现——C语言-创新互联
目录
让客户满意是我们工作的目标,不断超越客户的期望值来自于我们对这个行业的热爱。我们立志把好的技术通过有效、简单的方式提供给客户,将通过不懈努力成为客户在信息化领域值得信任、有价值的长期合作伙伴,公司提供的服务项目有:域名申请、虚拟主机、营销软件、网站建设、孝感网站维护、网站推广。一:三子棋的基本流程
二:三子棋的具体步骤
1.创建文件
2.打印菜单
3.创建棋盘
4.初始化棋盘
5.打印棋盘
6.玩家下棋
7.电脑下棋
8.判断输赢
三:三子棋的演示
一:三子棋的基本流程:
首先选择菜单——>选择开始游戏——>输入你要下棋的坐标——>如果满足每行或者每列或者对角线上的都是你的棋子,则游戏胜利。
二:三子棋的基本步骤:1.创建文件
首先我们创建三个文件,分别为test.c,game.c,game.h 三个文件,test.c文件主要是测试逻辑,game.c game.h去实现这个三子棋,在game.h文件主要用来声明函数和定义一些常量。
2.打印菜单
这个菜单就是我们进入游戏的界面,我们可以定义一个菜单函数,在主函数里面定义一个test()函数,将后面实现的代码全部放在里面
int main() {
test();
return 0;
}
为了让我们能一直玩,这里采用了do while循环,将打印的菜单函数放在这个循环,再用switch语句来选择输入选项,是进入游戏还是退出游戏,用1来表示进入游戏,0表示退出游戏,正好while循环的条件表达式就为输入的数,为0正好循环结束。
打印菜单:
void menu() {
printf("*****************************\n");
printf("******** 1. play ******\n");
printf("******** 0. eixt ******\n");
printf("*****************************\n");
}
void test() {
//rand函数(随机数范围0~32767)调用之前要使用srand函数 调用一次即可
srand((unsigned int)time(NULL));
int input=0;//要输入的数
do {
//游戏进去前首先打印一个菜单
menu();
printf("请选择->");
scanf("%d", &input);
switch (input)
{
case 1:
printf("游戏开始啦!!!\n");
game();
break;
case 0:
printf("退出游戏\n");
break;
default:
printf("选择错误\n");
break;
}
} while (input);//可以一直玩下去,一直到输入0游戏结束
}
3.创建棋盘:
创建棋盘就用到二维数组,我们把棋子用字符表示,所以创建一个字符数组。
char board[ROW][COL];
在game.h文件中定义常量行和列
//声明行和列,便于以后修改,改该头文件数据就可以了
#define ROW 3
#define COL 3
4.初始化棋盘:
创建完毕后要对棋盘清空,初始化棋盘都为空格,再创建一个初始化棋盘函数。
init_board(board,ROW,COL);
//此函数让数组的每个元素都是空格
void init_board(char board[ROW][COL], int row, int col) {
int i = 0;
for (i = 0; i< row; i++) {
int j = 0;
for (j = 0; j< col; j++) {
board[i][j] = ' ';
}
}
}
5.打印棋盘
初始化完毕要将这个棋盘打印在屏幕上,再创建一个打印函数。
print_board(board, ROW, COL);
void print_board(char board[ROW][COL], int row, int col) {
int i = 0;
for (i = 0; i< row; i++)
{
int j = 0;
for (j = 0; j< col; j++) {
printf(" %c ",board[i][j]);
if(j
6.玩家下棋:
棋局已经布置好了,开始让电脑和玩家下棋。
player_move(board, ROW, COL);
//实现玩家下棋的函数
void player_move(char board[ROW][COL], int row, int col) {
printf("玩家下棋\n");
//因为要让玩家一直下棋,可以想到用while循环来实现
while (1) {
printf("请输入要下棋的坐标:\n");
int x = 0;
int y = 0;
scanf("%d %d", &x, &y);
if (x >= 1 && x<= row && y >= 1 && y<= col) {
if (board[x - 1][y - 1]==' ') { // 如果玩家输入的坐标不为空,将在输入的地方打印*
board[x - 1][y - 1] = '*';
break; //然后通过break跳出循环
}
else
{
printf("该坐标被占用,请重新输入:\n");
}
}
else {
printf("输入坐标非法\n");
}
}
}
7.电脑下棋:
computer_move(board, ROW, COL);
在这里电脑下棋是编译器随机下棋,如果追求难度的话,还可以写算法来控制电脑下棋,哈哈,这应该算智能三子棋,希望各位可以写写看。
在这里有一个点,C语言的rand()生成随机数,rand函数(随机数范围0~32767)调用之前要使用srand函数 调用一次即可。
//实现电脑下棋的函数
void computer_move(char board[ROW][COL], int row, int col) {
//让电脑随机下棋,自己随机生成坐标
//用rand()函数生成随机值,因为电脑行和列都要随机生成0~2之间的数字,所以让随机数对行和列取余即可
printf("电脑下棋\n");
int x = rand() % row;
int y = rand() % col;
while (1) {
if (board[x][y] == ' ') {
board[x][y] = '#';
break;
}
}
}
8.判断输赢:
在走到这一步了,首先要分析判断输赢的条件:
这时候我们再定义一个判断输赢的函数,返回值返回上图:
//玩家下一次判断输赢
ret=is_win(board, ROW, COL);
//判断棋盘是否满了,满了就是平局
int is_full(char board[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 (board[i][j] == ' ') {
return 0;
}
}
}
return 1;
}
//判断输赢的函数
char is_win(char board[ROW][COL], int row, int col) {
int i = 0;
//判断行是否相等
for (i = 0; i< row; 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[1][1];
}
if (board[0][2] == board[1][1] && board[1][1] == board[2][0] && board[1][1] != ' ') {
return board[1][1];
}
//是否平局
int ret = 0;
if (ret = is_full(board,row,col) == 1) {
return 'Q';
}
//游戏继续
return 'C';
}
最后我们将这些函数放在while循环中,让玩家一直下棋,直到游戏胜利或者平局或者游戏失败:
//while循环让玩家一直下棋
while (1) {
player_move(board, ROW, COL);
print_board(board, ROW, COL);
//玩家下一次判断输赢
ret=is_win(board, ROW, COL);
if (ret != 'C') { //如果等于C,一直往下走,否则跳出循环判断谁赢了
break;
}
//电脑下棋
computer_move(board, ROW, COL);
print_board(board, ROW, COL);
//电脑下一次判断输赢
if (ret != 'C') {
break;
}
}
if (ret == '#') {
printf("电脑赢了哇哈哈哈哈,玩家你真菜\n");
}
else if (ret == '*') {
printf("可以啊你赢了,靓仔\n");
}
else if (ret == 'Q') {
printf("平局了没意思\n");
}
}
自此,整个三子棋的实现就完成了,另外重申的是,在game.h头文件中,声明了这些函数,在其他文件直接包含头文件即可/
#pragma once
#include#include#include//声明行和列,便于以后修改,改该头文件数据就可以了
#define ROW 3
#define COL 3
//头文件声明函数
//初始化棋盘
void init_board(char board[ROW][COL], int row, int col);
//打印棋盘
void print_board(char board[ROW][COL], int row, int col);
//玩家下棋的函数
void player_move(char board[ROW][COL], int row, int col);
//电脑下棋的函数
void computer_move(char board[ROW][COL], int row, int col);
//判断输赢的条件
char is_win(char board[ROW][COL], int row, int col);
最后来看看三子棋最终的实现效果:
你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧
网站题目:三子棋的实现——C语言-创新互联
分享URL:http://myzitong.com/article/csgidc.html