自动玩一局4399钢琴小游戏

自动玩一局4399钢琴小游戏

1.思路

a.准备一个自动操作的机器人

b.自动操纵鼠标点击游戏开始

​ b1.鼠标定位到开始按钮那一行(截图软件截到对应坐标)

​ b2.循环点击该行,保证开始按钮被鼠标点击到(游戏能开始)

c.当鼠标点击黑色及其渐变色块时,提示得分(在后台打印得分情况)—>游戏一直执行

当鼠标点击其他色块时,提示游戏结束,输出得分

2.每一步的具体实现过程

2.1 准备一个自动操作的机器人

Robot db=new Robot();

2.2 鼠标点击游戏开始

2.2.1 鼠标定位到开始按钮那一行(截图软件截到对应坐标)
db.mouseMove(x,y);	
2.2.2 循环点击该行,保证开始按钮被鼠标点击到(游戏能开始)
//建立一个循环,就四个色块都要被点击到
for(int i=0;i<4;i++) {
    Thread.sleep(3000);
    //保证点击的过程能被用户看到
    robot.mouseMove(x+i*step,y);	
    robot.mousePress(InputEvent.BUTTON1_DOWN_MASK);
}

2.3 点击黑色块及其渐变色块时,得分并记录下来

int temp=x+i*step;
Color c=robot.getPixelColor(temp,y);
//红色值小于30的时候,才代表着黑色块
if(c.getRed()<30) {
  robot.mouseMove(temp,y);
  robot.mousePress(InputEvent.BUTTON1_DOWN_MASK);
  //每点击成功一次,就得1分
  score++;
}

2.4 当鼠标点击其他色块时,提示游戏结束,输出得分

else {
	 System.out.println("游戏结束");
	 System.out.println("当前得分为:"+score);
	 break;
}

3.常见问题点分析

3.1 为啥在进行点击黑色色块操作外套一层死循环???

解答:因为你要游戏一直自动执行,直到你点击到了其他颜色色块

3.2 为啥当红色值(rgb值)小于30时,代表为黑色色块???

解答:因为在截颜色的过程中,发现黑色以及黑色的渐变色快中的rgb值中的r值(red)一直在30以下波动,而g值(green)和b值(blue)没有变化规律

3.3 rgb值是干嘛的???

解答:rgb值在计算机中是用来表示颜色的,其中r代表red,g代表green,b代表blue,他们的范围都是0-255,当r=0且g=0且b=0时即rgb(0,0,0)代表的是黑色,而rgb(255,255,255)代表的是白色

3.4 如何获取色块的颜色值???

Color c=robot.getPixelColor(temp,y);
//其中(temp,y)为色块的位置

3.5 为啥每次鼠标移动都要加上Thread.sleep(时间)这个方法?

解答:保证鼠标移动的过程中被观察到

3.6 如何获取色块的位置

解答: 第一步 打开微信

​ 第二步 进入色块位置所在的界面

​ 第三步 按下alt+A组合键获取当前色块的位置

3.7 获取的色块位置为啥不精准?

解答:电脑显示的分辨率不为100%

修改电脑分辨率的方法如下所示:

第一步,通过搜索框进入分辨率修改界面
在这里插入图片描述

第二步 在缩放与布局,将推荐的125%改成100%
在这里插入图片描述

4.源代码

package com.zking.demo;
import java.awt.AWTException;
import java.awt.Color;
import java.awt.Robot;
import java.awt.event.InputEvent;
public class Demo {
	public static void main(String[] args) throws Exception {
		// TODO Auto-generated method stub
		Robot robot=new Robot();
		Thread.sleep(3000);
		int step=140;
		int x=820;
		int y=800;
		int score=0;
		//自动操纵鼠标点击开始,哪一个色块为开始色块未知,所以需要开始色块所占行都点击一遍
		for(int i=0;i<4;i++) {
			Thread.sleep(3000);
			robot.mouseMove(x+i*step,y);	
			robot.mousePress(InputEvent.BUTTON1_DOWN_MASK);
		}
		//自动操纵鼠标玩游戏
		while(true){
			Thread.sleep(300);
			for(int i=0;i<4;i++) {			
				int temp=x+i*step;
				Color c=robot.getPixelColor(temp,y);
				//红色值小于30的时候,才代表着黑色块
				if(c.getRed()<30) {
					//判断为黑色色块才移动
					robot.mouseMove(temp,y);
					robot.mousePress(InputEvent.BUTTON1_DOWN_MASK);
					//每点击成功一次,就得1分
					score++;
				}else {
					System.out.println("游戏结束");
					System.out.println("当前得分为:"+score);
					break;
				}
			}
		}		
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

SSS4362

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值