Python大作业
1. 要求
- 使用Python语言,使用的库不限
- 如下图1的火车轨道
- 如下图2的火车(2节车厢)
- 小火车可以在轨道上动态的运行
- 小火车的大小可调、轨道的大小可调
2. 用到的第三方库和函数
-
实现这个小火车可以用turtle库、matplotlib库、Tkinter库等
-
但是在这里我选择使用的是Pygame库,仅调用极少量的库函数,其余为自己写的函数完成
- 主要也想挑战一下自己,我开始做的时候比较晚,打听了一下很多同学用turtle库做的,但没听到用Pygame库做出来的,于是那我就Pygame吧~
-
先介绍Pygame的最小框架代码如下:
import time
import pygame
from Common import Colors # 自己定义的Color类位于Common文件中(本文暂时未给出)
# ==================================================================================================
WINDOW_SIZE = (1500, 800) # 定义窗口的宽、高
FONT_SIZE = 30 # 设置字体大小
CARGE_SIZE = CarrigSize.middle # 确定车的大小,关系到点源的选取和车厢的绘制
TRACK_SIZE = TrackSize.large # 指定车轨道的大小
START_POINT = (150, 750) # 指定轨道的起点
TRAIN_SPEED = Speed.High_speed # 指定小火车的速度
# ==================================================================================================
# 初始化
pygame.init()
# 创建窗口--大小
MyWindow = pygame.display.set_mode(WINDOW_SIZE)
# 设置窗口标题
pygame.display.set_caption("懂王唐王的小火车")
# 设置窗口背景为白色
MyWindow.fill(Colors.white) # 颜色Color类为我自己封装的一个类吗,为了方便调用,当然你也可以选择使用RGB元组(255,255,255)
# 刷新窗口
pygame.display.flip()
# 循环保持程序的一直运行
# gameloop
g_bFlag = True
while g_bFlag:
# ======================动画帧的刷新=========================#
time.sleep(TRAIN_SPEED)
# 4.检测事件
for event in pygame.event.get():
if event.type == pygame.QUIT: #点击窗口的x即可退出程序,否则游戏将一直运行,并执行此循环
g_bFlag = False
用到的Pygame库中的相关绘图函数汇总余下
# ==============================显示图形(高亮的函数是在本作业中用到的函数)=======================================#
# 1.画直线:line(画在哪, 线的颜色, 线的起点, 线的终点, 线宽=1)
pygame.draw.line()
# 2.画折线:lines(画在哪, 线的颜色, 是否闭合, 点的列表, 线宽=1)
pygame.draw.lines()
# 3.画圆:circle(where, color, 圆心坐标, 半径, 线宽) 线宽 = 0 表示实心圆
pygame.draw.circle()
# 4.画矩形:rect(where, color, 矩形范围, 线宽 = 0)
pygame.draw.rect()
# 5.画椭圆本质是画矩形的内切椭圆:ellipse(where, color, 矩形范围, 线宽 = 0)
# 本作业中并未用到
pygame.draw.ellipse()
# 6.画弧线:arc(where, color, 矩形范围, 起始弧度(rad), 终止弧度(rad), 线宽 = 1)
pygame.draw.arc()
# ===========================开始界面的静态效果================================#
# ====图片====#(在本作业中也没有用到,这里仅作为学习记录)
# image1 = pygame.image.load('pict/猫咪2.jpg') # 1.加载图片
# MyWindow.blit(image1, (0, 0)) # 2.渲染图片
# 操作图片
# 1)获取大小
# w, h = image1.get_size()
# 2)旋转和缩放
# image2 = pygame.transform.scale(image1, MyWindow.get_size()) # 方式1:会发生形变
# image3 = pygame.transform.rotozoom(image1, 0, 2) # 方式2:不会形变
# MyWindow.blit(image3, (0, 0)) # 渲染
# 4.刷新 -第一次刷新用 pygame.display.flip()
# -第二次以后用 pygame.display.update()