這個是打磚塊的小游戲代碼
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,希望大大們幫忙解決一下謝謝了。求大神告知解決方法。
uj5u.com熱心網友回復:
球的中心點在哪?左下角嗎?你有左右越界判斷,上下的沒有。uj5u.com熱心網友回復:
應該不是代碼問題,肯定是碰撞邏輯問題,好好看看碰撞后的演算法吧
uj5u.com熱心網友回復:
代碼邏輯中,沒有邊界相關的處理代碼1、邊界位置的設定上下,上下(maxY/minY)、(左右)maxX/minX
2、用(Y坐標+/-磚塊高度一半)判斷,左右可以用(X坐標+/-磚塊寬度一半)判斷
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/41363.html
標籤:Java SE
下一篇:Jsp頁面彈窗
