啊哈C语言:第8章 《游戏时间到了》-----2020/4/10
从2月底开始直到前天,当我学完二维字符数组、字典序后,翻到这一章的页面时,心情是欢喜的,我想一件坚持了很久的事情做到了最后关头,都是付出的时间、精力的成果!开心心!
而一个多月坚持独立思考的成果终于要检验了!相对于之前写过的程序,一个具有可操作性可玩性的游戏,是一种更加具象化的成果体现,也更加有成就感!!
下面就是正文啦!
第一个游戏:走迷宫!
使用井号‘#’制作迷宫的宫墙,将大写字母‘O’当作小球,作为玩家操作的对象,右侧宫墙有一处缺口是终点,通过W S A D四个按键分别控制小球进行上、下、左、右的移动。
玩法是进入游戏操作小球从起始位置移动到终点即为游戏胜利。
迷宫主体全部使用 ‘ # ’组成,井号在C语言中属于字符,这让我们联想到使用一行行的字符串打印迷宫。那就是多行字符,所以应该要用上一章刚学的二维字符数组来打印这个地图!
观察地图的行列,一共有20行30列,每行字符串末尾有一个结束标记,所以定义二维字符数组a为:char a[20][31] ……后面按照迷宫的结构,初始化迷宫,每行无 # 处用空格键隔开,注意每行细节不能错。
效果如下:
char a[50][50]={
"##############################",
"#O # ## # ### ####",
"# ###### # # # # # ### ####",
"# # ## # # #### # ### ##",
"# # ## ### # # ## ####",
"##### # # ##### ## ####",
"# # ##### # # # # # #",
"# # # ## # #### ## # # ####",
"# # # ## ## # # ####",
"# # # ####### ## ###### # ##",
"# # ## # ## ###### ### #",
"# ###### # ##### # # #",
"# # # ##### ### # ",
"# ######## ##### # ### ### # #",
"# # ## ##### ### ###",
"##### # ## # ######## # #",
"# # ## ## ### # #",
"# # ### ###### ####### #",
"# # ### ## # #",
"##############################"};
注意字符串从0开始计数。之所以定义51行49列,因为方便。
而地图本身的20行30列准确定义为 a [19] [30] 中 20是行X表示20行,30是
列Y表示30列。
故理解行列为XY后,我们利用a [x] [y] 可以通过x、y来表示地图中任意位置。
故小球O 的位置是a[1][1],终点出口的位置是a[12][30]
故我们使用x=1;y=1存储小球起始位置,p=12;g=30存储终点位置
提前定义完xypg的值,还需要一个 i 来控制输出地图的for循环。
int i,x,y,p,q;
char ch;
x=1;y=1;p=12;q=30;
主要操作是控制小球移动,WASD四个按键,本质其实是输入字符WASD,所以每个循环最开始都是使用输入语句getch获取输入的字符。故应当定义一个字符变量ch来存储输入的字符。
先清屏,然后输出地图。紧接着进while循环,循环条件为1死循环。
获取字符后,用if语句判断输入的是什么字符。
for(i=0;i<=20;i++)
puts(a[i]);
while(