In this article, the example for you to share the python realization of the spaceship war specific code for your reference, the specific content is as follows
Last blog post we realized togethervipertogether withTank Battle
200 lines of python code to implement a game of Snake.
rendering (visual representation of how things will turn out)
Holding down the up, down, left and right keys allows theSnake Sport
python make tank battle
rendering (visual representation of how things will turn out)
You can hold down the up, down, left and right arrow keys as well as WSAD to move the tank.
Press 0 and j to fire bullets.
The exact code with the image audio files can be downloaded from myGitHub AddressGet it, welcome star
Next, we'll implement a spaceship battle game.
Creating a Spaceship Class
import pygame from import Sprite class Ship(Sprite): def __init__(self, ai_settings, screen): """Initialize the ship, and set its starting position.""" super(Ship, self).__init__() = screen self.ai_settings = ai_settings # Load the ship image, and get its rect. = ('images/') = .get_rect() self.screen_rect = screen.get_rect() # Start each new ship at the bottom center of the screen. = self.screen_rect.centerx = self.screen_rect.bottom # Store a decimal value for the ship's center. = float() # Movement flags. self.moving_right = False self.moving_left = False def center_ship(self): """Center the ship on the screen.""" = self.screen_rect.centerx def update(self): """Update the ship's position, based on movement flags.""" # Update the ship's center value, not the rect. if self.moving_right and < self.screen_rect.right: += self.ai_settings.ship_speed_factor if self.moving_left and > 0: -= self.ai_settings.ship_speed_factor # Update rect object from . = def blitme(self): """Draw the ship at its current location.""" (, )
Creating Setup Classes
class Settings(): """A class to store all settings for Alien Invasion.""" def __init__(self): """Initialize the game's static settings.""" # Screen settings. self.screen_width = 1200 self.screen_height = 800 self.bg_color = (230, 230, 230) # Ship settings. self.ship_limit = 3 # Bullet settings. self.bullet_width = 3 self.bullet_height = 15 self.bullet_color = 60, 60, 60 self.bullets_allowed = 3 # Alien settings. self.fleet_drop_speed = 10 # How quickly the game speeds up. self.speedup_scale = 1.1 # How quickly the alien point values increase. self.score_scale = 1.5 self.initialize_dynamic_settings() def initialize_dynamic_settings(self): """Initialize settings that change throughout the game.""" self.ship_speed_factor = 1.5 self.bullet_speed_factor = 3 self.alien_speed_factor = 1 # Scoring. self.alien_points = 50 # fleet_direction of 1 represents right, -1 represents left. self.fleet_direction = 1 def increase_speed(self): """Increase speed settings and alien point values.""" self.ship_speed_factor *= self.speedup_scale self.bullet_speed_factor *= self.speedup_scale self.alien_speed_factor *= self.speedup_scale self.alien_points = int(self.alien_points * self.score_scale)
Creating a Bullet Class
import pygame from import Sprite class Bullet(Sprite): """A class to manage bullets fired from the ship.""" def __init__(self, ai_settings, screen, ship): """Create a bullet object, at the ship's current position.""" super(Bullet, self).__init__() = screen # Create bullet rect at (0, 0), then set correct position. = (0, 0, ai_settings.bullet_width, ai_settings.bullet_height) = = # Store a decimal value for the bullet's position. = float() = ai_settings.bullet_color self.speed_factor = ai_settings.bullet_speed_factor def update(self): """Move the bullet up the screen.""" # Update the decimal position of the bullet. -= self.speed_factor # Update the rect position. = def draw_bullet(self): """Draw the bullet to the screen.""" (, , )
Creating Game Feature Classes
import sys from time import sleep import pygame from bullet import Bullet from alien import Alien def check_keydown_events(event, ai_settings, screen, ship, bullets): """Respond to keypresses.""" if == pygame.K_RIGHT: ship.moving_right = True elif == pygame.K_LEFT: ship.moving_left = True elif == pygame.K_SPACE: fire_bullet(ai_settings, screen, ship, bullets) elif == pygame.K_q: () def check_keyup_events(event, ship): """Respond to key releases.""" if == pygame.K_RIGHT: ship.moving_right = False elif == pygame.K_LEFT: ship.moving_left = False def check_events(ai_settings, screen, stats, sb, play_button, ship, aliens, bullets): """Respond to keypresses and mouse events.""" for event in (): if == : () elif == : check_keydown_events(event, ai_settings, screen, ship, bullets) elif == : check_keyup_events(event, ship) elif == : mouse_x, mouse_y = .get_pos() check_play_button(ai_settings, screen, stats, sb, play_button, ship, aliens, bullets, mouse_x, mouse_y) def check_play_button(ai_settings, screen, stats, sb, play_button, ship, aliens, bullets, mouse_x, mouse_y): """Start a new game when the player clicks Play.""" button_clicked = play_button.(mouse_x, mouse_y) if button_clicked and not stats.game_active: # Reset the game settings. ai_settings.initialize_dynamic_settings() # Hide the mouse cursor. .set_visible(False) # Reset the game statistics. stats.reset_stats() stats.game_active = True # Reset the scoreboard images. sb.prep_score() sb.prep_high_score() sb.prep_level() sb.prep_ships() # Empty the list of aliens and bullets. () () # Create a new fleet and center the ship. create_fleet(ai_settings, screen, ship, aliens) ship.center_ship() def fire_bullet(ai_settings, screen, ship, bullets): """Fire a bullet, if limit not reached yet.""" # Create a new bullet, add to bullets group. if len(bullets) < ai_settings.bullets_allowed: new_bullet = Bullet(ai_settings, screen, ship) (new_bullet) def update_screen(ai_settings, screen, stats, sb, ship, aliens, bullets, play_button): """Update images on the screen, and flip to the new screen.""" # Redraw the screen, each pass through the loop. (ai_settings.bg_color) # Redraw all bullets, behind ship and aliens. for bullet in (): bullet.draw_bullet() () (screen) # Draw the score information. sb.show_score() # Draw the play button if the game is inactive. if not stats.game_active: play_button.draw_button() # Make the most recently drawn screen visible. () def update_bullets(ai_settings, screen, stats, sb, ship, aliens, bullets): """Update position of bullets, and get rid of old bullets.""" # Update bullet positions. () # Get rid of bullets that have disappeared. for bullet in (): if <= 0: (bullet) check_bullet_alien_collisions(ai_settings, screen, stats, sb, ship, aliens, bullets) def check_high_score(stats, sb): """Check to see if there's a new high score.""" if > stats.high_score: stats.high_score = sb.prep_high_score() def check_bullet_alien_collisions(ai_settings, screen, stats, sb, ship, aliens, bullets): """Respond to bullet-alien collisions.""" # Remove any bullets and aliens that have collided. collisions = (bullets, aliens, True, True) if collisions: for aliens in (): += ai_settings.alien_points * len(aliens) sb.prep_score() check_high_score(stats, sb) if len(aliens) == 0: # If the entire fleet is destroyed, start a new level. () ai_settings.increase_speed() # Increase level. += 1 sb.prep_level() create_fleet(ai_settings, screen, ship, aliens) def check_fleet_edges(ai_settings, aliens): """Respond appropriately if any aliens have reached an edge.""" for alien in (): if alien.check_edges(): change_fleet_direction(ai_settings, aliens) break def change_fleet_direction(ai_settings, aliens): """Drop the entire fleet, and change the fleet's direction.""" for alien in (): += ai_settings.fleet_drop_speed ai_settings.fleet_direction *= -1 def ship_hit(ai_settings, screen, stats, sb, ship, aliens, bullets): """Respond to ship being hit by alien.""" if stats.ships_left > 0: # Decrement ships_left. stats.ships_left -= 1 # Update scoreboard. sb.prep_ships() else: stats.game_active = False .set_visible(True) # Empty the list of aliens and bullets. () () # Create a new fleet, and center the ship. create_fleet(ai_settings, screen, ship, aliens) ship.center_ship() # Pause. sleep(0.5) def check_aliens_bottom(ai_settings, screen, stats, sb, ship, aliens, bullets): """Check if any aliens have reached the bottom of the screen.""" screen_rect = screen.get_rect() for alien in (): if >= screen_rect.bottom: # Treat this the same as if the ship got hit. ship_hit(ai_settings, screen, stats, sb, ship, aliens, bullets) break def update_aliens(ai_settings, screen, stats, sb, ship, aliens, bullets): """ Check if the fleet is at an edge, then update the postions of all aliens in the fleet. """ check_fleet_edges(ai_settings, aliens) () # Look for alien-ship collisions. if (ship, aliens): ship_hit(ai_settings, screen, stats, sb, ship, aliens, bullets) # Look for aliens hitting the bottom of the screen. check_aliens_bottom(ai_settings, screen, stats, sb, ship, aliens, bullets) def get_number_aliens_x(ai_settings, alien_width): """Determine the number of aliens that fit in a row.""" available_space_x = ai_settings.screen_width - 2 * alien_width number_aliens_x = int(available_space_x / (2 * alien_width)) return number_aliens_x def get_number_rows(ai_settings, ship_height, alien_height): """Determine the number of rows of aliens that fit on the screen.""" available_space_y = (ai_settings.screen_height - (3 * alien_height) - ship_height) number_rows = int(available_space_y / (2 * alien_height)) return number_rows def create_alien(ai_settings, screen, aliens, alien_number, row_number): """Create an alien, and place it in the row.""" alien = Alien(ai_settings, screen) alien_width = = alien_width + 2 * alien_width * alien_number = = + 2 * * row_number (alien) def create_fleet(ai_settings, screen, ship, aliens): """Create a full fleet of aliens.""" # Create an alien, and find number of aliens in a row. alien = Alien(ai_settings, screen) number_aliens_x = get_number_aliens_x(ai_settings, ) number_rows = get_number_rows(ai_settings, , ) # Create the fleet of aliens. for row_number in range(number_rows): for alien_number in range(number_aliens_x): create_alien(ai_settings, screen, aliens, alien_number, row_number)
main function
import pygame from import Group from settings import Settings from game_stats import GameStats from scoreboard import Scoreboard from button import Button from ship import Ship import game_functions as gf def run_game(): # Initialize pygame, settings, and screen object. () ai_settings = Settings() screen = .set_mode( (ai_settings.screen_width, ai_settings.screen_height)) .set_caption("Alien Invasion") # Make the Play button. play_button = Button(ai_settings, screen, "Play") # Create an instance to store game statistics, and a scoreboard. stats = GameStats(ai_settings) sb = Scoreboard(ai_settings, screen, stats) # Set the background color. bg_color = (230, 230, 230) # Make a ship, a group of bullets, and a group of aliens. ship = Ship(ai_settings, screen) bullets = Group() aliens = Group() # Create the fleet of aliens. gf.create_fleet(ai_settings, screen, ship, aliens) # Start the main loop for the game. while True: gf.check_events(ai_settings, screen, stats, sb, play_button, ship, aliens, bullets) if stats.game_active: () gf.update_bullets(ai_settings, screen, stats, sb, ship, aliens, bullets) gf.update_aliens(ai_settings, screen, stats, sb, ship, aliens, bullets) gf.update_screen(ai_settings, screen, stats, sb, ship, aliens, bullets, play_button) run_game()
Creating an alien class
import pygame from import Sprite class Alien(Sprite): """A class to represent a single alien in the fleet.""" def __init__(self, ai_settings, screen): """Initialize the alien, and set its starting position.""" super(Alien, self).__init__() = screen self.ai_settings = ai_settings # Load the alien image, and set its rect attribute. = ('images/') = .get_rect() # Start each new alien near the top left of the screen. = = # Store the alien's exact position. = float() def check_edges(self): """Return True if alien is at edge of screen.""" screen_rect = .get_rect() if >= screen_rect.right: return True elif <= 0: return True def update(self): """Move the alien right or left.""" += (self.ai_settings.alien_speed_factor * self.ai_settings.fleet_direction) = def blitme(self): """Draw the alien at its current location.""" (, )
Create game start button
import class Button(): def __init__(self, ai_settings, screen, msg): """Initialize button attributes.""" = screen self.screen_rect = screen.get_rect() # Set the dimensions and properties of the button. , = 200, 50 self.button_color = (0, 255, 0) self.text_color = (255, 255, 255) = (None, 48) # Build the button's rect object, and center it. = (0, 0, , ) = self.screen_rect.center # The button message only needs to be prepped once. self.prep_msg(msg) def prep_msg(self, msg): """Turn msg into a rendered image, and center text on the button.""" self.msg_image = (msg, True, self.text_color, self.button_color) self.msg_image_rect = self.msg_image.get_rect() self.msg_image_rect.center = def draw_button(self): # Draw blank button, then draw message. (self.button_color, ) (self.msg_image, self.msg_image_rect)
Creating Game State Classes
class GameStats(): """Track statistics for Alien Invasion.""" def __init__(self, ai_settings): """Initialize statistics.""" self.ai_settings = ai_settings self.reset_stats() # Start game in an inactive state. self.game_active = False # High score should never be reset. self.high_score = 0 def reset_stats(self): """Initialize statistics that can change during the game.""" self.ships_left = self.ai_settings.ship_limit = 0 = 1
Creating a Scoreboard
import from import Group from ship import Ship class Scoreboard(): """A class to report scoring information.""" def __init__(self, ai_settings, screen, stats): """Initialize scorekeeping attributes.""" = screen self.screen_rect = screen.get_rect() self.ai_settings = ai_settings = stats # Font settings for scoring information. self.text_color = (30, 30, 30) = (None, 48) # Prepare the initial score images. self.prep_score() self.prep_high_score() self.prep_level() self.prep_ships() def prep_score(self): """Turn the score into a rendered image.""" rounded_score = int(round(, -1)) score_str = "{:,}".format(rounded_score) self.score_image = (score_str, True, self.text_color, self.ai_settings.bg_color) # Display the score at the top right of the screen. self.score_rect = self.score_image.get_rect() self.score_rect.right = self.screen_rect.right - 20 self.score_rect.top = 20 def prep_high_score(self): """Turn the high score into a rendered image.""" high_score = int(round(.high_score, -1)) high_score_str = "{:,}".format(high_score) self.high_score_image = (high_score_str, True, self.text_color, self.ai_settings.bg_color) # Center the high score at the top of the screen. self.high_score_rect = self.high_score_image.get_rect() self.high_score_rect.centerx = self.screen_rect.centerx self.high_score_rect.top = self.score_rect.top def prep_level(self): """Turn the level into a rendered image.""" self.level_image = (str(), True, self.text_color, self.ai_settings.bg_color) # Position the level below the score. self.level_rect = self.level_image.get_rect() self.level_rect.right = self.score_rect.right self.level_rect.top = self.score_rect.bottom + 10 def prep_ships(self): """Show how many ships are left.""" = Group() for ship_number in range(.ships_left): ship = Ship(self.ai_settings, ) = 10 + ship_number * = 10 (ship) def show_score(self): """Draw score to the screen.""" (self.score_image, self.score_rect) (self.high_score_image, self.high_score_rect) (self.level_image, self.level_rect) # Draw ships. ()
The program runs as follows
Click to play
Hold down the arrow keys to move the ship
Hold down the spacebar to fire bullets
More interesting classic mini-game realization topics to share:
C++ Classic Game Summary
Summary of classic python mini-games
Collection of python tetris games
JavaScript Classic Games
java classic game summary
javascript classic games summary
This is the whole content of this article, I hope it will help you to learn more.