Mind+Python turtle 课程——10 扔骰子小游戏
本帖最后由 木子呢 于 2021-11-9 13:53 编辑第十课 扔骰子游戏
课程目录:
[*]Mind+Python turtle 课程——01 海龟动起来
[*]Mind+Python turtle 课程——02 海龟画正方形
[*]Mind+Python turtle 课程——02 海龟画正方形
[*]Mind+Python turtle 课程——03 四色炫酷造型
[*]Mind+Python turtle 课程——04 智能绘制的五角星
[*]Mind+Python turtle 课程——05 模拟3D星空
[*]Mind+Python turtle 课程——06 小海龟走迷宫
[*]Mind+Python turtle 课程——07 小海龟抓鱼
[*]Mind+Python turtle 课程——08 弹球小游戏
[*]Mind+Python turtle 课程——09 弹球小游戏
功能介绍
经过前面课程的学习,我相信同学们已经学到了很多python turtle的知识,这节课程为最后一节turtle类型的课程了,相对来说会较难,制作一个扔骰子游戏。首先我们将先复习之前的内容,初始化屏幕大小和玩者的信息,其次实现玩者扔骰子的功能,之后实现玩者和电脑一起扔骰子的功能,最后实现骰子比大小的功能完成扔骰子游戏的设计。课程会分为四个任务的形式进行,下表为课程任务及涉及到的知识点。
实现功能知识点
任务一:游戏初始化设置复习turtle库函数、全局变量的使用、函数的定义及函数的调用
任务二:实现玩者扔骰子复习随机函数、学习自定义函数(带参数)及元组、eval()函数
任务三:实现玩者和电脑一起扔骰子复习随机函数、学习自定义函数(带参数)的及元组、eval()函数
任务四:完成骰子数的比大小功能复习逻辑判断语句的使用
项目实践
任务一:游戏初始化设置
1、任务分析经过前面的游戏功能的设计,对应不同的游戏功能大家都有所了解了。这节课我们将从游戏的初始化界面开始设计,首先我们将设置一个游戏界面,并设置好相应的标题,之后设置玩者信息输入框。当完成输出信息后弹出文字提示,表示玩者正在掷骰子。
2、编写程序
import turtle as t#导入turtle库并赋值为timport time#导入time库def screenint():#初始化屏幕设置 global name t.title("骰子游戏!")#标题 t.setup(width=570, height=350, startx=400, starty=300)#设置游戏窗口大小 t.screensize(500, 300)#设置玩者信息输入框窗口大小 name = t.textinput('完善信息', '输入姓名:')#设置玩者信息提示 t.up()#抬笔 t.goto(-100, 30)#去到指定坐标 t.write(name + "正在掷出骰子……", align='left', font=('微软雅黑', 14, 'normal'))#在游戏窗口写下相关内容 time.sleep(2)#设置延时2s t.clear() #清空画布 screenint()#调用这个函数
3、运行效果运行程序会弹出两个框,一个是“骰子游戏”游戏框,另一个是“完善信息”对话框并提示输入姓名,当输入完成后,点击“ok”键即可看到“输入姓名+正在扔出骰子”。
任务二:实现玩者掷骰子
1、任务分析完成了任务一以后,我们就需要开始考虑如何能实现掷骰子的功能。首先我们需要运用turtle库的知识画出一个正方形边框也就是骰子的大小边框,之后需要在边框内绘制出点数,最后通过变量user_count去获得随机掷出的骰子数。我们分别用函数去存储这些功能,之后调用就能实现掷骰子的功能了。
2、编写程序
import turtle as timport timeimport randomdef screenint():#初始化屏幕设置 global name t.title("骰子游戏!")#标题 t.setup(width=570, height=350, startx=400, starty=300)#设置游戏窗口大小 t.screensize(500, 300)#设置玩者信息输入框窗口大小 name = t.textinput('完善信息', '输入姓名:')#设置玩者信息提示 t.up()#抬笔 t.goto(-100, 30)#去到指定坐标 t.write(name + "正在掷出骰子……", align='left', font=('微软雅黑', 14, 'normal'))#在游戏窗口写下相关内容 time.sleep(2)#设置延时2s t.clear() #清空画布def num(os):#设置每个点子对应的坐标数 global one, two, three, four, five, six#定义全局变量 one = (1, (50 + os, -50))#设置点数1的坐标 two = (2, (25 + os, -50), (75 + os, -50))#设置点数2时两个点的坐标 three = (3, (50 + os, -25), (25 + os, -75), (75 + os, -75))#设置点数3时三个点的的坐标 four = (4, (25 + os, -25), (75 + os, -25), (25 + os, -75), (75 + os, -75))#设置点数4时四个点的的坐标 five = (5, (25 + os, -25), (75 + os, -25), (25 + os, -75), (75 + os, -75), (50 + os, -50))#设置点数5时五个点的的坐标 six = (6, (25 + os, -25), (75 + os, -25), (25 + os, -75), (75 + os, -75), (25 + os, -50), (75 + os, -50))#设置点数6时六个点的的坐标def user_int():#玩者掷骰子数 global user_count#设置全局变量,用来存储获得玩者的骰子数 user_count = random.choice(('one', 'two', 'three', 'four', 'five', 'six'))#随机获得骰子数def draw_dot(n):#绘制骰子点子 for d in range(n):#不同点子,执行不同的循环次数 x = n#获取x的坐标值 y = n#获取y的坐标值 t.goto(x, y)#移动到指定坐标 t.dot(25, 'red')#绘制一个直径为25,颜色为红色的圆 t.up()#提笔def frame(dot, os):#绘制骰子边框 t.color('black')#设置颜色为黑色 t.pensize(5)#设置尺寸为5 t.up()#提笔 t.goto(0 + os, 0)#移动到指定坐标 t.down()#落笔 t.speed(10)#设置画笔速度为10 for i in range(4):#绘制正方形边框 t.forward(100)#向前移动100像素 t.right(90)#右转90度 t.up()#提笔 draw_dot(dot)#调用绘制骰子点子函数 time.sleep(1)#延时1sscreenint()#调用屏幕初始化函数user_int()#调用玩者掷骰子数num(-150)#设置每个点子对应的坐标数frame(eval(user_count), -150)#绘制骰子边框和点子
3、运行效果运行程序,首先屏幕显示“ 正在扔出骰子”,之后画出正方形边框,最后画出红色圆点。
4、代码释义
4.1代码中自定义的num(os)函数的使用
def num(os):#设置每个点子对应的坐标数 global one, two, three, four, five, six#定义全局变量 one = (1, (50 + os, -50))#设置点数1的坐标 two = (2, (25 + os, -50), (75 + os, -50))#设置点数2时两个点的坐标 three = (3, (50 + os, -25), (25 + os, -75), (75 + os, -75))#设置点数3时三个点的的坐标 four = (4, (25 + os, -25), (75 + os, -25), (25 + os, -75), (75 + os, -75))#设置点数4时四个点的的坐标 five = (5, (25 + os, -25), (75 + os, -25), (25 + os, -75), (75 + os, -75), (50 + os, -50))#设置点数5时五个点的的坐标 six = (6, (25 + os, -25), (75 + os, -25), (25 + os, -75), (75 + os, -75), (25 + os, -50), (75 + os, -50))#设置点数6时六个点的的坐标
4.1.1代码解释分别定义one, two, three, four, five, six六个全局变量,使用元组对每个点子对应的数字和坐标进行存储,其中os为函数的形式参数。
4.1.2带参数的函数函数我们已经非常了熟悉了,而带参数的函数的作用是传递数据给函数使用,函数利用接收的数据进行具体的操作处理,即带入具体的参数进行计算。函数参数在定义函数时放在函数名称后面的一对小括号中,如代码中的def num(os)。
4.1.3元组代码中“one = (1, (50 + os, -50))”这样的使用方式都为元组,用这个方式可以存储点子数和对应的坐标点。元组是python中的另一个重要的序列结构,与列表类似,也是由一系列按特定顺序排列的元素组成。但是它是不可变序列。因此,元组也可以称为不可变的列表。在形式上,元组的所有元素都是放在一大对小括号“()”中,两个相邻元素间使用“,”分隔。在内容上,可以将正数、实数、字符串、列表、元组等任何类型的内容放入到元组中,并且同一个元组中,元素的类型是可以不同,因为它们之间没有任何关系。通常情况下,元组用于保存程序中不可修改的内容。
4.2代码中自定义的user_int()函数的使用
def user_int():#玩者掷骰子数 global user_count#设置全局变量,用来存储获得玩者的骰子数 user_count = random.choice(('one', 'two', 'three', 'four', 'five', 'six'))#随机获得骰子数
4.2.1代码解释定义全局变量user_count,用来存储随机获得的骰子数。
4.3代码中自定义的draw_dot(n)函数的使用
def draw_dot(n):#绘制骰子点子 for d in range(n):#不同点子,执行不同的循环次数 x = n#获取x的坐标值 y = n#获取y的坐标值 t.goto(x, y)#移动到指定坐标 t.dot(25, 'red')#绘制一个直径为25,颜色为红色的圆 t.up()#提笔
4.3.1代码解释通过随机获取到的骰子数,进行绘制点子。这里假如获取到了随机数“one”,带入函数循环语句中可得:“for d in range(one)”;而通过元组“one = (1, (50 + os, -50))”中我们知道,“one”为第一个元素,也就是1。因此此时代码为:”for d in range(1)“;这样我么对这个循环语句就很熟悉了。也就是循环执行一次,并且从d=0开始。把d=0带入循环体中即可获得:x=one;也就是x坐标为”50+os“(这里需要注意,第一个”[]“为获取one这个的元组中的元素,而第二个”[]“为获取坐标元组中的x坐标元素,这里把它们拆开看便于理解)。同理,y坐标为y=one,通过检索最终坐标为”-50“。当随机到其它的点数时也是这样的过程。当获取得到x和y坐标时,让画笔移动到相应的位置,进行绘制即可。
4.3.2访问元组中的元素在python中,如果想将元组的内容输出也比较间,可以直接用print()函数。这里我们编写一个测试程序
import turtle as tglobal one,twoone = (1, (-100, -50))#设置点数1的坐标two = (2, (-125, -50), (-75, -50))#设置点数2时两个点的坐标three = (3, (-100, -25), (-125, -75), (-75, -75))#设置点数3时三个点的的坐标
例如,要想打印上面元组中的one元组,则可以在代码最后加以下代码
print(one)
执行结果如下:
从上面的执行结果中可以看出,在输出元组时,是包括左右两侧的小括号的。如果不想输出全部元素,也可以通过元组的索引获得指定的元素。例如,要获取元组one中索引为0的元素,可以程序后面加上以下代码。
print(one)
执行结果如下
而当我们需要获得x的坐标时,可以在程序后面加入以下代码(这里需要注意,第一个”[]“为获取one这个的元组中的元素,而第二个”[]“为获取坐标元组中的x坐标元素,这里把它们拆开看便于理解)。
print(one)
执行结果如下
4.4代码中自定义的frame(dot, os)函数的使用
def frame(dot, os):#绘制骰子边框 t.color('black')#设置颜色为黑色 t.pensize(5)#设置尺寸为5 t.up()#提笔 t.goto(0 + os, 0)#移动到指定坐标 t.down()#落笔 t.speed(10)#设置画笔速度为10 for i in range(4):#绘制正方形边框 t.forward(100)#向前移动100像素 t.right(90)#右转90度 t.up()#提笔 draw_dot(dot)#调用绘制骰子点子函数 time.sleep(1)#延时1s
4.4.1代码解释移动画笔到指定位置,之后绘制骰子边框大小,最后调用draw_dot(dot)函数绘制骰子的点数。
4.5代码函数的调用
screenint()#调用屏幕初始化函数user_int()#调用玩者掷骰子数num(-150)#设置每个点子对应的坐标数frame(eval(user_count), -150)#绘制骰子边框和点子
4.5.1eval(user_count)函数eval是Python的一个内置函数,这个函数的作用是,返回传入字符串的表达式的结果。即变量赋值时,等号右边的表示是写成字符串的格式,返回值就是这个表达式的结果。如程序中,我们只需计算出表达示user_count的结果进行输出即可。如下面例子print(eval('1+2'))输出结果:3
任务三:实现玩者和电脑一起掷骰子
1、任务分析经过任务二的功能实现,我们完成了玩者掷骰子的功能。那么现在我们要实现玩者和电脑一起掷骰子的功能,怎么实现呢?其实原理和玩者掷骰子一样,这里我们需要先建立一个电脑掷骰子的函数,之后调用和玩者掷骰子一样的函数即可实现功能。
2、编写程序
import turtle as t#导入turtle库并赋值为timport time#导入time库import random#导入随机函数import sys#导入sys库def screenint():#初始化屏幕设置 global name t.title("骰子游戏!")#标题 t.setup(width=570, height=350, startx=400, starty=300)#设置游戏窗口大小 t.screensize(500, 300)#设置玩者信息输入框窗口大小 name = t.textinput('完善信息', '输入姓名:')#设置玩者信息提示 t.up()#抬笔 t.goto(-100, 30)#去到指定坐标 t.write(name + "正在掷出骰子……", align='left', font=('微软雅黑', 14, 'normal'))#在游戏窗口写下相关内容 time.sleep(2)#设置延时2s t.clear() #清空画布def num(os):#设置每个点子对应的坐标数 global one, two, three, four, five, six#定义全局变量 one = (1, (50 + os, -50))#设置点数1的坐标 two = (2, (25 + os, -50), (75 + os, -50))#设置点数2时两个点的坐标 three = (3, (50 + os, -25), (25 + os, -75), (75 + os, -75))#设置点数3时三个点的的坐标 four = (4, (25 + os, -25), (75 + os, -25), (25 + os, -75), (75 + os, -75))#设置点数4时四个点的的坐标 five = (5, (25 + os, -25), (75 + os, -25), (25 + os, -75), (75 + os, -75), (50 + os, -50))#设置点数5时五个点的的坐标 six = (6, (25 + os, -25), (75 + os, -25), (25 + os, -75), (75 + os, -75), (25 + os, -50), (75 + os, -50))#设置点数6时六个点的的坐标def user_int():#玩者掷骰子数 global user_count#设置全局变量,用来存储获得玩者的骰子数 user_count = random.choice(('one', 'two', 'three', 'four', 'five', 'six'))#随机获得骰子数def ai_int():#电脑掷骰子数 globalai_count#设置全局变量,用来存储获得电脑的骰子数 ai_count = random.choice(('one', 'two', 'three', 'four', 'five', 'six'))#随机获得骰子数 t.up()#抬笔 t.goto(100, 30)#移动到指定坐标点 t.write("电脑正在扔出骰子……", align='right', font=('微软雅黑', 14, 'normal'))#在游戏窗口写下相关内容 time.sleep(2)#设置延时2s t.undo()#撤销上一个动作def draw_dot(n):#绘制骰子点子 for d in range(n):#不同点子,执行不同的循环次数 x = n#获取x的坐标值 y = n#获取y的坐标值 t.goto(x, y)#移动到指定坐标 t.dot(25, 'red')#绘制一个直径为25,颜色为红色的圆 t.up()#提笔def frame(dot, os):#绘制骰子边框 t.color('black')#设置颜色为黑色 t.pensize(5)#设置尺寸为5 t.up()#提笔 t.goto(0 + os, 0)#移动到指定坐标 t.down()#落笔 t.speed(10)#设置画笔速度为10 for i in range(4):#绘制正方形边框 t.forward(100)#向前移动100像素 t.right(90)#右转90度 t.up()#提笔 draw_dot(dot)#调用绘制骰子点子函数 time.sleep(1)#延时1sscreenint()#调用屏幕初始化函数user_int()#调用玩者掷骰子数num(-150)#设置每个点子对应的坐标数frame(eval(user_count), -150)#绘制骰子边框和点子ai_int()#调用电脑掷骰子数num(100)#设置每个点子对应的坐标数frame(eval(ai_count),100)#绘制骰子边框和点子
3、运行效果当运行程序时,屏幕会显示玩者掷骰子,之后电脑掷骰子。
4、代码释义
4.1代码中自定义的ai_int()函数的使用
def ai_int():#电脑掷骰子数 globalai_count#设置全局变量,用来存储获得电脑的骰子数 ai_count = random.choice(('one', 'two', 'three', 'four', 'five', 'six'))#随机获得骰子数 t.up()#抬笔 t.goto(100, 30)#移动到指定坐标点 t.write("电脑正在扔出骰子……", align='right', font=('微软雅黑', 14, 'normal'))#在游戏窗口写下相关内容 time.sleep(2)#设置延时2s t.undo()#撤销上一个动作
4.1.1代码解释定义全局变量ai_count,用来存储随机获得电脑的掷骰子数,并移动到指定坐标,写下”电脑正在扔出骰子......“。
任务四:完成骰子数的比大小功能
1、任务分析完成了任务三的功能后,我们可以通过肉眼观察玩者和电脑分别掷到的骰子到点数,接下来我么需要用程序去完成两者大小的比较,当玩者的点数大时显示对应的玩者名或者,当玩者的点数小时显示电脑赢了。
2、编写程序
import turtle as t#导入turtle库并赋值为timport time#导入time库import random#导入随机函数import sys#导入sys库 def screenint():#初始化屏幕设置 global name t.title("骰子游戏!")#标题 t.setup(width=570, height=350, startx=400, starty=300)#设置游戏窗口大小 t.screensize(500, 300)#设置玩者信息输入框窗口大小 name = t.textinput('完善信息', '输入姓名:')#设置玩者信息提示 t.up()#抬笔 t.goto(-100, 30)#去到指定坐标 t.write(name + "正在掷出骰子……", align='left', font=('微软雅黑', 14, 'normal'))#在游戏窗口写下相关内容 time.sleep(2)#设置延时2s t.clear() #清空画布 def num(os):#设置每个点子对应的坐标数 global one, two, three, four, five, six#定义全局变量 one = (1, (50 + os, -50))#设置点数1的坐标 two = (2, (25 + os, -50), (75 + os, -50))#设置点数2时两个点的坐标 three = (3, (50 + os, -25), (25 + os, -75), (75 + os, -75))#设置点数3时三个点的的坐标 four = (4, (25 + os, -25), (75 + os, -25), (25 + os, -75), (75 + os, -75))#设置点数4时四个点的的坐标 five = (5, (25 + os, -25), (75 + os, -25), (25 + os, -75), (75 + os, -75), (50 + os, -50))#设置点数5时五个点的的坐标 six = (6, (25 + os, -25), (75 + os, -25), (25 + os, -75), (75 + os, -75), (25 + os, -50), (75 + os, -50))#设置点数6时六个点的的坐标 def user_int():#玩者掷骰子数 global user_count#设置全局变量,用来存储获得玩者的骰子数 user_count = random.choice(('one', 'two', 'three', 'four', 'five', 'six'))#随机获得骰子数 def ai_int():#电脑掷骰子数 globalai_count#设置全局变量,用来存储获得电脑的骰子数 ai_count = random.choice(('one', 'two', 'three', 'four', 'five', 'six'))#随机获得骰子数 t.up()#抬笔 t.goto(100, 30)#移动到指定坐标点 t.write("电脑正在扔出骰子……", align='right', font=('微软雅黑', 14, 'normal'))#在游戏窗口写下相关内容 time.sleep(2)#设置延时2s t.undo()#撤销上一个动作def pk():#设置比大小功能 u_count = int(eval(user_count))#将获取到的玩者掷骰子点数转换成整形 a_count = int(eval(ai_count))#将获取到的电脑掷骰子点数转换成整形 if u_count == a_count:#点数如果相等 t.write('打成平局!', align='right', font=('微软雅黑', 30, 'normal'))#在画布写下相应的内容 elif u_count > a_count:#如果玩者点数大 t.write('恭喜' + name + '胜利!', align='right', font=('微软雅黑', 30, 'normal'))#在画布写下相应的内容 else:#否则玩者点数小 t.write('好可惜!电脑赢了!', align='right', font=('微软雅黑', 30, 'normal'))#在画布写下相应的内容 time.sleep(2)#延时2s t.bye()#关闭海龟绘图窗口 def draw_dot(n):#绘制骰子点子 for d in range(n):#不同点子,执行不同的循环次数 x = n#获取x的坐标值 y = n#获取y的坐标值 t.goto(x, y)#移动到指定坐标 t.dot(25, 'red')#绘制一个直径为25,颜色为红色的圆 t.up()#提笔 def frame(dot, os):#绘制骰子边框 t.color('black')#设置颜色为黑色 t.pensize(5)#设置尺寸为5 t.up()#提笔 t.goto(0 + os, 0)#移动到指定坐标 t.down()#落笔 t.speed(10)#设置画笔速度为10 for i in range(4):#绘制正方形边框 t.forward(100)#向前移动100像素 t.right(90)#右转90度 t.up()#提笔 draw_dot(dot)#调用绘制骰子点子函数 time.sleep(1)#延时1s screenint()#调用屏幕初始化函数user_int()#调用玩者掷骰子数num(-150)#设置每个点子对应的坐标数frame(eval(user_count), -150)#绘制骰子边框和点子ai_int()#调用电脑掷骰子数num(100)#设置每个点子对应的坐标数frame(eval(ai_count),100)#绘制骰子边框和点子pk()#调用比大小函数
3、运行效果运行程序,当玩者掷的骰子大于电脑时,屏幕显示对应玩者的名称获胜。当玩者掷的骰子等于电脑时,屏幕显示打成平局。当玩者掷的骰子小于电脑时,屏幕显示“好可惜!电脑赢了!”。
4、代码释义
4.1代码中自定义的pk()函数的使用
def pk():#设置比大小功能 u_count = int(eval(user_count))#将获取到的玩者掷骰子点数转换成整形 a_count = int(eval(ai_count))#将获取到的电脑掷骰子点数转换成整形 if u_count == a_count:#点数如果相等 t.write('打成平局!', align='right', font=('微软雅黑', 30, 'normal'))#在画布写下相应的内容 elif u_count > a_count:#如果玩者点数大 t.write('恭喜' + name + '胜利!', align='right', font=('微软雅黑', 30, 'normal'))#在画布写下相应的内容 else:#否则玩者点数小 t.write('好可惜!电脑赢了!', align='right', font=('微软雅黑', 30, 'normal'))#在画布写下相应的内容 time.sleep(2)#延时2s t.bye()#关闭海龟绘图窗口
4.1.1代码解释通过获取玩者掷的骰子数和电脑掷的骰子数进行比较,当点数相等时,在画布上输出”打成平局“;当玩者点数大时,在画布上输出”恭喜+玩者名字+胜利“;当玩者点数小时,在画布上输出”可惜了!电脑赢了!“。延时2s后关闭海龟绘图窗口。
项目小结通过前面课程及这节课的学习,我们已经不知不觉当中学习了很多python的知识和内容。在这节课我们不仅复习了turtle库函数、全局变量的使用、函数的定义、函数的调用及逻辑运算符的使用,而且学会了自定义函数(带参数)及元组、eval()函数的使用。利用这些知识制作了好玩的掷骰子游戏,想一想我们还能怎样丰富我们的游戏呢?
项目扩展尝试利用前面所学的内容,当玩者胜利时,增加彩蛋效果功能。
参考程序
import turtle as t#导入turtle库并赋值为timport time#导入time库import random#导入随机函数import sys#导入sys库 def screenint():#初始化屏幕设置 global name t.title("骰子游戏!")#标题 t.setup(width=570, height=350, startx=400, starty=300)#设置游戏窗口大小 t.screensize(500, 300)#设置玩者信息输入框窗口大小 name = t.textinput('完善信息', '输入姓名:')#设置玩者信息提示 t.up()#抬笔 t.goto(-100, 30)#去到指定坐标 t.write(name + "正在掷扔出骰子……", align='left', font=('微软雅黑', 14, 'normal'))#在游戏窗口写下相关内容 time.sleep(2)#设置延时2s t.clear() #清空画布 def num(os):#设置每个点子对应的坐标数 global one, two, three, four, five, six#定义全局变量 one = (1, (50 + os, -50))#设置点数1的坐标 two = (2, (25 + os, -50), (75 + os, -50))#设置点数2时两个点的坐标 three = (3, (50 + os, -25), (25 + os, -75), (75 + os, -75))#设置点数3时三个点的的坐标 four = (4, (25 + os, -25), (75 + os, -25), (25 + os, -75), (75 + os, -75))#设置点数4时四个点的的坐标 five = (5, (25 + os, -25), (75 + os, -25), (25 + os, -75), (75 + os, -75), (50 + os, -50))#设置点数5时五个点的的坐标 six = (6, (25 + os, -25), (75 + os, -25), (25 + os, -75), (75 + os, -75), (25 + os, -50), (75 + os, -50))#设置点数6时六个点的的坐标 def user_int():#玩者掷骰子数 global user_count#设置全局变量,用来存储获得玩者的骰子数 user_count = random.choice(('one', 'two', 'three', 'four', 'five', 'six'))#随机获得骰子数 def ai_int():#电脑掷骰子数 globalai_count#设置全局变量,用来存储获得电脑的骰子数 ai_count = random.choice(('one', 'two', 'three', 'four', 'five', 'six'))#随机获得骰子数 t.up()#抬笔 t.goto(100, 30)#移动到指定坐标点 t.write("电脑正在扔出骰子……", align='right', font=('微软雅黑', 14, 'normal'))#在游戏窗口写下相关内容 time.sleep(2)#设置延时2s t.undo()#撤销上一个动作 def beauty():#设置彩蛋功能 beauty_c = 0#设置变量初始值为0 t.setx(-200)#设置初始x的坐标 t.pensize(2)#落笔尺寸设置为2 t.down()#落笔 t.color('red', 'yellow')#设置边框和填充颜色 t.speed(8)#设置绘画的速度为8 t.begin_fill()#开始填充 while True: beauty_c += 1#每次变量加1 t.fd(200)#向前移动200的像素 t.lt(170)#逆时针旋转170度 if beauty_c == 36:#判断如果变量等于36 break#结束循环 t.end_fill()#填充完毕 t.done()#停止当前动作,保持当前画布 def pk():#设置比大小功能 u_count = int(eval(user_count))#将获取到的玩者掷骰子点数转换成整形 a_count = int(eval(ai_count))#将获取到的电脑掷骰子点数转换成整形 if u_count == a_count:#点数如果相等 t.write('打成平局!', align='right', font=('微软雅黑', 30, 'normal'))#在画布写下相应的内容 elif u_count > a_count:#如果玩者点数大 t.write('恭喜' + name + '胜利!', align='right', font=('微软雅黑', 30, 'normal'))#在画布写下相应的内容 beauty()#调用彩蛋功能 else:#否则玩者点数小 t.write('好可惜!电脑赢了!', align='right', font=('微软雅黑', 30, 'normal'))#在画布写下相应的内容 time.sleep(2)#延时2s t.bye()#关闭海龟绘图窗口 def draw_dot(n):#绘制骰子点子 for d in range(n):#不同点子,执行不同的循环次数 x = n#获取x的坐标值 y = n#获取y的坐标值 t.goto(x, y)#移动到指定坐标 t.dot(25, 'red')#绘制一个直径为25,颜色为红色的圆 t.up()#提笔 def frame(dot, os):#绘制骰子边框 t.color('black')#设置颜色为黑色 t.pensize(5)#设置尺寸为5 t.up()#提笔 t.goto(0 + os, 0)#移动到指定坐标 t.down()#落笔 t.speed(10)#设置画笔速度为10 for i in range(4):#绘制正方形边框 t.forward(100)#向前移动100像素 t.right(90)#右转90度 t.up()#提笔 draw_dot(dot)#调用绘制骰子点子函数 time.sleep(1)#延时1s screenint()#调用屏幕初始化函数user_int()#调用玩者掷骰子数num(-150)#设置每个点子对应的坐标数frame(eval(user_count), -150)#绘制骰子边框和点子ai_int()#调用电脑掷骰子数num(100)#设置每个点子对应的坐标数frame(eval(ai_count),100)#绘制骰子边框和点子pk()#调用比大小函数
参考效果
喜欢 rzegkly 发表于 2021-11-11 08:00
喜欢
{:5_122:}感谢支持
页:
[1]