消灭泡泡糖游戏java编程_JAVA面向对象编程课程设计——泡泡堂
###一、成员介绍 姓名|任务分配|个人博客链接 --|:--:|--: 张一弛(组长)|GUI设计、游戏界面相关类实现、阿里巴巴扫描纠错、团队博客编写|在做了,在做了,下次一定 王江鸿|Box类、Bomb类、Login类实现;道具实现|Java课程设计-泡泡堂(个人) 陈志伟|Player类、PlayerAttribute类、Music类实现|Java课程设计-泡泡堂(个人) ###二、项目Git地址 泡泡堂简易版 ###三、Git提交截图
###四、项目功能架构图、主要功能流程图
###五、项目运行截图 ##1、主界面
##2.玩家登记
##3.游戏主界面
###六、主要MUL类图
Player类
Bomb类
###七、关键代码 ##1.玩家移动线程
private class moveThread1 extends Thread {
@Override
public void run() {
while (player1.isalive) {
if(stopSign)
break;
if(pause){
player1.move();
colisionDetection(player1);
if(player1.thisbomb!=null)
{
//判断玩家是否在当前炸弹上(一旦离开玩家当前放置的炸弹,便不可再次站上去)
if(player1.thisbomb.isExistPlayer)
{
player1.onTheboom();
}
}
}
}
}
}
使用while循环实现持续监听,加入判断线程结束标志,当重新开始、返回主界面时,线程能够及时停止。 ##2.碰撞检查(判断获得道具、前方有障碍、是否出界)
public static void colisionDetection(Player pl)
{
int x = 1120;
int y = 880;
//出地图边境
if(pl.getX()<0||pl.getX()>x||pl.getY()<0||pl.getY()>y)
{
pl.back();
return;
}
int w = 15;
int h = 12;
for(int i=0;i
for(int j=0;j
{
try {
Box temp=thismap.getBoxbyLocation(i,j);
//碰撞检查
if(temp.getRect().intersects(pl.getRect())&&temp.isExist)
{
//遇到箱子
if(!temp.isdestroyshowT)
{
pl.back();
return;
}
//遇到宝物
else{
switch(temp.treasureIndex){
case 1:
pl.pla.plusspeed();
break;
case 2:
pl.pla.plusbombnum();
break;
case 3:
pl.pla.pluspower();
break;
case 4:
//无敌状态
pl.invincible();
break;
case 5:
pl.pla.pluslive();
break;
default:
break;
}
//设置当前方格为[不存在]
temp.isExist=false;
//将当前方格设置为隐藏
setIcon("images/default.png",temp);
}
}
//遇到炸弹
if(temp.isExistBomb&&!temp.isExistPlayer&&temp.getRect().intersects(pl.getRect()))
{
pl.back();
return;
}
} catch (NullPointerException e) {
}
}
}
}
借助Rectangle类中的intersects方法来检测2个矩形是否相交,实现碰撞检查,再通过判断玩家前往的box的类型来判断下一步操作。 ##3.炸弹引爆
public synchronized void explode() throws InterruptedException
// 爆炸
{
// 将box处定义炸弹的参数赋值false
box.isExistBomb = false;
box.needDetonate = false;
player.setBombexist(player.getBombexist() - 1);
// 玩家当前炸弹数-1
setIcon("images/UDLR.png", box);
// 设置炸弹中心的图片
explodePlayer(box);
// 判断是否炸到了玩家
for (int n = 1; n <= power; n++)
// 向上爆炸
{
boolean flag = true;
int x = this.x;
int y = this.y - n;
if (y >= 0) {
Box temp = GameFrame.thismap.getBoxbyLocation(x, y);
flag = explode1(temp);
if(flag == false) {
break;
}
}
}
// 向下爆炸
for (int s = 1; s <= power; s++) {
boolean flag = true;
int x = this.x;
int y = this.y + s;
if (y < 12) {
Box temp = GameFrame.thismap.getBoxbyLocation(x, y);
flag = explode1(temp);
if(flag == false) {
break;
}
}
}
// 向左爆炸
for (int w = 1; w <= power; w++) {
boolean flag = true;
int x = this.x - w;
int y = this.y;
if (x >= 0) {
Box temp = GameFrame.thismap.getBoxbyLocation(x, y);
flag = explode1(temp);
if(flag == false) {
break;
}
}
}
// 向右爆炸
for (int e = 1; e <= power; e++) {
boolean flag = true;
int x = this.x + e;
int y = this.y;
if (x < 15) {
Box temp = GameFrame.thismap.getBoxbyLocation(x, y);
flag = explode1(temp);
if(flag == false) {
break;
}
}
}
}
public boolean explode1(Box temp) {
if (temp.isExist)
// 如果爆炸的路线上遇到方块了
{
if (temp.isdestroyshowT)
// 如果是宝物
{
temp.isExist = false;
return true;
// 宝物消失
} else
// 如果是障碍,则终止爆炸
{
showTreasure(temp);
// 显示该box处隐藏的宝物
return false;
}
} else if (temp.isExistBomb)
// 如果该爆炸处有炸弹
{
MyThread3 ph3 = new MyThread3(temp);
ph3.start();
continuousBomb.add(temp);
// 将该炸弹添加到被引爆的列表里
}
explodePlayer(temp);
// 判断是否炸到了玩家
bombCache.add(temp);
// 将该处添加到爆炸缓存中
setIcon("images/UD.png", temp);
// 设置该处的爆炸图片
return true;
}
根据当前玩家的威力,从当前Box分别向上下左右威力内的Box遍历,若遇到不可炸毁的障碍,则结束当前方向的遍历,否则,将遍历的Box设置爆炸。 判断是否炸到玩家——通过判断玩家是否和爆炸块重叠,不处于无敌状态,并且存活,若符合,玩家受到1点伤害。 ###八、阿里巴巴代码规范扫描 ##扫描结果:
##修改: #修改了魔法值、注释、代码规范、添加作者后:
通过新建一个继承自Thread的class创建线程解决不允许显式创建线程问题
通过代码复用,创建新方法来解决单一方法过长问题 ##完全解决:
###九、总结 本次课设功能还有许多可以拓展的地方,例如数据库存储玩家信息、通过Socket实现多人同台竞技等; 我们在游戏本身的界面和功能花了比较多的时间,以后有机会继续完善。
消灭泡泡糖游戏java编程_JAVA面向对象编程课程设计——泡泡堂相关推荐
- java泡泡堂教程_JAVA面向对象编程课程设计——泡泡堂(个人博客)
二.个人负责模块或任务说明 GUI设计 游戏界面类.地图类的实现(实现与Player类的交互) 阿里巴巴扫描纠错 团队博客编写 三.自己的代码提交记录 四.自己负责模块或任务详细说明 1.地图Fiel ...
- 斗地主Java课程设计_JAVA面向对象编程课程设计——web版斗地主
一.团队课程设计博客链接 二.个人负责模块或任务说明 实体类的设计 斗地主规则的实现 人机自动出牌的算法 实现数据库的DAO模式 三.自己的代码提交记录 注:这里只有部分提交记录,详细的提交记录在团队 ...
- java面向对象编程 漫画_Java面向对象编程(一)
由于常常将Java和C++面向对象编程的原则搞乱,所以这次把相关要点分别总结一下,本文主要总结Java面向对象编程. 面向对象编程的三大特性是:继承性(inheritance), 多态性(polymo ...
- java面向对象编程的思想_java面向对象编程思想的理解
1.我们总说java是一门面向对象编程的语言,那什么是面向对象呢? 我是这样理解的,对象是事物存在的实体,如,猪.狗,花早等都是对象,对象由两部分组成.面向对象编程的三大特点:继承,多态,类是封装对象 ...
- java面向对象编程思想_Java面向对象编程思想的理解
1.我们总说java是一门面向对象编程的语言,那什么是面向对象呢? 我是这样理解的,对象是事物存在的实体,如,猪.狗,花早等都是对象,对象由两部分组成.面向对象编程的三大特点:继承,多态,类是封装对象 ...
- [Java入门笔记] 面向对象编程基础(二):方法详解
2019独角兽企业重金招聘Python工程师标准>>> 什么是方法? 简介 在上一篇的blog中,我们知道了方法是类中的一个组成部分,是类或对象的行为特征的抽象. 无论是从语法和功能 ...
- 第2课第3节_Java面向对象编程_继承性_P【学习笔记】
摘要:韦东山android视频学习笔记 面向对象程序的三大特性之继承性:继承性的主要作用就是复用代码.继承性也有一定的限制,如图一 图一 1.我们在第2课第2节_Java面向对象编程_封装性_P 中 ...
- Java基础-初识面向对象编程(Object-Oriented-Programming)
Java基础-初识面向对象编程(Object-Oriented-Programming) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. Java是一门面向对象的程序设计语言.那么什 ...
- 一文带你深入理解【Java基础】· 面向对象编程(下)②代码块、final和abstract
写在前面 Hello大家好, 我是[麟-小白],一位软件工程专业的学生,喜好计算机知识.希望大家能够一起学习进步呀!本人是一名在读大学生,专业水平有限,如发现错误或不足之处,请多多指正!谢谢大家!!! ...
最新文章
- iOS中的UIAlertView之新方法(弹出警告框)
- protoc.exe java_protobuf java 使用 window
- 简单的信誉算法 js处理
- [html] 写H5和小程序有什么相同及不同的地方吗?
- 开源软件和自由软件_自由和开源软件的经济学
- Meteor——以NodeJS为基础环境,MongoDB为数据环境的全栈开发平台!
- 每天进步一点点——mysql——Percona XtraBackup(innobackupex)
- 这一晚注定属于C罗!回归首秀梅开二度,现场超过7万球迷见证这场胜利
- vnc-4.0-winsrc版本之winvnc工程分析_源码研究
- Git快速入门篇—— Windows版本淘宝镜像快速下载安装详细步骤及简单入门教程(附带图文教程)
- 基于rk3288的驱动编译
- “守法规知礼让、安全文明出行”背后需要良好的交通环境支撑 | 聚焦守法知礼...
- [笔记]n个点的基环树数量
- Centos7 搭建NFS文件共享存储
- 高效能创业者的七项习惯
- Yarn的资源配置参数
- c语言图像压缩编码,基于C语言的图像压缩算法
- 怎样把文字调成竖排_怎么把文字变成竖排
- 阅读论文《The Perception-Distortion Tradeoff》
- cocos2dx+java部落战争全套游戏源码资源策划文档