|
 |
|
2013/9/2(Mon) 10:27:50|NO.56819
ラベル「door1」からラベル「door2」へジャンプするif文が作動しないので、
助言とアドバイスが欲しいです。
初心者なので、もっと簡単にする方法などが分からなく、
長いソースかもしれませんがお願いします。
以下はソースです。
#define win_end getkey g_end, 27:if(g_end = 1){end}//エスケープキーでゲーム終了
buffer 1
picload "扉グラフィック.bmp"
screen 0,600,500,0//横600:縦500
/*-------------------------------------------------*/
*main//メインループ
redraw 0
gosub *sousa
gosub *opening
gosub *door1
gosub *door2
win_end
redraw 1
await 16
goto *main
/*---------------------------------------------*/
*sousa//マウスのドラッグ、クリック認識
getkey Lmouse,1
return
/*-----------------------------*/
*opening
redraw 0
color 255,255,255//色設定
boxf 0,0,600,500//壁の色塗り
pos 225,70//カレント
gcopy 1,0,0,160,320//扉の画像表示
color 50,50,50//色設定
boxf 0,390,600,500//床の色塗り
color 0,0,0//カレント
boxf 0,390,600,392//床との堺目の線
pos 10,10
font "MS ゴシック",50
mes " 解く YES or NO 退く"//画面上段黒メッセージ
objsize 100,20
pos 60,200
button gosub "YES",*door1//ゲーム分岐
redraw 1
await 16
stop
return
/*----------------------------*/
*door1
clrobj//ボタン削除
redraw 0
color 255,255,255//色設定
boxf 0,0,600,500//壁の色塗り
pos 225,70//カレント
gcopy 1,0,0,160,320//扉の画像表示
color 50,50,50//色設定
boxf 0,390,600,500//床の色塗り
color 0,0,0//色設定
boxf 0,390,600,392//床との堺目の線
pos 0,430
color 255,0,0
mes "1"//画面左下に赤色で1を表示
if Lmouse=1 & 225<=mousex & mousex<=385 & 70<=mousey & mousey<=390{//もし扉の上でクリックしたら
gosub *door2//次へ
}
redraw 1
stop
return
/*--------------------------------*/
*door2
clrobj
redraw 0
color 255,255,255//色設定
boxf 0,0,600,500//壁の色塗り
pos 225,70//カレント
gcopy 1,0,0,160,320//扉の画像表示
color 50,50,50//色設定
boxf 0,390,600,500//床の色塗り
color 0,0,0//色設定
boxf 0,390,600,392//床との堺目の線
pos 0,430
color 255,0,0
mes "2"
redraw 1
stop
return
/*-----------------------------------*/

| |
|
2013/9/2(Mon) 11:12:31|NO.56822
「どういう動作をするのか」ぐらいは説明願います。
|
|
2013/9/2(Mon) 11:24:29|NO.56823
すいません。こういう場は不慣れなもので。
やりたいことは、
「opening」で「YESボタン」を押してもらい「door1」に移動する。
そして「door1」の画面で、中央のドアの絵を押してもらい、「door2」に移動する。
ということです。
記事を書いたあとに画像ファイルを載せるつもりだったのですが、
未だに載せ方が分かりません。すいません。
|
|
2013/9/2(Mon) 14:37:19|NO.56825
質問を見た限りではまだHSPプログラムの約束事が理解出来ていないようなので
マニュアルやサンプル等を見て、プログラムの流れと組み方を勉強していって下さい。
以下は、質問のスクリプトをとりあえず動作できる様にしたものですが
我流の書式なのでそのまま使うのではなく、HSPの処理の参考程度として見てください。
(※本来の目的としている処理とは違うかもしれませんが
メインループに倣ってループ型の処理にしています。)
st_label = *opening, *door1, *door2, *ending ; ラベル型配列
st_no = 0 ; ストーリー進行度(上のラベル型配列変数に対応)
buffer 1
color 255 : boxf;picload "扉グラフィック.bmp"
screen 0,600,500,0//横600:縦500
bt_flg = 0 ; ボタンの表示フラグ
/*-------------------------------------------------*/
*main//メインループ
redraw 0
gosub *sousa
gosub st_label(st_no) ; st_noに対応したラベルに移動
title "" + game_st ; ステータス表示
redraw 1
await 33
goto *main
/*---------------------------------------------*/
*sousa//マウスのドラッグ、クリック認識
stick key
if key & 128 : end ; ESCで終了
return
/*-----------------------------*/
*opening
game_st = "オープニング"
color 255,255,255//色設定
boxf 0,0,600,500//壁の色塗り
pos 225,70//カレント
gcopy 1,0,0,160,320//扉の画像表示
color 50,50,50//色設定
boxf 0,390,600,500//床の色塗り
color 0,0,0//カレント
boxf 0,390,600,392//床との堺目の線
pos 10,10
font "MS ゴシック",50
mes " 解く YES or NO 退く"//画面上段黒メッセージ
if bt_flg = 0 { ; ボタン表示を重複させない
objsize 100,20
pos 60,200
button gosub "YES",*door1//ゲーム分岐
bt_ID = stat : bt_flg = bt_ID ; ボタンIDをフラグに使用
}
return
/*----------------------------*/
*door1
game_st = "ドア1"
if st_no ! 1 : clrobj ; 最初だけボタンの処理でくるのでここで処理
st_no = 1 ; この数値で処理するシーンを管理する
if (key = 256) & (mousex >= 225) & (mousex <= 385) & (mousey >= 70) & (mousey <= 390) {//もし扉の上でクリックしたら
st_no = 2 //st_noを2にして戻ると、次から*door2に飛ぶ
return
}
color 255,255,255//色設定
boxf 0,0,600,500//壁の色塗り
pos 225,70//カレント
gcopy 1,0,0,160,320//扉の画像表示
color 50,50,50//色設定
boxf 0,390,600,500//床の色塗り
color 0,0,0//色設定
boxf 0,390,600,392//床との堺目の線
pos 0,430
color 255,0,0
mes "1"//画面左下に赤色で1を表示
return
/*--------------------------------*/
*door2
game_st = "ドア2"
st_no = 2
if (key = 256) & (mousex >= 225) & (mousex <= 385) & (mousey >= 70) & (mousey <= 390) {//もし扉の上でクリックしたら
st_no = 3 ; st_noを3にする
return//次へ
}
color 255,255,255//色設定
boxf 0,0,600,500//壁の色塗り
pos 225,70//カレント
gcopy 1,0,0,160,320//扉の画像表示
color 50,50,50//色設定
boxf 0,390,600,500//床の色塗り
color 0,0,0//色設定
boxf 0,390,600,392//床との堺目の線
pos 0,430
color 255,0,0
mes "2"
return
/*-----------------------------------*/
*ending
dialog "ゲームを終わります",0 ,"ENDING"
end

| |
|
2013/9/2(Mon) 15:49:35|NO.56826
ありさん、返信ありがとうございます。
想像通りの「door2」の表示だったので感動しました。
まだスクリプトの解読ができてないのですが、
頑張って面白いゲームを作ってみようと思います。
改めて、ありがとうございました。
|
|