📄 helloworld.java
字号:
private int ballR=10;
private int ballLeftLimit=viewLeft+1;
private int ballRightLimit=viewRight-ballR-1;
private int ballTopLimit=viewTop+1;
private int ballButtomLimit=viewButtom-ballR-1;
private int operateState=0;
private static final int OPERATE_STATE1=0;
private static final int OPERATE_STATE2=1;
private static final int OPERATE_STATE3=2;
private int bgColor=Color.GREEN;
private boolean isplay=true;
//private boolean isBallPlay=true;
private int userBrickPreX;
private Graphics g=this.getGraphics();
String imageString="sky.JPG";
Image image;
private double ballPreX;
private double ballPreY;
protected GCanvas()
{
super(true);
userBrick=new Brick(1,viewLeft+(viewWidth-userBrickWidth)/2,viewButtom-userBrickHeight-ballR*2,userBrickWidth,userBrickHeight,Color.RED);
Random rand=new Random();
int cols=0;
int rows=viewTop+(viewWidth-bricksViewWidth)/2;
for(int i=0 ; i < bricksRows ; i++)
{
cols=viewLeft+(viewWidth-bricksViewWidth)/2;
for(int j=0 ;j < bricksCols ; j++)
{
bricks[i][j]=new Brick(i*bricksCols+j+2,cols,rows,bricksWidth-1,bricksHeight-1,rand.nextInt()%0xffffff);
isShow[i][j]=true;
cols+=bricksWidth;
}
rows+=bricksHeight;
}
ball=new Ball(userBrick.getX()+userBrickWidth/2-ballR,userBrick.getY()-2*ballR,ballR,Color.BLACK,4,-4);
ballPreX=ball.getX();
ballPreY=ball.getY();
try
{
image=Image.createImage("/sky.JPG");
} catch (IOException e) {}
(new Thread(this)).start();
}
public void run()
{
g.setColor(bgColor);
g.fillRect(0,0,this.getWidth(),this.getHeight());
drawView(g);
for(int i=0;i < bricksRows;i++)
for(int j=0; j<bricksCols ; j++)
bricks[i][j].draw(g);
while(isplay)
{
input();
drawScreen();
try
{
Thread.sleep(5);
} catch (InterruptedException e) {}
}
}
public void input()
{
int userBrickX=userBrick.getX();
int keyState=this.getKeyStates();
userBrickPreX=userBrickX;
if((keyState&LEFT_PRESSED)!=0)
{
if(userBrickX>userBrickLeftLimit)
{
userBrickX+=userSpeed;
userSpeed-=userAcce;
userSpeed=userSpeed<(-userSpeedLimit)?(-userSpeedLimit):userSpeed;
operateState=OPERATE_STATE2;
}
}
if((keyState&RIGHT_PRESSED)!=0)
{
if(userBrickX+userBrick.getWidth()<this.getWidth())
{
userBrickX+=userSpeed;
userSpeed+=userAcce;
userSpeed=userSpeed>userSpeedLimit?userSpeedLimit:userSpeed;
operateState=OPERATE_STATE3;
}
}
if((keyState&LEFT_PRESSED)==0&&(keyState&RIGHT_PRESSED)==0&&operateState!=OPERATE_STATE1)
{
if(operateState==OPERATE_STATE2)
{
userSpeed+=userAcce;
if(userSpeed>0) userSpeed=0;
}
if(operateState==OPERATE_STATE3)
{
userSpeed-=userAcce;
if(userSpeed<0) userSpeed=0;
}
userBrickX+=userSpeed;
}
if(userBrickX<userBrickLeftLimit)
{
userBrickX=userBrickLeftLimit;
operateState=OPERATE_STATE1;
userSpeed=0;
}
if(userBrickX>userBrickRightLimit)
{
userBrickX=userBrickRightLimit;
operateState=OPERATE_STATE1;
userSpeed=0;
}
userBrick.setX(userBrickX);
}
public void drawImage()
{
g.drawImage(image,viewLeft,viewTop,Graphics.LEFT|Graphics.TOP);
}
class Clip
{
private int x;
private int y;
private int width;
private int height;
Clip(){}
Clip(int x,int y,int width,int height)
{
this.x=x;
this.y=y;
this.width=width;
this.height=height;
}
public int getX()
{
return x;
}
public int getY()
{
return y;
}
public int getWidth()
{
return width;
}
public int getHeight()
{
return height;
}
}
public Clip setClip(int x,int y,int width,int height)
{
Clip clip=new Clip(g.getClipX(),g.getClipY(),g.getClipWidth(),g.getClipHeight());
g.setClip(x,y,width,height);
return clip;
}
public void reDrawImage(int x,int y,int width,int height)
{
Clip clip;
clip=setClip(x,y,width,height);
drawImage();
g.setClip(clip.getX(),clip.getY(),clip.getWidth(),clip.getHeight());
}
public void unDrawBrick(int i,int j)
{
reDrawImage(bricks[i][j].getX(),bricks[i][j].getY(),bricks[i][j].getWidth()+1,bricks[i][j].getHeight()+1);
}
public void drawView(Graphics g)
{
reDrawImage(viewLeft,viewTop,viewWidth,viewHeight);
g.setColor(Color.BLACK);
g.drawLine(viewLeft ,viewTop ,viewLeft+viewWidth,viewTop );
g.drawLine(viewLeft ,viewTop-1,viewLeft+viewWidth,viewTop-1);
g.drawLine(viewLeft+1,viewTop-2,viewLeft+viewWidth,viewTop-2);
g.drawLine(viewLeft ,viewTop ,viewLeft ,viewTop+viewHeight);
g.drawLine(viewLeft-1,viewTop ,viewLeft-1,viewTop+viewHeight);
g.drawLine(viewLeft-2,viewTop+1,viewLeft-2,viewTop+viewHeight+1);
g.setColor(Color.WHITE);
g.drawLine(viewLeft+viewWidth ,viewTop ,viewLeft+viewWidth ,viewTop+viewHeight);
g.drawLine(viewLeft+viewWidth+1,viewTop ,viewLeft+viewWidth+1,viewTop+viewHeight);
g.drawLine(viewLeft+viewWidth+2,viewTop-1,viewLeft+viewWidth+2,viewTop+viewHeight-1);
g.drawLine(viewLeft,viewTop+viewHeight ,viewLeft+viewWidth ,viewTop+viewHeight );
g.drawLine(viewLeft,viewTop+viewHeight+1,viewLeft+viewWidth ,viewTop+viewHeight+1);
g.drawLine(viewLeft,viewTop+viewHeight+2,viewLeft+viewWidth-1,viewTop+viewHeight+2);
}
public void checkCollision()
{
for(int i=0;i < bricksRows;i++)
for(int j=0; j<bricksCols ; j++)
if(isShow[i][j])
if(bricks[i][j].getIsReDraw())
{
bricks[i][j].draw(g);
bricks[i][j].setIsReDraw(false);
}
double ballX=ball.getX();
double ballY=ball.getY();
double ballXSpeed=ball.getXSpeed();
double ballYSpeed=ball.getYSpeed();
// boolean isCollision=false;
ballPreX=ballX;
ballPreY=ballY;
ballX+=ballXSpeed;
ballY+=ballYSpeed;
if(ballX<ballLeftLimit)
{
ballX=ballLeftLimit;
ballXSpeed=-ballXSpeed;
ball.setBrickId(0);
// isCollision=true;
}
else
if(ballX>ballRightLimit)
{
ballX=ballRightLimit;
ballXSpeed=-ballXSpeed;
ball.setBrickId(0);
// isCollision=true;
}
if(ballY<ballTopLimit)
{
ballY=ballTopLimit;
ballYSpeed=-ballYSpeed;
ball.setBrickId(0);
// isCollision=true;
}
else
if(ballY>ballButtomLimit)
{
ballY=ballButtomLimit;
ballYSpeed=-ballYSpeed;
ball.setBrickId(0);
// isCollision=true;
}
ball.setX(ballX);
ball.setY(ballY);
ball.setXSpeed(ballXSpeed);
ball.setYSpeed(ballYSpeed);
userBrick.checkCollision1(ball);
userBrick.checkCollision2(ball);
for(int i=0;i < bricksRows;i++)
for(int j=0; j<bricksCols ; j++)
if(isShow[i][j])
if(bricks[i][j].checkCollision1(ball))
{
isShow[i][j]=false;
unDrawBrick(i,j);
}
for(int i=0;i < bricksRows;i++)
for(int j=0; j<bricksCols ; j++)
if(isShow[i][j])
if(bricks[i][j].checkCollision2(ball))
{
isShow[i][j]=false;
unDrawBrick(i,j);
}
}
public void drawScreen()
{
reDrawImage((int)(ballPreX),(int)(ballPreY),(int)ball.getR(),(int)ball.getR());
ball.draw(g);
reDrawImage(userBrickPreX,userBrick.getY(),userBrick.getWidth()+1,userBrick.getHeight()+1);
userBrick.draw(g);
checkCollision();
flushGraphics();
}
}
public class helloworld extends MIDlet implements CommandListener
{
Display display;
GCanvas GC;
public helloworld()
{
super();
display=Display.getDisplay(this);
GC=new GCanvas();
display.setCurrent(GC);
}
protected void destroyApp(boolean arg0) throws MIDletStateChangeException
{
}
protected void pauseApp()
{
}
protected void startApp() throws MIDletStateChangeException
{
}
public void commandAction(Command c, Displayable e)
{
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -