首页 » 父与子的编程之旅:与小卡特一起学Python » 父与子的编程之旅:与小卡特一起学Python全文在线阅读

《父与子的编程之旅:与小卡特一起学Python》第16章

关灯直达底部

测试题

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)  

应该能看到各个矩形会单独出现,因为我们放慢了程序的速度,现在画出各个矩形之后会刷新显示。如果对正弦曲线程序做这个处理,可以看到正弦曲线中的各个点分别画出。