プロデルで「さめがめ」(SAMEGAME)を作る


前回に続いて、ゲームを作ってみます。この記事では、「さめがめ」というパズルゲームを作ってみます。さめがめはたくさんのマシンに移植されている歴史の長い定番ゲームで、過去にはゲーム機でもソフトが発売されて広く知られています。個人的な話ですが、新しいPCや携帯電話を買ったら必ず入れるゲームで、シンプルなルールが好きでお気に入りです。

ゲームはシンプルではありますが、それなりに楽しめるレベルで作ろうとすると、色々プログラミング方法を考えるべき箇所があります。できるだけ一通りのことをご紹介したいので説明が長くなるかと思いますが、ぜひ最後までお読み頂ければと思います。

この記事では、プロデルの基本的な使い方については紹介していません。はじめての方は、ワンページマニュアルをご一読ください。

さめがめのルール

「さめがめ」 – Wikipadiaにルールが書かれています。簡単に説明すると画面にランダムに置かれたバブルから、上下左右で同じ色が2つ以上繋がったバブルを消していき、消せるバブルが無くなるまでのスコアを競うゲームです。

さめがめのメインロジック

さめがめの基本的な機能として次の点をプログラミングしていきます。

  • ランダムの色のバブルを敷き詰める
  • クリックしたバブルに隣り合う同じ色のバブルを消す
  • 消した部分に残っているバブルを詰める
  • スコアを計算する
  • 消せるバブルが残っているかチェックする

ランダムの色のバブルを敷き詰める

まず、プレイ画面に6×9のバブルを敷き詰めます。バブルには、キャンバスの円図形を使います。

新しいウィンドウを作り、キャンバスを貼り付けます。キャンバスは、ウィンドウ全体に表示されるようにドッキング方向を全体に設定します。

敷き詰めるために繰り返し文を縦横それぞれで2重に囲って指定します。このような書き方をネストと呼びます。繰り返し文では、YとXをそれぞれカウンタ変数として指定しておきます。バブルは40×40ピクセルで隙間なくに貼り付けます。

9回1からYにカウントして繰り返す
    6回1からXにカウントして繰り返す
        キャンバス1へ円を描いてバブル一覧(Y,X)とする
            その位置と大きさは、{20+(X-1)*40,20+(Y-1)*40,40,40}
            そのタグは、{X,Y}
            そのクリックされた時の手順は、バブルクリック
    繰り返し終わり
繰り返し終わり

それに加えて、バブルをクリックした時のイベント手順として「バブルクリック」手順を定義します。またバブルをクリックした時に、どの場所(X,Y)のバブルをクリックしたのか、分かるように「タグ」設定項目にバブルの(X,Y)座標を格納しておきます。

格納することでイベント手順が起こったときに「発生元のタグ」から格納したバブルの場所を調べることができます。その場所から「バブル一覧」配列に格納された該当する円図形が得られるので、その図形に対して背景色を変えるといった操作ができます。

メイン画面を表示する
待機する

メイン画面とは
  ウィンドウを継承する
  バブル一覧={}
  はじめの手順
    初期化する
    ーー貼り付けた部品に対する操作をここに書きます
    9回1からYにカウントして繰り返す
      6回1からXにカウントして繰り返す
        キャンバス1へ円を描いてバブル一覧(Y,X)とする
          その位置と大きさは、{20+(X-1)*40,20+(Y-1)*40,40,40}
          そのタグは、{X,Y}
          そのクリックされた時の手順は、バブルクリック
      繰り返し終わり
    繰り返し終わり
  終わり
  初期化する手順
  ーー自動生成された手順です。ここにプログラムを書き加えても消える場合があります
  この実質大きさを{500,611}に変える
  この内容を「メイン画面」に変える
  初期化開始する
  キャンバス1というキャンバスを作る
    その位置と大きさを{0,0,500,611}に変える
    その倍率を1.5に変える
    その実質大きさを{500,611}に変える
    そのドッキング方向を「全体」に変える
  初期化終了する
  この設計スケール比率を{144,144}に変える
  終わり
  バブルクリックの手順
    場所は、発生元のタグ
    X=場所(1)。Y=場所(2)
    バブル一覧(Y,X)の背景色は、黄色
    キャンバス1を更新する
  終わり
終わり

ここまでで実行すると、プレイ画面にバブルが敷き詰められました。バブルをクリックするとその色が変わることも確認できます。

次は、バブル色をランダムで設定します。 色をランダムに設定するには、バブルを作るときに「乱数」手順を使って「色一覧」の4つの色から色を決めます。 乱数を使って1~4までの番号をランダムで決めて、それに対応する色一覧の色を選びます。

メイン画面とは
  ・・・・
  色一覧は、{赤、青、緑、オレンジ}
  はじめの手順
    初期化する
    ーー貼り付けた部品に対する操作をここに書きます
    9回1からYにカウントして繰り返す
      6回1からXにカウントして繰り返す
        キャンバス1へ円を描いてバブル一覧(Y,X)とする
          その位置と大きさは、{20+(X-1)*40,20+(Y-1)*40,40,40}
          そのタグは、{X,Y}
          そのクリックされた時の手順は、バブルクリック
        【色番号】は、1から4までの乱数
        バブル一覧(Y,X)の背景色は、色一覧(色番号)
      繰り返し終わり
    繰り返し終わり
  終わり
  ・・・・
終わり

プログラム中の「・・・・」は、すでに紹介したプログラムを省略しているという意味です。プログラムを付け加えるときは、書く場所に注意しましょう。

実行すると、色とりどりのバブルが表示されます。さめがめっぽくなってきました。

同じ色のバブルを消す

クリックしたバブルから上下左右にある同じ色のバブルが消えるようにプログラミングしてみます。

ロジックを考える

クリックしたバブルで上・下・左・右の方向で隣り合う、同じ色のバブルを探して消します。同じ色のバブルが隣り合っていればそれを辿って、さらにそのバブルの上下左右で同じ色のバブルを探して消します。そうして辿った先のバブルで隣り合う同じ色のバブルがなければ、一つの前のバブルに戻って残りの方向のバブルを探していきます。

上下左右ですぐ隣り合うバブル

同じ色のバブルを辿る順番を図に2つ書きました。例えば、赤いバブルをクリックすると、上下左右のうち同じ色である上と右の順で1,2,3と辿ります。また緑のバブルではまず1から上=2、次に2の左=3と辿り、最初に戻って1の下=4、4の右=5と辿ってバブルを消していきます。

再帰呼出し

このようなバブルを順番に辿っていく処理は、再帰呼出しという方法でプログラミングできます。「再帰呼出し」とは、ある一つの単純な処理を手順に定義しておき、その中でさらに特定の条件を満たしたときに、自分自身の手順をさらに呼び出して処理する方法です。

今回の場合、「上下左右ですぐ隣り合う同じ色のバブルを探す」という単純な処理を「同色を辿る」手順として定義しておきます。その上で、その手順の中で、同じ色のバブルが見つかったときに、そのバブルについて、さらに同じ「同色を辿る」手順を呼び出す、という処理を実行させます。

手順の中で同じ手順を呼び出すと、連鎖的にずっと手順が実行され続けてしまいます。ただ、この場合、引数(基準となるバブルの座標)が異なりますので、辿るうちに次の条件でいずれ再帰呼出しの連鎖は止まるはずです。

  • 同じ色のバブルが見つからない
  • すでに辿ったバブルである
  • 壁にたどり着く

逆に言うと、プログラムを誤って連鎖が止まる条件が抜けていると、無限ループとなりフリーズしたり、スタックオーバーフローと呼ばれるエラーが発生したりします。注意しましょう。

ローカル変数

再帰呼出しでは、手順の中で使う変数をローカル変数として必ず宣言してください。 再帰呼出しでは手順が1回呼ばれる度に、その時の変数の値を保持しておく必要があります。同じ手順ではありますが、引数として渡されるバブルの座標や変数として記憶する値は違いますので、再帰によって変数がごちゃごちゃにならないように、すべてローカル変数として宣言しておきます。

ローカル変数を宣言するには、変数名【 】で囲って宣言します。

バブルを消す

バブルを消す際には、円図形の「表示」設定項目をオフ(×)に設定します。つまり図形そのものは存在したままにしておきます。このあと、空いたバブルを詰めるときに、円図形の位置はそのままにして再利用できるようにします。

  バブルクリックの手順
    場所は、発生元のタグ
    X=場所(1)。Y=場所(2)
    【タイプ】は、バブル一覧(Y,X)の背景色
    //上下左右で同じ色のバブルがあるかどうかチェックする
    もしXが2以上かつバブル一覧(Y,X-1)の背景色がタイプなら
    他でもしXが6未満かつバブル一覧(Y,X+1)の背景色がタイプなら
    他でもしYが2以上かつバブル一覧(Y-1,X)の背景色がタイプなら
    他でもしYが9未満かつバブル一覧(Y+1,X)の背景色がタイプなら
    そうでなければ
      返す
    もし終わり
    //同じ色のバブルを辿り探していき、消していく
    探索済一覧={}
    探索済一覧で{X,Y}からタイプと同色を辿る
    キャンバス1を更新する
  終わり
  【探索済一覧】で【座標】から【タイプ】と同色を辿る手順
    【X】=座標(1)
    【Y】=座標(2)
    もし探索済一覧の個数がY未満なら
    他でもし探索済一覧(Y)が無または探索済一覧(Y)の個数がX未満なら
    他でもし探索済一覧(Y,X)が○またはバブル一覧(Y,X)の表示が×なら
      0を返す
    もし終わり
    探索済一覧(Y,X)は、○
    もしバブル一覧(Y,X)の背景色がタイプでないなら
      0を返す
    もし終わり
    【個数】は、1
    もしXが2以上なら
      探索済一覧で{X-1,Y}からタイプと同色を辿ったものだけ個数を増やす
    もし終わり
    もしXがタイル幅未満なら
      探索済一覧で{X+1,Y}からタイプと同色を辿ったものだけ個数を増やす
    もし終わり
    もしYが2以上なら
      探索済一覧で{X,Y-1}からタイプと同色を辿ったものだけ個数を増やす
    もし終わり
    もしYがタイル高さ未満なら
      探索済一覧で{X,Y+1}からタイプと同色を辿ったものだけ個数を増やす
    もし終わり
    バブル一覧(Y,X)の表示を×に変える
    個数を返す
  終わり

プログラム中の「探索済一覧」配列は、その位置のバブルをすでに辿ったかどうかを判定します。 バブルを辿る際に「探索済一覧」配列 の(Y,X)に○を記録しておきます。手順が呼び出された時に、その位置に○が記録されていた場合には、すでに辿った(探している最中の)バブルですので何もせずに手順を終わりにします。

「同色を辿る」手順では、バブルを消すと同時にいくつのバブルを消したかその個数を数えておきます。「同色を辿る」手順を呼び出すと1つのバブルが消えますので、再帰呼出しした時の戻り値を、足し合わせていくと何個のバブルを消したかがわかります。消した個数は、今は使いませんが、後ほどスコア計算するときに使います。

では、ここまででプログラムを実行してみましょう。バブルをクリックすると、隣り合う同じ色のバブルが消えることが確認できるかと思います。

消した部分に残っているバブルを詰める

そして、消えたバブルの開いた部分に、上部にある残ったバブルを詰める処理をプログラミングします。また、縦方向の列にバブルがない場合は、左詰めするようにもします。

ロジックを考える

バブルを移動する方法を考えます。バブルを移動するという操作を細かく分けてみると次のような操作になります。

  1. 円図形を左下から上方向、右方向に辿って、消えた円図形(移動先)を探す
  2. 消えた円図形より、上で最初に表示されている円図形(移動元)を探す
  3. 移動元から移動先へバブルを移動させる
  4. バブルがすべて消えた列がある場合、すぐ右側の列のバブルを左へ移動させる

キャンバスにある円図形で非表示になっている図形があれば、その円図形より上に表示されている円図形から色だけ移動させます。移動させる時に、図形の座標はそのままにし、移動元から図形の「背景色」設定項目の色だけを移動先へ複製します。そして移動元の「表示」設定項目は、オフにしておきます。

バブルを詰める部分のプログラムは、次の通りです。消えたバブルや残っているバブルを探すためにたくさんの繰り返し文がネストされているので難しいかも知れません。コメントも付けておきましたので、何をしているか考えながら読んでみて下さい。

バブルを詰める手順
  //消えた部分のバブルを詰める
  タイル幅回1からXにカウントして繰り返す
    Yをタイル高さから1ずつ減らしながら0まで繰り返す
      もしバブル一覧(Y,X)の表示なら繰り返しを続ける
      移動タイルは、無
      Y2をYから1ずつ減らしながら0まで繰り返す
        もしバブル一覧(Y2,X)の表示なら
          移動タイルは、バブル一覧(Y2,X)
          繰り返しから抜ける
        もし終わり
      繰り返し終わり
      もし移動タイルが無なら、繰り返しから抜ける
      //見つかった上部のバブルを下へ詰める
      移動タイルの表示を×に変える
      バブル一覧(Y,X)の表示を○に変える
      バブル一覧(Y,X)の背景色は、移動タイルの背景色
    繰り返し終わり
  繰り返し終わり
  //左側へバブルを詰める
  (タイル幅-1)回1からXにカウントして繰り返す
    //底にバブルがあれば次の列を探す
    もしバブル一覧(タイル高さ,X)の表示なら繰り返しを続ける
    //バブルが残っている列を探す
    X2をXから1ずつ増やしながらタイル幅-1まで繰り返す
      もしバブル一覧(タイル高さ,X2)の表示なら繰り返しを抜ける
    繰り返し終わり
    //右の列から空いている左の列へ移動する
    Yをタイル高さから1ずつ減らしながら0まで繰り返す
      バブル一覧(Y,X)の表示をバブル一覧(Y,X2)の表示に変える
      バブル一覧(Y,X)の背景色をバブル一覧(Y,X2)の背景色に変える
      バブル一覧(Y,X2)の表示を×に変える
    繰り返し終わり
  繰り返し終わり
終わり

スコアを計算する

一度に消したバブルの数に応じて加算されるスコアが変わるようにします。一度に多くのバブルを消した場合には高得点になるようにします。

スコアは、 (一度に消せたバブル数-1)^2 で計算します。

「一度に消せたバブル数」は、先ほどの「同色を辿る」手順の戻り値でわかります。

ここでは、「メイン画面」種類に得点を記録するための「スコア」変数を定義します。消す度に得点を加算し、合計スコアを記録しておきます。

バブルクリックの手順
  場所は、発生元のタグ
  X=場所(1)。Y=場所(2)
  【色番号】は、バブル一覧(Y,X)の背景色
  もしXが2以上かつ、バブル一覧(Y,X-1)と色番号が同じ色なら
  他でもしXがタイル幅未満かつ、バブル一覧(Y,X+1)と色番号が同じ色なら
  他でもしYが2以上かつ、バブル一覧(Y-1,X)と色番号が同じ色なら
  他でもしYがタイル高さ未満かつ、バブル一覧(Y+1,X)と色番号が同じ色なら
  そうでなければ
    返す
  もし終わり

  探索済一覧={}
  探索済一覧で{X,Y}からタイプと同色を辿って削除数とする
  バブルを詰める

  スコアを(削除数-1)^2だけ増やす
  得点ラベルの内容を「Score: [スコア]」に変える
  キャンバス1を更新する
終わり

またスコア表示のためのキャンバス文字をキャンバスに作ります。ついでにタイトルラベルも作っておきます。

はじめの手順
・・・・
  キャンバス1へ「SAME☆GAME」という文字を描く
    その位置は、{270,20}
    そのフォントを「メイリオ」に変える
    その文字色を緑色に変える
    その文字サイズを18に変える
  キャンバス1へ「Score:0」という文字を描いて得点ラベルとする
    その位置は、{280,80}
    そのフォントを「メイリオ」に変える
    その文字色を緑色に変える
    その文字サイズを18に変える
・・・・
終わり

消せるバブルが残っているかチェックする

消せるバブルがなくなった段階でゲームオーバーとなります。消せるバブルが残っているかどうかは、画面上のバブルを一つ一つ調べ、前後に同じ色にバブルがあるかどうかをチェックします。今回は上下左右で2つ同じ色があることが判別できるばいいので再帰呼出ししなくてもOKです。

すべて消えたかどうかを求める手順
  タイル高さ回1からYにカウントして繰り返す
    タイル幅回1からXにカウントして繰り返す
      もしバブル一覧(Y,X)の表示でないなら繰り返しを続ける
      【色番号】=バブル一覧(Y,X)の背景色
      もしXが2以上かつ、バブル一覧(Y,X-1)と色番号が同じ色なら
      他でもしXがタイル幅未満かつ、バブル一覧(Y,X+1)と色番号が同じ色なら
      他でもしYが2以上かつ、バブル一覧(Y-1,X)と色番号が同じ色なら
      他でもしYがタイル高さ未満かつ、バブル一覧(Y+1,X)と色番号が同じ色なら
      そうでなければ
        繰り返しを続ける
      もし終わり
      ×を返す
    繰り返し終わり
  繰り返し終わり
  ○を返す
終わり

なお、「~かどうかを求める手順」という名前で手順を定義すると、その名前の手順は、戻り値を必ず返す必要がある「名詞手順」として定義されます。つまり、手順名は「すべて消えた」という名前になります。

ゲームオーバーを表示する

そして、消せるバブルがなければ、「FINISH!」と画面に表示させてゲームを終了させます。FINISHI!を表示するためにあらかじめ、フィニッシュラベルというキャンバス文字を作っておきます。

ゲームオーバーの判定は、バブルをクリックした時に「すべて消えた」手順を呼び出して毎回チェックします。もし「すべて消えた」手順の結果が○なら、フィニッシュラベルを表示させます。

はじめの手順
・・・・
  キャンバス1へ「FINISH!」という文字を描いてフィニッシュラベルとする
    その位置は、{60,150}
    その文字色を緑色に変える
    その文字サイズを30に変える
    その表示を×に変える
・・・・
終わり

バブルクリックの手順
・・・・
  もしすべて消えたなら
    フィニッシュラベルの表示を○に変える
  もし終わり
  キャンバス1を更新する
終わり

改良しよう

リトライする

ゲームオーバーになった場合は、続けて次のゲームができるようにリトライ機能を付けておきましょう。「FINISH!」文字と同じように、「RETRY」のキャンバス文字を作っておき、ゲームオーバーになった時に表示させます。またRETRYをクリックした時に、ゲーム内容をリセットできるように「リトライする」手順を定義します。

リトライ画面

ついでにハイスコアを表示するキャンバス文字も作っておきます。ハイスコアは次で説明します。

はじめの手順
・・・・
  キャンバス1へ「RETRY」という文字を描いてリトライラベルとする
    その位置は、{60,220}
    その文字色を青に変える
    その文字サイズを30に変える
    その背景色を白に変える
    その線色を青に変える
    その表示を×に変える
    その大きさ調整を○に変える
    そのクリックされた時の手順は、リトライする
・・・・
  キャンバス1へ「HiScore:0」という文字を描いて最高得点ラベルとする
    その位置は、{280,120}
    そのフォントを「メイリオ」に変える
    その文字色を緑色に変える
    その文字サイズを18に変える
・・・・
終わり

リトライする手順
  タイル高さ回1からYにカウントして繰り返す
    タイル幅回1からXにカウントして繰り返す
      バブル一覧(Y,X)の表示を○に変える
      【タイプ】は、1から4までの乱数
      バブル一覧(Y,X)の背景色は、色一覧(タイプ)
    繰り返し終わり
  繰り返し終わり
  フィニッシュラベルの表示を×に変える
  リトライラベルの表示を×に変える
  スコア=0
  得点ラベルの内容を「Score: [スコア]」に変える
  最高得点ラベルの内容を「HiScore: [ハイスコア]」に変える
  キャンバス1を更新する
終わり

「リトライする」手順では、バブルを初期状態に戻します。つまり、「バブル一覧」配列にある円図形を再び表示させて、色も新しくランダムに決め直します。さらに、フィニッシュラベルとリトライラベルも再び隠します。スコアについてもリセットします。

「はじめの手順」のように新しく図形を作る必要がないこと以外は、やることは同じです。

ハイスコアを記録する

ゲームをリトライできるようになりましたので、最高スコアを記録しておくようにしましょう。すでにキャンバス文字は作りましたが、それに加えて、種類変数として「ハイスコア」を宣言してください。また、各ゲーム終了時に、スコアがハイスコアよりも大きければハイスコアを変えるプログラムを書けば、ハイスコアが記録できるようになります。

メイン画面とは
・・・・
  スコア=0
  ハイスコア=0

  バブルクリックの手順
・・・・
    得点ラベルの内容を「Score: [スコア]」に変える
    もしスコアがハイスコアより大きいならハイスコアは、スコア
・・・・
  終わり
・・・・
終わり

ちらつきを抑える

ゲームをテストプレイしていると、ちらつきが発生するのを感じるかと思います。キャンバスは、図形に変更が加えられる度に再描画しますので、一度に複数の図形の設定を変えると、ちらつきが発生して遅く感じることがあります。

このようなちらつきを抑えるには、キャンバスの自動更新を×に設定します。ただし、自動更新をオフにすると、「更新する」手順が実行されるまで、キャンバスの画面表示が反映されませんので、最後に 「更新する」手順 を呼び出すことを忘れないようにしましょう。

完成!

これで「さめがめ」ゲームが完成しました!
テストのつもりで実行したのに、つい何度でも遊んでしまいます。

完全なソースコードは、こちらに掲載していますので、プログラム掲示板もご参照下さい。

バブルを画像にする

バブルを円図形で描いていましたが、円の代わりに画像を使うこともできます。画像に変える場合は、円図形の代わりに「画像図形」を使います。また「色一覧」配列の代わりに、バブルに使用する画像を格納した「タイプ一覧」配列を定義します。

なお画像は、「いらすとや」の果物イラストを拝借しました。

さらに、バブルの比較も色から画像に変わりましたので、すでに出来上がったプログラムの何カ所か書き換える必要があります。具体的には、「背景色」設定項目から「画像」設定項目へ書き換える必要があります。

次のプログラムは、画像版のプログラムの断片です。書き換える場所などをよく注意しながら改良してみて下さい。

//さめがめ(画像版)//
巨峰画像という画像(「画像\fruit_budou_kyohou.png」)を作る
クランベリー画像という画像(「画像\fruit_cranberry.png」)を作る
レモン画像という画像(「画像\fruit_lemon_tategiri.png」)を作る
桃画像という画像(「画像\fruit_momo.png」)を作る
りんご画像という画像(「画像\fruit_ringo.png」)を作る
オレンジ画像という画像(「画像\fruit_slice10_orange.png」)を作る

メイン画面とは
・・・・
  タイプ一覧は、{巨峰画像、クランベリー画像、レモン画像、桃画像、りんご画像、オレンジ画像}
・・・・

  はじめの手順
・・・・
    タイル高さ回1からYにカウントして繰り返す
      タイル幅回1からXにカウントして繰り返す
        キャンバス1へ画像を描いてバブル一覧(Y,X)とする
          その位置と大きさは、{20+(X-1)*40,20+(Y-1)*40,40,40}
          そのタグは、{X,Y}
          そのクリックされた時の手順は、バブルクリック
        【タイプ】は、1から(タイプ一覧の個数)までの乱数
        バブル一覧(Y,X)の画像は、タイプ一覧(タイプ)
      繰り返し終わり
    繰り返し終わり

  リトライする手順
    タイル高さ回1からYにカウントして繰り返す
      タイル幅回1からXにカウントして繰り返す
・・・・
        バブル一覧(Y,X)の画像は、タイプ一覧(色番号)
      繰り返し終わり
    繰り返し終わり

  【バブル図形】と、【タイプ】が、同じタイプかどうかを求める手順
    もしバブル図形の表示でないなら×を返す
    (バブル図形の画像がタイプ)を返す
  終わり

  バブルを詰める手順
    //消えた部分のバブルを詰める
    タイル幅回1からXにカウントして繰り返す
      Yをタイル高さから1ずつ減らしながら0まで繰り返す
・・・・
        もし選択タイルが無なら、繰り返しから抜ける
        //見つかった上部のバブルを下へ詰める
        選択タイルの表示を×に変える
        バブル一覧(Y,X)の表示を○に変える
        バブル一覧(Y,X)の画像は、選択タイルの画像
      繰り返し終わり
    繰り返し終わり
    //左側へバブルを詰める
    (タイル幅-1)回1からXにカウントして繰り返す
・・・・
      //右の列から空いている左の列へ移動する
      Yをタイル高さから1ずつ減らしながら0まで繰り返す
        バブル一覧(Y,X)の表示をバブル一覧(Y,X2)の表示に変える
        バブル一覧(Y,X)の画像をバブル一覧(Y,X2)の画像に変える
        バブル一覧(Y,X2)の表示を×に変える
      繰り返し終わり
    繰り返し終わり
  終わり
・・・・
さめがめ画像対応版

バブルを画像に変えるだけで、ゲームの機能は同じでもずっと面白くなったかと思います。

難易度を変える

今回の例では、バブルの大きさを40px×40pxで、バブルの縦横数を6×9に設定しました。例えば、バブルのタイルの幅と高さを倍にして、バブルのサイズを小さくすれば、より難易度を高めることができます。

メイン画面とは
・・・・
  タイル幅=12
  タイル高さ=18

  はじめの手順
・・・・
    キャンバス1へ円を描いてバブル一覧(Y,X)とする
      その位置と大きさは、{20+(X-1)*20,20+(Y-1)*20,20,20}
・・・・
  終わり
終わり

まとめ

長文となる解説記事となりましたが、さめがめのプログラムは、150行ほどで出来上がりました。プロデルでは描画のために必要な機能があらかじめ整っているため、C++やC#よりも短いプログラムで気軽に作れることが、プロデルの魅力の一つです。

また、プロデルのゲーム作りで楽しい所は、アプリストアやマーケットプレイスでダウンロードできるゲームとは違い、自分で自由にカスタマイズができることです。プログラムそのものがほぼ意味が分かる日本語で書かれていますから、ロジックの詳しい流れが理解できなくても何をしているか、どこをいじればよいのか、理解しやすいのではないかと思います。よく分からなくても色や画像を差し替えるというだけでも十分楽しめるかと思います。

ぜひプロデルでゲーム作り楽しんでみてください

  • 続きを読みたい (0)
  • いいね (1)

コメントを残す