> Java > java지도 시간 > 본문

Java에서 핀볼 게임을 구현하기 위한 간단한 코드 공유

黄舟
풀어 주다: 2017-08-10 10:10:40
원래의
3358명이 탐색했습니다.

이 글은 주로 Java로 간단한 핀볼 게임을 구현하는 방법을 자세히 소개하며, 관심 있는 친구들은 참고할 수 있습니다.

핀볼 게임 구현 원리:

 일정 시간(1초 미만) 후 ) Graphics 클래스는 추상 클래스이고 하위 클래스를 생성할 때 관련된 모든 메서드를 다시 작성해야 하기 때문에 이미지를 다시 그립니다. 따라서 여기에서는 Canvas의 하위 클래스를 생성하고 해당 페인트() 메서드만 다시 작성하면 됩니다. 달성하기 위해. 여기서는 키보드 청취 이벤트, Timer 클래스 등을 사용합니다.

게임 설명:

 이 핀볼 게임의 작은 공은 시간이 지남에 따라 속도가 증가하며 최대 속도는 수평 속도와 수직 속도의 10입니다. 볼의 y좌표(세로좌표)가 라켓의 y좌표(세로좌표)보다 클 경우 게임오버로 판정됩니다. 콘솔에는 x 방향과 y 방향의 공 속도가 표시됩니다.


import java.awt.*;
import java.util.Random;
import javax.swing.Timer;
import java.awt.event.*; 
public class PinBall 
{
 private Frame f=new Frame("弹球游戏");
 Random rand=new Random();
 //桌面的宽度以及高度
 private final int TABLE_WIDTH=300;
 private final int TABLE_HEIGHT=400;
 //球拍的宽度以及高度以及水平位置、垂直位置
 private final int RACKET_WIDTH=60;
 private final int RACKET_HEIGHT=20;
 private int racketX=rand.nextInt(24)*10;
 private int racketY=300;
 //小球的大小、运行速度、坐标
 private final int BALL_SIZE=16;
 private int ySpeed=1;
 private double xyRate=1;
 private int xSpeed=(int)(xyRate*ySpeed);
 private int ballX=rand.nextInt(284);
 private int ballY=1;
 //创建画布
 private MyCanvas tableArea=new MyCanvas();
 //定义时间类
 Timer timer;
 //游戏是否结束的旗标
 private boolean isLose=false;
 //设置游戏等级
 private int time_times=1;
 public void init(){
  tableArea.setPreferredSize(new Dimension(TABLE_WIDTH,TABLE_HEIGHT));
  f.add(tableArea);
  //定义键盘监听器
  KeyAdapter keyProcessor=new KeyAdapter()
  {
   public void keyPressed(KeyEvent ke){
    if(ke.getKeyCode()==KeyEvent.VK_LEFT){
     if(racketX>0)
      racketX-=10;
    }
    if(ke.getKeyCode()==KeyEvent.VK_RIGHT){
     if(racketX<TABLE_WIDTH-RACKET_WIDTH)
      racketX+=10;
    }
   }

  };
  f.addKeyListener(keyProcessor);
  //tableArea.addKeyListener(keyProcessor);
  ActionListener taskPerformer=evt->
  {
   //小球碰到左边框或右边框
   if(ballX<=0||ballX>=TABLE_WIDTH-BALL_SIZE){
    xSpeed=-xSpeed;
   }
   if(ballY>racketY-BALL_SIZE&&(ballX<racketX||ballX>racketX+RACKET_WIDTH-BALL_SIZE)){
    timer.stop();
    isLose=true;
    tableArea.repaint();
   }else if(ballY<=0||(ballY>=racketY-BALL_SIZE&&ballX>racketX&&ballX<=racketX+RACKET_WIDTH)){
    ySpeed=-ySpeed;
   }
   ballY+=ySpeed;
   ballX+=xSpeed;
   tableArea.repaint();
   if((xSpeed<10&&xSpeed>-10)&&(ySpeed<10&&ySpeed>-10)){
    time_times++;
   }
   if(time_times==10){
    if(xSpeed>0){
     xSpeed++;
    }else{
     xSpeed--;
    }
    if(ySpeed>0){
     ySpeed++;
    }else{
     ySpeed--;
    }
    time_times-=10;
    System.out.println(xSpeed+" "+ySpeed);
   }
  };
  timer=new Timer(100,taskPerformer);
  timer.start();
  f.pack();
  f.setVisible(true);
 }
 class MyCanvas extends Canvas
 {
  public void paint(Graphics g){
   if(isLose){
    g.setColor(new Color(255,0,0));
    g.setFont(new Font("Times",Font.BOLD,30));
    g.drawString("游戏结束",50,200);
   }else{
    g.setColor(new Color(240,240,80));
    g.fillOval(ballX,ballY,BALL_SIZE,BALL_SIZE);
    g.setColor(new Color(80,80,200));
    g.fillRect(racketX,racketY,RACKET_WIDTH,RACKET_HEIGHT);
   }
  }
 }
 public static void main(String[] args) 
 {
  new PinBall().init();
 }
}
로그인 후 복사

위 내용은 Java에서 핀볼 게임을 구현하기 위한 간단한 코드 공유의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿