SRC質問掲示板Mk2
(現在 過去ログ129 を表示中)

HOME HELP 新規作成 新着記事 トピック表示 検索 掲示板新着情報RSS配信新着情報 過去ログ

[ 最新記事及び返信フォームをトピックトップへ ]

■22372 / inTopicNo.1)  SRCで迷路を作ろうとしましたが、うまく動作しません。
  
□投稿者/ ユーザー -(2011/07/30(Sat) 23:03:03) [ID:GXLf68rq]
    質問させて頂きます。
    3D迷路をSRCで作ってみようと思い、まず基礎になるプログラムを作ってみたのですが上手く動作しません。
    変数に格納される値が思ったように機能していないためだと思いますが、
    色々試行錯誤しましたが一向に改善できないため皆さんのお力をお借りしたいと思い、
    投稿させて頂きました。
    どうか、解決法を教えて下さい。よろしくお願いいたします。
    以下が上手く動作しないソースになります。
    迷路:
    Show
    Set PX 2
    Set PY 2
    Set PS 0
    Cls
    Do While 1
    Wait Click
    ClearPicture
    PaintString 0 0 "キーが押されました"
    For i = 1 To 229
    If KeyState(i) Then
    PaintString "キー番号 = $(i)"
    If i = 37 Then
    #←
    Incr PY -1
    If PY > 0 Then
    PS = $(Call(MapReader,PX,PY))
    If PS = 0 Then
    PaintString "西に進んだ"
    ElseIf PS = 1 Then
    PaintString "進めない"
    Incr PY 1
    ElseIf PS = 3 Then
    Goto ゴール
    EndIf
    ElseIf PY < 1 Then
    PaintString "進めない"
    Incr PY 1
    EndIf
    ElseIf i = 38 Then
    #↑
    Incr PX -1
    If PX > 0 Then
    PS = $(Call(MapReader,PX,PY))
    If PS = 0 Then
    PaintString "北に進んだ"
    ElseIf PS = 1 Then
    PaintString "進めない"
    Incr PX 1
    ElseIf PS = 3 Then
    Goto ゴール
    EndIf
    ElseIf PX < 1 Then
    PaintString "進めない"
    Incr PX 1
    EndIf
    ElseIf i = 39 Then
    #→
    Incr PY 1
    PS = $(Call(MapReader,PX,PY))
    If PS = 0 Then
    PaintString "東に進んだ"
    ElseIf PS = 1 Then
    PaintString "進めない"
    Incr PY -1
    ElseIf PS = 3 Then
    Goto ゴール
    EndIf
    ElseIf i = 40 Then
    #↓
      Incr PX 1
    PS = $(Call(MapReader,PX,PY))
    If PS = 0 Then
    PaintString "南に進んだ"
    ElseIf PS = 1 Then
    PaintString "進めない"
      Incr PX -1
    ElseIf PS = 3 Then
    Goto ゴール
    EndIf
    EndIf
    PaintString "現在位置 = ($(PX),$(PY))"
    PaintString "現在状態 = $(PS)"
    EndIf
    Next
    Loop
    ゴール:
    PaintString "Goal!"
    Refresh
    Wait Click
    Return

    MapReader:
    Array Line "1111111;1010001;1010101;1010101;1000131;1111111" ";"
    Local MS 0
    #Set Line1 1111111
    #Set Line2 1010001
    #Set Line3 1010101
    #Set Line4 1010101
    #Set Line5 1000131
    #Set Line6 1111111
    #MS = $(Mid($(Line[(Args(1))]),$(Args(2)),1))
    Return Mid($(Line[(Args(1))]),$(Args(2)),1)
引用返信/返信 削除キー/
■22373 / inTopicNo.2)  Re[1]: SRCで迷路を作ろうとしましたが、うまく動作しません。
□投稿者/ 中箱 -(2011/07/31(Sun) 00:47:18) [ID:XAPi9INn]
    2011/07/31(Sun) 00:48:06 編集(投稿者)

    >3D迷路をSRCで作ってみようと思い、まず基礎になるプログラムを作ってみたのですが上手く動作しません。
    >変数に格納される値が思ったように機能していないためだと思いますが、
    >色々試行錯誤しましたが一向に改善できないため皆さんのお力をお借りしたいと思い、
    >投稿させて頂きました。


    パっと見たのみなのですが、とりあえず $() の使い方が間違っているのが気になります。


    ヘルプの「式」ページに
    >「"」で囲まれた文字列に「$(式)」という文字列が含まれていた場合、その部分が式の値に置換されます。
    …とあるように、
    大体のコマンドの場合は、コマンドの引数で$()を使うのは""で囲まれた内側の場合のみです。
    (…まあ、Talkコマンドのメッセージ部分のような例外も多いので、どうも式置換されてないと思ったら$()で囲んでみるとかで…)


    ですから例えば
    >PaintString "キー番号 = $(i)"
    は正しいのですが、

    >PS = $(Call(MapReader,PX,PY))
    これは正しくありません。
     PS = Call(MapReader,PX,PY)
    か、
     PS = "$(Call(MapReader,PX,PY))"
    となるはずです。


    あとは、
    >Return Mid($(Line[(Args(1))]),$(Args(2)),1)
    これのArgs(1)を囲むカッコは要らなさそうな。
引用返信/返信 削除キー/
■22374 / inTopicNo.3)  Re[2]: SRCで迷路を作ろうとしましたが、うまく動作しません。
□投稿者/ ユーザー -(2011/07/31(Sun) 01:24:24) [ID:GXLf68rq]
    返信有り難うございます。
    $()の使い方があやふやだったのでアドバイスを頂けまして非常に勉強になりました。
    早速アドバイスして頂いた二点に手を加えてみましたが、
    以下の部分でエラーが出てしまいました。
    PS = "$(Call(MapReader,PX,PY))"
    の部分でエラーが出ているので、MapReaderの部分でのミスか記述ミスだと思うのですが・・・
    なお、書き忘れていましたが、以前の状態であると
    PaintString "現在状態 = $(PS)"
    の部分でエラーが出ていたのでおそらくここもどこかおかしかった(おかしい)のだと思います。
    よろしければまた皆さんのお手を化して頂けたらと思います。
    よろしくお願いいたします。
    以下が修正したソースになります。
    迷路:
    Show
    Set PX 2
    Set PY 2
    Set PS 0
    Cls
    Do While 1
    Wait Click
    ClearPicture
    PaintString 0 0 "キーが押されました"
    For i = 1 To 229
    If KeyState(i) Then
    PaintString "キー番号 = $(i)"
    If i = 37 Then
    #←
    Incr PY -1
    If PY > 0 Then
    PS = "$(Call(MapReader,PX,PY))"
    If PS = 0 Then
    PaintString "西に進んだ"
    ElseIf PS = 1 Then
    PaintString "進めない"
    Incr PY 1
    ElseIf PS = 3 Then
    Goto ゴール
    EndIf
    ElseIf PY < 1 Then
    PaintString "進めない"
    Incr PY 1
    EndIf
    ElseIf i = 38 Then
    #↑
    Incr PX -1
    If PX > 0 Then
    PS = "$(Call(MapReader,PX,PY))"
    If PS = 0 Then
    PaintString "北に進んだ"
    ElseIf PS = 1 Then
    PaintString "進めない"
    Incr PX 1
    ElseIf PS = 3 Then
    Goto ゴール
    EndIf
    ElseIf PX < 1 Then
    PaintString "進めない"
    Incr PX 1
    EndIf
    ElseIf i = 39 Then
    #→
    Incr PY 1
    PS = "$(Call(MapReader,PX,PY))"
    If PS = 0 Then
    PaintString "東に進んだ"
    ElseIf PS = 1 Then
    PaintString "進めない"
    Incr PY -1
    ElseIf PS = 3 Then
    Goto ゴール
    EndIf
    ElseIf i = 40 Then
    #↓
      Incr PX 1
    PS = "$(Call(MapReader,PX,PY))"
    If PS = 0 Then
    PaintString "南に進んだ"
    ElseIf PS = 1 Then
    PaintString "進めない"
      Incr PX -1
    ElseIf PS = 3 Then
    Goto ゴール
    EndIf
    EndIf
    PaintString "現在位置 = ($(PX),$(PY))"
    PaintString "現在状態 = $(PS)"
    EndIf
    Next
    Loop
    ゴール:
    PaintString "Goal!"
    Refresh
    Wait Click
    Return

    MapReader:
    Array Line "1111111;1010001;1010101;1010101;1000131;1111111" ";"
    Local MS 0
    #Set Line1 1111111
    #Set Line2 1010001
    #Set Line3 1010101
    #Set Line4 1010101
    #Set Line5 1000131
    #Set Line6 1111111
    #MS = $(Mid($(Line[Args(1)]),$(Args(2)),1))
    Return Mid($(Line[Args(1)]),$(Args(2)),1)
引用返信/返信 削除キー/
■22375 / inTopicNo.4)  Re[3]: SRCで迷路を作ろうとしましたが、うまく動作しません。
□投稿者/ デスラー -(2011/07/31(Sun) 12:16:37) [ID:rK3UXI0q]
    そもそも、Callコマンドの書き方を間違ってます。

    PS = Call MapReader PX PY

    これで上手く動作します。
引用返信/返信 削除キー/
■22376 / inTopicNo.5)  デスラーさんへの横槍のみですが
□投稿者/ 中箱 -(2011/07/31(Sun) 21:21:10) [ID:XAPi9INn]
    2011/07/31(Sun) 21:50:08 編集(投稿者)
    2011/07/31(Sun) 21:29:39 編集(投稿者)

    大間違いなので取り急ぎ。


    >Callコマンドの書き方を間違ってます。
    >PS = Call MapReader PX PY

    Callには、Callコマンド以外にCall関数があります。
    ユーザーさんの使っているのはCall関数の方、Callコマンドではありません。

    Call関数の書式はヘルプのCall関数の方の説明の通り。
    両者の違い(使い分け)についてはReturnコマンドの項にありますから目を通しておくことをお勧めします。


    そもそもSetコマンドの引数に別のコマンド指定するようなことはできません。

    実際に読み込んで一度試してみれば分かると思いますが、
    デスラーさんが書かれたものは、変数「PS」に「"Call MapReader PX PY"」という文字列を代入するだけのものでしかなく、Callコマンドは全く関わりません。



    >これで上手く動作します。
    エラーが出なくなるだけですね。
引用返信/返信 削除キー/
■22378 / inTopicNo.6)  Re[3]: SRCで迷路を作ろうとしましたが、うまく動作しません。
□投稿者/ 中箱 -(2011/08/01(Mon) 00:00:50) [ID:XAPi9INn]
    >以前の状態であると
    >PaintString "現在状態 = $(PS)"
    >の部分でエラーが出ていたのでおそらくここもどこかおかしかった(おかしい)のだと思います。

    PaintStringやTalkコマンドで変数「PS」の値を表示させようとした時にエラーが出てしまいますね。
    このような場合は、セーブデータに保存されている「PS」の値を確認するのが良かった(良い)でしょう。
    「PS」に値を入れた直後にExitコマンドでイベントを終了して、クイックセーブをし、そのセーブデータのテキストエディタで開くことになります。



    >PS = "$(Call(MapReader,PX,PY))"
    >の部分でエラーが出ているので、MapReaderの部分でのミスか記述ミスだと思うのですが・・・

    であれば、MapReaderで使用している変数や式の値を丁寧に確認していくのが良いでしょう。


    >#MS = $(Mid($(Line[Args(1)]),$(Args(2)),1))

    この行のコメント化をやめて、$()関係を修正して動かすとこの行でエラーが出るようになります
    となると、問題のある箇所はReturnコマンドと共通している
     Mid($(Line[Args(1)]),$(Args(2)),1)
    の部分だと予想できます。

    Mid関数の引数は式置換されるので、ここでも$()は不要でしょう。
引用返信/返信 削除キー/
■22379 / inTopicNo.7)  Re[2]: SRCで迷路を作ろうとしましたが、うまく動作しません。
□投稿者/ ユーザー -(2011/08/01(Mon) 00:47:51) [ID:GXLf68rq]
    済みませんReturnコマンドの所の$()を抜いていませんでした。
    $()を抜いた所正常に動作いたしました。
    有り難うございました。またお手数をお掛けするかもしれませんがその時はよろしくお願いいたします。
解決済み!
引用返信/返信 削除キー/
■22380 / inTopicNo.8)  Re[4]: SRCで迷路を作ろうとしましたが、うまく動作しません。
□投稿者/ ユーザー -(2011/08/01(Mon) 02:33:53) [ID:GXLf68rq]
    済みません。返信に気付かずに投稿しておりました。
    中箱さんのご指摘の部分を修正すると無事に動作いたしました。
    ご迷惑をお掛けしましたが、よろしければまた付き合って頂けたら幸いです。
解決済み!
引用返信/返信 削除キー/



トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

Pass/

HOME HELP 新規作成 新着記事 トピック表示 検索 掲示板新着情報RSS配信新着情報 過去ログ

- Child Tree -
- Antispam Version -