トピック

【至急回答願う!】

このタッチの命令で、ある一定の位置で数秒タッチし続けていると、スタックオーバー(?)というエラーが起こるんです…… どうしたらいいですか!! (そもそもスタックってなんだ?)
1そうだね
プレイ済み
返信[1]
親投稿
変数TMを使ってる場所を見ないと何とも言えない
0そうだね
プレイ済み
返信[2]
親投稿
say sayer.exe
端的に言えばgosubしたところにreturnで帰ってないってことです 例えば185行目のgosub @readとか
1そうだね
プレイ済み
返信[3]
親投稿
全然気づかなかったけどGOTOが並ぶ中一か所だけGOSUBになってるね。タイプミスかな?
0そうだね
プレイ済み
返信[4]
親投稿
sayさん観察眼が鋭い! てか僕はさらっと見落とした(^^; 185行目、たぶんGOTOの間違えなんでしょうね〜。スタックオーバーフローの理由はsayさんのいうとおりです。RETURNしてないのに何度もGOSUBを呼び出すことでオーバーフローが発生した感じです。 (GOSUBはRETURNで戻る命令なので呼び出される度に戻る位置を内部的に記録していますが、それがRETURNされないまま繰り返し呼び出される事で内部的な記録だけが積み重なってオーバーする感じ。RETURNされるとその部分の記録は不要になるのでオーバーしなくなるのです)
1そうだね
プレイ済み
返信[5]
親投稿
はっ!Σ(°д°) 全然きずかんかった… 一個だげGOSUBになってることに……… 一時間も悩んで損した。 皆さんありがとうございます!
1そうだね
プレイ済み
返信[6]
親投稿
say sayer.exe
あたり?うひゃほぅー♪ モノのついでに配列とスタック(≒gosub)を習得します? 一問一答でなら説明できますよ(たぶん)
1そうだね
プレイ済み
返信[7]
親投稿
はい、やってみます! GOSUBとかよく分からないんで教えてください!
0そうだね
プレイ済み
返信[8]
親投稿
0そうだね
プレイ済み
返信[9]
親投稿
プログラムを書いていて似たような記述(コピペ含む)がたくさん出てきたらGOSUBやユーザー定義命令や関数を覚えるチャンスです!
1そうだね
プレイ済み
返信[10]
親投稿
say sayer.exe
gosubとgotoはどっちもジャンプする命令です 違いはと言うと、戻り位置を記憶しておくか、しておかないか というところにあります ところで、@readの処理の最後はgoto @touchで終わらせてます?
0そうだね
プレイ済み
返信[11]
親投稿
say sayer.exe
@readの一連の処理を貼り付けてもらえると助かります たぶんサブルーチン化できそうな感じがするので
0そうだね
プレイ済み
返信[12]
親投稿
一連の処理?こういうことですか?
0そうだね
プレイ済み
返信[13]
親投稿
say sayer.exe
いいねぇ これは即サブルーチン化できそうなんで、 327行目のgoto @touchをreturnに、上の方にあるgoto @readを全部gosub @readに書き換えてみましょう で、「なんでサブルーチンにするか?」というと、簡単に言ってしまえば「あとで読む時に楽」ってのが理由です 他にも「同じ処理を何度も書かなくても済む」とか「処理の塊をコンパクトに纏められる」とか、割とメリットがあります
0そうだね
プレイ済み
返信[14]
親投稿
あの、そう言えば、『サブルーチン』ってなんですか?(あと他の人の投稿で見たメインルーチンも分かりません……)
0そうだね
プレイ済み
返信[15]
親投稿
say sayer.exe
ルーチン(routine)ってのは「決まりきった仕事」って意味です 転じて「仕事」「処理の塊」と解釈してください 会社で表現すれば、メインルーチンとは「元請け」のことで、サブルーチンとは「下請け(孫請け、ひ孫請けも含む)」のことです
0そうだね
プレイ済み
返信[16]
親投稿
say sayer.exe
初期化 タイトル マップを書く メインループ(1)  入力待ち  <入力は?>   内政→内政ルーチンへ   戦争→戦争ルーチンへ   外交→外交ルーチンへ   情報→情報ルーチンへ  <全国制覇したか?>   した→エンディングへ  <全滅したか?>   した→ゲームオーバーへ (1)に戻る
0そうだね
プレイ済み
返信[17]
親投稿
say sayer.exe
ちょいと話はそれますが、↑のような感じで、まず初めに大まかな流れを書いてしまいます で、その次に細かいところを書いていきます この、「おおまかな流れ」のことを「メインルーチン」と言います(メインループ(1)~(1)に戻るの部分を「メインルーチン」と指す場合もあります)
1そうだね
プレイ済み
返信[18]
親投稿
なるほど。
0そうだね
プレイ済み