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

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

* 2016-1-2 深圳 南山平山村 曾剑锋

*

* 设计声明:

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

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

* 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以及是否正确。

**/

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{/*** 时间计数器,主要用于在一定间隔时间里添加一个DanceDirection*/

private long timeCount = 0;/*** 检测框的长度,在软件中就是那个红色的框的长度*/

private int square = DanceDirection.FRAME_LENGTH+6;/*** 当按键和方向标在红色框的检测范围内,且按键正确时,会被幅值为true*/

private boolean niceFlag = false;/*** 用于对good nice显示时间进行计数*/

private int dispointNiceString = 10;/*** 使用LinkedList保存当前有的图标*/

private Queue queue = new LinkedList();/*** 1. 绘制queue中的方向图标

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

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

drawDerction(graphics);

drawSquare(graphics);

drawNice(graphics);

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

*@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);

}

}/*** 绘制红色的检测区域

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

* 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.用于添加键盘监听事件

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

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加如相应的下移值//2. 将不再屏幕范围内的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;/*** 私有构造函数*/

privateDanceDirection(){

}/*** 静态的工厂方法

*@return

*/

public staticDanceDirection getInstance(){return newDance();

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

*@authorsoft1

**/

static class Dance extendsDanceDirection{publicDance() {

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

}

}/*** 方向图标绘制函数

*@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;

}

}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/498360.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【业界】Facebook的基础AI算法是如何驱动社交网络的发展?

来源&#xff1a;专知 概要&#xff1a;尽管Instagram的工程师对算做了很多调整&#xff0c;事实上这些调整的大部分功能都来自Facebook的新闻推送算法&#xff0c;这显示了社交媒体基础引擎的主导地位和成功。 Facebook的基础AI算法是如何驱动社交网络的发展。 Instagram工程师…

java xml textview居中_android—图文垂直居中 TextView+SpannableString

自我感觉做什么事情都是事倍功半&#xff0c;同样性格还是丢三落四的人。记录每一次解决问题的思路经过&#xff0c;以供自我学最终效果前几天让做一个效果如上图&#xff0c;于是引发了一些列的思路风暴&#xff1a;(思路1)TextViewHtml的形式&#xff1a;html在网页实现很常见…

java 动态添加定时器_quartz实现任务动态增加和删除

场景这几天做项目的时候遇到了个状态自动切换的场景。该场景具体情况如下&#xff1a;用户可以创建多个活动活动有开始时间和结束时间活动有个状态&#xff1a;未上线、未开始(上线但未到开始时间)、进行中(上线且处于开始时间和结束时间之间)、已结束(上线且处于活动结束时间之…

未来IT的三驾马车:AI、物联网和混合云

来源&#xff1a;物联网智库 概要&#xff1a;未来的信息技术系统日益专注于数据在哪里生成和处理、数据如何提供和收集&#xff0c;以及这些数据移动起来有多快。找到一条最高效的路径是关键。 物联网、AI和混合云是同一个三角形的三条边&#xff0c;是同一条凳子的三条腿&…

java中po代码示例_java操作oracle常用的示例代码详解

import java.sql.Connection;import java.sql.DriverManager;import java.sql.ResultSet;import java.sql.SQLException;import java.sql.Statement;public class DBTools {// 定义一个方法&#xff0c;用来得到一个"新的"连接对象public static Connection getConne…

梅宏院士:软件定义的未来——万物皆可互联,一切均可编程 | CNCC 2017

作者&#xff1a;杨文 摘要&#xff1a;结合当下的人工智能热潮&#xff0c;梅宏教授认为我们正在进入一个软件定义的时代。软件定义的技术本质是把原先一体化的硬件设施打破&#xff0c;将基础硬件虚拟化并提供标准化的基本功能&#xff0c;然后通过管控软件&#xff0c;控制其…

php字符串转int,php怎样将字符串转为int类型

php将字符串转为int类型的方法&#xff1a;可以利用内置函数intval()来实现。intval()函数用于获取变量的整数值&#xff0c;如果执行成功则返回integer值&#xff0c;如果执行失败则返回0&#xff0c;例如&#xff1a;【intval(“1”)】。函数介绍&#xff1a;intval() 函数用…

对抗攻击最新研究:仅修改「一个像素」即可骗过神经网络!

编译&#xff1a;BaymaxZ 作者&#xff1a;Jiawei Su、Danilo Vasconcellos Vargas、Sakurai Kouichi&#xff08;九州大学&#xff09; 摘要&#xff1a;在图像识别领域&#xff0c;基于DNN的方法克服了传统的图像处理技术&#xff0c;甚至达到媲美人类的结果。 最近的研究证实…

php 去掉不可见字符串,php删除不可见的Unicode字符

在论坛/社区中一般帖子/文章的标题肯定是要求不为空的&#xff0c;但是今天发现了一个神奇的事情&#xff0c;我在后台php代码中限制了title不能为空。if(preg_match(/^\s*$/, $val)) return false;但是神奇的发现在数据库中有几篇文章文章的title是空的(眼睛看起来)而且鼠标点…

李飞飞新研究:基于深度学习和视觉化语言来了解不同物体间的关系

来源&#xff1a;凤凰科技 概要&#xff1a;最近她所在的实验室正在做一项新研究&#xff0c;基于深度学习和视觉化语言模式了解不同物体之间的关系。 2017未来科学大奖颁奖典礼暨未来论坛年会28、29日在京举办&#xff0c;斯坦福大学终身教授、谷歌云首席科学家李飞飞在人工智…

php设置文件权限问题,php以fastCGI的方式运行时文件系统权限问题及解决方法

今天准备将一个php demo放在IIS下运行&#xff0c;网站在IIS下的配置是这样的&#xff1a;应用程序池是集成模式下的.net framework 2.0(2.0或4.0没什么关系&#xff0c;因为php以fastCGI的方式在跑), 应用程序池标识配置为IIS内置的NETWORKSERVICE, 使用的认证方式为匿名身份验…

马化腾公开信:AI将成为基础设施,腾讯要打造“数字生态共同体”

来源&#xff1a;亿欧 概要&#xff1a;马化腾认为&#xff0c;云计算、大数据、人工智能等技术逐渐成为新型基础设施。在数字化背景下&#xff0c;不同产业和区域的生态之间&#xff0c;开始发生越来越多的关联。 马化腾认为&#xff0c;云计算、大数据、人工智能等技术逐渐成…

php web 目录遍历,php的目录遍历操作

* 目录遍历操作:* 1. 传统过程函数: opendir(),readdir(),closedir()* 2. 目录扫描器: scandir()* 第一种方式: 传统目录函数* 第一步: opendir(目录)打开目录,成功返回资源,失败返回false* 第二步: readdir($dir)读取目录内容,世功返回文件名,失败返回false* 第三步: closedir…

来认识世界上第一支AI基金:模仿股票分析师 365天无间断工作

来源&#xff1a;机械鸡 概要&#xff1a;本周&#xff0c;EquBot公司和ETF经理集团&#xff08;ETFManagers Group或ETFMG&#xff09;合作推出了世界第一支人工智能ETF&#xff08;ETF&#xff1a;交易型开放式指数基金&#xff09;。 本周&#xff0c;EquBot公司和ETF经理集…

显示天气 php代码,天气预报查询示例代码

require_once curl.func.php;$appkey your_appkey_here;//你的appkey$city 安顺;//utf8$cityid111;//任选$citycode101260301;//任选$url "https://api.jisuapi.com/weather/query?appkey$appkey&city$city";$result curlOpen($url, [ssl>true]);$jsonar…

中国研制出首款搭载寒武纪AI芯片的人工智能服务器

来源&#xff1a; 澎湃、新华网 摘要&#xff1a;在线推理业务不同于离线训练&#xff0c;推理不需要密集的计算能力&#xff0c;而是需要及时响应。 &#xff11;&#xff10;月&#xff13;&#xff10;日从我国高性能计算领军企业中科曙光获悉&#xff0c;中科曙光近日成功研…

开发java流程步骤,优秀Java开发人员的10个步骤

一、对OO原则有很强的基础和理解对于Java开发人员来说&#xff0c;必须对面向对象编程有很强的理解。没有在OOPS上有很强的基础&#xff0c;就不能实现像Java这样的面向对象编程语言的美。如果你不知道什么是OOPS&#xff0c;即使使用的是OOP语言&#xff0c;可能仍然在以过程的…

干货!解读2016-2017全球人工智能技术及产业发展的现状及趋势~

来源&#xff1a; 龙为科技 摘要&#xff1a;报告围绕人工智能的技术原理和突破进行了重点阐述&#xff0c;深入分析了国外科技巨头企业在人工智能领域的布局和进展情况&#xff0c;概括总结了各国政府推动人工智能发展的政策措施。 国家工业信息安全发展研究中心&#xff08;工…

自动化对就业没有影响?看看这张图再说

来源&#xff1a;36Kr 摘要&#xff1a;自动化就在所有人的眼皮底下进行着&#xff0c;大家现在才开始真正讨论其自动化未来可能会减少很大一部分人口的收入的潜在危险。 机器人远在天边近在眼前。我们不要再视而不见了。 我们正在面临第四次工业革命。很多人都在讨论其对未来的…

大淘客的index.php,index.php · zenozhengs/大淘客CMS底部菜单修改版 - Gitee.com

/** 请勿使用windows下的记事本修改本文件。推荐使用 notepad* * 版本v2.6* 1.自动选择最优服务api地址返回数据* 2.请求时添加压缩返回* * 版本v2.5* 1.500页面优化* 2.数据请求增加重试,减少请求失败* 版本v2.4* 新增加cdn节点检测* 版本 v2.3* 1.500页面展示* 版本 v2.2* 1.…