忍者ブログ

マドノマグラの初心者自作ゲーム制作日誌 迷走モード

プログラミング初心者が自作ゲームを作成してみようとする動きを記す。現在迷走中。

ブログ履歴

2010/11/06: HSP3.22の環境を整えてみる
2009/11/09: Rubyで適当版自分用関連記事リンク作成プログラムを作る
2009/06/04: Visual C++(DXライブラリ使用)の環境を整えてみるも休止状態に
2009/03/17: ActionScript勉強の環境を整えるも結局休止状態に
2006/07/15: とりあえず分岐型ゲームを作る グリーンタワーVer1.2 ダウンロード(zip)
2006/07/02: ブログスタート。NScripterで何かを作ろうとする

[PR]

×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

HSPで作ったじゃんけんゲーム草稿版 Ver 1.04

Ver1.03から適当にいじる。マイナーチェンジ程度なので、そう大したことはしていない。基礎編ってことで、石、鋏、紙と順番に戦って、3回勝てばエンディング1。そしてエンディング2も用意した。

あと、デバッグ用でもないけれど、強制勝ち、強制負けボタンも常備しているので、行き詰っても、適当に処理できる形でもある。

そろそろ飽きてきたなあ。別のことでもしようか。




; じゃんけんゲームを作る5
cls
randomize
screen 0,480,360
title "じゃんけんゲーム(基礎編) Ver.1.04"

logo = "じゃんけんゲーム"

;OP画面最初。logoの文言が画面下から上がってくる構図。
*opening_act
;文字せり上がり中にクリックすることで、*openingへ移動
onclick goto *opening
repeat 30
cls 4

font msgothic,48,1
pos 44,360-cnt*10+4
color 255,255,255
mes logo
pos 40,360-cnt*10
color 255,0,0
mes logo
wait 5

loop

;OP画面。文字がせりあがった後、固定。
*opening
;クリックでの*openingへの移動封印
;ver1.03からの変更点。ボタンをもう1個追加。のちのゲーム拡張のため。
onclick 0
cls 4
font msgothic,48,1
pos 44,64
color 255,255,255
mes logo
pos 40,60
color 255,0,0
mes logo

color 255,255,255
font msgothic,12,1
pos 330,330
mes "(c)2010 マドノマグラ"

objsize 200
pos 140,240
button "基礎編スタート",*start_normal
button "基礎編エンディング",*k_ending
stop

*start_normal
;敵データ。テキストファイルからの読み込み準備、バッファ数値は適当
;基礎編と、本編とに分けるときには、このnoteloadのファイルをそれぞれ変える予定。
sdim TXT_ENEMY,64

notesel TXT_ENEMY
noteload "j-enemy.txt"

;データ置き場
;ver1.03からの変更点。はプログラム位置の変更
;自分の名前とHP。3回まで負けてよし
player_name = "プレイヤー"
player_hp = 3

;各手の使用回数
;ver1.03からの変更点。はプログラム位置の変更
;ver1.03からの変更点。練習編の初期設定はチョキ1回、パー2回に変更。
p_guu = 0
p_choki = 1
p_paa = 2

;ver1.03からの変更点。敵番号についてのプログラム位置の変更
enemy_number = 0

;データスタジオという名の、念のためのラベル
*data_studio
;いったん黒でボタンデータの破棄
cls 4

;敵の名前、HP、タイプ、あとは、背景色のための色指定番号
;いずれ、文字列も獲得する予定。
;ver1.03からの変更点。敵番号についてのプログラム位置の変更、色指定番号も固定化(いずれ削除)
enemy_name = ""
enemy_hp = 0
enemy_type = 0
enemy_red = 0
enemy_green = 255
enemy_blue = 255

;ver1.03からの変更点。メッセージ用の配列
dim talk_content,4
talk_content(0)=""
talk_content(1)=""
talk_content(2)=""
talk_content(3)=""

;言葉置き場だけど、これが必要ないプログラムの打ち方はあるかも
j_navi = ""

;自分と敵の出した手の数値化
p_way = 0
e_way = 0

;HPデータ受け渡し用
change_hp = 0

;敵の出した手の値
enemy_mind = 0

;出した手の名前の配列化。
dim way,6
way(0) = "グー"
way(2) = "チョキ"
way(5) = "パー"

;ボタン置き場。強制的に勝ち負け誘導するボタン含む
objsize 40
color 0,0,0
pos 30,320
button "グー",*guu
pos 130,320
button "チョキ",*choki
pos 230,320
button "パー",*paa

pos 380,320
button "勝ち",*win
pos 430,320
button "負け",*lose

;ボタン一時使用不可
gosub *button_unable

;物語パート。気が向けば作る
*story_part
;新しい試合になるごとに黒から徐々に明るく画面変化
repeat 16
color cnt*17,cnt*17,cnt*17
boxf
wait 5
loop

;ver1.03からの変更点。基礎編は紙に勝った時点でひとまずおしまい。
;もし紙(enemy_number = 2)に勝ったら基礎編ED
;今後、偽データ(enemy_number = 3)のダミーデータを踏まえて
;enemy_number = 4からを、本編の敵データにするか、別のテキストファイルを用意するかは検討中。
if ((enemy_number > 2) & (enemy_number < 4)):goto *t_ending:stop

;敵の番号から、テキストファイル経由で敵のデータを読み込み、
;名前とHPとタイプ、画面上方の背景色の選択(いつか画像を入れ込むための練習ダミー)
;いずれ、文字列も獲得する予定。
notesel TXT_ENEMY
noteget S, enemy_number * 7: enemy_name = S
noteget S, enemy_number * 7 + 1: enemy_hp = int(S)
noteget S, enemy_number * 7 + 2: enemy_type = int(S)
noteget S, enemy_number * 7 + 3: talk_content(0) = S
noteget S, enemy_number * 7 + 4: talk_content(1) = S
noteget S, enemy_number * 7 + 5: talk_content(2) = S
noteget S, enemy_number * 7 + 6: talk_content(3) = S

;画面上方の背景色描画(いずれは消去)
color enemy_red,enemy_green,enemy_blue
boxf 30,50,450,180

;メッセージウィンドウ
;メッセージウィンドウ外枠これは、最初の表示でずっと固定でいい。
color 255,255,255
boxf 27,217,453,303

;アクションパートという名のジャンケンパート
*action_part


;手の使える回数比較で、ボタン使用が可能か不可能かチェック
if p_guu > 0:objenable 0,1
if p_choki > 0:objenable 1,1
if p_paa > 0:objenable 2,1

objenable 3,1
objenable 4,1

;自分と敵の名前・HPデータ部分を一時消す(白くする)ための部分
gosub *screen_clearcolor
;自分と敵の名前・HPデータ部分を一時消す
boxf 0,0,480,50
;手の回数データを一時消す
boxf 0,320,480,360

;自分と敵の名前・HPデータ部分の書き込み
pos 30,10
color 255,0,0
mes "ENEMY: " + enemy_name
change_hp = enemy_hp
gosub *HP_star

color 0,0,255
pos 300,10
mes "PLAYER: " + player_name
change_hp = player_hp
gosub *HP_star

;ボタンの横に残り使用回数表示
color 0,0,0
pos 80,320
mes "残" + p_guu + "回"
pos 180,320
mes "残" + p_choki + "回"
pos 280,320
mes "残" + p_paa + "回"

;バトル終了判定
if enemy_hp < 1:goto *win:stop
if player_hp < 1:goto *lose:stop

;メッセージウィンドウ内枠の文字消去と文字表示。
;ver1.03からの変更点は文字表示のサブルーチン化
gosub *message_window

stop
;ボタン押した際の行動、勝ち負けボタンはプログラムの最後の方
*guu
p_way = 0
p_guu -= 1
goto *enemy_turn
*choki
p_way = 2
p_choki -= 1
goto *enemy_turn
*paa
p_way = 5
p_paa -= 1
goto *enemy_turn

;敵の出す手の判断。
*enemy_turn
;一時的にボタン不可
gosub *button_unable

;ランダムで得た数値の余りの数を見る。今回は0-35を6で割ったときの余りを考える
enemy_mind = rnd(36) \ 6

;各敵タイプ(enemy_type)により、余りの数から、どの手を出す処理にするか考える。
;現状のチュートリアルキャラでは、上のランダム数値は全く関係しない。
switch enemy_type
;石:グーのみ
case 1
e_way = 0
swbreak
;鋏:チョキのみ
case 2
e_way = 2
swbreak
;紙:パーのみ
case 3
e_way = 5
swbreak
default
e_way = p_way
swbreak
swend

;敵が出した手は、自分の手の回数増加として計算完了させるためのスイッチ
switch e_way
case 0
p_guu += 1
swbreak
case 2
p_choki += 1
swbreak
case 5
p_paa += 1
swbreak
default
;ここは入って来るわけがないゾーン
e_way = p_way
swbreak
swend

;文字消し
;攻撃表示の背景は白
;ver1,03からの変更は、文字表示ウィンドウの黒化は、頭の方でやることにした
color 255,255,255
boxf 0,181,480,216

;互いに出した手に対しての文字表示
;ver1.03からの変更点は、waitの削除
pos 300,190
color 0,0,255
mes way(p_way) + "で攻撃!"
pos 35,190
color 255,0,0
mes way(e_way) + "で攻撃!"
;引き分けなら先の行へ飛ばしてから、勝ち負けの判定。
;引き分け
color 255,255,255
pos 35,225
if p_way == e_way{
talk_content(0) = "双方とも攻撃に耐えた"
goto *learning_part
}
;プレイヤーの勝ち elseは負け
;勝てば敵のHP減少、負ければ自分のHP減少、else負けにしたのは、文字が長くなるのが面倒くさいため。
if (((p_way == 0)&(e_way == 2))|((p_way == 2)&(e_way == 5))|((p_way == 5)&(e_way == 0))){
j_navi = player_name
enemy_hp -= 1
}
else{
j_navi = enemy_name
player_hp -= 1
}

talk_content(0) = j_navi + "の攻撃が通った!"

;敵が出した手をラーニングしたことの表示
;ver1.03からの変更点は、waitの削除
*learning_part
talk_content(1) = ""
talk_content(2) = enemy_name + "が繰り出した" + way(e_way) + "を吸収した!"
talk_content(3) = ""
goto *action_part
stop

;勝ち負け結果
;勝った場合、ボタン使用不可、勝利の文字を表示、敵番号増加、敵データ読み出しへ戻る
;ver1.03からの変更点は、文字位置
*win
gosub *button_unable
talk_content(3) = player_name + "は" + enemy_name+ "をやっつけた!"
;メッセージウィンドウ内枠の文字消去と文字表示。
gosub *message_window
enemy_number++
wait 100
goto *story_part
stop
;負けた場合、ボタン使用不可、敗北の文字を出してエンド、*opening_actに戻る
;ver1.03からの変更点は、文字位置
*lose
gosub *button_unable
talk_content(3) = player_name + "は戦いに敗北した…"
;メッセージウィンドウ内枠の文字消去と文字表示。
gosub *message_window
wait 100

;もし3戦目(紙)との試合に負けた場合は真エンドへ
if ((enemy_number > 1) & (enemy_number < 3)):goto *k_ending:stop

goto *opening_act
stop

;サブルーチン:一時ボタン使用不可
*button_unable
objenable 0,0
objenable 1,0
objenable 2,0
objenable 3,0
objenable 4,0
return

;サブルーチン:文字消し色設定(白)
*screen_clearcolor
color 255,255,255
return

;サブルーチン:HP表示の★化、change_hpで受け取った数値だけ★表示
*HP_star
;ローカル関数の概念があるのかどうかしらんがとりあえずstarが★文字代数ね。
star = ""
repeat change_hp
star = star + "★"
loop
mes "HP:" + star
return

;ver1.03からの変更点、サブルーチン:メッセージウィンドウ
*message_window
color 0,0,0
boxf 30,220,450,300
color 255,255,255
pos 35,225
;各配列を1行ずつ表示、4行目だけは遅く表示
repeat 3
wait 30
mes talk_content(cnt)
loop
wait 80
mes talk_content(3)
wait 50
return

;ver1.03からの変更点、基礎編のエンディングを作る
;基礎編では簡単に勝てるので、勝った時のエンディングを偽、
;3回戦で負けたときのエンディングを真としてとらえてみる。
;基礎編のエンディング勝ち編(もちろん、いずれ表示の改良はある)
*t_ending
cls 4
talk_content(0)="基礎編で勝利した" + player_name + "だが、"
talk_content(1)="ただ勝つこと=いいこととは限らない。"
talk_content(2)="本編では負けることで良いことが起こることもあるのだ"
talk_content(3)="もう一度、基礎編をやることをお勧めしたい"
gosub *message_window
wait 50
objsize 200
pos 140,320
button "基礎編やり直し",*start_normal
stop
end

;基礎編の真エンディング編(もちろん、いずれ表示の改良はある)
*k_ending
cls 4
talk_content(0)="見事、基礎編で敗北した!"
talk_content(1)="ここで負ける行為こそが、基礎編で一番重要だったのだ"
talk_content(2)="これでもう基礎編を行う必要はない"
talk_content(3)="さあ本編でがんばってみるのだ。"
gosub *message_window
wait 50
objsize 200
pos 140,320
button "オープニング画面へ",*opening
stop
end

j-enemy.txt

1
1
手を選択すると選択した手の回数が1回減ります
相手の出した手は、自分の出せる手として1回増えます
初期状態は、チョキ1回分とパー2回分出せる状態です
相手が石ですので手を選択してみてください。

1
2
先ほど石が出してきたグーを吸収したので
グーが使えるようになったと思います。
ちなみに自分も相手も同じ手のときはプラマイゼロです
相手はハサミですので、グーで勝てますよね。

1
3
各試合で負ける手を出すと、自分のHPが減ります
もちろん、HPがゼロになった時点でゲーム終了です。
ただし、これはゲーム基礎編ですので、
ここで勝っても負けてもゲーム終了です。
偽データ
1
0
テスト1行目
テスト2行目
テスト3行目
テスト4行目
PR

この記事にコメントする

NAME
TITLE
MAIL
URL
COMMENT
PASS

この記事へのトラックバック

この記事にトラックバックする:

PR

カテゴリー

最新記事

アーカイブ

プロフィール

HN:
マドノマグラ
性別:
非公開
職業:
趣味:
駄文書き
自己紹介:
ゲームを作ろうとしているうちに、言語学習に飽きていく。典型的なダメな人パターンに陥るアホな人

リンク

ブログ内検索

バーコード

RSS

忍者ブログ │ [PR]