欢迎来到沃文网! | 帮助中心 分享知识,传播智慧!
沃文网
全部分类
  • 教学课件>
  • 医学资料>
  • 技术资料>
  • 学术论文>
  • 资格考试>
  • 建筑施工>
  • 实用文档>
  • 其他资料>
  • ImageVerifierCode 换一换
    首页 沃文网 > 资源分类 > DOCX文档下载
    分享到微信 分享到微博 分享到QQ空间

    贪吃蛇Java课程设计.docx

    • 资源ID:854028       资源大小:32.55KB        全文页数:13页
    • 资源格式: DOCX        下载积分:20积分
    快捷下载 游客一键下载
    账号登录下载
    微信登录下载
    三方登录下载: QQ登录 微博登录
    二维码
    微信扫一扫登录
    下载资源需要20积分
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP,下载更划算!
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    贪吃蛇Java课程设计.docx

    1、 -目录一、项目介绍4二、概要设计42.1 资源需求42.2 游戏运行方式42.3 游戏运行流程4三、详细设计53.1 游戏模块划分53.2 组件需求53.4 视图切换5四、编码分析54.1 数据类54.2 辅助类74.3 视图类84.4 线程类124.5 对象类12五、数据库13六、总结15一、项目介绍针对java课程设计,我做了一个小型安卓游戏贪吃蛇结课,游戏代码中包含到本学习所有知识点的应用,以及安卓的系统框架。游戏已经成功的运行,玩法很简单,打开游戏后进入菜单,点开始键进入游戏。蛇的初始长度是4节,游戏运行时屏幕会自动产生食物(苹果),滑动屏幕控制蛇的方向,碰到墙后会从另一侧出来,吃到

    2、身体游戏失败,吃满50个食物游戏成功。50个食物个数是自己设定的。二、概要设计2.1 资源需求本游戏设计做结课使用,没有用到声音资源,只需要图片资源。图片资源:菜单背景、菜单按钮*2(开始、退出)、贪吃蛇头部、贪吃蛇身体、食物(苹果)、 失败界面、胜利界面、结束后返回按钮、游戏图标2.2 游戏运行方式安卓游戏的运行方式大概分为两种,一种是Activity的切换,一种是View的切换,小游戏用View的切换更为方便。本游戏就是采用的View切换的方式进行。本游戏一共有三个View,分别是菜单的静态ViewGroup、游戏的动态SurfaceView和结束游戏界面的静态View。由Activity

    3、消息机制控制View的切换。2.3 游戏运行流程进入游戏后,有两个按钮,一个是退出按钮,一个是开始按钮点击开始,开始后进入动态游戏界面,蛇是不停向前运动的,滑动屏幕控制蛇的移动方向。吃到身体,游戏失败,弹出失败界面,点击右上角返回键返回菜单。吃满50个食物,游戏胜利,弹出胜利界面,点击右上角返回键返回菜单。三、详细设计3.1 游戏模块划分游戏划分为5个模块,分放在5个包里。1.数据类用来管理游戏中的静态数据,有3个文件,分别是游戏静态数据管理类、Activity、消息类2.辅助类这个类中存放自定义的辅助类,有4个文件,分别是自定义按键类、图片处理类、屏幕管理的两个类3.视图类存放3个View类

    4、4.线程类存放两个线程类5.对象类存放蛇对象类3.2 组件需求需要的组件有3个View、1个Activity、两个线程。3.4 视图切换用消息机制进行View切换,在Activity中接收消息,各个View在适当的时候发送消息,Activity接收到消息之后控制View的切换。四、编码分析4.1 数据类1.静态数据类Content.Java这个类中存放游戏中的静态数据,包括各个按钮、背景的大小和位置,以及与蛇相关的静态数据。2.消息类WhatMessage.javapublic class WhatMessage public static final int GO_TO_GAME=0;pub

    5、lic 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.javaActivity主要用来切换View代码如下:public void sendMessage(int what) Message msg1 = myHandler.obtainMessage(what)

    6、; 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; ; 主要用到这两个

    7、函数:第一个函数用来发送消息,在各个View中需要做跳转的时候,便调用Activity的这个函数,传入相应的参数,发送消息个Activity。第二个函数用来接收消息,根据接收到的消息做相应的反应各个响应函数代码如下:public void gotoGameOverView()GameOverView = new GameOverView(this);setContentView(GameOverView);public void gotoMenu()Menu = new Menu(this);setContentView(Menu);public void gotoGameView()Game

    8、view = 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 stubthis.bm = bm;传入一张图片资源,做相应的处理,并在View中设置位置,便可以安装一个图片

    9、型按钮2.图片处理PicLoad.javapublic 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.getHei

    10、ght(), 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(

    11、), m1, true); 这个类中有像个函数:第一个函数传入三个参数,一个是图片资源,另外两个是图片要改变的长和高,然后把图片改变成这个大小。第二个是函数是将图片变换为全屏。3.屏幕辅助ScreenScaleResult.java屏幕辅助类是让游戏适应手机屏幕的大小,是通用类,这里就不赘述了。4.屏幕结果ScreenScaleUtil.java同上4.3 视图类1.菜单界面Menu.javapublic void initBitmap()StartBitmap=BitmapFactory.decodeResource(this.getResources(), R.drawable.start

    12、);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.hBU

    13、TTON);BackGround=PicLoad.MakeBackGround(BackGround);public void onDraw(Canvas canvas) canvas.drawColor(Color.GRAY);canvas.drawBitmap(BackGround, 0, 0, paint);Overridepublic void onClick(View v) / TODO Auto-generated method stubif(v = StartButton)activity.sendMessage(WhatMessage.GO_TO_GAME);if(v = Ex

    14、itButton)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(); /根据触控的不同动作执行不

    15、同的业务逻辑 switch (e.getAction() /若动作为按下触控笔则记录XY位置,只会在按下时记录一次 case MotionEvent.ACTION_DOWN: mPreviousX=x;/记录触控笔X位置 mPreviousY=y;/记录触控笔Y位置 break; /若动作为抬起则根据X位移的不同执行左滑、右滑或选中菜单项的业务逻辑 case MotionEvent.ACTION_UP: /计算X位移 float dx=x- mPreviousX; /x不停更换,直到最后抬起点 float dy=y- mPreviousY; /若X位移小于阈值则向左滑动 if(sqrt(dx)

    16、sqrt(dy)&dxsqrt(dy)&dx10) if(anima != 3) anima = 4; else if(sqrt(dy)sqrt(dx)&dysqrt(dx)&dy 10) /向下 if(anima != 1) anima = 2; break; return true; bSurfaceView的构造函数中的CallBack函数调用后自动调用这个函数,做动画中一些变量的初始化,并开启run函数 public void surfaceCreated(SurfaceHolder holder) / TODO Auto-generated method stubHeadDot =

    17、new Snake(Head);HeadDot.ChangeBefXY(currentX, currentY);HeadDot.ChangeCurXY(currentX, currentY);for(int j = 0;j在run函数中开启各个线程public void run() DrawThread=new DrawThread(this);DrawThread.setFlag(true); DrawThread.start();DataChangeThread = new DataChangeThread(this);DataChangeThread.setFlag(true); Dat

    18、aChangeThread.start();d绘制函数protected void render() SurfaceHolder myholder=getHolder();Canvas canvas = myholder.lockCanvas();trysynchronized(myholder)paint.setColor(Color.BLACK);paint.setAlpha(255);canvas.drawBitmap(Map, 0, 0, paint);if(Head=null)return;HeadDot.ChangeCurXY(currentX, currentY);canvas.

    19、drawBitmap(Foot, Xfoot,Yfoot, paint);for(int m=0;mDotNumber;m+)snakem.drawSelf(canvas, paint);HeadDot.drawSelf(canvas, paint);catch(Exception e)e.printStackTrace();finallyif(canvas != null)myholder.unlockCanvasAndPost(canvas);3.结束界面 GameOverView.java这个View界面很简单,就是判断游戏是胜利还是失败后,跳转到相应的界面public void onD

    20、raw(Canvas canvas) / TODO Auto-generated method stubsuper.onDraw(canvas);canvas.drawColor(Color.GRAY);canvas.drawBitmap(BackGround, 0,0 ,paint);/canvas.drawBitmap(Return,0, 0,paint);if(win)canvas.drawBitmap(Win, Content.xGameOver,Content.yGameOver ,paint);elsecanvas.drawBitmap(Lost, Content.xGameOve

    21、r,Content.yGameOver ,paint);4.4 线程类1.数据控制线程DataChangeTread.javaDataChangeTread线程是实时改变游戏数据的线程,负责当滑动屏幕就改变方向,控制蛇撞墙之后的动作,产生食物。2.刷屏线程DrawTread.javaDrawThread函数式用来绘制的,一秒60帧,每帧绘制一次画面,达到刷屏的效果,配合数据的改变就形成了动态画面。4.5 对象类Snake.javaSnake是蛇身上每一个点对象,蛇是一个个点组成的,每个点都是一个对象,有四个成员变量,分别是自己的坐标,和上一个点的坐标。三个成员函数,分别是绘制函数,得到和改变坐

    22、标函数。package com.example.cat;import android.graphics.Bitmap;import android.graphics.Canvas;import android.graphics.Paint;public class Snake int CurX=0; /当前x坐标int CurY=0; /当前y坐标int BefX=0; /之前x坐标int BefY=0; /之前x坐标Bitmap bm;public Snake(Bitmap bm)this.bm = bm;public void drawSelf(Canvas canvas,Paint pa

    23、int) /绘制函数canvas.drawBitmap(bm,CurX,CurY,paint);public void ChangeCurXY(int x,int y) /改变坐标函数this.CurX = x;this.CurY = y;public void ChangeBefXY(int x,int y) /改变之前坐标函数this.BefX = x;this.BefY = y;五、数据库public void openOrCreateDatabase()/打开数据库方法 try sld=SQLiteDatabase.openDatabase (/data/data/com.exampl

    24、e.cat/mydb,/数据库所在路径null, SQLiteDatabase.OPEN_READWRITE|SQLiteDatabase.CREATE_IF_NECESSARY /读写、若不存在则创建 ); /创建表 String sql=create table if not exists highScore + ( + score integer + ); sld.execSQL(sql); /执行语句 String sql1=insert into highScore values(+0+); sld.execSQL(sql1); catch(Exception e) Toast.ma

    25、keText(this, 数据库错误:+e.toString(), Toast.LENGTH_SHORT).show(); /关闭数据库的方法 public void closeDatabase() try sld.close(); catch(Exception e)Toast.makeText(this, 数据库错误:+e.toString(), Toast.LENGTH_SHORT).show(); /插入记录的方法 public void update(int scores) try String sql=insert into highScore values(+scores+);

    26、sld.execSQL(sql); / 执行插入语句 Cursor cur=null; String sql1=select max(score) from highScore; cur=sld.rawQuery(sql1, null); if(cur.moveToNext() maxScore=cur.getInt(0); String sql2=delete from highScore where score +maxScore+; sld.execSQL(sql2); /如果有更高分就删除其他分数 sld.close(); catch(Exception e)Toast.makeTex

    27、t(this, 数据库错误:+e.toString(), Toast.LENGTH_SHORT).show(); public void getScore() /得到当前分数,游戏开始之前会用到 try openOrCreateDatabase(); Cursor cur=null; String sql1=select max(score) from highScore; cur=sld.rawQuery(sql1, null); if(cur.moveToNext() maxScore=cur.getInt(0); catch(Exception e) Toast.makeText(this, 数据库错误:+e.toString(), Toast.LENGTH_SHORT).show(); closeDatabase();六、总结从这次课程的设计中,我把整本书的知识点系统的理解和梳理了一遍,对自我编程能力有非常大的提升,独自对游戏进行设计和制作也提升了自己的体系规划能力和架构设计能力。通过本学期的学习,增强自信感,以及对编程兴趣。感谢导师的指导,我会在今后到道路上继续奋斗。


    注意事项

    本文(贪吃蛇Java课程设计.docx)为本站会员(精***)主动上传,沃文网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知沃文网(点击联系客服),我们立即给予删除!




    关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服点击这里,给沃文网发消息,QQ:2622162128 - 联系我们

    版权声明:以上文章中所选用的图片及文字来源于网络以及用户投稿,由于未联系到知识产权人或未发现有关知识产权的登记,如有知识产权人并不愿意我们使用,如有侵权请立即联系:2622162128@qq.com ,我们立即下架或删除。

    Copyright© 2022-2024 www.wodocx.com ,All Rights Reserved |陕ICP备19002583号-1

    陕公网安备 61072602000132号     违法和不良信息举报:0916-4228922