【 PentaPiece 製作過程 その1 】 |
---|
Home | PC-6001mkII | Program | etc |
このページでは、PentaPieceのV1.0作成過程を書いています。 |
2015/08/01〜03:はじめに |
不意に、HSPプログラムコンテスト開始のツイートが流れてきた。もうそんな季節か。 軽く応募要項を見たところ、今年もHSPTV部門は残っているようだ。ならば今年もHSPTV部門で作るしかあるまい。まだ何もネタはないけど。 なにか時事ネタに沿った方が良いかな。今年の出来事といえば...うるう秒か。と考えを巡らせるが、どうもゲームとして成立するほど発展する気配が感じられない。 むう、どこかにネタが落ちてないかな。 それから2日たった朝、職場について始業前に軽く寝たあたりで、元ネタが舞い降りた。そうだ、スプラトゥーンだ。あの、チームで協力して領土を広げるという仕組みは使えるのではないだろうか。 といっても多人数同時のアクションゲームを作るのは色々無理がある。でも何か他の形で実現できそうな気もするし、とりあえず、この方向で考えてみよう。 |
2015/08/03:やりたいこと |
テトリス風のピースを置いて陣取り合戦をする思考型ゲーム。こんなのでどうだ? とりあえず、できるかどうかはわからないけど、基本的なルールを考える。
|
2015/08/03〜04:ブロックパターン |
まずは、ブロックのパターンについて調べる。 回転パターンは同一と考えると、4ブロックパターンはテトリスによくある7パターン。 5ブロックパターンは、...えーと、以下の18パターン。 合わせて25パターンか。6x6のフィールドで毎回必ず空白が1つ以上埋まる事を考えると、そんなにパターン数は必要ないか。プログラムサイズの制限もあるし、この時点で、5ブロックパターンを採用する。 5ブロックパターンは、全て5x3の範囲内に収まる。つまり、5x3の15bitの情報があれば1パターンの回転パターンが出来上がる寸法だ。5bit部分の32種類を「0」(キャラクタ番号48)〜「O」(キャラクタ番号79)に割り振って、3文字の情報に変換する。 回転パターンは、データを使い回す事を考えると、ブロックデータは3x18=54バイト。このデータを元に、5x5に展開するための処理を作成して、データが正しくできたか確認する。 まあ、こんな所か。 start.ax:821/6,000バイト |
2015/08/05〜06:ルール不備 |
昨日は1パターンを5x5=25の配列変数に展開していたのだが、なんかムダじゃないか? 5ブロックパターンなら1パターンあたり5つの情報で十分だろう、という事で、パターン内の5つのブロックを左上部分からの相対位置になるよう、パターン生成ルーチンを作り直した。 最低1つは空白部分を埋めなければならない というルール、よくよく考えると、四隅しか空白がない状態で十字ピースが来たら置けないぞ!? うーむ、パスをする処理を入れる必要が出るのかな、サイズ的に処理を入れるのは辛そうだけど。まあ、後日考える事にしよう。 あとは、画面表示を行うためにピースのキャラクタを考える。●に★を散らすような感じでどうかな?某ボールみたいだけど。 start.ax:1,530/6,000バイト |
2015/08/08:ピース判定 |
「空白部分を含まないと置けない」判定処理を作成する。 簡易的にピースを移動する処理を作成し、ピースを置く位置に空白が含まれるか否かでカーソルの表示を変えるようにする。 端への移動制限をまだつけていないので、本来置けない部分でも置ける判定をしてしまう。ピースの回転でも問題になるだろうし、画面端の自動調整も必要かな。 start.ax:2,130/6,000バイト |
2015/08/09:思考の試行 その1 |
カーソルが画面内に収まるようにする処理を実装する。 カーソルの一部が画面端に来たとき、画面上部なら下に、画面下部なら上に、画面左または右の場合はカーソルの現在値によって左または右にずらし、再度端判定する。これで概ね良さそうだ。 次に、今回の肝とも言える敵の思考ルーチンだ。とりあえず、ピースの要素ごとに以下のように得点の損得勘定で計算し、合計にランダム値を足した値が一番大きいものを採用する事にする。
それなりには動いているようだが、何度か試すと、まだエラーが出る。どこかつまらない間違いをしているんだろうけど、間違いを見つけるのは面倒そうだ。 start.ax:3,975/6,000バイト |
2015/08/10:思考の試行 その2 |
敵の思考ルーチンを見直す事にする。 空白が1つ以上ある場所にしかピースが置けないように処理を書いたはずだが、そうならない場合があるようだ。変数名が適当過ぎてプログラムが見渡しにくいので、この機会に変数名を整理する事にする。 変数名を整理していくうちに、置いてはいけない場所にピースを置くバグも治ったようだ。変数名でも間違えていたのかな? こうして、最低限の動きができるようになったので、何度かテストプレイをする。 敵の動きは、概ね最初に考えた通りになっている。なのだが...なにか物足りない。 ピースを置くときの自由度が大きいこともあるが、せっかく陣地のレベルを上げても、敵に一瞬で取られてしまう。最後にピースを置いた側が圧倒的に有利になるし、高レベルの陣地が早々に消されて全体的にちまちまとした展開になってしまう。 なら、どうすればいいんだろう?とりあえず、フィールドの大きさを8x8と少し大きくしてみたが、面白さは改善されなかった。 start.ax:4,633/6,000バイト |
2015/08/11:思考の試行 その3 |
やっぱり、ルール自身を変えないとダメか。という事で、散歩がてらルールを考える。 なにかのお助けキャラを出すか?地形効果を入れるか?特定の条件で強くなるようにするか?どれもなにかしっくり来ない。もっとシンプルなルールでやりたいのだが。 まずは、少し自由度を減らすか。ピースを置く条件を「空白を1つ以上含む」→「自軍の陣地を1つ以上含む」にしたらどうだろうか?じわじわと侵略していく感じになるはずなので、少し良さげかな。 という事で実装してみる。このルールだと、最初に陣地がないと何も置けないので、初期状態で対角線上に1マスずつ陣地を配置した状態にする。 よしできた。という事でテストプレイをする。 うーむ、少しだけ良くなったような気もするが、まだなにか足りない。 start.ax:4,884/6,000バイト |
2015/08/12:思考の試行 その4 |
ここらで、気分を変えてタイトル画面を作成しよう。 最終的には、ランキング情報を読んで色別総得点のグラフ化をしたい。という感じで作り始める。が、 仮の値で棒グラフを描いた時点で飽きた。その変わり新しいルールを思いついた。ピースの強さを入れよう。 ピースが掛かっている陣地のうち一番高いレベルをピースの強さにし、ピースの強さが敵陣のレベル以上の場合にのみ敵陣を消せるようにする。あとは、得点にもピースの強さを掛け合わせるようにする。 レベルを上げる必然性が出来た事もあって、戦略的なルールになったような気がする。 start.ax:6,038/6,000バイト |
− | PentaPiece 製作過程 | その2 |