【Python游戏】Python实现一个星球大战的小游戏 | 附带源码

相关文件

想学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

猜你喜欢

转载自blog.csdn.net/Gtieguo/article/details/123871454