GODOT游戏编程008---- 约分小程序实现

背景:制作一个约分的小程序,点击next后出一道题,点击answer后出示约分答案。
思路:分子、分母选择同一个数的倍数,比如,2的倍数中随机抽两个数,大的当分母,小的当分子。约分用辗转相除法。

感谢Godot Engine群里的NPC给予热心指导,否则不会有这个小程序。

新建一个项目,新建节点Panel
添加节点ColorRect作为背景,调整大小和颜色Color。
添加节点ColorRect作为分数线,调整大小和颜色。
添加3个label,一个做标题“约分小程序”,一个做分子“A”,一个做分母“B”.
注意调整顺序,ColorRect做背景这个置于最上面。(相当于置于底层)。
添加2个按钮,一个做“NEXT”,一个做“Answer”。
另,添加一个标签,监视当前显示的分子分母是谁的倍数。“zu”。
开始美化一下界面。
在C:\windows\Fonts里,自己复制一个字体出来,放到引擎文件夹里。
点击标签A,下面text里先写上A,(写什么都行)
这里写图片描述
下面,找到CustomFonts,新建一个DynamicFont,点击进去,选择加载,加载之前复制来的字体。
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
接下来往上一点,调整一下大小,size
这里写图片描述
同样的方法设置标签B,“约分小程序”。
完成后效果如下图:
这里写图片描述
上面我也把next这个按钮也添加字体了。
添加两个按钮的信号,(不添加也行,在程序里实现也行。)
这里写图片描述
然后就是写程序了。

这里写图片描述

extends Panel

var arr1 = [] #获取2,3,5哪一个数的倍数?2的概率大些
var arr2=[]  #2的倍数
var arr3=[] #3的倍数
var arr4=[]  #4的倍数
var arr5 = [] #5
var arr6=[]  #6的倍数
var arr7=[] #7的倍数
var arr8=[]
var arr9=[]
var zu  #组
var zu2 #随机组内数字
var fenzi #分子
var fenmu  #分母
var temp1 #临时使分母大于分子
var temp2 #临时使分母大于分子
var temp3 #临时使分母大于分子
var temp4 #辗转相除法
var temp5#辗转相除法
var temp6#辗转相除法
var temp7#辗转相除法

func _ready():
    arr1 = [2,2,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9]  #让2多一些,多抽分子分母是2的倍数的
    arr2 = [2, 4,6,8,10,12,14,16,18,20,22,24,26,28,30,32,34,36,38,40,42,44,46,48,50,52,54,56,58,60] #,22,24,26,28,30,32,34,36,38,40
    arr3 = [3,6,9,12,15,18,21,24,27,30,33,36,39,42,45,48]
    arr4 = [4,8,12,16,20,24,28,32,36,40,44,48,52,56,60]
    arr5 = [5,10,15,20,25,30,35,40,45,50,55,60]
    arr6 = [ 6,12,18,24,30,36,42,48,54,60,66]
    arr7 = [7,14,21,28,35,42,49,56,63,70]
    arr8 = [16,24,32,40,48,56,64,72,80]
    arr9 = [9,18,27,36,45,54,63,72,81]

    $Answer.visible=false# 隐藏答案按钮

func _on_Button_pressed():

    zu2=randi() % 18  #所有组内数字的个数 #在0到17中随机一个数字,也就是arr1的组内数字数目
    zu=arr1[zu2]  #从arr1中挑一个数,可能是2,3,4,...
    get_node("zu").text = String(zu)  #在屏幕中现实当前是那个组
    if zu == 2:  #如果抽到2的倍数
        fenzi=randi() % 29  #开始同样的方法挑分子分母,
        #上面是2的倍数的个数,如果添加的多了就有更多的数
        fenmu=randi() % 29
        temp1=arr2[fenzi]
        temp2=arr2[fenmu]
        if temp1 > temp2:
            temp3 =temp1
            temp1=temp2
            temp2=temp3
        get_node("A").text = String(temp1)
        get_node("B").text = String(temp2)
    elif zu == 3:
        fenzi=randi() % 15
        fenmu=randi() % 15#3的倍数的个数
        temp1=arr3[fenzi]
        temp2=arr3[fenmu]
        if temp1 > temp2:
            temp3 =temp1
            temp1=temp2
            temp2=temp3
        get_node("A").text = String(temp1)
        get_node("B").text = String(temp2)
    elif zu == 4:
        fenzi=randi() % 14
        fenmu=randi() % 14#上面数组中4的倍数的个数
        temp1=arr4[fenzi]
        temp2=arr4[fenmu]
        if temp1 > temp2:
            temp3 =temp1
            temp1=temp2
            temp2=temp3
        get_node("A").text = String(temp1)
        get_node("B").text = String(temp2)
    elif zu == 5:
        fenzi=randi() % 11
        fenmu=randi() % 11#上面数组中4的倍数的个数
        temp1=arr5[fenzi]
        temp2=arr5[fenmu]
        if temp1 > temp2:
            temp3 =temp1
            temp1=temp2
            temp2=temp3
        get_node("A").text = String(temp1)
        get_node("B").text = String(temp2)
    elif zu == 6:
        fenzi=randi() % 10
        fenmu=randi() % 10#上面数组中4的倍数的个数
        temp1=arr6[fenzi]
        temp2=arr6[fenmu]
        if temp1 > temp2:
            temp3 =temp1
            temp1=temp2
            temp2=temp3
        get_node("A").text = String(temp1)
        get_node("B").text = String(temp2)
    elif zu == 7:
        fenzi=randi() % 9
        fenmu=randi() % 9#上面数组中4的倍数的个数
        temp1=arr7[fenzi]
        temp2=arr7[fenmu]
        if temp1 > temp2:
            temp3 =temp1
            temp1=temp2
            temp2=temp3
        get_node("A").text = String(temp1)
        get_node("B").text = String(temp2)
    elif zu == 8:
        fenzi=randi() % 9
        fenmu=randi() % 9#上面数组中4的倍数的个数
        temp1=arr8[fenzi]
        temp2=arr8[fenmu]
        if temp1 > temp2:
            temp3 =temp1
            temp1=temp2
            temp2=temp3
        get_node("A").text = String(temp1)
        get_node("B").text = String(temp2)
    elif zu == 9:
        fenzi=randi() % 8
        fenmu=randi() % 8#上面数组中4的倍数的个数
        temp1=arr9[fenzi]
        temp2=arr9[fenmu]
        if temp1 > temp2:
            temp3 =temp1
            temp1=temp2
            temp2=temp3
        get_node("A").text = String(temp1)
        get_node("B").text = String(temp2)

    $Answer.visible=true# 显示答案按钮



func _on_Answer_pressed():
    temp5=temp2
    temp4=temp1
    if temp5!=0:
        while temp5%temp4!=0:
            temp6=temp5%temp4
            temp5=temp4
            temp4=temp6 #辗转相除法 大数除以小数,如果不余0,用小数除以余数。
        temp2=temp2/temp4
        temp1=temp1/temp4

        get_node("A").text = String(temp1)
        get_node("B").text = String(temp2)
        #temp1=0

有几个小地方需要做下笔记。
1,按钮的显示和隐藏

$Answer.visible=false    # 隐藏答案按钮
$Answer.visible=true     # 显示答案按钮

2,获取随机数

fenzi=randi() % 11   #获取0-10的随机数

3,获取数组中的某个数

temp1=arr9[fenzi]  #获取数组9中的第fenzi号数。数组中第1个数是0号。
#如
arr=[1,2,3,4,5]  
a=arr[1]    #a=2

4,新建数组,数组内赋值

var arr1 = []
arr1 = [1,2,3]

5,给label标签赋值

get_node("A").text = String(temp1)   #这里的temp1是一个数,所以要变成字符串。
#否则可以这样写
get_node("A").text = "hello,world"

运行测试正常。导出为exe文件。导出的文件是两个,一个是exe的,一个是pck格式。
这里写图片描述
这里写图片描述
这里写图片描述

猜你喜欢

转载自blog.csdn.net/weixin_42944682/article/details/82494570