作用:pygame一般用來做遊戲
注意:1.在使用pygame提供的功能之前,需要呼叫init方法
2.在遊戲結束前需要呼叫quit 方法
pygame中的各個函數:
1.pygame.init():該函數在使用pygame時進行初始化,只有引用了該函數才能使用pygame提供的所用功能
2.pygame.Rect():函數可以設定一張圖片的位置以及大小,這是一個特殊的函數,不需要引用init函數都可以使用
3.pygame.display.set_mode (resolution=(0,0),flags=0,depth=0):此函數可以建立遊戲的主視窗對象,
參數1:指定螢幕的寬與高,預設與螢幕大小一致
參數2:指定螢幕的附加選項,預設不傳遞
參數3:顏色的位數,預設會自動匹配
4.pygame.display.update():刷新主視窗內容
5.pygame.image.load():載入所需的圖片
6.主視窗物件.blit(影像,位置):將影像繪製到指定的位置
7.pygame.time.Clock():建立一個時間對象,用來控制幀率
8.時間對象.tick(數字):控制每秒的幀率
9.pygame.event.get():事件監聽,回傳的是一個清單
10.pygame.sprite.Sprite:精靈,用來儲存映像資料images和rect的物件
11.pygame.sprite.Group(精靈1,精靈2):建立精靈群組物件
12.精靈群組物件.update():更新精靈群組中精靈的位置
13.精靈組物件.draw():把精靈群組中的所有精靈畫到主視窗
#14.pygame.time.set_time(eventid,milliseconds):設定每個一段時間程式會執行什麼內容,第一個需要基於常數pygame.USEREVENT來指定,第二個參數是毫秒值
15.pygame.key.get_pressed():按鍵監聽,會傳回所有按鍵的元組,通過鍵盤常數,判斷元組中某個按鍵是否被觸發,如果被觸發對應數值為1
16.pygame.sprite.groupcollide(精靈組1,精靈組2,bool,bool):檢測兩個精靈組的碰撞,會傳回一個字典,第一個參數和第三個參數關聯,第二個參數和第四個參數關聯,當bool型別為真時,碰撞會被銷毀
# 17.pygame.sprite.spritecollide(精靈,精靈組,bool):偵測精靈和精靈群組的碰撞,會傳回精靈群組的列表,當bool型別為真時,精靈群組會被銷毀
#一個飛機大戰的遊戲總結:
import pygame import time from plane_Sprite import * class PlaneGame(object): def __init__(self): print('初始化') # 1.创建游戏窗口 self.screem = pygame.display.set_mode(SCREEM_RECT.size) # 这里需要拿到元组类型的数据,使用 .size 可以拿到数组中的数据 # 2.创建游戏时钟 self.clock = pygame.time.Clock() # 3.调用私有方法,精灵和精灵组的创建 self.__create_sprite() # 4.创建敌机定时器 pygame.time.set_timer(CREATE_ENEMY_EVENT, 1000) # 5.创建子弹定时器 pygame.time.set_timer(HERO_FIRE_EVENT, 500) def __create_sprite(self): # 创建背景精灵类 # bg1 = BackGround('./images/background.jpg') # bg2 = BackGround('./images/background.jpg') bg1 = BackGround() bg2 = BackGround(True) self.back_groud = pygame.sprite.Group(bg1, bg2) # 创建背景精灵组 self.enemy_group = pygame.sprite.Group() # 创建敌机精灵组 self.he1 = Hero() self.hero_group = pygame.sprite.Group(self.he1) # 创建英雄精灵组 def StartGame(self): print('开始游戏') while True: # 1.设置刷新的帧率 self.clock.tick(SHUA) # 2.事件监听 self.__event_handler() # 3.碰撞检测 self.__check_cllide() # 4.更新/和绘制精灵组图片 self.__update_sprite() # 5.更新显示 pygame.display.update() # 定义私有方法 def __event_handler(self): """监听事件处理""" for event in pygame.event.get(): if event.type == pygame.QUIT: # 调用静态方法:使用类名 PlaneGame.__game_over() # 判断定时器事件 elif event.type == CREATE_ENEMY_EVENT: # 创建敌机对象 enemy = Enemy() # 添加到精灵组中 self.enemy_group.add(enemy) elif event.type == HERO_FIRE_EVENT: self.he1.fire() # 获取键盘信息 key_pressed = pygame.key.get_pressed() # 判断对应的键盘 if key_pressed[pygame.K_RIGHT]: self.he1.speed = 3 elif key_pressed[pygame.K_LEFT]: self.he1.speed = -3 elif key_pressed[pygame.K_UP]: self.he1.speed = -2 elif key_pressed[pygame.K_DOWN]: self.he1.speed = 2 else: self.he1.speed = 0 def __check_cllide(self): """碰撞检测""" # 子弹摧毁敌机 pygame.sprite.groupcollide(self.he1.bullets, self.enemy_group, True, True) # 敌机撞毁英雄 enemy_list = pygame.sprite.spritecollide(self.he1, self.enemy_group,True) if len(enemy_list) > 0: # 销毁英雄 self.he1.kill() # 结束游戏 PlaneGame.__game_over() def __update_sprite(self): """更新精灵组""" self.back_groud.update() # 刷新图像数据 self.back_groud.draw(self.screem) # 绘画图像 # 敌机精灵组更新 self.enemy_group.update() self.enemy_group.draw(self.screem) # 英雄精灵组更新 self.hero_group.update() self.hero_group.draw(self.screem) # 子弹精灵组更新 self.he1.bullets.update() self.he1.bullets.draw(self.screem) @staticmethod # 静态方法 def __game_over(): """结束游戏""" print('游戏结束') pygame.quit() exit() if __name__ == "__main__": # 创建游戏对象 plane_start = PlaneGame() # 启动游戏 plane_start.StartGame()
上面是遊戲實現功能的代碼
import random import pygame # 定义常量,一般使用大写字母' # 屏幕大小常量 SCREEM_RECT = pygame.Rect(0, 0, 591, 764) # 刷新的帧率 SHUA = 60 # 设置敌机定时器事件常量 CREATE_ENEMY_EVENT = pygame.USEREVENT # 设置英雄子弹定时器事件常量 HERO_FIRE_EVENT = pygame.USEREVENT + 1 # 因为 pygame.USEREVENT 被占用,所以需要加1进行区分 class GameSprite(pygame.sprite.Sprite): """飞机大战游戏精灵""" def __init__(self, image_name, speed = 1): # 需要调用超级初始化方法 super().__init__() # 定义属性 self.image = pygame.image.load(image_name) # 加载图像 self.rect = self.image.get_rect() # 获取到图像位置变更的信息 self.speed = speed # 设置变更的速度 def update(self): # 在屏幕垂直向上移动 self.rect.y += self.speed # 创建一个子类,完成屏幕需求 class BackGround(GameSprite): """游戏背景精灵""" # is_alt 判断参数 def __init__(self, is_alt= False): # 调用父类初始化方法设置参数 super().__init__('./images/background.jpg') # 判断是否是叠加图像 if is_alt: self.rect.y = -self.rect.height def update(self): # 调用父类的方法 super().update() # 2.判断是否移出屏幕,移出屏幕,重新设置到屏幕上方 if self.rect.y >= SCREEM_RECT.height: self.rect.y = -self.rect.height # 创建敌机类 class Enemy(GameSprite): def __init__(self): # 1.调用父类方法,创建敌机精灵,同时指定敌机图片 super().__init__('./images/enemy_2.jpg') # 2.指定敌机的初始随机速度 self.speed = random.randint(1, 3) # 3.指定敌机的初始随机位置 self.rect.bottom = 0 max_x = SCREEM_RECT.width - self.rect.width # 计算x的最大值 self.rect.x = random.randint(0, max_x) def update(self): # 调用父类方法,保持垂直飞行 super().update() # 判断是否非常屏幕,是,则删除精灵组 if self.rect.y >= SCREEM_RECT.height + self.rect.height: # kill 方法可以将精灵从精灵组中移除,精灵就会被自动销毁 self.kill() def __del__(self): # print('%s' % self.rect) pass # 创建英雄类 class Hero(GameSprite): def __init__(self): # 1.调用父类中的初始方法,加载图片 super().__init__('./images/planeNormal_2.jpg', 0) # 2.重新设置位置 self.rect.centerx = SCREEM_RECT.centerx self.rect.bottom = SCREEM_RECT.bottom - 80 # 创建子弹组 self.bullets = pygame.sprite.Group() def update(self): self.rect.x += self.speed # 控制屏幕不会出界 if self.rect.x <= -30: self.rect.x = -30 elif self.rect.right >= SCREEM_RECT.right + 30: self.rect.right = SCREEM_RECT.right + 30 def fire(self): # 设置每次发射三枚子弹 for i in (0, 1, 2): # 1.创建子弹精灵 bullet = Bullet() # 2.设置精灵位置 bullet.rect.bottom = self.rect.y - i * 24 bullet.rect.centerx = self.rect.centerx # 3.将精灵添加到精灵组 self.bullets.add(bullet) # 创建子弹类 class Bullet(GameSprite): def __init__(self): # 调用父类方法 super().__init__('./images/bullet2.jpg', -3) def update(self): super().update() if self.rect.bottom < 0: self.kill()
上面是每個精靈實現的代碼,改代碼段命名為plane_Sprite,作為一個模組在功能實現程式碼中被引用,上面程式碼用到的圖片需要自己找
【程式碼實現效果】
以上是python第三方函式庫pygame如何使用的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本篇文章给大家带来了关于Python的相关知识,其中主要介绍了关于Seaborn的相关问题,包括了数据可视化处理的散点图、折线图、条形图等等内容,下面一起来看一下,希望对大家有帮助。

本篇文章给大家带来了关于Python的相关知识,其中主要介绍了关于进程池与进程锁的相关问题,包括进程池的创建模块,进程池函数等等内容,下面一起来看一下,希望对大家有帮助。

本篇文章给大家带来了关于Python的相关知识,其中主要介绍了关于简历筛选的相关问题,包括了定义 ReadDoc 类用以读取 word 文件以及定义 search_word 函数用以筛选的相关内容,下面一起来看一下,希望对大家有帮助。

VS Code的确是一款非常热门、有强大用户基础的一款开发工具。本文给大家介绍一下10款高效、好用的插件,能够让原本单薄的VS Code如虎添翼,开发效率顿时提升到一个新的阶段。

pythn的中文意思是巨蟒、蟒蛇。1989年圣诞节期间,Guido van Rossum在家闲的没事干,为了跟朋友庆祝圣诞节,决定发明一种全新的脚本语言。他很喜欢一个肥皂剧叫Monty Python,所以便把这门语言叫做python。

本篇文章给大家带来了关于Python的相关知识,其中主要介绍了关于数据类型之字符串、数字的相关问题,下面一起来看一下,希望对大家有帮助。

本篇文章给大家带来了关于Python的相关知识,其中主要介绍了关于numpy模块的相关问题,Numpy是Numerical Python extensions的缩写,字面意思是Python数值计算扩展,下面一起来看一下,希望对大家有帮助。


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

Dreamweaver CS6
視覺化網頁開發工具

禪工作室 13.0.1
強大的PHP整合開發環境

SAP NetWeaver Server Adapter for Eclipse
將Eclipse與SAP NetWeaver應用伺服器整合。

mPDF
mPDF是一個PHP庫,可以從UTF-8編碼的HTML產生PDF檔案。原作者Ian Back編寫mPDF以從他的網站上「即時」輸出PDF文件,並處理不同的語言。與原始腳本如HTML2FPDF相比,它的速度較慢,並且在使用Unicode字體時產生的檔案較大,但支援CSS樣式等,並進行了大量增強。支援幾乎所有語言,包括RTL(阿拉伯語和希伯來語)和CJK(中日韓)。支援嵌套的區塊級元素(如P、DIV),

Atom編輯器mac版下載
最受歡迎的的開源編輯器