java實(shí)現(xiàn)簡(jiǎn)單的彈球游戲
彈球游戲?qū)崿F(xiàn)原理:
隔一定時(shí)間(小于1秒)重新繪制圖像,因?yàn)镚raphics類是一個(gè)抽象類,創(chuàng)建子類的時(shí)候需要把所有涉及的方法都得重寫(xiě),所以這里使用的是創(chuàng)建Canvas的子類,只需要重寫(xiě)它的paint()方法來(lái)實(shí)現(xiàn)。這里我們用了鍵盤(pán)監(jiān)聽(tīng)事件、Timer類等。
游戲說(shuō)明:
該彈球游戲中的小球會(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)建畫(huà)布
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);
//定義鍵盤(pán)監(jiān)聽(tīng)器
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();
}
}



以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Spring Boot 參數(shù)校驗(yàn)的具體實(shí)現(xiàn)方式
這篇文章主要介紹了Spring Boot 參數(shù)校驗(yàn)的具體實(shí)現(xiàn)方式,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2019-06-06
完美解決request請(qǐng)求流只能讀取一次的問(wèn)題
這篇文章主要介紹了完美解決request請(qǐng)求流只能讀取一次的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-08-08
Springboot接收?Form?表單數(shù)據(jù)的示例詳解
這篇文章主要介紹了Springboot接收?Form?表單數(shù)據(jù)的實(shí)例代碼,本文通過(guò)圖文實(shí)例代碼相結(jié)合給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-08-08
java發(fā)送post請(qǐng)求使用multipart/form-data格式文件數(shù)據(jù)到接口代碼示例
這篇文章主要介紹了java發(fā)送post請(qǐng)求使用multipart/form-data格式文件數(shù)據(jù)到接口的相關(guān)資料,文中指定了數(shù)據(jù)編碼格式為UTF-8,并強(qiáng)調(diào)了所需依賴工具類,需要的朋友可以參考下2024-12-12
Java mysql詳細(xì)講解雙數(shù)據(jù)源配置使用
在開(kāi)發(fā)過(guò)程中我們常常會(huì)用到兩個(gè)數(shù)據(jù)庫(kù),一個(gè)數(shù)據(jù)用來(lái)實(shí)現(xiàn)一些常規(guī)的增刪改查,另外一個(gè)數(shù)據(jù)庫(kù)用來(lái)實(shí)時(shí)存數(shù)據(jù)。進(jìn)行數(shù)據(jù)的統(tǒng)計(jì)分析??梢宰x寫(xiě)分離??梢愿玫膬?yōu)化和提高效率;或者兩個(gè)數(shù)據(jù)存在業(yè)務(wù)分離的時(shí)候也需要多個(gè)數(shù)據(jù)源來(lái)實(shí)現(xiàn)2022-06-06
Java發(fā)送帶html標(biāo)簽內(nèi)容的郵件實(shí)例代碼
下面小編就為大家?guī)?lái)一篇Java發(fā)送帶html標(biāo)簽內(nèi)容的郵件實(shí)例代碼。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2016-11-11

