HSPポータル
サイトマップ お問い合わせ


HSPTV!掲示板


未解決 解決 停止 削除要請

2012
0521
7909pprこのコードが無限ループしてしまいます。11解決


7909ppr

リンク

2012/5/21(Mon) 21:12:30|NO.46792

*home
randomize;いつもランダム
buffer 100,10,10
picload "nur.bmp"
buffer 1,10,10
picload "boka.bmp"
buffer 2,10,10
picload "kyara.bmp"
buffer 3,10,10
picload "hara.bmp"


*top
screen 0,510,510,0,10,10

dim map,510,510
dim haraa,510,510
dim harab,510,510
haraax = 0:haraay = 0
harabx = 0:haraby = 0



harax = 0
haray = 0
repeat 51

repeat 51

pos harax,haray
gcopy 3,0,0,10,10

harax + 10
loop
haray + 10
harax = 0
loop



repeat 3
haraay + 10
repeat 3
haraax + 10
pos haraax,haraay
gcopy 3,10,0,10,10
haraa(haraax,haraay) = 5
loop
haraax = 0
loop

haraax = 460
haraay = 460
repeat 3
haraay + 10
repeat 3
haraax + 10
pos haraax,haraay
gcopy 3,10,0,10,10
haraa(haraax,haraay) = 5
loop
haraax = 460
loop





harabzzx = 490:harabzzy = 490
pos harabzzx,harabzzy
gcopy 3,0,10,10,10
harab(harabzzx,harabzzy) = 5

////////////////////////////壁ブロックの作成
ccx = 0
ccy = 0
repeat


pos ccx,ccy
gcopy 1,0,0,10,10
map(ccx,ccy) = 5


if ccx = 500 {
break
}
ccx +10

loop


ccy + 10
repeat
pos ccx,ccy
gcopy 1,0,0,10,10
map(ccx,ccy) = 5
if ccy = 500 {
break
}
ccy +10

loop


ccx - 10
repeat
pos ccx,ccy
gcopy 1,0,0,10,10
map(ccx,ccy) = 5
if ccx = 0 {
break
}
ccx - 10

loop


ccy - 10
repeat
pos ccx,ccy
gcopy 1,0,0,10,10
map(ccx,ccy) = 5
if ccy = 10 {
break
}
ccy - 10

loop
////////////////////////////壁ブロックの作成ここまで


ccx = 0
ccy = 0
////////////////////////////内部壁ブロック作成
repeat
if ccy = 480{
break
}
ccy + 20
repeat
if ccx = 480{
break
}
ccx + 20
pos ccx,ccy
gcopy 1,0,0,10,10
map(ccx,ccy) = 5


loop

ccx = 0

loop

;break


////////////////////////////内部壁ブロック作成ここまで

ccvvx = 0
ccvvy = 0
ccdf = 0;4つの乱数の発生

////////////////////////////迷路の作成
repeat
if ccvvy = 480{
break
}
ccvvy + 20

repeat
if ccvvx = 480{
break
}
ccvvx + 20
*lopa
ccdf = rnd(4)+1
//------
if ccdf = 1 {
ccx = ccvvx + 10
ccy = ccvvy
if map(ccx,ccy){
goto *lopa
}
pos ccx,ccy
gcopy 1,0,0,10,10
map(ccx,ccy) = 5

}
//------
if ccdf = 2 {
ccx = ccvvx
ccy = ccvvy + 10
if map(ccx,ccy){
goto *lopa
}
pos ccx,ccy
gcopy 1,0,0,10,10
map(ccx,ccy) = 5
}
//------
if ccdf = 3 {
ccx = ccvvx - 10
ccy = ccvvy
if map(ccx,ccy){
goto *lopa
}
pos ccx,ccy
gcopy 1,0,0,10,10
map(ccx,ccy) = 5
}
//------
if ccdf = 4 {

ccx = ccvvx
ccy = ccvvy - 10
if map(ccx,ccy){
goto *lopa
}
pos ccx,ccy
gcopy 1,0,0,10,10
map(ccx,ccy) = 5
}
//------
;wait 2
loop
ccvvx = 0

loop
////////////////////////////迷路の作成ここまで





////////////////////////////キャラ操作



////
kyarax = 70
kyaray = 70
kyararnd = 0


kyarabx = 50
kyaraby = 50
kyaracx = 90
kyaracy = 90

cntkyaraa = 0

kyarasuua = 20;キャラ数



kkx = 10
kky = 10

brkx = 100

pos kkx, kky ;カレントポジション設定
gcopy 2, 0, 0 ,10,10
repeat
redraw 0
;boxf

;画像コピー
stick key, 15 ;キー入力
if key & 1 {;左
kkx = kkx - 10
if map(kkx,kky){
kkx + 10
}
else{
pos kkx+10,kky
gcopy 3, 0, 0,10,10
pos kkx, kky
gcopy 2, 0, 0 ,10,10
}
}
if key & 2 {
kky = kky - 10
if map(kkx,kky){
kky + 10
}
else{
pos kkx,kky+10
gcopy 3, 0, 0,10,10
pos kkx, kky ;カレントポジション設定
gcopy 2, 0, 0 ,10,10
}
};上
if key & 4 {
kkx = kkx + 10
if map(kkx,kky){
kkx - 10
}
else{
pos kkx-10,kky
gcopy 3, 0, 0,10,10
pos kkx, kky ;カレントポジション設定
gcopy 2, 0, 0 ,10,10
}
}
if key & 8 {
kky = kky + 10
if map(kkx,kky){
kky - 10
}
else{
pos kkx,kky-10
gcopy 3, 0, 0,10,10
pos kkx, kky ;カレントポジション設定
gcopy 2, 0, 0 ,10,10
}
}
if key & 128 : break ;[Esc]

if (kyarax = kkx and kyaray = kky) or (kyarabx = kkx and kyaraby = kky) or (kyaracx = kkx and kyaracy = kky){
end
}
if harab(kkx,kky){
break
}


*kyarassa
kyararnda = rnd(4)+1
//----
if kyararnda = 1 {
kyarax + 10
if map(kyarax,kyaray) or haraa(kyarax,kyaray){
kyarax - 10
goto *kyarassa
}else{
pos kyarax-10,kyaray
gcopy 3,0,0,10,10
pos kyarax,kyaray
gcopy 2, 10, 0 ,10,10
}
}
//----
if kyararnda = 2 {
kyaray + 10
if map(kyarax,kyaray) or haraa(kyarax,kyaray){
kyaray - 10
goto *kyarassa
}else{
pos kyarax,kyaray-10
gcopy 3,0,0,10,10
pos kyarax,kyaray
gcopy 2, 10, 0 ,10,10
}
}
//----
if kyararnda = 3 {
kyarax - 10
if map(kyarax,kyaray) or haraa(kyarax,kyaray){
kyarax + 10
goto *kyarassa
}else{
pos kyarax+10,kyaray
gcopy 3,0,0,10,10
pos kyarax,kyaray
gcopy 2, 10, 0 ,10,10
}
}
//----
if kyararnda = 4 {
kyaray - 10
if map(kyarax,kyaray) or haraa(kyarax,kyaray){
kyaray + 10
goto *kyarassa
}
else{
pos kyarax,kyaray+10
gcopy 3,0,0,10,10
pos kyarax,kyaray
gcopy 2, 10, 0 ,10,10
}
}
//----








kyararndb = rnd(4)+1
//----
if kyararndb = 1 {
kyarabx + 10
if map(kyarabx,kyaraby) or haraa(kyarabx,kyaraby){
kyarabx - 10
}else{
pos kyarabx-10,kyaraby
gcopy 3,0,0,10,10
pos kyarabx,kyaraby
gcopy 2, 20, 0 ,10,10
}
}
//----
if kyararndb = 2 {
kyaraby + 10
if map(kyarabx,kyaraby) or haraa(kyarabx,kyaraby){
kyaraby - 10
}else{
pos kyarabx,kyaraby-10
gcopy 3,0,0,10,10
pos kyarabx,kyaraby
gcopy 2, 20, 0 ,10,10
}
}
//----
if kyararndb = 3 {
kyarabx - 10
if map(kyarabx,kyaraby) or haraa(kyarabx,kyaraby){
kyarabx + 10
}else{
pos kyarabx+10,kyaraby
gcopy 3,0,0,10,10
pos kyarabx,kyaraby
gcopy 2, 20, 0 ,10,10
}
}
//----
if kyararndb = 4 {
kyaraby - 10
if map(kyarabx,kyaraby) or haraa(kyarabx,kyaraby){
kyaraby + 10
}
else{
pos kyarabx,kyaraby+10
gcopy 3,0,0,10,10
pos kyarabx,kyaraby
gcopy 2, 20, 0 ,10,10
}
}
//----




*kyarac


if rndkyarac = 0{
kyararndc = rnd(4)+1
}


rndkyarac = 1












//----
if kyararndc = 1 {
kyaracx + 10
if map(kyaracx,kyaracy) or haraa(kyaracx,kyaracy){
kyaracx - 10
rndkyarac = 0
goto *kyarac
}else{
pos kyaracx-10,kyaracy
gcopy 3,0,0,10,10
pos kyaracx,kyaracy
gcopy 2, 0, 10 ,10,10
}
}
//----
if kyararndc = 2 {
kyaracy + 10
if map(kyaracx,kyaracy) or haraa(kyaracx,kyaracy){
kyaracy - 10
rndkyarac = 0
goto *kyarac
}else{
pos kyaracx,kyaracy-10
gcopy 3,0,0,10,10
pos kyaracx,kyaracy
gcopy 2, 0, 10 ,10,10
}
}
//----
if kyararndc = 3 {
kyaracx - 10
if map(kyaracx,kyaracy) or haraa(kyaracx,kyaracy){
kyaracx + 10
rndkyarac = 0
goto *kyarac
}else{
pos kyaracx+10,kyaracy
gcopy 3,0,0,10,10
pos kyaracx,kyaracy
gcopy 2, 0, 10 ,10,10
}
}
//----
if kyararndc = 4 {
kyaracy - 10
if map(kyaracx,kyaracy) or haraa(kyaracx,kyaracy){
kyaracy + 10
rndkyarac = 0
goto *kyarac
}
else{
pos kyaracx,kyaracy+10
gcopy 3,0,0,10,10
pos kyaracx,kyaracy
gcopy 2, 0, 10 ,10,10
}
}
//----


redraw 1

wait 2
loop
////////////////////////////キャラ操作ここまで


goto *top

*むちゃくちゃなコードですみません^p^


このコードを何回か実行すると途中で無限ループにはまってしまうようなのですが、どこが異常なのかわかりません
どうやって修復したらいいのか教えて下さい。

http://be-sp.com/7909pp7/home/kousyoukai/joyful/img/105.zip
↑画像ファイル



この記事に返信する


cats

リンク

2012/5/21(Mon) 21:29:41|NO.46793

スクリプトをそのまま放り投げるなとここでも言われましたよね。
http://hsp.tv/play/pforum.php?mode=all&num=46773
>このコードを何回か実行すると途中で無限ループにはまってしまうようなのですが、どこが異常なのかわかりません
無限ループとは何のことですか。
プログラムがループしているのかキャラがループしているのか分かりません。
もう少し具体的に何をどうしたいのかを言ってください。



check

リンク

2012/5/21(Mon) 21:37:51|NO.46795

>*むちゃくちゃなコードですみません^p^
そうだと真剣に思っているのならしかるべき対応を取っていると思うのだが。

もう丸投げデバッグはやめにしないか?
これをどうしてもデバッグしたい、という暇人がいるのなら別だが。

>どこが異常なのかわかりません
いろいろなところにassertをはさんでみたり、dialogで現在の変数を表示したりとできることはいくらでもあるはずだ。



てれてれ

リンク

2012/5/21(Mon) 21:49:01|NO.46796

そんだけ丸投げしないと作れないようなら1度諦めたほうがいいです。
もっとHSPに慣れてからでも遅くないと思うんだけど。



暇人

リンク

2012/5/21(Mon) 22:50:26|NO.46797

まずコメント入れて自分でどんな処理してるのか考える

>どこが異常なのかわかりません
異常かどうかより先に何処で無限ループしてるかを突き止めるのが先
まずは、redraw 0をコメントアウトして常に更新が反映されるようにする
一発で無限ループしてる所も原因も分かると思う



GrapeColor(DION)

リンク

2012/5/22(Tue) 00:44:09|NO.46798

>*むちゃくちゃなコードですみません^p^
本当に作り上げたい物だったらちゃんとした姿勢で質問してください。
作りたくも無いのに作ってるのなら諦めてください。



GrapeColor(DION)

リンク

2012/5/22(Tue) 00:59:19|NO.46799

スプリクトは全部左に寄せると見難いのでやめておいたほうがいいです。
基本ラベルとプリプロセッサ命令以外は先頭にTabを入れてください。
また{〜}の間は{と}より1つ多くTabを入れてください。
と、言うか最初を除いて自動的にTabが入るんで、そのTabは消さないほうがいいです。

(以下、任意ですがやると見やすいと思うこと)
repeat〜loop間はrepeatとloopより1つ多くTabを入れると見やすいです。
パラメーターが複数ある場合,(カンマ)の後ろに1つスペースを入れると見やすいです。
段落分けのように分かりやすく段落を入れるといい。
単純な物を除き、基本コメントを入れる。

(今後参考にして欲しいこと)
プログラムはメインルーチン+サブルーチンみたいな構成がオススメ。
重複する処理は1つのラベルにまとめるか、1つの命令(#deffuncや#defcfunc)にしてしまう。



spider

リンク

2012/5/22(Tue) 15:37:04|NO.46811

Tabのない丸投げはかなり引きます。
一回注意されたらちゃんとしましょう。

ッとそれはともかく
自分は超能力者じゃないのであなたのコードは理解できません。
しかし、自分でデバッグするコツを教えます。

・デバッグウィンドウを起動し、変数の値が思い通りか確かめる。
・処理ごとにコメントアウトしていって、正常に動いたら、
 そこのどこが間違ってるか確かめていく。
・title命令でタイトルバーに変数の値を書き込ませて、
 変数の値を確かめる。
・end命令でそこを通ったか調べるのも案外便利。

これらのことをすべてやったらほとんどバグは見つかります。
上の作業を考慮して、処理ごとにコメントを入れたり、
できるだけ短いソースの開発を心がけるとよりよいでしょう。



ミント

リンク

2012/5/22(Tue) 20:37:28|NO.46819

んー。皆言い切っているしその辺は言わなくって大丈夫だけど・・・
なんかいやーな予感がする・・・もしかしてソースを張られたやつしか見てないんじゃ・・・
前回の張られたソース、もしくはアドバイス見ているのなら改善してますよね?

改善しないといけない!というルールはないのだが、改善しないままコピペの状態だと成長しないよ(´・ω・`)
それに回等してくれる方も減ってきちゃうよ・・・?



7909ppr

リンク

2012/5/23(Wed) 06:02:20|NO.46821

いろいろとすみません。



暇人

リンク

2012/5/23(Wed) 20:39:31|NO.46826

誰も謝罪なんて求めてませんよ
重要なのは、言われてる事が理解できたか、解決の方法が分かったか
それも無しに謝罪だけしても何の意味もありませんよ



ミント

リンク

2012/5/23(Wed) 20:50:42|NO.46828

次回からがんばればおk!

努力する子には協力的だけど、努力しない子には皆回等しません。
なので自分のソースを改造したり、小さくしたり、コメント入れたり・・・
とりあえず皆が言っていることをひとつひとつやっていきましょう。


んで、今更軽く起動したら
>>"nur.bmp"
がないと怒られたので、DL出来るファイルもよく確かめときましょう。
できれば画像を必要としない「mes」を使って、敵の種類などを「color」でわけると素敵です。
後常に動いているのだから常に数値を見る必要があるので、「mes」をどこかに出すとデバッグしやすいです。


>>screen 0,510,
もし画像から引き下がれない場合は「600」とかにする。んで・・・

;例 color : boxf 510 color 255, : pos 530,0 : mes "敵の座標?" + kyarabx
(posはとりあえず画面外に置いとく)


これでリアルタイムで数値が見れるはず。
テストというかデバッグ用は新規で作って、コピペしてやるといいよ。
小さくする場合もそのつど新規作成で分けて作成するとバグを取り除きやすくなります。
とりあえずがんばれ。



ONION software Copyright 1997-2023(c) All rights reserved.