pygame基础框架的N个小目标

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


前言

Pygame是一个跨平台Python库,Pygame 作者是 Pete Shinners, 协议为 GNU Lesser General Public License。

包含图像、声音。建立在SDL基础上,允许实时电子游戏研发而无需被低级语言(如机器语言汇编语言)束缚。基于这样一个设想,所有需要的游戏功能和理念都(主要是图像方面)都完全简化为游戏逻辑本身,所有的资源结构都可以由高级语言提供,如Python

Pygame 原为代替突然停止的 pySDL

一、pygame基础框架小目标

  1. 一个可以关闭的空白窗体


#  导入pygame模块
import pygame
# 导入sys模块
import sys
# 初始化pygame
pygame.init()
# 设置pygame的画布大小为600,500
pygame.display.set_mode((600,500))

# 循环 用于一直显示
while True:
     # 检测事件 用于点击关闭按钮
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            pygame.quit()
            sys.exit()
  # 更新画布
    pygame.display.flip()

  1. 使用精灵显示背景, 背景的循环展示

import pygame
import sys

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

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

    def update(self):
        self.rect.top += 7
        if self.rect.top >= 600:
            self.rect.top = -600
class BgManage():
    def __init__(self,gm):
        self.gm = gm
        self.bg_group = pygame.sprite.Group()
        self.bg_sprite = BgSprite('img/bg.png',(0,0))
        self.bg_sprite = BgSprite('img/bg.png', (0, -200))
        self.bg_sprite.add(self.bg_group)

    def update(self):
        self.bg_group.update()
        self.bg_group.draw(self.gm.screen)
class PlayerSprite(BaseSprite):
    def __init__(self,name,center):
        super().__init__(name)
        self.rect.center = center
    def update(self):
        event =  pygame.key.get_pressed()
        if event[pygame.K_LEFT]:
            self.rect.left -= 1
        if event[pygame.K_RIGHT]:
            self.rect.left += 1
        if event[pygame.K_UP]:
            self.rect.top -= 1
        if event[pygame.K_DOWN]:
            self.rect.top += 1
class PlayerManage():
    def __init__(self,gm):
        self.gm = gm
        self.player_group = pygame.sprite.Group()
        self.player_sprite = PlayerSprite('img/飞船.png', (50,50))
        self.player_sprite.add(self.player_group)
    def update(self):
        self.player_group.update()
        self.player_group.draw(self.gm.screen)


class GameManage():
    def __init__(self):
        pygame.init()
        self.screen = pygame.display.set_mode((400,600))
        self.title = pygame.display.set_caption('飞机大战')
        self.bg_manage = BgManage(self)
        self.player_manage = PlayerManage(self)
    def run(self):
        while True:
            for event in pygame.event.get():
                if event.type == pygame.QUIT:
                    pygame.quit()
                    sys.exit()
            self.bg_manage.update()
            self.player_manage.update()
            pygame.display.flip()


gm = GameManage()
gm.run()

  1. 使用精灵玩家,玩家可以移动

  2. import pygame
    import sys
    
    class BaseSprite(pygame.sprite.Sprite):
        def __init__(self,name):
            super().__init__()
            self.image = pygame.image.load(name)
            self.rect = self.image.get_rect()
        def update(self):
            pass
    
    class BgSprite(BaseSprite):
        def __init__(self,name,topleft):
            super().__init__(name)
            self.rect.topleft = topleft
        def update(self):
            pass
    
    class PlayerSprite(BaseSprite):
        def __init__(self,name,center):
            super().__init__(name)
            self.rect.center = center
        def update(self):
            event =  pygame.key.get_pressed()
            if event[pygame.K_LEFT]:
                self.rect.left -= 1
            if event[pygame.K_RIGHT]:
                self.rect.left += 1
            if event[pygame.K_UP]:
                self.rect.top -= 1
            if event[pygame.K_DOWN]:
                self.rect.top += 1
    class PlayerManage():
        def __init__(self,gm):
            self.gm = gm
            self.player_group = pygame.sprite.Group()
            self.player_sprite = PlayerSprite('img/飞船.png', (50,50))
            self.player_sprite.add(self.player_group)
        def update(self):
            self.player_group.update()
            self.player_group.draw(self.gm.screen)
    class BgManage():
        def __init__(self,gm):
            self.gm = gm
            self.bg_group = pygame.sprite.Group()
            self.bg_sprite = BgSprite('img/bg.png',(0,0))
            self.bg_sprite.add(self.bg_group)
    
        def update(self):
            self.bg_group.update()
            self.bg_group.draw(self.gm.screen)
    
    class GameManage():
        def __init__(self):
            pygame.init()
            self.screen = pygame.display.set_mode((400,600))
            self.title = pygame.display.set_caption('飞机大战')
            self.bg_manage = BgManage(self)
            self.player_manage = PlayerManage(self)
        def run(self):
            while True:
                for event in pygame.event.get():
                    if event.type == pygame.QUIT:
                        pygame.quit()
                        sys.exit()
                self.bg_manage.update()
                self.player_manage.update()
                pygame.display.flip()
    
    
    gm = GameManage()
    gm.run()

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

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

class BulletSprite(BaseSprite):
    def __init__(self,name,center):
        super().__init__(name)

    def update(self):
        pass

class BulletManage():
    def __init__(self):
        self.bullet_group = pygame.sprite.Group()
        self.bullet_manage = BulletSprite('img/炸弹.png', )
        self.bullet_manage.add(self.bullet_group)


# 设置敌人精灵
class Enemy_Sprite(BaseSprite):
    def __init__(self,name,center):
        super().__init__(name)

        self.image = pygame.image.load(name)
        self.rect = self.image.get_rect()
        self.rect.center = center

    def update(self):
        pass

class Enemy_Manage():
    def __init__(self,gm):
        self.gm = gm
        self.enemy_group = pygame.sprite.Group()
        Enemy_Sprite('img/炸弹.png',(20,40)).add(self.enemy_group)
        Enemy_Sprite('img/飞机.png',(300,20)).add(self.enemy_group)
        Enemy_Sprite('img/火箭_面.png',(300,400)).add(self.enemy_group)

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




class ShipSprite(BaseSprite):
    def __init__(self,name,center):
        super().__init__(name)
        self.rect.center = center

    def update(self):
        impress_key = pygame.key.get_pressed()
        if impress_key[pygame.K_LEFT] and self.rect.left >= 0:
            self.rect.left -= 1
        if impress_key[pygame.K_RIGHT] and self.rect.right <= 400:
            self.rect.left += 1
        if impress_key[pygame.K_UP] and self.rect.top >= 0:
            self.rect.top -= 1
        if impress_key[pygame.K_DOWN] and self.rect.top <= 550:
            self.rect.top += 1

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

class ShipManage():
    def __init__(self,gm):
        self.gm = gm
        self.ship_group = pygame.sprite.Group()
        self.ship_sprite = ShipSprite('img/飞机.png',(200,550))
        self.ship_sprite.add(self.ship_group)
    def update(self):
        self.ship_group.update()
        self.ship_group.draw(self.gm.screen)

class BgManage():
    def __init__(self,gm):
        self.gm = gm
        self.bg_group = pygame.sprite.Group()
        self.bg_sprite = BgSprite('img/bg.png',(0,0))
        self.bg_sprite.add(self.bg_group)
    def update(self):
        self.bg_group.update()
        self.bg_group.draw(self.gm.screen)

class GameManage():
    def __init__(self):
        pygame.init()
        self.screen = pygame.display.set_mode((400,600))
        self.title = pygame.display.set_caption('飞机大战')
        self.bg_manage = BgManage(self)
        self.ship_manage = ShipManage(self)
        self.emeny_manage = Enemy_Manage(self)

    def check_event(self):
        pygame.sprite.groupcollide(self.ship_manage.ship_group,self.emeny_manage.enemy_group,False,True)
    def run(self):
        while True:
            for event in pygame.event.get():
                if event.type == pygame.QUIT:
                    pygame.quit()
                    sys.exit()
            self.bg_manage.update()
            self.ship_manage.update()
            self.emeny_manage.update()
            self.check_event()

            pygame.display.flip()


gm = GameManage()
gm.run()

  1. UI的使用 (字体,鼠标点击检测)

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

class BulletSprite(BaseSprite):
    def __init__(self,name,center):
        super().__init__(name)

    def update(self):
        pass

class BulletManage():
    def __init__(self):
        self.bullet_group = pygame.sprite.Group()
        self.bullet_manage = BulletSprite('img/炸弹.png', )
        self.bullet_manage.add(self.bullet_group)


class Text:
    def __init__(self, gm):
        self.gm = gm
        self.score = pygame.font.Font('font/simkai.ttf', 32)
        self.a = self.score.render('score1', True, 'red')

    def update(self):

        self.gm.screen.blit(self.a,(40,40))


# 设置敌人精灵
class Enemy_Sprite(BaseSprite):
    def __init__(self,name,center):
        super().__init__(name)

        self.image = pygame.image.load(name)
        self.rect = self.image.get_rect()
        self.rect.center = center

    def update(self):
        pass

class Enemy_Manage():
    def __init__(self,gm):
        self.gm = gm
        self.enemy_group = pygame.sprite.Group()
        self.a = Enemy_Sprite('img/炸弹.png',(20,40))
        self.a.add(self.enemy_group)
        Enemy_Sprite('img/飞机.png',(300,20)).add(self.enemy_group)
        Enemy_Sprite('img/火箭_面.png',(300,400)).add(self.enemy_group)

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

# class Click_Sprite(BaseSprite):
#     def __init__(self,name,center):
#         super().__init__(name)
#         self.image = pygame.image.load(name)
#         self.rect = self.image.get_rect()
#         self.rect.center = center
#
#     def update(self):
#         pass
#
# class Click_Manage():
#     def __init__(self,gm):
#         self.gm = gm
#         self.chick


class ShipSprite(BaseSprite):
    def __init__(self,name,center):
        super().__init__(name)
        self.rect.center = center

    def update(self):
        impress_key = pygame.key.get_pressed()
        if impress_key[pygame.K_LEFT] and self.rect.left >= 0:
            self.rect.left -= 1
        if impress_key[pygame.K_RIGHT] and self.rect.right <= 400:
            self.rect.left += 1
        if impress_key[pygame.K_UP] and self.rect.top >= 0:
            self.rect.top -= 1
        if impress_key[pygame.K_DOWN] and self.rect.top <= 550:
            self.rect.top += 1

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

class ShipManage():
    def __init__(self,gm):
        self.gm = gm
        self.ship_group = pygame.sprite.Group()
        self.ship_sprite = ShipSprite('img/飞机.png',(200,550))
        self.ship_sprite.add(self.ship_group)
    def update(self):
        self.ship_group.update()
        self.ship_group.draw(self.gm.screen)

class BgManage():
    def __init__(self,gm):
        self.gm = gm
        self.bg_group = pygame.sprite.Group()
        self.bg_sprite = BgSprite('img/bg.png',(0,0))
        self.bg_sprite.add(self.bg_group)
    def update(self):
        self.bg_group.update()
        self.bg_group.draw(self.gm.screen)

class GameManage():
    def __init__(self):
        pygame.init()
        self.screen = pygame.display.set_mode((400,600))
        self.title = pygame.display.set_caption('飞机大战')
        self.bg_manage = BgManage(self)
        self.ship_manage = ShipManage(self)
        self.emeny_manage = Enemy_Manage(self)
        self.text_manage = Text(self)

    def check_event(self):
        pygame.sprite.groupcollide(self.ship_manage.ship_group,self.emeny_manage.enemy_group,False,True)
    def run(self):
        while True:
            for event in pygame.event.get():
                if event.type == pygame.QUIT:
                    pygame.quit()
                    sys.exit()
            if pygame.mouse.get_pressed()[0]:
                if self.emeny_manage.a.rect.collidepoint(pygame.mouse.get_pos()):
                    print('da')
            self.bg_manage.update()
            self.ship_manage.update()
            self.emeny_manage.update()
            self.text_manage.update()
            self.check_event()

            pygame.display.flip()


gm = GameManage()
gm.run()


总结

提示:这里对文章进行总结:
例如:以上就是今天要讲的内容,本文仅仅简单介绍了pandas的使用,而pandas提供了大量能使我们快速便捷地处理数据的函数和方法。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值