相关文件
想学Python的小伙伴可以关注小编的公众号【Python日志】
有很多的资源可以白嫖的哈,不定时会更新一下Python的小知识的哈!!
需要源码的小伙伴可以在公众号回复星球大战
Python源码、问题解答学习交流群:773162165
开发环境
Python版本:3.6.7
相关模块:
pygame
random
以及一些python自带的模块。
环境搭建
安装Python并添加到环境变量,pip安装需要的相关模块即可。
效果展示
开始界面
游戏界面
代码实现
模块导入
import pygame
import random
from os import path
精灵类
class Player(pygame.sprite.Sprite): #产生一个精灵
def __init__(self):
pygame.sprite.Sprite.__init__(self)
self.image = pygame.transform.flip(player_img,False,True) #第一个参数是左右反转,第二个是上下翻转
self.image = pygame.transform.scale(self.image,(53,40)) #缩放
self.image.set_colorkey(BLACK) #用color_key方法除去方框周边的黑色部分
self.rect = self.image.get_rect()
self.radius = 20
#pygame.draw.circle(self.image,(255,0,0),self.rect.center,self.radius)
self.rect.centerx = WIDTH/2
self.rect.bottom = HIGHT
self.hp = 100
self.lives = 3
self.score = 0
self.hidden = False
self.hide_time = 0
self.is_firing_missile = False
self.start_missile_time = 0
self.last_missile_time = 0
def update(self):
keystate = pygame.key.get_pressed()
if keystate[pygame.K_LEFT]:
self.rect.x -= 8
if keystate[pygame.K_RIGHT]:
self.rect.x += 8
if keystate[pygame.K_UP]:
self.rect.y -= 8
if keystate[pygame.K_DOWN]:
self.rect.y += 8
if self.rect.right > WIDTH:
self.rect.right = WIDTH
if self.rect.left < 0:
self.rect.left = 0
if self.rect.bottom >HIGHT:
self.rect.bottom = HIGHT
now = pygame.time.get_ticks()
if self.hidden and now - self.hide_time>1000:
self.hidden = False
self.rect.bottom = HIGHT
self.rect.centerx = WIDTH/2
if self.is_firing_missile:
if now - self.start_missile_time <= MISSILE_LIFETIME:
if now - self.last_missile_time >= MISIILE_INTERVAL:
missile = Missile(self.rect.center)
missiles.add(missile)
self.last_missile_time = now
else:
self.is_firing_missile = False
def shoot(self):
bullet = Bullet(self.rect.centerx,self.rect.centery)
bullets.add(bullet)
shoot_sound.play()
def hide(self): #出生后无敌时间
self.hidden = True
self.rect.y = -200
self.hide_time = pygame.time.get_ticks()
def fire_missile(self):
self.is_firing_missile = True
self.start_missile_time = pygame.time.get_ticks()
岩石类
class Enemy(pygame.sprite.Sprite):
"""docstring for Enemy"""
def __init__(self):
pygame.sprite.Sprite.__init__(self)
img_width = random.randint(20,120)
img_height = int(img_width*70/72)
self.image = pygame.transform.scale(enemy_img,(img_width,img_height))
self.image.set_colorkey(BLACK)
self.image_origin = self.image.copy()
self.rect = self.image.get_rect()
self.radius = int(img_width/2)
#pygame.draw.circle(self.image,(255,0,0),self.rect.center,self.radius)
self.rect.x = random.randint(0,WIDTH-self.rect.w)
self.rect.bottom = 0
self.vx = random.randint(-2,2)
self.vy = random.randint(2,10)
self.last_time = 0
self.rotate_speed = random.randint(-5,5)
self.rotate_angle = 0
def update(self):
self.rect.x += self.vx
self.rect.y += self.vy
self.rotate()
# if self.rect.left>WIDTH:
# self.kill()
# if self.rect.right<0:
# self.kill()
def rotate(self): #制作岩石的旋转
now = pygame.time.get_ticks()
if now - self.last_time>30:
self.rotate_angle = (self.rotate_angle + self.rotate_speed) % 360
self.image = pygame.transform.rotate(self.image_origin,self.rotate_angle)
old_center = self.rect.center
self.rect = self.image.get_rect()
self.rect.center = old_center
详细代码的话可以找小编领取的哟
公众号:Python日志
需要源码的小伙伴可以在公众号回复星球大战
Python源码、问题解答学习交流群:773162165