• 首页 首页 icon
  • 工具库 工具库 icon
    • IP查询 IP查询 icon
  • 内容库 内容库 icon
    • 快讯库 快讯库 icon
    • 精品库 精品库 icon
    • 问答库 问答库 icon
  • 更多 更多 icon
    • 服务条款 服务条款 icon

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

武飞扬头像
彳余大胆
帮助1

相关文件

开发环境

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
系列文章
更多 icon
同类精品
更多 icon
继续加载