ImageVerifierCode 换一换
格式:DOCX , 页数:23 ,大小:833.51KB ,
资源ID:16881649      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/16881649.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(NET推箱子课程设计报告Word文件下载.docx)为本站会员(b****6)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

NET推箱子课程设计报告Word文件下载.docx

1、1、目的、意义本次课程设计的重要目的及任务就是将平时所学应用到具体设计中,能够熟练的应用学习中的各种方法。重在提高自身的vb编程能力。2、研究现状分析1.系统结构的总体设计 决定系统的总体结构,包括整个系统分哪些部分,各部分之间有什么联系以及已确定的需求对这些组成部分如何分配等方面。2.详细设计对各功能模块的功能定义,说明模块之间的调用关系与接口(参数)。3.编码及调试根据详细设计的要求,按照统一的要求和编码规范,用C语言编码实现,同时负责每个模块的独立调试。三、主要解决的问题在整个的游戏实现过程中,主要有七个模块,开始,重新载入,选关,保存,载入存档,排行榜,退出这个七个。在具体实现的时候主

2、要问题有,按键的处理问题,在各种情况下,下一步分别是什么图片;还有在撤销的时候,需要对上一步进行判断,在进行恢复退步。选关的时候需要定义临时变量来传递玩家所选择的关数。四、小组成员及分工情况经典的推箱子是一个来自日本的古老游戏,目的是在训练人的逻辑思考能力。在一个狭小的仓库中,要求把木箱从开始位置推放到指定的位置。在仓库有障碍物,稍不小心就会出现箱子无法移动或者通道被堵住的情况,而且箱子只能推,不能拉,所以需要巧妙的利用有限的空间和通道,合理安排移动的次序和位置,才能顺利的完成任务。本游戏一共4关,由易到难。有保存、载入存档、重新载入、选关及退出的功能。(1)初始化包括屏幕初始化和每一关卡的初

3、始化(2)按键处理包括移动小人和移动箱子,通过移动上下左右或ASDW键来控制小人的移动,从而推动箱子,以把箱子推到指定的目的地为过关。(3)每一关都可以重置。(4)记录走的步数,创建文件,记录每关的最好成绩。模块分工朱陈立: (1)所有Form的排版设计,控件的添加,属性的设置(2)地图编译的编写(3)地图的创建赵杰:实现游戏功能 (1)ASDW,上下左右键的事件处理 (2)实现游戏的开始,重载,选关,退出,撤销,保存,载入存档等功能 (3)计步功能,创建文件,记录每关的最好成绩五、主要开发环境与工具、技术路线和解决方案课程设计的实验环境软件:Microsoft Visual Studio 2

4、005课程设计的预备知识熟悉Visual Basic .net程序设计的基本语法知识及常用技巧。六、系统分析与设计流程图推箱子七、系统编码定义一个Maps类用来画出每一关的地图Public Enum Boxmap 将Boxbmp定义成Enum StoneWall = 1 代表石墙 NullBrick = 2 代表空路 StoneBrick = 3 代表砖头 OuterBox = 4 代表在洞外的箱子 InnerBox = 5 代表推进洞的箱子 NullHole = 6 代表空洞 OuterHole = 7 代表小人 InnerHole = 8 代表小人在洞内End EnumPublic Cla

5、ss Maps Private Row As Integer 定义行数为Row Private Line As Integer 定义列数为Line Private Kind As Boxmap 定义Kind为Boxbmp Private Atlas As PictureBox 定义地图集Atlas为picturebox Public Sub New(ByVal i As Integer, ByVal j As Integer) 初使成员化变量,i,j传递的是行列数 Row = i : Line = j Atlas = New PictureBox Atlas.Location = New Po

6、int(Row - 1) * 30, (Line - 1) * 30) 设置地图集的位置 Atlas.Size = New Size(30, 30) 定义地图集的大小 Atlas.SizeMode = PictureBoxSizeMode.StretchImage End Sub Public ReadOnly Property GetKind() 得到图片类型 Get Return Kind End Get End Property Public ReadOnly Property GetImage() 获取图片 Return Atlas Public WriteOnly Property

7、Setting() 构建地图 Set(ByVal Value) Kind = Value Atlas.Image = Image.FromFile( & Kind & .bmp) 从debug文件里读取读图图片 End SetEnd Class载入游戏界面的初始化设置两个textbox在整个游戏中都设置为不可编辑的状态,其他的几个键后面根据函数需求设置Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.LoadMe.TextBox1.Enabled =

8、 False 设置一些空间的属性值Me.TextBox2.Enabled = FalseMe.重新载入ToolStripMenuItem.Enabled = FalseMe.选关ToolStripMenuItem.Enabled = FalseMe.保存ToolStripMenuItem.Enabled = FalseMe.载入存档ToolStripMenuItem.Enabled = FalseMe.撤销ToolStripMenuItem.Enabled = FalseEnd SubEnd Sub定义一些全局变量,再下面的多个程序块里都要用到 Private xx As Integer 设置

9、地图的横坐标 Private yy As Integer 设置地图的纵坐标 Private map(,) As Maps 定义的一个地图类,获取地图信息 Private row As Integer 读取地图的总行数 Private line As Integer 读取地图的总列数 Private total As Integer 统计进洞箱子个数 Private stepnum As Integer 统计步数 Private round As String 当前所在关卡 Private flag As Integer = 0 记录上一步的操作上,下,左,右 Private flag1 As

10、Integer = 0 记录上一步的操作有7个数,分别代表上一步出现的地图种类定义一个记录的结构体在后面游戏中的英雄榜中记录最好玩家是用到如下的结构体来存放数据 Structure recorder Dim Level As String 定义成字符类型 Dim PlayName As String Dim BestNum As StringEnd StructurePrivate rec As recorder 定义变量为记录类型Private recNum As Integer 定义变量为记录总条数定义rec为recorder结构 recNum为总的记录条数ReadRound函数(用于读取

11、关数,显示地图) Public Sub ReadRound(ByVal sender As String) Dim file As String 读取配置文件内容 Dim str() As String 读取相关信息 Dim arr() As String 读取位置信息 Me.Panel1.Show() stepnum = 0 记录玩家游戏时的总步数,并再在TextBox2中显示出来 TextBox2.Text = stepnum.ToString TextBox1.Text = 第 + sender + 关 TextBox1.BackColor = Color.Pink If Val(sen

12、der) = 10 Then 当返回的地图参数是10时,说明此地图是玩家保存地图,要另外处理参数 FileOpen(1, recoderstemp.txt, OpenMode.Input) 打开记录地图关数和已走得步数 Input(1, round) 将保存的关数赋给round Input(1, stepnum) 将保存已走得步数赋给stempnum FileClose(1) 关闭文件 + round + TextBox2.Text = stepnum TextBox2中显示总步数 End If Try If Not IO.File.Exists(Game.ini) Then Exit Sub

13、 如果文件不存在直接退出函数 End If 第几关文件读取,函数变量代表第几关, OpenMode.Input, OpenAccess.Read) 打开地图文件 Input(1, file) 读取地图 str = file.Split($) 相关信息读取 arr = str(1).Split(#第几关信息读取 row = CType(arr(0).Substring(0, 2), Integer) 读取地图的行数 line = CType(arr(0).Substring(2, 2), Integer) 读取地图的列数 xx = CType(arr(0).Substring(4, 2), In

14、teger) 读取小人起始位置的横坐标 yy = CType(arr(0).Substring(6, 2), Integer) 读取小人起始位置的纵坐标 total = CType(arr(0).Substring(8, 2), Integer) 读取地图共有多少个空洞 ReDim Preserve map(row, line) 重定义并保存当前的地图参数 For i As Integer = 1 To row 利用当前的地图参数读取地图图片 For j As Integer = 1 To line map(i, j) = New Maps(i, j) 得到新的地图 map(i, j).Set

15、ting = CType(arr(i).Substring(j - 1, 1), Integer) 设置新的地图 Next For i As Integer = 1 To line在Panel中拼接地图 For j As Integer = 1 To row Me.Panel1.Controls.Add(map(i, j).GetImage) 画出新的地图 Me.Panel1.Size = New Size(row * 30, line * 30) 窗口大小计算 Me.Size = New Size(row * 45, line * 38) 设置Form的size,随着地图的大小自动调整窗口的

16、大小 Catch ex As Exception无条件退出该函数 End Try开始点击开始键,游戏自动开始第一局游戏 Private Sub 开始ToolStripMenuItem_Click()ndles 开始ToolStripMenuItem.Click 开始ToolStripMenuItem.Enabled = False 开始之后将开始键设置为不可点击 重新载入ToolStripMenuItem.Enabled = True 载入了游戏之后将重新载入设置为可点击 选关ToolStripMenuItem.Enabled = True 载入了游戏之后将选关设置为可点击 round = 1

17、 程序启动时加载第一关 将计存关数的变量赋初值为1 ReadRound(0 + round.ToString)Boxman_InoutGo()函数 Private Sub Boxman_InoutGo() 判断小人运动之前是在洞外还是洞内 If map(xx, yy).GetKind = Boxmap.OuterHole Then map(xx, yy).Setting = Boxmap.NullBrick 如果当前是小人则下一步是将当前map(xx,yy)变为空地 ElseIf map(xx, yy).GetKind = Boxmap.InnerHole Then map(xx, yy).S

18、etting = Boxmap.NullHole 如果当前是在洞内的小人,则下一步当前怎变为空洞Boxman_Gameover()函数Private Function Boxman_Gameover() As Boolean 判断游戏是否结束 Dim t As Integer = total 定义临时变量t等于总的洞的个数 For i As Integer = 1 To row 扫描每行每列 For j As Integer = 1 To line If map(i, j).GetKind = Boxmap.InnerBox Then t -= 1 扫面地图时每次遇到进了洞的箱子就将t减1,以

19、便下一步的判断 If t = 0 Then 由上面的步骤之后,当t等于0时说明图中的进洞的箱子和地图中的洞的个数相同,则说 Return True 明游戏玩完成过关了,返回true Else Return False 如果没有过关则返回False表设计没有过关End FunctionKeyDown函数游戏中的上下左右键的处理函数Private Sub formMain_KeyDown() Handles MyBase.KeyDown Me.撤销ToolStripMenuItem.Enabled = True Select Case e.KeyCode Case Keys.W, Keys.Up

20、处理上键 flag = 1 用flag来标记按下的是上下左右中的哪个键,1上,2下,3左,4右 flag1 = 0将flag1的初始值设为0,当满足下列的情况是flag1值不变 Select Case map(xx, yy - 1).GetKind Case Boxmap.StoneWall 小人前面是石墙,不做处理 Case Boxmap.NullBrick 当下一步坐标上是空路时,小人直接移动,flag1=1 Boxman_InoutGo() map(xx, yy - 1).Setting = Boxmap.OuterHole yy -= 1 小人纵坐标改变了 stepnum = step

21、num + 1 游戏中小人每成功移动一小格则步数加1 flag1 = 1 Case Boxmap.StoneBrick Case Boxmap.OuterBox 小人前面有箱子,且箱子不在洞内 Select Case map(xx, yy - 2).GetKind 判断箱子上面是什么 Case Boxmap.StoneWall 箱子前面是石墙,不做处理箱子前面是空路时, flag1=2 map(xx, yy - 1).Setting = Boxmap.OuterHole小人直接移动 map(xx, yy - 2).Setting = Boxmap.OuterBox箱子直接移动 yy -= 1

22、flag1 = 2 Case Boxmap.OuterBox Case Boxmap.InnerBox Case Boxmap.NullHole 箱子前面是空洞时, flag1=3 map(xx, yy - 1).Setting = Boxmap.OuterHole map(xx, yy - 2).Setting = Boxmap.InnerBox 箱子直接移,且设为进洞的箱子yy -= 1 flag1 = 3 Case Boxmap.OuterHole Case Boxmap.InnerHole End Select Case Boxmap.InnerBox 小人前是进洞的箱子, flag1

23、=4 Case Boxmap.StoneWall Case Boxmap.NullBrick箱子前面是空路时, flag1=4 map(xx, yy - 1).Setting = Boxmap.InnerHole小人直接移动,且设为小人在洞内箱子直接移动,且设置为在洞外的箱子 flag1 = 4 Case Boxmap.StoneBrick Case Boxmap.NullHole 箱子前面是空洞时, flag1=5 map(xx, yy - 1).Setting = Boxmap.InnerHole 箱子直接移动,且仍为在进洞的 flag1 = 5小人前面是空的洞 flag1 = 6Case

24、 Keys.S, Keys.Down 处理下键,处理与上面类似,在这不再详细注释Case Keys.A, Keys.Left 处理左键,处理与上面类似,在这不再详细注释Case Keys.D, Keys.Right 处理右键,处理与上面类似,在这不再详细注释Case Else Me.TextBox2.Text = stepnum.ToString 将步数显示在TextBox中 If Boxman_Gameover() = True Then 判断游戏十是否结束 Dim temp As Integer = Val(round)recorder.dat, OpenMode.Random, , ,

25、Len(rec) 打开存放记录的文件 FileGet(1, rec, temp) 将记录写进文件 If Val(rec.BestNum) = 0 Then 当文件里是空的记录是,则显示如下信息 rec.PlayName = InputBox(你是第一个玩家,请输入大虾的名号) rec.BestNum = TextBox2.Text & Chr(13) & Chr(10) FilePut(1, rec, temp) 将第一个玩该游戏的玩家的信息写进文件,以后的记录是否存放都一次为标准 ElseIf TextBox2.Text rec.BestNum Then 了不起啊,破了纪录啦,请输入大虾的名号 rec.BestNum = Text

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1