Pythonはこのように遊んでPythonを使って小さいゲームの外付けをすることができます。


はじめに
私は4399の小さいゲームネットを開けて、知らないゲームを注文しました。うん、寿司を作っています。材料があります。お客さんが来てから彼らの要求を言います。メニューによって彼に持ってきてください。どうやって彼が料理をするのを実現しますか?
在这里插入图片描述
二、道具の準備
atopyとPILとpywin 32パッケージをインストールする必要があります。
1.スクリーンショットと画像処理ツール
スクリーンショットはゲームの画像を取得してゲームのヒントを分析します。専門的なツールがなくて直接Print Sreenを画像処理ツールに貼り付けてもいいです。私が使っているのはPicPickです。とても使いやすくて、個人のユーザーは無料です。画像処理は各種の情報を得るために、私達はそれを使って注文画像を得てから保存します。外部からの分析で判断します。
2.エディタ
VIMを使っても、あるいはタブレットを使ってもいいです。
3.ゲームの原理分析
このゲームを見ると、8種類の料理があります。どの料理にも決まりのやり方があります。お客さんが座ったら、頭のてっぺんに写真があります。写真を見ると、彼が何を注文したいのかが分かります。左の原料エリアをクリックしてください。
お客様の頭に表示されている写真の位置は固定されています。全部で4つの位置しかありません。一つ一つ分析できます。原料の位置も固定されています。各料理の作り方はもっとはっきりしています。これで私達は完全に判断できます。プログラムは一つの料理を作ってくれて、そしてお金がどんどん出てきます。
三、ハンガーアップステップ
 1.マウスを動かす

import autopy
autopy.mouse.move(100, 100) #     
autopy.mouse.smooth_move(400, 400) #       (        )
このコマンドはマウスを指定された画面座標に素早く移動させます。左上の角が(0,0)であり、右下にインクリメントされるので、1024×768画面の右下の座標は(1023,767)です。
2.マウスをクリックする

#  autopy  
# ***
import autopy
autopy.mouse.click() #   
autopy.mouse.toggle(True) #     
autopy.mouse.toggle(False) #     
これは簡単ですが、ここの操作はとても速いです。ゲームがまだ反応していないかもしれません。完成しました。そこで失敗しました。必要な時は少し寝ます。
3.類似画像の検索原理
Googleの「地図検索」機能で、一枚の画像を入力すると、この図と似たような画像が全部現れますので、お気に入りの図を見つけて壁紙を作りたいです。小さいと感じたら、基本的にこの方法で適当なものを見つけられます。これと似た原理でユーザーの注文を判断します。

def get_hash(self, img):
   #  PIL      ,***
  image = img.resize((18, 13), Image.ANTIALIAS).convert("L")
   pixels = list(image.getdata())
  avg = sum(pixels) / len(pixels)
   return "".join(map(lambda p : "1" if p > avg else "0", pixels))
これはクラスの一つの方法なので、selfパラメータがあります。無視します。ここのimgはImageオブジェクトに入るべきであり、画像ファイルを読み込んだ後の結果をスクリーンショット後の結果としても良い。スケーリングのサイズ(18、13)は実際の状況によって決めました。お客様の顔写真の画像は基本的にこの比率です。この割合はやはり重要です。私たちの料理はちょっと似ていますから、もし比例が合わないと圧縮したら歪みます。誤審しやすいです。
一つの写真の「指紋」を手に入れたら、標準の画像の指紋と比較できます。どう比較すればいいですか?「漢明距離」、つまり2つの文字列の対応する位置の異なる文字の個数です。

def hamming_dist(self, hash1, hash2):
return sum(itertools.imap(operator.ne, hash1, hash2))
はい、私達は準備した標準画像を使って、計算された特徴コードを読み取って保存してからスクリーンショットと比較すればいいです。距離が一番小さいのは料理です。コードは以下の通りです。

def order(self, i):
    l, t = self.left + i * self.step, self.top
    r, b = l + self.width, t + self.height
    hash2 = self.get_hash(ImageGrab.grab((l, t, r, b)))
    (mi, dist) = None, 50
    for i, hash1 in enumerate(self.maps):
      if hash1 is None:
        continue
      this_dist = self.hamming_dist(hash1, hash2)
      if this_dist < dist:
        mi = i
        dist = this_dist
    return mi
ここには50の初期距離があります。切り取り画像がどのメニューよりも50より大きい場合、何を説明しますか?今の位置を説明する画像は料理ではなくて、つまりお客さんがまだその席に座っていないということです。あるいはゲームを最小化しました。このように処理するのはとても重要です。一番近いですが、全然似合わないです。
四、開けてかけることができます。自動的に料理を作ります。
この問題は簡単です。メニューの原料を記録してから該当の位置をクリックすればいいです。クラスに書いて呼び出します。

class Menu:
  def __init__(self):
    self.stuff_pos = []
    self.recipes = [None] * 8
    self.init_stuff()
    self.init_recipe()
  def init_stuff(self):
    for i in range(9):
      self.stuff_pos.append( (L + 102 + (i % 3) * 42, T + 303 + (i / 3) * 42) )
  def init_recipe(self):
    self.recipes[0] = (1, 2)
    self.recipes[1] = (0, 1, 2)
    self.recipes[2] = (5, 1, 2)
    self.recipes[3] = (3, 0, 1, 2)
    self.recipes[4] = (4, 1, 2)
    self.recipes[5] = (7, 1, 2)
    self.recipes[6] = (6, 1, 2)
    self.recipes[7] = (8, 1, 2)
  def click(self, i):
    autopy.mouse.move(self.stuff_pos[i][0] + 20, self.stuff_pos[i][1] + 20)
    autopy.mouse.click()
  def make(self, i):
    for x in self.recipes[i]:
      self.click(x)
    autopy.mouse.move(L + 315, T + 363)
    autopy.mouse.click()

class Menu:
  def __init__(self):
    self.stuff_pos = []
    self.recipes = [None] * 8
    self.init_stuff()
    self.init_recipe()
  def init_stuff(self):
    for i in range(9):
      self.stuff_pos.append( (L + 102 + (i % 3) * 42, T + 303 + (i / 3) * 42) )
  def init_recipe(self):
    self.recipes[0] = (1, 2)
    self.recipes[1] = (0, 1, 2)
    self.recipes[2] = (5, 1, 2)
    self.recipes[3] = (3, 0, 1, 2)
    self.recipes[4] = (4, 1, 2)
    self.recipes[5] = (7, 1, 2)
    self.recipes[6] = (6, 1, 2)
    self.recipes[7] = (8, 1, 2)
  def click(self, i):
    autopy.mouse.move(self.stuff_pos[i][0] + 20, self.stuff_pos[i][1] + 20)
    autopy.mouse.click()
  def make(self, i):
    for x in self.recipes[i]:
      self.click(x)
    autopy.mouse.move(L + 315, T + 363)
    autopy.mouse.click()
ここでPythonについては、Pythonでミニゲームを作ることができるという文章を紹介しました。Pythonゲームに関する詳細な内容は以前の文章を検索してください。また、下記の関連記事を見てください。これからもよろしくお願いします。