程序设计课程设计

上传人:cn****1 文档编号:512975709 上传时间:2023-05-26 格式:DOCX 页数:7 大小:14.35KB
返回 下载 相关 举报
程序设计课程设计_第1页
第1页 / 共7页
程序设计课程设计_第2页
第2页 / 共7页
程序设计课程设计_第3页
第3页 / 共7页
程序设计课程设计_第4页
第4页 / 共7页
程序设计课程设计_第5页
第5页 / 共7页
点击查看更多>>
资源描述

《程序设计课程设计》由会员分享,可在线阅读,更多相关《程序设计课程设计(7页珍藏版)》请在金锄头文库上搜索。

1、目录一、绪论 2二、设计目的 2游戏规则2三、实现 31. 库函数 32. 全局变量 33. 地图的设计 34. 图片加载函数 35. 界面初始化 46. 查找人物坐标函数 47. 移动函数 48. 判断游戏是否结束 49. 游戏过程函数 510. 计步函数 511. 选择关卡函数 512. 界面随机化函数 5四、调试 6调试一6调试二6调试三6五、结论 6绪论经典的推箱子游戏是一个来自日本的古老游戏,它是一款极具趣味的益智游 戏,在游戏过程中训练了玩家的逻辑思考能力。在一个狭小的仓库中,要求把木 箱放在指定的位置,稍不小心就会出现箱子无法移动或者通道被堵住的情况,所 以需要巧妙的利用有限的空

2、间和通道,合理安排移动的次序和位置,用最少的步 数将所有箱子推到目的地去。其开发过程有一定的技巧和方法,其中设计到三维数组,键盘操作,图形函 数,调用音乐函数的灵活运用,产生随机函数,八进制数的使用以及一些基本的 函数嵌套、递归使用。二、 设计目的编写一个推箱子游戏,使用图形界面。推箱子游戏的目的是用最少的步数把 所有的箱子推到目标位置。游戏规则1. 游戏开始时,在游戏区域内随机的出现箱子、障碍物、小人以及箱子的目标 位置。2. 箱子只可以被推动,不可以被拉动。3. 用户通过键盘的来控制小人上下左右的移动来推动箱子。记录用户移动小人 的次数。4. 如果箱子被推到死角,则游戏结束。5. 所有箱子

3、被推到目标位置,游戏胜利。6. 可以增加关卡,不同的关卡,难度不同。7. 可以允许用户悔步,即用户可以选择取消上一次的移动。实现1. 库函数库函数 主要 stdio.h 、 graphics.h 、 time.h 、 conio.h 、 #pragma comment(lib,Winmm.lib)等,其中 graphics.h 实现图片加载等功能、time.h 是随机地图的生成,#pragma comment(lib,Winmm.lib)在加载背景音乐时所必 须的。2. 全局变量定义人物的坐标x, y,关卡计数k和步数计数n_step为全局变量,减少在 编程过程中函数定义和使用过程中形参的数目

4、,减少一些麻烦。定义了一个数组 a9 9作为临时地图的储存,该游戏设计有多关卡,故使用三维数组 b599将b5定义为不同的关卡。3. 地图的设计地图用二维数组表示,用 0 表示空地, 1 表示人物, 2 表示箱子, 3 表示目 的地,6表示围墙,前三关地图是人为设计的,后两关void get chance ()函数 随机制成。设置为靠近的数字有利于程序的简短,如使用自加自减。4. 图片加载函数定义了一个一维图形数组IMAGE img9用于存储图片。loadimage(&img0, 图片O.jpg);用于加载程序中使用的图片到img0。定义一些图片加载函数如 void blank(int x1,

5、 int y1); 在坐标为 x1,y1 处加载图片空地。5. 界面初始化先用Easyx定义一个540*600的控制台,在该界面中有540*540用于加载游 戏地图,下面剩余部分用于显示每个关卡游戏所用步数。用函数void interdace(),用easyx中函数设置背景颜色,以及字体颜色。 在初始化界面中有三个选择:关卡选择、游戏说明和关于游戏。对应的显示函数 使用的是outtextxy(110,250,*),用switch语句选择,三个选择 对应的三个函数 voidSelect_stage()、voidGamedescription()、 voidAboutgames()。游戏说明和关于

6、游戏设计相似,都是一些信息的显示,如游 戏的玩法和开发者的一些信息,涉及到一些文档显示函数。假如选择不在三个菜 单中则switch中语句default:voidinterdace();break;通过函数的递归使界面 停留在界面初始化选择界面。6. 查找人物坐标函数查找人物坐标x, y函数void find(int a99)因x,y是全局变量,所以 该程序中函数可以改变x,y的值,当遍历数组a时,如果axy处的值为1, 那么返回,函数结束,此时x,y的值就是人物的坐标。7. 移动函数移动函数 void move(int a99, int xl, int yl)中 x1, y1 表示移动过 程中

7、相对于人的相对坐标,如向下移动即为move(a,0,-1)。在移动过程中有三 种情况,下一步为箱子、墙和目的地。其中难点为假如下一步为箱子,则在该方 向的挨着箱子的目的地或者空地则可以推动,墙和箱子则不能。如果能推动,则 x,y分别加上x1,y1,实现移动,人走后该处就是空地,用axy-实现。如 果不能推动,则x,y分别加上x1,y1,实现移动。8. 判断游戏是否结束函数int win(int a99)当地图中还有箱子时,游戏还没有结束,当地 图中没有箱子时,游戏结束。在还有箱子的情况下,如果箱子的任意两个相邻边 挨着的是墙,那么表示箱子推到死角,游戏结束,对于不同的情况,函数返回的 值不一样

8、,如果推到死角,返回值为 2,地图中没有箱子,则返回值为初始值 1, 在循环判断是取返回值的非,则游戏结束。假如不是以上两种情况,则返回 0, 游戏继续。9. 游戏过程函数游戏过程函数int play(int b599,int a99)中以循环语句为主, 来对游戏进行反复绘图打印,以及判断游戏是否继续,主循环里面嵌套了一个循 环,主循环用于关卡之间的顺序进行,而嵌套的则用于某关卡的进行判断,游戏 胜利或者游戏失败则跳出循环,继续该关卡或下一关。10. 计步函数计步函数void Step(int a)通过在游戏过程函数中调用该函数,进行计算 步数,通过语句sprintf(sl,第%小关已走步数:

9、d,k+l,a)将数字k+1和a转化 为字符串储存在字符串 s1 中在指定位置输出。11. 选择关卡函数开始的界面显示与关于游戏和游戏说明函数一致,利用 switch 语句通过输 入的值改变全局变量k的数值,而后在游戏过程函数play(b,a)中将该关地图复 制到临时数组a99中。12. 界面随机化函数void getchance(int b599)该函数通过 srand(time(null)和 rand() 随机生成地图,假如该位置是空地,即数组的值为0则可以生成人物、箱子等, 否则循环继续,直到产生的位置为空地。调试调试一在运行程序时,界面初始化函数总出现异常退出,当加了 default

10、时,无论 后面加的是什么函数或者按下的什么键,执行的函数都是一样的,default后面 的函数,当输入时为英文条件下时,程序正常运行。调试二在游戏过程函数时获取键盘操作方向时,定义一个字符char c,而后c=getch(),发现方向键没有效果,而wads有效果,经过分析方向键的获取前提 时ASCLL码的值是224,将caseOXEO:换成case224或者default时函数依然 执行。原因在于一方向键要用两个getch ()才能把它的数据读完,然后对应 两个字符数据,一个当高位,一个当低位,就可以判断按下的什么键。调试三在地图随机过程中,开始没有任何判断,会出现目的地的数目和箱子数目不 一

11、致的情况,在于先生成的目的地被箱子覆盖,增加只在空地生成地图的判断条 件。但会出现生成的箱子一开始就在死角位置,游戏还没开始就已经结束,故把 判断是否在死角位置处的代码重用,避免上述情况的产生。五、 结论在这次课程设计中,刚开始没有一点头绪,如不了解什么是图形界面呢,如 何使箱子推动,人遇到墙,下一步该如何移动,推箱子挨着箱子的是箱子,怎样 使他推不动,等等或大或小的问题。通过查询资料,访问网络,自己的摸索,终 于完成课程设计,在期间,我不仅复习了课本上的知识,还启发我,想做一个合 格的计算机专业人才,还需利用好网络,善于做到学以致用。我在这次课程设计 中学会图形函数,以及建立一个大规模的工程所有的全局观念,锻炼了我的编程 能力,获益匪浅。

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 学术论文 > 其它学术论文

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号