python --pygame 游戏之 飞剑骑士

版权声明: https://blog.csdn.net/qq_25233621/article/details/81709588

必备知识:python 类 的使用

                  python -- pygame 的基本用法

# encoding : utf-8
# anthor : comi
# date :2018/08/15

import pygame,sys
from pygame.locals import *
from random import randint

class Player(pygame.sprite.Sprite ):
    # sprite for the Player
    def __init__(self):
        pygame.sprite.Sprite.__init__(self)    # 精灵初始化
        # self.image = pygame.Surface   ((50,50))  # 设置精灵大小
        # self.image.fill(green)  # 精灵颜色
        self.image = pygame.image.load(r'C:\Users\User\Desktop\py-pro\test\img\block.png').convert_alpha()
        self.rect = self.image.get_rect()  # 图片方形
        self.rect.centerx = width / 2
        self.rect.bottom = height - 10

    def update(self):
        key_pressed = pygame.key.get_pressed()
        if key_pressed[pygame.K_LEFT]:
            self.rect.x -= 10
        if key_pressed[pygame.K_RIGHT]:
            self.rect.x += 10
        if self.rect.x < 0:
            self.rect.x = 0
        if self.rect.x >= width - 50:
            self.rect.x = width - 50

    def shoot(self):
        bullet = Bullets(self.rect.centerx, self.rect.top)
        Bullet_groups.add(bullet)

class Block(pygame.sprite.Sprite):
    # sprite for block
    def __init__(self):
        pygame.sprite.Sprite.__init__(self)
        self.image = pygame.image.load(r'C:\Users\User\Desktop\py-pro\test\img\enemy.png').convert_alpha()
        #self.image.fill(Red)
        self.rect = self.image.get_rect()
        self.rect.centerx = randint(50, width-50)
        self.rect.centery = randint(-100,-50)
        self.speedx = randint( -2,2)
        self.speedy = randint(5, 10)

    def update(self):
        self.rect.y += self.speedy
        self.rect.x += self.speedx
        if self.rect.x < 0:
            self.rect.x = 0
        if self.rect.x > width - 50:
            self.rect.x = width - 50
        if self.rect.y > height - 40:
            self.rect.centerx = randint(0, width - 50)
            self.rect.centery = 0
            self.speedy = randint(0, 8)

class Bullets(pygame.sprite.Sprite):
    def __init__(self,x,y):
        pygame.sprite.Sprite.__init__(self)
        self.image = pygame.image.load(r'C:\Users\User\Desktop\py-pro\test\img\sword.png').convert_alpha()
        #self.image.fill(Yellow)
        self.rect = self.image.get_rect()
        self.rect.centerx = x
        self.rect.bottom = y
        self.speedy = -10

    def update(self):
        self.rect.y += self.speedy
        if self.rect.bottom < 0:
            self.kill()         # delete

def MBox():
    text = pygame.font.Font('freesansbold.ttf', 32)
    text_surface = text.render("score:", True, (0, 0, 0), (255, 255, 255))
    screen.blit(text_surface,(width/2,0))

# init

width = 800
height = 600
pygame.init()
pygame.mixer.init()
pygame.display.set_caption('飞剑骑士')
screen = pygame.display.set_mode((width,height),0,32)
FPS = 60
FPSClock = pygame.time.Clock()

# color
white = (255,255,255)
black = (0,0,0)
green = (0,200,0)
Red = (255,0,0)
Yellow = (255,255,0)

def Add_Thing():
    # create player,block and bullets
    player_groups = pygame.sprite.Group()  # 创建玩家组
    Block_groups = pygame.sprite.Group()  # 创建砖块组
    Bullet_groups = pygame.sprite.Group()  # 创建子弹组

    for i in range(5):  # 砖块个数
        block = Block()  # 创建 砖块
        Block_groups.add(block)  # 添加砖块

    player = Player()  # 创建玩家
    player_groups.add(player)  # 添加玩家

    return player_groups, Block_groups,player,Bullet_groups

def gameloop(player_groups,Block_groups,player,Bullet_groups):
    score = 0
    pygame.mixer.music.load(r'C:\Users\User\Desktop\py-pro\test\sound\backmusic.ogg')
    pygame.mixer.music.play(-1)
    background = pygame.image.load(r'C:\Users\User\Desktop\py-pro\test\img\back1.jpg').convert()
    while True:
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                pygame.quit()
                sys.exit()
            if event.type == pygame.KEYDOWN:
                if event.key == pygame.K_SPACE:
                    player.shoot()
        # update
        player_groups.update()
        Block_groups.update()
        Bullet_groups.update()

        # if Collisions block with bullets,break
        hits = pygame.sprite.groupcollide(Block_groups,Bullet_groups ,True,True)  # delete
        for hit in hits:
            block = Block()  # 创建砖块
            Block_groups.add(block)  # 添加砖块
            score += 1
            print(score)

        # if Collisions,break
        hits = pygame.sprite.spritecollide(player,Block_groups,False)  # back a lists
        if hits:
            pygame.quit()
            sys.exit()

        # Draw
        #screen.fill(white)  # 背景颜色
        screen.blit(background, (0, 0))
        #MBox()
        player_groups.draw(screen)  # 画出方块
        Block_groups.draw(screen)  # 画出障碍物
        Bullet_groups.draw(screen)  # 画出子弹
        # update
        pygame.display.update()
        FPSClock.tick(FPS)

if __name__ == '__main__':
    player_groups,Block_groups,player,Bullet_groups= Add_Thing()
    gameloop(player_groups,Block_groups,player,Bullet_groups)


效果图如下:

素材如下:

音乐链接如下:https://opengameart.org/content/drama-drama-drama

欢迎大家点评交流

猜你喜欢

转载自blog.csdn.net/qq_25233621/article/details/81709588