1. 程式人生 > >GODOT遊戲程式設計008---- 約分小程式實現

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格式。
這裡寫圖片描述
這裡寫圖片描述
這裡寫圖片描述