在visualc下编写的c语言推箱子游戏_第1页
在visualc下编写的c语言推箱子游戏_第2页
在visualc下编写的c语言推箱子游戏_第3页
在visualc下编写的c语言推箱子游戏_第4页
在visualc下编写的c语言推箱子游戏_第5页
已阅读5页,还剩20页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、山东交通学院c语言课程设计推箱子游戏院(系)别信息工程系班级信息093学 号 100819220姓名贺可晓指导教师*时 间 2011-08-282011-09-12课程设计任务书题目推箱子系(部)信息工程系专业电气工程及其自动化班级电气102班学生姓名贺可晓学 号 10081922008 月28 日至09 月2 日共1 周指导教师(签字)系主任(签字)2011 09 02、设计内容及要求:(1)箱子只能推动而不能拉动。一次只能推动一个箱子。(2)在一个狭小的仓库中,要求把木箱放到指定的位置,稍不小心就会出现箱子无法移动或者通道被堵住的情况。(3)本游戏的目的就是把所有的箱子都推到目标位置上。(

2、4)此游戏目的是在训练你的逻辑思考能力。、设计原始资料:本游戏的目的就是把所有的箱子都推到目标位置上。箱子只能推动而不能拉动。一次只能推动一个箱子。经典的推箱子是一个来自日本的古老游戏,目的是在训练你的逻辑思考能力。在一个狭小的仓库中,要求把木箱放到指定的位置,稍不小心就会出现箱子无法移动或者通道被堵住的情况,所以需要巧妙的利用有限的空间和通道!三、设计完成后提交的文件和图表1 .计算说明书部分假设数字0代表空地,数字1代表墙壁,数字2代表非游戏的填充内容(非必须内容),可是地图看起来 规则,数字3代表目的地,数字4代表箱子,数字6代表人。那么人移动到空地上时数字值的变化为:6+0=6;人移到

3、目的地时其位置的数值变化为:6+3=9;箱子移动到空地时数值的变化为:4+0=4;箱子移动到目的地时数值的变化为:4+3=7;再就是每一次的移动都必须根据实际情况,来改动原位置和移动位置的数值,还原出地图原样模型。2.图纸部分:程序流程图否四、进程安排第一大:分析问题,找出大体的设计思路。第二天:构造出程序大体框架,即各种功能模块的组合。第三天:分别写出个功能模块程序的源代码。第四天:讲个功能模块加入主程序中,并实现所有的程序基本功能。第五天:优化程序中的不足之处,优化显示界面,添加辅助功能模块增加程序的趣味性。使程序软件更加适宜用户的操作和娱乐需要。第六天:准备程序答辩。五、主要参考资料1谭

4、浩强,c程序设计(第三版)。北京:清华大学出版社,2005 (2007重印)2马安鹏.visual c+程序设计导学。北京:清华大学出版社,20023 h.m.deitel,p.j.deitel. small c+ how to program.2006.4richard c.leinecker,tom archer. visual c+ 6 宝典.张艳,张谦译.北京: 电子工业出版社,19995 beck zaratian.microsoft visual visual c+ 6.0程序员指南.希望图书创作室译.北京:北京希望电脑公司出品,1998成绩评定表口试(答辩)成绩报告成绩总评成绩摘

5、要私11践内能力在高的的、学知在逋用马二占力qwt行更 仁u造l、学校特仁1遇iw手配私连仁 visual c+程cd段thdh雪在行电:来寸.匚群li/、靓明 visual c+6.0碟境cd下、 1 0077 1-x7程在段言十l乙、7卜工t上箱在押避圃o7卜工:teo械能上、 二一一字符在巾俞入马。 字内 符a 上向左走在代表字内符 s 上代表下步字内符 d 上 向右走在代表字符 w 上向上匕行 乙占在代表人在制御箱在行岂先在押寸乙占力、月券利7卜工7目的上人在锻 能力在:思惟)以下1?程仕棣在通谩bt、k序?7卜工了力?)内靓明力提示马二占在操 作手口彘士靓明马在调箭fl、余念括l太方

6、面在h髡手k在群 靓寸马造l/aa程和作用口、褚般内力就行太九)二占力操。关键字:箱力在押寸,vc+6.0,源手口h前 言 11 课程设计概述 21.1 推箱子游戏软件功能概述 21.2 visual c+6.0 概述 22 推箱子游戏软件总体设计 22.1 推箱子游戏软件总体设计思想 22.2 总体设计流程图 43 推箱子游戏软件详细设计 53.1 两个主要问题 53.1.1 地图的生成 53.1.2 人或人和箱子的移动 54 程序测试 错误!未定义书签。4.1 菜单界面 错误!未定义书签。4.2 游戏中的界面 错误!未定义书签。5 课程设计总结 6致谢 6参考文献 76 附录(程序源代码)

7、 8山东交通学院课程设计报告、乙visualvisual刖 百随着计算机技术的发展,可视编程技术占有了越来越重要的作用。c+6.0是一种功能强大行之有效的可视化编程工具。因此此软件是在c+6.0环境下编写的。对于我们,随着学习的深入,已经大体掌握了 visual c+6.0 环境下的程序开发。为了将我们的编程能力提升到一个更高的水平,深化面向对象 的编程思维和解决问题的能力,值此课程设计周期间,进行基于visual c+6.0环境的软件开发,先以推箱子游戏作为开始,对 visual c+6.0环境和c语言的模块 编程设计进行回忆和熟悉,有利于促进面向对象程序设计思想的理解,使得在此基 础上的下

8、一个软件的开发进行的更加顺利。本文档详细叙述了基于visual c+6.0环境下的推箱子游戏软件的设计过程以 及程序源代码。本文档从概要设计,详细设计,参考源程序代码以及显示程序运行的截屏等方 面详尽的介绍了软件开发过程。此次推箱子游戏软件的开发目的是使我们用最基础的c语言程序设计的方式来思考和解决问题的能力,并且可以掌握二维数组的使用、循环控制的使用、地图的 设计和使用以及c语言语法。本文档的安排如下:第一章主要介绍了对面向对象c+邮言以及visual c+6.0编程环境。第二章主要的介绍说明了推箱子游戏软件的编程思想和详细设计。第三章主要对推箱子游戏软件进行调试,运行程序并截图,显示运行界

9、面和结果。第四章主要介绍了软件开发过程中遇到的一些问题,对该软件进行的一个总结。程序在设计的过程中遇到的问题已及时更正,但由于编者的能力和水平有限, 推箱子游戏软件和文档中不免会出现一些不期待的错误,望文档读者能够理解和体 谅,并欢迎提醒和纠正,在此表示感谢以及敬意。31 课程设计概述1.1 推箱子游戏软件功能概述在一个狭小的仓库中,把木箱放到指定的位置,通过控制人的走向来推箱子移动, 箱子只能推动不能拉动,一次只能推动一个箱子。稍不小心就会出现箱子无法移动或者通道被堵住的情况,所以需要巧妙的利用有限的空间和通道。通过此游戏可以锻炼一个人的逻辑思维能力。1.2 visual c+6.0 概述v

10、isual c+是微软公司的重要产品之一,是一种功能强大行之有效的可视化编 程工具。它提供了 mfc1库,使用户可以方便的开发自己想实现的功能。visual c+6.0 的主要特点:(1)自动化和宏功能。(2)可以灵活地定制工具栏和菜单。(3)可以直接运行和调试程序,还可以使用宏语言来自动操作调试器。(4)支持internet 连接。(5) 一个新的便捷的项目系统可以允许一个工作区内包含多个不同的项目类型。(6)在工作区内可以包含多个并列的工程文件。(7)可以在对话框中使用 wizardbar将程序同可视化元素联系起来。(8) find in file命令支持两个独立的输出窗格,可以保存上一次

11、搜索的结果。这些新特性可以更好地利用 visual c+开发工具进行windows应用程序开发。2推箱子游戏软件总体设计2.1推箱子游戏软件总体设计思想推箱子游戏软件的功能是锻炼人的逻辑思维能力。推箱子游戏软件的功能模块有:(1)提供菜单界面,方便用户对程序个功能进行选择,选择要实现的功能按相 应的键进入该功能。(2)地图的生成,用二维整型数组来构成地图,其中数字代表特殊的符号。(3)移动,人或人和箱的移动,接受用户输入的一个字符,控制人的走向,并 且可以在允许的情况下推动箱子。(4)时间的统计,可以看整个程序(相当于游戏)运行时所用的时间。(5)清屏功能,使用了清屏函数,当在游戏中时可以直接

12、返回主菜单,(6)利用了辅助色彩函数,使游戏界面更加好看,美观。在源程序中声明并定义了 void draw_map(int map1012) / 地图函数, void move(int map1012)/移动函数使用了: #include / 标准输入输出头文件#include /system函数的头文件#include /getch 函数的头文件#include time.h /调用时间函数的头文件多种头文件。程序中还应用了全局变量:char le; /控制关数的全局变量char input; /接收按键字符程序分为多个小模块,通过调用实现各种功能,增强了程序的可建设性。2.2总体设计流程图

13、菜单界面返 回 菜 单按q键 控 制退 出 界 面1t按3键程 序 结 束1,2关游戏胜利图21 2总体设计流程山东交通学院课程设计报告3推箱子游戏软件详细设计3.1 两个主要问题设计中的两个主要需解决的问题是: 怎样生成地图、怎样实现人或人和箱子的移 动。3.1.1 地图的生成设计中用二维整型数组中的数字元素表示不同的物体,比如0代表空地,1代表墙,2代表非游戏的填充内容(非必须内容),可以使地图规则,3代表目的地,4代 表箱子,6代表人。然后用一个switch语句给每个数字赋予不同的符号,在输出二 维数组,生成地图。3.1.2 人或人和箱子的移动设计中要想使人移动,首先要找到人的起始位置,

14、然后才能开始移动。人向四个 方向移动的原理是相同的,我们可以先研究一个方向的移动, 找到人的位置后,以人 向上走为例,因为向上走嘛(可以通过 数组下标表示)。(1)要判断人前面(上一行),是否为空地,是空地则可以移动,移动后判断并 改变人员原位置的数值元素和空地原位置的数值元素;否则不移动。(2)如果人前面是目的地,人也是可以移动的,同样判断人原位置数值元素, 并改变人员位置的数值元素和前一位置的数值元素。(3)如果人前是在空地上的箱子。如果箱子前面又是空地,则可以移动,改变 箱子前位置的数值元素,还是判断原位置的数值元素,然后改之;如果箱子前为目的 地,和上面说的一样移动和改数值元素,只是多

15、了计分这一步。(4)如果人前是已经进入目的地的箱子。如果箱子前又是空地,则可以移动箱 子,但是要减分,改变空地位置的数值元素,判断人和箱子原地的数值元素,并改之; 如果箱子前是另一目的地,方法同上,只是不减分。用分数控制箱子是否已全在目的 地。(5)每一次的移动,必须要清屏,然后再显示一次地图,这样便可以实现人或 人和箱子的移动。4课程设计总结为了提高我们的实践能力,让我们学以致用,能灵活运用所学的知识进行再创造, 学校特安排我们进行为期一周的 visual c+课程设计实习,并安排了指导老师帮助 辅导,让我们在规范化、严谨化、实用化上面有了很大进展。在此次推箱子游戏程序开发过程中,有很多东西

16、值得我们思考并总结。开发过程大体可分为以下几个步骤:(1)思考总体设计方案:总体结构和模块外部设计,功能分配。思考要实现整 个程序大体需要的几个模块和其中用到的 visual c+语言基本操作符、语句等。(2)画出总体设计方案流程图:用流程图的形式展现你的基本编程思想。(3)流程图具体化:即将流程图中的几大模块的具体实现思考清楚,可以用流 程图的形式展现.并想好实现的关键代码。(4)编辑程序代码:这是一个至关重要复杂而且需要反复修改的环节,在此环 节中你将发现总体设计和模块思想会存在很多问题,需不断改进.如何实现各函数功能,达到预期效果也将是一项繁复的工作。(5)代码的调试:在visual c

17、+6.0环境下输入代码并进行调试和正确运行。 在调试过程中会遇到很多需要精化的地方,需要十足的耐心与细心,不断改进完善程序。(6)最后修饰:程序可以正确运行之后,再不影响程序功能的情况下,运用各 种辅助性符号,使界面更加美观漂亮,操作更人性化.增强程序的新意与可行性。通过这次课程设计,使我们更加熟悉的掌握了visual c+语言的运用。帮助我们熟悉了更多visual c+语言的功能,提高了我们的动手能力,学到了许多解决实 际问题的宝贵经验.同时也挖掘出了我们潜在的能力, 使我们对自己更有自信,对编 程也更有兴趣。我相信,只要努力、勤奋、坚持不懈,就没有什么做不到的事,不能 还没开始就退缩,要勇

18、于拼搏,敢于创新。最后,在这里郑重的感谢张老师的帮助, 让我得到了许多意想不到的收获。 也感 谢学校提供给我们这次宝贵的实践机会, 让我们可以动手动脑,大大提高了个人的能 力和素质。5参考文献1 马安鹏 .visual c+ 程序设计导学。北京:清华大学出版社, 20022 电子书籍 . visual c+ 技术内幕 ( 第四版 ). 网址 :3 beck zaratian.microsoft visual visual c+ 6.0程序员指南. 希望图书创作室译 . 北京 : 北京希望电脑公司出品 ,19984richard c.leinecker,t

19、om archer. visual c+ 6 宝典 . 张艳 , 张谦译 . 北京 :电子工业出版社,19995 李强 , 贾云霞 . visual c+ 项目开发实践. 北京 : 中国铁道出版社 ,20046郑莉,董渊,张瑞丰.c+语言程序设计.2003.7 h.m.deitel,p.j.deitel. small c+ how to program.2006.8谭浩强,c程序设计(第三版)。北京:清华大学出版社,2005 (2007重印)5 附录(程序源代码)#include / 标准输入输出头文件#include /system 函数的头文件#include /getch 函数的头文件#

20、include time.h / 调用时 int map1(int a910);char move(char t,int map910)int i,j,x,y;system(cls); / 清屏for(i=0;i9;i+) / 查找当前人位置for(j=0;j10;j+)if(mapij=4 | mapij=6)x=i,y=j;switch(t)case w:if(mapx-1y=1)/ 如果人面前时路mapx-1y=4;if(mapxy=4) mapxy=1;else mapxy=2;elseif(mapx-1y=3)/ 人面前是箱子if(mapx-2y=2)/ 人前箱子箱子前面是空位map

21、x-1y=4;mapx-2y=5;if(mapxy=4) mapxy=1;else mapxy=2;else|箱子if(mapx-2y=0|mapx-2y=3mapx-2y=5)/ 人前是箱子箱子前面是墙箱子 已在空位上的箱子printf(a);else if(mapx-2y=1)/ 人前是箱子前面是路mapx-1y=4;mapx-2y=3;if(mapxy=4) mapxy=1;else mapxy=2;else if(mapx-1y=0) /人前是墙printf(a);else if(mapx-1y=2)mapx-1y=6;if(mapxy=4) mapxy=1;else mapxy=2;

22、else if(mapx-1y=5)/ 人前是已在空位的箱子if(mapx-2y=2)/ 人前是已在空位是的箱子箱子前是一个空位mapx-1y=6;mapx-2y=5;if(mapxy=4) mapxy=1;else mapxy=2;else if(mapx-2y=0|mapx-2y=3|mapx-2y=5)/ 人前是已在空位是的箱子箱子前是墙箱子 已在空位上的箱子printf(a);else if(mapx-2y=1)/人前是已在空位上的箱子 箱子前是路mapx-1y=6;mapx-2y=3;if(mapxy=4) mapxy=1;else mapxy=2;break;case d:if(m

23、apxy+1=1)/ 如果人面前时路mapxy+1=4;if(mapxy=4) mapxy=1;else mapxy=2;elseif(mapxy+1=3)/ 人面前是箱子if(mapxy+2=2)/ 人前箱子箱子前面是空位mapxy+1=4;mapxy+2=5;if(mapxy=4) mapxy=1;else mapxy=2;elseif(mapxy+2=0|mapxy+2=3|mapxy+2=5)/ 人前是箱子箱子前面是墙箱子 已在空位上的箱子printf(a);else if(mapxy+2=1)/ 人前是箱子箱子前面是路mapxy+1=4;mapxy+2=3;if(mapxy=4) m

24、apxy=1;else mapxy=2;else if(mapxy+1=0) /人前是墙printf(a);else if(mapxy+1=2)mapxy+1=6;if(mapxy=4) mapxy=1;else mapxy=2;else if(mapxy+1=5)/ 人前是已在空位的箱子if(mapxy+2=2)/ 人前是已在空位是的箱子箱子前是一个空位mapxy+1=6;mapxy+2=5;if(mapxy=4) mapxy=1;else mapxy=2;else if(mapxy+2=0|mapxy+2=3|mapxy+2=5)/ 人前是已在空位是的箱子箱子前是墙箱子 已在空位上的箱子p

25、rintf(a);else if(mapxy+2=1)/人前是已在空位上的箱子 箱子前是路mapxy+1=6;mapxy+2=3;if(mapxy=4) mapxy=1;else mapxy=2;break;case s:if(mapx+1y=1)/ 如果人面前时路mapx+1y=4;if(mapxy=4) mapxy=1;else mapxy=2;elseif(mapx+1y=3)/ 人面前是箱子if(mapx+2y=2)/ 人前箱子箱子前面是空位mapx+1y=4;mapx+2y=5; if(mapxy=4) mapxy=1;else mapxy=2;elseif(mapx+2y=0|ma

26、px+2y=3|mapx+2y=5)/ 人前是箱子箱子前面是墙箱子 已在空位上的箱子printf(a);else if(mapx+2y=1)/ 人前是箱子箱子前面是路mapx+1y=4;mapx+2y=3;if(mapxy=4) mapxy=1;else mapxy=2;else if(mapx+1y=0) /人前是墙printf(a);else if(mapx+1y=2)mapx+1y=6;if(mapxy=4) mapxy=1;else mapxy=2;else if(mapx+1y=5)/ 人前是已在空位的箱子if(mapx+2y=2)/ 人前是已在空位是的箱子箱子前是一个空位mapx+

27、1y=6;mapx+2y=5;if(mapxy=4) mapxy=1;else mapxy=2;else if(mapx+2y=0|mapx+2y=3|mapx+2y=5)/ 人前是已在空位是的箱子箱子前是墙箱子 已在空位上的箱子printf(a);人前是已在空位上else if(mapx+2y=1)/箱子前是路mapx+1y=6;mapx+2y=3;if(mapxy=4) mapxy=1;else mapxy=2;break;case a:if(mapxy-1=1)/ 如果人面前时路mapxy-1=4;if(mapxy=4) mapxy=1;else mapxy=2;elseif(mapxy

28、-1=3)/ 人面前是箱子if(mapxy-2=2)/ 人前箱子箱子前面是空位mapxy-1=4;mapxy-2=5; if(mapxy=4) mapxy=1;else mapxy=2;elseif(mapxy-2=0|mapxy-2=3|mapxy-2=5)/ 人前是箱子箱子前面是墙箱子 已在空位上的箱子printf(a); else if(mapxy-2=1)/ 人前是箱子箱子前面是路mapxy-1=4;mapxy-2=3;if(mapxy=4) mapxy=1;else mapxy=2;else if(mapxy-1=0) /人前是墙printf(a);else if(mapxy-1=2)mapxy-1=6;if(mapxy=4) mapxy=1;else mapxy=2;else if(mapxy-1=5)/ 人前是已在空位的箱子if(mapxy-2=2)/ 人前是已在空位是的箱子箱子前是一个空位mapxy-1=6;mapxy-2=5;if(mapxy=4) mapxy=1;else mapxy=2;else i

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论