求帮忙看一下代码逻辑哪里错误了,希望指正一下并告知解决方法

dotaxyh123 2020-07-06 11:18:00
这个是打砖块的小游戏代码
package Game;

import java.awt.Point;
import java.awt.event.KeyEvent;

import com.rupeng.game.GameCore;

public class HitBricks implements Runnable
{

@Override
public void run()
{
//初始化游戏界面
GameCore.setGameTitle("打砖块小游戏");
GameCore.setGameSize(1200, 800);
GameCore.loadBgView("lvsebg.jpg");

//初始化游戏中的挡板
GameImage imgBoard =new GameImage("board.jpg");
imgBoard.setPostion(470, 720);

//初始化游戏中的球
GameSprite spriteBall=new GameSprite("ball1");
spriteBall.setPostion(300, 500);
spriteBall.playAnimate("rotate");
int ballVX=GameCore.rand(1, 3);
int ballVY=GameCore.rand(-2, 0);;

//初始化游戏中的砖块
BrickInfo[][] bricks =new BrickInfo[10][12];
for(int i=0;i<bricks.length;i++)
{
BrickInfo[] brickRows=bricks[i];
for(int j=0;j<brickRows.length;j++)
{
brickRows[j]=new BrickInfo();
boolean a = GameCore.rand(0, 2)==0?true:false;
brickRows[j].setHasBrick(a);
}
}
for(int i=0;i<bricks.length;i++)
{
BrickInfo[] brickRows=bricks[i];
for(int j=0;j<brickRows.length;j++)
{
BrickInfo brickInfo = brickRows[j];
if(brickInfo.isHasBrick())
{
GameImage imgBrick=new GameImage("brick.jpg");
imgBrick.setPostion(j*100, i*20);
brickRows[j].setImgBrick(imgBrick);
}

}
}

//游戏循环开始
while(true)
{
//左右按键控制游戏中的挡板
int keycode =GameCore.getPressedKeyCode();
if(keycode==KeyEvent.VK_LEFT&&imgBoard.getPostion().x>0)
{
imgBoard.moveLeft(15);
}
else if(keycode==KeyEvent.VK_RIGHT&&imgBoard.getPostion().x+imgBoard.getSize().width<GameCore.getGameWidth())
{
imgBoard.moveRight(15);
}

//游戏中小球的方向速度控制
Point posBall=spriteBall.getPostion();
int xBall=posBall.x;
int yBall=posBall.y;
xBall+=ballVX*6;
yBall+=ballVY*6;

spriteBall.setPostion(xBall, yBall);
if(xBall==0||xBall+spriteBall.getSize().width>=GameCore.getGameWidth())
{
ballVX=-ballVX;
}

if(yBall==0||imgBoard.isIntersectWith(spriteBall))
{
ballVY=-ballVY;
}


//球和砖块碰撞后的逻辑处理
for(BrickInfo[] brickRow:bricks)
{
for (BrickInfo brick : brickRow)
{
if (brick.isHasBrick() && brick.getImgBrick().isIntersectWith(spriteBall))
{
brick.setHasBrick(false);
brick.getImgBrick().hide();
ballVY = -ballVY;
}

}
}



if(yBall==GameCore.getGameHeight())
{
GameCore.alert("GAME OVER");
}

}


}

public static void main(String[] args)
{
GameCore.start(new HitBricks());

}

}

//游戏中砖块的信息
class BrickInfo
{
boolean hasBrick;
GameImage imgBrick;
public BrickInfo()
{

}
public boolean isHasBrick()
{
return hasBrick;
}
public void setHasBrick(boolean hasBrick)
{
this.hasBrick = hasBrick;
}

public GameImage getImgBrick()
{
return imgBrick;
}
public void setImgBrick(GameImage imgBrick)
{
this.imgBrick = imgBrick;
}

}





这个运行完之后小球如果在上面和砖块一直碰撞之后会直接碰出上边界,好像有时候还会碰出右边界,
新手第一次学习JAVA,希望大大们帮忙解决一下谢谢了。求大神告知解决方法。
...全文
3823 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
八爻老骥 2020-07-08
  • 打赏
  • 举报
回复
球的中心点在哪?左下角吗?你有左右越界判断,上下的没有。
码农丁丁 2020-07-08
  • 打赏
  • 举报
回复
代码逻辑中,没有边界相关的处理代码 1、边界位置的设定上下,上下(maxY/minY)、(左右)maxX/minX 2、用(Y坐标+/-砖块高度一半)判断,左右可以用(X坐标+/-砖块宽度一半)判断
qq_39936465 2020-07-08
  • 打赏
  • 举报
回复
引用 楼主 dotaxyh123 的回复:
这个是打砖块的小游戏代码 这个运行完之后小球如果在上面和砖块一直碰撞之后会直接碰出上边界,好像有时候还会碰出右边界, 新手第一次学习JAVA,希望大大们帮忙解决一下谢谢了。求大神告知解决方法。
应该不是代码问题,肯定是碰撞逻辑问题,好好看看碰撞后的算法吧

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧