600字范文,内容丰富有趣,生活中的好帮手!
600字范文 > java实现qq炫舞音乐播放功能_仿QQ炫舞按键功能--Java原创新作品

java实现qq炫舞音乐播放功能_仿QQ炫舞按键功能--Java原创新作品

时间:2021-02-03 03:44:37

相关推荐

java实现qq炫舞音乐播放功能_仿QQ炫舞按键功能--Java原创新作品

/**

*设计声明:

*1、本次设计是模仿QQ炫舞类游戏,当图标到红色的检测区域时,按下正确的方向键,

*将会得到goodnice,运行一下您就懂了;

*2、本设计没有在配色、视觉效果上作改善,主要是因为个人对那些方面不懂,所以以这

*种简陋的形式呈现给大家,望大家海涵;

*3、如果有朋友要写本程序,请注意按键监听的聚焦面板一定要能够获得聚焦,要不然,

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

*

*注意事项:

*1、本程序为java程序,同时感谢您花费宝贵的时间来阅读本文档;

*2、请注意包名为:dance,文件名为:DancingPlay,请注意检查,

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

*3、在完成确认2中的内容后,本程序可以直接运行,因为本软件说明都在注释中;

*4、本设计是继以前的一些设计写的,所以在面已说明的东西,不再详述,同时由于个人能力、阅历等

*原因,有些细节可能并没有详细阐述,或者有疏漏,请谅解。

*设计思路:

*1、每一个方向图标采用了仿俄罗斯方块(tetis)的工厂方法产生,所以每个方向块都是一个对象,

*是由类DanceDirection创建的;

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

*3、用一个线程完成DanceDirection在queue的添加,删除,以及queue中的DanceDirection的下落;

*4、添加按键监听事件,用于判断处于检测区域是否有DanceDirection以及是否正确。

*

*/packagedance;

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;

publicclassDancingPlayextendsJPanel{

/**

*时间计数器,主要用于在一定间隔时间里添加一个DanceDirection

*/

privatelongtimeCount=0;

/**

*检测框的长度,在软件中就是那个红色的框的长度

*/

privateintsquare=DanceDirection.FRAME_LENGTH+6;

/**

*当按键和方向标在红色框的检测范围内,且按键正确时,会被幅值为true

*/

privatebooleanniceFlag=false;

/**

*用于对goodnice显示时间进行计数

*/

privateintdispointNiceString=10;

/**

*使用LinkedList保存当前有的图标

*/

privateQueuequeue=newLinkedList();

/**

*1.绘制queue中的方向图标

*2.绘制红色的检测区域

*3.绘制goodnice

*/

@Override

publicvoidpaint(Graphicsgraphics){

super.paint(graphics);

drawDerction(graphics);

drawSquare(graphics);

drawNice(graphics);

}

/**

*使用迭代器,从queue中提取方向键,并调用对应的绘图功能,将图绘制在面板上

*@paramgraphics

*/

privatevoiddrawDerction(Graphicsgraphics){

Iteratoriterator=queue.iterator();

while(iterator.hasNext()){

iterator.next().drawImage(graphics);

}

}

/**

*绘制goodnice

*1.先改变颜色

*2.将字体字号改成合适的

*@paramgraphics

*/

privatevoiddrawNice(Graphicsgraphics){

if(niceFlag){

graphics.setColor(Color.red);

Fontfont=graphics.getFont();

Fontfont2=newFont(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);

}

}

/**

*绘制红色的检测区域

*@paramgraphics

*/

privatevoiddrawSquare(Graphicsgraphics){

graphics.setColor(Color.red);

for(inti=0;i

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

}

}

publicstaticvoidmain(String[]args){

JFramejFrame=newJFrame();

DancingPlaydancingPlay=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.按键按下时,是否有方向图标在检测范围内,

*2.如果有,在检查图标的方向与按键的方向是否一致,

*3.如果一致,niceFlag赋为true

*@paramkeyNumber

*/

publicvoidcheckKey(intkeyNumber){

Iteratoriterator=queue.iterator();

while(iterator.hasNext()){

DanceDirectiondanceDirection=iterator.next();

if(Math.abs(danceDirection.positionY-500)<=30

&&danceDirection.direction==keyNumber){

niceFlag=true;

}

}

}

/**

*1.用于添加键盘监听事件

*2.启动一个线程维护动态效果

*/

publicvoidrun(){

this.addKeyListener(newKeyAdapter(){

@Override

publicvoidkeyPressed(KeyEvente){

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();

}

});

Threadthread=newThread(){

publicvoidrun(){

while(true){

try{

//1.完成对queue中每个DanceDirection的positionY加如相应的下移值

//2.将不再屏幕范围内的DanceDirection移除

Iteratoriterator=queue.iterator();

while(iterator.hasNext()){

DanceDirectiondanceDirection=iterator.next();

if(danceDirection.positionY>=768){

iterator.remove();

}

danceDirection.positionY+=6;

}

//检查计算goodnice的显示时间

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(InterruptedExceptione){

e.printStackTrace();

}

repaint();

}

}

};

thread.start();

}

}

classDanceDirection{

/**

*图标框的边长

*/

publicstaticfinalintFRAME_LENGTH=50;

/**

*方向键右的常量

*/

publicstaticfinalintRIGHT=1;

/**

*方向键左的常量

*/

publicstaticfinalintLEFT=2;

/**

*方向键上的常量

*/

publicstaticfinalintUP=3;

/**

*方向键下的常量

*/

publicstaticfinalintDOWN=4;

/**

*每个DanceDirection的初始X,Y坐标

*/

publicintpositionX=1024/2;

publicintpositionY=0-FRAME_LENGTH;

/**

*方向值

*/

protectedintdirection;

/**

*私有构造函数

*/

privateDanceDirection(){

}

/**

*静态的工厂方法

*@return

*/

publicstaticDanceDirectiongetInstance(){

returnnewDance();

}

/**

*为工厂构造方法提供的静态类,为了得到随即的方向图标

*@authorsoft1

*

*/

staticclassDanceextendsDanceDirection{

publicDance(){

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

}

}

/**

*方向图标绘制函数

*@paramgraphics

*/

publicvoiddrawImage(Graphicsgraphics){

graphics.setColor(Color.blue);

graphics.fillRoundRect(positionX-FRAME_LENGTH/2,

positionY,

FRAME_LENGTH,

FRAME_LENGTH,

FRAME_LENGTH/5,

FRAME_LENGTH/5);

switch(direction){

case1:

rightDirection(graphics);

break;

case2:

leftDirection(graphics);

break;

case3:

upDirection(graphics);

break;

case4:

downDirection(graphics);

break;

}

}

/**

*方向向左

*@paramgraphics

*/

privatevoidleftDirection(Graphicsgraphics){

graphics.setColor(Color.yellow);

for(inti=0;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

*/

privatevoiddownDirection(Graphicsgraphics){

graphics.setColor(Color.green);

for(inti=0;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

*/

privatevoidrightDirection(Graphicsgraphics){

graphics.setColor(Color.magenta);

for(inti=0;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

*/

privatevoidupDirection(Graphicsgraphics){

graphics.setColor(Color.pink);

for(inti=0;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);

}

}

@Override

publicStringtoString(){

return"direciton:"+direction+"\tpositionX:"+positionX+"\tpositionY:"+positionY;

}

}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。