Space Invaders further
This commit is contained in:
		
							
								
								
									
										3
									
								
								.idea/.gitignore
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										3
									
								
								.idea/.gitignore
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,3 @@ | |||||||
|  | # Default ignored files | ||||||
|  | /shelf/ | ||||||
|  | /workspace.xml | ||||||
							
								
								
									
										6
									
								
								.idea/inspectionProfiles/profiles_settings.xml
									
									
									
										generated
									
									
									
										Normal file
									
								
							
							
						
						
									
										6
									
								
								.idea/inspectionProfiles/profiles_settings.xml
									
									
									
										generated
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,6 @@ | |||||||
|  | <component name="InspectionProjectProfileManager"> | ||||||
|  |   <settings> | ||||||
|  |     <option name="USE_PROJECT_PROFILE" value="false" /> | ||||||
|  |     <version value="1.0" /> | ||||||
|  |   </settings> | ||||||
|  | </component> | ||||||
							
								
								
									
										7
									
								
								.idea/misc.xml
									
									
									
										generated
									
									
									
										Normal file
									
								
							
							
						
						
									
										7
									
								
								.idea/misc.xml
									
									
									
										generated
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,7 @@ | |||||||
|  | <?xml version="1.0" encoding="UTF-8"?> | ||||||
|  | <project version="4"> | ||||||
|  |   <component name="Black"> | ||||||
|  |     <option name="sdkName" value="Python 3.11 (spaceinvaders)" /> | ||||||
|  |   </component> | ||||||
|  |   <component name="ProjectRootManager" version="2" project-jdk-name="Python 3.11 (spaceinvaders)" project-jdk-type="Python SDK" /> | ||||||
|  | </project> | ||||||
							
								
								
									
										8
									
								
								.idea/modules.xml
									
									
									
										generated
									
									
									
										Normal file
									
								
							
							
						
						
									
										8
									
								
								.idea/modules.xml
									
									
									
										generated
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,8 @@ | |||||||
|  | <?xml version="1.0" encoding="UTF-8"?> | ||||||
|  | <project version="4"> | ||||||
|  |   <component name="ProjectModuleManager"> | ||||||
|  |     <modules> | ||||||
|  |       <module fileurl="file://$PROJECT_DIR$/.idea/spaceinvaders.iml" filepath="$PROJECT_DIR$/.idea/spaceinvaders.iml" /> | ||||||
|  |     </modules> | ||||||
|  |   </component> | ||||||
|  | </project> | ||||||
							
								
								
									
										10
									
								
								.idea/spaceinvaders.iml
									
									
									
										generated
									
									
									
										Normal file
									
								
							
							
						
						
									
										10
									
								
								.idea/spaceinvaders.iml
									
									
									
										generated
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,10 @@ | |||||||
|  | <?xml version="1.0" encoding="UTF-8"?> | ||||||
|  | <module type="PYTHON_MODULE" version="4"> | ||||||
|  |   <component name="NewModuleRootManager"> | ||||||
|  |     <content url="file://$MODULE_DIR$"> | ||||||
|  |       <excludeFolder url="file://$MODULE_DIR$/.venv" /> | ||||||
|  |     </content> | ||||||
|  |     <orderEntry type="inheritedJdk" /> | ||||||
|  |     <orderEntry type="sourceFolder" forTests="false" /> | ||||||
|  |   </component> | ||||||
|  | </module> | ||||||
							
								
								
									
										6
									
								
								.idea/vcs.xml
									
									
									
										generated
									
									
									
										Normal file
									
								
							
							
						
						
									
										6
									
								
								.idea/vcs.xml
									
									
									
										generated
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,6 @@ | |||||||
|  | <?xml version="1.0" encoding="UTF-8"?> | ||||||
|  | <project version="4"> | ||||||
|  |   <component name="VcsDirectoryMappings"> | ||||||
|  |     <mapping directory="$PROJECT_DIR$" vcs="Git" /> | ||||||
|  |   </component> | ||||||
|  | </project> | ||||||
							
								
								
									
										149
									
								
								main.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										149
									
								
								main.py
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,149 @@ | |||||||
|  | import pygame | ||||||
|  | import random | ||||||
|  | import math | ||||||
|  |  | ||||||
|  |  | ||||||
|  | class Game: | ||||||
|  |     def __init__(self, width, height): | ||||||
|  |         pygame.init() | ||||||
|  |         self.width = width | ||||||
|  |         self.height = height | ||||||
|  |         self.screen = pygame.display.set_mode((self.width, self.height)) | ||||||
|  |         pygame.display.set_caption("Space Invaders") | ||||||
|  |         self.clock = pygame.time.Clock() | ||||||
|  |         self.background_image = pygame.image.load("spr_space_himmel.png") | ||||||
|  |         self.running = True | ||||||
|  |         self.spaceship = Spaceship(self, 370, 515) | ||||||
|  |         self.enemies = [] | ||||||
|  |         self.score = 0 | ||||||
|  |         for i in range(12): | ||||||
|  |             self.enemies.append(Enemy(self, random.randint(0, 736), random.randint(30, 130))) | ||||||
|  |  | ||||||
|  |         while self.running: | ||||||
|  |             self.clock.tick(60) | ||||||
|  |             self.screen.blit(self.background_image, (0, 0)) | ||||||
|  |             for event in pygame.event.get(): | ||||||
|  |                 if event.type == pygame.QUIT: | ||||||
|  |                     self.running = False | ||||||
|  |                 if event.type == pygame.KEYDOWN: | ||||||
|  |                     if event.key == pygame.K_LEFT: | ||||||
|  |                         self.spaceship.move(-10) | ||||||
|  |                     if event.key == pygame.K_RIGHT: | ||||||
|  |                         self.spaceship.move(10) | ||||||
|  |                     if event.key == pygame.K_SPACE: | ||||||
|  |                         self.spaceship.fire_bullet() | ||||||
|  |  | ||||||
|  |                 if event.type == pygame.KEYUP: | ||||||
|  |                     if event.key == pygame.K_LEFT: | ||||||
|  |                         self.spaceship.move(10) | ||||||
|  |                 if event.type == pygame.KEYUP: | ||||||
|  |                     if event.key == pygame.K_RIGHT: | ||||||
|  |                         self.spaceship.move(-10) | ||||||
|  |  | ||||||
|  |             self.spaceship.update() | ||||||
|  |             if len(self.spaceship.bullets) > 0: | ||||||
|  |                 for bullet in self.spaceship.bullets: | ||||||
|  |                     if bullet.is_fired == True: | ||||||
|  |                         bullet.update() | ||||||
|  |                     else: | ||||||
|  |                         self.spaceship.bullets.remove(bullet) | ||||||
|  |  | ||||||
|  |             for enemy in self.enemies: | ||||||
|  |                 enemy.update() | ||||||
|  |                 enemy.check_collision() | ||||||
|  |                 if enemy.y > 460: | ||||||
|  |                     for i in self.enemies: | ||||||
|  |                         i.y = 1000 | ||||||
|  |                     self.print_game_over() | ||||||
|  |                     break | ||||||
|  |             self.print_score() | ||||||
|  |             pygame.display.update() | ||||||
|  |  | ||||||
|  |     def print_game_over(self): | ||||||
|  |         go_font = pygame.font.Font("freesansbold.ttf", 64) | ||||||
|  |         go_text = go_font.render("GAME OVER", True, (255, 255, 255)) | ||||||
|  |         self.screen.blit(go_text, (200, 250)) | ||||||
|  |  | ||||||
|  |     def print_score(self): | ||||||
|  |         score_font = pygame.font.Font("freesansbold.ttf", 24) | ||||||
|  |         score_text = score_font.render("Punkte: " + str(self.score), True, (255, 255, 255)) | ||||||
|  |         self.screen.blit(score_text, (8, 8)) | ||||||
|  |  | ||||||
|  |  | ||||||
|  | class Spaceship: | ||||||
|  |     def __init__(self, game, x, y): | ||||||
|  |         self.x = x | ||||||
|  |         self.y = y | ||||||
|  |         self.change_x = 0 | ||||||
|  |         self.game = game | ||||||
|  |         self.spaceship_img = pygame.image.load("spr_spaceship.png") | ||||||
|  |         self.bullets = [] | ||||||
|  |  | ||||||
|  |     def fire_bullet(self): | ||||||
|  |         self.bullets.append(Bullet(self.game, self.x, self.y)) | ||||||
|  |         self.bullets[len(self.bullets) - 1].fire() | ||||||
|  |  | ||||||
|  |     def move(self, speed): | ||||||
|  |         self.change_x += speed | ||||||
|  |  | ||||||
|  |     def update(self): | ||||||
|  |         self.x += self.change_x | ||||||
|  |         if self.x < 0: | ||||||
|  |             self.x = 0 | ||||||
|  |         elif self.x > 736: | ||||||
|  |             self.x = 736 | ||||||
|  |  | ||||||
|  |         self.game.screen.blit(self.spaceship_img, (self.x, self.y)) | ||||||
|  |  | ||||||
|  |  | ||||||
|  | class Bullet: | ||||||
|  |     def __init__(self, game, x, y): | ||||||
|  |         self.x = x | ||||||
|  |         self.y = y | ||||||
|  |         self.game = game | ||||||
|  |         self.is_fired = False | ||||||
|  |         self.bullet_speed = 10 | ||||||
|  |         self.bullet_img = pygame.image.load("spr_patrone.png") | ||||||
|  |  | ||||||
|  |     def fire(self): | ||||||
|  |         self.is_fired = True | ||||||
|  |  | ||||||
|  |     def update(self): | ||||||
|  |         self.y -= self.bullet_speed | ||||||
|  |         if self.y <= 0: | ||||||
|  |             self.is_fired = False | ||||||
|  |         self.game.screen.blit(self.bullet_img, (self.x, self.y)) | ||||||
|  |  | ||||||
|  |  | ||||||
|  | class Enemy: | ||||||
|  |     def __init__(self, game, x, y): | ||||||
|  |         self.x = x | ||||||
|  |         self.y = y | ||||||
|  |         self.change_x = 5 | ||||||
|  |         self.change_y = 60 | ||||||
|  |         self.game = game | ||||||
|  |         self.enemy_img = pygame.image.load("spr_space_enemy.png") | ||||||
|  |  | ||||||
|  |     def check_collision(self): | ||||||
|  |         for bullet in self.game.spaceship.bullets: | ||||||
|  |             distance = math.sqrt(math.pow(self.x - bullet.x, 2) + math.pow(self.y - bullet.y, 2)) | ||||||
|  |             if distance < 35: | ||||||
|  |                 bullet.is_fired = False | ||||||
|  |                 self.game.score += 1 | ||||||
|  |                 self.x = random.randint(0, 736) | ||||||
|  |                 self.y = random.randint(50, 150) | ||||||
|  |  | ||||||
|  |     def update(self): | ||||||
|  |         self.x += self.change_x | ||||||
|  |         if self.x >= 736: | ||||||
|  |             self.y += self.change_y | ||||||
|  |             self.change_x = -5 | ||||||
|  |         elif self.x <= 0: | ||||||
|  |             self.y += self.change_y | ||||||
|  |             self.change_x = 5 | ||||||
|  |         self.game.screen.blit(self.enemy_img, (self.x, self.y)) | ||||||
|  |  | ||||||
|  |  | ||||||
|  | if __name__ == '__main__': | ||||||
|  |     game = Game(800, 600) | ||||||
|  |     print(len(game.spaceship.bullets)) | ||||||
							
								
								
									
										
											BIN
										
									
								
								spr_patrone.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								spr_patrone.png
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							| After Width: | Height: | Size: 285 B | 
							
								
								
									
										
											BIN
										
									
								
								spr_space_enemy.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								spr_space_enemy.png
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							| After Width: | Height: | Size: 1.6 KiB | 
							
								
								
									
										
											BIN
										
									
								
								spr_space_himmel.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								spr_space_himmel.png
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							| After Width: | Height: | Size: 4.7 KiB | 
							
								
								
									
										
											BIN
										
									
								
								spr_spaceship.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								spr_spaceship.png
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							| After Width: | Height: | Size: 1.2 KiB | 
		Reference in New Issue
	
	Block a user