13-2:随机显示星星图像
下图为用到的模块。
星星图片,放在image文件下即可
接下来是每个模块的具体内容。
首先是一些基本设置
settings.py
class Settings():
def __init__(self):
self.screen_width = 1900
self.screen_height = 1000
self.bg_color = (230, 230, 230) # 设置背景色,浅灰色
星星的基本属性,包括如何导入、初始化位置、如何显示。
star.py
import pygame
from pygame.sprite import Sprite
class Star(Sprite):
def __init__(self,settings,screen):
super().__init__()
self.settings = settings
self.screen = screen
self.image = pygame.image.load('C:/Users/Xin/PycharmProjects/alien_invasion/image/star.jpg')
self.rect = self.image.get_rect()
#x ,y分别表示离屏幕左边缘和上边缘的距离
self.rect.x = self.rect.width
self.rect.y = self.rect.height
self.x = float(self.rect.x)
self.y = float(self.rect.y)
def biltme(self):
self.screen.blit(self.image,self.rect)
用到的主要函数,比如计算游戏屏幕上每行可以放多少颗星星、可以放多少行、如何产生星星矩阵并随机显示。
game_functions.py
import pygame
from stars_arrange.star import Star
from random import randint
import sys
#计算每行可以放多少个星星
def star_column_num(settings,star_width):
available_space_x = settings.screen_width - (2 * star_width)
star_column_nums = int(available_space_x / (2 * star_width))
return star_column_nums
# 计算可以放多少列
def star_row_num(settings,star_height):
available_space_y = settings.screen_height - (2 * star_height)
star_row_nums = int(available_space_y / (2 * star_height))
return star_row_nums
#生成一个星星
def create_star(settings,screen,num_star_row,num_star_column,stars):
star = Star(settings,screen)
star.rect.x = star.rect.width + 2 * num_star_column * star.rect.width
star.rect.y = star.rect.height + 2 * num_star_row * star.rect.height
stars.add(star)
#生成星星矩阵,随机显示星星
def crete_stars_list(settings,screen,stars):
star = Star(settings,screen)
star_column_nums = star_column_num(settings,star.rect.width)
star_row_nums = star_row_num(settings,star.rect.height)
for num_row in range(star_row_nums):
num_column = randint(0,star_column_nums)
create_star(settings,screen,num_row,num_column,stars)
def update_screen(screen,star_settings,stars):
screen.fill(star_settings.bg_color)
crete_stars_list(star_settings, screen, stars)
stars.draw(screen)
pygame.display.flip()
stars.empty()
def check_exit(event):
if event.type == pygame.QUIT:
sys.exit()
最后是主文件。
show_stars_list.py
import pygame
from pygame.sprite import Group
from stars_arrange.settings import Settings
import sys
import stars_arrange.game_functions as gf
def run_game():
star_settings = Settings()
screen = pygame.display.set_mode((star_settings.screen_width,star_settings.screen_height))
stars = Group()
while True:
gf.update_screen(screen,star_settings,stars)
for event in pygame.event.get():
gf.check_exit(event)
run_game()