logo资料库

java课程设计(贪吃蛇).docx

第1页 / 共14页
第2页 / 共14页
第3页 / 共14页
第4页 / 共14页
第5页 / 共14页
第6页 / 共14页
第7页 / 共14页
第8页 / 共14页
资料共14页,剩余部分请下载后查看
一、项目介绍
二、概要设计
2.1 资源需求
2.2 游戏运行方式
2.3 游戏运行流程
三、详细设计
3.1 游戏模块划分
3.2 组件需求
3.4 视图切换
四、编码分析
4.1 数据类
4.2 辅助类
4.3 视图类
4.4 线程类
4.5 对象类
五、数据库
六、总结
计算机科学与技术学院 课程设计 题目: Java 程序设计 学生姓名: 司潜 学 号: 124221013 专 业: 网络工程 2014 年 06 月 19 日
--目录— 一、项目介绍 .................................................................................................................................... 3 二、概要设计 .................................................................................................................................... 3 2.1 资源需求 ............................................................................................................................ 3 2.2 游戏运行方式 .................................................................................................................... 3 2.3 游戏运行流程 .................................................................................................................... 3 三、详细设计 .................................................................................................................................... 4 3.1 游戏模块划分 .................................................................................................................... 4 3.2 组件需求 ............................................................................................................................ 4 3.4 视图切换 ............................................................................................................................ 4 四、编码分析 .................................................................................................................................... 4 4.1 数据类................................................................................................................................ 4 4.2 辅助类................................................................................................................................ 6 4.3 视图类................................................................................................................................ 7 4.4 线程类.............................................................................................................................. 11 4.5 对象类.............................................................................................................................. 11 五、数据库...................................................................................................................................... 12 六、总结 .......................................................................................................................................... 14
一、项目介绍 针对 java 课程设计,我做了一个小型安卓游戏《贪吃蛇》结课,游戏代码中包含到本 学习所有知识点的应用,以及安卓的系统框架。 游戏已经成功的运行,玩法很简单,打开游戏后进入菜单,点开始键进入游戏。蛇的初 始长度是 4 节,游戏运行时屏幕会自动产生食物(苹果),滑动屏幕控制蛇的方向,碰到墙 后会从另一侧出来,吃到身体游戏失败,吃满 50 个食物游戏成功。50 个食物个数是自己设 定的。 二、概要设计 2.1 资源需求 本游戏设计做结课使用,没有用到声音资源,只需要图片资源。 图片资源:菜单背景、菜单按钮*2(开始、退出)、贪吃蛇头部、贪吃蛇身体、食物(苹 果)、 失败界面、胜利界面、结束后返回按钮、游戏图标 2.2 游戏运行方式 安卓游戏的运行方式大概分为两种,一种是 Activity 的切换,一种是 View 的切换,小 游戏用 View 的切换更为方便。本游戏就是采用的 View 切换的方式进行。 本游戏一共有三个 View,分别是菜单的静态 ViewGroup、游戏的动态 SurfaceView 和结 束游戏界面的静态 View。由 Activity 消息机制控制 View 的切换。 2.3 游戏运行流程 进入游戏后,有两个按钮,一个是退出按钮,一个是开始按钮 点击开始,开始后进入动态游戏界面,蛇是不停向前运动的,滑动屏幕控制蛇的移动方 向。 吃到身体,游戏失败,弹出失败界面,点击右上角返回键返回菜单。 吃满 50 个食物,游戏胜利,弹出胜利界面,点击右上角返回键返回菜单。
三、详细设计 3.1 游戏模块划分 游戏划分为 5 个模块,分放在 5 个包里。 1.数据类 用来管理游戏中的静态数据,有 3 个文件,分别是游戏静态数据管理类、Activity、 消息类 2.辅助类 这个类中存放自定义的辅助类,有 4 个文件,分别是自定义按键类、图片处理类、 屏幕管理的两个类 3.视图类 存放 3 个 View 类 4.线程类 存放两个线程类 5.对象类 存放蛇对象类 3.2 组件需求 需要的组件有 3 个 View、1 个 Activity、两个线程。 3.4 视图切换 用消息机制进行 View 切换,在 Activity 中接收消息,各个 View 在适当的时候发送消 息,Activity 接收到消息之后控制 View 的切换。 四、编码分析 4.1 数据类 1.静态数据类 Content.Java 这个类中存放游戏中的静态数据,包括各个按钮、背景的大小和位置,以及与蛇相关的 静态数据。 2.消息类 WhatMessage.java public class WhatMessage { public static final int GO_TO_GAME=0; public static final int EXIT=1;
public static final int OVER_GAME = 2; public static final int MENU = 3; } 消息实际上就是 int 型的整数,消息必须是 static final int 型。 消息=0------开始游戏 消息=1------退出游戏 消息=2------游戏结束 消息=3------跳转菜单 3.游戏核心组件 SnakeActivity.java Activity 主要用来切换 View 代码如下: public void sendMessage(int what) { Message msg1 = myHandler.obtainMessage(what); myHandler.sendMessage(msg1); } Handler myHandler = new Handler(){ //处理各个SurfaceView发送的消息 public void handleMessage(Message msg) { switch(msg.what) { case WhatMessage.GO_TO_GAME: gotoSnakeView(); break; case WhatMessage.OVER_GAME: gotoGameOverView(); break; case WhatMessage.MENU: gotoMenu(); break; } } }; 主要用到这两个函数: 第一个函数用来发送消息,在各个 View 中需要做跳转的时候,便调用 Activity 的这个 函数,传入相应的参数,发送消息个 Activity。 第二个函数用来接收消息,根据接收到的消息做相应的反应 各个响应函数代码如下: public void gotoGameOverView(){ GameOverView = new GameOverView(this); setContentView(GameOverView); }
public void gotoMenu(){ Menu = new Menu(this); setContentView(Menu); } public void gotoGameView(){ Gameview = new GameView(this); setContentView(Gameview); } setContentView 是用来显示当前 View 的。 在接到消息后,根据消息的提示,创建 View 类对象,并跳转到相应的 View 中。 4.2 辅助类 1.自定义按键 ImageButton.jaba 构造函数: public ImageButton(Context context,Bitmap bm) { super(context); // TODO Auto-generated constructor stub this.bm = bm; } 传入一张图片资源,做相应的处理,并在 View 中设置位置,便可以安装一个图片型按钮 2.图片处理 PicLoad.java public static Bitmap MakeDot(Bitmap bm,int tobewidth,int tobeheight) { float wratio = (float)tobewidth/bm.getWidth(); float hratio = (float)tobeheight/bm.getHeight(); Matrix m1 = new Matrix(); m1.postScale(wratio, hratio); return Bitmap.createBitmap(bm, 0, 0,bm.getWidth(),bm.getHeight(), m1, true); } //缩放旋转图片,使图片全屏,不等比缩放 public static Bitmap MakeBackGround(Bitmap bm) { float wRatio = ScreenWidth/bm.getWidth(); //图片 宽度 float hRatio = ScreenHeight/bm.getHeight(); //图片高度
Matrix m1 = new Matrix(); m1.postScale(wRatio, hRatio); return Bitmap.createBitmap(bm, 0, 0, bm.getWidth(), bm.getHeight(), m1, true); } 这个类中有像个函数: 第一个函数传入三个参数,一个是图片资源,另外两个是图片要改变的长和高,然后把 图片改变成这个大小。 第二个是函数是将图片变换为全屏。 3.屏幕辅助 ScreenScaleResult.java 屏幕辅助类是让游戏适应手机屏幕的大小,是通用类,这里就不赘述了。 4.屏幕结果 ScreenScaleUtil.java 同上 4.3 视图类 1.菜单界面 Menu.java public void initBitmap(){ StartBitmap=BitmapFactory.decodeResource(this.getResources(), R.drawable.start); ExitBitmap=BitmapFactory.decodeResource(this.getResources(), R.drawable.exit); BackGround=BitmapFactory.decodeResource(this.getResources(), R.drawable.bg); //适应屏 StartBitmap=PicLoad.MakeDot(StartBitmap, Content.wBUTTON,Content.hBUTTON); ExitBitmap=PicLoad.MakeDot(ExitBitmap, Content.wBUTTON,Content.hBUTTON); BackGround=PicLoad.MakeBackGround(BackGround); } public void onDraw(Canvas canvas) { canvas.drawColor(Color.GRAY); canvas.drawBitmap(BackGround, 0, 0, paint); }
@Override public void onClick(View v) { // TODO Auto-generated method stub if(v == StartButton){ activity.sendMessage(WhatMessage.GO_TO_GAME); } if(v == ExitButton){ activity.finish(); } 这个View中有三个关键函数: 第一个是初始化资源,传入图片并将图片定制为想要的大小。 第二个是绘制函数,就是讲View绘制到屏幕上。 第三个是监听,监听按钮的消息,按下抬起的时候向Activity发送消息跳转View。 2.游戏界面 GameView.Java 游戏界面是动态的 SurfaceView 有以下几个关键函数 a> 接收触摸屏幕消息 public boolean onTouchEvent(MotionEvent e) { //获取当前触控点的XY坐标 float x = e.getX(); float y = e.getY(); //根据触控的不同动作执行不同的业务逻辑 switch (e.getAction()) { //若动作为按下触控笔则记录XY位置,只会在按下时记录一次 case MotionEvent.ACTION_DOWN: mPreviousX=x; mPreviousY=y; break; //记录触控笔X位置 //记录触控笔Y位置 //若动作为抬起则根据X位移的不同执行左滑、右滑或选中菜单项的业务逻辑 case MotionEvent.ACTION_UP: //计算X位移 float dx=x- mPreviousX; float dy=y- mPreviousY; //x不停更换,直到最后抬起点 //若X位移小于阈值则向左滑动 if((sqrt(dx)>sqrt(dy))&&dx<-10) { if(anima != 4) anima = 3;
分享到:
收藏