用pygame开发本身的游戏-2.让方块动起来

1、引言

前面的文章中,咱们学习了如何画出一个方块,今天咱们来学习如何让方块运动起来。函数

2、让方块自行移动

咱们将前面文章出现的代码进行修改,咱们将方块的x坐标改为变量x,while循环语句里每次将x的变量值增长5,运行程序后仔细看屏幕,会看到有个红色方块一闪而过(第一次看不清,尝试多运行几回)。这里对前面代码的理解很重要,虽然咱们一直看到的图像是静止的,但实际上每次都是整个屏幕从新被填充成白色(代码SCREEN.fill((255, 255, 255))所作的事情),而后再从新画了个新的矩形(代码pygame.draw.rect(SCREEN, (255, 0, 0), (40, 30, 100, 50))所作的事情)。本节的代码也是相似,在每次循环中x的值都是不同,因此矩形的位置也一直在变化,但因为x的范围很快超过屏幕的坐标,因此后面就看不到红色方块了。oop

import pygame, sys

# 初始化
pygame.init()
# 设置屏幕的宽度,高度
SCREEN = pygame.display.set_mode((400, 300))
# 设置窗口的标题
pygame.display.set_caption('Hello World!')
x = 10
# 游戏主循环
while True: # main game loop
    for event in pygame.event.get():
        # 处理退出事件
        if event.type == pygame.QUIT:
            pygame.quit()
            sys.exit()
    # 将屏幕的背景填充成白色,了解下RGB三原色
    SCREEN.fill((255, 255, 255))
    # 调用 pygame.display.update() 方法更新整个屏幕的显示
    x = x + 5
    pygame.draw.rect(SCREEN, (255, 0, 0), (x, 30, 100, 50))
    pygame.display.update()

为了控制屏幕刷新的速度,咱们在每次屏幕刷新后, 用pygame.time.delay函数进行延时,使程序稍微停一小会,运行后,咱们就能够看到红色方块运行的速度比较慢些。学习

import pygame, sys

# 初始化
pygame.init()
# 设置屏幕的宽度,高度
SCREEN = pygame.display.set_mode((400, 300))
# 设置窗口的标题
pygame.display.set_caption('Hello World!')
x = 10
# 游戏主循环
while True: # main game loop
    for event in pygame.event.get():
        # 处理退出事件
        if event.type == pygame.QUIT:
            pygame.quit()
            sys.exit()
    # 将屏幕的背景填充成白色,了解下RGB三原色
    SCREEN.fill((255, 255, 255))
    # 调用 pygame.display.update() 方法更新整个屏幕的显示
    x = x + 5
    pygame.draw.rect(SCREEN, (255, 0, 0), (x, 30, 100, 50))
    pygame.display.update()
    pygame.time.delay(50)

pygame.time.delay() 暂停程序一段时间 delay(milliseconds) -> time, delay函数须要给一个int类型参数,表示延时多少毫秒ui

3、让方块来回移动

在上述代码里,目前的方块是永远往右边走的,咱们尝试增长这么个功能,让方块走到右边后,让方块改变方向,往左边走。写/看代码前必定先用本身的话把事情描述清楚,咱们用本身的话描述下要作的事情:code

  1. 开始后,方块一直在右走
  2. 走到右边边界后,方块一直在左走 咱们先看如何判断方块走到右边边界,整个屏幕的宽度应该是多少呢?前面的代码pygame.display.set_mode((400, 300))把屏幕的宽度设置为400。因此咱们能够看当x的坐标为400时,方块奇左边恰好跟屏幕右边重叠,咱们认为方块出界,咱们能够用x的坐标是否大于400来判断方块是否走出界。 接着咱们来解决方块向左走的功能。思考下方块向右走跟向左有什么区别?一个是x不断加5,一个是x减5。 咱们能够写成x = x + dx,当向右走时dx为5,当向左时,dx为-5。代码以下:
import pygame, sys

# 初始化
pygame.init()
# 设置屏幕的宽度,高度
SCREEN = pygame.display.set_mode((400, 300))
# 设置窗口的标题
pygame.display.set_caption('Hello World!')
x = 10
dx = 5
# 游戏主循环
while True: # main game loop
    for event in pygame.event.get():
        # 处理退出事件
        if event.type == pygame.QUIT:
            pygame.quit()
            sys.exit()
    # 将屏幕的背景填充成白色,了解下RGB三原色
    SCREEN.fill((255, 255, 255))
    # 调用 pygame.display.update() 方法更新整个屏幕的显示
    # 方块恰好走出左屏幕
    if x >= 400:
        dx = -5
    x = x + dx
    pygame.draw.rect(SCREEN, (255, 0, 0), (x, 30, 100, 50))
    pygame.display.update()
    pygame.time.delay(50)

4、 练习题

  1. 原来的方块是要彻底走出屏幕右边后才反弹,尝试改为方块右边碰到屏幕右边就反弹。
  2. 目前方块走到左边不会反弹,增长代码,使方块回到左边后,碰到屏幕左边边界反弹往右走。
  3. 把方块横向运动改为上下移动。
相关文章
相关标签/搜索