運用Python+Pygame開發坦克大戰遊戲_版本V1.01


創作不易,各位看官,點個贊收藏、關注必回關、QAQ、您的點贊是我更新的最大動力!

坦克素材,項目整體文件,私聊我免費發

一、項目整體說明

#v1.01 開發日誌 :

原理:和動畫原理相同,快速切換圖片,爲了避免上一次貼圖,每次刷新前,重貼所有圖片
分級實現: 對應下圖work項目文件圖  文件後綴編號 
				V1 搭建整體框架   		    	
				V2 設計主邏輯				 	
				V3 主邏輯事件檢測			
				V4 我方坦克分析				
				V5 創建我方坦克 並且加載貼圖		
				V6 實現我方坦克 移動	
				
整體實現: 	 實現鍵盤控制我方坦克上下左右移動 2020-05-13

在這裏插入圖片描述

分析.txt 部分截圖 序號爲程序編寫步驟 對比py文件 比如#v5.1# v5.2# v5.4

在這裏插入圖片描述


二、pygame下載方式

  • 1.pip 安裝

    • windows+R–>cmd–>命令行輸入 pip install pygame
  • 2.pycharm中安裝

    • file–>settting–>Project Interpreter–>右側±-install–>搜索框輸入pygame–>下方 install package
  • 3.下載好安裝包之後直接安裝

    • 在Python官網下載好pygame-1.9.6-cp37-cp37m-win_amd64.whl,打開命令窗口,切換到安裝包目錄,執行 pip install pygame-1.9.6-cp37-cp37m-win_amd64.whl
  • 使用 pip list 查看是否有pygame

三、項目文件

開始項目的時候先搭建整體框架

1、坦克大戰_框架_1.py

  • 實現框架的搭建(類的設計)

    • 主邏輯類

    • 基本坦克類

    • 我方坦克類

    • 敵方坦克類

    • 子彈類

    • 牆壁類

    • 爆炸類

# 主邏輯類
class MainGame:

    def start(self):
        """開始遊戲"""
        pass

    def game_over(self):
        """結束遊戲"""
        pass

# 基本坦克類
class BaseTank:
    pass

# 我方坦克類
class HeroTank:
    pass

# 敵方坦克類
class EnemyTank:
    pass

# 子彈類
class Bullet:
    pass

# 牆壁類
class wall:
    pass

2、坦克大戰_開始遊戲_窗口設置_2.py

v2
主邏輯類

屬性:遊戲窗口
方法:開始遊戲 start()
- 窗口初始化
- 設置窗口
- 設置標題(坦克大戰v_1.0)
- 窗口背景
- 遊戲應該在無限循環

"""
項目:坦克大戰
時間:2020-05-13
作者:穩穩
使用軟件及版本:Pycharm python3.6 pygame1.9
"""

# 主邏輯類
"""
主邏輯類

屬性:遊戲窗口
方法:開始遊戲 start()
    - 窗口初始化
    - 設置窗口
    - 設置標題(坦克大戰v_1.0)
    - 窗口背景
    - 遊戲應該在無限循環
    
"""
import pygame


class MainGame:

    # 遊戲主窗口
    window = None


    def start(self):
        """開始遊戲"""
        # 調用窗口初始化
        pygame.display.init()
        # 創建窗口 set_mode("窗口寬,窗口高")
        MainGame.window = pygame.display.set_mode((900,500))
        # 設置窗口標題
        pygame.display.set_caption("坦克大戰v_1.0")
        while True :
            # 設置窗口背景 fill() 設置顏色 RGB 這裏設置黑色
            MainGame.window.fill((0,0,0))
            # 刷新顯示
            pygame.display.update()

    def game_over(self):
        """結束遊戲"""
        pass

# 基本坦克類
class BaseTank:
    pass

# 我方坦克類
class HeroTank:
    pass

# 敵方坦克類
class EnemyTank:
    pass

# 子彈類
class Bullet:
    pass

# 牆壁類
class wall:
    pass

# 創建對象
start = MainGame()
# 對象開始遊戲
start.start()

初始化的窗口效果圖:
在這裏插入圖片描述

3、坦克大戰_事件檢測_3.py

v3
添加內容:主邏輯內進行事件檢測

主邏輯類
效果:鼠標放到窗口 反饋數據
屬性:遊戲窗口
方法:開始遊戲 start()
事件檢測 deal_event()

  • 鼠標點擊窗口事件 pygame.QUIT
  • 鍵盤按下事件 pygame.KEYDOWN
  • 鍵盤長按事件 pygame.key.getpressed()
"""
項目:坦克大戰
時間:2020-05-13
作者:穩穩
使用軟件及版本:Pycharm python3.6 pygame1.9
"""
# 主邏輯類
"""
主邏輯類

屬性:遊戲窗口
方法:開始遊戲 start()
    - 窗口初始化
    - 設置窗口
    - 設置標題(坦克大戰v_1.0)
    - 窗口背景
    - 遊戲應該在無限循環
    
"""
import pygame
import sys

class MainGame:

    # 遊戲主窗口
    window = None

    def start(self):
        """開始遊戲"""
        # 調用窗口初始化
        pygame.display.init()
        # 創建窗口 set_mode("窗口寬,窗口高")
        MainGame.window = pygame.display.set_mode((900,500))
        # 設置窗口標題
        pygame.display.set_caption("坦克大戰v_1.0")
        while True :
            # 設置窗口背景 fill() 設置顏色 RGB 這裏設置黑色
            MainGame.window.fill((0,0,0))
            # 調用時間檢測事件
            self.deal_event()
            # 刷新顯示
            pygame.display.update()

    def deal_event(self):
        """事件檢測"""
        # 鼠標放上窗口和敲擊鍵盤可以觀察到位置信息反饋
        # print(pygame.event.get())
        # 獲取新事件
        for event in pygame.event.get():
            # 1. 鼠標點擊關閉窗口事件
            if event.type == pygame.QUIT:
                print("點擊關閉窗口按鈕")
                sys.exit()  # 關閉程序
            # 2. 按下鍵盤檢測
            elif event.type == pygame.KEYDOWN:
                # 按下鍵盤反饋數據
                # print("按下鍵盤")
                if event.key == pygame.K_LEFT:
                    print("左移動")
                elif event.key == pygame.K_RIGHT:
                    print("右移動")
            # 3. 鼠標點擊檢測
            elif event.type == pygame.MOUSEBUTTONDOWN:
                print("鼠標點擊事件")

    def game_over(self):
        """結束遊戲"""
        pass

# 基本坦克類
class BaseTank:
    pass

# 我方坦克類
class HeroTank:
    pass

# 敵方坦克類
class EnemyTank:
    pass

# 子彈類
class Bullet:
    pass

# 牆壁類
class wall:
    pass

# 創建對象
start = MainGame()
# 對象開始遊戲
start.start()

鼠標放到遊戲窗口,鍵盤左右按下,可以看到反饋,其實這個可以註釋掉,只能留下關閉窗口檢測
在這裏插入圖片描述

4、坦克大戰_基本坦克_我方坦克繼承_4.py

v4
我方坦克分析

由於我方坦克和敵方坦克有相識屬性和方法,所以可以先寫基本坦克類
讓我方坦克和敵方坦克繼承基本坦克類

基本坦克類:BaseTank
屬性:圖片、方向、圖片矩形區域、坦克位置、移動速度、是否活着
方法:移動、貼圖
參考代碼以及步驟(定義基本坦克類,讓我方坦克繼承)
1.加載坦克圖片 存於字典中
2.初始化坦克方向
3.根據坦克方向獲取坦克圖片
4.獲取圖片矩形區域
5.根據傳入的參數,決定坦克的位置
6.移動速度
7.是否活着
坦克貼圖方法display_tank()
8.先獲取坦克圖片
9.貼坦克圖片
我方坦克類HeroTank(BaseTank)
10.繼承基本坦克類

"""
項目:坦克大戰
時間:2020-05-13
作者:穩穩
使用軟件及版本:Pycharm python3.6 pygame1.9
"""

# 主邏輯類
"""
主邏輯類

屬性:遊戲窗口
方法:開始遊戲 start()
    - 窗口初始化
    - 設置窗口
    - 設置標題(坦克大戰v_1.0)
    - 窗口背景
    - 遊戲應該在無限循環
    
"""
import pygame
import sys

class MainGame:

    # 遊戲主窗口
    window = None

    def start(self): # V2
        """開始遊戲"""
        # 調用窗口初始化
        pygame.display.init()
        # 創建窗口 set_mode("窗口寬,窗口高")
        MainGame.window = pygame.display.set_mode((900,500))
        # 設置窗口標題
        pygame.display.set_caption("坦克大戰v_1.0")
        while True :
            # 設置窗口背景 fill() 設置顏色 RGB 這裏設置黑色
            MainGame.window.fill((0,0,0))
            # 調用時間檢測事件
            self.deal_event()
            # 刷新顯示
            pygame.display.update()

    def deal_event(self): # V3
        """事件檢測"""
        # 鼠標放上窗口和敲擊鍵盤可以觀察到位置信息反饋
        # print(pygame.event.get())
        # 獲取新事件
        for event in pygame.event.get():
            # 1. 鼠標點擊關閉窗口事件
            if event.type == pygame.QUIT:
                print("點擊關閉窗口按鈕")
                sys.exit()  # 關閉程序
            # 2. 按下鍵盤檢測
            elif event.type == pygame.KEYDOWN:
                # 按下鍵盤反饋數據
                # print("按下鍵盤")
                if event.key == pygame.K_LEFT:
                    print("左移動")
                elif event.key == pygame.K_RIGHT:
                    print("右移動")
            # 3. 鼠標點擊檢測
            elif event.type == pygame.MOUSEBUTTONDOWN:
                print("鼠標點擊事件")

    def game_over(self):
        """結束遊戲"""
        pass

# 基本坦克類
class BaseTank: # V4

    def __init__(self,x,y):
        """
        基本坦克類的屬性
        x,y:坦克初始在遊戲窗口的位置
        """
        # 1.加載圖片文件,返回圖片對象
        # 1.將坦克圖片存儲在字典中
        self.images = {
            "U":pygame.image.load("tank_img/p1tankU.gif"),
            "D":pygame.image.load("tank_img/p1tankU.gif"),
            "L":pygame.image.load("tank_img/p1tankU.gif"),
            "R":pygame.image.load("tank_img/p1tankU.gif"),
        }

        # 2.給初始化坦克一個方向
        self.direction = "U"
        # 3.根據坦克方向獲取坦克圖片
        self.image = self.images[self.direction]
        # 4.獲取圖片矩形區域
        self.rect = self.image.get_rect()
        # 5.根據傳入的參數,決定坦克的位置
        self.rect.x = x # 坦克的x座標
        self.rect.y = y # 坦克的y座標
        # 6.移動速度
        self.speed = 3
        # 7.是否活着
        self.live = True

    def display_tank(self):
        """坦克圖片的貼圖方法"""

        # 8.先獲取坦克圖片
        self.image = self.images[self.direction]
        # 9.貼坦克圖片
        MainGame.window.blit(self.image,self.rect)

# 我方坦克類
class HeroTank(BaseTank):
    # 10.繼承基本坦克類
    def __init__(self):
        super(HeroTank,self).__init__(x,y)
        self.speed = 2

# 敵方坦克類
class EnemyTank:
    pass

# 子彈類
class Bullet:
    pass

# 牆壁類
class wall:
    pass

# 創建對象
start = MainGame()
# 對象開始遊戲
start.start()

5、坦克大戰_我方坦克貼圖_5.py

v5
創建我方坦克 並加載圖片

在主邏輯中,一開始就在我方坦克,定義P類屬性記錄
先定義創建我方坦克的方法 create_hero_tank,
在定義加載坦克圖片方法 load_hero_tank
在開始遊戲時,調用創建坦克對象的方法,在循環中加載坦克圖片
1.記錄我方坦克
2.在MainGame 創建坦克方法 create_tank()
3.加載我方坦克 load_heor_tank()
4.調用坦克創建的方法
5.調用坦克貼圖方法

並不能移動!!!!!!!!!!!!!!!!!!!!

"""
項目:坦克大戰
時間:2020-05-13
作者:穩穩
使用軟件及版本:Pycharm python3.6 pygame1.9
"""
import pygame
import sys

# 主邏輯類
class MainGame:

    # V2遊戲主窗口
    window = None
    # V5.1記錄我方坦克
    P1 = None

    def create_tank(self): #V5.2
        """創建我方坦克"""
        # v5.2判斷我方坦克是否創建
        if not MainGame.P1:
            MainGame.P1 = HeroTank(500,400) # 坦克初始位置

    def load_heor_tank(self): #v5.3
        """加載我方坦克"""
        # v5.3如果坦克就調用坦克貼圖的方法
        if MainGame.P1 and MainGame.P1.live:
            MainGame.P1.display_tank()
        else:
            # v5.3如果坦克死了,刪除坦克對象,刪除貼圖
            del MainGame.P1
            MainGame.P1 = None # v5.3恢復坦克初始化設置

    def start(self): # V2
        """開始遊戲"""
        # V2調用窗口初始化
        pygame.display.init()
        # V2創建窗口 set_mode("窗口寬,窗口高")
        MainGame.window = pygame.display.set_mode((900,500))
        # V2設置窗口標題
        pygame.display.set_caption("坦克大戰v_1.0")

        # v5.4 調用坦克創建的方法
        self.create_tank()
        while True :
            # V2設置窗口背景 fill() 設置顏色 RGB 這裏設置黑色
            MainGame.window.fill((0,0,0))
            # V2調用時間檢測事件
            self.deal_event()
            # v5.5調用坦克貼圖方法
            self.load_heor_tank()
            # V2刷新顯示
            pygame.display.update()

    def deal_event(self): # V3
        """事件檢測"""
        # V3鼠標放上窗口和敲擊鍵盤可以觀察到位置信息反饋
        # print(pygame.event.get())
        # V3獲取新事件
        for event in pygame.event.get():
            # V3.1 鼠標點擊關閉窗口事件
            if event.type == pygame.QUIT:
                print("點擊關閉窗口按鈕")
                sys.exit()  # 關閉程序
            # V3.2 按下鍵盤檢測
            elif event.type == pygame.KEYDOWN:
                # print("按下鍵盤")
                # V3.2按下鍵盤反饋數據
                if event.key == pygame.K_LEFT:
                    print("左移動")
                elif event.key == pygame.K_RIGHT:
                    print("右移動")
            # 3. 鼠標點擊檢測
            elif event.type == pygame.MOUSEBUTTONDOWN:
                print("鼠標點擊事件")

    def game_over(self):
        """結束遊戲"""
        pass

# 基本坦克類
class BaseTank: # V4

    def __init__(self,x,y):
        self.x = x
        self.y = y
        """
        基本坦克類的屬性
        x,y:坦克初始在遊戲窗口的位置
        """
        # V4.1.加載圖片文件,返回圖片對象
        # V4.1.將坦克圖片存儲在字典中
        self.images = {
            "U":pygame.image.load("tank_img/p1tankU.gif"),
            "D":pygame.image.load("tank_img/p1tankU.gif"),
            "L":pygame.image.load("tank_img/p1tankU.gif"),
            "R":pygame.image.load("tank_img/p1tankU.gif"),
        }

        # V4.2.給初始化坦克一個方向
        self.direction = "U"
        # V4.3.根據坦克方向獲取坦克圖片
        self.image = self.images[self.direction]
        # V4.4.獲取圖片矩形區域
        self.rect = self.image.get_rect()
        # V4.5.根據傳入的參數,決定坦克的位置
        self.rect.x = x # 坦克的x座標
        self.rect.y = y # 坦克的y座標
        # V4.6.移動速度
        self.speed = 3
        # V4.7.是否活着
        self.live = True

    def display_tank(self):
        """坦克圖片的貼圖方法"""

        # V4.8.先獲取坦克圖片
        self.image = self.images[self.direction]
        # V4.9.貼坦克圖片
        MainGame.window.blit(self.image,self.rect)

# 我方坦克類
class HeroTank(BaseTank):
    # V4.10.繼承基本坦克類
    def __init__(self,x,y):
        super(HeroTank,self).__init__(x,y)
        self.speed = 2

# 敵方坦克類
class EnemyTank:
    pass

# 子彈類
class Bullet:
    pass

# 牆壁類
class wall:
    pass

# 創建對象

start = MainGame()
# 對象開始遊戲
start.start()

效果圖:
在這裏插入圖片描述

6、坦克大戰_我方坦克移動_6.py

v6
實現我方坦克移動的方法
BaseTank 中 創建 move()
在基本坦克類中添加坦克移動方法
判斷坦克的方向,是哪個方向就向哪個方向移動 PS:參考位置圖
- 移動方式:
- 初始化位置設爲全局變量
代碼執行:
1.坦克方向判斷
2.邊界判斷
3.修改全局變量 SCREEN_HEIGHT,SCREEN_WIDTH
4.修改判斷邊界
5.我方坦克重寫父類move()
6.判斷鍵盤狀態
7.鍵盤被按下執行移動

"""
項目:坦克大戰
時間:2020-05-13
作者:穩穩
使用軟件及版本:Pycharm python3.6 pygame1.9
"""
import pygame
import sys
import time
# V6.3 全局判斷
SCREEN_HEIGHT = 500
SCREEN_WIDTH = 900
# 主邏輯類
class MainGame:

    # V2遊戲主窗口
    window = None
    # V5.1記錄我方坦克
    P1 = None

    def create_tank(self): # V5.2
        """創建我方坦克"""
        # v5.2判斷我方坦克是否創建
        if not MainGame.P1:
            MainGame.P1 = HeroTank(500,400) # 坦克初始位置

    def load_heor_tank(self): # v5.3
        """加載我方坦克"""
        # v5.3如果坦克就調用坦克貼圖的方法
        if MainGame.P1 and MainGame.P1.live:
            MainGame.P1.display_tank()
            MainGame.P1.move()
        else:
            # v5.3如果坦克死了,刪除坦克對象,刪除貼圖
            del MainGame.P1
            MainGame.P1 = None # v5.3恢復坦克初始化設置

    def start(self): # V2
        """開始遊戲"""
        # V2調用窗口初始化
        pygame.display.init()
        # V2創建窗口 set_mode("窗口寬,窗口高")          # V6.3
        MainGame.window = pygame.display.set_mode((SCREEN_WIDTH, SCREEN_HEIGHT))
        # V2設置窗口標題
        pygame.display.set_caption("坦克大戰v_1.0")

        # v5.4 調用坦克創建的方法
        self.create_tank()
        while True :
            # V2設置窗口背景 fill() 設置顏色 RGB 這裏設置黑色
            MainGame.window.fill((0,0,0))
            # V2調用時間檢測事件
            self.deal_event()
            # v5.5調用坦克貼圖方法
            self.load_heor_tank()
            # V2刷新顯示
            pygame.display.update()
            time.sleep(0.02)

    def deal_event(self): # V3
        """事件檢測"""
        # V3鼠標放上窗口和敲擊鍵盤可以觀察到位置信息反饋
        # print(pygame.event.get())
        # V3獲取新事件
        for event in pygame.event.get():
            # V3.1 鼠標點擊關閉窗口事件
            if event.type == pygame.QUIT:
                print("點擊關閉窗口按鈕")
                sys.exit()  # 關閉程序
            # V3.2 按下鍵盤檢測
            elif event.type == pygame.KEYDOWN:
                # print("按下鍵盤")
                # V3.2按下鍵盤反饋數據
                if event.key == pygame.K_LEFT:
                    print("左移動")
                elif event.key == pygame.K_RIGHT:
                    print("右移動")
                elif event.key == pygame.K_SPACE:
                    print("空格發射子彈")
            # 3. 鼠標點擊檢測
            elif event.type == pygame.MOUSEBUTTONDOWN:
                print("鼠標點擊事件")

    def game_over(self):
        """結束遊戲"""

# 基本坦克類
class BaseTank: # V4

    def __init__(self,x,y):
        self.x = x
        self.y = y
        """
        基本坦克類的屬性
        x,y:坦克初始在遊戲窗口的位置
        """
        # V4.1.加載圖片文件,返回圖片對象
        # V4.1.將坦克圖片存儲在字典中
        self.images = {
            "U":pygame.image.load("tank_img/p1tankU.gif"),
            "D":pygame.image.load("tank_img/p1tankD.gif"),
            "L":pygame.image.load("tank_img/p1tankL.gif"),
            "R":pygame.image.load("tank_img/p1tankR.gif"),
        }

        # V4.2.給初始化坦克一個方向
        self.direction = "U"
        # V4.3.根據坦克方向獲取坦克圖片
        self.image = self.images[self.direction]
        # V4.4.獲取圖片矩形區域
        self.rect = self.image.get_rect()
        # V4.5.根據傳入的參數,決定坦克的位置
        self.rect.x = x # 坦克的x座標
        self.rect.y = y # 坦克的y座標
        # V4.6.移動速度
        self.speed = 3
        # V4.7.是否活着
        self.live = True

    def display_tank(self):
        """坦克圖片的貼圖方法"""

        # V4.8.先獲取坦克圖片
        self.image = self.images[self.direction]
        # V4.9.貼坦克圖片
        MainGame.window.blit(self.image,self.rect)

    def move(self):
        """坦克移動的方法"""
        # v6.1 判斷坦克的方向 是否向上 向上處理
        if self.direction == "U":
            # v6.2 邊界判斷
            if self.rect.y > 0 :
                self.rect.y -= self.speed
        elif self.direction == "D":
            # v6.2 邊界判斷         #v6.4
            if self.rect.y<SCREEN_HEIGHT-self.rect.height :
                self.rect.y += self.speed
        elif self.direction == "L":
            # v6.2 邊界判斷
            if self.rect.x > 0 :
                self.rect.x -= self.speed
        elif self.direction == "R":
            # v6.2 邊界判斷         #v6.4
            if self.rect.x<SCREEN_WIDTH-self.rect.width :
                self.rect.x += self.speed
    # 在加載我方坦克調用坦克移動放馬 MainGame.P1.move()
    # 此時坦克只能向上移動

# 我方坦克類
class HeroTank(BaseTank):
    # V4.10.繼承基本坦克類
    def __init__(self,x,y):
        super(HeroTank,self).__init__(x,y)
        self.speed = 2

    # v6.5 創建我方坦克方法 重寫父類
    def move(self):
        """我方坦克移動方法"""
        # #v6.6 鍵盤長按事件 獲取鍵盤上所有按鍵狀態 按下1 沒按0
        keys_status = pygame.key.get_pressed()
        # print(keys_status)
        # v6.7如果被按下
        if keys_status[pygame.K_UP]:
            # 改變移動的方向 重新賦值
            self.direction = "U"
            # 調用父類移動方式
            super(HeroTank, self).move()
        elif keys_status[pygame.K_DOWN]:
            # 改變移動的方向 重新賦值
            self.direction = "D"
            # 調用父類移動方式
            super(HeroTank, self).move()
        elif keys_status[pygame.K_LEFT]:
            # 改變移動的方向 重新賦值
            self.direction = "L"
            # 調用父類移動方式
            super(HeroTank, self).move()
        elif keys_status[pygame.K_RIGHT]:
            # 改變移動的方向 重新賦值
            self.direction = "R"
            # 調用父類移動方式
            super(HeroTank, self).move()

# 敵方坦克類
class EnemyTank:
    pass

# 子彈類
class Bullet:
    pass

# 牆壁類
class wall:
    pass

# 創建對象

start = MainGame()
# 對象開始遊戲
start.start()

效果圖說明:可以左右移動,並且邊界設置
在這裏插入圖片描述

四、API Pygame模塊遊戲開發所用語句

遊戲_API文檔.py

import pygame  # 導入pygame

# 初始化pygame庫,讓計算機硬件準備
pygame.init()


# --------窗口相關操作----------

# 創建窗口
window = pygame.display.set_mode((窗口寬,窗口高))

#窗口填充顏色
window.fill((0,0,0))

# 刷新界面  不刷新不會更新顯示的內容
pygame.display.update()


# 設置窗口標題
pygame.display.set_caption("窗口標題")

# 設置窗口圖標
image = pygame.image.load("res/game.ico")
pygame.display.set_icon(image)



# --------圖像相關操作-----------

# 加載圖片文件,返回圖片對象
image = pygame.image.load("圖片路徑")

# 貼圖(指定座標,將圖片繪製到窗口)
window.blit(image, (0, 0))

# 判斷兩個矩形是否相交,相交返回True, 否則返回False
flag = pygame.Rect.colliderect(rect1, rect2)

# 進行一對一的衝突檢測
pygame.sprite.collide_rect(obj1,obj2)

# 獲得圖片矩形對象 -> Rect(x, y, width, height)  x,y默認都是左上角(0,0)
rect = image.get_rect()
# 獲取圖片的寬高
print(rect.width)

# 在原位置基礎上,移動指定的偏移量 (x, y 增加)
rect.move_ip(num1, num2)

# 將圖片對象按指定寬高縮放,返回新的圖片對象
trans_image = pygame.transform.scale(image, (WINDOWWIDTH, WINDOWHEIGHT))



# --------事件相關操作-----------

# 獲取新事件
for event in pygame.event.get():
	# 1. 鼠標點擊關閉窗口事件
	if event.type == pygame.QUIT:
		print("點擊關閉窗口按鈕")
		sys.exit()  # 關閉程序
		pygame.quit()  # 退出pygame,清理pygame佔用資源

	# 2. 鍵盤按下事件
        if event.type == pygame.KEYDOWN:
            # 判斷用戶按鍵
            if event.key == pygame.K_LEFT or event.key == pygame.K_a:
                print("left")
            if event.key == pygame.K_RIGHT or event.key == pygame.K_d:
                print("right")
            if event.key == pygame.K_SPACE:
                print("space")


# 3. 鍵盤長按事件
# 獲取當前鍵盤所有按鍵的狀態(按下/沒有按下),返回bool元組  (0, 0, 0, 0, 1, 0, 0, 0, 0)
pressed_keys = pygame.key.get_pressed()

if pressed_keys[pygame.K_a] or pressed_keys[pygame.K_LEFT]:
	print("left")
if pressed_keys[pygame.K_d] or pressed_keys[pygame.K_RIGHT]:
    print("right")


# ----------文本相關操作-------------

# 加載系統字體,返回字體對象
font_obj = pygame.font.SysFont('SimHei', 42)

# 加載自定義字體,返回字體對象
font_obj = pygame.font.Font("res/SIMHEI.TTF", 42)

三基色: Red Green Blue
0 - 255

# 設置文本,返回文本對象   render(文本內容, 抗鋸齒,顏色)
text_obj = font.render("飛機大戰", 1, (255, 255, 255))

# 設置文本的位置和尺寸   獲取文本的Rect並修改Rect的中心點爲 (300,300)
text_rect = text_obj.get_rect(centerx=300, centery=300)

# 在指定位置和尺寸繪製指定文字對象
window.blit(text_obj, text_rect)



# ---------音效相關操作------------

# 加載背景音樂
pygame.mixer.music.load("./res/bg2.ogg")
# 循環播放背景音樂
pygame.mixer.music.play(-1)
# 停止背景音樂
pygame.mixer.music.stop()

# 生成音效對象
boom_sound = pygame.mixer.Sound("./res/baozha.ogg")
# 播放音效
boom_sound.play()
# 停止音效
boom_sound.stop()





發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章