本文较长,适合收藏,慢慢研读分析。
===========
一、开篇说明:
1.推荐指数:★★★★★
2.衷心感谢:原作者:执念执战(王成程)
3.代码说明:在原作者的基础上进行代码的整合、删减、增加、润色、注释,分享出来,仅供学习。
4.仿抖音网红文字时钟,目前有app可以下载,网上也有html和css的免费代码下载,python的很少,这怎么能让python缺席呢?
==========================
二、python的pygame实现的效果图:
1.图:
2,非常漂亮。
★3.提前准备:★
3.1 python3以上,推荐python3.8
3.2 微软编辑器vscode
3.3 下载自己喜欢的字体,本文中hwfs=华文仿宋
3.4 二进制文件‘HZK16’,需要自己去下载。
请大家搜索原作者的博客(执念执战),也是对原作者的尊重,我故意留下一个小bug。
=============
三,代码及分析:
1.第1步:
#---第1步---导出模块---from math import *import pygamefrom pygame.locals import *import timeimport sysimport binascii #任意中文字符时使用到此库import math
2.第2步:
#---第2步---初始化定义---#字符倍数比例函数,修改次数据可以实现整体的放大和缩小,建议此数值在0.8-1.3 之间,看起来比较合适fontmultiple=1#屏幕的宽和高,圆心坐标是屏幕大小的一半SCREEN_X_MAX = int(1500*fontmultiple) SCREEN_Y_MAX = int(1500*fontmultiple) #游戏初始化pygame.init()#本人喜欢加RESIZABLE,屏幕大小screen = pygame.display.set_mode((SCREEN_X_MAX,SCREEN_Y_MAX),RESIZABLE)FOCAL_DISTANCE = 512 #透视模型
3.第3步:
#---第3步---颜色定义---BLACK=(0,0,0)WHITE=(255,255,255)RED=(255,0,0)GREEN=(0,255,0)BLUE=(0,0,255)ForeColor = RED #前景色和背景色BackColor = BLACK#中文字体,可以自己下载,hwfs=hwfsfont = pygame.font.Font('hwfs.ttf', 36)
4.第4步:原作者是放入一个py文件(Transform3D.py),用模块一样导出,我将他整合进去,删除不需要的部分。
#---第4步---3d相关定义---#定义画点函数---needdef Gui_Point(x,y,color): pygame.draw.line(screen,color,(int(x),int(y)),(int(x+1),int(y)),2)#定义坐标结构体类---needclass zuobiaostruct: def __init__(self): self.x=0 self.y=0 self.z=0#矩阵相乘函数---needdef MATRIX_multiply(MAT1,MAT2): newMAT=[[0.0 for i in range(4)] for n in range(4)] for a in range(4): for b in range(4): newMAT[a][b]=MAT1[a][0]*MAT2[0][b]+MAT1[a][1]*MAT2[1][b]+MAT1[a][2]*MAT2[2][b]+MAT1[a][3]*MAT2[3][b] return newMAT#矢量与矩阵相乘函数---needdef vector_matrix_MULTIPLY(Source,MAT): Result=zuobiaostruct() Result.x=Source.x*MAT[0][0]+Source.y*MAT[1][0]+Source.z*MAT[2][0]+MAT[3][0] Result.y=Source.x*MAT[0][1]+Source.y*MAT[1][1]+Source.z*MAT[2][1]+MAT[3][1] Result.z=Source.x*MAT[0][2]+Source.y*MAT[1][2]+Source.z*MAT[2][2]+MAT[3][2] return Result #构造单位矩阵函数def structure_3D(): MAT=[[0.0 for i in range(4)] for i in range(4)] MAT[0][0]=1.0 MAT[0][1]=0.0 MAT[0][2]=0.0 MAT[0][3]=0.0 #// 1 0 0 0 MAT[1][0]=0.0 MAT[1][1]=1.0 MAT[1][2]=0.0 MAT[1][3]=0.0 #// 0 1 0 0 MAT[2][0]=0.0 MAT[2][1]=0.0 MAT[2][2]=1.0 MAT[2][3]=0.0 #// 0 0 1 0 MAT[3][0]=0.0 MAT[3][1]=0.0 MAT[3][2]=0.0 MAT[3][3]=1.0 #// 0 0 0 1 return MAT #平移变换矩阵函数---needdef Translate3D(MAT,tx, ty, tz): tMAT=[[0.0 for i in range(4)] for i in range(4)] tMAT[0][0]=1 tMAT[0][1]=0 tMAT[0][2]=0 tMAT[0][3]=0#//1 0 0 tx tMAT[1][0]=0 tMAT[1][1]=1 tMAT[1][2]=0 tMAT[1][3]=0#//0 1 0 ty tMAT[2