准备工作:导入pygame:
点击pip —>输入pygame 点击确定即可导入。
一:初始化
1.1游戏的初始化和退出:
pygame.init() :初始化方法
pygame.quit():退出方法
import pygame
pygame.init()
print("游戏的代码...")
pygame.quit()
1.2 游戏的坐标系:
import pygame
hero_rect = pygame.Rect(100,500,120,125)
print("英雄的原点 %d %d " % (hero_rect.x,hero_rect.y))
print("英雄的尺寸 %d %d" % (hero_rect.width,hero_rect.height))
print("%d %d" % hero_rect.size)
运行结果:
pygame 1.9.6
Hello from the pygame community. https://www.pygame.org/contribute.html
英雄的原点 100 500
英雄的尺寸 120 125
120 125
1.3 创建游戏的主窗口:
import pygame
pygame.init()
# 创建游戏的窗口 480*700
screen = pygame.display.set_mode((480,700)) # 返回的结果默认主窗口
while True:
pass
pygame.quit()
二:理解图像 绘制图像
import pygame
pygame.init()
# 创建游戏的窗口 480*700
screen = pygame.display.set_mode((480,700)) # 返回的结果默认主窗口
# 绘制背景图像
# 1.加载图像数据
bg = pygame.image.load("./images/background.png")
# 2.blit绘制图像
screen.blit(bg,(0,0))
# 3.update 更新屏幕显示
pygame.display.update()
while True:
pass
pygame.quit()
代码演练:绘制英雄图像:
import pygame
pygame.init()
# 创建游戏的窗口 480*700
screen = pygame.display.set_mode((480,700)) # 返回的结果默认主窗口
# 绘制背景图像
# 1.加载图像数据
bg = pygame.image.load("./images/background.png")
# 2.blit绘制图像
screen.blit(bg,(0,0))
# 3.update 更新屏幕显示
pygame.display.update()
# 绘制英雄的飞机
hero = pygame.image.load("./images/me1.png")
screen.blit(hero,(150,400))
pygame.display.update()
while True:
pass
pygame.quit()
透明图像:
1.png 格式的图像是支持透明的。
2.绘制图像时,透明区域不会显示任何内容。
3.如果下方已经存在内容,则将透明区域显示出来。
import pygame
pygame.init()
# 创建游戏的窗口 480*700
screen = pygame.display.set_mode((480,700)) # 返回的结果默认主窗口
# 绘制背景图像
# 1.加载图像数据
bg = pygame.image.load("./images/background.png")
# 2.blit绘制图像
screen.blit(bg,(0,0))
# 3.update 更新屏幕显示
#pygame.display.update()
# 绘制英雄的飞机
hero = pygame.image.load("./images/me1.png")
screen.blit(hero,(150,400))
pygame.display.update()
while True:
pass
pygame.quit()
三:游戏中的动画实现原理:
3.3: 游戏时钟
pygame 提供了一个pygame.time.Clock 可以非常方便可以设置绘制的速度—刷新帧率,使用时钟对象需要分两步:
1.在游戏初始化的时候,创建一个时钟对象。
2.在游戏循环中让时钟对象调用tick(帧率)方法。
tick方法会根据上次被调用的时间,自动设置游戏循环的延时。
import pygame
pygame.init()
# 创建游戏的窗口 480*700
screen = pygame.display.set_mode((480,700)) # 返回的结果默认主窗口
# 绘制背景图像
# 1.加载图像数据
bg = pygame.image.load("./images/background.png")
# 2.blit绘制图像
screen.blit(bg,(0,0))
# 3.update 更新屏幕显示
#pygame.display.update()
# 绘制英雄的飞机
hero = pygame.image.load("./images/me1.png")
screen.blit(hero,(150,400))
pygame.display.update()
# 创建时钟对象
clock = pygame.time.Clock()
i = 0
while True:
# 可以指定循环体内部执行的频率
clock.tick(1)# 每秒执行多少次
print(i)
i += 1
pygame.quit()
3.4:英雄的简单动画实现:
1.在游戏中定义一个 pygame.Rect 的变量记录英雄的初始位置
2.在游戏循环中让游戏的y-1 向上移动。
3.y<=0 将英雄移动到屏幕底部
提示:每次调用update() 方法前,需要把游戏的图像重新绘制一遍。
:应该最先绘制背景图像。
import pygame
pygame.init()
# 创建游戏的窗口 480*700
screen = pygame.display.set_mode((480,700)) # 返回的结果默认主窗口
# 绘制背景图像
# 1.加载图像数据
bg = pygame.image.load("./images/background.png")
# 2.blit绘制图像
screen.blit(bg,(0,0))
# 3.update 更新屏幕显示
#pygame.display.update()
# 绘制英雄的飞机
hero = pygame.image.load("./images/me1.png")
screen.blit(hero,(150,400))
pygame.display.update()
# 创建时钟对象
clock = pygame.time.Clock()
# 1.定义rect记录飞机的初始位置
hero_rect = pygame.Rect(150,300,102,126)
while True:
# 可以指定循环体内部执行的频率
clock.tick(60)
# 2.修改飞机的位置
hero_rect.y -= 1
# 判断飞机的位置
if hero_rect.y <=0:
hero_rect.y = 700
# 3.调用blit方法绘制图像
screen.blit(bg,(0,0)) #重新绘制背景,防止重影
screen.blit(hero,hero_rect)
# 4.调用update方法更新显示
pygame.display.update()
pygame.quit()
3.5 :游戏循环中的监听事件:
事件:游戏开始后,用户对游戏的操作。
监听:捕获用户的操作,做出反应。
pygame 中 通过 pygame.event.get() 可以获得用户当前动作的事件列表。
import pygame
pygame.init()
# 创建游戏的窗口 480*700
screen = pygame.display.set_mode((480,700)) # 返回的结果默认主窗口
# 绘制背景图像
# 1.加载图像数据
bg = pygame.image.load("./images/background.png")
# 2.blit绘制图像
screen.blit(bg,(0,0))
# 3.update 更新屏幕显示
#pygame.display.update()
# 绘制英雄的飞机
hero = pygame.image.load("./images/me1.png")
screen.blit(hero,(150,400))
pygame.display.update()
# 创建时钟对象
clock = pygame.time.Clock()
# 1.定义rect记录飞机的初始位置
hero_rect = pygame.Rect(150,300,102,126)
while True:
# 可以指定循环体内部执行的频率
clock.tick(60)
#捕获事件
event_list = pygame.event.get()
if len(event_list)>0:
print(event_list)
# 2.修改飞机的位置
hero_rect.y -= 1
# 判断飞机的位置
if hero_rect.y <=0:
hero_rect.y = 700
# 3.调用blit方法绘制图像
screen.blit(bg,(0,0)) #重新绘制背景,防止重影
screen.blit(hero,hero_rect)
# 4.调用update方法更新显示
pygame.display.update()
pygame.quit()
import pygame
pygame.init()
# 创建游戏的窗口 480*700
screen = pygame.display.set_mode((480,700)) # 返回的结果默认主窗口
# 绘制背景图像
# 1.加载图像数据
bg = pygame.image.load("./images/background.png")
# 2.blit绘制图像
screen.blit(bg,(0,0))
# 3.update 更新屏幕显示
#pygame.display.update()
# 绘制英雄的飞机
hero = pygame.image.load("./images/me1.png")
screen.blit(hero,(150,400))
pygame.display.update()
# 创建时钟对象
clock = pygame.time.Clock()
# 1.定义rect记录飞机的初始位置
hero_rect = pygame.Rect(150,300,102,126)
while True:
# 可以指定循环体内部执行的频率
clock.tick(60)
#监听事件
for event in pygame.event.get():
# 判断用户是否点击了关闭按钮
if event.type == pygame.QUIT:
print("退出游戏....")
pygame.quit()
# 直接退出系统
exit()
# 2.修改飞机的位置
hero_rect.y -= 1
# 判断飞机的位置
if hero_rect.y <=0:
hero_rect.y = 700
# 3.调用blit方法绘制图像
screen.blit(bg,(0,0)) #重新绘制背景,防止重影
screen.blit(hero,hero_rect)
# 4.调用update方法更新显示
pygame.display.update()
pygame.quit()
四:精灵和精灵组:
4.1 :理解精灵和精灵组:
4.2:派生机灵子类:
import pygame
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
4.3:使用精灵和精灵组创建敌机:
import pygame
from plane_sprites import *
pygame.init()
# 创建游戏的窗口 480*700
screen = pygame.display.set_mode((480,700)) # 返回的结果默认主窗口
# 绘制背景图像
# 1.加载图像数据
bg = pygame.image.load("./images/background.png")
# 2.blit绘制图像
screen.blit(bg,(0,0))
# 3.update 更新屏幕显示
#pygame.display.update()
# 绘制英雄的飞机
hero = pygame.image.load("./images/me1.png")
screen.blit(hero,(150,300))
pygame.display.update()
# 创建时钟对象
clock = pygame.time.Clock()
# 1.定义rect记录飞机的初始位置
hero_rect = pygame.Rect(150,300,102,126)
# 创建敌机的精灵
enemy = GameSprite("./images/enemy1.png")
# 创建敌机精灵组
enemy_group = pygame.sprite.Group(enemy)
while True:
# 可以指定循环体内部执行的频率
clock.tick(60)
#监听事件
for event in pygame.event.get():
# 判断用户是否点击了关闭按钮
if event.type == pygame.QUIT:
print("退出游戏....")
pygame.quit()
# 直接退出系统
exit()
# 2.修改飞机的位置
hero_rect.y -= 1
# 判断飞机的位置
if hero_rect.y <=0:
hero_rect.y = 700
# 3.调用blit方法绘制图像
screen.blit(bg,(0,0)) #重新绘制背景,防止重影
screen.blit(hero,hero_rect)
# 4.调用update方法更新显示
pygame.display.update()
# 让精灵组执行两个方法:
# 1.update方法:
#让组中的所有的精灵更新位置
enemy_group.update()
# 2.drow
enemy_group.draw(screen)
# 4.调用update方法更新显示
pygame.display.update()
pygame.quit()
来源:CSDN
作者:无敌帅气软件学长
链接:https://blog.csdn.net/qq_41341757/article/details/103778904