トランプをシャッフルして配るプログラムを考えてみましょう。
前回はリストを使ってトランプをシャッフルするプログラムと、5枚ずつ配るプログラムを作りました。
今回は、リストの操作だけでなく、見た目にトランプを配るプログラムを作ってみます。
前回の記事をもとに改造していきます。
トランプを配る動きも作っていくので、待ち時間を調整したりちょっと難しい内容になっています。
頑張りましょう。
プログラムを作ってみて、こんなに大変になるとは思っていませんでした。
スクラッチで複数のスプライトの足並みをそろえて動かすのは難しかったです。
前回の記事について
今回は、前回のトラップを配るプログラムが完成しているところから、改造をしていきます。
まだ、トランプを配るプログラムを作っていない人は前回の記事から読んでください。
特に、ステージのプログラムについては今回の記事では説明していませんが、必ず必要です。
格好良くトランプを配る
今回はトランプの山から、裏向き5枚ずつ配り、表にひっくり返していくプログラムを作っていきます。
緑のボタンを押すと裏カードを5枚配ります。
このカードも山から配っているように動かします。
5枚配り終えると左から順にカードをひっくり返します。
ただ、最後の1枚を配り終えたときにカードの山が残っています。
すべて配り終えたらカードの山がなくなると格好いいのですが、今回の仕組みでは難しいのであきらめることにします。
今回のプログラムでは、裏カードのクローンを作って配る方法にしています。
クローンを作ると最後に作成したスプライトの制御しかできません。
そのため、山カードのスプライトを操作することができなくなってしまっています。
また、5枚のカードがすべてひっくり返る前に緑ボタンを押すと変な動きになります。
この制御も面倒なので今回はあきらめます。
5枚目のカードがひっくり返るまでボタンを押せないようにするには次のような方法でやります。
・ボタンを押した瞬間にフラグを立てます(変数を用意して1を登録する)。
・変数が1の時はボタンを押してもプログラムをスキップするようにします。
・5枚目のカードをひっくり返したらフラグを消します(変数に0を登録する)。
プログラム
プログラムを作る前に、今回使うスプライトを用意しましょう。
用意するものは
・トランプの裏絵柄のイメージ
・トランプ絵柄52枚のイメージ
です。
ここでは「いらすとや」さんのイメージを使わせていただきます。
いらすとやさん以外の素材を使う場合、大きさや位置は自分で調整してください。
スプライトを用意する
裏絵柄のスプライトを追加してください。
いらすとやの素材の場合、大きさは45にします。
位置はx=0、y=100にします
絵柄のスプライトを52枚追加してください。
いらすとやの素材の場合、大きさは45にします。
非表示にするので位置はどこでもいいのですが、とりあえずx=0、y=0にして1か所にまとめましょう。
52個のスプライトすべてに行います。
このような感じになります。
緑ボタンのスプライトは左上の方に移動しましょう。
背景(ステージ)のプログラム
背景のプログラムは前回の記事を読んでください。
そのまま使います。
緑ボタンのプログラム
緑ボタンスプライトのプログラムは前回から少し改造して使います。
カードを配る
前回作成した緑ボタンのプログラムはこちらでした。
この部分について少し部品を追加しています。
ボタンが押されたときに前回配った5枚のカードを消すために「消すを送る」を追加しておきます。
「消すを受け取ったとき」動くプログラムはあとで登場します。
「消すを送る」の後に「0.5秒待つ」を追加します。
5枚のカードが消えるまでの少し待ち時間を作ります。
「もしシャッフルの長さ=0でないなら」の条件分岐を追加しています。
前回のプログラムでは毎回5枚ずつ配るプログラムでした。
トランプは52枚なので、最後は2枚しか配れません。
最後の2枚になったら、2枚だけ配って終了するために追加しました。
前回のプログラムでは配るトランプがなくなっても、架空のカードを配るような動きになって格好悪かったので改善しました。
では、緑ボタンに追加するプログラムの続きを見ていきましょう。
裏カードを配る
まずは裏カードを配るプログラムを作ります。
変数「配ったカード」を作っておきます。
今回は5枚ずつカードを配るのですが、今、何枚目のカードを配っているのかを知るために使います。
5枚のカードは配る場所を変えたいので、1枚目はどこ、2枚目はどこと場所を決めるために使います。
初めはカードを配ってない状態から始まるので、0にしておきます。
裏カードを配る処理はリスト「配ったカード」の長さだけ繰り返します。
前回、リスト「配ったカード」にトランプを5枚ずつ入れるプログラムを作っていました。
今回配られた5枚のトランプが入っているはずです。
その分の裏カードを先に配ります。
配った枚数を把握するために、「配った枚数」を1ずつ増やしながら繰り返します。
実際にカードを配る処理は「裏カード配るを送る」で行います。
「裏カード配る」で実行するプログラムは裏カードのスプライトの中に作っていきます。
後で説明します。
この後、「0.5秒待つ」を入れています。
1枚配るごとに0.5秒の待ち時間を用意しています。
裏カードは格好良く配るために、カードの山からスプライトを移動させながら配置します。
そのため少し時間がかかります。
その待ち時間です。
トランプを配る
裏カードを配った次は、絵柄(数字)のトランプを配ります。
裏カードと絵柄は別のストライプですが、表と裏の1枚のカードの様に見せていきます。
そのために、先ほど配った裏カードの下に絵柄トランプを配置していきます。
裏カードと同じように、何枚目のトランプを配るかで配置する場所を変えます。
そのために、変数「配った枚数」を0にリセットして使います。
裏カードを配るのと同じように変数「配った枚数」を1ずつ増やしながらリスト「配ったカード」に入っているトランプの数だけ繰り返します。
実際に配るプログラムは「配るを送る」で別の場所に作ったものを実行します。
絵柄トランプのスプライトの中に作りますので、あとで説明します。
カードをひっくり返す
裏カードをひっくり返して表に変えていきます。
実際には裏カードのスプライトを消して絵柄トランプが見えるようにします。
格好良く見えるように1枚ずつタイミングをずらしながら消していきます。
まず「1秒待つ」を置いています。
2つの目的があります。
一つは、
絵柄カードを配り終わるのを待つ目的です。
「〇〇を送る」で実行したプログラムは、プログラムが最後まで実行されるのを待たずに次のプログラムが実行されてしまいます。
そのため、5回実行している「配るを送る」が終了するのを待ちます。
二つ目は、
少し時間を空けてひっくり返した方が格好いいからです。
カードを配った瞬間にひっくり返し始めると、なんとなく落ち着きません。
この後は、5枚のカードを順番にひっくり返していきます。(実際にはスプライトを消しています)
裏カードを配る、絵柄トランプを配ると同じように、何枚目のカードをひっくり返すのか数えながら5回繰り返す処理になっています。
少し違うのは、変数「ひっくり返すカード」を新しく使っていること、変数「配った枚数」回数繰り返えしていることです。
違う変数を使っていますが、あまり意味はありません。(なんとなく気分です)
また、ひっくり返す処理を0.3秒ずつ空けています。
これも格好いいからです。
「ひっくり返すを送る」より前に「0.3秒待つ」がありますが、あとでも構いません。
コメント