知行编程网知行编程网  2022-03-09 03:00 知行编程网 隐藏边栏 |   抢沙发  361 
文章评分 0 次,平均分 0.0

这是菜鸟学Python的粉丝第13篇原创投稿

阅读本文大概需要5分钟

本篇作者:BlueDamage

     近来在折腾selenium自动化, 感觉配合爬虫很有意思, 大多数以前难以模拟登录的网站都可以爬了,折腾了这么久, 于是想自动玩个2048游戏嘿嘿, 我是一个不擅长玩游戏的人, 以前玩2048就经常得了很低的分,每每想起痛心疾首”, 所以我打算拿2048开刀, 通过几种方式, 让程序帮我玩!



环境: python 3.5

用到的库: re, random, time, selenium

2048网页版: http://2048.oubk.com

本篇用到了selenium,运行前需要提前安装selenium和chromedriver的驱动


先看一下效果图

超牛!用Python自动玩转2048游戏



第一步: 浏览网页确定需求

超牛!用Python自动玩转2048游戏


可以发现, 此网页能注册登录, 还有各个时间段的积分排行榜, 游戏的玩法是按键盘的方向键,在游戏结束后, 会弹出这么一个框

超牛!用Python自动玩转2048游戏

于是我在想, 这个页面能否自动成功登录和退出呢,还希望把4*4方块转为对应的矩阵列表,并且在游戏结束后, 能自动点击再玩一次

试试看说不定可以呢,我们一起来分析一下吧.



第二步: 按需分析目标网站

需求1:登录指定账号

进入开发者模式定位到”登录”这元素:


超牛!用Python自动玩转2048游戏

selenium库提供了很多获取网页中元素的方法, 个人喜欢通过XPath的方式来获取, 于是复制其xpath路径


在点击登录后, 会有一个弹窗:

超牛!用Python自动玩转2048游戏

采用同样的方式, 获取账号输入框 密码输入框 登录 的xpath路径


超牛!用Python自动玩转2048游戏


需求2:再玩一次


当游戏结束时, 会有此提示


超牛!用Python自动玩转2048游戏

同样的, 也获取 再玩一次 的xpath的路径


超牛!用Python自动玩转2048游戏


需求_3: 获取矩阵

接下来, 我们需要将4*4方块转为矩阵, 先定位到任意的一个数字方块

超牛!用Python自动玩转2048游戏

容易发现, 第一个数字是方块上的数值, 之后数字为: 列 行, 后面若还接英文串, 则说明此方块是新生成或新合并出的.采用通过正则获取

超牛!用Python自动玩转2048游戏


需求_4: 模拟方向键

在selenium中, 通过send_keys()方法, 把键值发送至元素

需要注意的是, 方向键是发送给body元素, 而不是4*4方块所在的的div

超牛!用Python自动玩转2048游戏



第三步: 如何玩游戏

方法一:随机移动

在游戏未结束前, 上下左右随意移动, 分数什么的, 就随缘吧

超牛!用Python自动玩转2048游戏


方法二:每次最优

在游戏未结束前, 每次移动, 都选择得分最高的方向,这个比较复杂(具体可以看文末的源码)



第四步: 运行程序看结果

1).用js代码注册

借用来自网上的一段用js进行post提交的代码, 成功实现了注册

超牛!用Python自动玩转2048游戏


2).开始玩游戏

我写了个分析函数, 传入次数, 在游戏结束后输出平均分

超牛!用Python自动玩转2048游戏

次数我设置为3, 执行程序,就会出现开头的效果图.


需要源码的同学,请留言



欢迎大家关注 菜鸟学Python",更多好玩有趣的Python原创教程,趣味算法,经验技巧,行业动态,尽在菜鸟学Python,一起来学python吧

最佳历史人气文章

Python语言如何入门

最全的零基础学Python的问题,你想知道的都在这里

Python入门原创文章,2016年度大盘点

用Python写个弹球的游戏

Python写个迷你聊天机器人|生成器的高级用法

用Python破解微软面试题|24点游戏

一道Google的算法题 |Python巧妙破解


 长按二维码,加入【菜鸟学python】


超牛!用Python自动玩转2048游戏


来源 | 菜鸟学Python

作者 | xinxin

本文章为菜鸟学Python独家原创稿件,未经授权不得转载


本篇文章来源于: 菜鸟学Python

本文为原创文章,版权归所有,欢迎分享本文,转载请保留出处!

知行编程网
知行编程网 关注:1    粉丝:1
这个人很懒,什么都没写

发表评论

表情 格式 链接 私密 签到
扫一扫二维码分享