消灭泡泡糖游戏java编程_JAVA面向对象编程课程设计——泡泡堂

###一、成员介绍 姓名|任务分配|个人博客链接 --|:--:|--: 张一弛(组长)|GUI设计、游戏界面相关类实现、阿里巴巴扫描纠错、团队博客编写|在做了,在做了,下次一定 王江鸿|Box类、Bomb类、Login类实现;道具实现|Java课程设计-泡泡堂(个人) 陈志伟|Player类、PlayerAttribute类、Music类实现|Java课程设计-泡泡堂(个人) ###二、项目Git地址 泡泡堂简易版 ###三、Git提交截图

89d822bbe417b4b11ff642637e304a98.png

4077fce1fc57161208c8ee0ba56727ba.png

879f004b48c4766e458f2f2a9ba89d25.png

5cd13231f07e854b77622f6c307c9d30.png

405f03ec413842502e4a63cd0bce6b01.png

3323b2d36d88cf33ec546f86d75b515a.png ###四、项目功能架构图、主要功能流程图

d0ccad4a35dfdb3bfe894f69dea00749.png ###五、项目运行截图 ##1、主界面

4b5fecb1995ad2cb51b299db7288db14.png

##2.玩家登记

e6eeeb1c8b6151fb93c6fad4bc3eb682.png

##3.游戏主界面

ec4902d24b9e64b97e88a2c4537212d1.png

###六、主要MUL类图

Player类

5a08a5a7f42cf8322c22fc401f6e7926.png Bomb类

479647b36b7c35b0e13c1d4f25bb55cb.png

###七、关键代码 ##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点伤害。 ###八、阿里巴巴代码规范扫描 ##扫描结果:

36760e93c06f408aaeda5888381de96a.png ##修改: #修改了魔法值、注释、代码规范、添加作者后:

535d702f63bf69629208c983774f876d.png

通过新建一个继承自Thread的class创建线程解决不允许显式创建线程问题

通过代码复用,创建新方法来解决单一方法过长问题 ##完全解决:

bd3483fc1aaec48384c0e1ad212fa470.png ###九、总结 本次课设功能还有许多可以拓展的地方,例如数据库存储玩家信息、通过Socket实现多人同台竞技等; 我们在游戏本身的界面和功能花了比较多的时间,以后有机会继续完善。

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值