正确代码
import pygame, sys
from pygame.sprite import Group
from settings import Settings
from star import Star
def run_game():
'''游戏主程序'''
# 初始化游戏设定
pygame.init()
settings = Settings()
screen = pygame.display.set_mode((settings.screen_width, settings.screen_height))
pygame.display.set_caption('STAR SKY')
# 创建star实例
stars = Group()
def create_stars(settings, screen, stars):
'''创建一群星星'''
number_stars_x = calculate_number_stars_x(screen, settings)
number_lines = calculate_line_stars(screen, settings)
for number_line in range(number_lines):
# print('这是第几行:' + str(number_line))
for number_star in range(number_stars_x):
# print('星星这行有: ' + str(number_star))
create_star(screen, number_star, number_line, stars)
def create_star(screen, number_star, number_line, stars):
'''创建一个星星'''
star = Star(screen)
# star_width = star.rect.width
# star_height = star.rect.height
star.rect.x = number_star * (30 + star.rect.width)
star.rect.y = number_line * (30 + star.rect.height)
print('(' + str(star.rect.x) + ',' + str(star.rect.y) + ')')
stars.add(star)
def calculate_line_stars(screen, settings):
'''计算可以容纳几行星星'''
star = Star(screen)
star_height = star.rect.height
available_space_y = settings.screen_height - 300
number_lines = int(available_space_y / (30 + star_height))
return number_lines
print(number_lines)
def calculate_number_stars_x(screen, settings):
'''计算一行可以容纳多少星星'''
star = Star(screen)
star_width = star.rect.width
available_space_x = settings.screen_width - 200
number_stars_x = int(available_space_x / (30 + star_width))
return number_stars_x
create_stars(settings, screen, stars)
# 游戏主循环
while True:
for event in pygame.event.get():
if event.type == pygame.QUIT:
sys.exit()
screen.fill(settings.bg_color)
stars.draw(screen)
pygame.display.flip()
run_game()
错在创建一组星星的父函数时,调入create_star(screen, number_stars_x, number_lines, stars),而不是正确的create_star(screen, number_star, number_line, stars),导致行数和列数被定义为固定值,输出的星星位置参数都在一个点上。
错误输出结果
(924,560)
(924,560)
(924,560)
(924,560)
(924,560)
(924,560)
(924,560)
(924,560)
(924,560)
(924,560)
(924,560)
(924,560)
(924,560)
(924,560)
(924,560)
(924,560)
(924,560)
(924,560)
(924,560)
(924,560)
(924,560)
(924,560)
(924,560)
(924,560)
(924,560)
(924,560)
(924,560)
(924,560)
正确位置参数输出结果
(0,0)
(132,0)
(264,0)
(396,0)
(528,0)
(660,0)
(792,0)
(0,140)
(132,140)
(264,140)
(396,140)
(528,140)
(660,140)
(792,140)
(0,280)
(132,280)
(264,280)
(396,280)
(528,280)
(660,280)
(792,280)
(0,420)
(132,420)
(264,420)
(396,420)
(528,420)
(660,420)
(792,420)
第一次在这里做笔记,对编辑器还不是很熟悉。
就为了这么两个参数错误,试了一个多小时……