CSDN话题挑战赛第2期
参赛话题:学习笔记
*学习之路,长路漫漫,写学习笔记的过程就是把知识讲给自己听的过程。这个过程中,我们去记录思考的过程,便于日后复习,梳理自己的思路。学习之乐,独乐乐,不如众乐乐,把知识讲给更多的人听,何乐而不为呢?
小学生python游戏编程6----碰边变颜色的小球
前言
主要设计
1、界面设计
游戏主界面以窗口形式给出,小球碰到边缘即随机变色,窗体中间显示颜色的英语单词,通过观察小球的颜色变化,窗体中间的颜色提示也在变化,引导学生观看一段时间,强化每个单词的英语意思与底边颜色框一致,在无意识中学习8个英语单词的书写及意思。
2、游戏的实现
通过定义小球的类来实现以上设计功能
class Qiu: # 定义小球类
x = None # 小球的x坐标
y = None # 小球的y坐标
vx = None # 小球x方向的速度
vy = None # 小球y方向的速度
radius = None # 小球的半径
color = None # 小球的颜色
# 使用构造函数传递参数对对象初始化
def __init__(self, x, y, vx, vy, radius, color):
self.x = x
self.y = y
self.vx = vx
self.vy = vy
self.radius = radius
self.color = color
def draw(self):
# 绘制一个填充圆,坐标(x,y),半径radius,颜色color
screen.draw.filled_circle((self.x, self.y), self.radius, self.color)
screen.draw.text("颜色:" + self.color, (WIDTH / 2 - 100, HEIGHT / 2), fontsize=30,
fontname='simhei', color='black')
screen.draw.filled_rect(Rect(WIDTH / 2 - 100, HEIGHT / 2 + 30, 200, 10), self.color)
def update(self): # 更新小球的位置、速度
self.x += self.vx # 利用x方向速度更新x坐标
self.y += self.vy # 利用y方向速度更新y坐标
应用知识点
1、python知识点
1.1 类的定义
Python从设计之初就已经是一门面向对象的语言,正因为如此,在Python中创建一个类和对象是很容易的。
类(Class): 用来描述具有相同的属性和方法的对象的集合。它定义了该集合中每个对象所共有的属性和方法。对象是类的实例。
方法:类中定义的函数。
类变量:类变量在整个实例化的对象中是公用的。类变量定义在类中且在函数体之外。类变量通常不作为实例变量使用。
类就像一个橡皮图章,而对象就是图章印出来的一个实例。类是创建相同类型对象的蓝图或模板,决定了能够得到什么样的对象。例如,如果今天我们创建了一个拥有x,y,vx,vy 属性和color 属性的 Qiu类,那么通过这个 Qiu 类创建的所有对象,都会有x 属性和 y 属性——这一类对象所拥有的属性不会多也不会少。
总之,类是一种 OOP 工具,能使程序员对所要研究的问题进行抽象。在 OOP 中,抽象是用编程对象来表示现实世界中的对象的行为。程序对象也不需要拥有现实世界中对象的所有细节。这使得编程逻辑变得相对简单。
class Qiu: # 定义小球类
…
1.2 类对象的调用
xiaoQiu = Qiu(WIDTH / 2, HEIGHT / 2, 3, 5, 30, ‘red’) # 定义Qiu对象
此方面的详细内容可以查python相关书本或网上资料,很多了。
1.3 列表的复习
定义列表及调用列表中的一项
#候选的8种颜色组成的列表
Colors = [‘red’, ‘orange’, ‘yellow’, ‘green’, ‘blue’, ‘pink’, ‘grey’, ‘purple’]
2、pygamezero知识点
2.1 画圆
绘制一个填充圆,坐标(x,y),半径radius,颜色color screen.draw.filled_circle(坐标(x,y),半径radius,颜色color )
screen.draw.circle((400, 300), 100, ‘white’)语句绘制了一个圆圈。其中screen表示屏幕,draw为绘制的英文单词,circle表示圆圈;后面的3个参数,(400, 300)表示圆的中心位置坐标,100表示圆的半径,'white’表示圆的颜色为白色。这里要是使用了filled_circle函数。filled是填充的意思,下划线_用来连接filled和circle两个英文单词,合起来就是填充圆的意思。
2.2 画距形
Rect(WIDTH / 2 - 100, HEIGHT / 2 + 30, 200, 10) 这句话的意思是,利用Rect函数定义一个距形
screen.draw.filled_rect(Rect(WIDTH / 2 - 100, HEIGHT / 2 + 30, 200, 10), self.color),给上面定义的距形填充颜色。 screen.draw.filled_rect两个参数,一个rect,一个颜色
2.3 小球的反弹
当小球碰到左右边界时,x方向速度反转
if self.x > WIDTH - self.radius or self.x < self.radius:
self.vx = -self.vx
# 当小球碰到上下边界时,y方向速度反转
if self.y > HEIGHT - self.radius or self.y < self.radius:
self.vy = -self.vy
2.4 小球的变色
# 当小球碰到上下边界时,y方向速度反转
if self.y > HEIGHT - self.radius or self.y < self.radius:
self.vy = -self.vy
self.color = Colors[random.randint(0, 7)]
3 可记的英语单词
重点记的:Colors = [‘red’, ‘orange’, ‘yellow’, ‘green’, ‘blue’, ‘pink’, ‘grey’, ‘purple’]
新增:filled填充
circle 圆
rect 距形
radius 半径
定义类时,没用英语,而是有意用了Qiu(球的拼音),变量或编程时不想用英语,也可以用汉语拼音,甚至汉字,不过不注张用汉字,拼音用用没事
功能录屏
变色的小球
代码实现
import pgzrun # 导入游戏库
from pgzero.rect import Rect
import random
from pgzero.screen import Screen
screen: Screen # 类型标注
WIDTH = 800 # 设置窗口的宽度
HEIGHT = 600 # 设置窗口的高度
TITLE = "猜猜几种颜色"
# 候选的8种颜色组成的列表
Colors = ['red', 'orange', 'yellow', 'green', 'blue', 'pink', 'grey', 'purple']
class Qiu: # 定义小球类
x = None # 小球的x坐标
y = None # 小球的y坐标
vx = None # 小球x方向的速度
vy = None # 小球y方向的速度
radius = None # 小球的半径
color = None # 小球的颜色
# 使用构造函数传递参数对对象初始化
def __init__(self, x, y, vx, vy, radius, color):
self.x = x
self.y = y
self.vx = vx
self.vy = vy
self.radius = radius
self.color = color
def draw(self):
# 绘制一个填充圆,坐标(x,y),半径radius,颜色color
screen.draw.filled_circle((self.x, self.y), self.radius, self.color)
screen.draw.text("颜色:" + self.color, (WIDTH / 2 - 100, HEIGHT / 2), fontsize=30,
fontname='simhei', color='black')
screen.draw.filled_rect(Rect(WIDTH / 2 - 100, HEIGHT / 2 + 30, 200, 10), self.color)
def update(self): # 更新小球的位置、速度
self.x += self.vx # 利用x方向速度更新x坐标
self.y += self.vy # 利用y方向速度更新y坐标
# 当小球碰到左右边界时,x方向速度反转
if self.x > WIDTH - self.radius or self.x < self.radius:
self.vx = -self.vx
# 当小球碰到上下边界时,y方向速度反转
if self.y > HEIGHT - self.radius or self.y < self.radius:
self.vy = -self.vy
self.color = Colors[random.randint(0, 7)]
xiaoQiu = Qiu(WIDTH / 2, HEIGHT / 2, 3, 5, 30, 'red') # 定义Qiu对象
def draw(): # 绘制模块,每帧重复执行
screen.fill('white') # 白色背景
xiaoQiu.draw() # 绘制小球
def update(): # 更新模块,每帧重复操作
xiaoQiu.update() # 更新小球的位置、速度
pgzrun.go() # 开始执行游戏
总结
通过此次的《变色的小球》游戏实现,让我通过定义类,使用类,开启了python编程的更深一点的探索,通过颜色列表的学习与使用,英语与游戏可以互动学习。
源码获取
可关注博主后,私聊博主免费获取
需要技术指导,育娃新思考,企业软件合作等更多服务请联系博主
今天是以此模板持续更新此育儿专栏的第 6 /50次。
可以关注我,点赞我、评论我、收藏我啦。