Java Swing(Game1)
Threadを使用してボックスオブジェクト を移動し続ける.ボックス(ユーザのオブジェクトを作成し、そのサイズを指定するためのボックス)-鍵イベントによってユーザを移動する .
Result
キーは、ランダム値を使用してX(横方向)の位置にボックスを作成し、プレーヤーオブジェクトと同じ位置になる前にボックスのY(縦軸)を追加し続け、ボックスを下に移動します.
Result
Code
public GameScreen() throws InterruptedException {
setDefaultCloseOperation(EXIT_ON_CLOSE);
setSize(300,500);
setTitle("박스피하기");
setLocationRelativeTo(null);
gamePanel = new JPanel();
gamePanel.setLayout(null);
player = new Man();
score = new Score();
gamePanel.add(player);
gamePanel.add(score);
add(gamePanel);
addKeyListener(this);
setVisible(true);
while(nowplay)
{
Bomb bomb = new Bomb();
Thread newthread = new Thread(bomb);
gamePanel.add(bomb);
newthread.start();
Thread.sleep(1000);
}
gameOver();
}
デフォルトでは、Jframeを使用してゲームボードを作成し、nowplay(ゲーム状態)がThreadを使用してBoxオブジェクトを起動します.この場合、Boxの作成時間はThreadです.sleep(1000); 1秒指定 //개임종료
public static void gameOver()
{
JLabel over = new JLabel("Game Over");
over.setSize(200, 40);
over.setLocation(110,200);
gamePanel.add(over);
gamePanel.repaint();
}
ゲーム終了時にJlableでゲーム終了を指示しますclass Bomb extends JLabel implements Runnable{
int Image_w=18;
int Image_h=18;
Bomb()
{
super(new ImageIcon(".\\res\\images\\box.png"));
int x = (int)(Math.random()*(gamePanel.getWidth()-20));
setLocation(x,0);
setSize(Image_w,Image_h);
}
public void run() {
try {
while(GameScreen.nowplay){
Thread.sleep(100);
Point now = getLocation();
now.y+=10;
if(now.y>=(gamePanel.getHeight()+10))
{GameScreen.score.upScore(10);break;}
setLocation(now);
Point playerL=GameScreen.player.getLocation();
Point bombL=getLocation();
int bombLeft=bombL.x;
int bombRight=bombL.x+Image_w;
int bombTop=bombL.y;
int bombBottom=bombL.y+Image_h;
int playerLeft=playerL.x;
int playerRight=playerL.x+GameScreen.player.Image_w-2;
int playerTop=playerL.y;
int playerBottom=playerL.y+GameScreen.player.Image_h-2;
boolean collision = true;
if(bombRight<playerLeft)
collision=false;
else if(bombLeft>playerRight)
collision=false;
else if(bombBottom<playerTop)
collision=false;
else if(bombTop>playerBottom)
collision=false;
if(collision==true){
System.out.println("충돌");
GameScreen.nowplay=false;
}
}
}
catch (InterruptedException e) {
e.printStackTrace();
}
}
public void paintComponent(Graphics g)
{
super.paintComponent(g);
}
}
このコードがボックス内のオブジェクト作成レベルの新しい18として指定されるのは、その18ピクセルが以下のように表示されるためである.キーは、ランダム値を使用してX(横方向)の位置にボックスを作成し、プレーヤーオブジェクトと同じ位置になる前にボックスのY(縦軸)を追加し続け、ボックスを下に移動します.
//사람 객체
class Man extends JLabel
{
int Image_w=26;
int Image_h=56;
Man()
{
super(new ImageIcon(".\\res\\images\\man2.png"));
setLocation(0,400);
setSize(Image_w,Image_h);
}
public void moveLeft()
{
Point now = getLocation();
if(now.x>0)
setLocation(now.x-5,now.y);
}
public void moveRight()
{
Point now = getLocation();
if(now.x<(GameScreen.gamePanel.getWidth()-(Image_w)))
setLocation(now.x+5,now.y);
}
}
//키 이벤트
@Override
public void keyPressed(KeyEvent arg0) {
// TODO Auto-generated method stub
switch(arg0.getKeyCode()){
case KeyEvent.VK_LEFT: //왼쪽 키
player.moveLeft();
break;
case KeyEvent.VK_RIGHT: //오른쪽 방향키
player.moveRight();
break;
}
}
5人のオブジェクトの方向キーを使ってキーイベントを移動し、イベントをハイライトします. //점수판
class Score extends JLabel
{
Score()
{
super("000");
setLocation(250,20);
setSize(28,10);
}
public void upScore(int score)
{
int now = Integer.parseInt(getText());
now+=score;
setText(Integer.toString(now));
}
}
上記のBoxオブジェクトのRUN()メソッドでは,その人のオブジェクトを超えると10となる.Reference
この問題について(Java Swing(Game1)), 我々は、より多くの情報をここで見つけました https://velog.io/@hack_ho/개발자가-심심할때テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol