相信大家看到過網上很多關於飛機大戰的項目,但是對其中的模塊方法,以及使用和游戲工作原理都不了解,看的也是一臉懵逼,根本看不下去。下面我做個詳細講解,在做此游戲需要用到pygame模塊,所以這一章先進行pygame入門講解--設置游戲窗口,繪制游戲背景,繪制戰機圖片,繪制戰機移動動畫(后面利用面向對象重新設計整個項目)
1、先看看游戲屏幕樣式及工作原理

2、再看看動畫工作原理

3、分析完了,上代碼,所有說明注釋寫的很清楚
#!/usr/bin/env python # coding=utf-8 # author:劉仲 # datetime:2018/7/11 9:58 # software: PyCharm import pygame pygame.init() # 加載pygame中的所有模塊,這是一句固定的代碼 screen = pygame.display.set_mode((480, 700)) # 創建一個游戲窗口,屏幕大小480*700,這里一般背景圖片多大,屏幕就設置多大 """繪制背景圖片步驟:1、圖片一般事先存在本地磁盤里,所以我們把需要的圖片先加載到內存中 2、將加載到內存的圖片繪制到屏幕指定的位置 3、刷新屏幕顯示,否則繪制的圖片無法顯示 制作動畫:動畫就是將多張靜止的圖片快速的播放,這里就涉及到幀數的問題,一般每秒60刷新60次就能制作高品質的動畫。 所以,pygame中提供了一個時鍾類,可以調用tick()方法控制幀數 """ bg = pygame.image.load('./images/background.png') # 加載背景圖片到內存 im = pygame.image.load('./images/me1.png') # 加載戰機到內存 enemy1 = pygame.image.load('./images/enemy1.png') # 加載敵機到內存 clock = pygame.time.Clock() # 創建時鍾對象 hero = pygame.Rect(200, 500, 102, 126) # 創建一個和戰機大小相等的矩形對象 # rect方法可以創建一個矩形對象,參數(x,y,weight,height),xy是原點位置,weight和height是矩形寬和高 enemy_1 = pygame.Rect(200, 100, 57, 43) # 創建一個和敵機大小的矩形對象 # 如何讓游戲屏幕一直顯示,這就叫游戲循環,把所有更新圖片位置,刷新幀數,監聽事件都寫在游戲循環里 while True: clock.tick(60) # 每秒刷新60次 for event in pygame.event.get(): # 監聽用戶做的各種操作,pygame.event.get()返回來的是一個用戶操作的動作列表 if event.type == pygame.QUIT: # 判斷用戶是否點擊退出按鈕,即游戲窗口的叉叉 print('游戲退出...') pygame.quit() # 卸載所有pygame的模塊 exit() # 退出整個系統 hero.y -= 2 # 戰機以2的速度向上移動 enemy_1.y += 1 # 敵機以1的速度鄉下移動 screen.blit(bg, (0, 0)) # 將背景圖片繪制到屏幕,繪制就調用屏幕對象的blit方法 # (疑問:屏幕圖像不是固定的嗎,也沒有去改變y值, # 為何放在循環里?這是因為每次循環都需要重新繪制一遍屏幕,再將飛機的圖片繪制到新的屏幕上,這樣就不會出現飛機殘影) screen.blit(im, hero) # 將戰機繪制到屏幕 screen.blit(enemy1, enemy_1) # 將敵機繪制到屏幕 pygame.display.update() # 這句也是固定代碼,更新屏幕顯示,否則無法顯示繪制好的圖片 pygame.quit() # 游戲退出
4、運行效果如下,我截取的是圖片,實際是在一個向上移動一個向移動的動畫效果

這個只是入門,制作簡單的,晚上或明天會繼續更新,利用面向對象實現完整的屏幕背景滾動,飛機發射子彈,碰撞檢測的代碼
