GODOT遊戲程式設計008---- 約分小程式實現
阿新 • • 發佈:2018-11-30
背景:製作一個約分的小程式,點選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格式。