本文實例為大家分享了Python實現(xiàn)貪吃蛇小游戲的具體代碼,供大家參考,具體內(nèi)容如下
pygame 、random 、pyautogui
1.設(shè)置初始參數(shù)
設(shè)置每個網(wǎng)格大小為 20 px ,size可以隨意修改但最好為20的倍數(shù),設(shè)置初始方向向右,初始蛇長為 3 。
# 初始化參數(shù) size = 320 screen = pygame.display.set_mode([size,size],0 , 32) pygame.display.set_caption("貪吃蛇") cell_size = 20 cell_num = int(size/20) x , y = [60,0] # 初始方向向右 dir_snake = 'R' body_snake = [[0,0],[20,0],[40,0],[60,0]] # 初始蛇長為3 len_snake = 3 # 初始食物坐標(biāo) food_coor = [random.randint(0, cell_num - 1) * 20, random.randint(0, cell_num - 1) * 20, 20, 20] # 蛇移動速度 clock = pygame.time.Clock()
2.鍵盤控制
鍵盤上下左右控制蛇方向,禁止反向。
3.食物
蛇頭吃到食物后,蛇長加一 ,random 一個隨機坐標(biāo),如果坐標(biāo)再蛇身上則繼續(xù) random。
if [x,y] == food_coor[:2]: food_coor = [random.randint(0, cell_num - 1) * 20, random.randint(0, cell_num - 1) * 20, 20, 20] if food_coor[:2] in body_snake[-2:-len_snake -1 :-1]: food_coor = [random.randint(0, cell_num - 1) * 20, random.randint(0, cell_num - 1) * 20, 20, 20] len_snake +=1
4. 勝負判斷
蛇頭與蛇身碰撞判輸,彈出游戲結(jié)束窗口,說明最終蛇長為多長。
if body_snake[-1] in body_snake[-2:-len_snake -1 :-1]: pyautogui.alert(text='游戲結(jié)束,最終蛇長為{}'.format(len_snake)) exit()
代碼
import pygame , random ,pyautogui from pygame.locals import * # 初始化參數(shù) size = 500 screen = pygame.display.set_mode([size,size],0 , 32) pygame.display.set_caption("貪吃蛇") cell_size = 20 cell_num = int(size/20) x , y = [60,0] # 初始方向向右 dir_snake = 'R' body_snake = [[0,0],[20,0],[40,0],[60,0]] # 初始蛇長為3 len_snake = 3 # 初始食物坐標(biāo) food_coor = [random.randint(0, cell_num - 1) * 20, random.randint(0, cell_num - 1) * 20, 20, 20] # 蛇移動速度 clock = pygame.time.Clock() # bg def bg(): for i in range(0, size , int(cell_size)): pygame.draw.line(screen,[72,72,72],[i,0],[i,size]) for i in range(0, size, int(cell_size)): pygame.draw.line(screen, [72, 72, 72], [0, i], [size,i]) # 蛇 def snake(K): for x,y in K[:-len_snake - 1:-1]: pygame.draw.rect(screen,[255,255,255],[x,y,20,20],0) # 食物 def food(): pygame.draw.rect(screen,[255,0,0],food_coor,0) # 主循環(huán) def running(): global x ,y , dir_snake ,food_coor , len_snake while True: for event in pygame.event.get(): if event.type == QUIT: exit() screen.fill((40, 43, 46)) # 方向規(guī)則 if dir_snake == 'U': y -= 20 elif dir_snake == 'R': x += 20 elif dir_snake == 'D': y += 20 elif dir_snake == 'L': x -= 20 # 鍵盤方向控制 if event.type == KEYDOWN: if event.key == K_LEFT and dir_snake != 'R': dir_snake = 'L' elif event.key == K_DOWN and dir_snake != 'U': dir_snake = 'D' elif event.key == K_RIGHT and dir_snake != 'L': dir_snake = 'R' elif event.key == K_UP and dir_snake != 'D': dir_snake = 'U' # 撞墻之后 if x 0: x += size elif x >= size: x -= size elif y 0: y += size elif y >= size: y -= size # draw蛇體 body_snake.append([x,y]) snake(body_snake) food() # 吃到食物后food換位置 if [x,y] == food_coor[:2]: food_coor = [random.randint(0, cell_num - 1) * 20, random.randint(0, cell_num - 1) * 20, 20, 20] if food_coor[:2] in body_snake[-2:-len_snake -1 :-1]: food_coor = [random.randint(0, cell_num - 1) * 20, random.randint(0, cell_num - 1) * 20, 20, 20] len_snake +=1 # 游戲結(jié)束 if body_snake[-1] in body_snake[-2:-len_snake -1 :-1]: pyautogui.alert(text='游戲結(jié)束,最終蛇長為{}'.format(len_snake)) exit() # 格線 bg() # 右下角顯示蛇長 font = pygame.font.SysFont("simsunnsimsun", 40) text_surface = font.render("{}".format(len_snake), True, (255,255, 255)) screen.blit(text_surface , (size-40,size-40)) pygame.display.update() # 蛇的移動速度隨著蛇的長度而越來越快 clock.tick(len_snake * 2) if __name__ == '__main__': pygame.init() running()
輸出結(jié)果
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
標(biāo)簽:呼倫貝爾 湘西 三亞 烏魯木齊 安慶 銀川 葫蘆島 呼倫貝爾
巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《Python貪吃蛇小游戲?qū)嵗窒怼罚疚年P(guān)鍵詞 Python,貪吃,蛇,小游戲,實例,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。