Python游戏Python实现星球大战的小游戏 | 附带源码
相关文件
开发环境
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
这篇好文章是转载于:学新通技术网
- 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
- 本站站名: 学新通技术网
- 本文地址: /boutique/detail/tanhggefkc
系列文章
更多
同类精品
更多
-
photoshop保存的图片太大微信发不了怎么办
PHP中文网 06-15 -
word里面弄一个表格后上面的标题会跑到下面怎么办
PHP中文网 06-20 -
《学习通》视频自动暂停处理方法
HelloWorld317 07-05 -
photoshop扩展功能面板显示灰色怎么办
PHP中文网 06-14 -
Android 11 保存文件到外部存储,并分享文件
Luke 10-12 -
微信公众号没有声音提示怎么办
PHP中文网 03-31 -
TikTok加速器哪个好免费的TK加速器推荐
TK小达人 10-01 -
excel下划线不显示怎么办
PHP中文网 06-23 -
excel打印预览压线压字怎么办
PHP中文网 06-22 -
怎样阻止微信小程序自动打开
PHP中文网 06-13