当前位置:文档之家› 基于java的贪吃蛇游戏开发

基于java的贪吃蛇游戏开发

贪吃蛇大战的设计与实现专业:姓名:班级:学号:指导教师:目录前言 (4)1.JAVA语言的概述及开发工具 (4)1.1Java语言特点 (4)1.1.1 平台无关性 (4)1.1.3面向对象 (5)1.2 J2ME介绍 (5)1.3 关于ECLIPSE (6)1.4 WTK介绍 (6)2.需求分析 (7)2.1游戏的介绍 (7)2.2游戏开发的可行性 (7)2.3设计目的 (7)2.4游戏需求 (7)2.4.1游戏界面需求 (8)2.4.2游戏形状需求 (8)2.4.3键盘事件处理 (8)2.4.4显示需求 (8)2.4.5接口控制 (8)2.4.6环境介绍 (8)3.详细设计 (9)3.1 绘制蛇身 (9)3.2创建初始“蛇”及“蛇”的移动 (9)3.3 吃掉食物,蛇身增长 (10)3.4随机产生食物 (10)3.5键盘事件处理 (11)3.6 判断游戏结束 (12)4游戏测试与发布 (13)4.1游戏运行的效果图 (13)4.2 测试结果 (13)5.自我评价和总结 (13)5.1遇到的问题及解决办法 (13)5.2 总结 (14)6.参考资料 (14)前言随着3G的到来,让人们的目光聚集到一个新兴的互联网终端——手机上。

手机的随身性让玩家有了随时随地完游戏的可能。

据我调查行业分析师也对这一行业持普遍的乐观态度。

yramid Researcher 的最新报告显示,手机游戏市场正在稳步发展。

用户数从2008年的1.83亿到现在将增长到3亿。

据报告分析,2014年,市场规模有望达到180亿美元。

手机游戏的发展有以下推动因素1.更好更快的无限网络以及易于操作的手机终端改善了用户的体验;2..触摸屏,3D动画处理能力以及在线互动能力让游戏开发游戏做的更好;3.苹果应用商店模式刺激作用。

J2ME是一种针对移动电话和PDA这样的小型设备的Java语言。

大部分的手机厂商都迫切希望Java手机推广应用。

上千万的手机已经到了消费者手中。

它已经极大的提高了移动电话支持游戏的能力。

它有着比SMS或W AP 更好控制的界面。

允许使用子图形动画。

并且可以通过无限网络连接到远程服务器。

支持Java的手机的普及,所以目前它成为最好的移动游戏开发环境。

J2ME不是手机上配置的唯一解释语言,但是它是许多厂商支持的行业标准。

一些专用的解释语言也在某些区域有上着上佳的表现。

如北美的Qualcomm的BREM 和一些韩国运营上支持的名为GVM的标准。

基于以上分析,Java手机游戏的开发具有重要的意义。

1.Java语言的概述及开发工具1.1Java语言特点1.1.1 平台无关性Java引进虚拟机原理,并运行于虚拟机,实现不同平台之间的Java 接口。

Java的数据类型与机器无关。

1.1.2安全性Java的编程类似C++,但舍弃了C++的指针对存储器地址的直接操作,程序运行时,内存由操作系统分配,这样可以避免病毒通过指针入侵系统。

它提供了安全管理器,防止程序的非法访问。

] 1.1.3面向对象Java吸收了C++面向对象的概念,将数据封装于类中,实现了程序的简洁性和便于维护性,使程序代码可以只需一次编译就可反复利用。

1.1.4分布式Java建立在TCP/IP网络平台上,提供了用HTTP和FTP协议传送和接收信息的库函数,使用其相关技术可以十分方便的构建分布式应用系统。

1.1.5健壮性Java致力于检查程序在编译和运行时的错误,并自动回收内存,减少了内存出错的可能性。

Java取消了C语言的结构、指针、#define 语句、多重继承、goto语句、操作符、重载等不易被掌握的特性,提供垃圾收集器自动回收不用的内存空间。

1.2 J2ME介绍虽然Java 已经被用到许多企业级软体上,可是其实骨子里面是非常适合用在嵌入式系统之中。

Java平台演进到Java2后,Java 平台分别针对不同领域的需求被分成四个版本,亦即J2EE、J2SE、J2ME以及JavaCard中J2ME定位在消费性电子产品的应用上。

这个版本针对资源有限的电子消费产品的需求精简核心类库,并提供了模块化的架构让不同类型产品能够随时增加支持的能力。

这个版本的应用层面相当广泛,会是未来Java平台发展的重点项目。

J2ME在1999年的JavaOne开发人员大会上初次亮相,它的目标是面向智能无线设备和小型计算机设备的开发人员。

J2ME的一个关键优点是,J2ME与所有支持Java的设备都是兼容的。

支持Java 的设备就是任何运行Java虚拟机器的计算机。

Motorola、Nokia等生产厂商都生产支持Java的设备。

JAVJ2ME平台是由配置(Configuration)和简表(Profile)构成的。

配置是提供给最大范围设备使用的最小类库集合,在配置中同时包含Java虚拟机。

简表是针对一系列设备提供的开发包集合。

在J2ME中还有一个重要的概念是可选包(Optional Package),它是针对特定设备提供的类库,比如某些设备是支持蓝牙的,针对此功能J2ME中制定了JSR82(Bluetooth API)提供了对蓝牙的支持。

目前,J2ME中有两个最主要的配置,分别是Connected Limited Devices Configuration(CLDC)和Connected Devices Configuration(CDC)。

1.3 关于ECLIPSEEclipse 是一个开放源代码的、基于Java 的可扩展开发平台。

就其本身而言,它只是一个框架和一组服务,用于通过插件组件构建开发环境。

幸运的是,Eclipse 附带了一个标准的插件集,包括Java 开发工具(Java Development Tools,JDT)。

虽然大多数用户很乐于将Eclipse 当作Java IDE 来使用,但Eclipse 的目标不仅限于此。

Eclipse 还包括插件开发环境(Plug-in Development Environment,PDE),这个组件主要针对希望扩展Eclipse 的软件开发人员,因为它允许他们构建与Eclipse 环境无缝集成的工具。

由于Eclipse 中的每样东西都是插件,对于给Eclipse 提供插件,以及给用户提供一致和统一的集成开发环境而言,所有工具开发人员都具有同等的发挥场所。

这种平等和一致性并不仅限于Java 开发工具。

尽管Eclipse 是使用Java 语言开发的,但它的用途并不限于Java 语言;例如,支持诸如C/C++、COBOL 和Eiffel 等编程语言的插件已经可用,或预计会推出。

Eclipse 框架还可用来作为与软件开发无关的其他应用程序类型的基础,比如内容管理系统。

Eclipse 是一个开放源代码的、基于Java 的可扩展开发平台。

就其本身而言,它只是一个框架和一组服务,用于通过插件组件构建开发环境。

1.4 WTK介绍WTK 的全称是Sun J2ME Wireless Toolkit —— Sun的无线开发工具包。

这一工具包的设计目的是为了帮助开发人员简化j2me的开发过程。

使用其中的工具可以开发与Java Technology for the Wireless Industry (JTWI, JSR 185) 规范兼容的设备上运行的j2me 应用程序。

WTK是用来开发MIDP的,为了让MIDlet可以顺利编译和执行,WTK必须具有CLDC和MIDP的类库,WTK可以帮助我们省去额外安装调试这些类库的时间2.需求分析2.1游戏的介绍游戏的名称叫“贪吃蛇”,节:一条蛇可以看成有许多正方形的“小格子”拼凑成,我把它称作节。

节是蛇身上最小的单位。

段:当许多节连成一条直线,我称它为段。

贪吃蛇只有一段,如果它拐弯就变成两段。

链表:用来保存每一段的状态,链表的元素单位是段。

且链表的最后一个元素表示蛇的头部段。

坐标系:MIDP中的坐标以左上角那点为(0,0),向右则x递增,向下则y递增。

2.2游戏开发的可行性游戏开发至今已经有30多年,在这个短暂的时期里,随着硬件的水平的提高。

游戏开发新技术层出不穷,经典游戏比比皆是,游戏这个名称一直存在于每个人的日常生活中。

因此,游戏对于现代人的成长历程,绝对是一个不可或缺的重要角色.而从技术方面来看,现在的java技术也融入了手机中。

这些都为开发的这款贪吃蛇游戏提供了条件。

2.3设计目的综合运用在校所学的知识和技能,设计开发贪吃蛇游戏,使自己熟悉应用系统的开发的过程,培养独立思考的能力,校验学习效果和动手能力,提高工程实践能力。

2.4游戏需求给出一条小蛇和随机出现一个食物,当小蛇吃到食物时就加分。

2.4.1游戏界面需求良好的用户界面,有分数显示和暂停。

2.4.2游戏形状需求良好的方块形状设计,绘制小蛇和食物,小蛇由几个方块组成,食物由一个方块组成。

2.4.3键盘事件处理小蛇可以通过键盘方向键(上,下,左,右)进行方向的移动。

2.4.4显示需求当小蛇吃掉几个食物后会变长,并且吃完食物时食物会消失,并立即产生一个1个新的事物。

2.4.5接口控制本软件通过键盘进行操作,在windows操作系统下,利用键盘的上下左右键进行操作,要使用键盘的接口事件。

2.4.6环境介绍操作系统:Microsoft Windows XP程序语言:Java开发包:Java(TM) 2 Standard Edition (5.0) Sun Micro. J2ME Wireless ToolKit 2.5.1IDE: Eclipse-v103.详细设计3.1 绘制蛇身protected void paint(Graphics g) {//清屏g.setColor(0, 255, 0);g.fillRect(0,0,width,height);g.setColor(0);//绘制蛇身for(int i = 0;i < snakeNum;i++){g.fillRect(snake[i][0],snake[i][1],SNAKEWIDTH,SNAKEWIDTH);}//绘制食物if(b){g.fillRect(foodX,foodY,SNAKEWIDTH,SNAKEWIDTH);}}3.2创建初始“蛇”及“蛇”的移动蛇的初始长度为6,边长为10个像素(背景为黄色),蛇头初始位于屏幕(100,30),方向向左,用向量表来记录每个蛇的位置以及方向。

部分参考代码如下:private void move(int direction){//蛇身移动for(int i = snakeNum - 1;i > 0;i--){snake[i][0] = snake[i - 1][0];snake[i][1] = snake[i - 1][1];}}3.3 吃掉食物,蛇身增长当小蛇吃掉食物后,会增长,部分代码:/*** 吃掉食物,自身增长*/private void eatFood(){//判别蛇头是否和食物重叠if(snake[0][0] == foodX && snake[0][1] == foodY){ snakeNum++;generateFood();}}3.4随机产生食物部分代码:产生食物说明:食物的坐标必须位于屏幕内,且不能和蛇身重合private void generateFood(){while(true){foodX = Math.abs(random.nextInt() % (width - SNAKEWIDTH + 1))/ SNAKEWIDTH * SNAKEWIDTH;foodY = Math.abs(random.nextInt() % (height - SNAKEWIDTH + 1))/ SNAKEWIDTH * SNAKEWIDTH;boolean b = true;for(int i = 0;i < snakeNum;i++){if(foodX == snake[i][0] && snake[i][1] == foodY){b = false;break;}}if(b){break;}}}3.5键盘事件处理可以通过键盘控制蛇的移动方向public void keyPressed(int keyCode){int action = this.getGameAction(keyCode);//改变方向switch(action){case UP:if(direction != DIRECTION_DOWN){direction = DIRECTION_UP;}break;case DOWN:if(direction != DIRECTION_UP){direction = DIRECTION_DOWN;}break;case LEFT:if(direction != DIRECTION_RIGHT){direction = DIRECTION_LEFT;}break;case RIGHT:if(direction != DIRECTION_LEFT){direction = DIRECTION_RIGHT;}break;case FIRE://暂停和继续isPaused = !isPaused;break;}}3.6 判断游戏结束只有一种游戏结束的方式,即蛇头碰到蛇身游戏结束。

相关主题