1. 前言
turtle
(小海龟) 是 Python 内置的一个绘图模块,其实它不仅可以用来绘图,还可以制作简单的小游戏,甚至可以当成简易的 GUI 模块,编写简单的 GUI 程序。
本文使用 turtle
模块编写一个简单的小游戏,通过此程序的编写过程聊一聊对 turtle
模块的感悟。
编写游戏,如果要做专业的、趣味性高的,还是请找 pygame
,本文用 turtle
编写游戏的目的是为了深度理解 turtle
的功能。
turtle
模块的使用相对而言较简单,对于基础方法不做讲解。只聊 turtle
模块中稍难或大家忽视的地方。
2. 需求描述
程序运行时,画布上会出现**一个红色的小球
和很多绿色、蓝色的小球
**。
刚开始红色的小球会朝某一个方向移动,使用者可以通过按下上、下、左、右方向键控制红色小球的运动方向。
绿色、蓝色小球以初始的默认方向在画布上移动。
当红色的小球碰到绿色小球时,红色小球球体会变大,当红色小球碰到蓝色小球时,红色球体会变小。
当红色小球球体缩小到某一个阈值时,游戏结束。
3. 制作流程
3.1 初始化变量
本程序需要使用到 turtle
、random
、math
模块,使用之前,先导入。
import turtle
import random
import math
'''
初始化游戏界面大小
'''
# 游戏区域的宽度
game_wid = 600
# 游戏区域的高度
game_hei = 400
# 砖块的大小,以及每一个小球初始大小
cell = 20
# 红球初始大小
red_size = cell
# 红色小球
red_ball = None
# 存储绿色小球的列表
green_balls = []
# 存储蓝色小球的列表
blue_balls = []
# 红色小球的方向 当前方向 0 向右,90 向上 180 向左 -90 向下
dir = 0
上述代码说明:
红色小球只有一个,由变量 red_ball
保存,红色小球在运动过程中可以改大小,red_size
保存其大小。
绿色和蓝色小球会有很多,这里使用 green_balls
和 blue_balls
2 个列表存储。
3.2 通用函数
随机位置计算函数: 为小球们随机生成刚开始出现的位置。
'''
随机位置计算函数
'''
def rand_pos():
# 水平有 30 个单元格,垂直有 20 个单元格
x = random.randint(-14, 14)
y = random.randint(-9, 9)
return x * cell, y * cell
绘制指定填充颜色的小正方形: 在游戏里有一个虚拟区域,四周使用很多小正方形围起来。
'''
绘制一个指定填充颜色的正方形
填充颜色可以不指定
'''
def draw_square(color):
if color is not None:
# 的颜色就填充
turtle.fillcolor(color)
turtle.begin_fill()
for i in range(4):
turtle.fd(cell)
turtle.left(90)
if color is not None:
turtle.end_fill()
自定义画笔形状:
使用 turtle
制作游戏的底层思想:
当我们导入 turtle
模块时,意味着我们有了一支可以在画布上画画的画笔,画笔的默认形状是一个小海龟。
本文称这支默认画笔叫主画笔,可以使用 turtle
模块中的 turtle.Turtle()
类创建更多画笔 ,并且可以使用 ``turtle模块提供的
turtle.register_shape(name, shape)` 方法为每一支画笔定制画笔形状。
如上所述,是使用 turtle
设计游戏的关键。
强调一下:
*通过主画笔创建更多的