版权声明: 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
欢迎大家点评交流