自動玩Chrome瀏覽器的小恐龍游戲

開發工具

Python版本:3.6.4

相關模塊:

opencv-python模塊;

numpy模塊;

selenium模塊;

pillow模塊;

以及一些Python自帶的模塊。

關注公眾號:Python學習指南,回復“小恐龍游戲2”獲取源碼

環境搭建

安裝Python并添加到環境變量,pip安裝需要的相關模塊即可。

原理簡介

T-Rex Rush是谷歌瀏覽器里自帶的一個彩蛋小游戲,電腦斷網的時候按下空格鍵就可以觸發。或者直接訪問如下鏈接也可以:

https://chromedino.com/

大概長這個樣子:
自動玩Chrome瀏覽器的小恐龍游戲的圖1

玩法很簡單,玩家通過操縱空格鍵來控制小恐龍跳躍或者不跳躍,從而躲避路上的障礙物。當小恐龍不小心撞到障礙物時,游戲結束。

今天我們直接設計一個簡單的策略,就可以輕松實現上萬的跑分:
自動玩Chrome瀏覽器的小恐龍游戲的圖2

具體而言,你只需要每次截取小恐龍前面的圖像區域,然后檢測一下是否有障礙物出現就ok了:
自動玩Chrome瀏覽器的小恐龍游戲的圖3

具體而言,截取圖像的函數實現如下:

'''screenshot'''def screenshot(self, area):
  image_b64 = self.driver.execute_script("canvasRunner = document.getElementById('runner-canvas'); return canvasRunner.toDataURL().substring(22)")
  image = Image.open(BytesIO(base64.b64decode(image_b64))).convert('RGB')
  image = image.crop(area)  return image

根據截圖來生成小恐龍當前需要進行的動作的智能體實現如下:

'''agent'''class Agent():
  def __init__(self, bbox_area, **kwargs):    self.bbox_area = bbox_area    self.bg_color = 255
    self.reference_frame = np.full((bbox_area[3]-bbox_area[1], bbox_area[2]-bbox_area[0], 3), self.bg_color)  '''return action according to the game frame'''
  def act(self, frame):
    action = [1, 0]
    frame = np.array(frame)    if self.bg_color != frame[0][0][0]:      self.bg_color = frame[0][0][0]      self.reference_frame = np.full((self.bbox_area[3]-self.bbox_area[1], self.bbox_area[2]-self.bbox_area[0], 3), self.bg_color)
    diff = np.subtract(self.reference_frame, frame).sum()    if diff != 0:
      action = [0, 1]    return action

雖然聽起來很簡單,但是實際效果還是蠻不錯的(除了有時候植物連在一起的話判斷會出問題T_T)。

完整源代碼詳見相關文件唄~

登錄后免費查看全文
立即登錄
App下載
技術鄰APP
工程師必備
  • 項目客服
  • 培訓客服
  • 平臺客服

TOP

18
12