python学习第七天——飞机大战快速入门案例

pygame
初始化:pygame.init()
退出:pygame.quit()

import pygame
pygame.init()
print("游戏的代码")
pygame.quit()

输出结果:

游戏的代码

游戏的坐标系
游戏窗口左上角定义为原点(0,0)
在游戏中,所有可见元素都是以矩形定义的,(x,y)(width,height)
专门定义矩形的类,pygame.Rect
Rect(x,y,width,height)
Rect.size返回元组,内容是width,height

import pygame
hero_rect = pygame.Rect(100,500,120,125)
print("英雄的原点 %d %d"%(hero_rect.x,hero_rect.y))
print("英雄的尺寸:%d %d"%(hero_rect.size))

输出结果:

英雄的原点 100 500
英雄的尺寸:120 125

创建游戏主窗口:pygame.display
pygame.display.set_mode()初始化游戏显示窗口
pygame.display.update()刷新屏幕内容显示
set_mode(屏幕大小(元组))返回屏幕窗口,必须记录返回值,因为后续将在此窗口上来绘制不同图像。

import pygame
pygame.init()
#创建游戏窗口480*700
screen = pygame.display.set_mode((480,700))
pygame.quit()

输出结果为定义大小的黑色屏幕。
实现图像绘制:1.使用pygame.image.load()加载图像数据
2.调用对象.blit(图像,位置)将图像绘制到指定位置。
3.调用pygame.display.update()更新图像
设置背景:

import pygame
pygame.init()
#创建游戏窗口480*700
screen = pygame.display.set_mode((480,700))
#绘制背景图像
#1加载图像数据
bg = pygame.image.load("./images/background.png")
hero = pygame.image.load("./images/me1.png")
#2blit绘制图像,对象名.blit
screen.blit(bg,(0,0))
screen.blit(hero,(200,500))
#update
pygame.display.update()
while True:
    pass
pygame.quit()

事件:用户的具体操作
监听:捕获用户所做的具体操作。event_list = pygame.event.get()返回列表
如果一个类的 父类 不是 object在重写 初始化方法 时,一定要 先 super() 一下父类的 init 方法保证父类中实现的 init 代码能够被正常执行
精灵:pygame.sprite.Sprite()存储图像数据image和位置rect的对象
重点:两个属性,一个方法;属性image、rect; 方法:update(*args)更新精灵位置
精灵组:pygame.sprite.Group
一个精灵组可以包含多个精灵对象;调用精灵组对象的update() 方法可以自动调用组内每一个精灵的 update() 方法;调用精灵组对象的draw(屏幕对象) 方法可以将组内每一个精灵 的 image 绘制在 rect 位置 。
精灵负责封装图像信息和位置并且封装运动速度,提供update方法
根据游戏需求更改自己位置
精灵族包含多个精灵对象,update方法让精灵组中的所有精灵调用
update方法的精灵更新位置,
draw(screen)方法在screen上绘制精灵组中的所有精灵
关于精灵详细实例:

import pygame
#定义一个精灵类
class GameSprite(pygame.sprite.Sprite):
    #飞机大战游戏精灵
    #初始化
    def __init__(self,image_name,speed = 1):
        #调用父类初始化方法,初始化方法扩展,
        # 如果不调用父类方法,则原来父类初始化中的很多属性被覆盖
        super().__init__()
        #定义对象属性
        #要想在图像文件中加载数据,使用pygame.image.load()
        self.image = pygame.image.load(image_name)
        #rect默认大小为刚加载出来的图片大小
        #image的getrect()方法可以返回刚刚加载的图像大小
        self.rect = self.image.get_rect()
        self.speed = speed
        #重写update方法,实现不同精灵不同移动速度
    def update(self):
        self.rect.y += self.speed

飞机大战快速入门案例:(调用精灵)

#直接导入,必须用模块.方式使用
import pygame
#from...as...直接使用模块提供的工具
from plase_sprites import *
pygame.init()
#创建游戏窗口480*700
screen = pygame.display.set_mode((480,700))
#绘制背景图像
#1加载图像数据
bg = pygame.image.load("./images/background.png")
hero = pygame.image.load("./images/me1.png")
#2blit绘制图像,对象名.blit
screen.blit(bg,(0,0))
screen.blit(hero,(150,300))
#update
pygame.display.update()
#创建时间对象
clock = pygame.time.Clock()
#游戏循环,意为游戏正常开始
#1.定义rect记录飞机起始位置
hero_rect = pygame.Rect(150,300,102,126)
#实现敌机精灵创建
enemy = GameSprite("./images/enemy1.png")
enemy1 = GameSprite("./images/enemy2.png",2)
#实现敌机精灵组创建
enemy_group = pygame.sprite.Group(enemy,enemy1)

while True:
    #每秒重复执行60次,控制游戏循环内部代码执行频率
    clock.tick(60)
    #监听事件
    for event_list in pygame.event.get():
        #判断事件类型是否为退出事件
        if event_list.type == pygame.QUIT:
            print("游戏退出。。。")
            # 调用quit方法卸载所有模块
            pygame.quit()
            #调用exit函数终止当前程序,退出程序
            exit()
    #2.修改飞机位置
    hero_rect.y -= 1
    #判断飞机位置
    if hero_rect.y <= -126:
        hero_rect.y = 700
    # 3.调用blit方法绘制图像
    screen.blit(bg, (0, 0))#去掉飞机残影,先绘制背景,遮挡之前图片
    screen.blit(hero,hero_rect)
    #4.让精灵组调用两个方法,1.调用update让所有精灵更新图像
    enemy_group.update()
    #2.draw在screen上绘制所有精灵图片
    enemy_group.draw(screen)

    pygame.display.update()
pygame.quit()
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值