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

一、引言

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

二、让方块自行移动

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

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类型参数,表示延时多少毫秒

三、让方块来回移动

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

  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)

四、 练习题

  1. 原来的方块是要完全走出屏幕右边后才反弹,尝试改成方块右边碰到屏幕右边就反弹。

  2. 目前方块走到左边不会反弹,增加代码,使方块回到左边后,碰到屏幕左边边界反弹往右走。

  3. 把方块横向运动改成上下移动。

(0)

相关推荐

  • Python简单通俗易懂的贪吃蛇小游戏,儿时童年的味道!

    前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,如有问题请及时联系我们以作处理. 今天,给大家介绍一个简单易懂的贪吃蛇小游戏 代码 如下 import pygame,sys, ...

  • 用 Python 实现微信版飞机大战

    来源:Python 技术「ID: pythonall」 2013 年微信 5.0 版本内置了一款经典小游戏-灰黑色版飞机大战,被称为微信经典飞机大战,在这个版本中微信甚至将欢迎设置了成了这款小游戏,用 ...

  • 用 Python 实现带音乐的雪花飘落雪景图

    来源:Python 技术「ID: pythonall」 这几天很多地方陆续出现了降雪的天气,对于年内的第一场雪,大家的热情显然是比较高涨的,比如很多人顶着雪花到各种景点打卡,再比如一位东北大哥要直播卖 ...

  • Python游戏编程(Pygame)

    安装Pygame pip install pygame 1 C:\Users> pip install pygame Collecting pygame Downloading https:// ...

  • 用 Python 写个消消乐小游戏

    来源:Python 技术「ID: pythonall」 提到开心消消乐这款小游戏,相信大家都不陌生,其曾在 2015 年获得过玩家最喜爱的移动单机游戏奖,受欢迎程度可见一斑,本文我们使用 Python ...

  • 【青少年编程】我要背单词

    「青少年编程竞赛交流群」已成立(适合6至18周岁的青少年),公众号后台回复[Scratch]或[Python],即可进入.如果加入了之前的社群不需要重复加入. 微信后台回复"资料下载&quo ...

  • 飞机大战编程

    飞机大战没有封装的前的代码 import pygame from pygame.locals import * import random import time class HeroBullet() ...

  • 用pygame开发自己的游戏-3.用键盘控制方块的移动

    一.引言 前面文章中我们学会让方块随着时间运动,本文我们实现用键盘控制方块的移动. 二.pygame事件概念 事件在计算机术语常用来指系统中发生的重要事情,比如用户输入.定时器到期等.pygame提供 ...

  • 用pygame开发自己的游戏-1. 基础与入门

    一.前言 pygame是一个用Python写的SDL库.SDL是一个能访问计算机多媒体硬件组件(包括声卡,视频卡,输入组件等)的跨平台库.本系列主要通过pygame做小游戏来学习编程.对于学过基本语法 ...

  • 如何用C语言开发图形化游戏

    https://m.toutiao.com/is/eAdqUaF/ 当你C语言学到一段时间后,也许对命令行程序感到厌倦了,也许你想要做一款游戏,但是光目前的知识,无法用命令行达到你想要的效果,那么恭喜 ...

  • 什么样团队开发出来的游戏陪玩源码才称得上是优秀

    很多想要做游戏陪玩系统的个人和公司,往往在开发初期不了解定制游戏陪玩系统开发的步骤都有哪些,在游戏陪玩源码的选择上也比较盲目,直接去找开发公司的也不是不可以,但是在后期的了解沟通方面可能还需要耗费大量 ...

  • 2021年,开发一款游戏到底有多难?

    开篇语:北京的夏季是炎热的.5月30日下午,"Unity技术开放日"北京站正式开启,此次活动报名人数突破了800人,这远远超出了Unity官方的预期.为了符合防疫要求并让所有来现场 ...

  • 基于 Blazor 开发五子棋⚫⚪小游戏

    今天是农历五月初五,端午节.在此,祝大家端午安康! 端午节是中华民族古老的传统节日之一.端午也称端五,端阳.此外,端午节还有许多别称,如:午日节.重五节.五月节.浴兰节.女儿节.天中节.地腊.诗人节. ...

  • 开发儿童思维游戏,小游戏大智慧

    手表准不准 汤姆买了一块新手表.这块手表比他家里的闹钟每小时快30秒,而那只闹钟又比标准时间每小时慢30秒. 汤姆新买的这块手表到底准不准? 看起来闹钟每小时慢30秒,手表每小时快30秒,两相抵消,所 ...

  • 独立游戏推荐:那些业余独立游戏开发者,开发的小游戏是什么样的?

    沐沐带你发现好游戏! 游戏行业有一群这样的人, 他们不是游戏玩家. 不是游戏开发公司, 他们是介于这2者之间的独立开发者! 他们可能是大学生.可能是某些领域的翘楚, 阴差阳错之下, 他们掌握了开发游戏 ...

  • LayaMe:如何开发一款游戏?你也可以做个小游戏

    沐沐带你发现好游戏! 嗨! 旁咬们! 我又双叒叕来了, 最近不仅蟑螂多, 还因为下大雨多了大水蚁, 丑姐儿洗完碗不经意扭头一看, 偶买嘎! 窗户上一群大水蚁在爬来爬去, 密集恐惧症都要被逼出来了, 咦 ...