Python Turtle 小项目2

本次用turtle模块进行绘制


一、星空

效果:

 

代码讲解:

首先导入所需要的模块

import turtle as t
import random

然后设置turtle画笔的属性

1.把速度设置到最快

2.设置背景为深蓝色

3.设置画笔和填充颜色为黄色

t.speed(0)
t.bgcolor("darkblue") # 背景颜色
t.color("yellow") # 颜色

定义一个star函数绘制星星

def star(): # 星星函数
    t.penup() # 这里可以写成t.pu()
    t.goto(random.randint(-280,280),random.randint(-280,280))
    t.pendown() # 这里可以写成t.pd()
    t.begin_fill()
    length=random.randint(5,30)
    for i in range(5):
        t.forward(length) # 这里可以写成t.fd()
        t.left(180-360/10)
    t.end_fill()

上面函数代码的详解:

首先,抬起画笔

然后移动到画布的任意位置,参数自己填写

接下来落笔

开始填充颜色

循环5次,绘制5条边

每一次都旋转144°(144°*5=720°=360°*2)

最后结束填充颜色

最后,绘制星星(数量可以自己设定,本次讲解用随机数)

for i in range(random.randint(35,75)):
    star()

绘制完毕,隐藏画笔

t.hideturtle()
t.done()

 最终代码

import turtle as t
import random

def star(): # 星星函数
    t.penup() # 这里可以写成t.pu()
    t.goto(random.randint(-280,280),random.randint(-280,280))
    t.pendown() # 这里可以写成t.pd()
    t.begin_fill()
    length=random.randint(5,30)
    for i in range(5):
        t.forward(length) # 这里可以写成t.fd()
        t.left(180-360/10)
    t.end_fill()

t.speed(0)
t.bgcolor("darkblue") # 背景颜色
t.color("yellow") # 颜色
for i in range(random.randint(35,75)):
    star()
t.hideturtle()
t.done()

二、Emoji

效果:

 

代码讲解:

导入需要的模块

from turtle import *

定义一个类

class CrazyEmoji(Turtle):

初始化函数

def __init__(self,num,position,speed):
    super().__init__()
    self.x=position[0]
    self.y=position[1]
    self.pu()
    self.goto(self.x,self.y)
    self.num=num
    self.shapesize(10)
    self.shape(name[self.num])
    self.spd=speed

移动函数

def move(self):
    self.goto(self.xcor()+self.spd[0],self.ycor()+self.spd[1])
    self.checkbound()

检查是否碰到边缘

def checkbound(self):
    if self.xcor() > 300 or self.xcor() < -300:
        self.spd = -self.spd[0], self.spd[1]
    if self.ycor() > 300 or self.ycor() < -300:
        self.spd = self.spd[0], -self.spd[1]

创建窗口

screen=Screen()
screen.setup(900,900)

创建emoji图像

name=[]
path="emoji/"
move_speed=10
angle_list=[(-move_speed,-move_speed),(-move_speed,0),(-move_speed,move_speed),\
            (0,-move_speed),(0,0),(0,move_speed),\
            (move_speed,-move_speed),(move_speed,0),(move_speed,move_speed)]
position_list=[(-300,-300),(0,-300),(300,-300),\
               (-300,0),(0,0),(300,0),\
               (-300,300),(0,300),(300,300)]
emoji_list=[]
tracer(False)
for i in range(1,73):
    name.append(path+str(i)+".gif")
for i in name:
    screen.addshape(i)
for j in range(8):
    for i in range(9):
        emoji_list.append(CrazyEmoji(i*(j+1),position_list[i%len(position_list)],angle_list[j]))
tracer(True)
tracer(24)

最后移动emoji

while True:
    for emoji in range(len(emoji_list)):
        emoji_list[emoji].move()

最终代码

from turtle import *

class CrazyEmoji(Turtle):
    def __init__(self,num,position,speed):
        super().__init__()
        self.x=position[0]
        self.y=position[1]
        self.pu()
        self.goto(self.x,self.y)
        self.num=num
        self.shapesize(10)
        self.shape(name[self.num])
        self.spd=speed
    def move(self):
        self.goto(self.xcor()+self.spd[0],self.ycor()+self.spd[1])
        self.checkbound()
    def checkbound(self):
        if self.xcor() > 300 or self.xcor() < -300:
            self.spd = -self.spd[0], self.spd[1]
        if self.ycor() > 300 or self.ycor() < -300:
            self.spd = self.spd[0], -self.spd[1]


screen=Screen()
screen.setup(900,900)
name=[]
path="emoji/"
move_speed=10
angle_list=[(-move_speed,-move_speed),(-move_speed,0),(-move_speed,move_speed),\
            (0,-move_speed),(0,0),(0,move_speed),\
            (move_speed,-move_speed),(move_speed,0),(move_speed,move_speed)]
position_list=[(-300,-300),(0,-300),(300,-300),\
               (-300,0),(0,0),(300,0),\
               (-300,300),(0,300),(300,300)]
emoji_list=[]
tracer(False)
for i in range(1,73):
    name.append(path+str(i)+".gif")
for i in name:
    screen.addshape(i)
for j in range(8):
    for i in range(9):
        emoji_list.append(CrazyEmoji(i*(j+1),position_list[i%len(position_list)],angle_list[j]))
tracer(True)
tracer(24)
while True:
    for emoji in range(len(emoji_list)):
        emoji_list[emoji].move()

喜欢的话记得点赞关注哦!

  • 5
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值