基于java的哆啦a梦历险记

运行方式:打开dn.five.Test包,运行GameBoard.java即可

操作方式:空格代表开始或者暂停,键盘上下左右控制哆啦A梦移动

该项目诞生于一次java学习课下作业,要求以小组为单位设计制作一个小游戏,当时刚刚学了历史上有名的的java小游戏“飞机大战”,感觉自己厉害的不行,于是小组成员各抒己见,最后讨论出了几个小游戏:

吃豆子,泡泡堂,王者荣耀......

最后盘来盘去,终于盘出一个比较圆润一点的小游戏

游戏的逻辑主要是这样,在几百万年前的火星上,一群外来生物正要攻占火星,勇敢而充满正义的哆啦A梦为了保卫自己的家园,与入侵者展开了一场激烈的搏斗。。。

不扯淡了,其实逻辑就两个

在所有的金币下面藏着一把通往下一关的钥匙,哆啦A梦需要找到钥匙并从通道进入下一关

期间不能被入侵者追到,否则就挂了,入侵者有一个基地不断的涌出入侵者,并且入侵者的移动速度随着关数的增加会原来越快

五大入侵者(残忍至极):

小猪,小鸟,小象,大马和小马

言归正传,说点有用的

所用技术:

1. java多线程

2. 图片预加载

3. 键盘事件监听

4. java 的iframe操作

精华

这个项目中还是有几个地方感觉处理的很好的

地图实现

为了构造出地图的效果,整个画板是一个30*30的二维数组构建的,墙用0来表示,其他用1来表示,代表可以经过。可以将二维数组存放在一个文件中,使用的时候从中读取,这样就可以设计多个地图实现通关的效果。

public int[][] arrs = {

{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},

{0,1,1,1,1,1,1,1,1,1,1,1,1,0,0,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0},

{0,1,0,0,0,0,1,0,0,0,0,0,1,0,0,1,0,0,0,0,0,1,0,0,0,0,1,0,0,0},

{0,1,0,0,0,0,1,0,0,0,0,0,1,1,1,1,0,0,0,0,0,1,0,0,0,0,1,0,0,0},

{0,1,0,0,0,0,1,0,0,0,0,0,1,0,0,1,0,0,0,0,0,1,0,0,0,0,1,0,0,0},

{0,1,1,1,1,1,1,1,1,1,1,1,1,0,0,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0},

{0,1,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0,1,0,0,1,0,0,0,0,1,0,0,0},

{0,1,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0,1,0,0,1,0,0,0,0,1,0,0,0},

{0,1,1,1,1,1,1,0,0,1,1,1,1,0,0,1,1,1,1,0,0,1,1,1,1,1,1,0,0,0},

{0,0,0,1,0,0,1,0,0,0,0,0,1,0,0,1,0,0,0,0,0,1,0,0,1,0,0,0,0,0},

{0,0,0,1,0,0,1,0,0,0,0,0,1,0,0,1,0,0,0,0,0,1,0,0,1,0,0,0,0,0},

{0,1,1,1,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,1,1,1,0,0,0},

{0,1,0,0,0,0,1,0,0,1,0,2,2,0,0,2,2,0,1,0,0,1,0,0,0,0,1,0,0,0},

{0,1,0,0,0,0,1,0,0,1,0,2,2,2,2,2,2,0,1,0,0,1,0,0,0,0,1,0,0,0},

{0,1,1,1,1,1,1,0,0,1,0,2,2,2,2,2,2,0,1,0,0,1,1,1,1,1,1,0,0,0},

{0,1,0,0,0,0,1,0,0,1,0,2,2,2,2,2,2,0,1,0,0,1,0,0,0,0,1,0,0,0},

{0,1,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0,1,0,0,1,0,0,0,0,1,0,0,0},

{0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0},

{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},

};

碰撞检测

想要判断两个物体是否碰撞很简单,但是逻辑上当哆啦A梦碰到墙的时候应该是不会反弹的,而是不动,或者是在不该转弯的地方转弯,这样就容易出现一个bug,卡到墙里,所以这里的解决方案,是给每个运动的物体都加了一个方法canChangWay()来判断是否可以转弯,即试着转一下,如果不行就回滚一步

/*预设是否可以改变方向*/

public boolean canChangWay(Block[] blocks,int dic) {

int reDic = this.getDirection();

this.setDirection(dic);

this.step();

if(this.isHitBlock(blocks)) {

this.reStep();

this.setDirection(reDic);

return false;

}else {

this.reStep();

this.setDirection(reDic);

return true;

}

}

自动校位

因为哆啦A梦改变方向是由键盘控制,可是哆啦A梦的体型又差不多和通道一样宽,所以要想在与通道刚好吻合的时间段里点击键盘比较困难,所有添加了这个方法autoPosition(),就可以使用户操作时,只要当前的误差范围在一定程度,多可以通过弯道,提升了用户体验

/*自动校位*/

public void autoPosition(Eater eater,Bean[] beans) {

for(int i = 0;i

if(eater.canBeEat(beans[i])){

int x1 = eater.getX();

int y1 = eater.getY();

int x2 = beans[i].getX();

int y2 = beans[i].getY();

int x3 = x1 - x2;

int y3 = y1 - y2;

if(x3>= -eater.getWidth()/2 && x3<=eater.getWidth()/2 && y3 >= -eater.getHeight()/2 && y3 <= eater.getHeight()/2) {

eater.setX(x2);

eater.setY(y2);

}

}

}

}

4、图片刷新

因为每一个生物都有16张图片,分别是上下左右各四张,所以需要不停地刷新图片的同时还要判断该生物当前的方向,这里用index%4+4*x,就可以使在同一个方向上只滚动该方向上的图片。

switch(this.direction) {

case 1:

return images1[index%4];

case 2:

return images1[index%4+4];

case 3:

return images1[index%4+8];

case 4:

return images1[index%4+12];

}

收获

对面向对象编程的理解更加深刻了

java版哆啦a梦游戏_GitHub - wwz223/adventures-doraemon: 基于java实现的窗口类小游戏哆啦A梦历险记...相关推荐

  1. [安卓] 12、开源一个基于SurfaceView的飞行射击类小游戏

    前言  这款安卓小游戏是基于SurfaceView的飞行射击类游戏,采用Java来写,没有采用游戏引擎,注释详细,条理比较清晰,适合初学者了解游戏状态转化自动机和一些继承与封装的技巧. 效果展示    ...

  2. java文字类小游戏2.0版本

    java文字类小游戏 用javaFx面板显示文字类小游戏,目前正已完成基本打斗和打怪爆出武器的开发,后续会不断更新示例图如下: 运行这个类开始代码我已上传至码云,有需要的小伙伴自行拉取代码,git项目 ...

  3. 基于 Python 的横版 2D 动作类小游戏

    基于 Python 的横版 2D 动作类小游戏 游戏代码 游戏代码 游戏整体代码(基于 pygame 模块开发) // An highlighted block import pygame impor ...

  4. 今日头条安卓_今日头条加入“常用”小程序窗口,小游戏或将再次崛起?

    安卓手机在今日头条7.1.8版本更新后,头条APP底部出现了[常用]标签,而点击后则会弹出小程序桌面.此前在今日头条上使用过的小程序会出现在此处.最好的位置+战略级的布局,已经很明确告诉我们,需要在今 ...

  5. python弹球小游戏程序_Python基于Tkinter模块实现的弹球小游戏

    本文实例讲述了Python基于Tkinter模块实现的弹球小游戏.分享给大家供大家参考,具体如下: #!usr/bin/python #-*- coding:utf-8 -*- from Tkinte ...

  6. HTML5 Canvas 射击类小游戏 平滑的移动 思路

    这篇博客主要讲了如何处理HTML5 Canvas 游戏中的角色移动问题. 笔者这几天做了一个 HTML5 Canvas 的射击类小游戏,嗯,名字叫做<DroppingBalls>,大概就是 ...

  7. HTML5/Canvas太空射击类小游戏源码

    下载地址 JavaScript HTML5/Canvas太空射击类小游戏源码,非常值得学习的一款js射击小游戏代码,美术有点老旧,但是代码是完全开源的,有参考价值. dd:

  8. 基于C语言的信息管理系统和小游戏

    基于C语言的信息管理系统和小游戏 一.课设题 本次课程设计有以两类题可以选择: 信息管理系统: 即实现个基于控制台的信息管理系统,例如选课系统.图书馆系统.公司财务系统等等 ,除满增删查改等基本功能, ...

  9. Unity 游戏实例开发集合 之 CompoundBigWatermelon (简单合成一个大西瓜) 休闲小游戏快速实现

    Unity 游戏实例开发集合 之 CompoundBigWatermelon (简单合成一个大西瓜) 休闲小游戏快速实现 目录 Unity 游戏实例开发集合 之 CompoundBigWatermel ...

最新文章

  1. 什么是动态DNS 动态DNS有什么用
  2. Intel Realsense D435 python wrapper pyrealsense 类模块汇总
  3. Juicer 中文文档
  4. Linux入门笔记——文件操作命令1
  5. 【转】c# 命名空间和程序集
  6. java: cannot execute binary file 如果遇到这个错,一般是操作系统位数出问题了。
  7. 你们还在用8位单片机吗?
  8. Struct与Class
  9. 如何设置电脑自动锁屏_MIUI第415期:新增智能显示锁屏通知、状态栏数字电量外显...
  10. python 安装包时出现:SyntaxError: invalid syntax
  11. 计算机和信息系统安全保密管理规定,图文信息中心 计算机信息系统安全保密管理规定...
  12. Spring系列技术实战(项目搭建、知识点总结)
  13. 索菲对讲机写频软件_万能对讲机写频软件
  14. python爬股票历史价格_【Python】利用ricequant获取上证指数以及所有股票历史价格数据...
  15. 高等数学——二重积分的计算方法
  16. 人生感悟-人生需学会放下
  17. War3地图编辑器基础:物体编辑器F6(自定义单位+单位属性设置)
  18. three.js 渲染调优,如何提升3d场景更逼真的渲染效果
  19. html页面酒店日历插件,基于vue2.x的酒店日历选择插件
  20. 省常高NOIP模拟 寻梦fantasy

热门文章

  1. 抖音涨粉变现最快的账号的一致性和美观性设计-阿甘电商
  2. 上海话八级考试(ZZ)
  3. el-popover 位置问题,第一次点击位置乱飘,第二次点击恢复正常
  4. 暗黑破坏神3计算机性能测试,独显与集显各不同 暗黑破坏神3试玩评测
  5. 华为手机锁屏后显示无法连接服务器,锁屏状态可以远程连接服务器
  6. 【伪】解决动态id元素无法捕捉自动登录问题
  7. 删除手机自带程序最有效最简单的方法(无须root)
  8. 学会使用AngularJS
  9. 延长法定退休年龄到65岁 六成网友不同意
  10. VM608系列振弦采集模块工程安全监测仪器二次开发