|
|
|
2008/5/18(Sun) 14:13:14|NO.15903
;screen 0,384,384
;title "たいとるはさいごのおたのしみ"
x=0
y=0
xx=1
yy=1
s=16
bit=32
xs=32*s
ys=32*s
dim stage,s,s
stage(0,0)=1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1
stage(0,1)=1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1
stage(0,2)=1,0,1,0,1,1,1,1,1,1,1,1,1,1,0,1
stage(0,3)=1,0,1,0,1,1,1,1,1,1,1,1,1,1,0,1
stage(0,4)=1,0,1,0,0,0,0,0,1,0,0,0,0,0,0,1
stage(0,5)=1,0,1,1,1,1,1,0,1,1,1,1,1,1,1,1
stage(0,6)=1,0,1,1,1,1,1,0,0,0,0,0,0,0,1,1
stage(0,7)=1,0,1,1,1,1,1,1,1,1,1,0,1,0,1,1
stage(0,8)=1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1
stage(0,9)=1,0,1,0,1,1,1,1,1,1,1,1,1,1,0,1
stage(0,10)=1,0,1,0,1,1,1,1,1,1,1,1,1,1,0,1
stage(0,11)=1,0,1,0,1,1,1,1,1,1,1,1,1,1,0,1
stage(0,12)=1,0,1,0,1,1,1,1,1,1,1,1,1,1,0,1
stage(0,13)=1,0,1,0,1,1,1,1,1,1,1,1,1,1,0,1
stage(0,14)=1,0,0,0,0,0,0,0,0,0,0,0,1,2,0,1
stage(0,15)=1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1
screen 0,xs,ys
;buffer 1,xs,ys
repeat
redraw 1:redraw 0
color 255,255,255:boxf
color
stick key,15
if key=1{
foreach stage
if stage(cnt\16,cnt/16-1)=0:xx-
loop
}
if key=2{
foreach stage
if stage(cnt\16-1,cnt/16)=0:yy-
loop
}
if key=4{
foreach stage
if stage(cnt\16,cnt/16+1)=0:xx+
loop
}
if key=8{
foreach stage
if stage(cnt\16+1,cnt/16)=0:yy+
loop
}
x=xx*bit
y=yy*bit
x=limit(x,0,xs-bit)
y=limit(y,0,ys-bit)
pos x,y
mes "人"
wait 10
loop
こういうプログラムを書いています。
エラーがでてしまいました
どうしておかしくなるのか教えてください
| |
|
2008/5/18(Sun) 15:01:30|NO.15905
エラーの出る所を
foreach stage
dialog "" + (cnt\16+1)
if stage(cnt\16+1,cnt/16)=0:yy+
こうしてみりゃ分かるんでね。
|
|
2008/5/18(Sun) 19:29:20|NO.15909
つまり、どういうことですか
|
|
2008/5/18(Sun) 19:42:30|NO.15911
そもそも、RPGってどうやって作れば良いんでしょうか
|
|
2008/5/18(Sun) 20:17:12|NO.15912
ググったりヤフったりすればでます
|
|
2008/5/18(Sun) 20:24:43|NO.15913
fさんの言うことをとっっっってもわかりやすく説明するとですね、
「エラーには『配列の要素が無効です』と出るんだから、配列の要素が
期待したとおりになっているか自分で調べやがれ」
ということです。
そのくらいできますよね?ね?
付け加えて言うと、foreach構文は基本的に一次元配列に対して使うもので、
多次元配列までは数えきれないんじゃないかと思いますが。
そもそもforeachを使う必要性がわからない。
|
|
2008/5/19(Mon) 08:48:04|NO.15920
そもそも「RPG」とは 何でしょう
とりあえずRPGを、のようなあいまいな要求を形にできるプログラム言語などこの世には存在しません。
コンピューターにとっては、
「具体的にどんな動きをするか」
だけが重要なことです。むしろそれがすべてです。
そのプログラムが何と呼ばれるモノかなんかは関係ありませんし、さらに言えばそれが何に使われるものかっていうことさえも、(コンピューター様にとっては)知ったことではないのです。
…一言でいうと、
どういう動きをするものなのか、仕様を先にシッカリ考えて作りなさい
ということです。
RPGって、単純なシューティングゲームやアクションゲームとちがい、具体的な動作を説明するだけでもかなりややこしいモノのハズです。プログラマーはそれを一つ残らず正確にコンピューター相手に説明しなければならないのですから、何をさせたいのかを先にシッカリ考えてハッキリさせときましょう。
|
|
2008/5/19(Mon) 15:44:26|NO.15925
;screen 0,384,384
;title "たいとるはさいごのおたのしみ"
x=0
y=0
xx=1
yy=1
s=16
bit=32
xs=32*s
ys=32*s
dim stage,s,s
stage(0,0)=1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1
stage(0,1)=1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1
stage(0,2)=1,0,1,0,1,1,1,1,1,1,1,1,1,1,0,1
stage(0,3)=1,0,1,0,1,1,1,1,1,1,1,1,1,1,0,1
stage(0,4)=1,0,1,0,0,0,0,0,1,0,0,0,0,0,0,1
stage(0,5)=1,0,1,1,1,1,1,0,1,1,1,1,1,1,1,1
stage(0,6)=1,0,1,1,1,1,1,0,0,0,0,0,0,0,1,1
stage(0,7)=1,0,1,1,1,1,1,1,1,1,1,0,1,0,1,1
stage(0,8)=1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1
stage(0,9)=1,0,1,0,1,1,1,1,1,1,1,1,1,1,0,1
stage(0,10)=1,0,1,0,1,1,1,1,1,1,1,1,1,1,0,1
stage(0,11)=1,0,1,0,1,1,1,1,1,1,1,1,1,1,0,1
stage(0,12)=1,0,1,0,1,1,1,1,1,1,1,1,1,1,0,1
stage(0,13)=1,0,1,0,1,1,1,1,1,1,1,1,1,1,0,1
stage(0,14)=1,0,0,0,0,0,0,0,0,0,0,0,1,2,0,1
stage(0,15)=1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1
screen 0,xs,ys
;buffer 1,xs,ys
repeat
redraw 1:redraw 0
color 255,255,255:boxf
color
x=xx*bit
y=yy*bit
x=limit(x,0,xs-bit)
y=limit(y,0,ys-bit)
stick key,15
if key=1{
if stage(xx-1,yy)=0:xx-
}
if key=2{
if stage(xx,yy-1)=0:yy-
}
if key=4{
if stage(xx+1,yy)=0:xx+
}
if key=8{
if stage(xx,yy+1)=0:yy+
}
repeat s*s
if stage(cnt/16,cnt\16)=0:color 192,192,192:boxf cnt/16*bit,cnt\16*bit,cnt/16*bit+bit,cnt\16*bit+bit
if stage(cnt/16,cnt\16)=1:color 255,64,64:boxf cnt/16*bit,cnt\16*bit,cnt/16*bit+bit,cnt\16*bit+bit
if stage(cnt/16,cnt\16)=2:color 128,128,64:boxf cnt/16*bit,cnt\16*bit,cnt/16*bit+bit,cnt\16*bit+bit
loop
color
pos x,y
mes "人"
wait 1
loop
なんとか動くようにはなりました。
| |
|
2008/5/21(Wed) 15:36:10|NO.15961
screen 0,384,384
title "RPGをつくる!"
x=0
y=0
xx=1
yy=1
s=16
bit=32
xs=32*s
ys=32*s
mese=""
mati=0
dim stage,s,s
stage(0,0)=1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1
stage(0,1)=1,2,1,0,0,0,0,0,0,0,0,0,0,0,0,1
stage(0,2)=1,4,1,0,1,1,1,1,1,1,1,1,1,1,0,1
stage(0,3)=1,2,1,0,1,1,1,1,1,1,1,1,1,1,0,1
stage(0,4)=1,2,1,0,0,0,0,0,1,0,0,0,0,0,0,1
stage(0,5)=1,2,1,1,1,1,1,0,1,1,1,1,1,1,1,1
stage(0,6)=1,2,1,0,0,0,1,0,0,0,0,0,0,0,1,1
stage(0,7)=1,2,1,0,1,1,1,1,1,1,1,0,1,0,1,1
stage(0,8)=1,2,1,0,0,0,0,0,0,0,0,0,0,0,0,1
stage(0,9)=1,2,1,0,1,1,1,1,1,1,1,1,1,1,0,1
stage(0,10)=1,2,1,0,1,0,0,1,0,0,1,1,1,1,0,1
stage(0,11)=1,2,1,0,1,0,1,1,1,0,0,0,0,1,0,1
stage(0,12)=1,2,1,0,1,0,0,0,0,0,1,1,0,1,0,1
stage(0,13)=1,2,1,0,1,1,1,1,1,0,1,1,1,1,0,1
stage(0,14)=1,2,0,0,0,0,0,0,0,0,0,0,1,3,0,1
stage(0,15)=1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1
;screen 1,xs,ys
buffer 1,xs,ys
x=xx*bit
y=yy*bit
keyf=8;始めの矢印書くため
repeat
entkey=0
if mati=0:mese=""
gsel 0
redraw 0
color 20,20,20:boxf
color 192,192,255:boxf 5,261,379,379
color 255,255,255
line 0,256,256,256
line 256,0,256,256
line 5,261,379,261
line 5,261,5,379
line 5,379,379,379
line 379,261,379,379
pos 10,266
color
mes mese
pos 0,0
gcopy 1,x-128,y-128,256,256
redraw 1
gsel 1
redraw 0
color 120,120,120:boxf -128,-128,xs+128,ys+128
x=xx*bit
y=yy*bit
x=limit(x,0,xs-bit)
y=limit(y,0,ys-bit)
stick key,15+32
if key!0:if key<10:keyf=key:mati=0
;ストラクチヤ始め
if key=1{
if stage(xx-1,yy)=0:xx-
if stage(xx-1,yy)=2:xx-
}
if keyf=1{
if stage(xx-1,yy)=3:gosub *s3
if stage(xx-1,yy)=4:gosub *s4
}
if key=2{
if stage(xx,yy-1)=0:yy-
if stage(xx,yy-1)=2:yy-
}
if keyf=2{
if stage(xx,yy-1)=3:gosub *s3
if stage(xx,yy-1)=4:gosub *s4
}
if key=4{
if stage(xx+1,yy)=0:xx+
if stage(xx+1,yy)=2:xx+
}
if keyf=4{
if stage(xx+1,yy)=3:gosub *s3
if stage(xx+1,yy)=4:gosub *s4
}
if key=8{
if stage(xx,yy+1)=0:yy+
if stage(xx,yy+1)=2:yy+
}
if keyf=8{
if stage(xx,yy+1)=3:gosub *s3
if stage(xx,yy+1)=4:gosub *s4
}
;ストラクチヤ終わり
repeat s*s
if stage(cnt/16,cnt\16)=0:color 192,192,192:boxf cnt/16*bit,cnt\16*bit,cnt/16*bit+bit,cnt\16*bit+bit
if stage(cnt/16,cnt\16)=1:color 255,64,64:boxf cnt/16*bit,cnt\16*bit,cnt/16*bit+bit,cnt\16*bit+bit
if stage(cnt/16,cnt\16)=2:color 64,64,64:boxf cnt/16*bit,cnt\16*bit,cnt/16*bit+bit,cnt\16*bit+bit
if stage(cnt/16,cnt\16)=3:color 128,128,64:boxf cnt/16*bit,cnt\16*bit,cnt/16*bit+bit,cnt\16*bit+bit
if stage(cnt/16,cnt\16)=4:color 32,192,64:boxf cnt/16*bit,cnt\16*bit,cnt/16*bit+bit,cnt\16*bit+bit
color
pos x,y
if keyf=1:mes "←"
if keyf=2:mes "↑"
if keyf=4:mes "→"
if keyf=8:mes "↓"
loop
redraw 1
wait 10
loop
*s3
gosub *enter
if entkey=1:mese="しゃべる事もできます。"
return
*s4
gosub *enter
if entkey=1{
mese="やぁ、こんにちは。"
stage(1,2)=2
}
*enter
*nan
stick entman,32
if entman=32:entkey=1
mati=1
return
ここまでできましたが、
しゃべって
↓
エンターキー押すのをまって
↓
エンターキー判定
↓
続きをしゃべる
の方法が判りません、教えてください。
| |
|
2008/5/21(Wed) 23:02:10|NO.15974
>>続きをしゃべる
>>の方法が判りません、教えてください。
とりあえず、ソース内に会話を書いてるうちは難しい…というより
面倒でやる気なくすかも。
この話しかけるところまではできてるようですから、
多分ここから先も言えばわかるという前提で書きます。
結論から言うと、ここから先、普通のRPGのような会話モードにしたい場合は
ノベルエンジンのようなもの作る必要があります。
要するにスクリプト言語を作るってことです。
(HSPもスクリプト言語なので、その中に更にスクリプト言語があるという
も変な話ですがww)
テキストファイルにいろいろ書いてある命令やら文章をノートパッド系の命令で
読み込んでそこから動作を決定するということが必要になります。
GENKIさんが作ったノベルエンジンが参考になるかと(ソースも
公開されてるし)。
http://homepage3.nifty.com/ghpk/index.htm
俺も格ゲーのストーリーモード用にノベルエンジンを作る時に参考したサイトがあるので
それも載せときます。
http://nekomamire.sakura.ne.jp/
|
|
2008/5/22(Thu) 10:24:49|NO.15977
↑だけじゃさすがにヒントになってねーよって思ったので追記。
話しかけたらイベント開始フラグを立てて、上で書いたように
ノベルエンジン的なものを使って会話文を表示し、イベント終了後にフラグを
倒せばいいです。
あと、イベント中は移動不能にするのが基本とかと。
(まぁ、クロノトリガーみたいに会話中でも一部を除いて移動可能なRPGもありますが^^;)
RPGツクール2,3,2000,2003あたりをやったことあれば伝わるとは思うんですが…
|
|
2008/5/22(Thu) 17:13:33|NO.15979
screen 0,384,384
title "RPGをつくる!"
x=0
y=0
xx=1
yy=1
s=16
bit=32
xs=32*s
ys=32*s
mese=""
mati=0
entmati=0
dim stage,s,s
stage(0,0)=1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1
stage(0,1)=1,2,1,0,0,0,0,0,0,0,0,0,0,0,0,1
stage(0,2)=1,4,1,0,1,1,1,1,1,1,1,1,1,1,0,1
stage(0,3)=1,2,1,0,1,1,1,1,1,1,1,1,1,1,0,1
stage(0,4)=1,2,1,0,0,0,0,0,1,0,0,0,0,0,0,1
stage(0,5)=1,2,1,1,1,1,1,0,1,1,1,1,1,1,1,1
stage(0,6)=1,2,1,0,0,0,1,0,0,0,0,0,0,0,1,1
stage(0,7)=1,2,1,0,1,1,1,1,1,1,1,0,1,0,1,1
stage(0,8)=1,2,1,0,0,0,0,0,0,0,0,0,0,0,0,1
stage(0,9)=1,2,1,0,1,1,1,1,1,1,1,1,1,1,0,1
stage(0,10)=1,2,1,0,1,0,0,1,0,0,1,1,1,1,0,1
stage(0,11)=1,2,1,0,1,0,1,1,1,0,0,0,0,1,0,1
stage(0,12)=1,2,1,0,1,0,0,0,0,0,1,1,0,1,0,1
stage(0,13)=1,2,1,0,1,1,1,1,1,0,1,1,1,1,0,1
stage(0,14)=1,2,0,0,0,0,0,0,0,0,0,0,1,3,0,1
stage(0,15)=1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1
;screen 1,xs,ys
buffer 1,xs,ys
x=xx*bit
y=yy*bit
keyf=8;始めの矢印書くため
repeat
gsel 1
entkey=0
if mati=0:mese=""
gosub *zeromenkaiga
redraw 0
color 120,120,120:boxf -128,-128,xs+128,ys+128
x=xx*bit
y=yy*bit
x=limit(x,0,xs-bit)
y=limit(y,0,ys-bit)
if entmati=0:stick key,15+32
if key!0:if key<10:keyf=key:mati=0
;ストラクチヤ始め
if key=1{
if stage(xx-1,yy)=0:xx-
if stage(xx-1,yy)=2:xx-
}
if keyf=1{
if stage(xx-1,yy)=3:gosub *s3
if stage(xx-1,yy)=4:gosub *s4
}
if key=2{
if stage(xx,yy-1)=0:yy-
if stage(xx,yy-1)=2:yy-
}
if keyf=2{
if stage(xx,yy-1)=3:gosub *s3
if stage(xx,yy-1)=4:gosub *s4
}
if key=4{
if stage(xx+1,yy)=0:xx+
if stage(xx+1,yy)=2:xx+
}
if keyf=4{
if stage(xx+1,yy)=3:gosub *s3
if stage(xx+1,yy)=4:gosub *s4
}
if key=8{
if stage(xx,yy+1)=0:yy+
if stage(xx,yy+1)=2:yy+
}
if keyf=8{
if stage(xx,yy+1)=3:gosub *s3
if stage(xx,yy+1)=4:gosub *s4
}
;ストラクチヤ終わり
repeat s*s
if stage(cnt/16,cnt\16)=0:color 192,192,192:boxf cnt/16*bit,cnt\16*bit,cnt/16*bit+bit,cnt\16*bit+bit
if stage(cnt/16,cnt\16)=1:color 255,64,64:boxf cnt/16*bit,cnt\16*bit,cnt/16*bit+bit,cnt\16*bit+bit
if stage(cnt/16,cnt\16)=2:color 64,64,64:boxf cnt/16*bit,cnt\16*bit,cnt/16*bit+bit,cnt\16*bit+bit
if stage(cnt/16,cnt\16)=3:color 128,128,64:boxf cnt/16*bit,cnt\16*bit,cnt/16*bit+bit,cnt\16*bit+bit
if stage(cnt/16,cnt\16)=4:color 32,192,64:boxf cnt/16*bit,cnt\16*bit,cnt/16*bit+bit,cnt\16*bit+bit
color
pos x,y
if keyf=1:mes "←"
if keyf=2:mes "↑"
if keyf=4:mes "→"
if keyf=8:mes "↓"
loop
redraw 1
wait 10
loop
*s3
gosub *enter
if entkey=1:mese="しゃべる事もできます。"
return
*s4
gosub *enter
if entkey=1{
mese="やぁ、こんにちは。"
if entmati=0:entmati=1:return
mese="じゃ、また今度。"
stage(1,2)=2
entmeti=0
}
return
*enter
*nan
stick entman,32
if entman=32:entkey=1
mati=1
return
*zeromenkaiga
gsel 0
redraw 0
color 20,20,20:boxf
color 192,192,255:boxf 5,261,379,379
color 255,255,255
line 0,256,256,256
line 256,0,256,256
line 5,261,379,261
line 5,261,5,379
line 5,379,379,379
line 379,261,379,379
pos 10,266
color
mes mese
pos 0,0
gcopy 1,x-128,y-128,256,256
redraw 1
gsel 1
return
とまってしまいました…
どうしてか判りません、教えてください。
直、言語の作成はしない予定です。
| |
|
2008/5/23(Fri) 16:47:42|NO.16030
>どうしてか判りません、教えてください。
Debug Windowで変数の値をチェックしてみましょう。
想定外の数値が代入されている変数はありませんか?
|
|
2008/5/23(Fri) 18:13:03|NO.16040
スクリプト貼り付けの注意書き見てなかった…
もしかして、主人公って矢印ですかね?…
そうだとしたら、座標を書き換えてないような。
あと、ottaさんの言うとおり、logmesを活用してみては?
str型なので、数値の場合はstr()で囲む必要がありますが。
以上です。
スクリプトの貼り方を間違えたので、ファイルをpreで囲むスクリプト作ってみた。
そういう小物をUPするところは無いんだろうか?…
|
|
2008/5/23(Fri) 19:14:35|NO.16041
スクリプトをpreで囲んだときのテストを兼ねてUPさせていただきます。
ごく小さなミスでしたよ。
これからも頑張ってね。 ^^
*s4
gosub *enter
if entkey=1{
mese="やぁ、こんにちは。"
if entmati=0:entmati=1:return
mese="じゃ、また今度。"
stage(1,2)=2
entmati=0
; ^ここ
}
return
|
|