您好,登錄后才能下訂單哦!
本篇內容介紹了“Python實現貪吃蛇小游戲源碼分享”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!
今天給大家免費分享一下Python飛機游戲的源碼。
(聲明:本文使用的源碼非原創,17年在CSDN上用幣下載的資源,具體是哪位大佬的忘記了) 在此之前首先說一下環境 Python3.X (使用2.x的大佬自己稍微改動一下就行) pygame 1.9.6(當然這個沒必要和我一樣)
## 導入相關模塊 import random import pygame import sys from pygame.locals import *
snake_speed = 15 #貪吃蛇的速度 windows_width = 800 windows_height = 600 #游戲窗口的大小 cell_size = 20 #貪吃蛇身體方塊大小,注意身體大小必須能被窗口長寬整除 ''' #初始化區 由于我們的貪吃蛇是有大小尺寸的, 因此地圖的實際尺寸是相對于貪吃蛇的大小尺寸而言的 ''' map_width = int(windows_width / cell_size) map_height = int(windows_height / cell_size) # 顏色定義 white = (255, 255, 255) black = (0, 0, 0) gray = (230, 230, 230) dark_gray = (40, 40, 40) DARKGreen = (0, 155, 0) Green = (0, 255, 0) Red = (255, 0, 0) blue = (0, 0, 255) dark_blue =(0,0, 139) BG_COLOR = black #游戲背景顏色 # 定義方向 UP = 1 DOWN = 2 LEFT = 3 RIGHT = 4 HEAD = 0 #貪吃蛇頭部下標
#主函數 def main(): pygame.init() # 模塊初始化 snake_speed_clock = pygame.time.Clock() # 創建Pygame時鐘對象 screen = pygame.display.set_mode((windows_width, windows_height)) # screen.fill(white) pygame.display.set_caption("Python 貪吃蛇小游戲") #設置標題 show_start_info(screen) #歡迎信息 while True: running_game(screen, snake_speed_clock) show_gameover_info(screen) #游戲運行主體 def running_game(screen,snake_speed_clock): startx = random.randint(3, map_width - 8) #開始位置 starty = random.randint(3, map_height - 8) snake_coords = [{'x': startx, 'y': starty}, #初始貪吃蛇 {'x': startx - 1, 'y': starty}, {'x': startx - 2, 'y': starty}] direction = RIGHT # 開始時向右移動 food = get_random_location() #實物隨機位置 while True: for event in pygame.event.get(): if event.type == QUIT: terminate() elif event.type == KEYDOWN: if (event.key == K_LEFT or event.key == K_a) and direction != RIGHT: direction = LEFT elif (event.key == K_RIGHT or event.key == K_d) and direction != LEFT: direction = RIGHT elif (event.key == K_UP or event.key == K_w) and direction != DOWN: direction = UP elif (event.key == K_DOWN or event.key == K_s) and direction != UP: direction = DOWN elif event.key == K_ESCAPE: terminate() move_snake(direction, snake_coords) #移動蛇 ret = snake_is_alive(snake_coords) if not ret: break #蛇跪了. 游戲結束 snake_is_eat_food(snake_coords, food) #判斷蛇是否吃到食物 screen.fill(BG_COLOR) #draw_grid(screen) draw_snake(screen, snake_coords) draw_food(screen, food) draw_score(screen, len(snake_coords) - 3) pygame.display.update() snake_speed_clock.tick(snake_speed) #控制fps
#將食物畫出來 def draw_food(screen, food): x = food['x'] * cell_size y = food['y'] * cell_size appleRect = pygame.Rect(x, y, cell_size, cell_size) pygame.draw.rect(screen, Red, appleRect)
#將貪吃蛇畫出來 def draw_snake(screen, snake_coords): for coord in snake_coords: x = coord['x'] * cell_size y = coord['y'] * cell_size wormSegmentRect = pygame.Rect(x, y, cell_size, cell_size) pygame.draw.rect(screen, dark_blue, wormSegmentRect) wormInnerSegmentRect = pygame.Rect( #蛇身子里面的第二層亮綠色 x + 4, y + 4, cell_size - 8, cell_size - 8) pygame.draw.rect(screen, blue, wormInnerSegmentRect)
#畫網格(可選) def draw_grid(screen): for x in range(0, windows_width, cell_size): # draw 水平 lines pygame.draw.line(screen, dark_gray, (x, 0), (x, windows_height)) for y in range(0, windows_height, cell_size): # draw 垂直 lines pygame.draw.line(screen, dark_gray, (0, y), (windows_width, y))
#移動貪吃蛇 def move_snake(direction, snake_coords): if direction == UP: newHead = {'x': snake_coords[HEAD]['x'], 'y': snake_coords[HEAD]['y'] - 1} elif direction == DOWN: newHead = {'x': snake_coords[HEAD]['x'], 'y': snake_coords[HEAD]['y'] + 1} elif direction == LEFT: newHead = {'x': snake_coords[HEAD]['x'] - 1, 'y': snake_coords[HEAD]['y']} elif direction == RIGHT: newHead = {'x': snake_coords[HEAD]['x'] + 1, 'y': snake_coords[HEAD]['y']} snake_coords.insert(0, newHead)
#判斷蛇死了沒 def snake_is_alive(snake_coords): tag = True if snake_coords[HEAD]['x'] == -1 or snake_coords[HEAD]['x'] == map_width or snake_coords[HEAD]['y'] == -1 or \ snake_coords[HEAD]['y'] == map_height: tag = False # 蛇碰壁啦 for snake_body in snake_coords[1:]: if snake_body['x'] == snake_coords[HEAD]['x'] and snake_body['y'] == snake_coords[HEAD]['y']: tag = False # 蛇碰到自己身體啦 return tag
#判斷貪吃蛇是否吃到食物 def snake_is_eat_food(snake_coords, food): #如果是列表或字典,那么函數內修改參數內容,就會影響到函數體外的對象。 if snake_coords[HEAD]['x'] == food['x'] and snake_coords[HEAD]['y'] == food['y']: food['x'] = random.randint(0, map_width - 1) food['y'] = random.randint(0, map_height - 1) # 實物位置重新設置 else: del snake_coords[-1] # 如果沒有吃到實物, 就向前移動, 那么尾部一格刪掉
#食物隨機生成 def get_random_location(): return {'x': random.randint(0, map_width - 1), 'y': random.randint(0, map_height - 1)}
#開始信息顯示 def show_start_info(screen): font = pygame.font.Font('myfont.ttf', 40) tip = font.render('按任意鍵開始游戲~~~', True, (65, 105, 225)) gamestart = pygame.image.load('gamestart.png') screen.blit(gamestart, (140, 30)) screen.blit(tip, (240, 550)) pygame.display.update() while True: #鍵盤監聽事件 for event in pygame.event.get(): # event handling loop if event.type == QUIT: terminate() #終止程序 elif event.type == KEYDOWN: if (event.key == K_ESCAPE): #終止程序 terminate() #終止程序 else: return #結束此函數, 開始游戲 #游戲結束信息顯示 def show_gameover_info(screen): font = pygame.font.Font('myfont.ttf', 40) tip = font.render('按Q或者ESC退出游戲, 按任意鍵重新開始游戲~', True, (65, 105, 225)) gamestart = pygame.image.load('gameover.png') screen.blit(gamestart, (60, 0)) screen.blit(tip, (80, 300)) pygame.display.update() while True: #鍵盤監聽事件 for event in pygame.event.get(): # event handling loop if event.type == QUIT: terminate() #終止程序 elif event.type == KEYDOWN: if event.key == K_ESCAPE or event.key == K_q: #終止程序 terminate() #終止程序 else: return #結束此函數, 重新開始游戲 #畫成績 def draw_score(screen,score): font = pygame.font.Font('myfont.ttf', 30) scoreSurf = font.render('得分: %s' % score, True, Green) scoreRect = scoreSurf.get_rect() scoreRect.topleft = (windows_width - 120, 10) screen.blit(scoreSurf, scoreRect) #程序終止 def terminate(): pygame.quit() sys.exit()
main()
“Python實現貪吃蛇小游戲源碼分享”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。