【青少年编程】黄羽恒:平行空间

「青少年编程竞赛交流群」已成立(适合6至18周岁的青少年),公众号后台回复【Scratch】或【Python】,即可进入。如果加入了之前的社群不需要重复加入。

微信后台回复“资料下载”可获取以往学习的材料(视频、代码、文档)。

编程题

“平行空间”是来自「青少年编程竞赛交流群」中 「黄羽恒」 小朋友的作品。

什么是“平行空间”呢?

这里指的就是可以把二维空间压缩到一维空间,即把平面上的曲线压缩成一条直线。

程序运行后,用户可以在平面上通过鼠标绘制一条或多条曲线。

用户停止绘制后,程序自动把这些平面上的曲线压缩成一条直线。

1. 思路分析

鼠标状态有两种,一种是按下MOUSEBUTTONDOWN,一种是弹起MOUSEBUTTONUP

绘制曲线,就是把鼠标的坐标点存入列表,把前后坐标点通过短直线连接起来,不停的刷新重绘。

曲线压缩成直线,可以让这些坐标点的X坐标不变,把Y坐标逐渐减小直到平面的下方,这样就可以实现二维向一维的折叠。

2. 程序代码

import pygame
import sys
import time

pygame.init()
screen = pygame.display.set_mode([800, 600])
pygame.display.set_caption('平行空间')

clock = pygame.time.Clock()
is_mouse_down = False
mouse_path_full = []
current_mouse_path = []

WHITE = (255, 255, 255)
BLACK = (0, 0, 0)

last_draw_time = -1

while True:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            pygame.quit()
            sys.exit()
        if event.type == pygame.MOUSEBUTTONDOWN:
            is_mouse_down = True
        if event.type == pygame.MOUSEBUTTONUP:
            is_mouse_down = False
            tmp = current_mouse_path[:]
            mouse_path_full.append(tmp)
            current_mouse_path.clear()
            last_draw_time = time.time()

screen.fill(WHITE)

if is_mouse_down:
        pos = pygame.mouse.get_pos()
        current_mouse_path.append([pos[0], pos[1]])

if len(current_mouse_path) > 1:
        pygame.draw.lines(screen, BLACK, False, current_mouse_path, 2)
        
    if len(mouse_path_full) > 0:
        for x in mouse_path_full:
            pygame.draw.lines(screen, BLACK, False, x, 2)

if time.time() - last_draw_time > 6:
        for x in mouse_path_full:
            for y in x:
                if y[1] + 80 < 600:
                    y[1] += (time.time() - last_draw_time)

pygame.display.update()
    clock.tick(60)  # 帧速率

3. 结果展示


基础知识:

一级编程题:

二级编程题:

三级编程题:

小朋友投稿:

Scratch:

Python:

群内答疑:

Scratch:

Python:


(0)

相关推荐

  • 用 Python 动态模拟太阳系运转

    来源:Python 技术「ID: pythonall」 提到太阳系,大家可能会想到哥白尼和他的日心说,或是捍卫.发展日心说的斗士布鲁诺,他们像一缕光一样照亮了那个时代的夜空,对历史感兴趣的小伙伴可以深 ...

  • 解决 pyzero 创建游戏有中文报错的问题

    用mueditor 创建pygam zero 游戏,当代码中有中文或中文注释,就会报错, UnicodeDecodeError: 'gbk' codec can't decode byte 0xaa ...

  • (11条消息) Scala学习(一)

    2019年已过半,工作之余,忙里忙外的学习了一些大数据知识.最近学习了尚硅谷的推荐系统,大部分代码用的都是scala,现系统的学习一下,方便日后学习Spark. Scala是一门多范式的编程语言,一种 ...

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

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

  • 飞机大战编程

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

  • 不到 50 行 Python 代码,做个刮刮卡

    来源:Python 技术「ID: pythonall」 刮刮卡通常指卡上的一种覆盖数字和字母密码等的涂层,通常包括纸质和电子两种类型,刮刮卡在市场上有着比较广泛的应用,我们见到最多的应该是各类抽奖活动 ...

  • 每日一题 C++版(走迷宫)

    编程是很多偏计算机.人工智能领域必须掌握的一项技能,此编程能力在学习和工作中起着重要的作用.因此小白决定开辟一个新的板块"每日一题",通过每天一道编程题目来强化和锻炼自己的编程能力 ...

  • 【青少年编程】黄羽恒:加减乘除法小测试

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

  • 【青少年编程】黄羽恒:翻译小工具 -- 利用有道翻译

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

  • 【青少年编程】黄羽恒:天气预报

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

  • 【青少年编程】黄羽恒:Python

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

  • 【青少年编程】黄羽恒:漫天飞雪

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

  • 【江西】卢嘉欣《平行空间的秘密》指导老师:黄海龙

    平行空间的秘密 厚德外国语学校六年级 卢嘉欣 窗外的雨"滴答--滴答--",似乎没有要停止的意思,教室里如平日一样非常安静,可忽然一声大喊打破了这宁静."这世界一定有一个 ...

  • 【江西】黄锦恒《“交给我吧”读后感》指导老师:孙寅

    <交给我吧>读后感 文清外国语学校一年级 黄锦恒 今天,我读了一本绘本,名字是<交给我吧>.里面的主人公叫小绘,是一个在家里倍受宠爱的小公主.一天放学回家的路上,小绘听到两名男 ...

  • 【青少年编程】【Scratch】10 画笔模块

    10 画笔模块 有关于画笔模块,需要掌握以下两个方面的内容: 能够设置画笔的属性:颜色.粗细.亮度/饱和度/透明度 能够使用画笔绘制各种图案:抬笔.落笔.擦除 1. 使用者可以设置各种画笔属性. 设置 ...

  • 【青少年编程】小猫寻宝

    小猫寻宝 "小猫寻宝"是来自「青少年编程竞赛交流群」中 「马雷越」 小朋友的作品. 制作一款小游戏,使用上.下.左.右键控制角色小猫躲避吸血蝙蝠,到达钥匙位置获得胜利.按要求完成程 ...