Java Swing(Game1)


Threadを使用して
  • ボックスオブジェクト
  • を移動し続ける.
  • ボックス(ユーザのオブジェクトを作成し、そのサイズを指定するためのボックス)-鍵イベントによってユーザを移動する
  • .
    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となる.