Python示例02:网页小游戏 —— 2048

本文介绍了如何使用Python和webdriver库控制2048网页游戏,通过编程实现键盘随机移动以获取高分。作者详细阐述了获取网页链接、打开网页、自定义函数(获取数字、开始新游戏、按键移动)以及初始化并循环按键的操作过程。
摘要由CSDN通过智能技术生成

Python示例02:网页小游戏 —— 2048



写在前面

使用目的:通过Python控制键盘随机移动获得高分


一、问题描述

2048游戏操作简单,只需要上下左右移动,最终数字填满屏幕,显示玩家获得的最高分数。通过Python控制游戏,实现快速移动获得高分问题描述


二、编程思路

  1. 提取文件夹中网页链接:将当前文件夹中的网页链接改写为绝对路径
# 通过相对路径来得到 绝对路径=os.path.abspath(相对路径)
path = r'./index.html'
file_open = open(path, mode='r')
print('游戏路径为:'+os.path.abspath(path))
url = os.path.abspath(path)
  1. 根据网页链接打开网页:根据网页链接打开网页,等待时间3s(webdriver包要和浏览器对应,这里是下载地址webdriver下载
# 获取webdriver驱动,这里用的是谷歌
driver = webdriver.Chrome()
# 用浏览器打开
driver.get(url)
# 设置隐式等待时间为3秒
driver.implicitly_wait(3)
  1. 自定义函数:获得现有数字:通过网页信息查找框内数字,返回二维数组
# 定义一些变量
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))
  1. 自定义函数:开始新游戏:点击开始按钮,实例化函数
# 开始新游戏
def new_game(driver):
    # 查找开始游戏按钮
    new_game_button = driver.find_element(By.CSS_SELECTOR, '#new_game_button')
    time.sleep(1)
    # 实例化鼠标方法
    actions = ActionChains(driver)
    # 开始一个新游戏
    actions.click(new_game_button)
    # 调用点击方法
    actions.perform()
  1. 自定义函数:按键移动:根据实参判断按键,统计分数增量与总分
# 随机按键按键效果
def press_key_r(num):
    score_1 = driver.find_element(By.ID, "score").text
    if num == 0:
        # 按左移键
        k.tap_key(k.left_key)
        print("向左移动", end=' ')
    elif num == 1:
        # 按右移键
        k.tap_key(k.right_key)
        print("向右移动", end=' ')
    elif num == 2:
        # 按上移键
        k.tap_key(k.up_key)
        print("向上移动", end=' ')
    else:
        # 按下移键
        k.tap_key(k.down_key)
        print("向下移动", end=' ')
    score_2 = driver.find_element(By.ID, "score").text
    detar = int(score_2) - int(score_1)
    print(",增量为:" + str(detar) + ",分数为:" + str(score_2))
  1. 初始化、循环按键:初始化文件,随机给出移动方向直到游戏结束
# 开始新游戏
new_game(driver=driver)
# 获取初始游戏界面
get_now_numbers(driver=driver)
time.sleep(1)
# 定义一个死循环一直按键
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.1)
score = driver.find_element(By.ID, "score").text
print("本次得分为:{}".format(score))

参考网站名称

Sorry啊,参考的文章和程序我忘记从哪里弄得了… …
请添加图片描述


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值