一、利用Python編寫飛機大戰游戲-面向對象設計思想


相信大家看到過網上很多關於飛機大戰的項目,但是對其中的模塊方法,以及使用和游戲工作原理都不了解,看的也是一臉懵逼,根本看不下去。下面我做個詳細講解,在做此游戲需要用到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、運行效果如下,我截取的是圖片,實際是在一個向上移動一個向移動的動畫效果

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM