2015年10月19日 星期一

Multiplication Chessboard的更新紀錄





在10月上旬將這個程式Share出去之後,有許多老師同好對「九九乘法遊戲板」感到興趣,所以我儘可能地快速Update它到我認為較完整的版本,主要就是加入對戰紀錄分析,我個人認為這可比遊戲本身更重要,也加入了一點音效…
加入可以逐手討論的區塊
若有大人或老師,在某場遊戲結束之後,引導小朋友(對戰者或其他人)一起來「回顧」每一手紀錄,這可以讓小朋友長智慧,因為不僅是單純的背熟九九乘法這麼陽春,它還包含觀察對方的局勢做出是要「進攻」或是「阻止」的決定!
以程式的角度來說,就是要在遊戲進行中,不斷地留下紀錄,所以我讓程式在啟始時,在使用者的電腦裡檢查並建一個目錄,就在C:\cw_cheesboard,遊戲進行時,程式會截取盤勢畫面及寫下使用者動作的log,最後在程式中增加一個區塊→「對戰分析區」
每一次的對戰會被以時間為標記留下來
選了對戰紀錄後,就可以進入那一場的檢討畫面。
在這一次的Update中,有鑑於目前螢幕或是單槍都是16:10的比例,且解析度也都不錯,便加出一版使用1200X800的版面,並用KIOSK模式(全螢幕遮蔽),結果老師們也大都認為不錯。
KIOSK模式執行的程式
不久之後(才釋出程式一二天),有位新市國小的大紅帽老師來商談,希望能改一版適合他的「全黑板投影」,還很認真地提出了他的需求,想說如果不要太費時,就舉手之勞一下…

原來現在有一些老師認為原本的教室投影模式(單槍投在布幕上)太不清楚,所以就投在黑板上,這樣還可以用粉筆加上去,算是一種巧思,也有書商的數位教材光碟也提供了所謂的「黑板投影模式」,其實很多年前,我去台北開會或研所上課時,就有教授把畫面直接投在白板上,加上白板筆說明課程,用黑板的話,在目前的教室應是不錯的啦,因為教室配的投影幕都是4:3的居多,早就跟不上時代了,只不過認真的老師,仍免不了要吃些「粉筆灰」…

投影在黑板上有二個重點:1.黑板是狹長型的。2.投影在黑板上對於內容的顏色是有限制的
還有,大紅帽老師希望利用鍵盤來控制程式…,嗯…這些要求對我來說也還算可以啦,不過我也沒太多時間就是了,而且看來他使用雙螢幕在玩(這麼有衝勁的老師現在也不多了),所以我也加了一個螢幕來試程式效果。
這時筆電是主螢幕,另一個就是副螢幕(二個解析度可設為不同)

發現程式一開始會執行於主螢幕,由於寬長於螢幕解析會被截斷,拖到副螢幕也不會自己恢復

加上二行程式就解決了

就下指令要求視窗重繪就是了
經過與大紅帽老師一番來來返返,整個程式也差不多了!他應該還能接受吧!畫面就像下面一樣,程式的版面是1580X426,在執行時,大紅帽老師打算把控制區留在主螢幕上,只有遊戲區拖到副螢幕上,而他的副螢幕就是他的單槍。
因應黑板投影所使用的顏色大概就幾種

我讓數字盤面隨著目前的玩家移動

整個程式應還算可行
※若您也此樂趣想要一試,可以在下面的連接下載到這個版本:
http://163.26.23.3/app/multiplication_chessboard/MultiplicationChessboard_v117.exe
附記:
◆大紅帽老師提供了幾種適合於黑板投影時使用的色彩,我想這應該是經驗法則,而且每個人的看法會有不同的。我把提供的16進位順便轉換成RGB模式表示在下面這個網站可以轉換
http://www.ifreesite.com/color/color-code-converter.htm
紫圓:#9600E1 RGB150,0,255
藍圓:#005AE1 RGB0,90,225
紅圓:#FF0066 RGB255,0,102
綠圓:#368700 RGB54,135,0
黃字:#FFFF00 RGB255,255,0
紅字:#E90080 RGB233,0,128
紫字:#6E00A5 RGB110,0,165

藍字:#00F0B0 RGB0,240,176
◆關於留下玩家每一手的對單紀錄,我用方法是讓程式去截取程式數字盤的影像存成jpg檔,這個部份其實很有程式難度,不過很幸運地,以前在開發論譠有一位厲害的荷蘭工程師SSIDE釋出了涵式作法,這需要dotNet2.0以上的支援,以前我就曾用在我的論文所開發的系統中,現在win7以上都內建.net framework,所以這部份能順利解決。
◆大紅帽老師所需要的鍵盤控制功能,在程式的實作上並不難達成,主要是將程式碼寫在ON key這一個event中就行了,當然得判斷一下使用者是按了哪個鍵?而電腦鍵盤的每個按鍵原本就有特定的代碼能讓程式截取
Decimal
Hex
Character
8
8
Backspace
9
9
Tab
13
D
Enter
16
10
Shift (both)
17
11
Ctrl (both)
18
12
Alt (both)
19
13
Pause
20
14
Caps Lock
27
1B
Esc
32
20
Spacebar
33
21
Page Up
34
22
Page Down
35
23
End
36
24
Home
37
25
(left arrow)
38
26
(up arrow)
39
27
(right arrow)
40
28
(down arrow)
45
2D
Insert
46
2E
Delete
48
30
0
49
31
1
50
32
2
51
33
3
52
34
4
53
35
5
54
36
6
55
37
7
56
38
8
57
39
9
65
41
A or a
66
42
B or b
67
43
C or c
68
44
D or d
69
45
E or e
70
46
F or f
71
47
G or g
72
48
H or h
73
49
I or i
74
4A
J or j
75
4B
K or k
76
4C
L or l
77
4D
M or m
78
4E
N or n
79
4F
O or o
80
50
P or p
81
51
Q or q
82
52
R or r
83
53
S or s
84
54
T or t
85
55
U or u
86
56
V or v
87
57
W or w
88
58
X or x
89
59
Y or y
90
5A
Z or z
91
5B
(left Windows key)
92
5C
(right Windows key)
93
5D
(application key - located between
the right Windows and Ctrl keys
on most keyboards)
96
60
0 (numpad with Num Lock on)
97
61
1 (numpad with Num Lock on)
98
62
2 (numpad with Num Lock on)
99
63
3 (numpad with Num Lock on)
100
64
4 (numpad with Num Lock on)
101
65
5 (numpad with Num Lock on)
102
66
6 (numpad with Num Lock on)
103
67
7 (numpad with Num Lock on)
104
68
8 (numpad with Num Lock on)
105
69
9 (numpad with Num Lock on)
106
6A
* (numpad)
107
6B
+ (numpad)
109
6D
- (numpad)
110
6E
. (numpad)
111
6F
/ (numpad)
112
70
F1
113
71
F2
114
72
F3
115
73
F4
116
74
F5
117
75
F6
118
76
F7
119
77
F8
120
78
F9
121
79
F10
122
7A
F11
123
7B
F12
144
90
Num Lock
145
91
Scroll Lock
186
BA
;
187
BB
=
188
BC
,
189
BD
-
190
BE
.
191
BF
/
192
C0
`
219
DB
[
220
DC
\
221
DD
]
222
DE
'
※還有一點可以提醒自己的,程式若是用到onkey的,在開始執行後一定要記得給一個命令focus住畫面上某一個物件,如此鍵盤的截取才會開始運作,還有當鍵盤模式處於中文狀態,不管按哪個鍵,返回值都會是229

2015年10月10日 星期六

開發Multiplication Chessboard紀錄

中秋節連假前的星期五(2015.9.25),我們利用下午沒有課務的時段,在圖書館辦了一場校內的研習:「桌遊在教學上的運用」,參加的就是幾位平時對於桌遊很有興趣的老師,像是内人(Spring Wu)和女兒(Irene Zheng)就是桌遊長期以來的支持者。所以在這小小的研習中,老婆帶了許多之前買的桌遊和其他老師及小朋友分享,也分享了最近在溫老師備課party中看到的資訊:有位邱老師分享了九九乘法盤遊戲的作法,大人和小孩都覺得效果很好。
剛好本人會寫點小程式,心想可以把這「寓教於樂」的想法化成程式,或二人玩或投影,若有電子白板的教室,豈不美事一件,就立刻動手…
※寫程式對自己也是很有幫助的,它可以促進腦細胞快速運動,讓一個人即使夜深了也不會累…哈哈!是隔天才會累
第一件事就是看著人家這張設計,想一下人家建議的玩法
分析原本構思者的想法很重要,它將成為程式最基本的樣子,這方面我算是還可以啦!過去也累積了許多經驗。

一開始先把想像中的畫面做出來
既為「程式」,程式碼才是最重要的,接下來就是思考畫面上的各種功能要如何佈置及靠程式碼去實現,這過程中充滿了腦海中對於未來運作程序的順序模擬,事件及動作,如果怎樣就怎樣…英文就是event→function→if xxx then else xxx,我寫程式的速度算是蠻快的(如果慢下來放著,就會不想寫了),很快地我就完成了基本樣式(約莫一二天中的空餘時間),也不能全部時間都拿來做這事,還是要上課、打球、家務事、也得睡覺…
第一階段最費腦袋的應該就是如何判斷所有三連環的情形,一想之下,情形真多…如何把它化為公式判斷是很重要的,像下方這樣:
function chk_line(user,point)
  if user == "user_green" then
    if String.Find(txt_user_green, "|" .. n-6 .. "|", 1, false) ~= -1 and String.Find(txt_user_green, "|" .. n+6 .."|", 1, false) ~= -1 then
      victory = true;
    end
  elseif user == "user_red" then
    if String.Find(txt_user_red, "|" .. n-6 .. "|", 1, false) ~= -1 and String.Find(txt_user_red, "|" .. n+6 .."|", 1, false) ~= -1 then
      victory = true;
    end
end
這大概花了我最多的時間來思考吧!
還有我也希望程式能吸引小朋友,剛好我家女兒很喜歡「Angry Birds」,所以裡頭如果能用Angry Birds圖案就不錯,但會不會有版權問題呢?上網找了一下,Angry Birds Playing CardDeck and Vector Characters,很棒的外國作者的作品,以創用CC 3.0釋出,看來應該可以使用

在程式中我也用了女兒(Irene Zheng)的手繪作品,寫程式的人特權就是愛用什麼素材就用什麼素材,可以完全客製化
玟琳喜歡畫Angry Birds(其中一張)
這個夠活化腦細胞的
經過一番努力,我完成了所謂的Beta版,迫不及待地請老婆女兒當首席測試員,看看有沒有什麼問題,果然就有問題,竟然出現了該獲勝,程式卻沒反應的情形,當然就是有Bug啦!
這程式是耍呆嗎?
這其實很平常啦!「哪有人吃燒誁餅不掉芝麻的!」寫程式哪有沒bug的,但這可又要想一下了,快速地掃視一下程式碼,果然原本的想法裡有漏洞,通常我會做筆記把情形寫下
這東西應該只有我自己看得懂
很幸運地!很快看出問題出在哪兒,就可以快速修正它,所有的邏輯思考到此應算完成了,接下來我就想為程式加些原本沒有的想法,免得遊戲太陽春了,所以我加入了進階版亂數盤面的功能和限時的功能,以及讓玩家能選擇代表圖的功能。
跑起來的畫面
先這樣吧!就Release了,這程式我放在http://163.26.23.3/app/multiplication_chessboard/,讓有興趣的同好們一起玩玩看,過二天有空,我還會繼續Update它,最終我想讓它和「兒童學習網」連接,取得學生的資訊,並可以上傳對戰歷程。
以下是一些程式中用到的畫面:都是用女兒畫的圖來做的



這是我個人最喜歡的咖菲貓