《Python编程 从入门到实践》13-1练习题(创建一组星星)错误摘记

正确代码

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)

第一次在这里做笔记,对编辑器还不是很熟悉。
就为了这么两个参数错误,试了一个多小时……

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值