備忘録(追記)
投稿者: ___ 投稿日:2011/04/30 02:20
≪夢が見たい(雑記)
|
汝、述べぬこと無かれ≫
割と忘れっぽいので書きだしておくことにします。
ノベル→アクション x固定 背景変動 y方向常に加算 yが一定以上なら一定値固定 ステージ一杯ならステージ固定x変動 a[0],a[1],a[2]を構造体aとみれば、構造体配列はa[0][0],a[1][0],a[2][0],a[0][1]… ただようマリオ臭 キー入力ループで、必要なキーの入力を全て得る キー入力で押したフラグon、離したら押したフラグoff、擬似的に「押されている」判定 キー入力でメニュー画面に移行。イメージはミルキィとかラチェクラとか メニュー時、メニュー関数内のループに入るため後ろは不動 メニューに複数キャラ、選択でアクション 高い位置にジャンプ、前方ダッシュ、後ろにステップ、空中ジャンプなどなど 背景、足元は等速、後ろは低速だとそれっぽく見えるとか 敵あり?なし?当たり判定メンドクサイ 移動速度s=0、→でs++、←でs--、→離しでs--、←離しでs++ とか? イベントめんどい 巨大な穴を作る? マップデータの読み込みはできないから埋め込みか… 汎用関数群を作って、マップ/シーンごとにマップデータ変数をいじくればいいのか ノベルだから難所前でセーブとか無意味に。やったえちゃん ってなんでですかー
最初はノベルで将棋とか考えていたのですが、
(ノベルで作った将棋、ではなく、将棋を題材にしたノベル)
場合分けとかそれこそ可能性は無限大な訳で。
難なく諦めることに成功しました。やったね。
しかし、読ませるノベルってのは題材がなきゃ作れるもんでもないので、
それっぽい話考えるのも辛いもんですね。書き師さん凄い。
とりあえず今度はアクションゲームでも考えてみます。
***
さて、どうもエディタを開くつもりになれない疲れているようなので、
こっちにガシガシ分解して書いていくことにします。
エディタに突っ込んだ時にエラー吐いたら、そこを修正すればいいだけですし。
# 分解 ゲーム開始、関数読み込み、マップへ(最初からなら最初のマップ、ロードなら途中のマップ) 各マップで、冒頭マップデータの読み込み。 マップデータはどうしよう。後回し ゲーム メインループに入る。これはもう関数化していいかも ループ内で描写、キー入力判定、移動処理などなど キー入力判定、各種キーの押されているフラグのオンオフ。 移動処理、常に下方向に荷重をかける 慣性あり? 描写処理 メインがループ形状になっているのなら、制限時間も付けられそう 自機は性能低く? これだけ縛りでもクリアできるような構成とか素敵。 メニュー画面で複数キャラのカットイン メニューループに入る カットインはF_MovePict()を複数並列処理にすればいいのか いい気がする 大丈夫であってくれ クリックスルーでキー入力のみで支援キャラ選択か ゴールしたらスコアに反映でもさせるか?めんどうだなー 開始スクリプトでキャプター移動させる 移動先チャプターはマップ選択画面。これならスコアも行ける気がする
# code部 # マップ選択画面 cur = 1 #stage1 2 3 4 # 5 6 7 8 という並びをイメージする flag = true pos = createArray() num_stage = createArray() num_stage[1] = 123456 num_stage[2] = 234567 # ...ry while(flag) # マップ選択ループ startInput() while(hasInput()) # 取り出しループ takeInput() # 入力の取り出し if(isKeyDown("UP")) if(cur > 4) cur = cur-4 end elsif(isKeyDown("DOWN")) if(cur < 5) cur = cur+4 end elsif(isKeyDown("RIGHT")) if(cur%4 != 0) cur = cur+1 end elsif(isKeyDown("LEFT")) if(cur%4 != 1) cur = cur-1 end elsif(isMouseMove()) pos = getMousePosition() # x,y座標よりcur位置を計算する 暫定的に画面いっぱいに8等分されているとする cur = 1+(pos[0]/200)+(pos[1]/300)*4 elsif(isMouseDown() | isKeyDown("Z") | isKeyDown("ENTER")) flag = false # ループ脱出 end # ifここまで end # 取り出しここまで endInput() # ここで描写 # curの位置に選択カーソル表示 背景にマップ的な物?ただのメニューのような? end # 選択ループここまで changeChapter(num_stage[cur]) # マップ移動 # ******* # ******* # マップ読み込み処理 マップの形を決めてないので後回し flag = true fl_key_Ri = false fl_key_Le = false player_y = 600-32 # まあとりあえずこのあたり Accel_y = 0 map_x = 0 while(flag) # ゲームメインループ startInput() # map,playerの描写 while(hasInput()) takeInput() if(isKeyDown("UP") | isKeyDown("X")) F_Menu() # メニュー呼び出し elsif(isKeyDown("RIGHT")) fl_key_Ri = true # 右押しっぱオン elsif(isKeyUp("RIGHT")) lf_key_Ri = false # 右押しっぱオフ elsif(isKeyDown("LEFT")) fl_Key_Le = true # 左押しっぱオン elsif(isKeyUp("LEFT")) fl_key_Le = false # 左押しっぱオフ elsif(isKeyDown("Z")) if(Accel_y == 0) # 大地に立ってる者のみが Accel_y = -10 # 大地を蹴ることが許される end end # ifここまで end # 入力ループここまで endInput() if(fl_key_Ri) キー状態を検出したら描写のための計算開始 map_x = map_x+5 end if(fi_key_Le) map_x = map_x-5 end player_y += accel_y if(player_y >= 600-32) player_y = 600-32 accel_y = 0 end accel_y = accel_y-3 # 重力加速度3とかそのあたり # 当然関数化したほうが見ててキレイ waitTime(30) # 基本的にfps:30前後→1000/30=33.3 end # メインループここまで def F_Menu() # F_MovePictを複数同時に動かす # 支援キャラの数にもよるけど、とりあえず4人とする # whileでまとめたいので、同名の配列として考える # 一人当たりスプライト番号、現在の座標xy、移動経路xy s = 10 # s*30(ms)で処理を終了させる while (s > 0) cnt = 0 while(cnt < 4) getVariable("cutin")[1][cnt] = getVariable("cutin")[1][cnt]+getVariable("cutin")[3][cnt] getVariable("cutin")[2][cnt] = getVariable("cutin")[2][cnt]+getVariable("cutin")[4][cnt] # スプライトをセット end F_SetPosPict(a , xx , yy , 0) s = s-1 drawCanvas() waitTime(30) end # ここまでwhile カットインとカットアウトは真逆の処理なので関数化できそう flag = true ret = 0 while(flag) # 入力待ちメニューループ startInput() while(hasInput()) takeInput() if(isKeyDown("A")) if(ret == 0) ret = 1 end flag = false elsif(isKeyDown("S")) if(ret == 0) ret = 2 end flag = false elsif(isKeyDown("D")) if(ret == 0) ret = 3 end flag = false elsif(isKeyDown("F")) if(ret == 0) ret = 4 end flag = false elsif(isKeyDown("G")) if(ret == 0) ret = 5 end flag = false elsif(isKeyDown("H")) if(ret == 0) ret = 6 end flag = false elsif(isKeyDown("X")) ret = 0 flag = false end # ifここまで end # 入力ループここまで endInput() end # メニューループここまで return ret # 自機の状態変化戻り値 end
画像もマウス入力もキー入力も、簡単に扱えるからこそ、
そこら辺のゲームのような綺麗な表現をやってみたくなる。
金輪際コンソールで作るゲームとはおさらばだぜフゥーハハハー。
とりあえず確認順として
自機が動くことを確認する
メニュー画面に移行することを確認する
メニューからの戻り値でアクションを起こすことを確認する
平坦なマップをクリアできることを確認する
作られたマップをクリアすることを確認する
マップ選択画面のカーソルの動きを確認する
ステージ1に移動することを確認する
他のステージを作成し、選択できることを確認する
とかそんな感じですかね。
やること大杉わろた
コメントする
コメントするには、ログインする必要があります。
やはり二次元配列ですかー。 それしか無いとは思いつつも、はてしなく面倒ですねぇ。
とりあえずお絵かきしながら考えることにします。