pygame 基础模块使用

目录

1. pygame init() 

2. 显示可以关闭的空白窗体

3. 给窗体设置标题

4.在屏幕上显示文字

5. 给窗体设置背景

6. 图片中插入图片

7. 使用精灵展示背景,背景循环

8. 使用精灵显示道具,玩家与道具碰撞检测

9. ui的使用 (字体,鼠标点击检测)


1. pygame init() 

初始化所有导入的pygame模块

2. 显示可以关闭的空白窗体
import sys

import pygame  # 模块导入

pygame.init()  # 初始化
screen = pygame.display.set_mode((800, 600))  # 初始化一个800x600的窗体
screen.fill((0, 255, 255))  # 给黑窗口填充颜色
pygame.display.set_caption("pygame小窗口")
while True:  # 死循环,使窗口停留
    for event in pygame.event.get():  # 获取循环事件,监听事件
        if event.type == pygame.QUIT:  # 判断是否点击关闭窗口
            pygame.quit()  # 卸载所有模块
            sys.exit()  # 退出程序
    pygame.display.flip()  # 刷新屏幕
3. 给窗体设置标题
pygame.display.set_caption("pygame小窗口")
4.在屏幕上显示文字
my_font = pygame.font.Font("font/simkai.ttf", 30)  # 设置字体及大小
text = my_font.render("欢迎来到pygame", True, (0, 0, 255))  # 设置文本,锯齿效果, 颜色
screen.blit(text, (50, 50))  # 放置到窗体50x50的位置
5. 给窗体设置背景
image = pygame.image.load("img/bg.png")  # 插入图片
screen.blit(image, (0, 0))  # 设置位置
6. 图片中插入图片
image1 = pygame.image.load("img/player.jpg")
bg_image.blit(image1, (100, 100))
7. 使用精灵展示背景,背景循环
import sys
import pygame


class BaseSprite(pygame.sprite.Sprite):
    def __init__(self, name):
        super().__init__()
        self.image = pygame.image.load(name)
        self.rect = self.image.get_rect()


class BgSprite(BaseSprite):
    def __init__(self, name, top_left):
        super().__init__(name)
        self.rect.topleft = top_left

    def update(self):
        self.rect.top += 5
        if self.rect.top >= 700:
            self.rect.top = -700


class BgManage:
    def __init__(self, gm):
        self.gm = gm
        self.bg_group = pygame.sprite.Group()
        BgSprite("fjdzimg/bg.png", (0, 0)).add(self.bg_group)
        BgSprite("fjdzimg/bg.png", (0, -700)).add(self.bg_group)

    def update(self):
        self.bg_group.update()
        self.bg_group.draw(self.gm.screen)


class GameManage:
    def __init__(self, name):
        pygame.init()
        self.clock = pygame.time.Clock()
        self.screen = pygame.display.set_mode((400, 600))
        pygame.display.set_caption(name)
        self.bg_manage = BgManage(self)

    def run(self):
        while True:
            self.clock.tick(24)
            for event in pygame.event.get():
                if event.type == pygame.QUIT:
                    pygame.quit()
                    sys.exit()
            self.bg_manage.update()
            pygame.display.flip()


gm = GameManage("飞机大战")
gm.run()
8. 使用精灵显示道具,玩家与道具碰撞检测
import sys
import pygame
import random


class BaseSprite(pygame.sprite.Sprite):
    def __init__(self, name):
        super().__init__()
        self.image = pygame.image.load(name)
        self.rect = self.image.get_rect()


class BgSprite(BaseSprite):
    def __init__(self, name, top_left):
        super().__init__(name)
        self.rect.topleft = top_left

    def update(self):
        self.rect.top += 5
        if self.rect.top >= 700:
            self.rect.top = -700


class BgManage:
    def __init__(self, gm):
        self.gm = gm
        self.bg_group = pygame.sprite.Group()
        BgSprite("fjdzimg/bg.png", (0, 0)).add(self.bg_group)
        BgSprite("fjdzimg/bg.png", (0, -700)).add(self.bg_group)

    def update(self):
        self.bg_group.update()
        self.bg_group.draw(self.gm.screen)


class EquipSprite(BaseSprite):  # 物资精灵类
    def __init__(self, name, speed, type):
        super().__init__(name)
        self.rect.left = random.randint(0, 400 - self.rect.width)
        self.rect.bottom = 0
        self.speed = speed
        self.equip_bullet_group = pygame.sprite.Group()
        self.type = type

    def update(self):
        self.rect.top += self.speed


class EquipManage:  # 物资管理类
    def __init__(self, gm):
        self.gm = gm
        self.equip_group = pygame.sprite.Group()
        self.time_count = 5

    def generate(self):
        odds = random.random()
        if odds >= 0.7:
            self.equip = EquipSprite("fjdzimg/hp.png", 3, 1000)
            self.equip.add(self.equip_group)
        if 0.35 <= odds < 0.7:
            self.equip = EquipSprite("fjdzimg/bomb_supply.png", 3, 2000)
            self.equip.add(self.equip_group)
        if odds < 0.35:
            self.equip = EquipSprite("fjdzimg/bullet_supply.png", 3, 3000)
            self.equip.add(self.equip_group)

    def update(self):
        self.time_count -= 0.1
        if self.time_count <= 0:
            self.time_count = 5
            self.generate()
        self.equip_group.update()
        self.equip_group.draw(self.gm.screen)


class PlayerSprite(BaseSprite):  # 玩家精灵类
    def __init__(self, name, center, gm):
        super().__init__(name)
        self.gm = gm
        self.rect.center = center
        self.my_bullet_group = pygame.sprite.Group()

    def update(self):
        key_pressed = pygame.key.get_pressed()
        if key_pressed[pygame.K_LEFT] and self.rect.left > 0:
            self.rect.left -= 5
        if key_pressed[pygame.K_RIGHT] and self.rect.right < 500:
            self.rect.right += 5
        if key_pressed[pygame.K_UP] and self.rect.top > 0:
            self.rect.top -= 5
        if key_pressed[pygame.K_DOWN] and self.rect.bottom < 700:
            self.rect.bottom += 5
        self.my_bullet_group.update()
        self.my_bullet_group.draw(self.gm.screen)


class PlayerManage:  # 玩家管理类
    def __init__(self, gm):
        self.gm = gm
        self.player_group = pygame.sprite.Group()
        self.player = PlayerSprite("fjdzimg/my_aircraft1.png", (200, 550), self.gm)
        self.player.add(self.player_group)

    def update(self):
        self.player_group.update()
        self.player_group.draw(self.gm.screen)


class GameManage:
    def __init__(self, name):
        pygame.init()
        self.clock = pygame.time.Clock()
        self.screen = pygame.display.set_mode((400, 600))
        pygame.display.set_caption(name)
        self.bg_manage = BgManage(self)
        self.equip_manage = EquipManage(self)
        self.player_manage = PlayerManage(self)

    def run(self):
        while True:
            self.clock.tick(24)
            for event in pygame.event.get():
                if event.type == pygame.QUIT:
                    pygame.quit()
                    sys.exit()
            self.bg_manage.update()
            self.equip_manage.update()
            self.player_manage.update()
            pygame.sprite.groupcollide(self.player_manage.player_group, self.equip_manage.equip_group, False, True)
            pygame.display.flip()


gm = GameManage("飞机大战")
gm.run()
9. ui的使用 (字体,鼠标点击检测)
import sys
import pygame
import random


class Util:  # 点击类
    @staticmethod
    def click_check(sprite):
        if pygame.mouse.get_pressed()[0]:
            if sprite.rect.collidepoint(pygame.mouse.get_pos()):
                return True
        return False


class BaseSprite(pygame.sprite.Sprite):
    def __init__(self, name):
        super().__init__()
        self.image = pygame.image.load(name)
        self.rect = self.image.get_rect()


class BgSprite(BaseSprite):
    def __init__(self, name, top_left):
        super().__init__(name)
        self.rect.topleft = top_left

    def update(self):
        self.rect.top += 5
        if self.rect.top >= 700:
            self.rect.top = -700


class BgManage:
    def __init__(self, gm):
        self.gm = gm
        self.bg_group = pygame.sprite.Group()
        BgSprite("fjdzimg/bg.png", (0, 0)).add(self.bg_group)
        BgSprite("fjdzimg/bg.png", (0, -700)).add(self.bg_group)

    def update(self):
        self.bg_group.update()
        self.bg_group.draw(self.gm.screen)


class EquipSprite(BaseSprite):  # 物资精灵类
    def __init__(self, name, speed, type):
        super().__init__(name)
        self.rect.left = random.randint(0, 400 - self.rect.width)
        self.rect.bottom = 0
        self.speed = speed
        self.equip_bullet_group = pygame.sprite.Group()
        self.type = type

    def update(self):
        self.rect.top += self.speed


class EquipManage:  # 物资管理类
    def __init__(self, gm):
        self.gm = gm
        self.equip_group = pygame.sprite.Group()
        self.time_count = 5

    def generate(self):
        odds = random.random()
        if odds >= 0.7:
            self.equip = EquipSprite("fjdzimg/hp.png", 3, 1000)
            self.equip.add(self.equip_group)
        if 0.35 <= odds < 0.7:
            self.equip = EquipSprite("fjdzimg/bomb_supply.png", 3, 2000)
            self.equip.add(self.equip_group)
        if odds < 0.35:
            self.equip = EquipSprite("fjdzimg/bullet_supply.png", 3, 3000)
            self.equip.add(self.equip_group)

    def update(self):
        self.time_count -= 0.1
        if self.time_count <= 0:
            self.time_count = 5
            self.generate()
        self.equip_group.update()
        self.equip_group.draw(self.gm.screen)


class PlayerSprite(BaseSprite):  # 玩家精灵类
    def __init__(self, name, center, gm):
        super().__init__(name)
        self.gm = gm
        self.rect.center = center
        self.my_bullet_group = pygame.sprite.Group()

    def update(self):
        key_pressed = pygame.key.get_pressed()
        if key_pressed[pygame.K_LEFT] and self.rect.left > 0:
            self.rect.left -= 5
        if key_pressed[pygame.K_RIGHT] and self.rect.right < 500:
            self.rect.right += 5
        if key_pressed[pygame.K_UP] and self.rect.top > 0:
            self.rect.top -= 5
        if key_pressed[pygame.K_DOWN] and self.rect.bottom < 700:
            self.rect.bottom += 5
        self.my_bullet_group.update()
        self.my_bullet_group.draw(self.gm.screen)


class PlayerManage:  # 玩家管理类
    def __init__(self, gm):
        self.gm = gm
        self.player_group = pygame.sprite.Group()
    def born(self):
        self.player = PlayerSprite("fjdzimg/my_aircraft1.png", (200, 550), self.gm)
        self.player.add(self.player_group)

    def update(self):
        self.player_group.update()
        self.player_group.draw(self.gm.screen)


class UISprite(BaseSprite):  # ui精灵类
    def __init__(self, name, center):
        super().__init__(name)
        self.rect.center = center


class UIManage:  # ui管理类
    def __init__(self, gm):
        self.gm = gm
        # 开始
        self.ready_group = pygame.sprite.Group()
        self.begin_btn = UISprite("fjdzimg/ks.png", (200, 300))
        self.begin_btn.add(self.ready_group)
        # 重开
        # 退出
        self.end_group = pygame.sprite.Group()
        self.replay_btn = UISprite("fjdzimg/again.png", (200, 250))
        self.replay_btn.add(self.end_group)
        self.exit_btn = UISprite("fjdzimg/exit.png", (200, 350))
        self.exit_btn.add(self.end_group)

    def update(self):
        if self.gm.state == "ready":
            self.ready_group.draw(self.gm.screen)
            if Util.click_check(self.begin_btn):
                self.gm.state = "gaming"
                self.gm.player_manage.born()
        elif self.gm.state == "gaming":
            pass
        elif self.gm.state == "end":
            self.end_group.draw(self.gm.screen)
            if Util.click_check(self.replay_btn):
                self.gm.state = "gaming"  # 状态设为gaming 重新开始
                self.gm.player_manage.born()
            if Util.click_check(self.exit_btn):
                pygame.quit()
                sys.exit()


class GameManage:
    def __init__(self, name):
        pygame.init()
        self.state = "ready"
        self.clock = pygame.time.Clock()
        self.screen = pygame.display.set_mode((400, 600))
        self.screen.fill("#FFFACD")
        pygame.display.set_caption(name)
        self.bg_manage = BgManage(self)
        self.equip_manage = EquipManage(self)
        self.player_manage = PlayerManage(self)
        self.ui_manage = UIManage(self)

    def run(self):
        while True:
            self.clock.tick(24)
            for event in pygame.event.get():
                if event.type == pygame.QUIT:
                    pygame.quit()
                    sys.exit()
                if event.type == pygame.KEYUP:
                    if event.key == pygame.K_SPACE:
                        self.state = "end"
                        self.equip_manage.equip_group.empty()
                        self.player_manage.player_group.empty()
            self.screen.fill("#B0E0E6")
            self.ui_manage.update()
            if self.state == "gaming":
                self.bg_manage.update()
                self.equip_manage.update()
                self.player_manage.update()
                pygame.sprite.groupcollide(self.player_manage.player_group, self.equip_manage.equip_group, False, True)
            pygame.display.flip()


gm = GameManage("飞机大战")
gm.run()

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值