Beispiel #1
0
class Game(object):
	""" This is the main class for the game Mayhem """
	def __init__(self):
		""" Initialize the game """
		self.cfg = Config()
		self.clock = pygame.time.Clock()
		self.screen = World()

		self.player1 = Player(1)
		self.player2 = Player(2)

		self.stats = pygame.sprite.Group()
		self.players = pygame.sprite.Group()

		self.all = pygame.sprite.Group()

		self.players.add(self.player1.spaceship)
		self.players.add(self.player2.spaceship)

		self.stats.add(self.player1.stats)
		self.stats.add(self.player2.stats)

		self.all.add(self.player1.spaceship)
		self.all.add(self.player2.spaceship)
		self.all.add(self.player1.stats)
		self.all.add(self.player2.stats)

	def update(self):
		""" Updating all parameters for objects on screen """
		self.blackhole()
		self.statscheck()
		self.all.update()
		self.player1.shots.update(self.player1.shots, self.screen)
		self.player2.shots.update(self.player2.shots, self.screen)
		self.collision()

	def collision(self):
		""" Checking for collisions between objects on screen """
		self.spaceshipcollide()
		self.collidepad()
		self.shotcolliion()

	def shotcolliion(self):
		""" Checking if spaceship is hit by bullet """
		sprites = self.player2.shots
		for sprite in sprites:
			if pygame.sprite.collide_mask(self.player1.spaceship, sprite):
				self.player1.Lives.value -= 2
				self.player2.shots.remove(sprite)
				self.player2.score.value += 1

		sprites = self.player1.shots
		for sprite in sprites:
			if pygame.sprite.collide_mask(self.player2.spaceship, sprite):
				self.player2.Lives.value -= 2
				self.player1.shots.remove(sprite)
				self.player1.score.value += 1

	def spaceshipcollide(self):
		""" Checking collision between spaceships """
		if pygame.sprite.collide_mask(self.player1.spaceship, self.player2.spaceship):
			self.player1.Lives.value -= 10
			self.player2.Lives.value -= 10

	def blackhole(self):
		""" Resets players position and stats if caught in black hole """
		if self.player1.spaceship.pos.diff(self.screen.blackhole.pos) < 50:
			self.player1.reset()
		if self.player2.spaceship.pos.diff(self.screen.blackhole.pos) < 50:
			self.player2.reset()

	def statscheck(self):
		""" Checks the status of fuel level and lives """
		#fuelcheck
		if self.player1.fuel.value < 1:
			self.player1.lockthrust = True
		if self.player2.fuel.value < 1:
			self.player2.lockthrust = True

		#livescheck
		if self.player1.Lives.value < 1:
			self.player1.reset()
		if self.player2.Lives.value < 1:
			self.player2.reset()

	def collidepad(self):
		""" Checking if spaceship is on its pad """
		if pygame.sprite.collide_mask(self.player1.spaceship, self.screen.platform1):
			self.player1.spaceship.on_pad = True
			if self.player1.fuel.value < 500:
				self.player1.fuel.value += 3
				self.player1.Bullets.value = 100
		else:
			self.player1.spaceship.on_pad = False
		if pygame.sprite.collide_mask(self.player2.spaceship, self.screen.platform2):
			self.player2.spaceship.on_pad = True
			if self.player2.fuel.value < 500:
				self.player2.fuel.value += 3
				self.player2.Bullets.value = 100
		else:
			self.player2.spaceship.on_pad = False



	def draw(self):
		""" Drawing all visible objects on screen """
		self.screen.draw()
		self.stats.draw(self.screen.screen)
		self.players.draw(self.screen.screen)
		self.player1.shots.draw(self.screen.screen)
		self.player2.shots.draw(self.screen.screen)
		pygame.display.flip()

	def handle_events(self):
		""" Handles all the events thrown by pygame """
		for event in pygame.event.get():
			if event.type == pygame.QUIT:
				exit()
			elif event.type == pygame.USEREVENT+1:
				self.player1.lock = False
			elif event.type == pygame.USEREVENT+2:
				self.player2.lock = False

		keys = pygame.key.get_pressed()
		if keys[pygame.K_UP]:
			self.player1.thrust()
			if not self.player1.lockthrust:
				self.player1.fuel.value -= 1
		elif keys[pygame.K_DOWN]:
			self.player1.reverse()
			if not self.player1.lockthrust:
				self.player1.fuel.value -= 1
		if keys[pygame.K_LEFT]:
			self.player1.turn_left()
		elif keys[pygame.K_RIGHT]:
			self.player1.turn_right()
		if keys[pygame.K_RCTRL]:
			self.player1.fire()

		if keys[pygame.K_w]:
			self.player2.thrust()
			if not self.player2.lockthrust:
				self.player2.fuel.value -= 1
		elif keys[pygame.K_s]:
			self.player2.reverse()
			if not self.player2.lockthrust:
				self.player2.fuel.value -= 1
		if keys[pygame.K_a]:
			self.player2.turn_left()
		elif keys[pygame.K_d]:
			self.player2.turn_right()
		if keys[pygame.K_SPACE]:
			self.player2.fire()


	def run(self):
		""" Main run loop """
		self.draw()
		while(True):
			self.clock.tick(60)
			self.handle_events()

			self.update()
			self.draw()