大富翁銀行
很多人小時候的回憶之一,就是和家人一起玩大富翁的時光。這個遊戲很好玩,但同學們是否和老師一樣,每次想到玩大富翁時,就想到很麻煩的金錢計算?每一輪大家手上的假鈔來來去去的時候,有時候都覺得暈了 ,對於算錢有障礙的朋友,如果有一個可以方便用來計算的工具,那就會更增加遊戲的開心度~~現在就讓我們利用Scratch設計一個工具吧。
需使用到的角色
大富翁遊戲一般來說有4個玩家以及一個銀行,因此在畫面上至少需有4個玩家以及1個銀行。不過,由於銀行本身重點不在角色,而是可以執行的功能,因此可以把銀行依需要的功能切割出幾個不同的角色,並以按鈕的型式呈現。所有需要放在舞台上的角色整理如下:
玩家 abby
玩家 anina
玩家 avery
玩家 monkey
立即轉帳按鈕
薪水入帳按鈕
重設按鈕
使用的變數
每一個人都要有一個帳戶用來記錄自己現在有多少錢,而這個帳戶其實就是一個變數,為了簡單起見,在此使用每一個角色的名字來當做是變數的名稱。
此外,在轉帳的時候需要有付錢的人以及收錢的人,在這裡使用另外兩個變數分別是giver以及acceptor。在轉帳的過程中,當然還需要有一個變數用來記錄到底要轉多少錢,我們用money這個變數來記錄。所有的變數如下:
abby
anina
avery
monkey
giver
acceptor
money
新增了這些變數以及角色之後,可以看到如下所示的畫面(把變數在舞台上的位置重新安排):
程式功能說明
假設有4個玩家
程式開始執行的時候,每個玩家均發給5000元
如果按下「薪水入帳」按鈕,則詢問要入帳的是哪一個玩家,指定玩家之後,會在該玩家帳戶中入帳2000元
要進行「即時轉帳」之前,要先按下第一個玩家作為付錢的人,接下來按第二個玩家即是要收錢的人。
當按下第一個玩家時,這個玩家是付錢的人,他的名字會放在giver這個變數中,按下第二位玩家時,這個玩家就是收錢的人,他的名字會被放在acceptor變數中。
如果想要重設轉帳的玩家,可按下「重設」按鈕重新設定付錢和收錢的玩家。
程式運作邏輯
初始化作業
初始化的作業主要是要把所有的變數都清除為0,並發給每一位玩家5000元。我們以每一位玩家的名字當做是用來放錢的變數,因此可以編寫程式積木如下:
由於上面的這個些程式是在按下「開始執行」按鈕時要運作的,和角色沒有直接的關係,因此上面這一段程式積木要放在哪一個角色裡面都可以。
薪水入帳
薪水入帳的方式很單純,只要按下薪水入帳按鈕,系統就要詢問使用者要入帳的是哪一個玩家。因此,這段程式流程是要設計在「薪水入帳」的角色中,而且一開始要先詢問使用者。為了簡單流程起見,詢問使用者的答案,是以數字來回答就可以了。
當程式拿到使用者回答的數字,再用一連串的「如果」積木來決定要在誰的變數中加上2000元。程式積木如下:
轉帳流程之重設作業
轉帳程序由於牽渉到2個玩家,因此程序稍微多一些。在此,我們讓各個角色各自分工來簡化程式的控制流程。
程式的流程如下:
使用者點擊一個角色作為要付錢的玩家,此角色的名字就要放在 giver這個變數中
使用者點擊另一個角色作要要收錢的玩家,此角色的名字就要放在acceptor這個變數中
如果giver和acceptor這兩個變數都設定完成,則再按下「即時轉帳」這個按鈕角色時,程式會詢問使用者轉帳的金額,在使用者輸入完畢之後即會被放在money這個變數中
即時轉帳角色在確定所有的變數都設定完成之後,即發出廣播,請每一個玩家角色自行檢查giver和acceptor這兩個變數,如果有提到自己的名字,就在自己的帳戶中增加money或減去money
轉帳完成之後,即把giver和acceptor這兩個變數再度恢復成0
在轉帳之前,也可以按下「重設」角色,主動把giver和acceptor這兩個變數設定為0,讓使用者可以重新設定付錢和收錢的玩家。
根據上面的邏輯,「重設」角色被擊時,需要執行以下的程式:
即時轉帳程式
當「即時轉帳」角色被點擊之後,其程式積木如下:
在這個程式中首先檢查giver和acceptor是否都已經指定人選了,如果還沒的話,就不能執行轉帳的工作,此時要說出一個訊息提醒使用者要進行設定。
如果giver和acceptor都有人選的話,就要進入轉帳程序,先詢問要轉帳的金額大小,把詢問的答案放到變數money中,之後就廣播一個叫做「givemoney」的訊息,通知每一個角色要各自更新自己的帳戶金額。這個動作要等待一秒,讓每一個角色可以有時間把他們的工作做完。
在等待一秒之後,接著就是把3個主要的變數都清除為0,即完成轉帳的程序。
即時轉帳每一個玩家要執行的作業
在前面講到,「即時轉帳」按鈕在被按下之後,會發出一個叫做「givemoney」的廣播訊息,此時每一個玩家要等待這個廣播訊息,當收到時就要檢查在giver變數中是否為自己的名字,如果是的話,表示自己是付錢的人,就要把自己的帳戶中的錢減去money的金額。
同樣的,如果在acceptor變數中是自己的名字的話,就表示自己是收錢的人,就要把自己的帳戶中的錢加上money的金額。以角色abby為例,程式積木如下:
就如同同學們所看到的,程式積木中使用了2個如果積木,分別檢查giver和acceptor中的內容,再做適當的對應即可。其他3個玩家的方法也類似,只不過要記得名字的地方要換成正確的字串就可以了。
指定付錢和收錢玩家的方法
最後,還有一個動作還沒完成,就是如何在介面中設定giver和acceptor是哪一個玩家,也就是如何指定付錢和收錢的玩家各是什麼人。
在設定的流程方面,我們希望第一個被點擊到的玩家就是付錢的人,而第二個被點擊到的玩家則是付錢的人。由於每一個玩家都可能會在第一階段或是第二階段被點擊,因此在每一個玩家的「當角色被點擊」事件發生時,都要先檢查giver,如果giver是0的話,就表示付錢的人還沒被設定,就把自己設定為付錢的人,如果giver已經不是0的話,就表示已經有付錢的人了,再檢查acceptor,如果acceptor是0,就表示還沒有設定收錢的人,就把自己設定為收錢的人。
當然,如果giver和acceptor都不是0的話,那就表示都已被設定完畢了,就什麼事都不要做就好了。以玩家abby為為例,它的被點擊事件程式積木設計如下(其它3個玩家的積木也都是一樣的):
其實上述的程式積木和前面的流程描述文字內容有一些出入,同學們可以看出來嗎?
如此就完成了所有程式內容的設計了,以下是操作的過程。
Last updated