2024年06月30日
【ゲーム制作】テーブルゲーム 第18回
テーブルゲーム 第18回です。
相手のカード選択ロジックを考えます。
「神経衰弱」ですので思考ルーチンはありません。
淡々と作業を繰り返すロジックとなります。
これも今作の最難関ロジックの一つです。
考え方ですが、自分が「神経衰弱」をプレイする時の考え方をフロー化します。
そのために用意してあったのが、場ワーク先頭1ビットのオープンフラグ。
「これは何のためにあるんだろう?」と、思われた方もいるかと思いますが、敵のカード検索用のフラグです。
一度捲られたカードは数字がオープンになっています。
と、いう事はそのカードは普通1枚目には捲らず、1枚目は捲った事のないカードを捲り、既にオープンになっている数字を引く事を祈ると思います。
それに、既に捲られたカードの数字と同じ数字を、2枚目に捲って外した時は、相手にそれを取られてしまいます。
と、言ったように一般的な「神経衰弱」の手法を再現するためのフラグです。
で、上記手法をそのままロジック化します。
・場ワーク全体で既に捲られたカードで2枚同じ数字がないかチェック
・あればその2枚両方捲って、「敵取得カード枚数」を+2、「場残枚数」を-2し、もう一度
・なければ捲られていないカードからランダムに1枚目を捲る
・場ワーク全体から既に捲られたカードに、1枚目捲った数字と同じ数字がないかチェック
・あれば捲って、「敵取得カード枚数」を+2、「場残枚数」を-2し、もう一度
・なければプレイヤーターンへ
・「場残枚数」が「0」になったらゲーム終了、BASICへ
考え方は単純です。
次回は今回考えたロジックを組んでいきます。
2024年06月29日
【ゲーム制作】テーブルゲーム 第17回
2024年06月28日
【ゲーム制作】テーブルゲーム 第16回
テーブルゲーム 第16回です。
1枚目を捲った後、2枚目の選択に移る時の処理方法を考えます。
現状は、捲ったカードの数字を覚える時間が必要かな?と思い、
・1枚目オープン
・入力待ち
・ボタン打下→2枚目選択可能
・2枚目オープン
・入力待ち
・ボタン打下
の処理となっていますが、思いのほか操作性が悪い…。
なんだかボタン押しまくりです…。
少しでも解り易いようにと、入力待ちの際は「指カーソル」を消してみたりと、色々試してみましたが余り改善しない…。
相手(CPU)がカード捲る際も同じ処理なので、ボタン打下回数が半端ない回数になります。
…と言う訳で、カード捲って伏せられるまでを時間制にします。
具体的には、捲ってから数秒すると、勝手に裏返るようにします。
この数秒が長いと、今度は待ち時間が気になる…。
んー、ストレスの掛からないバランスって難しい…。
いろいろ試してみましたが、2秒くらいがいい感じだと感じました。
次回は画面デザインを見直します。
2024年06月27日
【ゲーム制作】テーブルゲーム 第15回
テーブルゲーム 第15回です。
今回は、プレイヤーのカード選択を組んでいきます。
選択カーソル(指)は横に16ドット(2FONT)、縦に48ドット(6FONT)単位で移動します。
一気に端から端まで動かないように、1回動かず度にリピート禁止処理をします。
1枚目を選んでボタンを打下したら、指定座標にサブルーチンで作った「カード表面描画」をし、ボタン再打下で「カード裏面右半分描画」をして2枚目選択へ。
2枚目選んでボタンを打下したら、指定座標に「カード表面表示」をし、1枚目と2枚目の場ワーク値下5ビット(数字)を比較し、等しければプレイヤー取得枚数を+2、場残枚数を-2し、ボタン再打下で「場表示」してもう一度1枚目選択へ。
等しくなければ場ワーク値先頭1ビット(開いたフラグ)を立て、ボタン再打下で「場表示」し相手のターンへ。
場残枚数が「0」ならばゲーム終了、BASICへ戻る。
うーん、今回も上手く動いてくれません…。
試行錯誤の上、無事動くようになりました。
やっぱり単純なミスでした…。
凹む…。
次回はカードを捲った後の操作性改良をします。
2024年06月26日
【ゲーム制作】テーブルゲーム 第14回
テーブルゲーム 第14回です。
今回もサブルーチンの続きです。
最後のサブルーチンとなります。
場ワークにカードをシャッフル設定するロジックを考えます。
処理の考え方は、
・カードカウンタ(1バイト)を用意し、下5ビットを「1」から開始し、「13」を超えたら下5ビットを「1」にして2・3ビットを+1(記号変更)する
・52枚分カウントしたら終了(52枚終えた時点で、カードカウンタの2・3ビットは「3」、下5ビットは「13」)
・場ワーク先頭アドレスに「52」までの乱数を加えた位置の値が「0」(未配置)ならばそのアドレスにカードカウンタ値を設定し繰り返す、「0」でなければ乱数再取得へ
プログラム組めたのでテストします。
実行しても結果が見えないので、見えるように場ワークを表示するプログラムを組んで実行。
何度かテストしましたが、良い感じです。
次回はプレイヤーのカード選択を組んでいきます。
2024年06月25日
【ゲーム制作】テーブルゲーム 第13回
2024年06月24日
【ゲーム制作】テーブルゲーム 第12回
2024年06月23日
2024年06月22日
【ゲーム制作】テーブルゲーム 第11回
テーブルゲーム 第11回です。
前回考えたロジックを基にサブルーチンを組んでいきます。
まずは、今作最難関のサブルーチンのひとつ、場に裏返ったカードを並べ描画するサブルーチンです。
処理の考え方は、
・画面を場の色(緑)で塗りつぶし
・カードカウンタを0から開始
・カードカウントを13(横枚数)で割った商を縦座標とする
・割った余りを横座標とする
・縦座標に6を掛けた座標と、横座標に2を掛けた座標のVRAMアドレス算出する
・場ワークのカードカウンタ位置の値を調べ「0」(取得済)ならば描画無し
・「0」でなければカードありとし、カード裏側を描画
・カードカウンタを+1し52枚分繰り返し
なかなか、難しそうです。
まず準備として、場ワーク(52バイト)を用意。
最後の&HFFは場ワークの終わりフラグ。
次に裏返ったカードのキャラクタデータを用意。
次に場を緑のキャラクタで埋めるサブルーチン。
最後に、裏返ったカードを並べ描画するサブルーチンです。
プログラムが組めたのでテストします。
場ワークがすべて「0」では何も表示されないので、仮でオール「1」設定。
うーん、なかなか手ごわい!
上手く動いてくれません…。
試行錯誤の上、なんとか無事動くようになりました!
単純なミスでした…。
ロジック考えるのに凄い時間かかりました…。
次回もサブルーチンの続きです。
2024年06月21日
【ゲーム制作】テーブルゲーム 第10回
テーブルゲーム 第10回です。
今回はメインのマシン語設定プログラムを用意します。
メインのマシン語設定プログラム「BINSET.BAS」を用意します。
こちらもExcelで作成して、「.BAS」にコンバートして、「.BIN」ファイル作成。
今作のサブルーチンは、今まで作成したものの中から
■SPRITEセット
■FONTセット(上・中段、下段の2本)
■乱数発生
■16進数を10進数に変換
■VRAMアドレス計算
■中段画像表示画面セット(タイトル表示用)
■全SPRITEを隠す
■8ビット掛け算
■8ビット割り算
を用意します。
そして数字表示用に、
■数値表示(自分取得枚数、敵取得枚数、経過時間表示、場残枚数)
を作成。
これら以外のサブルーチン(主に描画関連)は新しく作成します。
次回は、各々サブルーチンを組んでいきます。