日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > java >内容正文

java

java炫舞_Java 炫舞按键功能 DancingPlay (整理)

發(fā)布時間:2024/7/23 java 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java炫舞_Java 炫舞按键功能 DancingPlay (整理) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

/*** Java 炫舞按鍵功能 DancingPlay (整理)

* 2016-1-2 深圳 南山平山村 曾劍鋒

*

* 設(shè)計聲明:

* 1、本次設(shè)計是模仿QQ炫舞類游戲,當(dāng)圖標到紅色的檢測區(qū)域時,按下正確的方向鍵,

* 將會得到good nice,運行一下您就懂了;

* 2、本設(shè)計沒有在配色、視覺效果上作改善,主要是因為個人對那些方面不懂,所以以這

* 種簡陋的形式呈現(xiàn)給大家,望大家海涵;

* 3、如果有朋友要寫本程序,請注意按鍵監(jiān)聽的聚焦面板一定要能夠獲得聚焦,要不然,

* 按鍵會失效,如本程序中的dancingPlay.setFocusable(true);很重要。

*

* 注意事項:

* 1、本程序為java程序,同時感謝您花費寶貴的時間來閱讀本文檔;

* 2、請注意包名為:dance,文件名為:DancingPlay,請注意檢查,

* 以防一些不必要的麻煩;

* 3、在完成確認2中的內(nèi)容后,本程序可以直接運行,因為本軟件說明都在注釋中;

* 4、本設(shè)計是繼以前的一些設(shè)計寫的,所以在面已說明的東西,不再詳述,同時由于個人能力、閱歷等

* 原因,有些細節(jié)可能并沒有詳細闡述,或者有疏漏,請諒解。

* 設(shè)計思路:

* 1、 每一個方向圖標采用了仿俄羅斯方塊(tetis)的工廠方法產(chǎn)生,所以每個方向塊都是一個對象,

* 是由類DanceDirection創(chuàng)建的;

* 2、 用一個隊列(queue)保存屏幕上的DanceDirection;

* 3、 用一個線程完成DanceDirection在queue的添加,刪除,以及queue中的DanceDirection的下落;

* 4、 添加按鍵監(jiān)聽事件,用于判斷處于檢測區(qū)域是否有DanceDirection以及是否正確。

**/

packagedemo;importjava.awt.Color;importjava.awt.Font;importjava.awt.Graphics;importjava.awt.Toolkit;importjava.awt.event.KeyAdapter;importjava.awt.event.KeyEvent;importjava.util.Iterator;importjava.util.LinkedList;importjava.util.Queue;importjavax.swing.JFrame;importjavax.swing.JPanel;public class DancingPlay extendsJPanel{/*** 時間計數(shù)器,主要用于在一定間隔時間里添加一個DanceDirection*/

private long timeCount = 0;/*** 檢測框的長度,在軟件中就是那個紅色的框的長度*/

private int square = DanceDirection.FRAME_LENGTH+6;/*** 當(dāng)按鍵和方向標在紅色框的檢測范圍內(nèi),且按鍵正確時,會被幅值為true*/

private boolean niceFlag = false;/*** 用于對good nice顯示時間進行計數(shù)*/

private int dispointNiceString = 10;/*** 使用LinkedList保存當(dāng)前有的圖標*/

private Queue queue = new LinkedList();/*** 1. 繪制queue中的方向圖標

* 2. 繪制紅色的檢測區(qū)域

* 3. 繪制good nice*/@Overridepublic voidpaint(Graphics graphics) {super.paint(graphics);

drawDerction(graphics);

drawSquare(graphics);

drawNice(graphics);

}/*** 使用迭代器,從queue中提取方向鍵,并調(diào)用對應(yīng)的繪圖功能,將圖繪制在面板上

*@paramgraphics*/

private voiddrawDerction(Graphics graphics) {

Iterator iterator =queue.iterator();while(iterator.hasNext()) {

iterator.next().drawImage(graphics);

}

}/*** 繪制good nice

* 1. 先改變顏色

* 2. 將字體字號改成合適的

*@paramgraphics*/

private voiddrawNice(Graphics graphics) {if(niceFlag) {

graphics.setColor(Color.red);

Font font=graphics.getFont();

Font font2= new Font(font.getName(), font.getStyle(), font.getSize()+100);

graphics.setFont(font2);

graphics.drawString("good", 1024/2-square-280, 600);

graphics.drawString("nice", 1024/2+square, 600);

}

}/*** 繪制紅色的檢測區(qū)域

*@paramgraphics*/

private voiddrawSquare(Graphics graphics) {

graphics.setColor(Color.red);for (int i = 0; i < 6; i+=2) {

graphics.drawRoundRect(1024/2-(square+i)/2, 500-i/2, square+i, square+i, 5, 5);

}

}public static voidmain(String[] args) {

JFrame jFrame= newJFrame();

DancingPlay dancingPlay= newDancingPlay();

jFrame.setSize(1024, 768);

jFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//將jFrame居中

jFrame.setLocation( (Toolkit.getDefaultToolkit().getScreenSize().width-1024)/2,

(Toolkit.getDefaultToolkit().getScreenSize().height-768)/2);

jFrame.add(dancingPlay);

dancingPlay.setFocusable(true);

dancingPlay.run();

jFrame.setVisible(true);

}/*** 1. 按鍵按下時,是否有方向圖標在檢測范圍內(nèi),

* 2. 如果有,在檢查圖標的方向與按鍵的方向是否一致,

* 3. 如果一致,niceFlag賦為true

*@paramkeyNumber*/

public void checkKey(intkeyNumber){

Iterator iterator =queue.iterator();while(iterator.hasNext()) {

DanceDirection danceDirection=iterator.next();if (Math.abs(danceDirection.positionY - 500) <= 30

&& danceDirection.direction ==keyNumber) {

niceFlag= true;

}

}

}/*** 1.用于添加鍵盤監(jiān)聽事件

* 2.啟動一個線程維護動態(tài)效果*/

public voidrun(){this.addKeyListener(newKeyAdapter() {

@Overridepublic voidkeyPressed(KeyEvent e) {switch(e.getKeyCode()) {caseKeyEvent.VK_UP:

checkKey(3);break;caseKeyEvent.VK_RIGHT:

checkKey(1);break;caseKeyEvent.VK_LEFT:

checkKey(2);break;caseKeyEvent.VK_DOWN:

checkKey(4);break;

}

repaint();

}

});

Thread thread= newThread(){public voidrun(){while (true) {try{//1. 完成對queue中每個DanceDirection的positionY加如相應(yīng)的下移值//2. 將不再屏幕范圍內(nèi)的DanceDirection移除

Iterator iterator =queue.iterator();while(iterator.hasNext()) {

DanceDirection danceDirection=iterator.next();if (danceDirection.positionY >= 768) {

iterator.remove();

}

danceDirection.positionY+= 6;

}//檢查計算good nice的顯示時間

if(niceFlag) {

dispointNiceString++;if (dispointNiceString >= 10) {

niceFlag= false;

dispointNiceString= 0;

}

}//1. 每20*25秒添加一次圖標//2. 添加的方式為隨即添加,目前的概率為2/3

if(timeCount++%25 == 0){if (Math.random()*4 > 1) {

queue.offer(DanceDirection.getInstance());

}

}

Thread.sleep(20);

}catch(InterruptedException e) {

e.printStackTrace();

}

repaint();

}

}

};

thread.start();

}

}classDanceDirection {/*** 圖標框的邊長*/

public static final int FRAME_LENGTH = 50;/*** 方向鍵右的常量*/

public static final int RIGHT = 1;/*** 方向鍵左的常量*/

public static final int LEFT = 2;/*** 方向鍵上的常量*/

public static final int UP = 3;/*** 方向鍵下的常量*/

public static final int DOWN = 4;/*** 每個DanceDirection的初始X,Y坐標*/

public int positionX = 1024/2;public int positionY = 0-FRAME_LENGTH;/*** 方向值*/

protected intdirection;/*** 私有構(gòu)造函數(shù)*/

privateDanceDirection(){

}/*** 靜態(tài)的工廠方法

*@return

*/

public staticDanceDirection getInstance(){return newDance();

}/*** 為工廠構(gòu)造方法提供的靜態(tài)類,為了得到隨即的方向圖標

*@authorsoft1

**/

static class Dance extendsDanceDirection{publicDance() {

direction= (int)(Math.random()*4+1);

}

}/*** 方向圖標繪制函數(shù)

*@paramgraphics*/

public voiddrawImage(Graphics graphics) {

graphics.setColor(Color.blue);

graphics.fillRoundRect( positionX-FRAME_LENGTH/2,

positionY,

FRAME_LENGTH,

FRAME_LENGTH,

FRAME_LENGTH/5,

FRAME_LENGTH/5);switch(direction) {case 1:

rightDirection(graphics);break;case 2:

leftDirection(graphics);break;case 3:

upDirection(graphics);break;case 4:

downDirection(graphics);break;

}

}/*** 方向向左

*@paramgraphics*/

private voidleftDirection(Graphics graphics) {

graphics.setColor(Color.yellow);for (int i = 0; i < 3; i++) {int[] arrayX = {positionX-FRAME_LENGTH/2+2+15*i,

positionX-FRAME_LENGTH/2+2+15+15*i,

positionX-FRAME_LENGTH/2+2+15+15*i};int[] arrayY = {positionY+FRAME_LENGTH/2,

positionY+FRAME_LENGTH/2-20,

positionY+FRAME_LENGTH/2+20};

graphics.fillPolygon(arrayX, arrayY, arrayX.length);

}

}/*** 方向向下

*@paramgraphics*/

private voiddownDirection(Graphics graphics) {

graphics.setColor(Color.green);for (int i = 0; i < 3; i++) {int[] arrayX ={positionX,

positionX+20,

positionX-20};int[] arrayY = {positionY+FRAME_LENGTH-2-15*i,

positionY+FRAME_LENGTH-2-15-15*i,

positionY+FRAME_LENGTH-2-15-15*i};

graphics.fillPolygon(arrayX, arrayY, arrayX.length);

}

}/*** 方向向右

*@paramgraphics*/

private voidrightDirection(Graphics graphics) {

graphics.setColor(Color.magenta);for (int i = 0; i < 3; i++) {int[] arrayX = {positionX+FRAME_LENGTH/2-2-15*i,

positionX+FRAME_LENGTH/2-2-15-15*i,

positionX+FRAME_LENGTH/2-2-15-15*i};int[] arrayY = {positionY+FRAME_LENGTH/2,

positionY+FRAME_LENGTH/2+20,

positionY+FRAME_LENGTH/2-20};

graphics.fillPolygon(arrayX, arrayY, arrayX.length);

}

}/*** 方向向上

*@paramgraphics*/

private voidupDirection(Graphics graphics) {

graphics.setColor(Color.pink);for (int i = 0; i < 3; i++) {int[] arrayX ={positionX,

positionX+20,

positionX-20};int[] arrayY = {positionY+15*i,

positionY+2+15+15*i,

positionY+2+15+15*i};

graphics.fillPolygon(arrayX, arrayY, arrayX.length);

}

}

@OverridepublicString toString() {return "direciton:"+direction+"\tpositionX:"+positionX+"\tpositionY:"+positionY;

}

}

總結(jié)

以上是生活随笔為你收集整理的java炫舞_Java 炫舞按键功能 DancingPlay (整理)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。