课程设计_老鼠走迷宫

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

HUNAN CITY UNIVERSITY 数据结构课程设计

报告

设计题目:老鼠走迷宫

专业:计算机科学与技术

****:**

班级学号: *******-23

指导教师:杨格兰、胡奇光

2011 年 6 月 18 日

一、设计时间

2011年6月20日——24日

二、设计地点

湖南城市学院第一实验楼计算机系机房509

三、设计目的

1.培养实际工作所需要的动手能力,进一步熟悉基本概念;

2.熟练掌握对实际问题的抽象技能,了解程序基本的流程;

3.培养查阅资料,独立思考问题的能力。

四、设计人

邓宇

五、指导老师

杨格兰、胡奇光

六、设计课题

老鼠走迷宫

开发环境:Visual Studio 2010 Ultimate UML Activity Diagram

Visual C # 2008 Express Editions

Adobe Photoshop CS4

七、基本思路及关键问题的解决方法

技术要求:

程序开始运行时显示一个迷宫地图,迷宫中央有一只老鼠,迷宫的右下方有一个粮仓。游戏的任务是使用键盘上的方向键操纵老鼠在规定的时间内走到粮仓处。

要求:

1、老鼠形象可辨认,可用键盘操纵老鼠上下左右移动;

解决方案:老鼠图片形象可以用Photoshop来制作,通过键盘按键事件发送消息到对象(老鼠),实现老鼠的移动。

2、迷宫的墙足够结实,老鼠不能穿墙而过;

解决方案:在老鼠每一步的移动中检测是否撞墙,若是则停止走动。

由于地图是图片,要检测就需要取出墙壁那点的颜色(显然不是白色),然后作比较来作碰撞检测。

3、若老鼠在规定时间内走到粮仓处,提示成功,否则提示失败;

解决方案:加载定时器,设定60秒钟,若在规定的时间,及时间变成0时,弹出对话框提示用户游戏失败。

4、添加编辑迷宫功能,可修改当前迷宫。

解决方案:备用一张地图图片资源,可以用于更换地图。

八、算法及流程图

Visio流程图:

因为这是面向对象而非面向工程的程序设计,事件和判断都具有同时性和并发性。UML建模图如下:

九、调试过程中出现的问题及解决方法

本次课程设计出现最严重的问题是通过键盘来如何控制对象(老鼠)的移动,刚开始做时试用了多种方法但是没有效果。后来通过CSDN、博客园等IT技术社区找到了相关文章。

如果你按键没有反应是因为它把你的消息转发到了其它的激活窗口的处理程序上,比如:某个Button或者textBox上。你可以试着点击窗口的空白区域,不让任何子控件获得焦点(没有任何一个控件有一个虚线

的框)的时候,这个就能激活了。确认一下是否是在Form上敲击了键盘。

实现的事件仅仅针对Form本身才是有效的,对Form上的子控件无效

在正常情况下,Windows的消息,比如:KeyPress(Down)会被发送到对

应窗口的消息处理循环 WndProc。如果你的窗口上有其它控件,比如:

Button,它其实也是一个窗口。当你的输入焦点在这个Button或者其它控件,比如:textBox上时,你的输入事件会被发送到这个窗口的WndProc 事件中,你无法取得其它窗口的事件。要解决问题,比较好一点的方法是注册热键。你应该是不太可能要捕获所有的按键对吧,可能只是部分。你

可以使用这里提供的方法,注册系统级或者应用程序级的热键。

当然用系统的钩子之类的也可以解决你的问题,取得全部按键甚至其它消息,但我觉得没必要做那么复杂。Form的KeyPress事件很难取到,不知道为什么.

我虽然不是很能看懂消息循环底层的东西,但是我通过重载ProcessDialogKey函数人实现了按键的响应事件。

十、课程设计心得体会

这次课程设计历时三天,我刚开始接触到这个题目的时候就有点蒙了,因为做的是老鼠走迷宫,而其还要是能用键盘的方向键来控制老鼠的行动。我一开始想着这就是一个图形化的界面,因为在黑底白字的控制台程序里没法做到画出一个老鼠,而且还是能键盘来控制。

然后我就想到是用VC++的MFC,Viual Basic还是用Visual C#来实现这个题目,因为目前我只熟悉这三种开发技术。最后我想我选择使用自己最熟悉C#的Windows Form来做。因为从图标细节和界面美化都要自己一个个做,这着实让我体会到软件工程的艰辛,整个程序可能因为一个细小部分而花去你数倍的时间去调试,一个空格也能引发一场惨剧,使我明白调试是开发人员一项非常重要的基本功,通过这次课程设计,我对本专业有了更多的深刻认识,也收获了很多的成长。

通过课程设计使我对有了对理论知识更深的理解,对以前学习中不明白的,不理解的都有了进一步的理解。在实际操作中遇到了很多困难,但通过找资料,请教同学和老师,使我的动手能力和沟通能力都有了提高。在整个课程设计中总是在编写程序中发生错误,有时会很没耐性,但都被我一一克服了,编程一定要有耐心,同时还有认真仔细,尽量保证不出现错误。编程要有条理,不仅使自己要看懂,别人也能看懂,这样有利于程序的改正。

在做完这个课程设计时,心里有种说不出来的高兴,自己动手完成的设计有一种成就感,增强了自己的自信心,我相信在今后的学习中,我会保持这种良好的心情投入到各科的学习中,使我的成绩不断提高。

十一、源程序

using System;

using System.Collections.Generic;

using ponentModel;

using System.Data;

using System.Drawing;

using System.Linq;

using System.Text;

using System.Windows.Forms;

using Maze.Properties;

namespace Maze

{

public partial class Form1 : Form

{

public Form1()

{

InitializeComponent();

}

int i=60;

Color[] mycolorleft = new Color[19];

Color[] mycolorup = new Color[19];

Color[] mycolorright = new Color[19];

Color[] mycolordown = new Color[19];

public bool UP()//建立一个类用于判断是否是墙

{

Bitmap map = new Bitmap(Map.Image);

for (int i = 0; i < 19; i++)

{

mycolorup[i] = map.GetPixel(rat.Left + i, rat.Top - 13);

}

for (int a = 0; a < 19; a++)

{

if (mycolorup[a].ToArgb() != Color.White.ToArgb())//用循环判断是否有任意一个点不为通道;

{

return false;

}

}

return true;

}

public bool down()

{

Bitmap bitmap = new Bitmap(Map.Image);

for (int i = 0; i < 19; i++)

相关文档
最新文档