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


HSPTV!掲示板


未解決 解決 停止 削除要請

2012
0429
流星群【これが完成しないと次に進めない!】マリオ風ゲームのステージ移動4解決


流星群

リンク

2012/4/29(Sun) 11:15:40|NO.46330

なんか前にいちどだけHSP掲示板使った時に名前あったけど
忘れたので流星群で。

HSPでマリオ風ジャンプゲームをつくっています。
1Fの一番上に行くと2Fにいくというものをつくって。
ステージはtxtファイルで管理しています。
で、今作成中なんですが
ステージ移動をしたあと
マップ管理用の
map(x,y)
を初期化して
あらたに2Fのマップを作ろうと思っているんですが
dim map,20,15
をすると
▲好董璽弧椶了にデバッグウィンドウをみるとmap,30,35とかになっています
しかも上手くステージ移動できていません。
助けてください!!
ソース

screen 0,640,480,16,320,120 buffer 1 picload "SLIME.bmp" buffer 2 picload "block.bmp" buffer 3 picload "enemy.bmp" gsel 0,1 mmload "JUMPSOUND.wav",10 buf_key=0 myHP=3 movespeed=0 mypicturecnt=0 my_x=32 my_xx=2.0 my_y=384 my=yy=12.0 JUMP=0 JUMPcnt=0 waittime=0 my_dir=1 enemy(0)=1 enemy_x(0)=352 enemy_y(0)=320 enemy_xx(0)=10 enemy_yy(0)=10 mapx=20 mapy=15 dim map,20,15 dim enemy,3 dim enemy_x,3 dim enemy_xx,3 dim enemy_y,3 dim enemy_yy,3 *setting dim map,20,15 my_xx=12 my_yy=13 mapx=20 mapy=15 ;dim map,20,15 MAPCNT++ MAPNAME="MAP_"+MAPCNT+".txt" dialog ""+MAPNAME notesel buf_1 noteload MAPNAME,3000 //map.txtの内容をbufに読み込む dialog ""+buf_1 repeat noteinfo(0) noteget row,i //bufのi行目のデータをrowに代入する repeat mapx getstr tip,row,index,',' index += strsize map(cnt,i) = int(tip) loop i++ index = 0 loop gosub *draw_map title ""+MAPCNT *MAIN redraw 0 my_xx=(my_x+16)/32 getkey KEY,37 if KEY=1 :my_xx=(my_x+31)/32 getkey KEY,39 if KEY=1 :my_xx=(my_x+3)/32 my_yy=my_y/32 if JUMPcnt>1 : my_yy=(my_y+25-1)/32 my_xx=int(my_xx) my_yy=int(my_yy) title "座標"+my_xx+","+my_yy color 255,255,255 boxf color 0,0,0 mypicturecnt+1 color 0,50,100 gmode 4,,,256 gosub *draw_map pos my_x,my_y color 0,50,100 if my_dir=0{ if mypicturecnt>=1 & mypicturecnt<=8 : gcopy 1,0,32,32,32 if mypicturecnt>=9 & mypicturecnt<=16 : gcopy 1,32,32,32,32 if mypicturecnt>=17 & mypicturecnt<=24 : gcopy 1,0,32,32,32 if mypicturecnt>=25 & mypicturecnt<=32 : gcopy 1,32,32,32,32 if mypicturecnt=32 : mypicturecnt=0 if JUMP=1 : gcopy 1,0,32,32,32 } if my_dir=1{ if mypicturecnt>=1 & mypicturecnt<=8 : gcopy 1,0,0,32,32 if mypicturecnt>=9 & mypicturecnt<=16 : gcopy 1,32,0,32,32 if mypicturecnt>=17 & mypicturecnt<=24 : gcopy 1,0,0,32,32 if mypicturecnt>=25 & mypicturecnt<=32 : gcopy 1,32,0,32,32 if mypicturecnt=32 : mypicturecnt=0 if JUMP=1 : gcopy 1,0,0,32,32 } gosub*MyAction my_xx=(my_x+16)/32 my_yy=(my_y+16)/32 my_xx=int(my_xx) my_yy=int(my_yy) if map(my_xx,my_yy) ! 0 : my_yy-16 if my_x/32<0 : my_x=0 if my_y/32<0 : my_x=0 await 1 redraw 1 my_yy=(my_y+30)/32 if MAPNAME="MAP_1.txt" & my_yy=0 {;dialog"クリアおめ" : end my_x=384 : my_y=416 : JUMP=1 : JUMPcnt=13 : goto*setting my_xx=12 :my_yy=13 } goto *MAIN *MyAction getkey KEY,37 if KEY=1 { if map(my_xx-1,my_yy)=0 { if movespeed < 6: movespeed++ my_x-movespeed : my_dir=0 if map(my_x/32,my_y/32)!0 : my_x+(movespeed/2) }} if KEY=0 : buf_key++ getkey KEY,39 if KEY=1 { if map(my_xx+1,my_yy)=0 { if movespeed < 6: movespeed++ my_x+movespeed : my_dir=1 if map(my_x/32,my_y/32)!0 : my_x-(movespeed/2) }} if KEY=0 : buf_key++ getkey KEY,88 if JUMP=0 & KEY=1 { if map(my_xx,my_yy+1) ! 0 & map(my_xx,my_yy-1) = 0{ mmplay 10 : JUMP=1 : JUMPcnt=13} } if JUMPcnt>0{ if my_yy>0{ if map(my_xx,my_yy-1)=0 :my_y-8 } JUMPcnt-- if JUMPcnt=0 :waittime=13 } if JUMPcnt<1 & waittime>0 { waittime-- if waittime=0 : waittime=-1 } if JUMP=1 & JUMPcnt<1 & waittime=-1: JUMP=0 ;if my_y<384 & JUMPcnt<1 { if map(my_xx,my_yy+1) = 0 & JUMPcnt<1 : my_y+8 ;} if buf_key=2 & movespeed>0 : movespeed-2 buf_key=0 return *draw_map gmode 4,0,0,256 color 0,50,100 x = 0 : y = 0 repeat mapy j = cnt repeat mapx i = cnt pos x,y gcopy 2,map(i,j)*32,0,32,32 x += 32 loop x = 0 : y += 32 loop return
おねがいします。



この記事に返信する


暇人

リンク

2012/4/29(Sun) 13:00:11|NO.46333

コピペで実行できないスクリプトは解決は難しい

二回目で可笑しくなるなら使いまわす変数に問題ある可能性が高い
まずループ内で使う変数は全てループに入る前に初期化する



暇人

リンク

2012/4/29(Sun) 13:34:40|NO.46334

実行できるようにして試したら
やっぱり二回目で初期化してないのが問題だった

i=0
をループ前に追加するだけ
indexはループ抜ける前に初期化されてるから今回は大丈夫だけど
後々ループ内を変更した時の事も考えたら一緒に初期化しといた方が良い



流星群

リンク

2012/4/29(Sun) 13:56:33|NO.46336

そうか。コピペで実行できないとしにくいんだ…
暇人さんありがとうございます。
できました!
次書くときはなるべく
コピペで実行できるようにして書こうと思います。



流星群

リンク

2012/4/29(Sun) 14:06:51|NO.46337

せっかくなので
コピペできる番も
書きます

1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1 1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1 1,0,0,0,0,0,0,1,1,1,1,1,0,0,0,0,0,0,0,1 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1 1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1 1,0,0,0,0,0,0,1,1,1,1,1,1,1,0,0,0,0,0,1 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1 1,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,0,0,0,1 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1 1,0,0,0,0,0,0,0,0,0,0,1,1,1,1,0,0,0,0,1 1,0,0,0,0,0,1,1,1,1,1,0,0,0,0,0,0,0,0,1 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1
これをMAP_1.txtとする


1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1 1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1 1,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1 0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,1 1,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1 1,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,1 1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1 1,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1 1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1
これをmAP_2.txtとする



screen 0,640,480,16,320,120 buf_key=0 myHP=3 movespeed=0 mypicturecnt=0 my_x=32 my_xx=2.0 my_y=384 my=yy=12.0 JUMP=0 JUMPcnt=0 waittime=0 my_dir=1 enemy(0)=1 enemy_x(0)=352 enemy_y(0)=320 enemy_xx(0)=10 enemy_yy(0)=10 mapx=20 mapy=15 dim map,20,15 dim enemy,3 dim enemy_x,3 dim enemy_xx,3 dim enemy_y,3 dim enemy_yy,3 *setting i=0 dim map,20,15 my_xx=12 my_yy=3 mapx=20 mapy=15 ;dim map,20,15 MAPCNT++ MAPNAME="MAP_"+MAPCNT+".txt" dialog ""+MAPNAME notesel buf_1 noteload MAPNAME,3000 //map.txtの内容をbufに読み込む dialog ""+buf_1 repeat noteinfo(0) noteget row,i //bufのi行目のデータをrowに代入する repeat mapx getstr tip,row,index,',' index += strsize map(cnt,i) = int(tip) loop i++ index = 0 loop gosub *draw_map title ""+MAPCNT *MAIN redraw 0 my_xx=(my_x+16)/32 getkey KEY,37 if KEY=1 :my_xx=(my_x+31)/32 getkey KEY,39 if KEY=1 :my_xx=(my_x+3)/32 my_yy=(my_y+4)/32 ;if JUMPcnt>1 : my_yy=(my_y+25-1)/32 my_xx=int(my_xx) my_yy=int(my_yy) title "座標"+my_xx+","+my_yy color 255,255,255 boxf color 0,0,0 mypicturecnt+1 color 0,50,100 gmode 4,,,256 gosub *draw_map pos my_x,my_y color 0,50,100 color 255,255,0 circle my_x,my_y,my_x+32,my_y+32 color 0,50,100 gosub*MyAction my_xx=(my_x+16)/32 my_yy=(my_y+16)/32 my_xx=int(my_xx) my_yy=int(my_yy) if map(my_xx,my_yy) ! 0 : my_yy-16 if my_x/32<0 : my_x=0 if my_y/32<0 : my_x=0 await 1 redraw 1 my_yy=(my_y+30)/32 if MAPNAME="MAP_1.txt" & my_yy=0 {;dialog"クリアおめ" : end my_x=384 : my_y=416 : JUMP=1 : JUMPcnt=13 : goto*setting my_xx=12 :my_yy=13 } goto *MAIN *MyAction getkey KEY,37 if KEY=1 { if map(my_xx-1,my_yy)=0 { if movespeed < 6: movespeed++ my_x-movespeed : my_dir=0 if map(my_x/32,my_y/32)!0 : my_x+(movespeed/2) }} if KEY=0 : buf_key++ getkey KEY,39 if KEY=1 { if map(my_xx+1,my_yy)=0 { if movespeed < 6: movespeed++ my_x+movespeed : my_dir=1 if map(my_x/32,my_y/32)!0 : my_x-(movespeed/2) }} if KEY=0 : buf_key++ getkey KEY,88 if JUMP=0 & KEY=1 { if map(my_xx,my_yy+1) ! 0 & map(my_xx,my_yy-1) = 0{ mmplay 10 : JUMP=1 : JUMPcnt=13} } if JUMPcnt>0{ if my_yy>0{ if map(my_xx,my_yy-1)=0 :my_y-8 } JUMPcnt-- if JUMPcnt=0 :waittime=13 } if JUMPcnt<1 & waittime>0 { waittime-- if waittime=0 : waittime=-1 } if JUMP=1 & JUMPcnt<1 & waittime=-1: JUMP=0 ;if my_y<384 & JUMPcnt<1 { if map(my_xx,my_yy+1) = 0 & JUMPcnt<1 : my_y+8 ;} if buf_key=2 & movespeed>0 : movespeed-2 buf_key=0 return *draw_map gmode 4,0,0,256 color 0,50,100 x = 0 : y = 0 repeat mapy j = cnt repeat mapx i = cnt pos x,y color map(i,j)*255,map(i,j)*255,map(i,j)*255 boxf x,y,x+32,y+32 x += 32 loop x = 0 : y += 32 loop return



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