Scratchでトランプを配るプログラムを考えてみましょう。
トランプを扱えるようになると、作成できるゲームの幅がうんと広がりそうです。
トランプを配るときに難しいのは、ランダムに配るという事です。
毎回、同じ順番に配ったらゲームになりませんからね。
また、1度配ったカードは2度と配れないことです。
トランプを配る
52枚のトランプを配るプログラムを作ってみます。
ショーカーは抜いておきます。(入れるのも簡単です。ぜひ考えてみてください)
ボタン(スプライト)をクリックすると5枚のカードをランダムに配るプログラムを作ります。
もう一度押すと5枚のカードを捨てて、新しい5枚のカードを配ります。
この時、一度配ったカードは2度と登場してはいけません。
今回のプログラムでは見た目は気にしないことにします。
リストの中にトランプに見立てた変数が入る仕組みです。
格好良くトランプを配るビジュアルは次回作成しようと思います。
今回、トランプを文字と数字で表現することにします。
S:スペード
C:クラブ
D:ダイア
H:ハート
この4文字でマークを表し、数字を付けてトランプに見立てます。
例)H1⇒ハートの1、D13⇒ダイアの13
プログラム
プログラムを作るのはステージ(背景)とスプライトを1つ用意します。
変数
変数を6つ用意します。
シャッフル番号:トランプをシャッフルするときに何番目のカードを抜くか乱数を入れる変数
マーク:トランプのマークを表すアルファベットを入れる変数。S:スペード、C:クラブ、D:ダイア、Hハートとします。
数字:トランプの数字を入れる変数。1~13までの数字を入れます。
シャッフル:シャッフルしたトランプを入れるリスト。
トランプ:トランプを順番に入れるリスト。D1~13、H1~13、S1~13、C1~13を順番に入れるリスト。
配ったカード:配られたカード5枚を入れるリスト。
ステージ
ステージにプログラムを作っていきます。
まずは、D1~13、H1~13、S1~13、C1~13のトランプを作成します。
次に、順番に作ったプログラムをシャッフルします。
ブロック定義と初期処理
今回のプログラムは少し長くなるのでブロック定義を使って機能ごとに分解して作ります。
後から見直時にわかりやすいので、ブロック定義はしっかり使っていきましょう。
プログラムが開始されたときに実行するプログラムを作ります。
変数を初期化します。
他にも変数はあるのですが、他の変数はブロック定義の中で初期化しています。
ここでは、5枚ずつ配ったカードのリストを初期化します。
初期化とは。
変数の中身を空っぽにすることです。プログラムの開始時には初期化をする方がいいです。初期化をしなかった場合、前回実行した時のデータが残っいることがあり誤作動の原因になります。
まずは、52枚のトランプをトランプリストに作成します。
そして、シャッフルリストにランダムに並び変えるブロック定義を作ります。
トランプ作成
トランプ作成のブロック定義の説明をします。
トランプ52枚に見立てた変数を作成します。
1つずつ変数を作成してもいいのですが、繰り返し処理を使って手抜きをします。
ダイアの1~13のカードをD1~D13という値に見立てて作ります。
ハートの1~13のカードをH1~H13という値に見立てて作ります。
スペードの1~13のカードをS1~S13という値に見立てて作ります。
クラブの1~13のカードをC1~C13という値に見立てて作ります。
ブロック定義を開始します。
トランプリストを初期化します。
マークごとに同じ処理を4回作っているだけなので、1つだけ説明します。
数字変数を初期化します。
この後、マークごとにトランプを作っていくとき、1~13までカウントアップするために使います。
これから作成するカードのマークを表す文字を入れます。
今回はダイアのカードを作るのでDを入れます。
数字を1ずつ増やしながら13回繰り返します。
マークと数字をくっつけてトランプリストに追加します。
これでトランプリストにはD1~D13の値が追加されます。
このプログラムをH,S,Cでも行います
このブロックを実行すると変数はこのような状態になります。
トランプをシャッフルする
トランプリストの52個の値をランダムに取り出して、シャッフルリストに追加していきます。
これでシャッフルしたトランプの出来上がりです。
シャッフルのブロック定義を開始します。
シャッフルリストを初期化します。
トランプのリストの中身がなくなるまでプログラムを繰り返します。
トランプリストの長さを測って、0になるまで繰り返すように作っています。
トランプリストから、何番目のトランプを取り出すか決めます。
トランプリストの長さを測って、1~リストの長さの範囲で乱数を使って決めます。
トランプリストのシャッフル番号目のトランプをシャッフルリストに追加します。
シャッフルリストに追加したトランプはトランプリストから消します。
このブロック定義を実行すると変数はこのような状態になります。
入っているカードの順番は毎回違います。
ボタンスプライト
ボタンスプライトのプログラムを作っていきます。
ボタンを押したときに、シャッフルリストから5個ずつ取り出すプログラムを作ります。
スプライトがクリックされたときの処理を作っていきます。
配ったカードリストを初期化します。
ボタンはシャッフルリストにトランプが残っている間、何回でも取り直しができるようにします。
そのため、配ったカードリストはボタンを押すごとに初期化します。
一度に5枚のカードを配ることにします。
そのため、配る処理を5回繰り返すように作ります。
シャッフルリストの先頭トランプを配ったカードリストに追加します。
配って終わったカードはシャッフルリストから消します。
これで、シャッフルリストのトランプの山から5枚ずつ配るプログラムの完成です。
コメント