趣味学习C语言.ppt
小时侯,我常在一些小人书和杂志上看见一些迷宫的游戏,非常喜欢玩,还常到一些书上找迷宫玩呢。好的,现在我们用C语言来编个迷宫的游戏,重温一下童年的乐趣。 好的,现在我们用一个二维数组map定义了一个非常酷的地图。如下: char map[10][20] = { "####################", "# # #", "# ######### # # #", "# #### # ###", "# # # # # # ##", "# # #### # # # #", "# # # # # #", "# ##### # ## # #", "# # #", "####################" }; 接着,我们用DrawMap函数把这个地图在屏幕上画出来。 void DrawMap() { int x = 0, y = 0; for (; y < 10; ++y) { for (x=0; x < 20; ++x) { if (map[y][x] == '#') { DrawWall(x, y); } } } } 在判断按键时,如果玩家按的是方向键,我们还要先判断前面是不是有“墙壁”,如果有的话,就不能往前移动了。好的,我们在判断按键的switch语句的各个分支加上了判断语句,如下: case UP: if (map[man.y - 1][man.x] == ‘#’) break;/*如果人前面是墙壁,就不执行下去*/ /* 否则让人向上移动*/ break; 人不能穿过墙壁! 在main函数里,我们定义了“小人”man的坐标和“目的地”des的坐标。在游戏循环中,我们增加了一些用来判断胜负的语句: if (man.x == des.x && man.y == des.y) /*如果人的坐 标等于目的地的坐标*/ { gotoxy(35, 3); printf(“Ok! You win!”); /*输出胜利信息*/ …./*执行退出前的其他操作。*/ } 判断玩家是否到达目的地: OK!这个“迷宫”的游戏我们已经编好了!下面,我们编一个更好玩的游戏——推箱子! 游戏二:聪明的“搬运工” 大家一定玩过“搬运工”的游戏吧!这是在电脑和电子字典上较流行的益智游戏,让我们动手做一个属于自己的“搬运工”吧! 程序依然用数组map来保存地图,数组元素如果为空格则表示什么也没有,‘b’表示箱子,‘#’表示墙壁,‘*’表示目的地,‘i’表示箱子在目的地。我们以后每推一下箱子,不但要改变屏幕的显示,也要改变map相应元素的值。 char map[10][10] = { " ", " ####", " ### @#", " # b #", " ## # ###", " # # # *#", " # # b *#", " # b *#", " ########", " " }; 游戏地图 游戏主循环 接受一个方向键后 判断人前面一格的状态 空地或目的地? 直接移动 墙壁? 不可移动 箱子或目的地上的箱子? 继续判断箱子的前面一格的状态 是否为空地或目的地? 是 推箱子 否 不可移动 程序还有一个重要的功能就是判断胜负。数组Des用来记录全部目的地的坐标,我们每执行一步操作后,程序就要通过Des数组判断这些目的地上是否都有箱子了。 for (i=0, count=0; des[i].x != -1; ++i) /*清空count*/ { /*如果发现游戏地图还有“目的地”没有箱子在上面,就让count+1。*/ if (map[des[i].y][des[i].x] == ‘*’) ++count; } if (count == 0)/*全部目的地上都有箱子了,你赢了!*/ { gotoxy(35, 3); printf("Ok! you win!"); } 好的,编游戏就这么简单……