一、素材准备
蓝色小球 红色小球
运行效果显示
二、准备工作
一、代码框架
import pgzrun
def draw():
pass
def update():
pass
pgzrun.go()
二、窗口的设置
WIDTH=400
HEIGHT=400
设置宽和高的大小,创建一个400x400的屏幕
三、设置背景颜色
screen.fill('yellow')
在def draw()函数内添加背景填充,填充的颜色为黄色。
三、代码书写
一、获取坐标
def on_mouse_down(pos):
lines.append(pos)
print(lines)
定义了一个on_mouse_down的pzero内置获取鼠标按下的函数,只需要输入这个函数,我们在窗口中点击屏幕时就能获取到pos的返回值。并且将它放入一个列表内,以供后续的使用。通过print打印查看坐标内容。
二、直线绘制
通过两点确定一条直线,所以我们需要获取到至少两个点的坐标数据。
直线的绘制方式
screen.draw.line(起始坐标,终点坐标,(R,G,B))
screen.draw.line(起始坐标,终点坐标,'颜色')
def draw():
screen.fill('yellow')
if len(lines)>=2:#确保列表长度大于等于2
screen.draw.line(lines[0],lines[1],'red')#拿取列表中的第一位数据和第二位数据
三、小球的生成与绘制
from random import randint#导入randint函数
lines=[]
dots=[]
N=10
def make_dot(n):
for i in range(n):
dot=Actor('dot')
dot.pos=randint(10,390),randint(10,390)
dots.append(dot)
make_dot(N)
def draw():
screen.fill('yellow')
for dot in dots:
dot.draw()
if len(lines)>=2:#确保列表长度大于等于2
screen.draw.line(lines[0],lines[1],'red')#拿取列表中的第一位数据和第二位数据
pass
创建一个make_dot函数,这个函数用于循环创建指定次数的小球。
四、为每个小球生成一个数字,根据小球生成排序来一次绘制数字。
#生成数字
def make_number():
for n,dot in enumerate(dots):#获取次数和内容
screen.draw.text(f'{n}',center=dot.pos,fontsize=20)#将次数当做内容输出
可以看到这里用到了screen.draw.text()函数,它用用于显示文本的
screen.draw.text(text,fontname=,fontsize=,center=,color)
fnotname需要文字文件,并建立一个名为fonts的文件夹,将文字文件放在里面。
enumerate函数可以返回该内容的此时对应的索引值和数值。
def on_mouse_down(pos):
global next_dot
if dots[next_dot].collidepoint(pos):#从第一个小球开始判定,所以需要所以列表中的第一个值
if next_dot<len(dots):#来一个值记录此时是否还在范围内
lines.append(dots[next_dot].pos)#将此时的小球坐标存入坐标列表中
next_dot+=1#获取下一个值
print(lines)
else:
lines.clear()#如果点击的值不是按照顺序来则会清空坐标列表
next_dot=0#将索引变回0
通过鼠标点击获取坐标点。
四、完整代码
import pgzrun
from random import randint
WIDTH=400
HEIGHT=400
dots=[]
lines=[]
next_dot=0
N=10
def make_dot(n):
for i in range(n):
dot=Actor('dot')
dot.pos=randint(10,390),randint(10,390)
dots.append(dot)
make_dot(N)
def make_number():
for n,dot in enumerate(dots):
screen.draw.text(f'{n}',center=dot.pos,fontsize=20)
def draw():
screen.fill('yellow')
for dot in dots:
dot.draw()
for i in range(1,len(lines)):
screen.draw.line(lines[i-1],lines[i],'red')
make_number()
def on_mouse_down(pos):
global next_dot
if dots[next_dot].collidepoint(pos):#从第一个小球开始判定,所以需要所以列表中的第一个值
if next_dot<len(dots):#来一个值记录此时是否还在范围内
lines.append(dots[next_dot].pos)#将此时的小球坐标存入坐标列表中
next_dot+=1#获取下一个值
print(lines)
else:
lines.clear()#如果点击的值不是按照顺序来则会清空坐标列表
next_dot=0#将索引变回0
pass
def upate():
pass
pgzrun.go()