超级玛丽Java课程设计

合集下载

java超级玛丽游戏计算机毕业设计任务书

java超级玛丽游戏计算机毕业设计任务书

java超级玛丽游戏计算机毕业设计任务书毕业设计(论文)任务书第1页毕业设计(论文)题目:基于JAVA的超级玛丽的设计和实现毕业设计(论文)要求及原始数据(资料):1. 深入了解超级玛丽的游戏环境和可研究性;2(熟练掌握Java,html编程语言并能灵活运用;3. 设计实现游戏的功能模块;4 熟练地运行程序和修改程序;5. 对java环境有深入的研究;6(训练检索文献资料和利用文献资料的能力;7(锻炼自我完成论文的能力。

第2页毕业设计(论文)主要内容:1 详细了解基于java的超级玛丽游戏的功能与应用。

具体说明超级玛丽游戏的编写目的参照文献以及技术说明。

2 实现的简单功能是实现超级玛丽到水沟和食人花的上面时会使Mario死掉,跳跃的过程中可以顶破砖块等,实现原版游戏中的玛丽游戏的主要功能,游戏人物Mario可以根据玩家的操作进行移动和跳跃,在落到蘑菇人头上时会让蘑菇人死掉,落基本游戏要素3 包括具体的设计目的,游戏的功能需求,具体的功能模块,功能描述,程序的整体框架,程序的详细设计等等对设计java的超级玛丽游戏进行可行性研究的报告。

涉及到可行性研究的前提对现有系统的分析,所建议技术可行性的分析。

可行性研究的前提。

4 对java超级玛丽游戏进行概要设计和详细设计5 系统的设计和实现包括5.1开发工作5.2游戏素材管理5.3游戏场景布置5.4游戏用例图5.5游戏状态图5.6游戏例图6 对设计进行具体的总结。

7 参考文献8 致谢学生应交出的设计文件(论文):1(内容完整、层次清晰、叙述流畅、排版规范的毕业设计论文;2(包括毕业设计论文、源程序等内容在内的毕业设计电子文档及其它相关材料。

第3页主要参考文献(资料):1 夏人青,罗志敏,严军.中国大学生创业政策的回顾与展望(1999-2011),高教探索,2012(1):123~1282 王光亚. 手机下Java游戏开发概述,电子科学,2009(2):25~263 车战斌,韩玉民,刘安战. 高职Java手机游戏开发专业课程体系建设研究,职业教育研究,2012(2):44~454 丁峰,徐鹏,蔡月茹. 基于Java的Web应用概览,计算机世界,2004(1):124~127 5 籍炜. 基于Java的拼图游戏开发,学园,2013(5):1506 李德平. 基于JAVA的指纹考勤机统计软件的开发,清远职业技术学院学报,2012,5(3):34~397 Weirich S, Huang L. A Design for Type-Directed Programming in Java, ElectronicNotes in Theoretical Computer Science ,2005 .117~1368 迟伟雅. Java语言简介,电脑与网络,23~259 陈涵生. Java语言与Java技术,计算机工程,1997,27(5):3~610 J. Martinez-Llario,M. Gonzalez-Alcaide. Design of a Java spatial extension forrelational databases,The Journal of Systems and Software,2011 (84):2314~2323 11 张小红. 浅谈ORACLE中基于JAVA的存储查询优化,电子技术与软件工程,2013(5):200~20112 Claudia B, Stephan D. Educational and technical design of a Web-based interactivetutorial on programming in Java,Science of Computer Programming2004(53):25~36 13 吴越胜,李新磊等. Eclipse 3.0 程序开发技术详解,清华大学出版社, 2010: 13~15 14 吴亚峰,苏亚光等. 30天学通java项目案例开发,电子工业出版社, 2009: 153~190 15 唐大仕. JAVA程序设计第二版,清华大学出版社, 2003:1~1016 吕聃. 基于Java的在线考试系统设计与实现,吉林大学,学位论文,201217 尚蔚. 基于Java的多形式WEB视频监控系统的设计与实现,东华大学,学位论文,2010 18 强锋科技. Java开发利器: Eclipse从入门到精通,清华大学出版社, 2005: 24~111 19 宋全德. 基于Java的Madlib自动化测试框架,计算机系统应用,2014,23(2):28~35 20 (英)伊乐斯, 克里普斯著, 蔡黄辉, 马文涛译.架构实战—软件架构设计的过程,机械工业出版社, 2010: 42~76专业班级学生要求设计(论文)工作起止日期 2014年3月17日~2014年6月27日指导教师签字日期 2014年3月17日教研室主任审查签字日期系主任批准签字日期。

超级玛丽JAVA小游戏详细设计文档

超级玛丽JAVA小游戏详细设计文档
分离。 业务逻辑层。主要是游戏的人物和敌人的动作,碰撞的判断,这个与表现层
无关,需要表示层调用定义好的接口与逻辑层的通信 数据持久层。保存游戏中的数据,载入游戏中需要的资源,与程序逻辑层无
关,用 XML 文档存储数据
2.7 程序的三层结构图
表现层(绘制屏幕)
逻辑层(程序的逻辑)
数 据 持 久 层 ( 数 据 存4储 )
不同的操作; 查询记录:查询五个最高游戏分数,排名由上往下递减。 游戏设置(包括音乐设置和按键设置):玩家可以设置游戏进行时的音乐开
或关以及修改相应的控制键。
2.6 程序的总体架构
本程序采用 3 层程序架构,业务表现层,业务逻辑层和数据持久层。 业务表现层。主要是游戏界面的绘制,通过指定的接口绘制,与游戏的逻辑
private void walk()
//人物走的动作
private boolean checkTileCollisionVertical() //检查与地图的纵
向碰撞
private boolean checkTileCollisionHorizon() //检查与地图的横
向碰撞
private void fire() //发射子弹
地图,以提高游戏的运行速度 5) 居于多线程,实现进度条
2.2 游戏功能划分
游戏的基本功能应该包括菜单处理,程序逻辑处理,持久性处理和挂起恢复处理。 关于菜单的处理,包括可以选择的进入游戏、保存、帮助和音效开关等。 程序的逻辑处理就是涵盖了程序中除菜单外几乎所有的功能。 持久性处理就是资源的载入和游戏的进度保存。
private boolean checkSpriteCollisionVertical() //检查纵向与

超级玛丽详细设计文档

超级玛丽详细设计文档

超级玛丽详细设计文档超级玛丽JA V A小游戏详细设计目录1.导言 ............................................................................................ 错误!未定义书签。

1.1编写目的 .................................................................... 错误!未定义书签。

1.2项目范围 .................................................................... 错误!未定义书签。

1.3参考资料 .................................................................... 错误!未定义书签。

1.4缩写说明 .................................................................... 错误!未定义书签。

1.5术语定义 .................................................................... 错误!未定义书签。

2.功能需求 .................................................................................... 错误!未定义书签。

2.1界面设计技术............................................................ 错误!未定义书签。

2.2游戏功能划分............................................................ 错误!未定义书签。

java超级玛丽游戏计算机毕业设计论文[管理资料]

java超级玛丽游戏计算机毕业设计论文[管理资料]

基于JAVA的超级玛丽设计与实现摘要随着计算机技术及网络技术的不断发展,电子游戏越来越普及。

经典游戏“超级玛丽”因其本身所具有的娱乐性与教育意义而被人们广泛接受,在广大的青少年玩家中享有极高的知名度。

Java语言作为一种完全面向对象的程序设计语言,在游戏设计方面具有独特优势。

Java语言由C++语言发展而来,但比C++语言简单。

它具有简单、与平台无关、高效、安全、多线程等特点,在游戏设计开发方面得到广泛应用。

本课题在大学生自主创业的大背景下,利用Java语言重新设计开发了“超级玛丽”游戏,基本实现了旧版游戏的所有功能。

目前该版本游戏已经发布在学校的公共论坛上,已被许多同学下载并试玩,反响较好,但是仍暴露了一些问题,如人物形象设计过于单调等,这些问题的优化将会在下一个版本中得到实现。

本文在对整个游戏的各种需求及可行性分析的基础上,详细论述了游戏的设计过程与实现方案。

论文包括绪论、相关技术研究、可行性分析、系统设计与实现以及结论等部分内容。

关键词: Java;超级玛丽;C++Design and Implementation of a Java-based Super Mario GameAbstractWith the development of computer and network technology, video games have become more and more popular. Super Mario as a classical game, which enjoys high popularity in the majority of juvenile game players was widely accepted due to its entertainment and educational significance. Java language as a programming language that is completely object oriented, has an unique advantage in game design. Java language developed from C++ language is much more simple than C++ language. Its advantages such as simplicity, platform independence, efficiency, security and multi threading etc, has been widely used in the aspects of game design. This topic which is in the context of College Students' entrepreneurship, use Java language to design and develop the "super Mario" game again that basically achieve the features of the old version of the game. The current version of the game being released in the school public forum have been downloaded and played by many students. Although the evaluation of the game was good, there are still some problems, such as the character image is too monotonous. Optimization of all these problems will be implemented in the next version.Based on the demand and feasibility analysis of the whole game, the game design process and implementation plan were discussed in detail. The thesis includes introduction, related technology research, feasibility analysis, system design and implementation as well as the conclusion part.Key words: Java; Super Mario; C++目录摘要 (i)Abstract (ii)1 绪论 (1)课题研究背景 (1)课题研究意义 (1)课题研究内容 (2)2 可行性分析 (3)经济可行性分析 (3)技术可行性分析 (3)系统性能需求分析 (3)3 相关技术研究 (5)开发工具及环境 (5)Java语言 (5)Eclipse环境 (6)面向对象程序设计 (6)C/S结构与B/S结构 (6)4 系统设计与实现 (7)开发工作 (7) (7)游戏场景布置 (7) (8) (8)游戏时序图 (9) (10) (10)Mario图类 (11)Enemy类图 (13)Obstruction类图 (14)BackGround类 (15)StaticValue类图 (16)MyFrame类图 (17)游戏功能与代码实现 (18)游戏功能 (18) (18)5 游戏运行截图及程序说明 (25)结论 (30)参考文献 (31)致谢 (32)外文原文 (33)1 绪论课题研究背景《超级玛丽》全名为《超级马里奥兄弟》,是由任天堂公司出品的著名横版过关游戏。

超级玛丽JAVA小游戏需求规格说明书

超级玛丽JAVA小游戏需求规格说明书

目录1.导言 (2)1.1编写目的 (2)1.2项目背景 (2)1.3参考资料 (2)2.任务概述 (2)2.1目标 (2)2.2开发环境 (3)2.3 运行环境 (3)3.功能需求 (3)3.1功能划分 (3)3.2功能描述 (3)4.面向对象设计 (4)4.1用例图 (4)4.2用例图叙述 (4)4.3顺序图 (6)4.4 活动图 (7)5.运行需求 (7)5.1用户界面 (7)5.2硬件接口 (7)5.3软件接口 (7)5.4故障处理 (8)6.其它需求 (8)6.1可扩展性要求 (8)7.签字 (8)1.导言1.1编写目的本需求规格文档的目的是说明超级玛丽游戏平台的功能和设计方向、目标,为全体开发人员进一步的设计和实现提供统一的依据。

本文档将供开发本游戏的团队成员查阅使用,其中包括:编程人员,数据库设计人员,美工,测试人员,用户。

1.2项目背景游戏,供给现在人们进行悠闲娱乐,在市场上占了很大的份额,所以编写一个适应多平台的游戏尤为重要。

超级玛丽作为一个经典的益智游戏相当的应景。

1.3参考资料《软件工程案例教程》机械工业出版社韩万江编著《Java课程设计案例精编》清华大学出版社张广彬孟红蕊张永宝编著2.任务概述2.1目标超级玛丽游戏是一款居于多种平台的游戏,目的是为用户提供一个轻便的游戏环境,随时可以pc中进行放松休闲娱乐。

2.2开发环境开发环境:Eclipse+window 7 +JDK1.6以上+Tomcat 5.0.28以上数据库:SQL2005以及以上2.3 运行环境软件环境:配置了JDK,支持java运行环境操作系统:windows xp/windows 7及以上硬件环境:客户机:普通PC数据库:SQL2005以及以上3.功能需求3.1功能划分游戏控制模块查询记录模块关卡选择模块游戏设置模块3.2功能描述玩家打开程序,在游戏菜单页面有四个选项。

1.关卡选择:选择已玩过的关卡进行游戏;2.开始游戏:从游戏的第一关进行游戏,玩家通过按键控制主人公马里奥进行不同的操作;3.查询记录:查询五个最高游戏分数,排名由上往下递减。

超级玛丽JAVA小游戏概要设计文档

超级玛丽JAVA小游戏概要设计文档

目录1.导言 (2)1.1编写目的 (2)1.2项目范围 (2)1.3参考资料 (2)1.4缩写说明 (2)1.5术语定义 (2)2.任务概述 (3)2.1目标 (3)2.2开发环境 (3)2.3运行硬件环境要求 (3)3.功能需求 (3)3.1游戏功能划分 (3)3.2功能划分的架构图 (4)3.3具体的功能模块 (4)3.4功能描述 (4)3.5程序的总体架构 (4)3.6程序的三层结构图 (5)4.面向对象设计 (5)4.1用例图 (5)4.2顺序图 (6)4.3活动图 (6)4.4主要类图 (7)4.5各个模块的方法或类名类表示 (7)4.6地图绘制中的坐标说明 (8)5.运行需求 (8)5.1界面设计技术 (8)5.2硬、软件接口要求 (8)5.3故障处理 (9)6.其它需求 (9)6.1可扩展性要求 (9)1.导言1.1编写目的该文档的目的是说明超级玛丽游戏的功能和设计方向、目标等描述游戏项目的概要设计。

其主要内容包括:游戏项目的功能简介,接口设计,模块设计,界面设计。

本文档预期读者包括:项目管理人员,编程人员,数据库设计人员,美工,测试人员。

1.2项目范围该文档定义了游戏的模块,结构单元,但未确定单元的实现方法,这部分内容将在详细设计/实现中确定。

1.3参考资料《软件工程案例教程》机械工业出版社韩万江编著《J2ME手机游戏开发技术详解》清华大学出版社李振鹏龚剑编著1.4缩写说明UML:Unified Modeling Language(统一建模语言)的缩写,是一个标准的建模语言。

1.5术语定义MIDP2.0定义:MIDP2.0也叫MIDP_NG,它的编号是JSR118。

MIDP2.0与1.0相比有很大提高,增加的特性包括:提供域安全模型,以允许对应用程序进行签名和论证;提供TCP、UDP网络接口;内置OTA;更好的用户界面;基本的声音API。

2.任务概述2.1目标实现超级玛丽游戏的主要功能,主人翁可以吃到蘑菇变大,吃到花可以发射子弹,有的水管可以下去,可以踩到乌龟,可以顶破砖块,实现大家熟悉的基本功能。

超级玛丽java游戏课程设计

超级玛丽java游戏课程设计

超级玛丽java游戏课程设计一、课程目标知识目标:1. 学生能够理解Java编程语言的基本语法和结构,掌握面向对象编程的基本概念。

2. 学生能够运用Java编程实现游戏界面设计、角色控制、碰撞检测等基本功能。

3. 学生了解游戏开发中的坐标系统和动画原理,并能够将其应用于超级玛丽游戏设计中。

技能目标:1. 学生掌握使用Java编写程序的方法,培养编程思维和解决问题的能力。

2. 学生能够运用面向对象的设计思想,设计出结构清晰、可维护性强的游戏代码。

3. 学生通过团队协作,学会使用版本控制工具,提高项目管理和团队协作能力。

情感态度价值观目标:1. 学生培养对编程和游戏开发的兴趣,激发创新意识和探索精神。

2. 学生在项目实践中,增强自信心,培养面对困难和挑战时的积极态度。

3. 学生通过团队协作,学会尊重他人意见,培养良好的沟通能力和团队精神。

课程性质:本课程为实践性较强的课程,结合Java编程语言和游戏开发技术,使学生能够在实际操作中掌握编程知识和技能。

学生特点:学生处于初中或高中年级,具有一定的计算机操作基础,对游戏开发感兴趣,具备一定的逻辑思维能力。

教学要求:课程注重理论与实践相结合,强调动手实践,引导学生通过自主学习和团队协作完成游戏设计项目。

在教学过程中,关注学生的个体差异,鼓励学生提问和分享,提高学生的综合素质。

通过课程学习,使学生在知识、技能和情感态度价值观方面取得具体的学习成果。

二、教学内容1. Java基础语法:变量、数据类型、运算符、控制流程(条件语句、循环语句)、数组等基本概念。

2. 面向对象编程:类与对象、构造方法、继承与多态、接口与实现等。

- 相关章节:课本第3章至第5章。

3. Java图形用户界面(GUI):Swing库的使用,窗口、标签、按钮、文本框等组件的创建与应用。

- 相关章节:课本第7章。

4. 游戏设计基础:- 坐标系统与动画原理:游戏中的坐标系,帧动画原理。

- 碰撞检测与角色控制:矩形碰撞检测,角色移动、跳跃等控制逻辑。

基于Java的超级玛丽游戏的设计与实现论文

基于Java的超级玛丽游戏的设计与实现论文

分类号_______________ 密级________________UDC _______________ 学号_ ___ 毕业设计(论文)论文题目基于Java的超级玛丽游戏的设计与实现thesis Topic学生姓名学号所在院系专业班级导师姓名职称完成日期年月日基于java的超级玛丽游戏的设计与实现摘要近年来,Java作为一种新的编程语言,以其简单性、可移植性和平台无关性等优点,得到了广泛地应用。

J2SE称为Java标准版或Java标准平台。

J2SE提供了标准的SDK开发平台。

利用该平台可以开发Java桌面应用程序和低端的服务器应用程序,也可以开发Java Applet程序。

“超级玛丽”游戏是一个经典的游戏,它因操作简单、娱乐性强而广受欢迎。

本游戏中通过总结和分析JAVA游戏的开发流程和代码功能的设计,采用面向对象的设计模式,对游戏中的所有物体赋予对象的概念和属性。

开发了一款超级玛丽游戏,该游戏主要分为窗体类、场景类、马里奥类、敌人类、障碍物类等几个类。

在主程序运行的线程中,用户控制的超级玛丽随方向键的操作而移动,并且可以实现马里奥游戏中的一些基本功能,例如踩死敌人或者顶掉砖块。

本游戏采用双缓存技术,解决了游戏过程中的闪屏问题。

通过本游戏的开发,达到学习Java技术和熟悉软件开发流程的目的。

本文在介绍Java相关技术和国内外发展现状的基础上,对“超级玛丽”游戏的整个生命周期的各个开发阶段进行了详细地介绍。

为了保证程序代码的正确性和功能实现的可靠性,本文还介绍了游戏软件的程序调试过程和功能测试结果。

【关键字】:面向对象;Java;碰撞检测;超级玛丽Design and implementation of java-based Super Mario gameAbstractIn recent years, Java as a new programming language, with its simplicity, portability and platform independence, etc., have been widely used. J2SE called Java Standard Edition or Java standard platforms. J2SE SDK provides a standard development platform. You can use the platform to develop Java desktop applications and low-end server applications, you can develop Java Applet program."Super Mario" game is a classic game, because it is simple, entertaining and popular. The game features through the development process and code design summary and analysis of JA V A games, using object-oriented design patterns, all objects of the game gives the concept of objects and attributes. Developed a Super Mario game, the game is divided into several classes form class, class scene, Mario class, class enemies, obstacles and so on. In the main thread running, user-controlled Super Mario with the arrow keys to move the operation, and can achieve Mario game some basic functions, such as stepping on the enemy or top off the bricks. The game uses dual caching technology to solve the game during the splash screen problem. Through the development of this game, to learn Java technology and familiar with software development process purposes.This paper describes the state of the art related to the development of Java and abroad on the basis of the various development stages of "Super Mario" game for the entire life cycle of a detailed introduction. In order to ensure the correctness of the program code and functions to achieve reliability, this article describes the game software debugging process and functional test results.Key words: Object-Oriented,java,Collision Detection, Mario目录1、绪论 (5)1.1背景以及现状 (5)1.2 Java语言的特点 (5)1.3 系统运行环境及开发软件: (6)1.4 可行性的分析 (6)1.4.1 技术可行性 (6)1.4.2 经济可行性 (7)1.4.3 操作可行性 (7)2、需求分析 (7)2.1 用户需求分析 (7)2.2功能需求分析 (8)2.3界面设计需求分析 (8)3、系统概要设计 (8)3.1系统模块设计 (8)3.1.1窗体类 (9)3.1.2初始化类 (9)3.1.3背景类 (10)3.1.4马里奥类 (10)3.1.5障碍物类 (11)3.1.6敌人类 (11)3.2系统流程设计 (13)4、系统详细设计 (14)4.1 设计目标 (14)4.2 系统模块设计 (14)4.2.1窗体类 (14)4.2.2初始化类 (18)4.2.3背景类 (21)4.2.4马里奥类 (24)4.2.5障碍物类 (29)4.2.6敌人类 (31)5、系统的实现 (34)5.1游戏开发所需要的图片 (34)5.1.1马里奥的所有图片 (34)5.1.2游戏中障碍物的图片 (35)5.1.3游戏中怪物的图片 (35)5.1.4游戏中的背景图片 (36)5.1.5游戏开始时的图片 (36)5.2游戏设计的界面 (37)5.2.1 游戏逻辑展示 (37)5.2.1 游戏逻辑展示 (38)6、系统测试 (39)6.1 测试的意义 (39)6.2 测试过程 (40)6.3 测试结果 (40)7、总结与展望 (41)7.1 总结 (41)7.2 设计中的不足之处 (41)7.3 展望 (41)致谢 (42)外文原文 (43)外文翻译 (47)1、绪论1.1背景以及现状随着计算机日益普及,计算机已然成为人们日常生活的一部分的今天,计算机游戏也越来越成为人们生活中不可或缺的元素。

超级玛丽--Java课程设计

超级玛丽--Java课程设计

超级玛丽--Java课程设计《面向对象程序设计》课程设计报告题目:超级玛丽软件的设计与实现院(系):信息科学与工程学院专业班级:计算机科学与技术1201班学生姓名:程伟学号:20121183011指导教师:吴奕20 14 年 12 月 29 日至20 15 年 1 月 9 日华中科技大学武昌分校制总体设计1天详细设计1.5天编制源程序实现3.5天测试与修改1天撰写课设报告2天六、主要参考资料[1] 张广彬. Java课程设计案例精编(第二版).北京:清华大学出版社, 2011.[2] 耿祥义. Java课程设计(第二版).北京:清华大学出版社, 2008.[3] 耿祥义.JAVA大学实用教程.北京:清华大学出版社,2009.[4] 邹林达.陈国君 Java2程序设计基础.北京:清华大学出版社,2010.[5] 邹林达.Java2程序设计基础实验指导.北京:清华大学,2010.目录1需求与总体设计 (2)1.1需求分析 (2)1.2程序功能图 (3)1.3程序类图 (3)2详细设计 (4)2.1 MyFrame实现 (4)2.1.1窗体对象的序列图 (4)2.1.2 Myframe详细类图 (5)2.2 Mario实现 (6)2.2.1 Mario对象的序列图 (6)2.2.2 Mario类图 (7)2.3 Enemy类的实现 (8)2.4 Obstruction类的实现 (9)2.5 BackGround类实现 (9)3编码实现 (10)3.1 MyFrame类的详细代码....... 错误!未定义书签。

3.2 BackGround类的详细代码.错误!未定义书签。

3.3 Mario类的详细代码........... 错误!未定义书签。

3.4 Enemy类的详细代码........... 错误!未定义书签。

3.5 Obstruction类的详细代码错误!未定义书签。

4系统测试 (60)4.1 游戏开始界面的测试 (60)4.2 游戏运行的测试 (60)4.3 排除错误的处理 (64)总结 (64)1需求与总体设计1.1需求分析提供一个友好的用户交互界面,简单明了容易操作。

超级玛丽课程设计

超级玛丽课程设计

超级玛丽课程设计一、课程目标知识目标:1. 学生能理解并掌握游戏设计的基本概念,如角色设定、场景布局等。

2. 学生能运用所学的编程知识,设计并实现一个简单的“超级玛丽”游戏角色和场景。

3. 学生了解游戏设计中的数学知识,如坐标系统、碰撞检测等。

技能目标:1. 学生能运用图形化编程软件,进行游戏角色的设计和场景的搭建。

2. 学生掌握基本的编程逻辑,能够实现角色的移动、跳跃等动作。

3. 学生通过团队协作,完成一个完整的游戏项目,提高沟通与协作能力。

情感态度价值观目标:1. 学生培养对编程和游戏设计的兴趣,激发创新意识和探索精神。

2. 学生在游戏设计过程中,体验团队合作的重要性,增强团队意识和责任感。

3. 学生通过创作游戏,培养审美观念和艺术素养,提高对美的追求和表达能力。

分析课程性质、学生特点和教学要求:1. 本课程为信息技术课程,旨在让学生在实践中学习编程和游戏设计,提高动手能力。

2. 学生为四年级学生,具有一定的图形化编程基础,对游戏设计感兴趣。

3. 教学要求注重实践性、趣味性和团队合作,以激发学生的学习兴趣和主动性。

1. 独立设计并实现一个简单的“超级玛丽”游戏角色和场景。

2. 掌握游戏设计的基本编程逻辑,实现角色的移动、跳跃等动作。

3. 通过团队协作,完成一个具有创意的“超级玛丽”游戏项目,展示给其他同学和老师。

二、教学内容1. 游戏设计基本概念:角色设定、场景布局、游戏规则等。

- 教材章节:第二章“游戏设计概述”- 内容安排:第一课时,介绍游戏设计的基本概念和要素。

2. 图形化编程软件操作:使用Scratch等软件进行角色设计和场景搭建。

- 教材章节:第三章“图形化编程软件应用”- 内容安排:第二、三课时,学习软件操作,进行角色和场景设计。

3. 编程逻辑:实现角色移动、跳跃等动作,掌握条件语句和循环语句。

- 教材章节:第四章“编程逻辑与应用”- 内容安排:第四、五课时,学习编程逻辑,实现角色动作。

超级玛丽旅程课程设计

超级玛丽旅程课程设计

超级玛丽旅程课程设计一、课程目标知识目标:1. 学生能够理解并掌握游戏设计中的基础编程概念,如循环结构、条件语句和变量。

2. 学生能够运用数学知识,如坐标系、角度和距离,设计游戏中的角色移动和场景布局。

3. 学生能够结合物理知识,如重力、碰撞原理,优化游戏中的物理效果。

技能目标:1. 学生能够运用所学编程知识,独立设计并完成一个具有基本功能的游戏角色或场景。

2. 学生能够通过小组合作,进行有效沟通与分工,共同完成一个简易版的“超级玛丽”游戏项目。

3. 学生能够运用批判性思维,对游戏设计进行评价和优化,提高解决问题的能力。

情感态度价值观目标:1. 学生能够培养对编程和游戏设计的兴趣,激发创造力和创新精神。

2. 学生能够在游戏设计过程中,体验团队合作的重要性,树立团队协作意识。

3. 学生能够认识到科技与生活的紧密联系,培养对科学技术的热爱和追求。

课程性质:本课程为信息技术与学科融合的实践课程,以项目式学习为主,注重培养学生的动手操作能力、创新思维和团队协作能力。

学生特点:四年级学生具备一定的计算机操作基础,对游戏设计有浓厚兴趣,但编程知识有限,需要通过实践操作逐步掌握编程技巧。

教学要求:教师需注重理论与实践相结合,以学生为主体,引导学生主动探究,发挥学生的创造力和想象力。

同时,关注学生的个体差异,提供个性化指导,确保每个学生都能在课程中取得进步。

通过课程学习,使学生能够将所学知识应用于实际情境,实现课程目标的落地。

二、教学内容1. 游戏设计基础概念:循环结构、条件语句、变量定义与运用。

相关教材章节:第二章《计算机编程基础》2. 游戏角色与场景设计:运用坐标系、角度和距离知识,设计角色移动路径和场景布局。

相关教材章节:第三章《图形与动画设计》3. 游戏物理效果优化:重力、碰撞原理在游戏中的应用。

相关教材章节:第四章《计算机图形学基础》4. 编程实践:使用Scratch或Python等编程工具,设计并完成一个具有基本功能的游戏角色或场景。

超级玛丽JAVA小游戏测试报告文档

超级玛丽JAVA小游戏测试报告文档

超级玛丽JAVA小游戏测试报告文档目录1.导言 (2)1.1编写目的 (2)1.2项目范围 (2)1.3参考资料 (2)1.4缩写说明 (2)1.5术语定义 (2)1.6版本更新信息 (3)2. 测试设计 (3)2.1测试要点 (3)2.2测试时间、地点、人员 (3)2.3测试覆盖设计 (4)2.4测试环境描述 (4)2.5功能测试执行情况 (4)2.6界面测试 (8)2.7测试进度度量 (8)2.8测试工作量度量 (8)2.9.1测试任务评估 (9)2.9.2测试对象评估 (9)1.导言1.1编写目的该文档的目的是描述超级玛丽JA VA小游戏的系统测试的总结报告,其主要内容包括:系统环境的介绍、功能的实现的测试、系统结果评估。

本文档预期读者包括:开发人员,项目管理人员,测试人员。

1.2项目范围该文档定义了对超级玛丽游戏的主要功能,主人翁可以前进、后退、跳跃、吃到蘑菇变大、可以踩到乌龟、可以顶破砖块、等功能的实现情况以及项目的运行的测试。

1.3参考资料《LoadRunner使用手册》北京长江软件有限公司出版社编制《超级超级玛丽JA VA小游戏概要设计文档》《软件测试技术概论》古乐史九林遍著/清华大学出版社《软件测试:第二版》Paul.C.Jorgensen 著/机械工业出版社1.4缩写说明无1.5术语定义功能性测试:按照系统需求定义中的功能定义部分对于系统实行的系统级别的测试;非功能性测试:按照系统需求定义中的非功能定义部分对系统实行系统级别的测试;测试用例:测试人员设计出来的用来测试软件某个功能的一种情形。

1.6版本更新信息修改编号修改日期修改后版本修改位置修改内容概述000 2012.6.10 1.0 全部初始发布版本2.测试设计2.1测试要点被测特性:●对软件进行功能性测试●对软件进行非功能性测试不被测特性●源代码,逻辑等;●模块的接口,模块的错误处理,模块的局部数据结构,模块在执行时执行的独立路径,模块在处理边界值时的情形;●单元(模块)之间的可用性等2.2测试时间、地点、人员本次测试的时间,地点,人员总结如下。

java超级玛丽概要设计说明书

java超级玛丽概要设计说明书

四、概要设计说明书1.引言 (2)1.1编写目的 (2)1.2项目背景 (2)1.3定义 (2)1.4参考资料 (2)2.任务概述 (2)2.1目标 (2)2.2运行环境 (2)2.3需求概述 (2)2.4条件与限制 (3)3.总体设计 (3)3.1处理流程 (3)3.2总体结构和模块外部设计 (3)3.3功能分配 (3)4.接口设计 (4)4.1外部接口 (4)4.2内部接口 (5)5.数据结构设计 (5)5.1逻辑结构设计 (6)5.2物理结构设计 (6)5.3数据结构与程序的关系 (6)6.运行设计 (6)6.1运行模块的组合 (6)6.2运行控制 (6)6.3运行时间 (6)7.出错处理设计 (6)7.1出错输出信息 (6)7.2出错处理对策 (6)8.安全保密设计 (7)9.维护设计 (7)1.引言1.1编写目的随着科学技术的发展,人们的生活水平的提高,然而也越来越繁忙。

在充满竞争的社会条件,压力往往带给人们很多烦恼。

为了给大家提供一个合理的解压平台,在本次课程设计中为大家开发了一款适合休闲解压的小游戏,超级玛丽。

1.2项目背景1.3定义1.4参考资料佘志龙《Google Android SDK开发范例大全》(第一版)人民邮电出版社2010.6.12.任务概述2.1目标完成基本的超级玛丽动作2.2运行环境运行在Android2.2的版本Android手机操作系统上。

2.3需求概述为了满足期待android版超级玛丽的玩家而制作此游戏。

此游戏要有操作方便,界面美观,内容丰富的特色,并且在后续要让游戏更加完善。

2.4条件与限制无限制3.总体设计3.1处理流程3.2总体结构和模块外部设计前进 后退 跳跃 吃花打怪物 吃蘑菇变大 顶金币加分系统控制时钟处理 物品结构 字体处理 跟踪打印 游戏逻辑 精灵结构 地理信息表 玩家控制3.3功能分配控制 功能游戏逻辑 玩家控制 系统控制 马里奥变大 √√吃花打怪物√√顶金币加分√√马里奥前进√√马里奥后退√√马里奥跳跃√√4.接口设计4.1外部接口4.1.1用户界面用户界面部分要在画质方面要强于经典版,风格继续保持原版本不变,只是人物和其他精灵的设计要符合更多现代人的喜好。

超级玛丽--Java课程设计

超级玛丽--Java课程设计

《面向对象程序设计》课程设计报告题目:超级玛丽软件的设计与实现院(系):信息科学与工程学院专业班级: 计算机科学与技术1201班****: **学号: ***********指导教师:**20 14 年 12 月 29 日至20 15 年 1 月 9 日华中科技大学武昌分校制面向对象程序设计课程设计任务书目录1需求与总体设计 (5)1.1需求分析 (5)1。

2程序功能图 (5)1。

3程序类图 (6)2详细设计 (7)2.1 MyFrame实现 (7)2.1。

1窗体对象的序列图 (7)2。

1.2 Myframe详细类图 (8)2。

2 Mario实现 (8)2。

2。

1 Mario对象的序列图 (8)2.2。

2 Mario类图 (9)2。

3 Enemy类的实现 (10)2。

4 Obstruction类的实现 (11)2.5 BackGround类实现 (11)3编码实现 (12)3。

1 MyFrame类的详细代码......................................................................................... 错误!未定义书签。

3。

2 BackGround类的详细代码................................................................................... 错误!未定义书签。

3.3 Mario类的详细代码............................................................................................... 错误!未定义书签。

3。

4 Enemy类的详细代码............................................................................................. 错误!未定义书签。

java超级玛丽基于Android的超级玛丽游戏最终作业

java超级玛丽基于Android的超级玛丽游戏最终作业

目录一、可行性分析 (5)1.引言 (5)1.1编写目的 (5)1.2项目背景 (5)1.3定义................................................................................错误!未定义书签。

1.4参考资料 (6)2.可行性研究的前提 ............................................................. 错误!未定义书签。

2.1要求................................................................................错误!未定义书签。

2.2目标 (6)2.3条件、假定和限制 (7)2.4可行性研究方法 (7)2.5决定可行性的主要因素 (7)3.对现有系统的分析 (7)3.1工作负荷 (7)3.2费用支出 (7)3.3人员 (7)3.5局限性 (7)4.所建议技术可行性分析 (8)4.1对系统的简要描述 (8)4.2与现有系统比较的优越性 (8)4.3采用建议系统可能带来的影响 (8)4.5技术可行性评价 (9)5.社会因素可行性分析 (9)5.1法律因素 (9)5.2用户使用可行性 (9)6.其他可供选择的方案 (10)二.需求规格说明书 ................................................................. 错误!未定义书签。

1.引言........................................................................................ 错误!未定义书签。

1.1编写目的........................................................................错误!未定义书签。

超级玛丽课程设计报告书

超级玛丽课程设计报告书

数据结构课程设计报告书课题名称:超级玛丽小游戏开发班级:XXXXXXXX学号:XXXXXXXX姓名:XXXXXXXX指导教师:XXXXXXXX《数据结构》课程设计报告书一、课程设计的目的:1、通过本次课程设计,加深对数据结构这么课程的中基础理论的理解以及能够对一些常用数据结构的熟练应用,理论与实践相结合,达到学以致用的目的。

2、通过小组形式一起开发,从中培养团结、合作、沟通、理解的精神。

二、选择的课题:超级玛丽小游戏开发三、小组成员:XXXXX、XXXX、XXX、XXXXXXXXX、XXXXXXXXXXXXXX四、应用到的知识:链表的操作、win32 sdk基础、DirectDraw基础、基础物理力学、初等数学中的向量学设计流程图:总体设计五、详细设计流程:1、定义一些用于判断游戏各种状态、和图片物品位置索引的枚举变量和结构体和一些宏常量:其中枚举变量的有:运动方向DIRECTION、动作状态ACTION、怪的类型、碰撞类型、物质类型结构体的有:用于图片索引定位的结构体SPRITE_BM、各个物块的边界信息结构体BOX、用于分析碰撞结果的结构体COLLISION一些宏、常量:游戏起始位置:PLAYER_STARTX 、PLAYER_STARTY重力加速度:GRAVITY屏幕长和宽:SCREEN_W 、SCREEN_H瓷砖长和宽:TILE_W、TILE_H2、设计基类:CSprite属性:类型m_type、是否已死m_active、横坐标m_x、纵坐标m_y、宽m_width、高m_height、是否在地上m_onground、图片张数m_nBitmaps、图片帧计数m_count、当前图片索引m_curBitmap、图片索引m_sbm、方向m_dir、行为m_action(方向和行为用于索引图片和游戏逻辑判断)、X轴速度m_xv、Y轴速度m_yv、X加速度m_xa、Y加速度m_ya、移动路程m_relSwitch方法:创建方法Create、贴图索引BitBlt、换帧方法AdvanceBitmap、是否在地面上的检测方法CheckBottom、改变方向ChangeDirection、设置行为动作SetAction、碰撞方法(通过行进路线采用向量法检测)Collide虚方法有:获取边界信息方法GetBounds、移动方法Move、显示方法Draw2、设计派生类:金币类CCoin、子弹类CBullet、爆炸类CExplode、蘑菇类CMushroom、玩家类CPlayer实现各自相应的虚方法、并为玩家类添加以下方法:变大GrowUp、变小Shrink、防御Shield、撞击BeenHit、发弹的方法Fire3、设计链表类:CSpriteList存储节点类型为基类CSprite、方法有:构造方法、添加方法Add、删除方法Delete、清空方法Destroy4、定义全局变量:CBitmap类型的有:g_bmTile、g_bmPlayer、g_bmGhost、g_bmTurtle、g_bmCoin、g_bmMushroom、g_bmDebris、g_bmBullet、g_bmExplode、g_bmFlower CPlane类型的有:g_planeCPlayer类型的有:g_playerCSpriteList类的有:g_sprites输入信息类:g_input其它逻辑判断的全局变量:是否暂停g_bPaused是否显示状态信息g_bShowStats等级g_level、背景是否为黑夜g_darken5、定义全局方法:添加金币方法AddCoin添加怪的方法AddGhost添加乌龟的方法AddTurtle六、 技术要点:1、 链表操作: 建立(添加):a 、 头指针m_head = NULLb 、 循环以下步骤: (1)、新建节点: (2)、添加到链表中:删除:(1) 双指针遍历找到要删除的节点(2) 前指针pre 所指的节点指针域跨过要删除的节点指向下个节点 (若是首元节点删除则直接使用头指针指向下个节点即可)newNodem_head newNode目标节点 目标节点2、碰撞检测:本次采用的碰撞检测采用行进路线碰撞检测,通过行进路线来检测是否发生碰撞的方法主要用来检测两个移动的物体,或者是移动物体与平面是否发生碰撞,如下图所示:在上图中,不论是两颗球的行进方向,还是平面都加上了一个箭头,这样做是将其表示为向量。

Java课程设计报告-超级马里奥游戏的设计与开发

Java课程设计报告-超级马里奥游戏的设计与开发

超级马里奥游戏的设计与开发目录1.课程设计要求.................................................. - 2 -1.1课设题目................................................. - 2 -1.2课设目的................................................. - 2 -1.3开发环境................................................. - 2 -1.4课设内容................................................. - 2 -1.4.1游戏介绍........................................... - 2 -1.4.2开发流程........................................... - 4 -2.设计过程...................................................... - 5 -2.1总体设计................................................. - 5 -2.1.1所用类的设计....................................... - 5 -2.1.2功能设计........................................... - 5 -2.2详细设计................................................. - 5 -2.2.1窗体的设计......................................... - 6 -2.2.2游戏场景的开发..................................... - 6 -2.2.3障碍物的开发....................................... - 6 -2.2.4将障碍物添加到场景中去............................. - 7 -2.2.5马里奥的开发....................................... - 7 -2.2.6将马里奥对象加入到窗体中........................... - 8 -2.2.7将马里奥与障碍物进行设置........................... - 8 -2.2.8敌人的开发......................................... - 9 -2.2.9敌人放到场景中..................................... - 9 -2.2.10其他游戏相关..................................... - 10 -3.具体实现..................................................... - 10 -3.1窗体类.................................................. - 10 -3.2马里奥类................................................ - 11 -3.3场景类.................................................. - 14 -3.4障碍物类................................................ - 15 -3.5敌人类.................................................. - 15 -4.调试过程..................................................... - 17 -4.1系统测试................................................ - 17 -4.2出现的问题和解决的方法.................................. - 19 -5.小结......................................................... - 20 -6.参考资料..................................................... - 20 -1.课程设计要求1.1课设题目超级马里奥游戏的设计与开发1.2课设目的《Java程序设计》课程是网络工程专业的一门专业必修课程,特针课程进行为期两周的实践教学,旨在提升本专业学生对此课程中的理论知识的综合应用能力、提高学生的逻辑思维能力、软件开发能力。

超级玛丽游戏设计(java)

超级玛丽游戏设计(java)

Java程序设计实验报告专业:嵌入式工程技术年级:2012姓名:黄泽康学号: 20125003指导教师:贺伟阿坝师专物理与电子科学系Java编程超级玛丽的游戏设计题目简介:本游戏是利用java语言在JCreator Pro和jdk的环境下,经过两个星期的编写与调试完成的一个超级玛丽游戏。

本游戏代码长度约3000行,编写过程中历经两个版本(V1.0 版大约2000行代码、V2.0 版大约3000行代码)。

V1.0版本用时一个星期,V2.0版本用时一个星期,此游戏操作简单、界面美观、功能基本较齐全。

整个游戏分功能类模块,约实现了超级玛丽游戏经典版的所有功能的 80%。

一、实验目的:1、熟悉类和了解如何创建类,对创建的类进行测试。

让我们更加了解学习面向对象设计的目的和作用;2、了解java面向对象编程设计与C语言、C++编程的区别;3、学会使用各种程序命令、了解各种包的作用和功能,从而设计图形界面等;4、掌握java面向对象中的各种使用语句;5、学会设计和编写简单的程序或游戏。

二、实验原理、要求及主要设计思想:原理:利用建立的各种类和包的调用来实现各自的作用,并且实现游戏编写的效果。

设计要求:实现一个简单的超级玛丽游戏程序的基本要求:①在二维平面里画出地图(道具、敌人等)、玛丽,根据超级玛丽的动作和高度在确定地图的高度,并且还要对人的动作进行设计,;②玩家能通过控制按键A左走、D右走、L大跳、J小跳、K发子弹等来控制玛丽的动作;③在游戏中添加声音效果,如:游戏进行的声音、玛丽吃金币的声音、玛丽撞墙的声音、玛丽发子弹的声音、玛丽死亡的提示音等等;④玛丽游戏界面上有文件(退出游戏、打开地图)、游戏(暂停、开始、新游戏)、工具(自定义地图)、帮助(关于、使用说明)的菜单,并且在每个子菜单上添加特定的标志;设计思路:1、首先设计游戏主界面、游戏界面上的控制菜单,控制菜单包括:文件、游戏、工具、游戏帮助。

文件、游戏等菜单又包含了以下子菜单:文件:单击打开地图,就可以选择已创建好的地图关卡;单击退出游戏,就直接退出整个游戏主界面。

超级玛丽课程设计报告

超级玛丽课程设计报告

超级玛丽课程设计报告一、课程目标知识目标:1. 学生能够理解并掌握游戏编程中的基础概念,如角色移动、碰撞检测等。

2. 学生能够运用所学的编程知识,设计并实现一个具有基本功能的“超级玛丽”游戏。

技能目标:1. 学生能够运用编程软件(如Scratch或Python等)进行游戏设计和开发。

2. 学生能够通过分解问题、设计算法,培养逻辑思维和问题解决能力。

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

2. 学生在团队协作中学会沟通、分享和合作,培养集体荣誉感和责任感。

3. 学生能够认识到编程在现实生活中的应用价值,激发创新精神和实践能力。

课程性质:本课程为信息技术课程,结合游戏设计,让学生在动手实践中学习编程知识。

学生特点:五年级学生,具备一定的信息技术素养,对游戏有浓厚兴趣,喜欢动手操作。

教学要求:结合学生特点,以实践为主,注重培养学生的动手能力和创新能力。

通过本课程的学习,使学生能够将所学的编程知识应用到实际的游戏设计中,提高学生的综合素质。

同时,关注学生的情感态度价值观的培养,使他们在学习过程中形成积极向上的人生态度。

课程目标分解为具体学习成果,以便后续教学设计和评估。

二、教学内容1. 游戏编程基础概念:介绍编程中的角色、场景、事件等基本元素,使学生理解游戏编程的基本框架。

- 教材章节:第一章《游戏编程概述》2. 角色移动与控制:学习如何使用编程软件实现角色的移动、跳跃等基本操作。

- 教材章节:第二章《角色移动与控制》3. 碰撞检测:让学生掌握碰撞检测的原理和实现方法,为游戏中的互动环节打下基础。

- 教材章节:第三章《碰撞检测与游戏互动》4. 游戏界面设计:教授学生如何设计美观、实用的游戏界面,提高游戏的整体效果。

- 教材章节:第四章《游戏界面设计》5. 游戏音效与动画:介绍如何为游戏添加音效和动画,使游戏更具趣味性。

- 教材章节:第五章《游戏音效与动画》6. 团队协作与项目实践:分组进行项目实践,培养学生团队协作能力和实际操作能力。

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

《面向对象程序设计》课程设计报告题目:超级玛丽软件的设计与实现院(系):信息科学与工程学院专业班级:计算机科学与技术1201班学生姓名:程伟学号:20121183011指导教师:吴奕20 14 年 12 月 29 日至20 15 年 1 月 9 日华中科技大学武昌分校制面向对象程序设计课程设计任务书目录1需求与总体设计 (6)1.1需求分析 (6)1.2程序功能图 (6)1.3程序类图 (7)2详细设计 (8)2.1 MyFrame实现 (8)2.1.1窗体对象的序列图 (8)2.1.2 Myframe详细类图 (9)2.2 Mario实现 (9)2.2.1 Mario对象的序列图 (9)2.2.2 Mario类图 (10)2.3 Enemy类的实现 (11)2.4 Obstruction类的实现 (12)2.5 BackGround类实现 (12)3编码实现 (13)3.1 MyFrame类的详细代码........................................................................................... 错误!未定义书签。

3.2 BackGround类的详细代码..................................................................................... 错误!未定义书签。

3.3 Mario类的详细代码............................................................................................... 错误!未定义书签。

3.4 Enemy类的详细代码............................................................................................... 错误!未定义书签。

3.5 Obstruction类的详细代码................................................................................... 错误!未定义书签。

4系统测试. (63)4.1 游戏开始界面的测试 (63)4.2 游戏运行的测试 (63)4.3 排除错误的处理 (66)总结 (67)1需求与总体设计1.1需求分析提供一个友好的用户交互界面,简单明了容易操作。

并且游戏有一定的难度和娱乐性。

开发一个Mario类。

一个场景类,以及敌人类,障碍物类。

让超级玛丽能够在场景中完成各种动作。

并且有场景的切换等等功能。

游戏中设计了一些很有意思的陷阱,玩家一步小心掉入陷阱,超级玛丽就会死亡。

这样会给人意想不到的惊奇,达到娱乐大众,增加游戏难度的效果。

游戏的设计匠心独具,并且都经过了各种测试,除了为玩家增加一些意想不到的游戏陷阱以外,还必须保证玩家能够通关。

1.2程序功能图如图1所示:图11.3程序类图系统的整体类图的框架如图2所示。

首先是窗体类。

他需要调用到Mario和BackGround类中的方法。

以便动态的显示Mario类和BackGround。

而BackGround里面又包含了Enemy和Obstruction。

Enemy,Obstruction和Mario类又调用静态类StaticValue的方法,用以显示真实的图片。

而StaticValue则是一个静态类,将存储在硬盘的图片资源加载进入内存以便其他模块调用。

图22详细设计2.1MyFrame实现2.1.1窗体对象的序列图窗体对象继承了JFrame类并且实现了Runnable接口。

作为窗体对象,它首先显示窗体,绘制背景。

然后启动线程。

在run方法里面动态得绘制窗体中需要显示的Mario 的图片,障碍物的图片,敌人的图片。

该窗体的run方法是一个死循环,每次执行一个循环调用sleep方法睡眠50毫秒。

序列图如图3所示。

图32.1.2 Myframe详细类图private Mario mario;//Mario对象private boolean isStart = false;//标识游戏是否已经开始this.paintAllEnemys(g2);//绘制所有的敌人this.paintAllObstruction(g2);//绘制所有障碍物2.2 Mario实现2.2.1 Mario对象的序列图因为需要有一个专门的线程来实时监测Mario的移动状况,和障碍物和敌人的碰撞情况。

所以让Mario类继承了Runnable接口。

Mario先启动线程。

该线程的run方法也是一个死循环。

首先根据Mario的状态changeMarioImage方法修改Mario的显示图片。

再根据Mario的determinexy方法决定Mario的移动。

然后通过deterMarioWithObstruction方法检测Mario和障碍物之间的碰撞,在根据marioTouchEnemys方法检测Mario和敌人之间的碰撞。

然后调用sleep()方法让线程休息5毫秒。

如此结束一个循环。

序列图如图4所示。

图4 2.2.2 Mario类图类图中:private int x;//Mario的x坐标private int y;//Mario的y坐标private int life;//Mario的生命BackGround bg = null;//Mario所在的背景private int uptime;//Mario的上升时间String status;//Mario的移动状态int score;//Mario的分数Thread t;//Mario的线程int xmove;//Mario的x移动距离int ymove;//Mario的y移动距离private boolean isClear = false;//标识用户是否通关。

isClear为true时代表用户通关了2.3 Enemy类的实现private int x;//敌人的x坐标private int y;//敌人的y坐标private int startX;//敌人的初始x坐标private int startY;//敌人的初始y坐标private boolean startIsLeftOrUp;//敌人初始的移动方向private int startImageType;//初始的显示图片private int type;//敌人的类型1代表蘑菇,2代表食人花,3代表乌龟private BufferedImage bufferedImage;private BackGround bg;//障碍物所在的背景private int imageType;//移动的极限范围详细类图如下:2.4 Obstruction类的实现private int x;//障碍物的x坐标private int y;//障碍物的y坐标private BufferedImage showImage = null;//障碍物的显示图片private int type;//障碍物的类型private int startType;//障碍物的初始类型private BackGround bg; //标识该障碍物在哪一个场景中详细类图如下:2.5 BackGround类实现private int sort;//背景的序列号private boolean flag;//标识是否是最后一张图片,flag为true时代表到了最后一张图片private boolean isOver = false;//标识游戏是否已经结束private boolean isDown = false;//标志是否降旗结束详细类图如下:3编码实现源代码import java.awt.image.BufferedImage;import java.util.ArrayList;import java.util.List;import java.awt.Graphics;import java.awt.Toolkit;import java.awt.event.KeyEvent;import java.awt.event.KeyListener;import java.util.Iterator;import javax.swing.JFrame;import javax.swing.JOptionPane;import java.io.File;import javax.imageio.ImageIO;public class MyFrame extends JFrame implements KeyListener,Runnable {public static void main(String[] args){new MyFrame();}private List<BackGround> allBg = new ArrayList<BackGround>();//当前背景private BackGround nowBg = null;private Mario mario;//Mario对象private boolean isStart = false;//标识游戏是否已经开始public void setNowBg(BackGround nowBg) {this.nowBg = nowBg;}private Thread t;/***/public MyFrame(){this.setSize(900,600);this.setTitle("马里奥游戏");this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);int width = Toolkit.getDefaultToolkit().getScreenSize().width;int height = Toolkit.getDefaultToolkit().getScreenSize().height;this.setLocation((width - 900) / 2,(height - 600) / 2);this.addKeyListener(this);StaticValue.init();this.setVisible(true);//绘制出所有的背景for(int i = 1; i <= 4; i++){this.allBg.add(new BackGround(i, i == 4 ? true : false));}this.nowBg = this.allBg.get(0);this.mario = new Mario(0, 480);this.mario.setBg(nowBg);this.setResizable(false);t = new Thread(this);t.start();}@Overridepublic void paint(Graphics g){BufferedImage image = new BufferedImage(900, 600, BufferedImage.TYPE_4BYTE_ABGR);if(isStart){Graphics g2 = image.getGraphics();g2.drawImage(this.nowBg.getBgImage(), 0, 0, this);//绘制背景g2.drawString("生命:" + this.mario.getLife(), 800, 60);//显示生命数g2.drawString("分数:" + this.mario.getScore(), 60, 60);//显示生命数this.paintAllEnemys(g2);//绘制所有的敌人this.paintAllObstruction(g2);//绘制所有障碍物}else{Graphics g2 = image.getGraphics();g2.drawImage(StaticValue.startImage, 0, 0, this);//绘制游戏开始的图片}g.drawImage(image, 0, 0, this);}/***/@Overridepublic void keyPressed(KeyEvent e){//int k = e.getKeyCode();//获得键盘的ASCII码//System.out.println(k);if(this.isStart){if(e.getKeyCode() == 39){this.mario.rightMove();}if(e.getKeyCode() == 37){this.mario.leftMove();}if(e.getKeyCode() == 32){this.mario.jump();}//按下空格键,Mario的生命加10if(70 == e.getKeyCode()){this.mario.setLife(this.mario.getLife() + 10);}}else{if(e.getKeyCode() == 32){this.isStart = true;this.nowBg.enemysStartMove();}}}/***/@Overridepublic void keyReleased(KeyEvent e) {if(e.getKeyCode() == 39){this.mario.rightStop();}if(e.getKeyCode() == 37){this.mario.leftStop();}}/***/@Overridepublic void keyTyped(KeyEvent e){// TODO Auto-generated method stub }@Overridepublic void run(){while(true){this.repaint();if(840 == this.mario.getX()){this.intoNewBackGround();//进入下一张图片}if(this.mario.isClear()){JOptionPane.showMessageDialog(this, "恭喜您通关了,敬请期待新的关卡");System.exit(0);}if(this.mario.isDead()){this.gameOver();//游戏结束}this.sleep();}}//进入下一张图片private void intoNewBackGround(){this.nowBg = this.allBg.get(this.nowBg.getSort());this.mario.setBg(this.nowBg);this.mario.setX(0);this.mario.setY(480);this.mario.setUptime(0);this.nowBg.enemysStartMove();}//绘制所有的敌人private void paintAllEnemys(Graphics g2){Iterator<Enemy> iterEnemy = this.nowBg.getAllEnemy().iterator();while(iterEnemy.hasNext()){Enemy e = iterEnemy.next();g2.drawImage(e.getBufferedImage(), e.getX(), e.getY(), this);}}//绘制所有障碍物private void paintAllObstruction(Graphics g2){Iterator<Obstruction> iter = this.nowBg.getAllObstruction().iterator();while(iter.hasNext()){Obstruction ob = iter.next();g2.drawImage(ob.getShowImage(), ob.getX(), ob.getY(), this);}g2.drawImage(mario.getShowImage(), mario.getX(), mario.getY(), this);}private void sleep(){try{Thread.sleep(20);}catch (InterruptedException e){e.printStackTrace();}}//游戏结束private void gameOver(){JOptionPane.showMessageDialog(this, "马里奥死亡");this.mario.setDead(false);System.exit(0);}}class BackGround{private BufferedImage bgImage = null;private int sort;//背景的序列号private boolean flag;//标识是否是最后一张图片,flag为true时代表到了最后一张图片private List<Enemy> allEnemy = new ArrayList<Enemy>();//所有敌人的集合//所有障碍物的集合private List<Obstruction> allObstruction = new ArrayList<Obstruction>();//所有被移除的敌人的集合private List<Enemy> removeEnemy = new ArrayList<Enemy>();//所有被移除的障碍物的集合private List<Obstruction> removeObstruction = new ArrayList<Obstruction>();private boolean isOver = false;//标识游戏是否已经结束private boolean isDown = false;//标志是否降旗结束public boolean isDown() {return isDown;}public void setDown(boolean isDown) {this.isDown = isDown;}public boolean isOver() {return isOver;}public void setOver(boolean isOver) {this.isOver = isOver;}public boolean isFlag() {return flag;}public void setFlag(boolean flag) {this.flag = flag;}public int getSort() {return sort;}public void setSort(int sort) {this.sort = sort;}public BufferedImage getBgImage(){return bgImage;}public List<Obstruction> getAllObstruction(){return allObstruction;}public List<Obstruction> getRemoveObstruction() { return removeObstruction;}public List<Enemy> getAllEnemy() {return allEnemy;}public List<Enemy> getRemoveEnemy() {return removeEnemy;}/**** @param sort 背景的序列号* @param flag 标识是否是最后一张背景*/public BackGround(int sort, boolean flag) {this.sort = sort;this.flag = flag;if(flag){bgImage = StaticValue.endImage;}else{bgImage = StaticValue.bgImage;}switch(sort){case 1:this.creat1Map();break;case 2:this.creat2Map();break;case 3:this.creat3Map();break;case 4:this.creat4Map();break;}}public void reset(){this.allEnemy.addAll(removeEnemy);for(int i = 0; i < this.allEnemy.size(); ++i){this.allEnemy.get(i).reSet();}this.removeEnemy.clear();this.allObstruction.addAll(removeObstruction);for(int i = 0; i < this.allObstruction.size(); ++i) {this.allObstruction.get(i).reset();}this.removeObstruction.clear();}public void enemysStartMove(){for(int i =0; i < this.allEnemy.size(); ++i){this.allEnemy.get(i).starMove();}}//创建第一张图private void creat1Map(){for(int i = 0; i < 15; i++){//创建出所有地面this.allObstruction.add(new Obstruction(i * 60,540,9, this));}//创建出所有砖块,10代表问好,0代表木块this.allObstruction.add(new Obstruction(120,300,10, this));this.allObstruction.add(new Obstruction(60,300,10, this));this.allObstruction.add(new Obstruction(0,300,10, this));this.allObstruction.add(new Obstruction(300,360,0, this));this.allObstruction.add(new Obstruction(360,360,10, this));this.allObstruction.add(new Obstruction(420,360,0, this));this.allObstruction.add(new Obstruction(480,360,10, this));this.allObstruction.add(new Obstruction(540,360,0, this));this.allObstruction.add(new Obstruction(420,180,10, this));//创建水管this.allObstruction.add(new Obstruction(660,540,6, this));this.allObstruction.add(new Obstruction(720,540,7, this));this.allObstruction.add(new Obstruction(660,480,4, this));this.allObstruction.add(new Obstruction(720,480,5, this));//创建出所有的敌人,1代表三角菇,2代表食人花this.allEnemy.add(new Enemy(600, 480, true, 1, this));this.allEnemy.add(new Enemy(540, 300, true, 1, this));this.allEnemy.add(new Enemy(480, 300, true, 1, this));this.allEnemy.add(new Enemy(420, 300, true, 1, this));this.allEnemy.add(new Enemy(360, 300, true, 1, this));this.allEnemy.add(new Enemy(690, 540, true, 2, 540, 420, this)); }//创建第二张图private void creat2Map(){for(int i = 0; i < 15; i++){if(i != 10){this.allObstruction.add(new Obstruction(i * 60,540,9, this));}}//创建水管this.allObstruction.add(new Obstruction(60,540,6, this));this.allObstruction.add(new Obstruction(120,540,7, this));this.allObstruction.add(new Obstruction(60,480,6, this));this.allObstruction.add(new Obstruction(120,480,7, this));this.allObstruction.add(new Obstruction(60,420,4, this));this.allObstruction.add(new Obstruction(120,420,5, this));//创建水管this.allObstruction.add(new Obstruction(240,540,6, this));this.allObstruction.add(new Obstruction(300,540,7, this));this.allObstruction.add(new Obstruction(240,480,6, this));this.allObstruction.add(new Obstruction(300,480,7, this));this.allObstruction.add(new Obstruction(240,420,6, this));this.allObstruction.add(new Obstruction(300,420,7, this));this.allObstruction.add(new Obstruction(240,360,4, this));this.allObstruction.add(new Obstruction(300,360,5, this));//创建水管this.allObstruction.add(new Obstruction(720,540,6, this));this.allObstruction.add(new Obstruction(780,540,7, this));this.allObstruction.add(new Obstruction(720,480,6, this));this.allObstruction.add(new Obstruction(780,480,7, this));this.allObstruction.add(new Obstruction(720,420,6, this));this.allObstruction.add(new Obstruction(780,420,7, this));this.allObstruction.add(new Obstruction(720,360,4, this));this.allObstruction.add(new Obstruction(780,360,5, this));//创建砖块for(int i = 0; i < 6; ++i){this.allObstruction.add(new Obstruction(360 + i * 60,360,3, this));}//创建敌人this.allEnemy.add(new Enemy(90, 480, true, 2, 480, 360, this));//食人花this.allEnemy.add(new Enemy(270, 420, true, 2, 420, 300, this));//食人花this.allEnemy.add(new Enemy(750, 420, true, 2, 420, 300, this));//食人花}//创建第三张图private void creat3Map(){for(int i = 0; i < 15; i++){//创建出所有地面this.allObstruction.add(new Obstruction(i * 60,540,9, this));}//创建砖块this.allObstruction.add(new Obstruction(60, 360, 0, this));this.allObstruction.add(new Obstruction(120, 360, 0, this));this.allObstruction.add(new Obstruction(180, 360, 0, this));this.allObstruction.add(new Obstruction(360, 360, 10, this));this.allObstruction.add(new Obstruction(360, 180, 3, this));this.allObstruction.add(new Obstruction(420, 180, 3, this));this.allObstruction.add(new Obstruction(540, 360, 10, this));this.allObstruction.add(new Obstruction(540, 180, 10, this));this.allObstruction.add(new Obstruction(720, 360, 10, this));//创建敌人this.allEnemy.add(new Enemy(840, 480, true, 3, 4, this));this.allEnemy.add(new Enemy(540, 480, true, 3, this));this.allEnemy.add(new Enemy(840, 480, true, 1, this));this.allEnemy.add(new Enemy(780, 480, true, 1, this));this.allEnemy.add(new Enemy(720, 480, true, 1, this));this.allEnemy.add(new Enemy(660, 360, true, 1, this));this.allEnemy.add(new Enemy(600, 360, true, 1, this));}private void creat4Map(){for(int i = 0; i < 15; i++){//创建出所有地面this.allObstruction.add(new Obstruction(i * 60,540,9, this));}//绘制旗子this.allObstruction.add(new Obstruction(550, 190, 11, this));//绘制旗子下面的砖块this.allObstruction.add(new Obstruction(520,480,2, this));}}class Enemy implements Runnable{private int x;//敌人的x坐标private int y;//敌人的y坐标private int startX;//敌人的初始x坐标private int startY;//敌人的初始y坐标private boolean startIsLeftOrUp;//敌人初始的移动方向private int startImageType;//初始的显示图片private int type;//敌人的类型1代表蘑菇,2代表食人花,3代表乌龟private BufferedImage bufferedImage;private BackGround bg;//障碍物所在的背景//敌人的显示图片,不同的type代表不同的敌人显示图片,通过显示图片的切换,达到动态的效果private int imageType;//移动的极限范围private int upMax;private int downMax;private boolean isLeftOrUP;Thread t = new Thread(this);//普通敌人的构造方法,加入显示图片参数public Enemy(int x, int y, boolean isLeft, int type, int imageType, BackGround bg){this.x = x;this.y = y;this.startX = x;this.startY = y;this.isLeftOrUP = isLeft;this.startIsLeftOrUp = isLeft;this.type = type;this.bg = bg;this.imageType = imageType;this.startImageType = imageType;switch(type){case 1://蘑菇//取蘑菇的图片this.bufferedImage = StaticValue.allTriangleImage.get(0);break;case 3://乌龟this.bufferedImage = StaticValue.allTurtleImage.get(0);break;}t.start(); //启动线程t.suspend();//抑制线程启动}//普通敌人的构造方法public Enemy(int x, int y, boolean isLeft, int type, BackGround bg) {this.x = x;this.y = y;this.startX = x;this.startY = y;this.isLeftOrUP = isLeft;this.startIsLeftOrUp = isLeft;this.type = type;this.bg = bg;switch(type){case 1://蘑菇//取蘑菇的图片this.bufferedImage = StaticValue.allTriangleImage.get(0);break;case 3://乌龟this.bufferedImage = StaticValue.allTurtleImage.get(0);break;}t.start(); //启动线程t.suspend();//抑制线程启动}//食人花敌人的构造方法public Enemy(int x, int y, boolean isUp, int type, int upMax, int downMax, BackGround bg){this.x = x;this.y = y;this.startX = x;this.startY = y;this.isLeftOrUP = isUp;this.bg = bg;this.type = type;this.upMax = upMax;this.downMax = downMax;if(2 == type){//取食人花图片this.bufferedImage = StaticValue.allFlowerImage.get(0);}t.start();//启动线程t.suspend();//抑制线程启动}//当Mario死亡的时候重置敌人的方法public void reSet(){this.x = this.startX;this.y = this.startY;this.isLeftOrUP = this.startIsLeftOrUp;this.imageType = this.startImageType;switch(this.type){case 1:this.bufferedImage = StaticValue.allTriangleImage.get(0);break;case 2:this.bufferedImage = StaticValue.allFlowerImage.get(0);this.isLeftOrUP = true;break;case 3:this.bufferedImage = StaticValue.allTurtleImage.get(this.startImageType);break;}}//敌人死亡的方法public void dead(){switch(this.type){case 1://蘑菇//将显示图片改为敌人死亡的图片this.bufferedImage = StaticValue.allTriangleImage.get(2);this.bg.getAllEnemy().remove(this);this.bg.getRemoveEnemy().add(this);break;case 3://乌龟//将显示图片改为敌人死亡的图片this.imageType = 4;this.bufferedImage = StaticValue.allTurtleImage.get(imageType);break;}}public void run(){while(true){this.sleep();switch(this.type){case 1://蘑菇this.triangleMove();//蘑菇移动break;case 2://食人花this.flowerMove();//食人花移动break;case 3://乌龟this.turtleMove();//乌龟移动break;}}}public BufferedImage getBufferedImage() { return bufferedImage;}public int getStartX() {return startX;}public int getStartY() {return startY;}public int getX() {return x;}public int getY() {return y;}public int getType() {return type;}public void starMove(){this.t.resume();}//蘑菇移动private void triangleMove(){if(this.isLeftOrUP){this.x -= 2;}else{this.x += 2;}//改变imageType来让敌人的图片切换,达到动态的效果if(0 == this.imageType){this.imageType = 1;}else{this.imageType = 0;}//定义用来标记敌人是否可以向左或者向右移动的标记boolean canleft = true;boolean canright = true;boolean onLand = false;for(int i = 0; i < bg.getAllObstruction().size(); i++){Obstruction ob = bg.getAllObstruction().get(i);//敌人不能向右移动if(this.x == ob.getX() - 50 && ((this.y < ob.getY() + 50) && (this.y > ob.getY() - 50))){canright = false;}//敌人不能向左移动if(this.x == ob.getX() + 50 && ((this.y < ob.getY() + 50) && (this.y > ob.getY() - 50))){canleft = false;}if((this.y == ob.getY() - 60) && ((this.x < ob.getX() + 50) && (this.x > (ob.getX() - 50)))){onLand = true;}}if(!onLand){this.down();}//如果敌人正在向左移动,但是又不能向左移动了,那么改变敌人的移动方向if((this.isLeftOrUP && !canleft) || 0 == this.x){this.isLeftOrUP = false;}//如果敌人正在向右移动,但是又不能向右移动了,那么改变敌人的移动方向if((!this.isLeftOrUP && !canright) || 840 == this.x){this.isLeftOrUP = true;}//通过imageType获取在内存中真正的图片this.bufferedImage = StaticValue.allTriangleImage.get(this.imageType);}//食人花移动private void flowerMove(){if(this.isLeftOrUP){this.y -= 2;}else{this.y += 2;}//当食人花到达极限位置的时候,修改它移动的方向if(!this.isLeftOrUP && this.y == this.upMax){this.isLeftOrUP = true;}else if(this.isLeftOrUP && this.y == this.downMax){this.isLeftOrUP = false;}//改变imageType来让敌人的图片切换,达到动态的效果if(0 == this.imageType){this.imageType = 1;}else{this.imageType = 0;}//通过imageType获取在内存中真正的图片this.bufferedImage = StaticValue.allFlowerImage.get(this.imageType);}//乌龟移动private void turtleMove(){if(this.isLeftOrUP){if(4 == this.imageType){this.x -= 10;}else{this.x -= 2;}}else{if(4 == this.imageType){this.x += 10;}else{this.x += 2;}}this.changeTurtleImage();//改变乌龟的显示图片//定义用来标记敌人是否可以向左或者向右移动的标记boolean canleft = true;boolean canright = true;boolean onLand = false;for(int i = 0; i < bg.getAllObstruction().size(); i++){Obstruction ob = bg.getAllObstruction().get(i);//敌人不能向右移动if(this.x == ob.getX() - 50 && ((this.y < ob.getY() + 50) && (this.y > ob.getY() - 50))){canright = false;}//敌人不能向左移动if(this.x == ob.getX() + 50 && ((this.y < ob.getY() + 50) && (this.y > ob.getY() - 50))){canleft = false;}if((this.y == ob.getY() - 60) && ((this.x < ob.getX() + 50) && (this.x > (ob.getX() - 50)))){onLand = true;}}if(!onLand){this.down();}//如果敌人正在向左移动,但是又不能向左移动了,那么改变敌人的移动方向if((this.isLeftOrUP && !canleft) || this.x <= 0){this.isLeftOrUP = false;}//如果敌人正在向右移动,但是又不能向右移动了,那么改变敌人的移动方向if((!this.isLeftOrUP && !canright) || this.x >= 840){this.isLeftOrUP = true;}//通过imageType获取在内存中真正的图片this.bufferedImage = StaticValue.allTurtleImage.get(this.imageType);}//敌人下落private void down(){this.y += 5;}private void sleep(){try{Thread.sleep(20);}catch(Exception e){e.printStackTrace();}}//改变乌龟的显示图片private void changeTurtleImage(){if(4 == this.imageType){return;}if(this.isLeftOrUP)//如果是向左移动{//循环切换向左移动的两张图片if(0 == this.imageType){this.imageType = 1;}else{this.imageType = 0;}}else//如果是向右边移动{if(2 == this.imageType){this.imageType = 3;}else{this.imageType = 2;}}}}class Mario implements Runnable{private int x;//Mario的x坐标private int y;//Mario的y坐标private int moving = 1;private BufferedImage showImage = null;private int life;//Mario的生命BackGround bg = null;//Mario所在的背景private int uptime;//Mario的上升时间String status;//Mario的移动状态int score;//Mario的分数Thread t;//Mario的线程int xmove;//Mario的x移动距离int ymove;//Mario的y移动距离private boolean isClear = false;//标识用户是否通关。

相关文档
最新文档