備忘録(追記)
投稿者: ___
投稿日: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に移動することを確認する
他のステージを作成し、選択できることを確認する
とかそんな感じですかね。
やること大杉わろた
コメントする
コメントするには、ログインする必要があります。
やはり二次元配列ですかー。 それしか無いとは思いつつも、はてしなく面倒ですねぇ。
とりあえずお絵かきしながら考えることにします。