飞机大战1

怎甘沉沦 提交于 2020-01-28 02:31:41

准备工作:导入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()
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!