本科毕业设计--基于j2me的推箱子游戏任务书

合集下载

推箱子设计报告书

推箱子设计报告书

推箱子设计报告书推箱子游戏设计使用说明书一、项目背景本实训要求对“推箱子游戏”进行分析、设计及编程实现。

本实训对实训项目已经作了较为详细的分析及相关知识讲解,通过实训,促使专业技能得到综合训练,让我们了解软件开发基本技术和工作过程。

同时,本实训中了解图形界面设计基本技术。

通过本系统的开发,要了解软件开发的整个过程,掌握软件开发的基本方法,提前培养从事软件行业应具备的基本素质和能力,为以后的学习作一个铺垫。

二、需求分析:经典的推箱子是一个来自日本的古老游戏,目的是在训练人的逻辑思考能力。

在一个狭小的仓库中,要求把木箱从开始位置推放到指定的位置。

在仓库有障碍物,稍不小心就会出现箱子无法移动或者通道被堵住的情况,而且箱子只能推,不能拉,所以需要巧妙的利用有限的空间和通道,合理安排移动的次序和位置,才能顺利的完成任务。

本游戏一共4关,由易到难。

开始,移动,重新开始,选择关卡,上一关,下一关,退出七个过程。

(1)初始化包括屏幕初始化和每一关卡的初始化(2)保存没一关的地图(3)需要时读取所需要的地图(4)下载入新的地图(5)绘制地图快(6)确认退出,保存提示(7)按键处理包括移动小人和移动箱子,通过移动上下左右或ASDW键来控制小人的移动,从而推动箱子,以把箱子推到指定的目的地为过关。

(8)每一关都可以重置。

(9)记录走的步数,创建文件,记录每关的最好成绩。

(10)整个画面刷新三、目的、意义和研究现状分析1、目的、意义本次课程设计的重要目的及任务就是将平时所学应用到具体设计中,能够熟练的应用学习中的各种方法。

重在提高自身的vb编程能力。

2、研究现状分析1.系统结构的总体设计决定系统的总体结构,包括整个系统分哪些部分,各部分之间有什么联系以及已确定的需求对这些组成部分如何分配等方面。

1)初始化模块该模块包括屏幕初始化和游戏每一关的初始化。

屏幕初始化用于输出欢迎信息和操作提示,游戏每一关的初始化是构建每一关的关卡。

推箱子程序设计与报告.doc

推箱子程序设计与报告.doc

推箱子程序设计与报告.doc推箱子是一款经典的益智游戏,我们本次设计的推箱子程序主要基于Java语言实现,通过使用IDEA开发环境以及JavaFX图形界面库,提供用户友好的交互界面,使得用户可以愉快地通过游戏锻炼自己的智力。

1. 总体设计推箱子需要先定义一些基本的数据结构,包括地图、箱子和人物。

对于地图而言,我们采用一个二维数组来表示,每个元素用数字来表示:0代表空位,1代表墙,2代表目的地。

对于箱子和人物的位置,我们同样采用二维数组表示。

其中0代表箱子或人物当前位置为空,1代表箱子或人物在该位置。

通过这三个数组,可以完整地表示游戏的基本状态。

2. 游戏规则游戏的基本规则如下:1)箱子、人物、目的地都是由矩形表示。

2)人物可以沿着地图上的通路走动,但不能与障碍物墙相交。

3)人物可以对着箱子推动箱子,但只能向前推,并且不能推到障碍物墙。

4)箱子只能单向推动,即只能向人物朝向的方向推动,并且只能顺着通路推动。

5)每一个箱子必须都推到一个目的地上,游戏才算成功过关。

3. 程序实现在代码实现上,我们采用Model-View-Controller架构,将游戏分为Model(模型)、View(视图)和Controller(控制器)三个部分。

Model主要处理游戏数据,包括游戏地图、箱子和人物的位置。

View则主要负责游戏界面的展示,包括游戏地图、箱子和人物的图形展示、以及用户交互界面的设计等。

Controller则主要负责调度Model和View之间的数据通信和相互交互。

4. 用户界面我们提供了以下用户交互界面:1)菜单:在菜单中,用户可以选择开始新游戏,或者退出程序。

2)选关界面:在选关界面中,用户可以选择所需的关卡。

3)游戏界面:在游戏界面中,实现了地图的显示、箱子和人物的移动、关卡完成情况的判断等功能。

5. 应用技术本次推箱子程序的开发采用了以下技术:1)Java语言编写2)JavaFX图形界面库3)MVC软件设计模式4)Git版本控制5)IntelliJ IDEA开发IDE6. 结论本次推箱子程序的开发成功实现了一款经典益智游戏的主要功能,同时也提供了用户友好的交互界面。

j2me设计论文-推箱子

j2me设计论文-推箱子

《面向对象程序设计II》 -—J2ME 课程设计论文题目:推箱子学院:计算机与信息工程学院专业:计算机科学与技术班级:计算机06-7班姓名:安清雨学号:08起止时间:2008.12.21--2008.12.31成绩:课程设计任务书一、设计题目:《推箱子》二、设计内容:当大多数的人还将眼神停留在短信和彩铃上的时候,手机遇上游戏的际遇也在演绎它的精彩。

“推箱子”就是其中之一,本设计针对推箱子实现了新游戏,选关,恭喜过关,继续或重玩等过程。

可以清楚的演示各个画面的切换和一些游戏开发的类库。

三、设计要求:1、开始显示初始化游戏界面,主界面显示各种键的功能以及菜单-新游戏和选关。

2、开始玩游戏,如果赢了可进入下一关或重来。

采用确定和取消来实现以上功能。

3、如果选关,则出现选关界面,按确定开始选关,取消则返回初始化界面。

指导教师:王艳涛教研室主任:2008 年12月31 日本科课程设计论文摘要J2ME平台被认为是最杰出的手机游戏平台,它为开发者、设备制造商、网络通信公司和消费者广泛接受。

它有一些非常重要的特征对所有组织都有益。

因为J2ME应用在不同设备上都是便携式的,他们常常可在网络上下载和执行。

本设计通过Canvas或gameCanvas才能画到屏幕上,通过他们以及各种类库来进行设计推箱子游戏,最后编程实现了全过程。

关键词:J2ME 面向对象Canvas gameCanvas推箱子本科课程设计论文目录课程设计成绩评定表............................................................................. 错误!未定义书签。

课程设计任务书. (II)摘要 (II)目录..................................................................................................................................... I II1 设计内容 (1)2 设计过程 (1)2.1设计方案的论证 (1)2.2概要设计 (3)2.3界面设计图 (4)2.4代码实现 (6)3 设计总结 (7)参考文献 (7)附录:程序源代码 (8)本科课程设计论文1 设计内容当大多数的人还将眼神停留在短信和彩铃上的时候,手机遇上游戏的际遇也在演绎它的精彩。

毕业设计答辩之推箱子游戏设计

毕业设计答辩之推箱子游戏设计

任务描述与实现
实现键盘操作
程序通过截获当前窗口中键盘按下的信息来 判断玩家所按下的按键。 要判断所按的方向键方向是否可以移动。 移动后,根据玩家所按下的按键把人物的相 关坐标进行加减。 移动后需要重新定位人物的位置坐标。并刷 新地图。
任务描述与实现
判断游戏胜利
每次在玩Байду номын сангаас移动人物后,对当前地图数组进 行判断,如果还存在箱子(即地图数组中存在值 为2的元素),就说明玩家未取得胜利;反之, 取得当前关卡的胜利。
游戏概述
游戏由一个封闭的围墙、人物、若干个箱子 和箱子的放置点组成。 游戏中箱子只能推而不能拉,并且一次只能 推动一个箱子。当玩家把所有的箱子推到指定的 地点时,玩家顺利通过当前游戏关卡,并进行下 一关的游戏。
推箱子游戏设计流程图
任务描述与实现
地图的绘制与读取
能读取地图数据,根据不同的地图数据绘制 出相应的地图。 能对人物移动后的地图进行刷新。 程序中定义了地图数组,地图数组中各元素 代表的意思如下: 用0表示空地,1表示人物,2表示箱子,3表 示目的地,4表示在目的地上的人物,5表示箱子 在目的地上,6表示围墙,7表示完成任务后的人 物(一个开心的人物)。
面向过程的推箱子 设计
导 师: 答辩人: 专 业:
论文框架
1 2 3 4
游戏概述 任务描述与实现
总 结
感 谢
游戏概述
经典的推箱子是一个来自日本的古 老游戏,1981年由日本人今林宏行首创, 在1982年12月由Thinking Rabbit 公司首 次发行,名“仓库番” ,目的是训练 人的逻辑思考能力。
总 结
本设计基本实现了推箱子游戏的功能,但是 基于小游戏的原则,没有加入太多花俏的图片, 也没有华丽的界面设计。也许正如前人所说,小 游戏之所以流行,就是因为它小。本设计可能还 有一些不足之处有待于继续努力设计出更完美的 推箱子游戏。

基于Java的推箱子游戏设计与实现【任务书+论文】

基于Java的推箱子游戏设计与实现【任务书+论文】

毕业设计(论文)任务书第1页第2页第3页基于Java的推箱子游戏设计与实现摘要社会在进步,人们生活质量也在日益提高。

高强度的压力也接踵而来。

社会中急需出现新的有效方式来缓解人们的压力。

此次设计符合了社会需求,Java推箱子游戏可以让人们在闲暇之余,体验游戏的乐趣。

具有操作简单,易于上手的特点。

推箱子游戏的玩法十分简单——控制人物绕过障碍物,到达目的地。

此次毕业设计基于Java语言。

将游戏地图做成通用的关卡设计,关卡用二维数组实现,在二维数组中设置值域来表示不同对象,运用二维数组的遍历算法来加载对应图片实现了游戏图片初始化状态。

同时,通过初始化多个不同二维数组实现了游戏地图关卡的设计,方法巧妙且简单易行,有效的解决了图片排布问题。

充分运用类和方法的调用来实现游戏关卡的初始化。

用读取键值的方法判断游戏人物移动、停止、到达目的地。

舒缓的音乐配合有趣的步骤,相信能引起很多人的兴趣。

作为一个具有悠久历史的游戏,也能够引起人的怀念和共鸣。

关键词Java 游戏二维数组算法读取键值栈Sokoban based on JavaAbstractSocial progress, quality of life is also increasing. High-intensity pressure also follows. The emergence of new social urgently needed an effective way to relieve people's stress. This is designed to meet the needs of the community, Java Sokoban game allows people in her spare time, experience the fun of the game. With simple operation, easy to use features.Sokoban game’s rule is very simple - control characters around obstructions, to arrive at the destination. The graduation project is based on Java language. Game map to make a generic level design, level with two-dimensional array implementation, set the domain in a two-dimensional array to represent different objects, using the two-dimensional array of times calendar calculation method is realized to load the corresponding picture game image initialized state. At the same time, through the initialization of several differenttwo-dimensional arrays realized the design of the game map level, a method is clever and simple, easy to effectively solve the problem of the picture arrangement. Make full use of calling classes and methods to implement the initialization of the game levels with reading the key value method to judge the characters move, stop, or reaching its destination. Soothing music with interesting step, which will hopefully lead to a lot of people's interest. As a game with a long history, but also can cause people to miss and resonance.Key Words: Java game; two-dimensional arrays; algorithm; key value method; stack;目录摘要 (i)Abstract (ii)引言 (1)1 系统分析 (2)1.1 技术可行性分析 (2)1.1.1 可行性目的 (2)1.1.2 可行性研究前提 (2)1.1.3 算法可行性分析 (2)1.1.4 平台选择 (5)1.2 需求分析 (6)1.2.1 引言 (6)1.2.2 游戏需求 (6)1.2.3 软硬件需求 (9)1.2.4 接口控制 (10)1.3 方案论证 (10)1.3.1 C++语言的优点 (10)1.3.2 Java语言的优点 (11)1.3.3 C语言的优点 (12)1.3.4 方案选择 (14)2 概要设计 (15)2.1 游戏设计分析 (16)2.1.1 地图文件的引用 (18)2.1.2 程序运逻辑 (19)2.1.3 绘图 (19)2.1.4 显示平台 (21)2.2 注意事项 (23)2.3 游戏流程图 (23)2.4 函数模型 (24)3 详细设计 (27)3.1 游戏总体结构与代码 (27)3.2 选关模块 (28)3.3 地图的绘制形成 (29)3.4 小人与箱子移动的算法 (31)3.5 小人上下移动模块 (33)3.6 悔棋模块 (34)3.7 音乐控制 (35)4 游戏测试 (38)4.1 软件测试 (38)4.1.1 软件测试简介 (38)4.2 测试方法 (38)4.3 测试步骤 (38)4.4 游戏系统性能分析 (40)5 项目经验与总结 (41)6 参考文献 (43)7 致谢 (44)8 外文原文及中文翻译 (45)引言策略性游戏可以锻炼人的思维能力还能缓解人的压力,使人们暂时忘却生活当中的烦恼,增强人们的逻辑思维能力,游戏的艺术美也吸引着越来越多的玩家和厂商,寓教于乐,在放松人们心情的同时还可以活跃双手。

推箱子游戏课程设计摘要

推箱子游戏课程设计摘要

推箱子游戏课程设计摘要一、课程目标知识目标:1. 学生能理解并掌握编程基本概念,如变量、循环、条件语句等。

2. 学生能运用所学知识,设计并实现推箱子游戏的基本逻辑。

3. 学生了解游戏开发过程中的问题分解、算法设计等思维方法。

技能目标:1. 学生能够运用编程工具,如Scratch或Python等,独立编写推箱子游戏的代码。

2. 学生通过实践,培养解决问题的能力,提高逻辑思维和创新能力。

3. 学生学会合作与沟通,通过团队协作完成游戏设计,提高团队协作能力。

情感态度价值观目标:1. 学生对编程产生兴趣,树立学习自信,形成积极向上的学习态度。

2. 学生在游戏设计过程中,培养耐心、细心和克服困难的勇气。

3. 学生通过游戏设计,体会科技带来的乐趣,激发对科学技术的热爱。

课程性质:本课程为信息技术学科,结合游戏设计,提高学生的编程兴趣和实际操作能力。

学生特点:五年级学生具备一定的逻辑思维和创新能力,对新奇事物充满好奇,但需引导培养专注力和合作精神。

教学要求:注重理论与实践相结合,以学生为主体,教师引导,培养学生自主学习、合作探究的能力。

通过课程学习,使学生达到预定的学习成果,为后续信息技术学习奠定基础。

二、教学内容本课程教学内容紧密结合课程目标,选取以下部分:1. 编程基本概念:变量、循环、条件语句等,对应课本第三章相关内容。

- 变量:变量的定义、赋值、使用;- 循环:for循环、while循环;- 条件语句:if-else结构、嵌套条件。

2. 游戏设计逻辑:问题分解、算法设计,参考课本第四章案例分析。

- 问题分解:将推箱子游戏整体问题分解为小问题;- 算法设计:路径查找、碰撞检测等。

3. 编程工具使用:以Scratch或Python为例,结合课本第五章内容进行教学。

- Scratch:拖拽编程,实现游戏逻辑;- Python:编写代码,实现游戏功能。

4. 团队协作与沟通:学生分组,共同完成游戏设计,培养合作精神。

推箱子毕业论文

推箱子毕业论文

推箱子毕业论文推箱子毕业论文毕业论文是大学生们完成学业的重要任务之一,它不仅要求学生在某个特定领域深入研究,还需要展示学生的独立思考和创新能力。

在这篇文章中,我将以推箱子游戏为主题,探讨其在智力开发和问题解决能力培养方面的潜力。

一、推箱子游戏的起源与发展推箱子游戏是一种经典的益智游戏,最早出现在日本。

它的玩法简单,目标明确:将箱子推到指定位置。

虽然看似简单,但推箱子游戏蕴含着丰富的思维和策略元素,逐渐成为一种受欢迎的智力挑战。

二、推箱子游戏对智力开发的影响推箱子游戏能够锻炼玩家的逻辑思维和空间想象能力。

在游戏中,玩家需要根据箱子和墙壁的位置,合理规划推箱子的路径,避免陷入死胡同。

这要求玩家具备较强的分析能力和推理能力,培养了玩家的逻辑思维能力。

此外,推箱子游戏还能够提高玩家的空间想象能力。

在游戏中,玩家需要通过观察箱子和地图的相对位置,预测箱子推动后的变化,从而做出正确的决策。

这种空间想象能力的培养对于日常生活中的问题解决和空间布局都具有重要意义。

三、推箱子游戏对问题解决能力的培养推箱子游戏中的关卡设计多种多样,每个关卡都需要玩家通过合理的思考和尝试,找到解决问题的最佳路径。

这种问题解决能力的培养对于学生的学习和工作都具有重要意义。

首先,推箱子游戏的关卡设计能够培养玩家的耐心和毅力。

有些关卡可能需要玩家多次尝试才能找到解决方案,而玩家需要保持冷静和耐心,不断尝试和调整策略。

这种耐心和毅力的培养对于学生在学习和工作中遇到困难时的应对能力至关重要。

其次,推箱子游戏的关卡设计能够培养玩家的问题分解和解决能力。

每个关卡都是一个复杂问题,玩家需要将其拆解成多个小问题,并分别解决。

这种问题分解和解决能力的培养对于学生在解决复杂问题时具有重要指导意义。

四、推箱子游戏在教育中的应用前景推箱子游戏作为一种具有益智性质的游戏,有着广阔的应用前景。

在教育领域,推箱子游戏可以作为一种辅助教学工具,帮助学生培养逻辑思维和问题解决能力。

推箱子游戏毕业论文

推箱子游戏毕业论文
わずか1週間だけ、実際に私たちのプラットフォームを自分たちの知識を適用する指定されたが。そして、我々の最愛のプログラムの熱意に影響を与えた。私は以上の教科書はいくつかのプログラミングの知識とスキルをお持ち得ているこの1週間で展開します。私は勉強したいこれはバーの定数の拡大で完了するはずです。厦礴恳蹒骈時盡继價骚。
2、论文的观念是否有新意?设计是否有创意?
□ 优 □ 良 □ 中 □ 及格 □ 不及格
3、论文(设计说明书)所体现的整体水平
□ 优 □ 良 □ 中 □ 及格 □ 不及格
建议成绩:□优□良□中□及格□不及格
(在所选等级前的□内画“√”)
指导教师:(签名)单位:(盖章)
年 月 日
评阅教师评阅书
评阅教师评价:
ちょうど1週間では、訓練学校の学生の手-能力に、我々はC言語のカリキュラムデザインを開催します。教師と生徒の助けを借り、私は最終的にゲーム倉庫番を終えた。彈贸摄尔霁毙攬砖卤庑。
カリキュラムは、私たちだけに、プログラミングの経験を持っていないが、我々は協力の重要性を理解する。お気軽に学期が本当にで継続的な改善の上昇を行い、試運転徐々に私のプログラムを改善します。自分のプログラミングに同じ時間も深い洞察力で、常に改善され、魂を作成します。謀荞抟箧飆鐸怼类蒋薔。
二、设计原始资料
经典的推箱子是一个来自日本的古老游戏,目的是在训练你的逻辑思考能力。在一个狭小的仓库中,要求把木箱放到指定的位置,稍不小心就会出现箱子无法移动或者通道被堵住的情况,所以需要巧妙的利用有限的空间和通道!
三、设计完成后提交的文件和图表
1.计算说明书部分
程序设计分析
总体来说,这次推箱子游戏软件遵循的依旧是从上到下,逐步细化的编程思想。我也是在设想好大体轮廓后,从最基础的功能开始,不断地调试、补充、检查直到最后达到预定目的。
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

石家庄科技信息职业学院毕业设计(论文)任务书专业:软件开发(游戏方向)学生姓名:周志波学号:090124010设计(论文)题目:基于J2ME的推箱子游戏起讫日期:指导教师:刘永伟任务书下达日期:年月日基于J2ME的推箱子游戏摘要:手机是人们日常生活中所用的非常频繁的通信工具。

随着JA V A技术的不断更新提高,J2ME技术的出现,使得手机游戏越来越成为我们关注的焦点。

J2ME技术目前最流行的就是在制作手机游戏方面,JA V A手机的出现使得这一技术更有它的用武之地,发挥着他灵活、轻便、快捷的作用。

J2ME平台被是最杰出的手机游戏手机游戏平台,它一些非常重要的特征对开发者都有很大益处。

因为J2ME应用在不同设备上都是便携式的,他们常常可以在网络上下载和执行。

本设计通过MapList和SpriteThread等类进行推箱子游戏设计,最后编程实现了全过程。

关键词:J2ME MapList SpriteThread 推箱子一、设计过程 (3)(1)游戏策划 (3)(2)游戏的准备工作 (3)(3)设计背景 (6)(4)游戏框架设计 (7)(5)设计细节 (7)二、欢迎界面设计 (8)(1)PushBoxActivity类框架的搭建 (8)(2)欢迎界面WelcomeView类的实现 (13)(3)刷帧线程WelcomeViewDrawThread类的实现 (16)(4)动画线程WelcomeViewGoThread类的实现 (17)三、游戏界面设计 (19)四、游戏界面框架设计 (23)(1)GameView框架的实现 (24)(2)地图类MapList的实现 (29)(3)角色类MySprite的实现 (31)(4)onDraw方法的实现 (36)五、设计总结 (38)参考文献 (38)一.设计过程(1)游戏策划游戏策划主要包括游戏的情节、目标受众、运行的目标平台、采用的呈现技术、操作方式等几个方面。

游戏情节:本游戏为轻量级的益智游戏,因此不存在很复杂的情节。

这方面朱焘做的就是为设计游戏各管仓库的形状、大小、可通过区域,以及各关中箱子的初始位置和目的地。

目标受众:本游戏受众方面比较广,应该是老少皆宜的。

运行的目标平台:本游戏的目标平台为Android2.1。

才有的呈现技术:本游戏采用2D的呈现技术。

操作方法:本游戏拟采用手机键盘进行操作,对于没有键盘的型号也可以考虑采用虚拟键盘。

(2)游戏的准备工作根据游戏的策划来制作和搜集游戏要用到的图片、声音等。

本游戏有道的图片如下(3)设计背景游戏中,首先必须要有个主应用程序类,其次,为了把程序的画面呈现出来,就是要有画布;为了比较容易管理地图、增加或修改地图比较方便,应该把地图和画布分开;然后最主要的是要有个来推箱子的人;当然箱子也是需要管理的。

这其中需要先了解游戏中应用到的类。

欢迎界面类WelcomeView:主要负责欢迎界面的绘制工作。

欢迎界面的绘制线程类WelcomeViewDrawThread:负责的工作是定时重绘欢迎界面。

欢迎界面的动画实现类WelcomeViewGoThread:是通过改变WelcomeView中所用到的图片坐标实现的。

菜单界面类MenuView:只负责绘制工作菜单界面的绘制线程类MenuViewDrawThread:负责的工作是定时重绘菜单界面。

菜单界面的动画实现类MenuViewGoThread:用来生成菜单界面中背景的滚动效果。

游戏主界面类GameView:负责绘制游戏过程中所有的信息,如地图、玩家角色、所推的箱子、恭喜过关图片等。

游戏主界面的绘制线程类GameViewDrawThread:通过对调节线程中的睡眠时间便可调整游戏的FPS的高低,改善用户的体验。

地图信息类MapList:包含着地图的相关信息,这里的一个地图是用三维函数族中的二维矩阵表示的,关于该类的使用方法将在后面进行介绍。

角色封装类MySprite:包含了所有与角色有关的信息。

角色移动线程类SpriteMoveThread:负责角色的无级移动,运用时只需给出起始点和目标点的坐标,同时该类还承担起屏幕的滚动工作。

角色换帧线程类SpriteThread:负责根据角色的信息时时改变角色的图片。

箱子移动类BoxThread:负责子昂子的无级移动。

(4) 游戏框架设计游戏基本框架类图:图一游戏基本框架类图(5) 设计细节要做的游戏是让一个小人推箱子,操作方法就是通过四个方向键对小人进行上,下,左,右移动。

当箱子移动到指定位置时,游戏就会产生过关事件。

下面是游戏流程图:图二程序流程图二.欢迎界面设计(1)P ushBoxActivity类框架的搭建代码如下:package wyf.ytl;import android.app.Activity;import android.media.MediaPlayer;import android.os.Bundle;import android.os.Handler;import android.os.Message;import android.view.KeyEvent;import android.view.Window;import android.view.WindowManager;public class PushBoxActivity extends Activity{WelcomeView welcomeView = null;//欢迎界面WelcomeViewGoThread welcomeViewGoThread = null;//欢迎界面中的移动线程MenuView menuView = null;MenuViewGoThread menuViewGoThread = null;//菜单界面中的移动线程GameView gameView = null;boolean isSound = true;//是否播放声音MediaPlayer pushBoxSound;//推箱子声音MediaPlayer backSound;//背景音乐MediaPlayer winSound;//胜利的音乐MediaPlayer startSound;//开始和菜单时的音乐int map1[][];int map2[][];//当前游戏的地图int selectMap = 0;//选中的地图MySprite mySprite;//精灵KeyThread kt;//键盘监听线程int action = 0;//键盘的状态,二进制表示从左往右表示上下左右Handler myHandler = new Handler(){//用来更新UI线程中的控件public void handleMessage(Message msg) {if(msg.what == 1){//收到WelcomeViewGoThread/Welcome发来的消息welcomeViewGoThread.setFlag(false);if(welcomeView != null){welcomeView = null;}initAndToMenuView();}else if(msg.what == 2){//收到MenuView发来的消息if(menuView != null){menuView = null;}initAndToGameView();}else if(msg.what == 3){if(gameView != null){gameView = null;}initAndToMenuView();}else if(msg.what == 4){//收到GameView来的消息,进入下一关if(selectMap+1<MapList.map1.length){selectMap = selectMap+1;initAndToGameView();}else {selectMap = 0;initAndToGameView();}}}};public void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);//全屏requestWindowFeature(Window.FEATURE_NO_TITLE);getWindow().setFlags(youtParams.FLAG_FULLSCREEN ,youtParams.FLAG_FULLSCREEN);pushBoxSound = MediaPlayer.create(this, R.raw.sound2);//推箱子的声音winSound = MediaPlayer.create(this, R.raw.winsound);//胜利的声音backSound = MediaPlayer.create(this, R.raw.sound1);//背景音乐startSound = MediaPlayer.create(this, R.raw.sound3);startSound.setLooping(true);initAndToWelcomeView();}public void initAndToWelcomeView(){welcomeView = new WelcomeView(this);if(isSound){startSound.start();}this.setContentView(welcomeView);welcomeViewGoThread = new WelcomeViewGoThread(this);welcomeViewGoThread.start();}public void initAndToMenuView(){menuView = new MenuView(this);this.setContentView(menuView);menuViewGoThread = new MenuViewGoThread(this);menuViewGoThread.start();}public void initAndToGameView(){map1 = new int[MapList.map1[selectMap].length][MapList.map1[selectMap][0].length];for(int i=0; i<MapList.map1[selectMap].length; i++){for(int j=0; j<MapList.map1[selectMap][i].length; j++){map1[i][j] = MapList.map1[selectMap][i][j];//初始化第一层}}map2 = new int[MapList.map2[selectMap].length][MapList.map2[selectMap][0].length];for(int i=0; i<MapList.map2[selectMap].length; i++){for(int j=0; j<MapList.map2[selectMap][i].length; j++){map2[i][j] = MapList.map2[selectMap][i][j];//初始化第二层gameView = new GameView(this);mySprite = new MySprite(this);kt = new KeyThread(this);//添加键盘监听kt.start();if(isSound){backSound.start();//播放声音}this.setContentView(gameView);}public boolean onKeyUp(int keyCode, KeyEvent event) {//键盘抬起if(keyCode == 19){//上action = action & 0x37;}if(keyCode == 20){//下action = action & 0x3B;}if(keyCode == 21){//左action = action & 0x3D;}if(keyCode == 22){//右action = action & 0x3E;}return false;}public boolean onKeyDown(int keyCode, KeyEvent event){//键盘按下监听if(keyCode == 19){//上action = action | 0x08;}if(keyCode == 20){//下if(keyCode == 21){//左action = action | 0x02;}if(keyCode == 22){//右action = action | 0x01;}return false;}}(2)欢迎界面WelcomeView类的实现代码如下:package wyf.ytl;import android.graphics.Bitmap;import android.graphics.BitmapFactory;import android.graphics.Canvas;import android.graphics.Color;import android.graphics.Paint;import android.view.SurfaceHolder;import android.view.SurfaceView;import android.view.View;import android.view.View.OnClickListener;public class WelcomeView extends SurfaceView implements SurfaceHolder.Callback, OnClickListener{PushBoxActivity pushBoxActivity;WelcomeViewDrawThread welcomeViewDrawThread = null;Bitmap bitmap;Bitmap wallLeft;//左面的墙Bitmap wallRight;//右面的墙Bitmap iron;//铁门Bitmap woodLeft;//左面的木门Bitmap woodRight;//右面的木门Bitmap background;Bitmap mountain;//背景的山int wallLeftX = 15;//墙的坐标int wallLeftY = 10;int wallRightX = 150;int wallRightY = 10;int ironX = 15;//铁门的坐标int ironY = 10;int woodLeftX = 15;//木门的坐标int woodLeftY = 10;int woodRightX = 150;int woodRightY = 10;public WelcomeView(PushBoxActivity pushBoxActivity) {//构造器super(pushBoxActivity);this.pushBoxActivity = pushBoxActivity;getHolder().addCallback(this);welcomeViewDrawThread = new WelcomeViewDrawThread(this,getHolder());wallRight = BitmapFactory.decodeResource(getResources(), R.drawable.wallright);wallLeft = BitmapFactory.decodeResource(getResources(), R.drawable.wallleft);bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.image4);iron = BitmapFactory.decodeResource(getResources(), R.drawable.image2);woodLeft = BitmapFactory.decodeResource(getResources(), R.drawable.image33);woodRight = BitmapFactory.decodeResource(getResources(), R.drawable.image3);background = BitmapFactory.decodeResource(getResources(), R.drawable.background);//背景的水mountain = BitmapFactory.decodeResource(getResources(), R.drawable.mountain2);protected void onDraw(Canvas canvas) {canvas.drawColor(Color.WHITE);//背景白色canvas.drawBitmap(background, 0, 0, new Paint());//绘制背景canvas.drawBitmap(mountain, 0, 0, new Paint());//后面的山图片canvas.drawBitmap(wallLeft, wallLeftX, wallLeftY,new Paint());//墙的左面canvas.drawBitmap(wallRight, wallRightX, wallRightY,new Paint());//墙的右面canvas.drawBitmap(iron, ironX, ironY,new Paint());//铁门canvas.drawBitmap(woodLeft, woodLeftX, woodLeftY,new Paint());//木头门左面canvas.drawBitmap(woodRight, woodRightX, woodRightY,new Paint());//木头门右面canvas.drawBitmap(bitmap, 0, 0, new Paint());this.setOnClickListener(this);}public void surfaceChanged(SurfaceHolder holder, int format, int width,int height) {}public void surfaceCreated(SurfaceHolder holder) {welcomeViewDrawThread.setFlag(true);welcomeViewDrawThread.start();//启动刷帧线程}public void surfaceDestroyed(SurfaceHolder holder) {boolean retry = true;welcomeViewDrawThread.setFlag(false);//停止刷帧线程while (retry) {try {welcomeViewDrawThread.join();//等待刷帧线程结束retry = false;}catch (InterruptedException e) {//不断地循环,直到等待的线程结束}}public void onClick(View v) {pushBoxActivity.myHandler.sendEmptyMessage(1);}}(3)刷帧线程WelcomeViewDrawThread的实现代码如下:package wyf.ytl;public class WelcomeViewGoThread extends Thread{int sleepSpan = 200;//睡眠的毫秒数private boolean flag = true;int status = 0;PushBoxActivity pushBoxActivity;//activity的引用public WelcomeViewGoThread(PushBoxActivity pushBoxActivity){ this.pushBoxActivity = pushBoxActivity;}public void setFlag(boolean flag){this.flag = flag;}public void run() {//重写的run方法while(flag){switch(status){case 0://木门运动pushBoxActivity.welcomeView.woodLeftX -= 2;pushBoxActivity.welcomeView.woodRightX += 2;if(pushBoxActivity.welcomeView.woodLeftX<-90){status = 1;}break;case 1://铁门运动pushBoxActivity.welcomeView.ironY -= 8;if(pushBoxActivity.welcomeView.ironY<-380){status = 2;}break;case 2:pushBoxActivity.welcomeView.wallLeftX -= 3;pushBoxActivity.welcomeView.wallRightX += 3;if(pushBoxActivity.welcomeView.wallLeftX<-90){status = 3;}break;case 3:this.flag = false;pushBoxActivity.myHandler.sendEmptyMessage(1);//向主activity发送Handler消息break;}try{Thread.sleep(sleepSpan);//睡眠}catch(Exception e){e.printStackTrace();}}}}(4)动画线程WelcomeViewGoThread的实现代码如下:package wyf.ytl;public class MenuViewGoThread extends Thread{boolean flag = true;//循环标记位int sleepSpan = 300;//睡眠的毫秒数PushBoxActivity pushBoxActivity;public MenuViewGoThread(PushBoxActivity pushBoxActivity){this.pushBoxActivity = pushBoxActivity;}public void run(){while(flag){if(pushBoxActivity.menuView != null){if(pushBoxActivity.menuView.menubackgroudX < -320){//当移动过远时将坐标重置到0 pushBoxActivity.menuView.menubackgroudX = 0;}pushBoxActivity.menuView.menubackgroudX -= 2;//每次循环向左移两个单位try{Thread.sleep(sleepSpan);//睡眠}catch(Exception e){e.printStackTrace();}}}}}图三欢迎界面图图四菜单界面图三.游戏界面设计在游戏界面设计中首先要使菜单界面MenuView类实现。

相关文档
最新文档