测试题
1. RGB 值 [255, 255, 255] 得到白色。
2. RGB 值 [0, 255, 0] 得到绿色;
3. 要画矩形,可以使用 Pygame 方法 pygame.draw.rect
;
4. 要画线把多个点连在一起(如连连看),可以使用 pygame.draw.lines
方法。
5. “像素”是“图像元素”的简写,表示屏幕上(或纸上)的一个点。
6. 在一个 Pygame 窗口中,位置 [0, 0] 位于左上角。
7. 在这个图中,位置 [50, 200] 位于字母 B。
8. 在这个图中,位置 [300, 50] 位于字母 D。
9. 可以使用 blit
方法在 Pygame 中复制图像。
10. 要移动一个图像或者完成动画,可以使用以下两个步骤:
从原来的位置擦除图像;
在新位置上绘制图像。
动手试一试
1. 下面的程序会在屏幕上画出一些不同的形状。也可以在 /answers 文件夹和网站上找到 TIO_CH16_1.py。
import pygame, syspygame.initscreen=pygame.display.set_mode((640, 480))screen.fill((250, 120, 0))pygame.draw.arc(screen,(255,255,0),pygame.rect.Rect(43,368,277,235),-6.25, 0, 15)pygame.draw.rect(screen,(255, 0, 0),pygame.rect.Rect(334,191,190,290))pygame.draw.rect(screen,(128, 64, 0),pygame.rect.Rect(391,349,76,132))pygame.draw.line(screen,(0, 255, 0),(268, 259),(438,84),25)pygame.draw.line(screen,(0, 255, 0),(578, 259),(438,84),25)pygame.draw.circle(screen, (0, 0, 0), (452, 409), 11, 2)pygame.draw.polygon(screen, (0, 0, 255),[(39, 39), (44, 136), (59, 136), (60,102),(92,102),(94,131),(107, 141), (111, 50), (97, 50), (93, 86), (60, 82), (58, 38)], 5)pygame.draw.rect(screen,(0,0,255), pygame.rect.Rect(143,90,23,63),5)pygame.draw.circle(screen, (0, 0, 255), (153, 60), 15, 5)clock = pygame.time.Clockpygame.display.fliprunning = Truewhile running: clock.tick(60) for event in pygame.event.get:if event.type == pygame.QUIT: running = Falseelif event.type == pygame.KEYDOWN and event.key == pygame.K_ESCAPE: running = Falsepygame.quit
2. 要把沙滩球图像换成一个不同的图像,只需把这行代码中的文件名:
my_ball = pygame.image.load('beach_ball.png')
替换成另一个图片的文件名。
3. 在代码清单 16-16 中,只需把
x_speed = 10y_speed = 10
改为其他的值,如
x_speed = 20y_speed = 8
4. 要让球在一面“隐形”的墙上反弹,可以把代码清单 16-16 中的这行代码
if x > screen.get_width - 90 or x < 0:
改为:
if x > screen.get_width - 250 or x < 0:
这会让球在到达窗口边界之前就反向。可以对 y 坐标做同样的处理,让它在到达“地板”时也会反弹。
5. 将代码清单 16-6 中的 display.flip 移到 while
循环内部,并增加一个延迟之后,代码如下所示:
import pygame, sys, randompygame.initscreen = pygame.display.set_mode([640,480])screen.fill([255, 255, 255])for i in range (100): width = random.randint(0, 250) height = random.randint(0, 100) top = random.randint(0, 400) left = random.randint(0, 500) pygame.draw.rect(screen, [0,0,0], [left, top, width, height], 1) pygame.display.flip pygame.time.delay(30)
应该能看到各个矩形会单独出现,因为我们放慢了程序的速度,现在画出各个矩形之后会刷新显示。如果对正弦曲线程序做这个处理,可以看到正弦曲线中的各个点分别画出。