用于深度學(xué)習(xí)的貪吃蛇游戲腳本

功能:

  1. 上下左右鍵控制貪吃蛇朝各個(gè)方向移動(dòng)延都,每吃一個(gè)食物就長大一截蒸甜;
  2. 黑底白框易于機(jī)器識(shí)別棠耕;
  3. 機(jī)器實(shí)現(xiàn)自動(dòng)化時(shí),可以深度游戲底層柠新,自創(chuàng)user event事件窍荧,用pygame.event.post提交鍵盤事件。
  4. 空格鍵暫停登颓,esc鍵退出搅荞。

代碼:

import pygame
import sys,os,random

pygame.init()
screen = pygame.display.set_mode((600,600))
pygame.display.set_caption('巴拉巴拉小魔仙')
fclock = pygame.time.Clock()
snake = [[300,300],[290,300],[280,300]]
directions = {'up':(0,-10),'down':(0,10),'left':(-10,0),'right':(10,0)}
direct = 'right'
pause = True
fps = 10

def manhattan_distance(p1,p2):
    return abs(p1[0]-p2[0]) + abs(p1[1]-p2[1])

def gen_food_pos():
    x,y = random.randint(0,590),random.randint(0,590)
    if (x,y) in snake:
        gen_food_pos()
    return x,y

def gen_food(food_pos):
    return pygame.draw.rect(screen, (255,255,255), [food_pos[0],food_pos[1], 10, 10])

def gen_snake(snake):
    snake_body = []
    for x,y in snake:
        snake_body.append(pygame.draw.rect(screen, (255,255,255), [x, y, 10, 10]))
    return snake_body

def move(dircetion):
    step = directions.get(dircetion)
    snake[1:] = snake[:-1]
    snake[0] = snake[0][0] + step[0] ,snake[0][1] + step[1] 
    return snake

def inhance_snake(pos,snake):
    head = snake_body[0]
    if pos[0] < head.x :
        if abs(pos[0] - head.x) > abs(pos[1] - head.y) :
            newhead = [[head.x-10,head.y]]
            snake = newhead + snake
        else:
            newhead = [[head.x+10,head.y]]
            snake = newhead + snake
    else :
        if abs(pos[1] - head.y) > abs(pos[0] - head.x) :
            newhead = [[head.x-10,head.y-10]]
            snake = newhead + snake
        else:
            newhead = [[head.x-10,head.y+10]]
            snake = newhead + snake
    return snake


while True:
    food_pos = gen_food_pos()
    while True:
        if food_pos != snake [0]:
            for event in pygame.event.get():
                if   event.type == pygame.QUIT:sys.exit()
                elif event.type == pygame.KEYDOWN:
                    if   event.key == pygame.K_UP   :direct = 'up'
                    elif event.key == pygame.K_DOWN :direct = 'down'
                    elif event.key == pygame.K_LEFT :direct = 'left'
                    elif event.key == pygame.K_RIGHT:direct = 'right'
                    elif event.key == pygame.K_ESCAPE:sys.exit()
                    elif event.key == pygame.K_SPACE and pause is True:
                        directions = {'up':(0,0),'down':(0,0),'left':(0,0),'right':(0,0)}
                        pause = False
                    elif event.key == pygame.K_SPACE and pause is False:
                        directions = {'up':(0,-10),'down':(0,10),'left':(-10,0),'right':(10,0)}
                        pause = True
                    else :pass
            
            fclock.tick(fps)
            screen.fill((0,0,0))
            food = gen_food(food_pos)
            snake = move(direct)
            snake_body = gen_snake(snake)
            pygame.display.update()

            head = snake_body[0]
            if manhattan_distance(food_pos,(head.x,head.y)) <= 15:
                snake = inhance_snake(food_pos,snake)
                break

可以改善的地方:

  1. 增加積分制红氯,作為深度學(xué)習(xí)的激勵(lì)函數(shù)框咙;
  2. 沒有實(shí)現(xiàn)小蛇的懲罰項(xiàng),目前無論是碰到四壁還是自身都不會(huì)死的痢甘。

樣本:

巴拉巴拉小魔仙貪吃蛇
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末喇嘱,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子塞栅,更是在濱河造成了極大的恐慌者铜,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,270評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件放椰,死亡現(xiàn)場離奇詭異作烟,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)砾医,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,489評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門拿撩,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人如蚜,你說我怎么就攤上這事压恒。” “怎么了错邦?”我有些...
    開封第一講書人閱讀 165,630評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵探赫,是天一觀的道長。 經(jīng)常有香客問我撬呢,道長伦吠,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,906評(píng)論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮讨勤,結(jié)果婚禮上箭跳,老公的妹妹穿的比我還像新娘。我一直安慰自己潭千,他們只是感情好谱姓,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,928評(píng)論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著刨晴,像睡著了一般屉来。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上狈癞,一...
    開封第一講書人閱讀 51,718評(píng)論 1 305
  • 那天茄靠,我揣著相機(jī)與錄音,去河邊找鬼蝶桶。 笑死慨绳,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的真竖。 我是一名探鬼主播脐雪,決...
    沈念sama閱讀 40,442評(píng)論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼恢共!你這毒婦竟也來了战秋?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,345評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤讨韭,失蹤者是張志新(化名)和其女友劉穎脂信,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體透硝,經(jīng)...
    沈念sama閱讀 45,802評(píng)論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡狰闪,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,984評(píng)論 3 337
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了濒生。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片埋泵。...
    茶點(diǎn)故事閱讀 40,117評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖甜攀,靈堂內(nèi)的尸體忽然破棺而出秋泄,到底是詐尸還是另有隱情,我是刑警寧澤规阀,帶...
    沈念sama閱讀 35,810評(píng)論 5 346
  • 正文 年R本政府宣布恒序,位于F島的核電站,受9級(jí)特大地震影響谁撼,放射性物質(zhì)發(fā)生泄漏歧胁。R本人自食惡果不足惜滋饲,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,462評(píng)論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望喊巍。 院中可真熱鬧屠缭,春花似錦、人聲如沸崭参。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,011評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽何暮。三九已至奄喂,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間海洼,已是汗流浹背跨新。 一陣腳步聲響...
    開封第一講書人閱讀 33,139評(píng)論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留坏逢,地道東北人域帐。 一個(gè)月前我還...
    沈念sama閱讀 48,377評(píng)論 3 373
  • 正文 我出身青樓,卻偏偏與公主長得像是整,于是被迫代替她去往敵國和親肖揣。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,060評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容