5699浏览
查看: 5699|回复: 2

[教程] Mind+Python turtle 课程——10 扔骰子小游戏

[复制链接]
本帖最后由 木子呢 于 2021-11-9 13:53 编辑

第十课 扔骰子游戏


课程目录:


功能介绍

经过前面课程的学习,我相信同学们已经学到了很多python turtle的知识,这节课程为最后一节turtle类型的课程了,相对来说会较难,制作一个扔骰子游戏。首先我们将先复习之前的内容,初始化屏幕大小和玩者的信息,其次实现玩者扔骰子的功能,之后实现玩者和电脑一起扔骰子的功能,最后实现骰子比大小的功能完成扔骰子游戏的设计。课程会分为个任务的形式进行,下表为课程任务及涉及到的知识点。

实现功能
知识点
任务一:游戏初始化设置
复习turtle库函数、全局变量的使用、函数的定义及函数的调用
任务二:实现玩者扔骰子
复习随机函数、学习自定义函数(带参数)及元组、eval()函数
任务三:实现玩者和电脑一起扔骰子
复习随机函数、学习自定义函数(带参数)的及元组、eval()函数
任务四:完成骰子数的比大小功能
复习逻辑判断语句的使用

项目实践

任务一:游戏初始化设置

1、任务分析
经过前面的游戏功能的设计,对应不同的游戏功能大家都有所了解了。这节课我们将从游戏的初始化界面开始设计,首先我们将设置一个游戏界面,并设置好相应的标题,之后设置玩者信息输入框。当完成输出信息后弹出文字提示,表示玩者正在掷骰子。

2、编写程序

import turtle as t#导入turtle库并赋值为t
import 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”键即可看到“输入姓名+正在扔出骰子”。

Mind+Python turtle 课程——10 扔骰子小游戏图1Mind+Python turtle 课程——10 扔骰子小游戏图2


任务二:
实现玩者掷骰子


1、任务分析
完成了任务一以后,我们就需要开始考虑如何能实现掷骰子的功能。首先我们需要运用turtle库的知识画出一个正方形边框也就是骰子的大小边框,之后需要在边框内绘制出点数,最后通过变量user_count去获得随机掷出的骰子数。我们分别用函数去存储这些功能,之后调用就能实现掷骰子的功能了。

2、编写程序

import turtle as t
import time
import random
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 draw_dot(n):#绘制骰子点子
    for d in range(n[0]):#不点子,执行不同的循环次数
        x = n[d + 1][0]#获取x的坐标值
        y = n[d + 1][1]#获取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)#绘制骰子边框和点子


3、运行效果
运行程序,首先屏幕显示“   正在扔出骰子”,之后画出正方形边框,最后画出红色圆点。

Mind+Python turtle 课程——10 扔骰子小游戏图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[0]):#不点子,执行不同的循环次数
        x = n[d + 1][0]#获取x的坐标值
        y = n[d + 1][1]#获取y的坐标值
        t.goto(x, y)#移动到指定坐标
        t.dot(25, 'red')#绘制一个直径为25,颜色为红色的圆
        t.up()#提笔

4.3.1代码解释
通过随机获取到的骰子数,进行绘制点子。这里假如获取到了随机数“one”,带入函数循环语句中可得:
for d in range(one[0])”;
而通过元组one = (1, (50 + os, -50))”中我们知道,“one[0]为第一个元素,也就是1。因此此时代码为:
for d in range(1)“;
这样我么对这个循环语句就很熟悉了。也就是循环执行一次,并且从d=0开始。把d=0带入循环体中即可获得:
x=one[1][0];
也就是x坐标为”50+os“(这里需要注意,第一个”[]“为获取one这个的元组中的元素,而第二个”[]“为获取坐标元组中的x坐标元素,这里把它们拆开看便于理解)。
同理,y坐标为y=one[1][1],通过检索最终坐标为”-50“。
当随机到其它的点数时也是这样的过程。当获取得到x和y坐标时,让画笔移动到相应的位置,进行绘制即可。

4.3.2访问元组中的元素
python中,如果想将元组的内容输出也比较间,可以直接用print()函数。
这里我们编写一个测试程序

import turtle as t
global one,two
one = (1, (-100, -50))#设置点数1的坐标
two = (2, (-125, -50), (-75, -50))#设置点数2时两个点的坐标
three = (3, (-100, -25), (-125, -75), (-75, -75))#设置点数3时三个点的的坐标

例如,要想打印上面元组中的one元组,则可以在代码最后加以下代码
print(one)

执行结果如下:
Mind+Python turtle 课程——10 扔骰子小游戏图4

从上面的执行结果中可以看出,在输出元组时,是包括左右两侧的小括号的。如果不想输出全部元素,也可以通过元组的索引获得指定的元素。例如,要获取元组one中索引为0的元素,可以程序后面加上以下代码。
print(one[0])

执行结果如下
Mind+Python turtle 课程——10 扔骰子小游戏图5

而当我们需要获得x的坐标时,可以在程序后面加入以下代码(这里需要注意,第一个”[]“为获取one这个的元组中的元素,而第二个”[]“为获取坐标元组中的x坐标元素,这里把它们拆开看便于理解)。
print(one[1][0])

执行结果如下
Mind+Python turtle 课程——10 扔骰子小游戏图6

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库并赋值为t
import 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():#电脑掷骰子数
    global  ai_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[0]):#不点子,执行不同的循环次数
        x = n[d + 1][0]#获取x的坐标值
        y = n[d + 1][1]#获取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)#绘制骰子边框和点子


3、运行效果
当运行程序时,屏幕会显示玩者掷骰子,之后电脑掷骰子。

Mind+Python turtle 课程——10 扔骰子小游戏图7

4、代码释义

4.1代码中自定义的ai_int()函数的使用

def ai_int():#电脑掷骰子数
    global  ai_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库并赋值为t
import 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():#电脑掷骰子数
    global  ai_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)[0])#将获取到的玩者掷骰子点数转换成整形
    a_count = int(eval(ai_count)[0])#将获取到的电脑掷骰子点数转换成整形
    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[0]):#不点子,执行不同的循环次数
        x = n[d + 1][0]#获取x的坐标值
        y = n[d + 1][1]#获取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、运行效果
运行程序,当玩者掷的骰子大于电脑时,屏幕显示对应玩者的名称获胜。当玩者掷的骰子等于电脑时,屏幕显示打成平局。当玩者掷的骰子小于电脑时,屏幕显示“好可惜!电脑赢了!”。

Mind+Python turtle 课程——10 扔骰子小游戏图8Mind+Python turtle 课程——10 扔骰子小游戏图9Mind+Python turtle 课程——10 扔骰子小游戏图10

4、代码释义

4.1代码中自定义的pk()函数的使用

def pk():#设置比大小功能
    u_count = int(eval(user_count)[0])#将获取到的玩者掷骰子点数转换成整形
    a_count = int(eval(ai_count)[0])#将获取到的电脑掷骰子点数转换成整形
    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库并赋值为t
import 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():#电脑掷骰子数
    global  ai_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)[0])#将获取到的玩者掷骰子点数转换成整形
    a_count = int(eval(ai_count)[0])#将获取到的电脑掷骰子点数转换成整形
    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[0]):#不点子,执行不同的循环次数
        x = n[d + 1][0]#获取x的坐标值
        y = n[d + 1][1]#获取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()#调用比大小函数
参考效果

Mind+Python turtle 课程——10 扔骰子小游戏图11


rzegkly  版主

发表于 2021-11-11 08:00:21

喜欢
回复

使用道具 举报

木子呢  管理员
 楼主|

发表于 2021-11-11 10:16:23

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

为本项目制作心愿单
购买心愿单
心愿单 编辑
[[wsData.name]]

硬件清单

  • [[d.name]]
btnicon
我也要做!
点击进入购买页面
上海智位机器人股份有限公司 沪ICP备09038501号-4

© 2013-2024 Comsenz Inc. Powered by Discuz! X3.4 Licensed

mail