合肥建站,鲜花网站模版,网站建设打不开,做英文的小说网站前言
大家已经和博主学习有一段时间了#xff0c;今天讲一个有趣的实战项目——三子棋 目录
前言
制作菜单
构建游戏选择框架
实现游戏功能
模块化编程
初始化棋盘
打印棋盘 玩家下棋
电脑下棋
时间戳#xff1a;推荐一篇
C语言生成随机数的方法_c语言随机数_杯浅…前言
大家已经和博主学习有一段时间了今天讲一个有趣的实战项目——三子棋 目录
前言
制作菜单
构建游戏选择框架
实现游戏功能
模块化编程
初始化棋盘
打印棋盘 玩家下棋
电脑下棋
时间戳推荐一篇
C语言生成随机数的方法_c语言随机数_杯浅的博客-CSDN博客
判断输赢
游戏逻辑实现 制作菜单 在玩游戏时我们在进入游戏都会有菜单选项选择开始游戏推出游戏等这些指令说到选择那么我们可以依据我们所学的循环和分支语句来先完成基本框架的设计。
首先我们进入游戏都是先显示选项做出选择并且在玩游戏时玩一局还想玩怎么办想一想我们前边的知识哪种结构符合先进入游戏出现菜单再循环这一需求那肯定是do…while的循环结构更符合那么我们就先使用函数来打印输出一个菜单选项
void menu()
{printf(*****************************\n);printf(*****************************\n);printf(**********1.play^************\n);printf(**********0.exit^************\n);//菜单printf(*****************************\n);printf(*****************************\n);
}int main
{int a 0;do{menu();printf(请选择);scanf%d,a;}while();
return 0;
}
构建游戏选择框架
游戏菜单已在屏幕上显示完成现在需要完成选择并且在玩游戏时玩一局还想玩怎么办。
这时候需要应用博主之前阐述的switch语句来实现
int main()
{int input 0;do{menu();printf(PLEASE SELECT:);scanf(%d, input);switch(input){case 1:game(); //以上为界面的选择break;case 0:printf(Exit\n);break;default:printf(ERRO,PLEASE CHOOSE AGAIN\n);break;}} while (input);//while循环可以利用0为假其余为来实现用户可反复选择
//直到选到合适为止return 0;
}
实现游戏功能
模块化编程
这里博主引入一个概念模块化编程。方便引用不会显得头重脚轻而且转为静态库不易被盗用。这里需要创建三个文件test.c game.c game.h
test.c:是用来实现游戏逻辑 game.c:用来实现游戏功能的函数 game.h:用来申明游戏功能函数可引用
传统方式编程所有的函数均放在main.c里若使用的模块比较多则一个文件内会有很多的代码不利于代码的组织和管理而且很影响编程者的思路。
模块化编程把各个模块的代码放在不同的.c文件里在.h文件里提供外部可调用函数的声明其它.c文件想使用其中的代码时只需要#include XXX.h文件即可。使用模块化编程可极大的提高代码的可阅读性、可维护性、可移植性等。
传统方式编程所有的函数均放在main.c里若使用的模块比较多则一个文件内会有很多的代码不利于代码的组织和管理而且很影响编程者的思路。
模块化编程把各个模块的代码放在不同的.c文件里在.h文件里提供外部可调用函数的声明其它.c文件想使用其中的代码时只需要#include XXX.h文件即可。使用模块化编程可极大的提高代码的可阅读性、可维护性、可移植性等!
总的来说就是当你代码比较多的时候就可以采用模块化编程来完成这个程序。
三子棋我们需要在棋盘中输入要下的位置相当于是一个三乘三的数组这里我们就用到了二维数组的知识那么游戏开始前需要我们先对棋盘初始化使数组中的元素都为空格那么就是数组初始化赋值只用循环遍历每一个元素并赋予空格就ok了。
注意这里设置函数的时候因为用到二维数组所以函数的形参为数组名行 列 void initboard(char board[row][col], int hang, int lie)
{int i 0;int j 0;for (i 0; i hang; i){for (j 0; j lie; j){board[i][j] ;} printf(\n);}
} 打印棋盘
将置空的二维数组用线隔开
void displayboard(char board[row][col], int hang, int lie) //可以随意控制棋盘大小
{int i 0;for (i 0; i hang; i){int j 0;for (j 0; j lie; j){printf( %c ,board[i][j]);if (j lie - 1)//为了不让最后一行打印‘|’printf(|);}printf(\n);if (i hang - 1){int j 0;for (j 0; j lie; j){printf(---);if (j lie - 1)printf(|);}printf(\n);}}
}效果图 玩家下棋
玩家下棋的话使用*标志利用坐标来将“空格”替换
void player(board[row][col],int hang,int lie)
{int x 0;int y 0;
printf(玩家开始下棋);
scanf(%d %d,a,b);
if(x1x3y1y3)
{ if(board[x-1][y-1] ){board[x-1][y-1]*;}else
{printf(坐标已经被占用请重新选择);}else
{printf(坐标非法请重新输入);}}
}玩家下完棋需要有对立面也就是我们的电脑
电脑下棋
时间戳推荐一篇
C语言生成随机数的方法_c语言随机数_杯浅的博客-CSDN博客
void computer(char board[row][col], int hang, int lie)
{printf(电脑下棋\n);int x 0;int y 0;while(1){ x rand() % hang;//0-2//模取余数不会超过这个数y rand() % lie;if (board[x][y] ){board[x][y] #;break;}}
}
判断输赢
输赢情况分析行三连列三连对角线俩条。
char panduan(char board[row][col], int hang, int lie)
{int i 0;for (i 0; i hang; i)//行{if(board[i][0]board[i][1]board[i][1]board[i][2] board[i][1] ! ){return board[i][1];//电脑和玩家都可以用这一个判断}}int j 0;for (j 0; j lie; j)//列
{if (board[0][j] board[1][j] board[1][j] board[2][j] board[1][j] ! ){return board[1][j];}}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];}//平局if (isfull(board, hang, lie)){return q;//平局 else} return c;
}
游戏逻辑实现
创建菜单函数选择 进入游戏 以及 退出游戏。 首先初始化 棋盘。 然后再打印棋盘。注意一定是要先进行 初始化 然后再 打印棋盘。 玩家下棋并打印出棋盘玩家输入行、列坐标方式进行落子x 玩家落子 判断玩家是否 赢判断是否 继续游戏。(字符c代表 继续游戏、字符q代表 游戏平局) 电脑进行落子下棋(随机位置进行落子o 电脑落子) 判断③种胜负方式分别是玩家赢、电脑赢、以及 平局。 然后再回到步骤①是否选择 进入游戏 以及 退出游戏。
void game()
{int key 0;char board[row][col] { 0 }; //不直接写成数字利于改变棋盘大小//初始化棋盘的函数initboard(board,row,col);displayboard(board,row,col);while(1){player(board, row, col);keypanduan(board, row, col);if(key!c){break;}displayboard(board, row, col); computer(board, row, col);key panduan(board, row, col);if (key ! c){break;}displayboard(board, row, col);} if (key *){printf(玩家胜利\n);}else if(key#){printf(电脑胜利\n);}else if(keyp){printf(平局\n);}
}
另外我们还需要将game.c以声明的形式放入game.h中
#pragma once
#define _CRT_SECURE_NO_WARNINGS
#include stdio.h
#includewindows.h
#includestdlib.h
#includetime.h//这个全可以调用
#define row 3
#define col 3
//初始化棋盘
void initboard(char board[row][col], int hang, int lie);
//打印棋盘 难点
void displayboard(char board[row][col], int hang, int lie);
//玩家下棋
void player(char board[row][col], int hang, int lie);
//电脑下棋
void computer(char board[row][col], int hang, int lie);
//判断输赢 玩家赢 电脑赢 平 继续/
char panduan(char board[row][col], int hang, int lie);
int isfull(char board[row][col], int hang, int lie);
之后利用test.c来实现游戏逻辑(在编辑的开始需要加上#includegame.h)
好了今天的文章到这里希望对大家有帮助!