忍者ブログ

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

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

ブログ履歴

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.02

じゃんけんゲームのちょっとした改良。

敵データのテキストファイルからの読み込みにするとか、敵の手の出すときの考え方を変えてみたり、HPの表示を★で表示するようにしたり、一応のエンディングを作ってみたり。

今日はこれくらいでやめておこう。




; じゃんけんゲームを作る3、ver.1.01からの変更点は、地味にタイトル変更、先のためランダマイズ導入
cls
randomize
screen 0,480,360
title "じゃんけんゲーム(チュートリアル編) Ver.1.02"

;OP画面。気が向けば作る。

;データ置き場
;自分の名前とHP。3回まで負けてよし
player_name = "プレイヤー"
player_hp = 3

;各手の使用回数、最初は1回。
p_guu = 1
p_choki = 1
p_paa = 1

;敵データ
;ver1.01からの変更点はテキストファイルからの読み込み準備、バッファ数値は適当
sdim TXT_ENEMY,64

notesel TXT_ENEMY
noteload "jyanken_enemy.txt"

;敵の番号、名前、HP、タイプ、あとは、背景色のための色指定番号
enemy_number = 0
enemy_name = ""
enemy_hp = 0
enemy_type = 0
enemy_red = 0
enemy_green = 0
enemy_blue = 0

;言葉置き場だけど、これが必要ないプログラムの打ち方はあるかも
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

;ver1.01からの変更点、もし偽データ(enemy_number = 3)に勝ったらチュートリアルED
if enemy_number > 3:goto *t_ending:stop

;画面全体の白地クリア
gosub *screen_clearcolor
boxf

;敵の番号から、テキストファイル経由で敵のデータを読み込み、
;名前とHPとタイプ、画面上方の背景色の選択(いつか画像を入れ込むための練習ダミー)
;ver1.01からの変更点というか、完全なるモデルチェンジ
notesel TXT_ENEMY
noteget S, enemy_number * 6: enemy_name = S
noteget S, enemy_number * 6 + 1: enemy_hp = int(S)
noteget S, enemy_number * 6 + 2: enemy_type = int(S)
noteget S, enemy_number * 6 + 3: enemy_red = int(S)
noteget S, enemy_number * 6 + 4: enemy_green = int(S)
noteget S, enemy_number * 6 + 5: enemy_blue = int(S)

;画面上方の背景色描画
color enemy_red,enemy_green,enemy_blue
boxf 30,10,450,180

;アクションパートという名のジャンケンパート
*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
boxf 30,200,480,240
boxf 0,320,480,360

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

color 0,0,255
pos 300,200
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
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

;敵の出す手の判断。
;ver1.01からの変更点というか、完全なるモデルチェンジ
*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

;文字消し
gosub *screen_clearcolor
boxf 30,240,480,320

;互いに出した手に対しての文字表示
pos 300,240
color 0,0,255
mes way(p_way) + "で攻撃!"
pos 30,240
color 255,0,0
mes way(e_way) + "で攻撃!"
wait 50
;引き分けなら先の行へ飛ばしてから、勝ち負けの判定。
;引き分け
color 0,0,0
if p_way == e_way{
mes "双方とも攻撃に耐えた"
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
}

mes j_navi + "の攻撃が通った!"

;敵が出した手をラーニングしたことの表示
*learning_part
wait 50
mes ""
mes enemy_name + "が繰り出した" + way(e_way) + "を吸収した!"

goto *action_part
stop

;勝ち負け結果
;勝った場合、ボタン使用不可、勝利の文字を表示、敵番号増加、敵データ読み出しへ戻る
;いずれ、全勝した時のエンディングやらを追加する予定。
*win
gosub *button_unable
wait 80
pos 330,320
color 0,0,255
mes "勝利"
enemy_number++
wait 80
goto *story_part
stop
;負けた場合、ボタン使用不可、敗北の文字を出してエンド、閉じる
;いずれ、負けた後はOPに戻る仕様にする
*lose
gosub *button_unable
wait 80
pos 330,320
color 255,0,0
mes "敗北"
wait
end

;サブルーチン:一時ボタン使用不可
*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

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

;ver.1.01からの追加。チュートリアル分のエンディング仮
*t_ending
cls
pos 30,100
mes "チュートリアルはここまで!おめでとう!"
stop
end
PR

この記事にコメントする

NAME
TITLE
MAIL
URL
COMMENT
PASS

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

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

PR

カテゴリー

最新記事

アーカイブ

プロフィール

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

リンク

ブログ内検索

バーコード

RSS

忍者ブログ │ [PR]