目录

1、Swing成品演示

2、简介

3、Java的Robot类

4、实战开发例子

1、Swing成品演示

2、简介

Java有一个很厉害的类Robot类,这个类可以模仿人的手去操作电脑,鼠标移动,鼠标点击,按下键盘的按键,获取屏幕的某个坐标的像素等等。本次例子是用Java玩谷歌小恐龙,听起来很简单,但是里面存在着很多优化。因为小恐龙的移动速度会不断加快,检测屏幕像素时耗费的时间比较长,如何优化就成了大问题,但是也与电脑的配置有关系。

3、Java的Robot类

Java的Robot类的一些常用方法:

实例化对象就可以调用Robot类的方法了

Robot robot = new Robot();//实例化对象

Robot类的所有方法如下图:

获取屏幕指定的颜色方法:

Color getPixelColor(int x, int y)

  • 参数列表x代表屏幕的x轴坐标  y代表屏幕的y轴坐标 返回值是Color类里面包含个该像素点的颜色信息。

  • 但是该方法的效率是非常慢的,他的执行原理是截取整个屏幕,再从截取到的图片中获取像素点的信息。

以下是优化获取指定屏幕颜色的方法:

原理是我们自己截取指定大小的图片,然后存放在BufferedImage中,代码如下:

import java.awt.*;
import java.awt.image.*;
public class Main {public static void main(String[] args) throws AWTException {Robot robot = new Robot();//参数是 x轴坐标、y轴坐标、截取的宽度、截取的高度Rectangle rtl = new Rectangle(10, 10, 10, 10);BufferedImage bufferedImage = robot.createScreenCapture(rtl);//指定大小截取屏幕Color color = new Color( bufferedImage.getRGB(5, 5) );//获取颜色}
}

控制延时触发:

void delay(int ms)

该方法其实就是Thread.sleep()方法,作用是休眠本线程,参数即线程休眠的毫秒数。

按钮的触发:

  • 按下按钮  void keyPress(int keycode)

  • 抬起按钮  void keyRelease(int keycode)

模仿人手按钮触发代码如下:

import java.awt.*;
import java.awt.event.KeyEvent;
import java.util.Random;
public class Main {public static void main(String[] args) throws AWTException {Robot robot = new Robot();robot.keyPress(KeyEvent.VK_UP);robot.delay(50+new Random().nextInt(50));//随机数延迟按钮的抬起 真正的模仿人手robot.keyRelease(KeyEvent.VK_UP);}
}

鼠标的触发:

  • 移动鼠标 void mouseMove(int x, int y)

  • 按下鼠标 void mousePress(int buttons)

  • 抬起鼠标 void mouseRelease(int buttons)

  • 鼠标滚轮 void mouseWheel(int wheelAmt)

这些方法可以模拟人手操作电脑,完成一些重复的操作。

4、实战开发例子

实战开发 用Java玩谷歌小恐龙:

核心代码如下

public static void Control(){try {Robot robot = new Robot();//控制跳new Thread(new Runnable() {@Overridepublic void run() {int[] TempDinosaurColor = {DinosaurColor, DinosaurColor2};//恐龙颜色两次变换int[] TempBGColor = {BGColor, BGColor2};//背景颜色两次变换DinosaurColor = TempDinosaurColor[0];BGColor = TempBGColor[0];long start = System.currentTimeMillis();System.out.println("初始化属性---》"+Arrays.toString(TempDinosaurColor)+"   "+Arrays.toString(TempBGColor));Rectangle BgRtl = new Rectangle(DinosaurEye.x, DinosaurEye.y-90, 130, 123);while(state){BufferedImage bufferedImage=robot.createScreenCapture(BgRtl);//判断背景是否变化boolean BgChange = false;int BgRed = 0;for(int i=1;i<=2;i++){BgRed = ((bufferedImage.getRGB(50, i) >> 16) & 0xFF);//获取背景颜色if(Math.abs(BGColor-BgRed)>20){BgChange = true;break;}}if(BgChange){//标记后背景变换if( (System.currentTimeMillis()-start) >= 3500 ){//if(TempDinosaurColor[0]==DinosaurColor){DinosaurColor = TempDinosaurColor[1];BGColor = TempBGColor[1];}else{DinosaurColor = TempDinosaurColor[0];BGColor = TempBGColor[0];}System.out.println("BGColor -> "+BGColor+"  DinosaurColor -> "+DinosaurColor);start = System.currentTimeMillis();continue;}}boolean up = false;//跳to:for(int i=1;i<5;i++){for(int j=1;j<5;j++){int red = ((bufferedImage.getRGB(i+Tree.x, j+Tree.y) >> 16) & 0xFF);if(Math.abs(red-DinosaurColor)<20){//当仙人掌的颜色与恐龙的颜色差值为小于20 的时候需要跳up = true;break to;}}}if(up){//判断是否需要跳robot.keyPress(KeyEvent.VK_UP);robot.delay(120);robot.keyRelease(KeyEvent.VK_UP);}boolean down = false;//蹲to:for(int i=1;i<10;i++){for(int j=1;j<10;j++){int red = ((bufferedImage.getRGB(i+Tree.x, j+Tree.y-40) >> 16) & 0xFF);if(Math.abs(red-DinosaurColor)<20){//当飞鸟的颜色与恐龙的颜色差值为小于20 的时候需要跳down = true;break to;}}}if(up==false&&down==true){//判断是否需要蹲下robot.keyPress(KeyEvent.VK_DOWN);robot.delay(500);robot.keyRelease(KeyEvent.VK_DOWN);}}}}).start();} catch (Exception e) {e.printStackTrace();}

看完上面的核心代码你会发现,我们不能只获取一个像素点去判断物体是否已经到达指定位置,因为障碍物的移动会逐渐加快。我们只需要截图一次,扫描多次是否有指定的颜色近似值。

Swing的成品图片:

该小工具使用的方法是:

打开谷歌浏览器输入 chrome://dino/ 即可在不断网的情况下进入小恐龙游戏。

需要将浏览器调节到宽度最小,高度紧贴着游戏的路面。设置如下图:

然后点击软件的“展示坐标与颜色”按钮即可获取屏幕中任意一点的坐标值与RGB中的R。因为这个游戏是纯颜色的,RBG的值都是相同的。将鼠标移动到小恐龙的眼睛获取坐标值填写即可。

还有一个需要填写的是“黑色背景时恐龙的颜色RGB->R:”这个值需要先跑一边 大概到达700多分的时候背景会变黑,小恐龙的身体颜色会发生改变,点击软件的“展示坐标与颜色”按钮移动到小恐龙的身体获取颜色,并填写到“黑色背景时恐龙的颜色RGB->R:”的文本框中,重新开始游戏即可。

注意:我的电脑扫描一遍障碍物的时间是40毫秒,不同的电脑时间不同,所以不能100%成功跳过障碍物。目前我最高跑了1900分。

回复获取资源

关注后回复 小恐龙 

获取用Java玩谷歌小恐龙游戏的源码

Java 独门绝技 用Java玩谷歌小恐龙游戏 (有源码)相关推荐

  1. 谷歌小恐龙游戏简化版java实现

    实现效果 dinasour.JPG 需要准备的图片 cactus01.png cactus03.png game_over.png long1.png long2.png map.png map1.p ...

  2. 谷歌小恐龙游戏源代码(1)

    先不讲解,直接附上源代码: import pygame # 将pygame库导入到python程序中 from pygame.locals import * # 导入pygame中的常量SCREENW ...

  3. 几亿人都在玩的谷歌小恐龙游戏,全世界最高分是 99999?你呢?

    前言 "越努力越幸运鸭

  4. chrome谷歌小恐龙作弊代码【无敌,快跑,高跳,一键满分】有需要的小伙伴快快看过来!

    谷歌小恐龙游戏是浏览器自带的,断网时候可以玩,当然联网状态也是可以玩的. 那么如何在联网的状态下进行游戏呢? 打开chrome, Ctrl + T 新建标签页,Alt + D或者Ctrl + L 定位 ...

  5. 代码还原谷歌彩蛋小恐龙游戏(html+css+js)

    谷歌小恐龙游戏 原游戏彩蛋 还原 代码学习 原游戏彩蛋 谷歌的chrome浏览器有一个小彩蛋,在断网时打开chrome浏览器会出现一只小恐龙,按下空格键,就可以开始游戏了. 还原 还原过后的效果:游戏 ...

  6. java小恐龙游戏_用Python实现谷歌的小恐龙游戏

    前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,如有问题请及时联系我们以作处理. 谷歌流量器中有个很有名的彩蛋:当你网络出现问题时,就会出现一个"小恐龙游戏&quo ...

  7. java计算机毕业设计社区微服务平台小程序服务器端源码+系统+数据库+lw文档

    java计算机毕业设计社区微服务平台小程序服务器端源码+系统+数据库+lw文档 java计算机毕业设计社区微服务平台小程序服务器端源码+系统+数据库+lw文档 本源码技术栈: 项目架构:B/S架构 开 ...

  8. python实现图片找不同游戏_用Python实现谷歌的小恐龙游戏

    (给Python开发者加星标,提升Python技能) 来源: Charles的皮卡丘-白露未晞me理 谷歌流量器中有个很有名的彩蛋:当你网络出现问题时,就会出现一个"小恐龙游戏". ...

  9. Python谷歌小恐龙--Pygame

    文章目录 Python谷歌小恐龙(持续更新,未完结) 前言 正文 创建窗口 添加静态背景图 添加静态小恐龙 让小恐龙动起来 程序小优化(增加小知识) 背景动起来 小恐龙跳跃(代码大改,做好心理准备) ...

最新文章

  1. 记录Linux下的钓鱼提权思路
  2. 数学公式识别神器—Mathpix Snip
  3. Use Asynchronous Apex
  4. 解决/usr/bin/ld: cannot find -lxxx
  5. vue 调用c++_electron-vue跨平台桌面应用开发实战教程(七)——ffi调用C++(macOS平台)...
  6. qlabel 显示图片后大小不变_图形编程:QT使用scrollarea显示图片的解决方案
  7. 一种非常好用的图像处理软件
  8. [转]Unix awk完全使用手册
  9. 大规模均衡分割与层次聚类
  10. EDA与VHDL题目——38译码器
  11. 计算机毕业设计ssm高校物资捐赠管理系统0e45o系统+程序+源码+lw+远程部署
  12. 百度Apollo计划跟踪:Apollo 3.0前言
  13. 如何利用新浪微博开放平台API获取新浪微博用户数据
  14. 量子计算机 并行,核磁共振量子计算机与并行量子计算
  15. 闲鱼,越分享才越有价值
  16. 三森すずこさん コール・曲色 '17.04
  17. 大数据架构选型与设计
  18. 计算机硬件品牌的调研报告,计算机硬件市场调查报告.doc
  19. 市面上主流的音视频竞品分析对比
  20. 中介房屋买卖合同及违约责任

热门文章

  1. 简述直方图和柱形图的区别_什么是直方图?跟柱状图有什么区别?终于有人讲明白了...
  2. ecshop支付宝付款成功后台显示未付款
  3. ILSpy反编译C#web程序
  4. 钕铁硼NdFeB材料各类牌号磁特性大全
  5. 关于dash的基础学习
  6. 《毕 业 论 文 致 谢 大 赏》
  7. 【研究】心脏出血漏洞
  8. python怎么换背景_python – 我如何在Mac OS X中编程改变背景?
  9. PYPL 4 月排行:Python 最流行,Java 老矣,尚能饭否?
  10. 如何截取视频片段 批量截取片段的方法 1