java版哆啦a梦游戏_GitHub - wwz223/adventures-doraemon: 基于java实现的窗口类小游戏哆啦A梦历险记...
基于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梦历险记...相关推荐
- [安卓] 12、开源一个基于SurfaceView的飞行射击类小游戏
前言 这款安卓小游戏是基于SurfaceView的飞行射击类游戏,采用Java来写,没有采用游戏引擎,注释详细,条理比较清晰,适合初学者了解游戏状态转化自动机和一些继承与封装的技巧. 效果展示 ...
- java文字类小游戏2.0版本
java文字类小游戏 用javaFx面板显示文字类小游戏,目前正已完成基本打斗和打怪爆出武器的开发,后续会不断更新示例图如下: 运行这个类开始代码我已上传至码云,有需要的小伙伴自行拉取代码,git项目 ...
- 基于 Python 的横版 2D 动作类小游戏
基于 Python 的横版 2D 动作类小游戏 游戏代码 游戏代码 游戏整体代码(基于 pygame 模块开发) // An highlighted block import pygame impor ...
- 今日头条安卓_今日头条加入“常用”小程序窗口,小游戏或将再次崛起?
安卓手机在今日头条7.1.8版本更新后,头条APP底部出现了[常用]标签,而点击后则会弹出小程序桌面.此前在今日头条上使用过的小程序会出现在此处.最好的位置+战略级的布局,已经很明确告诉我们,需要在今 ...
- python弹球小游戏程序_Python基于Tkinter模块实现的弹球小游戏
本文实例讲述了Python基于Tkinter模块实现的弹球小游戏.分享给大家供大家参考,具体如下: #!usr/bin/python #-*- coding:utf-8 -*- from Tkinte ...
- HTML5 Canvas 射击类小游戏 平滑的移动 思路
这篇博客主要讲了如何处理HTML5 Canvas 游戏中的角色移动问题. 笔者这几天做了一个 HTML5 Canvas 的射击类小游戏,嗯,名字叫做<DroppingBalls>,大概就是 ...
- HTML5/Canvas太空射击类小游戏源码
下载地址 JavaScript HTML5/Canvas太空射击类小游戏源码,非常值得学习的一款js射击小游戏代码,美术有点老旧,但是代码是完全开源的,有参考价值. dd:
- 基于C语言的信息管理系统和小游戏
基于C语言的信息管理系统和小游戏 一.课设题 本次课程设计有以两类题可以选择: 信息管理系统: 即实现个基于控制台的信息管理系统,例如选课系统.图书馆系统.公司财务系统等等 ,除满增删查改等基本功能, ...
- Unity 游戏实例开发集合 之 CompoundBigWatermelon (简单合成一个大西瓜) 休闲小游戏快速实现
Unity 游戏实例开发集合 之 CompoundBigWatermelon (简单合成一个大西瓜) 休闲小游戏快速实现 目录 Unity 游戏实例开发集合 之 CompoundBigWatermel ...
最新文章
- 什么是动态DNS 动态DNS有什么用
- Intel Realsense D435 python wrapper pyrealsense 类模块汇总
- Juicer 中文文档
- Linux入门笔记——文件操作命令1
- 【转】c# 命名空间和程序集
- java: cannot execute binary file 如果遇到这个错,一般是操作系统位数出问题了。
- 你们还在用8位单片机吗?
- Struct与Class
- 如何设置电脑自动锁屏_MIUI第415期:新增智能显示锁屏通知、状态栏数字电量外显...
- python 安装包时出现:SyntaxError: invalid syntax
- 计算机和信息系统安全保密管理规定,图文信息中心 计算机信息系统安全保密管理规定...
- Spring系列技术实战(项目搭建、知识点总结)
- 索菲对讲机写频软件_万能对讲机写频软件
- python爬股票历史价格_【Python】利用ricequant获取上证指数以及所有股票历史价格数据...
- 高等数学——二重积分的计算方法
- 人生感悟-人生需学会放下
- War3地图编辑器基础:物体编辑器F6(自定义单位+单位属性设置)
- three.js 渲染调优,如何提升3d场景更逼真的渲染效果
- html页面酒店日历插件,基于vue2.x的酒店日历选择插件
- 省常高NOIP模拟 寻梦fantasy