《Python编程:从入门到实践》外星人入侵项目课后练习13-2

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()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值