大富翁銀行

很多人小時候的回憶之一,就是和家人一起玩大富翁的時光。這個遊戲很好玩,但同學們是否和老師一樣,每次想到玩大富翁時,就想到很麻煩的金錢計算?每一輪大家手上的假鈔來來去去的時候,有時候都覺得暈了 ,對於算錢有障礙的朋友,如果有一個可以方便用來計算的工具,那就會更增加遊戲的開心度~~現在就讓我們利用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個玩家,因此程序稍微多一些。在此,我們讓各個角色各自分工來簡化程式的控制流程。

程式的流程如下:

  1. 使用者點擊一個角色作為要付錢的玩家,此角色的名字就要放在  giver這個變數中

  2. 使用者點擊另一個角色作要要收錢的玩家,此角色的名字就要放在acceptor這個變數中

  3. 如果giver和acceptor這兩個變數都設定完成,則再按下「即時轉帳」這個按鈕角色時,程式會詢問使用者轉帳的金額,在使用者輸入完畢之後即會被放在money這個變數中

  4. 即時轉帳角色在確定所有的變數都設定完成之後,即發出廣播,請每一個玩家角色自行檢查giver和acceptor這兩個變數,如果有提到自己的名字,就在自己的帳戶中增加money或減去money

  5. 轉帳完成之後,即把giver和acceptor這兩個變數再度恢復成0

  6. 在轉帳之前,也可以按下「重設」角色,主動把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個玩家的積木也都是一樣的):

其實上述的程式積木和前面的流程描述文字內容有一些出入,同學們可以看出來嗎?

如此就完成了所有程式內容的設計了,以下是操作的過程。