您好,登錄后才能下訂單哦!
本篇文章給大家分享的是有關(guān)利用java編寫一個(gè)彈球小游戲,小編覺得挺實(shí)用的,因此分享給大家學(xué)習(xí),希望大家閱讀完這篇文章后可以有所收獲,話不多說,跟著小編一起來看看吧。
彈球游戲?qū)崿F(xiàn)原理:
隔一定時(shí)間(小于1秒)重新繪制圖像,因?yàn)镚raphics類是一個(gè)抽象類,創(chuàng)建子類的時(shí)候需要把所有涉及的方法都得重寫,所以這里使用的是創(chuàng)建Canvas的子類,只需要重寫它的paint()方法來實(shí)現(xiàn)。這里我們用了鍵盤監(jiān)聽事件、Timer類等。
游戲說明:
該彈球游戲中的小球會(huì)隨著時(shí)間增加速度且速度最多是橫向速度和垂直速度為10。當(dāng)小球的y坐標(biāo)(垂直坐標(biāo))大于球拍的y坐標(biāo)(垂直坐標(biāo))即判斷游戲結(jié)束??刂婆_(tái)顯示的是小球的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; //小球的大小、運(yùn)行速度、坐標(biāo) 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; //創(chuàng)建畫布 private MyCanvas tableArea=new MyCanvas(); //定義時(shí)間類 Timer timer; //游戲是否結(jié)束的旗標(biāo) private boolean isLose=false; //設(shè)置游戲等級(jí) private int time_times=1; public void init(){ tableArea.setPreferredSize(new Dimension(TABLE_WIDTH,TABLE_HEIGHT)); f.add(tableArea); //定義鍵盤監(jiān)聽器 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("游戲結(jié)束",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編寫一個(gè)彈球小游戲,小編相信有部分知識(shí)點(diǎn)可能是我們?nèi)粘9ぷ鲿?huì)見到或用到的。希望你能通過這篇文章學(xué)到更多知識(shí)。更多詳情敬請(qǐng)關(guān)注億速云行業(yè)資訊頻道。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。