發表文章

目前顯示的是 11月, 2015的文章

寫一個電腦抽籤的程式

圖片
昨天,學校的教學組長提及有沒有辦法在校內語文競賽時,選手抽籤像全市比賽那樣,用電腦抽號!我直覺地回答:「這簡單呀!」(聽說主任本來要去找一下有沒有人在賣這種程式…) 其實,一切都是為了「比賽的公開與公平」,這個要從校內做起…,也是需要啦! 看了一下,全市比賽的抽籤程式用的是Excel巨集寫的,一來我不擅長那個,二來我想弄個漂亮點、功能好一點的,所以花了一下子來寫支「競賽抽籤程式」。 程式執行畫面 說來說去,就是電腦亂數啦! 程式裡的簡單說明 要用這支程式,首先就是建一個選手名單,要不然誰知道你要抽什麼?所以我很簡單地提供一個純文字的範本檔,使用者填好另存後,就可以當作給程式的Source了 為了呈現出公平中的公平,引入名單時還可以決定抽籤順序,免得有人連「誰先抽」也計較(※說實在的,有必要那麼計較小朋友的競賽得失嗎?學到了東西比較重要吧!) 接下來選手名單就會列表在左側的欄位裡了,這是主持人可以決定讓輪到的選手上來一個一個抽,或由電腦一次幫所有人抽好… 在這個部份,我就讓它呈現一點兒效果(正在抽及抽出號碼的畫面及音效) 正在抽號… 抽出來了… 我把這支程式放在網路上供有興趣的人→ 下載參考 ※程式畫面我嵌死了忠義國小的校幑和學校名稱,不過那都是可以改掉的,如果有人有需要的話。 ※寫這種程式,我想最重要的就是操摐亂數的技巧,以下面這個涵數(lua程式)來說,傳入一個數字 n 要求它在1~n之間取一個亂數,還要進行檢查這個數字在之間取過了沒 function num_set(n)   g_no = Math.Random(n);   g_tb_Count = Table.Count(g_tb);   if g_b_Count == 0 then Table.Insert(g_tb, 1, g_no);   else NumFind = false; for i,j in pairs(g_tb) do if g_no == j then NumFind = true; end end if not NumFind then Table.Insert(g_tb, g_tb_Count+1, g_no); end   end end 再來,我就會搭配一個迴圈來讓程式一直跑到我想要的所有亂數都產生為止,下面例子...

Arithmetic Challenge Open2015開發紀錄

圖片
今天我把以前開發給學校學生使用的 算術大挑戰 (Arithmetic Challenge)改版開放給校外,主要是把消息Share在溫老師的備課Party,比較起來,這兒重視小朋友學習的老師或家長還是多一點吧! 程式網站的位置→ http://163.26.23.3/app/math_game_ex/ 這是一個主從式的程式,意思是程式在使用者的電腦上執行,背後卻可以和伺服器連動,很多電玩不都是這樣嗎?以這個程式來說,小朋友挑戰的成績可以上傳到伺服器配合的網站程式接收,這樣可以讓小朋友們比拼一下誰厲害。 原本結合在學校兒童學習網的後端 在這次的改版中,保留原本程式中算術項目功能,「個位數加法」、「二位數加法」]、[九九乘法]、[二位乘一位]、[100以內的減法],我覺得這些項目是小學生最需要的話題,簡單是簡單,就算是一位加一位的題目,如果趕你時間,就可能會出錯囉! 我趁這個機會,就把最近用的「憤怒鳥」加到畫面裡。 程式執行起來的畫面 當挑戰者(學生)按下開始後,程式會自動出題,共20題,題目在上方,答案會隨機出現在下面的八鈕之中,學生做完一題,程式會立刻出下一題,直到20題結束。 分數的核算方法:本程式計算成績的方法依據二個部份→答對的題數及所耗用的時間,而且連績答對還會有動態加分,如此設計的原因是希望學生能同時兼顧作答的正確性及速度。 進入測驗的畫面 我覺得我之前構思的計算分數的方法是蠻不錯的想法→想得高分,得兼顧速度和正確還有連續正確…,只是過去在學校實施,有很多學生的成績會很接近,使用的秒數有一樣的情形,那是因為之前的程式,我讓它每一秒核算一次所謂的「時間加分」,當許多認真的學生出現時,他們的成績會很接近,甚至一樣。 所以這一次,我修改程式這個部份,改為每0.1秒核算一次,我想這樣子,想同分的機會就不多了。 再來就是成績上傳這件事,原來的版本,小朋友測驗完後,想要上傳成績,會跳出一個視窗要求輸入帳號密碼,會送出到兒童學習網認証並取得學生的資料,再寫入成績表,所以可以上傳成績的都是本校的學生。 想讓程式改成讓學校之外的人上傳成績,以學習的角度來說,這絕對是很棒的事,但如何在上傳成績時進行「認証」變成一件很值得思考的事,我不可能要求凡是要上傳成績的人都來系統申請帳號,因為這樣會讓事情變複雜了,而且我也不想找自己的麻煩。 最後,我想了一個辦法,伺服器上不需要保有使用者的...