Dieser Artikel stellt hauptsächlich die Implementierung eines einfachen Flipperspiels in Java im Detail vor, das einen gewissen Referenzwert hat.
Prinzip der Flipperspielimplementierung:
Zeichnen Sie das Bild neu Nach einer bestimmten Zeitspanne (weniger als 1 Sekunde) müssen alle beteiligten Methoden beim Erstellen einer Unterklasse neu geschrieben werden. Hier wird also nur eine Unterklasse von Canvas erstellt Überschreiben Sie die Methode paint(), um dies zu erreichen. Hier verwenden wir Tastatur-Hörereignisse, Timer-Klassen usw.
Spielbeschreibung:
Die kleine Kugel in diesem Flipperspiel erhöht mit der Zeit ihre Geschwindigkeit und die maximale Geschwindigkeit beträgt 10 horizontale Geschwindigkeit und vertikale Geschwindigkeit. Wenn die Y-Koordinate (vertikale Koordinate) des Balls größer ist als die y-Koordinate (vertikale Koordinate) des Schlägers, gilt das Spiel als beendet. Die Konsole zeigt die Geschwindigkeit des Balls in x-Richtung und y-Richtung an.
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(); } }
Das obige ist der detaillierte Inhalt vonEinfache Codefreigabe zur Realisierung eines Flipperspiels in Java. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!