最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

java實現(xiàn)簡單的彈球游戲

 更新時間:2017年08月09日 09:10:33   作者:iT_txw  
這篇文章主要為大家詳細(xì)介紹了java實現(xiàn)簡單的彈球游戲,具有一定的參考價值,感興趣的小伙伴們可以參考一下

彈球游戲?qū)崿F(xiàn)原理:

  隔一定時間(小于1秒)重新繪制圖像,因為Graphics類是一個抽象類,創(chuàng)建子類的時候需要把所有涉及的方法都得重寫,所以這里使用的是創(chuàng)建Canvas的子類,只需要重寫它的paint()方法來實現(xiàn)。這里我們用了鍵盤監(jiān)聽事件、Timer類等。

游戲說明:

  該彈球游戲中的小球會隨著時間增加速度且速度最多是橫向速度和垂直速度為10。當(dāng)小球的y坐標(biāo)(垂直坐標(biāo))大于球拍的y坐標(biāo)(垂直坐標(biāo))即判斷游戲結(jié)束。控制臺顯示的是小球的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;
 //小球的大小、運行速度、坐標(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();
 //定義時間類
 Timer timer;
 //游戲是否結(jié)束的旗標(biāo)
 private boolean isLose=false;
 //設(shè)置游戲等級
 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();
 }
} 

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • Servlet的線程安全問題

    Servlet的線程安全問題

    本文主要介紹了Servlet的線程安全問題,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-02-02
  • Spring Boot 參數(shù)校驗的具體實現(xiàn)方式

    Spring Boot 參數(shù)校驗的具體實現(xiàn)方式

    這篇文章主要介紹了Spring Boot 參數(shù)校驗的具體實現(xiàn)方式,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2019-06-06
  • Flowable中定時器的玩法詳解

    Flowable中定時器的玩法詳解

    這篇文章主要為大家詳細(xì)介紹了Flowable中定時器的各種玩法,文中的示例代碼講解詳細(xì),具有一定的借鑒價值,感興趣的小伙伴可以跟隨小編一起了解一下
    2022-11-11
  • 完美解決request請求流只能讀取一次的問題

    完美解決request請求流只能讀取一次的問題

    這篇文章主要介紹了完美解決request請求流只能讀取一次的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-08-08
  • Springboot接收?Form?表單數(shù)據(jù)的示例詳解

    Springboot接收?Form?表單數(shù)據(jù)的示例詳解

    這篇文章主要介紹了Springboot接收?Form?表單數(shù)據(jù)的實例代碼,本文通過圖文實例代碼相結(jié)合給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-08-08
  • java發(fā)送post請求使用multipart/form-data格式文件數(shù)據(jù)到接口代碼示例

    java發(fā)送post請求使用multipart/form-data格式文件數(shù)據(jù)到接口代碼示例

    這篇文章主要介紹了java發(fā)送post請求使用multipart/form-data格式文件數(shù)據(jù)到接口的相關(guān)資料,文中指定了數(shù)據(jù)編碼格式為UTF-8,并強調(diào)了所需依賴工具類,需要的朋友可以參考下
    2024-12-12
  • Spring核心容器之BeanDefinition解析

    Spring核心容器之BeanDefinition解析

    這篇文章主要介紹了Spring核心容器之BeanDefinition解析,Spring 將管理的對象稱之為 Bean,容器會先實例化 Bean,然后自動注入,實例化的過程就需要依賴 BeanDefinition,需要的朋友可以參考下
    2023-11-11
  • 深入了解java中常見的五種比較方法

    深入了解java中常見的五種比較方法

    在程序的世界里面,比較也是必不可少的,通過比較可以確定對象的相對順序、相等性以及其他比較條件,下面我們就來深入了解一下java中常見的五種比較方法吧
    2023-12-12
  • Java mysql詳細(xì)講解雙數(shù)據(jù)源配置使用

    Java mysql詳細(xì)講解雙數(shù)據(jù)源配置使用

    在開發(fā)過程中我們常常會用到兩個數(shù)據(jù)庫,一個數(shù)據(jù)用來實現(xiàn)一些常規(guī)的增刪改查,另外一個數(shù)據(jù)庫用來實時存數(shù)據(jù)。進(jìn)行數(shù)據(jù)的統(tǒng)計分析??梢宰x寫分離。可以更好的優(yōu)化和提高效率;或者兩個數(shù)據(jù)存在業(yè)務(wù)分離的時候也需要多個數(shù)據(jù)源來實現(xiàn)
    2022-06-06
  • Java發(fā)送帶html標(biāo)簽內(nèi)容的郵件實例代碼

    Java發(fā)送帶html標(biāo)簽內(nèi)容的郵件實例代碼

    下面小編就為大家?guī)硪黄狫ava發(fā)送帶html標(biāo)簽內(nèi)容的郵件實例代碼。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-11-11

最新評論

松潘县| 尉氏县| 苍梧县| 岳普湖县| 临漳县| 泽普县| 南乐县| 肥乡县| 金阳县| 西贡区| 临沧市| 启东市| 包头市| 高淳县| 林西县| 保亭| 六枝特区| 友谊县| 乳山市| 泽库县| 马山县| 无为县| 乌拉特前旗| 上蔡县| 吉安市| 晋州市| 原平市| 林周县| 都匀市| 甘德县| 会宁县| 高要市| 固阳县| 民乐县| 拜泉县| 台中市| 岚皋县| 郧西县| 新郑市| 沛县| 铜山县|