cmd小游戏_Python自动玩"别再踩白块了"小游戏

导语

愉快的周末又要结束了T_T,抓住周末的尾巴再来更新一波吧。利用Python自动玩"别再踩白块了"这个小游戏,让我们愉快地开始吧~

相关文件

关注微信公众号“Charles的皮卡丘”,公众号内回复‘AIPianoTiles’获取。

开发工具

Python版本:3.6.4

相关模块:

numpy模块;

cv2模块;

pyautogui模块;

pyscreenshot模块;

以及一些Python自带的模块。

环境搭建

安装Python并添加到环境变量,pip安装需要的相关模块即可。

先睹为快

首先,在浏览器中打开下面这个游戏链接:

http://www.4399.com/flash/154247_3.htm

游戏加载完毕后,选择该游戏的经典模式,游戏界面类似下图所示:

e7b858e193d848c7e45b82e9bc5f3649.png

在cmd窗口运行autoplay.py文件即可让python自动玩这个小游戏了~

由于游戏主界面的位置随电脑和浏览器的不同而不同,因此,若运行失败,请自行调整下图所示的bbox参数:

e1a457f077385fbd3b1c16342495081b.png

4个数字分别代表游戏界面左上顶点x坐标,y坐标和右下顶点x坐标,y坐标。

视频演示如下:

1ba975859222d4642d13633a4c5d5821.png

原理简介

游戏规则:

0e97c4593de91676ea95d2c4e9ebb00b.png

原理介绍:

原理其实挺简单的,主循环的代码如下图所示:

163027c09e1262a5dc84bb5caba78275.png

首先是截取游戏界面:

fed45c3b0a97bb34df8b6911dbe2f40c.png

二值化游戏界面:

2df81c7f093daa7a1bbe4883082338d1.png

形态学处理:

f6c69c0a42a4551a0ac8d47e2fe8084e.png

实现轮廓检测:

0d5c2ebea713d45db48331bf5f5f39ac.png

利用pyautogui模块模拟点击检测到的黑块就可以实现自动玩这个游戏了。还是挺简单的,完整源代码实现详见相关文件~

更多

代码截止2018-10-14测试无误。

注意,运行代码时cmd窗口不要挡住游戏界面~

08732f4500a3fbfaacf0e3b0f0fb1c80.png

Charles的皮卡丘

Pikachu~

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
wire [ROWBUF_IDX_W-1:0] sbuf_cnt_r; wire [ROWBUF_IDX_W-1:0] sbuf_cnt_nxt; wire sbuf_cnt_clr; wire sbuf_cnt_incr; wire sbuf_cnt_ena; wire sbuf_cnt_last; wire sbuf_icb_cmd_hsked; wire sbuf_icb_rsp_hsked; wire nice_rsp_valid_sbuf; wire nice_icb_cmd_valid_sbuf; wire nice_icb_cmd_hsked; assign sbuf_icb_cmd_hsked = (state_is_sbuf | (state_is_idle & custom3_sbuf)) & nice_icb_cmd_hsked; assign sbuf_icb_rsp_hsked = state_is_sbuf & nice_icb_rsp_hsked; assign sbuf_icb_rsp_hsked_last = sbuf_icb_rsp_hsked & sbuf_cnt_last; assign sbuf_cnt_last = (sbuf_cnt_r == clonum); //assign sbuf_cnt_clr = custom3_sbuf & nice_req_hsked; assign sbuf_cnt_clr = sbuf_icb_rsp_hsked_last; assign sbuf_cnt_incr = sbuf_icb_rsp_hsked & ~sbuf_cnt_last; assign sbuf_cnt_ena = sbuf_cnt_clr | sbuf_cnt_incr; assign sbuf_cnt_nxt = ({ROWBUF_IDX_W{sbuf_cnt_clr }} & {ROWBUF_IDX_W{1'b0}}) | ({ROWBUF_IDX_W{sbuf_cnt_incr}} & (sbuf_cnt_r + 1'b1) ) ; sirv_gnrl_dfflr #(ROWBUF_IDX_W) sbuf_cnt_dfflr (sbuf_cnt_ena, sbuf_cnt_nxt, sbuf_cnt_r, nice_clk, nice_rst_n); // nice_rsp_valid wait for nice_icb_rsp_valid in SBUF assign nice_rsp_valid_sbuf = state_is_sbuf & sbuf_cnt_last & nice_icb_rsp_valid; wire [ROWBUF_IDX_W-1:0] sbuf_cmd_cnt_r; wire [ROWBUF_IDX_W-1:0] sbuf_cmd_cnt_nxt; wire sbuf_cmd_cnt_clr; wire sbuf_cmd_cnt_incr; wire sbuf_cmd_cnt_ena; wire sbuf_cmd_cnt_last; assign sbuf_cmd_cnt_last = (sbuf_cmd_cnt_r == clonum); assign sbuf_cmd_cnt_clr = sbuf_icb_rsp_hsked_last; assign sbuf_cmd_cnt_incr = sbuf_icb_cmd_hsked & ~sbuf_cmd_cnt_last; assign sbuf_cmd_cnt_ena = sbuf_cmd_cnt_clr | sbuf_cmd_cnt_incr; assign sbuf_cmd_cnt_nxt = ({ROWBUF_IDX_W{sbuf_cmd_cnt_clr }} & {ROWBUF_IDX_W{1'b0}}) | ({ROWBUF_IDX_W{sbuf_cmd_cnt_incr}} & (sbuf_cmd_cnt_r + 1'b1) ) ; sirv_gnrl_dfflr #(ROWBUF_IDX_W) sbuf_cmd_cnt_dfflr (sbuf_cmd_cnt_ena, sbuf_cmd_cnt_nxt, sbuf_cmd_cnt_r, nice_clk, nice_rst_n); // nice_icb_cmd_valid sets when sbuf_cmd_cnt_r is not full in SBUF assign nice_icb_cmd_valid_sbuf = (state_is_sbuf & (sbuf_cmd_cnt_r <= clonum) & (sbuf_cnt_r != clonum));,详细解释一下这段代码
06-02

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值