在visual c++下编写的c语言推箱子游戏.doc_第1页
在visual c++下编写的c语言推箱子游戏.doc_第2页
在visual c++下编写的c语言推箱子游戏.doc_第3页
在visual c++下编写的c语言推箱子游戏.doc_第4页
在visual c++下编写的c语言推箱子游戏.doc_第5页
已阅读5页,还剩19页未读 继续免费阅读

下载本文档

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

文档简介

山东交通学院C语言课程设计推箱子游戏院(系)别 信息工程系 班 级 信息093 学 号 100819220 姓 名 贺可晓 指导教师 * 时 间 2011-08-282011-09-12 课 程 设 计 任 务 书题 目 推箱子 系 (部) 信息工程系 专 业 电气工程及其自动化 班 级 电气102班 学生姓名 贺可晓 学 号 100819220 08 月 28 日至 09 月 2 日 共 1 周指导教师(签字) 系 主 任(签字) 2011 09 02一、设计内容及要求:(1)箱子只能推动而不能拉动。一次只能推动一个箱子。(2)在一个狭小的仓库中,要求把木箱放到指定的位置,稍不小心就会出现箱子无法移动或者通道被堵住的情况。(3)本游戏的目的就是把所有的箱子都推到目标位置上。(4)此游戏目的是在训练你的逻辑思考能力。二、设计原始资料:本游戏的目的就是把所有的箱子都推到目标位置上。箱子只能推动而不能拉动。一次只能推动一个箱子。经典的推箱子是一个来自日本的古老游戏,目的是在训练你的逻辑思考能力。在一个狭小的仓库中,要求把木箱放到指定的位置,稍不小心就会出现箱子无法移动或者通道被堵住的情况,所以需要巧妙的利用有限的空间和通道!三、设计完成后提交的文件和图表1计算说明书部分 假设数字0代表空地,数字1代表墙壁,数字2代表非游戏的填充内容(非必须内容),可是地图看起来规则,数字3代表目的地,数字4代表箱子,数字6代表人。 那么人移动到空地上时数字值的变化为:6+0=6; 人移到目的地时其位置的数值变化为:6+3=9; 箱子移动到空地时数值的变化为:4+0=4; 箱子移动到目的地时数值的变化为:4+3=7; 再就是每一次的移动都必须根据实际情况,来改动原位置和移动位置的数值,还原出地图原样模型。2图纸部分: 程序流程图 否 否 是 是 是 是 否 否 否否 是 是是 否开始输入1或2或3 或q输入1输出地图1输入按键input=q推箱子移动箱子都到目的地第一关结束在输入按键Input=y输入2输出地图2输入按键Input=q推箱子移动箱子都到目的地游戏通关 结束四、进程安排第一天:分析问题,找出大体的设计思路。第二天:构造出程序大体框架,即各种功能模块的组合。第三天:分别写出个功能模块程序的源代码。第四天:讲个功能模块加入主程序中,并实现所有的程序基本功能。第五天:优化程序中的不足之处,优化显示界面,添加辅助功能模块增加程序的趣味性。使程序软件更加适宜用户的操作和娱乐需要。第六天:准备程序答辩。五、主要参考资料1谭浩强,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成 绩 评 定 表口试(答辩)成绩报告成绩总评成绩摘要私達実践能力高、学知識運用行更創造、学校特1週間手配、私達Visual C+課程設計実習行.詳説明Visual C+6.0環境下、過程設計、箱押遊戯。機能、字符輸入。字符“a”向左走代表、字符“s”代表下歩、字符“d”向右走代表、字符“w”向上行代表、人制御箱行先押勝利。目的人鍛錬能力思惟。以下課程仕様通過、順序説明提示操作、手順説明調節、総括方面開発、手順詳説製造過程和作用、諸般執行操縦。关键字:箱遊戯押,VC+6.0, 源手順目 录前 言11 课程设计概述21.1推箱子游戏软件功能概述21.2Visual C+6.0概述22推箱子游戏软件总体设计22.1推箱子游戏软件总体设计思想22.2总体设计流程图43推箱子游戏软件详细设计53.1两个主要问题53.1.1 地图的生成53.1.2 人或人和箱子的移动54程序测试64.1菜单界面64.2游戏中的界面95课程设计总结13致谢13参考文献146附录(程序源代码)15山东交通学院课程设计报告前 言随着计算机技术的发展,可视编程技术占有了越来越重要的作用。Visual C+6.0 是一种功能强大行之有效的可视化编程工具。因此此软件是在Visual C+6.0环境下编写的。对于我们,随着学习的深入,已经大体掌握了Visual C+6.0环境下的程序开发。为了将我们的编程能力提升到一个更高的水平,深化面向对象的编程思维和解决问题的能力,值此课程设计周期间,进行基于Visual C+6.0环境的软件开发,先以推箱子游戏作为开始,对Visual C+6.0环境和C语言的模块编程设计进行回忆和熟悉,有利于促进面向对象程序设计思想的理解,使得在此基础上的下一个软件的开发进行的更加顺利。本文档详细叙述了基于Visual C+6.0环境下的推箱子游戏软件的设计过程以及程序源代码。本文档从概要设计,详细设计,参考源程序代码以及显示程序运行的截屏等方面详尽的介绍了软件开发过程。此次推箱子游戏软件的开发目的是使我们用最基础的C语言程序设计的方式来思考和解决问题的能力,并且可以掌握二维数组的使用、循环控制的使用、地图的设计和使用以及C语言语法。本文档的安排如下:第一章 主要介绍了对面向对象C+语言以及Visual C+6.0编程环境。第二章 主要的介绍说明了推箱子游戏软件的编程思想和详细设计。第三章 主要对推箱子游戏软件进行调试,运行程序并截图,显示运行界面和结果。第四章 主要介绍了软件开发过程中遇到的一些问题,对该软件进行的一个总结。程序在设计的过程中遇到的问题已及时更正,但由于编者的能力和水平有限,推箱子游戏软件和文档中不免会出现一些不期待的错误,望文档读者能够理解和体谅,并欢迎提醒和纠正,在此表示感谢以及敬意。7班级:信息093 姓名:陈新龙 学号:0908103131 课程设计概述1.1 推箱子游戏软件功能概述在一个狭小的仓库中,把木箱放到指定的位置,通过控制人的走向来推箱子移动,箱子只能推动不能拉动,一次只能推动一个箱子。稍不小心就会出现箱子无法移动或者通道被堵住的情况,所以需要巧妙的利用有限的空间和通道。通过此游戏可以锻炼一个人的逻辑思维能力。1.2 Visual C+6.0概述Visual C+是微软公司的重要产品之一, 是一种功能强大行之有效的可视化编程工具。它提供了MFC类库,使用户可以方便的开发自己想实现的功能。Visual C+6.0的主要特点:(1)自动化和宏功能。(2)可以灵活地定制工具栏和菜单。(3)可以直接运行和调试程序,还可以使用宏语言来自动操作调试器。(4)支持Internet连接。(5)一个新的便捷的项目系统可以允许一个工作区内包含多个不同的项目类型。(6)在工作区内可以包含多个并列的工程文件。(7)可以在对话框中使用WizardBar将程序同可视化元素联系起来。(8)Find in File命令支持两个独立的输出窗格,可以保存上一次搜索的结果。这些新特性可以更好地利用Visual C+开发工具进行Windows应用程序开发。2 推箱子游戏软件总体设计2.1 推箱子游戏软件总体设计思想推箱子游戏软件的功能是锻炼人的逻辑思维能力。推箱子游戏软件的功能模块有:(1)提供菜单界面,方便用户对程序个功能进行选择,选择要实现的功能按相应的键进入该功能。山东交通学院课程设计报告(2)地图的生成,用二维整型数组来构成地图,其中数字代表特殊的符号。(3)移动,人或人和箱的移动,接受用户输入的一个字符,控制人的走向,并且可以在允许的情况下推动箱子。(4)时间的统计,可以看整个程序(相当于游戏)运行时所用的时间。(5)清屏功能,使用了清屏函数,当在游戏中时可以直接返回主菜单,(6)利用了辅助色彩函数,使游戏界面更加好看,美观。在源程序中声明并定义了void draw_map(int map1012) /地图函数,void move(int map1012) /移动函数使用了:#include /标准输入输出头文件#include /system函数的头文件#include /getch函数的头文件#include time.h /调用时间函数的头文件多种头文件。 程序中还应用了全局变量:char le; /控制关数的全局变量char input; /接收按键字符程序分为多个小模块,通过调用实现各种功能,增强了程序的可建设性。班级:信息093 姓名:陈新龙 学号:0908103132.2 总体设计流程图程序开始菜单界面面友好界面请选关数清屏界面返回菜单退出界面程序结束欢迎玩【推箱子游】 】1或2关每次按键都会执行清屏功能按q键控制按3键进行游戏1,2关游戏胜利图212 总体设计流程山东交通学院课程设计报告3 推箱子游戏软件详细设计3.1 两个主要问题设计中的两个主要需解决的问题是:怎样生成地图、怎样实现人或人和箱子的移动。3.1.1 地图的生成 设计中用二维整型数组中的数字元素表示不同的物体,比如0代表空地,1代表墙,2代表非游戏的填充内容(非必须内容),可以使地图规则,3代表目的地,4代表箱子,6代表人。然后用一个switch语句给每个数字赋予不同的符号,在输出二维数组,生成地图。3.1.2 人或人和箱子的移动设计中要想使人移动,首先要找到人的起始位置,然后才能开始移动。人向四个方向移动的原理是相同的,我们可以先研究一个方向的移动,找到人的位置后,以人向上走为例,因为向上走嘛(可以通过 数组下标表示)。(1)要判断人前面(上一行),是否为空地,是空地则可以移动,移动后判断并改变人员原位置的数值元素和空地原位置的数值元素;否则不移动。(2)如果人前面是目的地,人也是可以移动的,同样判断人原位置数值元素,并改变人员位置的数值元素和前一位置的数值元素。(3)如果人前是在空地上的箱子。如果箱子前面又是空地,则可以移动,改变箱子前位置的数值元素,还是判断原位置的数值元素,然后改之;如果箱子前为目的地,和上面说的一样移动和改数值元素,只是多了计分这一步。(4)如果人前是已经进入目的地的箱子。如果箱子前又是空地,则可以移动箱子,但是要减分,改变空地位置的数值元素,判断人和箱子原地的数值元素,并改之;如果箱子前是另一目的地,方法同上,只是不减分。用分数控制箱子是否已全在目的地。(5)每一次的移动,必须要清屏,然后再显示一次地图,这样便可以实现人或人和箱子的移动。 山东交通学院课程设计报告4 课程设计总结为了提高我们的实践能力,让我们学以致用,能灵活运用所学的知识进行再创造,学校特安排我们进行为期一周的Visual C+课程设计实习,并安排了指导老师帮助辅导,让我们在规范化、严谨化、实用化上面有了很大进展。在此次推箱子游戏程序开发过程中,有很多东西值得我们思考并总结。开发过程大体可分为以下几个步骤:(1)思考总体设计方案:总体结构和模块外部设计,功能分配。思考要实现整个程序大体需要的几个模块和其中用到的Visual C+语言基本操作符、语句等。(2)画出总体设计方案流程图:用流程图的形式展现你的基本编程思想。(3)流程图具体化:即将流程图中的几大模块的具体实现思考清楚,可以用流程图的形式展现并想好实现的关键代码。(4)编辑程序代码:这是一个至关重要复杂而且需要反复修改的环节,在此环节中你将发现总体设计和模块思想会存在很多问题,需不断改进如何实现各函数功能,达到预期效果也将是一项繁复的工作。(5)代码的调试:在Visual C+6.0环境下输入代码并进行调试和正确运行。在调试过程中会遇到很多需要精化的地方,需要十足的耐心与细心,不断改进完善程序。(6)最后修饰:程序可以正确运行之后,再不影响程序功能的情况下,运用各种辅助性符号,使界面更加美观漂亮,操作更人性化增强程序的新意与可行性。通过这次课程设计,使我们更加熟悉的掌握了Visual C+语言的运用。帮助我们熟悉了更多Visual C+语言的功能,提高了我们的动手能力,学到了许多解决实际问题的宝贵经验同时也挖掘出了我们潜在的能力,使我们对自己更有自信,对编程也更有兴趣。我相信,只要努力、勤奋、坚持不懈,就没有什么做不到的事,不能还没开始就退缩,要勇于拼搏,敢于创新。致谢最后,在这里郑重的感谢张老师的帮助,让我得到了许多意想不到的收获。也感谢学校提供给我们这次宝贵的实践机会,让我们可以动手动脑,大大提高了个人的能力和素质。参考文献1 马安鹏.Visual C+程序设计导学。北京:清华大学出版社,20022 电子书籍. Visual C+技术内幕(第四版).网址:3 Beck Zaratian.Microsoft Visual Visual C+ 6.0程序员指南.希望图书创作室译.北京:北京希望电脑公司出品,19984Richard C.Leinecker,Tom 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函数的头文件#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;else if(mapx-1y=3)/人面前是箱子if(mapx-2y=2)/ 人前箱子 箱子前面是空位 mapx-1y=4;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=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-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(mapxy+1=1)/如果人面前时路 mapxy+1=4; if(mapxy=4) mapxy=1; else mapxy=2;else if(mapxy+1=3)/人面前是箱子if(mapxy+2=2)/ 人前箱子 箱子前面是空位 mapxy+1=4;mapxy+2=5; if(mapxy=4) mapxy=1; else mapxy=2; else if(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 if(mapxy+2=0 | mapxy+2=3 | mapxy+2=5)/人前是已在空位是的箱子 箱子前是墙 箱子 已在空位上的箱子 printf(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;else if(mapx+1y=3)/人面前是箱子if(mapx+2y=2)/ 人前箱子 箱子前面是空位 mapx+1y=4;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=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+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;else if(mapxy-1=3)/人面前是箱子if(mapxy-2=2)/ 人前箱子 箱子前面是空位 mapxy-1=4;mapxy-2=5; if(mapxy=4) mapxy=1; else mapxy=2; else if(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; els

温馨提示

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

最新文档

评论

0/150

提交评论