小学生python游戏编程6----碰边变颜色的小球

CSDN话题挑战赛第2期
参赛话题:学习笔记

*学习之路,长路漫漫,写学习笔记的过程就是把知识讲给自己听的过程。这个过程中,我们去记录思考的过程,便于日后复习,梳理自己的思路。学习之乐,独乐乐,不如众乐乐,把知识讲给更多的人听,何乐而不为呢?

前言

主要设计

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次。
可以关注我,点赞我、评论我、收藏我啦。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

信息化未来

你的鼓励将是我创作的最大动力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值