python编程快速上手之第18章实践项目参考答案(18.14.3)

#! python3
# encoding: UTF-8
import pyautogui, os, time
from PIL import ImageGrab, ImageOps
import os
import time
import pyautogui
from numpy import *


foodOnHand = {'shrimp':5,           #设定食材初始数量
              'rice':10,
              'nori':10,
              'roe':10,
              'salmon':5,
              'unagi':5}
 
def screenGrab():
    box = ()
    im = pyautogui.screenshot()
    #im.save(os.getcwd() + '\\full_snap__' + str(int(time.time())) + '.png', 'PNG')

def grab():
    box = (x_pad + 1,y_pad+1,x_pad+640,y_pad+480)
    im = ImageOps.grayscale(ImageGrab.grab(box))
    a = array(im.getcolors())
    a = a.sum()
    print (a)
    return a

def main():                       #开始整个项目
    startGame()                   #开始游戏
    while True:
        check_bubs()              #检查座位
 

def startGame():
    #location of first menu
    pyautogui.click(541, 374, button='left')  #点开始
    time.sleep(.1)
     
    #location of second menu
    pyautogui.click(542, 610, button='left')   #点继续
    time.sleep(.1)
     
    #location of third menu
    pyautogui.click(804, 645, button='left')   #点跳过教程
    time.sleep(.1)
     
    #location of fourth menu
    pyautogui.click(548, 572, button='left')   #点继续
    time.sleep(.1)

class Cord:           #设置按键位置,包括加食材、购买食材
    f_shrimp = (259,527)  
    f_rice = (315, 524)
    f_nori = (256, 582)
    f_roe = (311, 583)
    f_salmon = (256, 636)
    f_unagi = (315, 637)

    phone = (802, 560)

    menu_toppings = (771, 460)

    t_shrimp = (690, 395)
    t_nori = (690, 451)
    t_roe = (774, 455)
    t_salmon = (690, 510)
    t_unagi = (774, 399)
    t_exit = (815, 522)
 
    menu_rice = (770, 481)
    buy_rice = (769, 474)
     
    delivery_norm = (722, 487)

def clear_tables():      #设置清理桌面点击位置
    pyautogui.click(310, 403, button='left')
    pyautogui.click(410, 403, button='left')
    pyautogui.click(510, 403, button='left')
    pyautogui.click(610, 403, button='left')
    pyautogui.click(710, 403, button='left')
    pyautogui.click(810, 403, button='left')


def makeFood(food):     #制作寿司
    if food == 'caliroll':
        print ('Making a caliroll')
        foodOnHand['rice'] -= 1     #相应食材减少
        foodOnHand['nori'] -= 1
        foodOnHand['roe'] -= 1
        pyautogui.click((Cord.f_rice), button='left')
        time.sleep(.05)
        pyautogui.click((Cord.f_nori), button='left')
        time.sleep(.05)
        pyautogui.click((Cord.f_roe), button='left')
        time.sleep(.1)
        foldMat()            #点竹垫,包寿司,具体方法见后面
        time.sleep(1.5)
     
    elif food == 'onigiri':
        print ('Making a onigiri')
        foodOnHand['rice'] -= 2 
        foodOnHand['nori'] -= 1
        pyautogui.click((Cord.f_rice), button='left')
        time.sleep(.05)
        pyautogui.click((Cord.f_rice), button='left')
        time.sleep(.05)
        pyautogui.click((Cord.f_nori), button='left')
        time.sleep(.1)
        foldMat()
        time.sleep(.05)
         
        time.sleep(1.5)
 
    elif food == 'gunkan':
        print ('Making a gunkan')
        foodOnHand['rice'] -= 1 
        foodOnHand['nori'] -= 1 
        foodOnHand['roe'] -= 2 
        pyautogui.click((Cord.f_rice), button='left')
        time.sleep(.05)
        pyautogui.click((Cord.f_nori), button='left')
        time.sleep(.05)
        pyautogui.click((Cord.f_roe), button='left')
        time.sleep(.05)
        pyautogui.click((Cord.f_roe), button='left')
        time.sleep(.1)
        foldMat()
        time.sleep(1.5)

sushiTypes = {5132:'onigiri',    #三种寿司对应识别颜色相加值作为唯一识别索引
              6943:'caliroll',
              4205:'gunkan',}

def foldMat():
    pyautogui.click(486, 511, button='left')  #点竹垫,包寿司
    time.sleep(.1)

def buyFood(food):                    #购买食物
     
    if food == 'rice':
        pyautogui.click((Cord.phone), button='left')
        time.sleep(.1)
        pyautogui.click((Cord.menu_rice), button='left')
        time.sleep(.05)
        
        s = pyautogui.screenshot()
        if s.getpixel(Cord.buy_rice) != (127, 127, 127):   #通过鼠标位置的颜色核对购买条件是否满足
            print ('rice is available')
            pyautogui.click((Cord.buy_rice), button='left')
            time.sleep(.1)            
            pyautogui.click((Cord.delivery_norm), button='left')
            time.sleep(.1)
            foodOnHand['rice'] += 10            
            time.sleep(2.5)
        else:
            print ('rice is NOT available')
            pyautogui.click(870,530, button='left')            
            time.sleep(1)
            buyFood(food)
             
 
             
    if food == 'nori':
        pyautogui.click((Cord.phone), button='left')
        time.sleep(.1)        
        pyautogui.click((Cord.menu_toppings), button='left')
        time.sleep(.05)        
        s = pyautogui.screenshot()
        print ('test')
        time.sleep(.1)
        if s.getpixel(Cord.t_nori) != (33, 30, 11):
            print ('nori is available')
            pyautogui.click((Cord.t_nori), button='left')
            time.sleep(.1)            
            pyautogui.click((Cord.delivery_norm), button='left')
            time.sleep(.1)
            foodOnHand['nori'] += 10            
            time.sleep(2.5)
        else:
            print ('nori is NOT available')
            pyautogui.click((Cord.t_exit), button='left')            
            time.sleep(1)
            buyFood(food)
 
    if food == 'roe':
        pyautogui.click((Cord.phone), button='left')
        time.sleep(.1)        
        pyautogui.click((Cord.menu_toppings), button='left')
        time.sleep(.05)
        
        s = pyautogui.screenshot()
         
        time.sleep(.1)
        if s.getpixel(Cord.t_roe) != (127, 61, 0):
            print ('roe is available')
            pyautogui.click((Cord.t_roe), button='left')
            time.sleep(.1)            
            pyautogui.click((Cord.delivery_norm), button='left')
            time.sleep(.1)
            foodOnHand['roe'] += 10 
            time.sleep(2.5)
        else:
            print ('roe is NOT available')
            pyautogui.click((Cord.t_exit), button='left')            
            time.sleep(1)
            buyFood(food)

def checkFood():                              #检查食材数量
    for i, j in foodOnHand.items():
        if i == 'nori' or i == 'rice' or i == 'roe':
            if j <= 4:                        #食材少于4个进行购买
                print ('%s is low and needs to be replenished' % i)
                buyFood(i)

def get_seat_one():                  #匹配座位一的气泡
    box = (247,252,247+60,252+20)   #注意每个座位的气泡核对旷大小必须一致,否则无法核对寿司需求
    im = ImageOps.grayscale(ImageGrab.grab(box))
    a = array(im.getcolors())
    a = a.sum()      #以三原色相加作为索引核对需求
    print (a)
    #im.save(os.getcwd() + '\\seat_one__' + str(int(time.time())) + '.png', 'PNG')    
    return a
 
def get_seat_two():             #匹配座位二的气泡
    box = (348,252,348+60,252+20)
    im = ImageOps.grayscale(ImageGrab.grab(box))
    a = array(im.getcolors())
    a = a.sum()
    print (a)
    #im.save(os.getcwd() + '\\seat_two__' + str(int(time.time())) + '.png', 'PNG')    
    return a
 
def get_seat_three():         #匹配座位三的气泡
    box = (449,252,449+60,252+20)
    im = ImageOps.grayscale(ImageGrab.grab(box))
    a = array(im.getcolors())
    a = a.sum()
    print (a)
    #im.save(os.getcwd() + '\\seat_three__' + str(int(time.time())) + '.png', 'PNG')    
    return a
 
def get_seat_four():         #匹配座位四的气泡
    box = (550,252,550+60,252+20)
    im = ImageOps.grayscale(ImageGrab.grab(box))
    a = array(im.getcolors())
    a = a.sum()
    print (a)
    #im.save(os.getcwd() + '\\seat_four__' + str(int(time.time())) + '.png', 'PNG')    
    return a
 
def get_seat_five():         #匹配座位五的气泡
    box = (651,252,651+60,252+20)
    im = ImageOps.grayscale(ImageGrab.grab(box))
    a = array(im.getcolors())
    a = a.sum()
    print (a)
    #im.save(os.getcwd() + '\\seat_five__' + str(int(time.time())) + '.png', 'PNG')    
    return a
 
def get_seat_six():        #匹配座位六的气泡
    box = (752,252,752+60,252+20)
    im = ImageOps.grayscale(ImageGrab.grab(box))
    a = array(im.getcolors())
    a = a.sum()
    print (a)
    #im.save(os.getcwd() + '\\seat_six__' + str(int(time.time())) + '.png', 'PNG')    
    return a

def get_seat_continue():    #匹配进入下一关弹窗
    box = (348,560,348+40,560+20)
    im = ImageOps.grayscale(ImageGrab.grab(box))
    a = array(im.getcolors())
    a = a.sum()
    print (a)
    #im.save(os.getcwd() + '\\seat_six__' + str(int(time.time())) + '.png', 'PNG')    
    return a
 
def get_all_seats():
    get_seat_one()
    get_seat_two()
    get_seat_three()
    get_seat_four()
    get_seat_five()
    get_seat_six()
    get_seat_continue()




class Blank:     #当无用户需求时相应位置颜色索引
    seat_1 = 6123
    seat_2 = 11727
    seat_3 = 12482
    seat_4 = 12086
    seat_5 = 10434
    seat_6 = 6416
    
    
def check_bubs():    #检查气泡
 
    checkFood()    #核对食材是否足够
    s1 = get_seat_one()
    if s1 != Blank.seat_1:   #气泡1不为空
        if s1 in sushiTypes:   #匹配气泡1的需求
            print ('table 1 is occupied and needs %s' % sushiTypes[s1])
            makeFood(sushiTypes[s1])   #制作相应寿司
        else:
            print ('sushi not found!\n sushiType = %i' % s1) 
    else:
        print ('Table 1 unoccupied')
 
    clear_tables()
    checkFood()
    s2 = get_seat_two()
    if s2 != Blank.seat_2:
        if s2 in sushiTypes:
            print ('table 2 is occupied and needs %s' % sushiTypes[s2])
            makeFood(sushiTypes[s2])
        else:
            print ('sushi not found!\n sushiType = %i' % s2) 
    else:
        print ('Table 2 unoccupied')
 
    checkFood()
    s3 = get_seat_three()
    if s3 != Blank.seat_3:
        if s3 in sushiTypes:
            print ('table 3 is occupied and needs %s' % sushiTypes[s3])
            makeFood(sushiTypes[s3])
        else:
            print ('sushi not found!\n sushiType = %i' % s3) 
    else:
        print ('Table 3 unoccupied')
 
    checkFood()
    s4 = get_seat_four()
    if s4 != Blank.seat_4:
        if s4 in sushiTypes:
            print ('table 4 is occupied and needs %s' % sushiTypes[s4])
            makeFood(sushiTypes[s4])
        else:
            print ('sushi not found!\n sushiType = %i' % s4) 
    else:
        print ('Table 4 unoccupied')
 
    clear_tables()
    checkFood()
    s5 = get_seat_five()
    if s5 != Blank.seat_5:
        if s5 in sushiTypes: 
            print ('table 5 is occupied and needs %s' % sushiTypes[s5])
            makeFood(sushiTypes[s5])
        else:
            print ('sushi not found!\n sushiType = %i' % s5) 
    else:
        print ('Table 5 unoccupied')
 
    checkFood()
    s6 = get_seat_six()
    if s6 != Blank.seat_6:
        if s6 in sushiTypes: 
            print ('table 1 is occupied and needs %s' % sushiTypes[s6])
            makeFood(sushiTypes[s6])
        else:
            print ('sushi not found!\n sushiType = %i' % s6) 
    else:
        print ('Table 6 unoccupied') 
    clear_tables()

    s7 = get_seat_continue()      
    if s7 == 1252 :               #用颜色索引核对是否弹窗要求进行下一关
      pyautogui.click(521,573, button='left')    #点击继续
      time.sleep(.5)
      pyautogui.click(521,573, button='left')    #点击第二天继续
    
    

转载于:https://www.cnblogs.com/flying-wyf/p/6985335.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值