【Python个人学习笔记】---《Python游戏编程入门》第二章小结挑战习题(二)

问题:选取一个示列,例如,绘制线条示例,修改它以便用随机的值绘制1000个线条。了解一下random库和random.randint()函数。


最开始想法是,用pygame.draw.line(Surface, color, start_pos, end_pos, width) 来绘制,给start_pos, end_pos 赋予随机数。
运行结果后发现,绘制的线条不会在屏幕surface上出现复数条,只有一条随机变动。

import sys
import random
import time
import pygame
from pygame.locals import *

# 初始化
pygame.init()
# 创建窗口
screen = pygame.display.set_mode((600, 500))
pygame.display.set_caption("Drawing Lines")
FPS = 60
fps_clock = pygame.time.Clock()

# 主循环(绘制随机线条)
n = 1
while n < 1000:
    # 键鼠事件
    for event in pygame.event.get():
        if event.type in (QUIT, KEYDOWN):
            sys.exit()
    # 绘制屏幕颜色
    screen.fill((0, 80, 0))
    # 绘制线条
    color = 100, 255, 200
    width = 2
    x_random = random.randint(10, 200)
    y_random = random.randint(20, 300)
    x_end_random = random.randint(200,600)
    y_end_random = random.randint(300,500)
    start_point = (x_random, y_random)
    end_point = (x_end_random, y_end_random)
    # start_point = (10,200)
    pygame.draw.line(screen, color, start_point, end_point, width)
    # 更新屏幕显示
    pygame.display.update()
    fps_clock.tick(FPS)
    time.sleep(0.05)  # 做完一次,延迟0.05秒
    n += 1

显示效果如下:
在这里插入图片描述


很明显,不是很符合要求,肯定是哪里出错了。
最后找出来的错误是把screen.fill()放进主循环while中了,于是每次循环都会把屏幕screen重新绘制一遍背景颜色,因此把上一次绘制的线条给覆盖掉了,从而显示在屏幕screen上的永远只有这一次绘制的线条。(有错请指正)
解决方法:把screen.fill()扔到while循环外面(上面)去。


最后修改后的代码:

import sys
import random
import time
import pygame
from pygame.locals import *

# 初始化
pygame.init()
# 创建窗口
screen = pygame.display.set_mode((600, 500))
pygame.display.set_caption("Drawing  Random Lines")
# 帧率
FPS = 60
fps_clock = pygame.time.Clock()
# 绘制屏幕颜色
# 放主循环外,否则会覆盖掉上次绘制的线条
screen.fill((0, 80, 0))

# 主循环(绘制随机线条)
n = 1
while n < 1000:
    # 键鼠事件
    for event in pygame.event.get():
        if event.type in (QUIT, KEYDOWN):
            sys.exit()

    # 绘制线条
    # 起始点,和结束点必须在主循环内,否则只会绘制一条线条,下方的颜色同理
    width = 2
    x_start_random = random.randint(0, 600)
    y_start_random = random.randint(0, 500)
    x_end_random = random.randint(0, 600)
    y_end_random = random.randint(0, 500)
    start_point = (x_start_random, y_start_random)
    end_point = (x_end_random, y_end_random)
    # 添加颜色的变化(题目未作要求233)
    r = random.randint(0, 255)
    g = random.randint(0, 255)
    b = random.randint(0, 255)
    color = r, g, b
    pygame.draw.line(screen, color, start_point, end_point, width)
    # 更新屏幕显示
    pygame.display.update()
    fps_clock.tick(FPS)
    time.sleep(0.05)  # 做完一次,延迟0.05秒
    n += 1

呈现的效果:
在这里插入图片描述


完成题目要求。

猜你喜欢

转载自blog.csdn.net/weixin_41131904/article/details/85320197