|
|
|
2013/9/2(Mon) 18:34:20|NO.56827
ちょっと前に質問したものです
横スクルールシューティング作ったんですが
スタート画面からスペースキーをおすと始まるはずなのに
149行目のパラメータが異常です
みたいなメッセージが出て終了してしまいます
repatをやりすごたのでしょうか?
わかるひとはおしえてください
;///画像読み込み///
buffer 1 :picload "mon_100.bmp" ;自キャラ画像読み込み
buffer 2 :picload "tama.gif" ;弾画像読み込み
buffer 5 :picload "haikei.jpg" ;背景画像読み込み
mmload "music1.mid",1
screen 0,1350,800 ;画面サイズを1350× 800に変更
MX=240:MY=160 ;自キャラの初期位置
randomize ;使うかどうかわからないけど乱数初期化
cls 4 ;画面の色を黒に設定
TAMA=0
KY=0
tekikazu=0
maps=0
mapleng=0
sc=0
gosub *SETMAP
mmplay 1
MX=80 :MY=160 :MYLIVE=1
dim SX,3 :dim SY,3 :dim TAMA,3
dim EX,TEKIKAZU :dim EY,TEKIKAZU :dim ELIVE,TEKIKAZU
dim EDX,TEKIKAZU :dim EDY,TEKIKAZU
dim POINTER,TEKIKAZU :dim ELOOP,TEKIKAZU
dim ESYURUI,TEKIKAZU ;敵の種類
BAKULIVE=0: BAKUX=0: BAKUY=0
WORLDX=50 ;スクロール座標
;///メインループ///
*hazimenomae
mmplay 1
color 255,255,255
pos 255,255
mes "スタート"
repeat
stick KY,31
if (KY&16)=16 :gosub *hazime
await 10
loop
*hazime
redraw 0
pos 271,0 :gcopy 5,10,10,1350,800 ;背景表示
pos 0,0 :gcopy 5,10,10,350,800 ;余白を背景の左端の部分で埋める
stick KY,31
redraw 0
MPSHIFT=WORLDX\16
MPSTART=WORLDX/16
gosub *DRAWMAP ;地形描画呼びだし
if MPSHIFT=0 :gosub *SETRETU ;敵配置呼びだし
repeat 3
gosub *SHOT ;弾処理
loop
repeat TEKIKAZU ;敵キャラ処理
if ELIVE(cnt)!0 :gosub *GOENEMY
loop
repeat TEKIKAZU ;当たり判定
if ELIVE(cnt)!0 :gosub *ATARI
loop
;//自キャラの移動//
stick KY,31
if (KY&1)=1 :MX=MX-12 :if MX<0 :MX=0 ;自キャラの左移動判定
if (KY&4)=4 :MX=MX+12 :if MX>1280 :MX=1280 ;自キャラの右移動判定
if (KY&2)=2 :MY=MY-12 :if MY<0 :MY=0 ;自キャラの上移動判定
if (KY&8)=8 :MY=MY+12 :if MY>799 :MY=799 ;自キャラの下移動判定
pos MX,MY ;自キャラ表示
gmode 2
gcopy 1,0,0,88,80
repeat TEKIKAZU ;敵キャラ処理
if ELIVE(cnt)!0 :gosub *GOENEMY
loop
repeat TEKIKAZU ;当たり判定
if ELIVE(cnt)!0 :gosub *ATARI
loop
MPX0=(MPSHIFT+MX+12)/16 :MPY0=(MY+12)/16 ;地形との当たり判定
MPX1=(MPSHIFT+MX+20)/16 :MPY1=(MY+20)/16
C=peek(MAPS,MPY0*MAPLENG+MPSTART-30+MPX0)
if (C>'0')and(C<'A') :MYLIVE=0
C=peek(MAPS,MPY1*MAPLENG+MPSTART-30+MPX1)
if (C>'0')and(C<'A') :MYLIVE=0
if BAKULIVE>0{ ;爆発表示
BAKULIVE=BAKULIVE-1
pos BAKUX,BAKUY
gcopy 1,96,0,32,32
}
font "MS ゴシック",18,1 ;スコア表示
pos 0,0 :color 255,255,255 :mes "SCORE:"+sc
redraw 1
await 1
;ステージクリアー、ゲームオーバー条件
if MYLIVE=0 :goto *GAMEOVER
if MAPLENG-2=MPSTART :goto *CLEARSTAGE
;スクロール
WORLDX=WORLDX+4
redraw 1
goto *hazime
;//弾発射//
*SHOT
if (KY&16)!=0 & TAMA(cnt)=0 { ;スペースキー判定
TAMA(cnt)=1
TX(cnt)=MX+24
TY(cnt)=MY+12
RENSYA=20
}
if TAMA(cnt)=1 {
TX(cnt)=TX(cnt)+30
color 0,255,255 :boxf TX(cnt),TY(cnt),TX(cnt)+18,TY(cnt)+4
if TX(cnt)>1349 :TAMA(cnt)=0
}
if RENSYA>0 :RENSYA=RENSYA-1
return
;//マップ//
*SETMAP
MAPLENG=512
sdim MAPS,MAPLENG*20
bload "yokomap.txt",MAPS,MAPLENG*20
return
*DRAWMAP
repeat 80
RCNT=cnt
repeat 100
if MPSTART-30+cnt<0 :continue
C=peek(MAPS,RCNT*MAPLENG+MPSTART-30+cnt)
if (C>'0') and (C<'A'){
pos cnt*16-MPSHIFT,RCNT*16
gcopy 2,(C-'1')*16,0,16,16
}
loop
loop
return
*atari
return
*setretu
return
*goenemy
return
*gameover
return
*clearstage
return
| |
|
2013/9/2(Mon) 19:16:57|NO.56828
YO!
おめぇさんYO!
画像がないから実行できねぇYO!
まずはそこをなんとかしようぜEXE!
|
|
2013/9/2(Mon) 19:19:15|NO.56829
すいません
ちょっとまってくださいYO
|
|
2013/9/2(Mon) 19:32:15|NO.56830
screen 0,1350,800 ;画面サイズを1350× 800に変更
MX=240:MY=160 ;自キャラの初期位置
randomize ;使うかどうかわからないけど乱数初期化
cls 4 ;画面の色を黒に設定
TAMA=0
KY=0
tekikazu=0
maps=0
mapleng=0
sc=0
gosub *SETMAP
mmplay 1
MX=80 :MY=160 :MYLIVE=1
dim SX,3 :dim SY,3 :dim TAMA,3
dim EX,TEKIKAZU :dim EY,TEKIKAZU :dim ELIVE,TEKIKAZU
dim EDX,TEKIKAZU :dim EDY,TEKIKAZU
dim POINTER,TEKIKAZU :dim ELOOP,TEKIKAZU
dim ESYURUI,TEKIKAZU ;敵の種類
BAKULIVE=0: BAKUX=0: BAKUY=0
WORLDX=50 ;スクロール座標
;///メインループ///
*hazimenomae
mmplay 1
color 255,255,255
pos 255,255
mes "スタート"
repeat
stick KY,31
if (KY&16)=16 :gosub *hazime
await 10
loop
*hazime
redraw 0
stick KY,31
redraw 0
MPSHIFT=WORLDX\16
MPSTART=WORLDX/16
gosub *DRAWMAP ;地形描画呼びだし
if MPSHIFT=0 :gosub *SETRETU ;敵配置呼びだし
repeat 3
gosub *SHOT ;弾処理
loop
repeat TEKIKAZU ;敵キャラ処理
if ELIVE(cnt)!0 :gosub *GOENEMY
loop
repeat TEKIKAZU ;当たり判定
if ELIVE(cnt)!0 :gosub *ATARI
loop
;//自キャラの移動//
stick KY,31
if (KY&1)=1 :MX=MX-12 :if MX<0 :MX=0 ;自キャラの左移動判定
if (KY&4)=4 :MX=MX+12 :if MX>1280 :MX=1280 ;自キャラの右移動判定
if (KY&2)=2 :MY=MY-12 :if MY<0 :MY=0 ;自キャラの上移動判定
if (KY&8)=8 :MY=MY+12 :if MY>799 :MY=799 ;自キャラの下移動判定
pos MX,MY ;自キャラ表示
gmode 2
mes "自キャラ"
repeat TEKIKAZU ;敵キャラ処理
if ELIVE(cnt)!0 :gosub *GOENEMY
loop
repeat TEKIKAZU ;当たり判定
if ELIVE(cnt)!0 :gosub *ATARI
loop
MPX0=(MPSHIFT+MX+12)/16 :MPY0=(MY+12)/16 ;地形との当たり判定
MPX1=(MPSHIFT+MX+20)/16 :MPY1=(MY+20)/16
C=peek(MAPS,MPY0*MAPLENG+MPSTART-30+MPX0)
if (C>'0')and(C<'A') :MYLIVE=0
C=peek(MAPS,MPY1*MAPLENG+MPSTART-30+MPX1)
if (C>'0')and(C<'A') :MYLIVE=0
font "MS ゴシック",18,1 ;スコア表示
pos 0,0 :color 255,255,255 :mes "SCORE:"+sc
redraw 1
await 1
;ステージクリアー、ゲームオーバー条件
if MYLIVE=0 :goto *GAMEOVER
if MAPLENG-2=MPSTART :goto *CLEARSTAGE
;スクロール
WORLDX=WORLDX+4
redraw 1
goto *hazime
;//弾発射//
*SHOT
if (KY&16)!=0 & TAMA(cnt)=0 { ;スペースキー判定
TAMA(cnt)=1
TX(cnt)=MX+24
TY(cnt)=MY+12
RENSYA=20
}
if TAMA(cnt)=1 {
TX(cnt)=TX(cnt)+30
color 0,255,255 :boxf TX(cnt),TY(cnt),TX(cnt)+18,TY(cnt)+4
if TX(cnt)>1349 :TAMA(cnt)=0
}
if RENSYA>0 :RENSYA=RENSYA-1
return
;//マップ//
*SETMAP
MAPLENG=512
sdim MAPS,MAPLENG*20
bload "yokomap.txt",MAPS,MAPLENG*20
return
*DRAWMAP
repeat 80
RCNT=cnt
repeat 100
if MPSTART-30+cnt<0 :continue
C=peek(MAPS,RCNT*MAPLENG+MPSTART-30+cnt)
if (C>'0') and (C<'A'){
pos cnt*16-MPSHIFT,RCNT*16
}
loop
loop
return
*atari
return
*setretu
return
*goenemy
return
*gameover
return
*clearstage
return
| |
|
2013/9/2(Mon) 19:38:09|NO.56831
おいおいOIOIオイスター
マップのtextがないぜジェントルメン
こいつはthat was textbooksなミスだぜぃ?
|
|
2013/9/2(Mon) 19:40:20|NO.56832
大変申し訳ないのですがテキストはyokomap.txt
という名前で作っていただけないでしょうか?
中身は空でいいので
|
|
2013/9/2(Mon) 19:59:41|NO.56833
これはpeekの2ばんめの引数がバッファのサイズをオーバーしてるんだな
具体的には10240以上になっとる
その性でエラー出るからたぶん計算式が間違えてる
|
|
2013/9/2(Mon) 20:02:43|NO.56834
といいますと
具体的にどのようにすればよろしいでしょうか?
|
|
2013/9/2(Mon) 20:33:10|NO.56835
いや、変数の意味とかは作った人にしかわからないから、どうしようもない
|
|
2013/9/2(Mon) 20:37:41|NO.56836
まずエラーメッセージは正確に書く必要がある
Ctrl+C でエラーダイアログの文章を、コピーできるので、それを使うとか
-->パラメータの値が異常です
>C=peek(MAPS,RCNT*MAPLENG+MPSTART-30+cnt)
値が異常なんだから
右側のパラメータが左の変数のメモリサイズ以上(あるいはマイナス)を示してる可能性が高い
ループを見ると
> repeat 80
> RCNT=cnt
> repeat 100
で512が入ってるMAPLENGとRCNTが掛けられてるので
40960バイトは必要になるが実際には
> sdim MAPS,MAPLENG*20
で20回分の10240バイトしか確保してない
エラーが出たときはデバックウィンドウも出るので
停止時の変数の中身を見る事が出来る
後、秒間30フレームとかじゃない限り
毎フレーム8000回ループしてマップ作るのは処理量的に無理がある・・・
|
|
2013/9/2(Mon) 20:45:03|NO.56837
なるほど!
ありがとうございます
それでカクカクしてたのか
|
|