利用Python编写一个AI脚本自动控制2048网页小游戏

这篇具有很好参考价值的文章主要介绍了利用Python编写一个AI脚本自动控制2048网页小游戏。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言

本文将使用python+selenium自动控制游戏运行。当然采用的是伪随机数进行键盘控制。只作为一个抛砖迎玉的参考,不涉及专业算法。

一、前期准备(必须有)

1、在安装好的pyCharm中导入相应的库

打开pyCharm,点击终端,依次输入:
  1. pip install win32gui
  2. pip install PyUserInput
  3. pip install PyKeyboard
  4. pip install selenium(注意要配合相应的webdriver驱动使用,webdriver的安装下载请自行到网上搜索学习)

2、新建一个python项目文件

3、下载准备好的2048小游戏将其解压到文件目录下

链接:https://pan.baidu.com/s/1y7Kosl20Fw1Xbu8tMI4-zw
提取码:aicg
–来自百度网盘超级会员V5的分享
文件的总体目录如下:
利用Python编写一个AI脚本自动控制2048网页小游戏
其中index.html就是2048小游戏html文件,双击之后可以运行。

二、使用步骤

1.引入库

代码如下(示例):

import random
import time
import os

from pykeyboard import PyKeyboard  # 键盘实例
from selenium import webdriver  # web驱动
from selenium.webdriver import ActionChains  # 鼠标模拟
from selenium.webdriver.common.by import By

2.用相对路径来获取绝对路径

我们用driver.get(url)方法来跳转到游戏界面,但是url为本地资源的时候,只能通过绝对路径来打开(个人理解,因为本人直接用相对路径打开没有用),所以需要使用os里面的库函数来进行转化。代码片段如下(其中url就是绝对路径了):

# 通过相对路径来得到 绝对路径=os.path.abspath(相对路径)
path = r'../2048Game/index.html'
file_open = open(path, mode='r')
# print(os.path.abspath(path))

url = os.path.abspath(path)

3.获取webdriver驱动

# 获取webdriver驱动,这里用的是谷歌
driver = webdriver.Chrome()
# 用浏览器打开
driver.get(url)
# 设置隐式等待时间为3秒
driver.implicitly_wait(3)

4.定义一些可能会有用的变量

# 定义一些变量
now_number = []  # 存储现在的界面数字数组,在以后的算法之中可能会用到,当前可不写
k = PyKeyboard()  # 键盘对象

5.主要的函数代码块

# 获取当前页面的状态数组,返回的是一个一维列表
def get_now_numbers(driver):
    global now_number  # 声明使用的是全局变量
    now_number.clear()  # 对列表进行清空,防止有脏数据
    for i in range(4):
        for j in range(4):
            # 用CSS选择器查找每一个小方格里面的数字,并且添加到数组中
            cell_span = driver.find_element(By.CSS_SELECTOR, '#number-cell-{}-{}'.format(i, j))
            num = cell_span.text
            if num == "":
                now_number.append(0)
            else:
                now_number.append(int(num))


# 开始新游戏
def new_game(driver):
    # 查找开始游戏按钮
    new_game_button = driver.find_element(By.CSS_SELECTOR, '#new_game_button')
    time.sleep(2)
    # 实例化鼠标方法
    actions = ActionChains(driver)
    # 开始一个新游戏
    actions.click(new_game_button)
    # 调用点击方法
    actions.perform()


# 随机按键按键效果
def press_key_r(num):
    if num == 0:
        # 按左移键
        k.tap_key(k.left_key)
    elif num == 1:
        # 按右移键
        k.tap_key(k.right_key)
    elif num == 2:
        # 按上移键
        k.tap_key(k.up_key)
    else:
        # 按下移键
        k.tap_key(k.down_key)

6.开始一局游戏,和结束游戏判断

# 开始新游戏
new_game(driver=driver)
# 获取初始游戏界面
get_now_numbers(driver=driver)
time.sleep(2)

flag = 0 #游戏停止标志
# 定义一个死循环一直按键
while flag == 0:
    # 是否弹出gameover警告框
    # 因为alert是在js里面定义的,所以可以直接用driver.switch_to.alert获取
    try:
        alert = driver.switch_to.alert
        print(alert.text)
        # 游戏结束
        if alert.text == "gameover!":
            alert.accept()
            flag = 1
            break

    except Exception:
        # 产生一个随机数,随机上下左右移
        num = random.randint(0, 3)
        press_key_r(num)
        # print("继续操作...")
        time.sleep(0.2)

# 获取分数
score = driver.find_element(By.ID, "score").text
print("本次得分为:{}".format(score))

7.总体代码如下:

import random
import time
import os

from pykeyboard import PyKeyboard  # 键盘实例
from selenium import webdriver  # web驱动
from selenium.webdriver import ActionChains  # 鼠标模拟
from selenium.webdriver.common.by import By

# 通过相对路径来得到 绝对路径=os.path.abspath(相对路径)
path = r'../2048Game/index.html'
file_open = open(path, mode='r')
# print(os.path.abspath(path))

url = os.path.abspath(path)

# 获取webdriver驱动,这里用的是谷歌
driver = webdriver.Chrome()
# 用浏览器打开
driver.get(url)
# 设置隐式等待时间为3秒
driver.implicitly_wait(3)

# 定义一些变量
now_number = []  # 存储现在的界面数字数组,在以后的算法之中可能会用到,当前可不写
k = PyKeyboard()  # 键盘对象


# 获取当前页面的状态数组,返回的是一个一维列表
def get_now_numbers(driver):
    global now_number  # 声明使用的是全局变量
    now_number.clear()  # 对列表进行清空,防止有脏数据
    for i in range(4):
        for j in range(4):
            # 用CSS选择器查找每一个小方格里面的数字,并且添加到数组中
            cell_span = driver.find_element(By.CSS_SELECTOR, '#number-cell-{}-{}'.format(i, j))
            num = cell_span.text
            if num == "":
                now_number.append(0)
            else:
                now_number.append(int(num))


# 开始新游戏
def new_game(driver):
    # 查找开始游戏按钮
    new_game_button = driver.find_element(By.CSS_SELECTOR, '#new_game_button')
    time.sleep(2)
    # 实例化鼠标方法
    actions = ActionChains(driver)
    # 开始一个新游戏
    actions.click(new_game_button)
    # 调用点击方法
    actions.perform()


# 随机按键按键效果
def press_key_r(num):
    if num == 0:
        # 按左移键
        k.tap_key(k.left_key)
    elif num == 1:
        # 按右移键
        k.tap_key(k.right_key)
    elif num == 2:
        # 按上移键
        k.tap_key(k.up_key)
    else:
        # 按下移键
        k.tap_key(k.down_key)


# 开始新游戏
new_game(driver=driver)
# 获取初始游戏界面
get_now_numbers(driver=driver)
time.sleep(2)

flag = 0
# 定义一个死循环一直按键
while flag == 0:
    # 是否弹出gameover警告框
    # 因为alert是在js里面定义的,所以可以直接用driver.switch_to.alert获取
    try:
        alert = driver.switch_to.alert
        print(alert.text)
        # 游戏结束
        if alert.text == "gameover!":
            alert.accept()
            flag = 1
            break

    except Exception:
        # 产生一个随机数,随机上下左右移
        num = random.randint(0, 3)
        press_key_r(num)
        # print("继续操作...")
        time.sleep(0.2)

# 获取分数
score = driver.find_element(By.ID, "score").text
print("本次得分为:{}".format(score))


总结

以上就是本次项目的所有代码块,本次分享只是起一个抛砖引玉的作用,之后可能会增加一些算法来代替伪随机数进行游戏控制。可能的思路如下:
1、再设置四个变量来记录“上下左右”移动的权重,
2、每次移动之前先用get_now_numbers()函数来获取now_number数组,
3、然后再根据其数组计算出移动之后消去数字对最多的方向(权重最大),进行移动控制。文章来源地址https://www.toymoban.com/news/detail-404022.html

到了这里,关于利用Python编写一个AI脚本自动控制2048网页小游戏的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • python pyautogui+pynput鼠标键盘自动控制与监听

    参考https://blog.csdn.net/hfy1237/article/details/127960423 官方文档 https://pyautogui.readthedocs.io/en/latest/ 1、基本函数 常用函数列表 函数名 功能 基本 pyautogui.size() 返回包含分辨率的元组 pyautogui.PAUSE 每个函数的停顿时间,默认0.1s pyautogui.FAILSAFE 是否开启防故障功能,默认True 键盘 pyautogui

    2024年02月11日
    浏览(53)
  • Python 自动化指南(繁琐工作自动化)第二版:二十、使用 GUI 自动化控制键盘和鼠标

    原文:https://automatetheboringstuff.com/2e/chapter20/ 了解用于编辑电子表格、下载文件和启动程序的各种 Python 模块是很有用的,但有时您需要使用的应用没有任何模块。在计算机上实现任务自动化的终极工具是你编写的直接控制键盘和鼠标的程序。这些程序可以通过发送虚拟击键和

    2024年02月09日
    浏览(56)
  • 北邮22级信通院数电:Verilog-FPGA(12)第十二周实验(1)设计一个汽车尾灯自动控制系统

    北邮22信通一枚~ 跟随课程进度更新北邮信通院数字系统设计的笔记、代码和文章 持续关注作者 迎接数电实验学习~ 获取更多文章,请访问专栏: 北邮22级信通院数电实验_青山如墨雨如画的博客-CSDN博客   目录 一.题目要求 二.代码部分 2.1  car_system.v  2.2  divide.v 三.管脚分配

    2024年02月05日
    浏览(58)
  • 【OpenAI】Python:基于 Gym-CarRacing 的自动驾驶项目(4) | 车辆控制功能的实现 | 开环控制 | 闭环控制 | 启停式控制 | PID 控制 | Stanley 控制器

       猛戳!跟哥们一起玩蛇啊  👉 《一起玩蛇》🐍  ​ 💭 写在前面: 本篇是关于多伦多大学自动驾驶专业项目的博客。GYM-Box2D CarRacing 是一种在 OpenAI Gym 平台上开发和比较强化学习算法的模拟环境。它是流行的 Box2D 物理引擎的一个版本,经过修改以支持模拟汽车在赛道上

    2024年02月08日
    浏览(47)
  • 【OpenAI】Python:(4) 基于 Gym-CarRacing 的自动驾驶项目 | 车辆控制功能的实现 | 开环控制 | 闭环控制 | 启停式控制 | PID 控制 | Stanley 控制器

       猛戳!跟哥们一起玩蛇啊  👉 《一起玩蛇》🐍  ​ 💭 写在前面: 本篇是关于多伦多大学自动驾驶专业项目的博客。GYM-Box2D CarRacing 是一种在 OpenAI Gym 平台上开发和比较强化学习算法的模拟环境。它是流行的 Box2D 物理引擎的一个版本,经过修改以支持模拟汽车在赛道上

    2024年02月03日
    浏览(52)
  • python自动化办公--pyautogui控制鼠标和键盘操作

    在公司某些工作场景下,需要大量重复的工作,重复的工作完全可以通过python软件的自动化实现,省时省力。本文分享python自动化办公的利器之一--pyautogui,通过pyautogui可以轻松控制鼠标和键盘操作。 PyAutoGUI是一个纯Python的GUI自动化工具,其目的是可以用程序自动控制鼠标和

    2024年02月16日
    浏览(47)
  • python控制UI实现桌面微信自动化

    Hello,我是新星博主:小恒不会java 背景 使用  wxpy   或者   itchat   这种第三方库通过Python控制自己的微信号,实现很多自动化操作,用的是微信网页版接口,不过随着微信的发展(信息安全等方面愈加重要,这种不符合官方期望出现的东西,很容易就破产。也由于itchat在

    2024年04月27日
    浏览(52)
  • python控制Windows桌面程序自动化模块uiautomation

    github仓库地址:GitHub - yinkaisheng/Python-UIAutomation-for-Windows: (Donot use 3.7.6,3.8.1):snake:Python 3 wrapper of Microsoft UIAutomation. Support UIAutomation for MFC, WindowsForm, WPF, Modern UI(Metro UI), Qt, IE, Firefox, Chrome ...   uiautomation封装了微软UIAutomation API,支持自动化Win32,MFC,WPF,Modern UI(Metro UI), Qt, IE, F

    2024年02月04日
    浏览(48)
  • Windows GUI自动化控制工具之python uiAutomation

    对 Windows GUI进行自动化控制的工具有很多,比如pywinauto、pyautogui、pywin32、Autoit、airtest、UIAutomation等,UI Automation API是微软提供的自动化框架,可在支持 Windows Presentation Foundation (WPF) 的所有操作系统上使用,支持的应用类型更多。本文介绍封装了UI Automation API的Python uiautomatio

    2024年02月13日
    浏览(38)
  • Python selenium与pyautogui控制浏览器实现modis数据自动下载

    目录 序言: 准备工作: 基本思路: 完整代码:         上次提到通过modis连接下载数据的方式有很多,本文选择selenium模拟登录的方式通过谷歌浏览器下载,但是并不推荐这种方法,只是恰好学习了selenium的一些操作,所以写这个代码做了一些测试。         本文章只需要

    2024年02月11日
    浏览(50)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包