|
|
2013/9/4(Wed) 20:15:07|NO.56861
シューティングで敵が表示されません
yokomap.txtというテキストファイルに数字やアルファベットを書き、
数字の場合は対応したマップが、
アルファベットの場合は敵が表示されるはずなのに敵が表示されません
どこがいけないのでしょうか?
|
|
2013/9/4(Wed) 20:50:08|NO.56862
ソースコードの一部と、yokomap.txtがないとどうしようもないです。
yokomapは公開が嫌なら質問用にサンプル的なものを作って、
どちらも載せてください。
上記のファイル群を何処かのロダに上げるのも良いです。
|
|
2013/9/4(Wed) 21:10:58|NO.56863
すいません
のせわすれました
#uselib "winmm.dll"
#func _joyGetPosEx "joyGetPosEx" int, var
goto *start
#deffunc joyGetPosEx array p1, int p2
p1.15=0:p1=52,255
_joyGetPosEx p2,p1
return
;///画像読み込み///
*start
buffer 1 :picload "mon_100.bmp" ;自キャラ画像読み込み
buffer 2 :picload "tama.gif" ;弾画像読み込み
buffer 3 :picload "c652b9a8.png"
buffer 4 :picload "syokubutu.png" ;植物画像読み込み
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
data=0
patstr=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
color 255,255,255
pos 255,255
mes "スタート"
repeat
stick KY,31
if (KY&16)=16 :gosub *hazime1
await 10
loop
stop
*hazime1
mmplay 1
*hazime
redraw 0
joyGetPosEx data, 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
gosub *syokubutu
;//自キャラの移動//
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 ;自キャラの下移動判定
joyGetPosEx data, 0
if data.2=0 :MX=MX-12 :if MX<0 :MX=0 ;自キャラの左移動判定
if data.2=65535 :MX=MX+12 :if MX>1280 :MX=1280 ;自キャラの右移動判定
if data.3=0 :MY=MY-12 :if MY<0 :MY=0 ;自キャラの上移動判定
if data.3=65535 :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*88
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
;//敵移動//
*goenemy
if ELOOP(cnt)>0 {
ELOOP(cnt)=ELOOP(cnt)-1
} else {
COM=PATSTR(POINTER(cnt),ESYURUI(cnt))
SP=int(PATSTR(POINTER(cnt)+1,ESYURUI(cnt)))
ELOOP(cnt)=int(PATSTR(POINTER(cnt)+2,ESYURUI(cnt)))
POINTER(cnt)=POINTER(cnt)+3
SP2=int(0.7*SP)
if COM="D1" { ;命令解釈
EDX(cnt)=-SP :EDY(cnt)=0
}
if COM="D2" {
EDX(cnt)=-SP2:EDY(cnt)=-SP2
}
if COM="D3" {
EDX(cnt)=0:EDY(cnt)=-SP
}
if COM="D4" {
EDX(cnt)=SP2:EDY(cnt)=-SP2
}
if COM="D5" {
EDX(cnt)=SP:EDY(cnt)=0
}
if COM="D6" {
EDX(cnt)=SP2:EDY(cnt)=SP2
}
if COM="D7" {
EDX(cnt)=0:EDY(cnt)=SP
}
if COM="D8" {
EDX(cnt)=-SP2:EDY(cnt)=SP2
}
if COM="S" {
D=sqrt( (MX-EX(cnt))*(MX-EX(cnt)) + (MY-EY(cnt))*(MY-EY(cnt)) )
if D!0.0{
EDX(cnt)=int(double(MX-EX(cnt))/D * SP)-2 ;スクロール補正
EDY(cnt)=int(double(MY-EY(cnt))/D * SP)
}
}
if COM="R" :POINTER(cnt)=0
}
EX(cnt)=EX(cnt)+EDX(cnt)
EY(cnt)=EY(cnt)+EDY(cnt)
pos EX(cnt),EY(cnt)
gcopy 5,ESYURUI(cnt)*32,32,32,32
if (EX(cnt)<0) or (EX(cnt)>480) or (EY(cnt)<0) or (EY(cnt)>288) {
ELIVE(cnt)=0 ;画面外に出たら消滅
}
return
return
;//敵動き//
*SETPATSTR
sdim PATSTR,3,35,4
PATSTR(0,0)="D1","4","30","D8","6","15","D1","12","70","R","0","0"
PATSTR(0,1)="D8","6","10","D1","6","10","D2","6","10","D1","6","10","R","0","0"
PATSTR(0,2)="D8","10","30","D2","10","30","R","0","0"
PATSTR(0,3)="D1","4","30","D8","6","15","D5","8","70","R","0","0"
return
;//敵配置//
*SETRETU
if MPSTART<0 :return
repeat 20
RCNT=cnt
C=peek(MAPS,RCNT*MAPLENG+MPSTART)
if C>='A' {
repeat TEKIKAZU
if ELIVE(cnt)=0 {
ELIVE(cnt)=1
EX(cnt)=480
EY(cnt)=RCNT*16
POINTER(cnt)=0
ELOOP(cnt)=0
ESYURUI(cnt)=C-'A'
break
}
loop
}
loop
return
*syokubutu
return
*GAMEOVER
mmplay 2
repeat 10
redraw 0
pos 271,0 :gcopy 5,10,10,1350,800 ;背景表示
pos 0,0 :gcopy 5,10,10,350,800 ;余白を背景の左端の部分で埋める
XX=cnt+1
pos MX,MY
gcopy 3,0+(192*cnt),0,192,192
wait 10
redraw 1
loop
SC=0
dialog "ゲームオーバー",1,"GAMEOVER"
if stat=6 : goto *hazime
end
*clearstage
return
yokomap.txtの中身
000000000000000000000111116111111111111118111191111111711111111111111111111111111111111111111111111111181111111111111111111111111111111111111111111111111111111111111111111111111111116666666611111111111111111111111111111116111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111118111111111111811111111111111111111111111111111111111111888998811111111100000C0ADC0ADC0C0000000000000000000000000000000
00000000000000000000000111111111111111111111111111111111111111811111111111111111111155111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111666666666611111111111111111111119111111117111111111111111111111111111111111111111111111000001111999999999999999991991111111111111111111111111111111177777777999997771111111111111111155555C0C0C0C0C0C01111111111117111111111111800800100000000000001111111111111111111888998811111110000000000000000000000000000000000000000000000000
000000000000000000000000055555555554445555555544444555555555555555555511111555555555000000000000000000000000000000000000000000000110000000000000000000000000055555555555555555555111111111166666711111111111155551111000000000000000000001111111111111977777911111111111115550000000000111111111999999999999999988888888888899999999991111111111111111111111111111111111111100000000000000000000000000000000000000000111111111111111111111111000000000000011111444444411111000000000C0ADC0ADC0C0000000000000000000000000000000
000000000000000000000000000000000000000000000AD00000000000000000000AD0000000000000000000000000000000000000000000000000000000000001110000C0C0C0C0C0C00000000000000000000000000000005551111111169661111111115510C0C0C0C0C0C0000000000000000000441111111199977791111111111155000000000000000111111111111111199999999999999999991111111111111111111111111111111111111100000000000000000C0C0C0C0C0C000000000000000000000000000B0B0B0B0B0B000000000000000000000000000AD00ADAD0000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000332221111111000000000000000000000000000000000000000000000000555111666666611111555100000000000000000000000000AD0AD00004944111197791191111111155500000000000000000001111111111111111111111111111111111111111111111111111111444444444111000000000000000000000000000000000000AD00000000000000000B0B000000000000000000000000000000000000000000000000000000000000C0ADC0ADC0C0000000000000000000000000000000
000000000000000000000000000000000000AD000000000000000000000000000000AD00000000000000000000000000000000000000000000001111111167778111110000C0C0C0C0C00000000000001110000C0C000000000000000511116611115500000000C0C0C0C0C0C0000000000000000000000000441197779991111555500000000AD0000000000ADAD01111111111111177777777777777777777111114444444111110B0B0B0B0B0B0000000000000000000000000000000000000000000000B0B0B0B0B00000B0B0B0B0B0B000000000000000000000000000ADAD00AD0000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000AD000000000000000000000000000000000000000000B0B0B0B0B0B0B0000000001111111111111696611111000000000000000000000001117110000000000000000000000001166110000000000000000000000000000000000000AD00AD000000044111111111440AD000000000000000000000000000001111111111111111111111111111414444110B0B0B0B0B0B000000000000000000000000000000000000000000000AD000000000000000000000B0B0000000000000000000000000000000000000000000000000000000B0B0B0B0B0B0B0B0B0B0000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004555444540000000000000000000000111188881110000000C0C0C0C0000000000660000000000000000000000001130000000000000000000000000004444111140AD00000000000000000000AD00000000000000000444444455555444444400B0B0B0B0000000000000000000000000000000000000000000000000000000AD00AD00AD00000B0B0B0B0B0000004444444000000000000000000000000000000AD00ADAD0000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000B0B0B0B0B0B0B000000000000000AD00AD0AD00000000000000000000000000000111171100000000000000000000000000000000000000000000000000011111000000000000000000000000000000444400000000000000000000000000000000000000B0B0B0B0B0B0B0B0B0B0B0B0B000000000000000000000000000000000000000000000000000000000000AD000000000000000000000000000444411111114444000000000000000000000000000000000000000B0B0B0B0B0B0B0B0B0B0000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001110000000000000000000000000000000000000000000000000000111113000000000000000000000000AD00AD44000000000000000000AD000000000000AD0000000000000000000000000000000000000000000000000022222222221000000000000000000000000000000000000AD00AD0AD000000000111111111111111111111111111100000000000000000ADAD00AD0000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000A00000000000000000000000000000000000000000B0B0B0B0B0B0B0000000000000000AD0AD0AD000000000000000000000000000000000000000000000000000000000000000000000000000000000AD00011000013330000000000000000000000000000AD000000000000000000000000000000000000000000000000000000000000000000000003333333333331111111111111100000000000000000000000000000AD00000000000AD000000000000055511111155550000000000000000000000000000000000000000B0B0B0B0B0B0B0B0B0B000000000000000000000000000000
00000000000000000000B0B0B0B0B0B0B0B0000000000000000000011000000011300000000000000000000000AD00000000000000000000000000000000000000000000000000000022220000000003333333311111111111000001111110011133331000000000000000000000000000000000AD000000000B0B0B0B0B055555500B0B0B0B000000000000000000000AD00ADAD0000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000B0B0B0B0B0B0B0B0000000000000000000011000000011300000000000000000000000AD00000000000000000000000000000000000000000000000000000022220000000003333333311111111111000001111110011133331000000000000000000000000000000000AD000000000B0B0B0B0B055555500B0B0B0B000000000000000000000AD00ADAD0000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000AD00000000000000AD00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000B0B0B0B0B0B0B0B0000000000000000000011000000011300000000000000000000000AD00000000000000000000000000000000000000000000000000000022220000000003333333311111111111000001111110011133331000000000000000000000000000000000AD000000000B0B0B0B0B055555500B0B0B0B000000000000000000000AD00ADAD0000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000AD00000000000000AD00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000B0B0B0B0B0B0B0B0000000000000000000011000000011300000000000000000000000AD00000000000000000000000000000000000000000000000000000022220000000003333333311111111111000001111110011133331000000000000000000000000000000000AD000000000B0B0B0B0B055555500B0B0B0B000000000000000000000AD00ADAD0000000000000000000000000000000000000000000000000000000
00000000000000000000000000000AD000000000000000AD000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000001300000000000000000000000000000000000000000000000000000000000002222222222222211111111111111111111111100000000000000000000110000000011333331000000000000000000000000AD0000000000000000000000B0B0B0B00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001110000000000003300000000000000000000000000000000000000000000000000000022221111111111111111111111111111111111100000000000000000000000000000000000000001133311310000000000000AD0000000000000000B0B0B0B0B000000000B0B0B0B000000000000000000000ADAD00AD0000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000A0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001110110000000000001300000000000000000000000000000000000000000000000000221100000000000000000001111111111111100000000000066077008800990066000000000000000000001111133333110000000000000000000000000000000000B0B0B0B00000000000000000000000000000000000000000000000000ADADADADAD00000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002222113333333333312213333333122223222221000000000000000000000000000000000000000000111000011000000000000130000000000000000000000000000000000000000000002221111111111110000000000000000111100011000000000022222222222222222222222000000000000000000666666661111110000000000000000000000000000000000000000000000000000000000000000000AD00ADAD0000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000022222222222222222222233333333338888888888888888888888888888888888888811000000000000000000000000000000000000000111000000000110066600000013322222222222222200000000000111133332222222211111111111111111111111000000000001100011000000000011111111111111111111111000000000000000000777777777777111111110000000000000000000000000000000000002222233333333000000000000000000000000000000000ADADADADAD00000000000000000000000000000000
000000000000000000000003333333003333333333333330033333333333333333333333333333333333331111111111777777777777777777777777777777777777777777777777777777777777777777711111111111111111111111111111111111111111000000777000111111111111111111111111111111111111111111111111100000000000000000000000000000000000000000000100001000000000000000001111111111111111000000000000000000888888888888888888111113333110000000000000000022222222221111000011111333333333333333333000000000000000000000000000000000000000000000000000000000
000000000000000000011111111111671111111111111116611111111111111111111111111111111111111999999999999999999999999999999999999999999999999999999999999999999999999999911111111111111111111111111111111111111111111111111111100000000000111111111111111111111111111111111111111111111100000000000000000000000000000000000000000000000000000000000000011111111100000000000000000000999999999999999999999999911418888888888888882211111111111111111111111111111111111111111333333330000000000000000000000000000000000000000000000000
000000000000000011111111111111111118111119111111111111111111111111111111111111111111111111111111111111111111111111111111111116666666666666666666666666666666666666611111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111112222222222222222222222222222222222222222222222222211111111122222222222222222222111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100000000000000000000000000000000000000000000000

| |
|
2013/9/4(Wed) 21:11:28|NO.56864
すいません
yokomap.txtが切れてますが
途中まででも大丈夫です
|
|
2013/9/4(Wed) 22:00:47|NO.56868
といいますと?
|
|
2013/9/4(Wed) 22:32:13|NO.56873
はい
ちょっとまってください
なおします
|
|
2013/9/4(Wed) 22:34:26|NO.56874
なおしましたがそれでもかわりません
あとgosub付け足しました
#uselib "winmm.dll"
#func _joyGetPosEx "joyGetPosEx" int, var
goto *start
#deffunc joyGetPosEx array p1, int p2
p1.15=0:p1=52,255
_joyGetPosEx p2,p1
return
;///画像読み込み///
*start
buffer 1 :picload "mon_100.bmp" ;自キャラ画像読み込み
buffer 2 :picload "tama.gif" ;弾画像読み込み
buffer 3 :picload "c652b9a8.png"
buffer 4 :picload "syokubutu.png" ;植物画像読み込み
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
data=0
patstr=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 ;スクロール座標
gosub *SETPATSTR
;///メインループ///
*hazimenomae
color 255,255,255
pos 255,255
mes "スタート"
repeat
stick KY,31
if (KY&16)=16 :gosub *hazime1
await 10
loop
stop
*hazime1
mmplay 1
*hazime
redraw 0
joyGetPosEx data, 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
gosub *syokubutu
;//自キャラの移動//
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 ;自キャラの下移動判定
joyGetPosEx data, 0
if data.2=0 :MX=MX-12 :if MX<0 :MX=0 ;自キャラの左移動判定
if data.2=65535 :MX=MX+12 :if MX>1280 :MX=1280 ;自キャラの右移動判定
if data.3=0 :MY=MY-12 :if MY<0 :MY=0 ;自キャラの上移動判定
if data.3=65535 :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*88
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
;//敵移動//
*goenemy
if ELOOP(cnt)>0 {
ELOOP(cnt)=ELOOP(cnt)-1
} else {
COM=PATSTR(POINTER(cnt),ESYURUI(cnt))
SP=int(PATSTR(POINTER(cnt)+1,ESYURUI(cnt)))
ELOOP(cnt)=int(PATSTR(POINTER(cnt)+2,ESYURUI(cnt)))
POINTER(cnt)=POINTER(cnt)+3
SP2=int(0.7*SP)
if COM="D1" { ;命令解釈
EDX(cnt)=-SP :EDY(cnt)=0
}
if COM="D2" {
EDX(cnt)=-SP2:EDY(cnt)=-SP2
}
if COM="D3" {
EDX(cnt)=0:EDY(cnt)=-SP
}
if COM="D4" {
EDX(cnt)=SP2:EDY(cnt)=-SP2
}
if COM="D5" {
EDX(cnt)=SP:EDY(cnt)=0
}
if COM="D6" {
EDX(cnt)=SP2:EDY(cnt)=SP2
}
if COM="D7" {
EDX(cnt)=0:EDY(cnt)=SP
}
if COM="D8" {
EDX(cnt)=-SP2:EDY(cnt)=SP2
}
if COM="S" {
D=sqrt( (MX-EX(cnt))*(MX-EX(cnt)) + (MY-EY(cnt))*(MY-EY(cnt)) )
if D!0.0{
EDX(cnt)=int(double(MX-EX(cnt))/D * SP)-2 ;スクロール補正
EDY(cnt)=int(double(MY-EY(cnt))/D * SP)
}
}
if COM="R" :POINTER(cnt)=0
}
EX(cnt)=EX(cnt)+EDX(cnt)
EY(cnt)=EY(cnt)+EDY(cnt)
pos EX(cnt),EY(cnt)
gcopy 5,ESYURUI(cnt)*32,32,32,32
if (EX(cnt)<0) or (EX(cnt)>480) or (EY(cnt)<0) or (EY(cnt)>288) {
ELIVE(cnt)=0 ;画面外に出たら消滅
}
return
return
;//敵動き//
*SETPATSTR
sdim PATSTR,3,35,4
PATSTR(0,0)="D1","4","30","D8","6","15","D1","12","70","R","0","0"
PATSTR(0,1)="D8","6","10","D1","6","10","D2","6","10","D1","6","10","R","0","0"
PATSTR(0,2)="D8","10","30","D2","10","30","R","0","0"
PATSTR(0,3)="D1","4","30","D8","6","15","D5","8","70","R","0","0"
return
;//敵配置//
*SETRETU
if MPSTART<0 :return
repeat 80
RCNT=cnt
C=peek(MAPS,RCNT*MAPLENG+MPSTART)
if C>=A {
repeat TEKIKAZU
if ELIVE(cnt)=0 {
ELIVE(cnt)=1
EX(cnt)=480
EY(cnt)=RCNT*16
POINTER(cnt)=0
ELOOP(cnt)=0
ESYURUI(cnt)=C-A
break
}
loop
}
loop
return
*syokubutu
pos 50,50
gmode 2
gcopy 4,0,0,250,50
return
*GAMEOVER
mmplay 2
repeat 10
redraw 0
pos 271,0 :gcopy 5,10,10,1350,800 ;背景表示
pos 0,0 :gcopy 5,10,10,350,800 ;余白を背景の左端の部分で埋める
XX=cnt+1
pos MX,MY
gcopy 3,0+(192*cnt),0,192,192
wait 10
redraw 1
loop
SC=0
dialog "ゲームオーバー",1,"GAMEOVER"
if stat=6 : goto *hazime
end
*clearstage
return

| |
|
2013/9/4(Wed) 23:06:34|NO.56875
"A"のアスキーコードと文字列からpeekで取り出したコードを比較してるんだから
>if C>='A'
こっちであってるよ
問題は敵の最大数をTEKIKAZUで先に決めて
空いてる所をループして探す仕様にしてるのに
>tekikazu=0
で0にしてる所
何か想定外の動きしてると思ったら何処まで処理がされてるのか
確認する工夫をした方が良い
今回の場合敵が配置されてるのか確かめて
されてないなら何処が問題か探せば良かった
|
|
2013/9/4(Wed) 23:12:26|NO.56876
>何処まで処理がされてるのか
「何処まで想定した動きになってるか」だな・・・
後、NO.56875のはスクリプトを実行して確かめた訳じゃないので他にも問題がある可能性はある
|
|
2013/9/4(Wed) 23:26:58|NO.56879
画像などがないと、回答者がコードを実行できないので的確な回答がしにくいです。
とはいえ「画像はこれとこれとこれを使って下さい」などと言われてもやはり面倒なので、画像を使っているところはboxfなどで塗りつぶして代用するなどして、コード単体で実行できるようにしましょう。
頑張って実際に実行してみたところ、暇人さんが指摘なさっている点の他に*SETPATSTRが呼ばれていないのでpatstrを二次元配列として使用しようとしてエラーになる問題がありました。
それを直してみると、画像がないのでよくわかりませんが問題なく動いているように見えます。
一度も動作チェックをせずにここまで書けたことに感心します。
|
|
2013/9/4(Wed) 23:28:58|NO.56880
すみません、NO.56874で火狐さんがgosubを付け加えていましたね。
|
|
2013/9/4(Wed) 23:41:14|NO.56881
マップも敵も映らないの?
敵だけ?
|
|
2013/9/5(Thu) 08:53:39|NO.56886
返信が遅れました
マップは映ります
敵が全くうつりません
|
|
2013/9/5(Thu) 09:02:48|NO.56887
あとTEKIKAZUは0でなく30になおしました
しりあいがつくったスクリプトを改良しようとしているのですが
しりあいがつくった元のスクリプトはうまくいきます
randomize
buffer 1
picload "chara.bmp" ;キャラ画像の読み込み
buffer 2
picload "tikei.bmp" ;地形画像の読み込み
mmload "burst01.wav",0
mmload "yokosuku.mid",1
mmload "smoke03.wav",2
screen 0,480,320
SC=0 :STAGE=1
gosub *SETPATSTR
;/■/■/■ゲームスタート/■/■/■
*GAMESTART
TEKIKAZU=30
gosub *SETMAP
mmplay 1
MX=80 :MY=160 :MYLIVE=1
dim SX,3 :dim SY,3 :dim SHOT,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=-320 ;スクロール座標
gmode 2
;/■/■/■メインループ/■/■/■
*DRAWLOOP
redraw 0
MPSHIFT=WORLDX\16
MPSTART=WORLDX/16
color 0,0,0 :boxf 0,0,479,319
gosub *DRAWMAP ;地形描画呼びだし
if MPSHIFT=0 :gosub *SETRETU ;敵配置呼びだし
stick KY,31
if (KY&1)=1 :MX=MX-8 :if MX<0 :MX=0 ;左移動
if (KY&4)=4 :MX=MX+8 :if MX>448 :MX=448 ;右移動
if (KY&2)=2 :MY=MY-8 :if MY<0 :MY=0 ;上移動
if (KY&8)=8 :MY=MY+8 :if MY>288 :MY=288 ;下移動
repeat 3
gosub *GOSHOT ;弾処理
loop
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
pos MX,MY ;自キャラ表示
gcopy 1,0,0,32,32
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 30
;ステージクリアー、ゲームオーバー条件
if MYLIVE=0 :goto *GAMEOVER
if MAPLENG-2=MPSTART :goto *CLEARSTAGE
;スクロール
WORLDX=WORLDX+4
goto *DRAWLOOP
;/■/■/■弾の移動ルーチン/■/■/■
*GOSHOT
if (KY&16)=16 and SHOT(cnt)=0 and RENSYA=0 {
SHOT(cnt)=1 ;弾発射チェック
SX(cnt)=MX+24
SY(cnt)=MY+12
RENSYA=20
}
if SHOT(cnt)=1 { ;弾移動
SX(cnt)=SX(cnt)+12
color 0,255,255
boxf SX(cnt),SY(cnt),SX(cnt)+12,SY(cnt)+4
if SX(cnt)>474 :SHOT(cnt)=0
MPX0=(MPSHIFT+SX(cnt)+6)/16 :MPY0=(SY(cnt)+2)/16 ;地形との当たり判定
C=peek(MAPS,MPY0*MAPLENG+MPSTART-30+MPX0)
if (C>'0')and(C<'A') :SHOT(cnt)=0
}
if RENSYA>0 :RENSYA=RENSYA-1
return
;/■/■/■敵の移動ルーチン/■/■/■
*GOENEMY
if ELOOP(cnt)>0 {
ELOOP(cnt)=ELOOP(cnt)-1
} else {
COM=PATSTR(POINTER(cnt),ESYURUI(cnt))
SP=int(PATSTR(POINTER(cnt)+1,ESYURUI(cnt)))
ELOOP(cnt)=int(PATSTR(POINTER(cnt)+2,ESYURUI(cnt)))
POINTER(cnt)=POINTER(cnt)+3
SP2=int(0.7*SP)
if COM="D1" { ;命令解釈
EDX(cnt)=-SP :EDY(cnt)=0
}
if COM="D2" {
EDX(cnt)=-SP2:EDY(cnt)=-SP2
}
if COM="D3" {
EDX(cnt)=0:EDY(cnt)=-SP
}
if COM="D4" {
EDX(cnt)=SP2:EDY(cnt)=-SP2
}
if COM="D5" {
EDX(cnt)=SP:EDY(cnt)=0
}
if COM="D6" {
EDX(cnt)=SP2:EDY(cnt)=SP2
}
if COM="D7" {
EDX(cnt)=0:EDY(cnt)=SP
}
if COM="D8" {
EDX(cnt)=-SP2:EDY(cnt)=SP2
}
if COM="S" {
D=sqrt( (MX-EX(cnt))*(MX-EX(cnt)) + (MY-EY(cnt))*(MY-EY(cnt)) )
if D!0.0{
EDX(cnt)=int(double(MX-EX(cnt))/D * SP)-2 ;スクロール補正
EDY(cnt)=int(double(MY-EY(cnt))/D * SP)
}
}
if COM="R" :POINTER(cnt)=0
}
EX(cnt)=EX(cnt)+EDX(cnt)
EY(cnt)=EY(cnt)+EDY(cnt)
pos EX(cnt),EY(cnt)
gcopy 1,ESYURUI(cnt)*32,32,32,32
if (EX(cnt)<0) or (EX(cnt)>480) or (EY(cnt)<0) or (EY(cnt)>288) {
ELIVE(cnt)=0 ;画面外に出たら消滅
}
return
;/■/■/■敵パターン設定/■/■/■
*SETPATSTR
sdim PATSTR,3,35,4
PATSTR(0,0)="D1","4","30","D8","6","15","D1","12","70","R","0","0"
PATSTR(0,1)="D8","6","10","D1","6","10","D2","6","10","D1","6","10","R","0","0"
PATSTR(0,2)="D8","10","30","D2","10","30","R","0","0"
PATSTR(0,3)="D1","4","30","D8","6","15","D5","8","70","R","0","0"
return
;/■/■/■当たり判定/■/■/■
*ATARI
TEV=ELIVE(cnt) :TEX=EX(cnt) :TEY=EY(cnt)
if TEV=1 & (TEX+24)>(MX+8) & (MX+24)>(TEX+8) & (TEY+24)>(MY+8) & (MY+24)>(TEY+8) {
MYLIVE=0 ;自キャラと敵の当たり判定
}
repeat 3 ;敵と弾の当たり判定
if SHOT(cnt)=1 & TEV=1 & (TEX+32)>SX(cnt) & (SX(cnt)+12)>TEX & (TEY+32)>SY(cnt) & (SY(cnt)+12)>TEY {
TEV=0
SHOT(cnt)=0
SC=SC+10
BAKULIVE=10: BAKUX=TEX: BAKUY=TEY ;爆発処理
mmplay 0
}
loop
ELIVE(cnt)=TEV
return
;/■/■/■マップ読み込み/■/■/■
*SETMAP
MAPLENG=512
sdim MAPS,MAPLENG*20
bload "yokomap.txt",MAPS,MAPLENG*20
return
;/■/■/■マップ表示/■/■/■
*DRAWMAP
repeat 20
RCNT=cnt
repeat 31
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
;/■/■/■敵配置/■/■/■
*SETRETU
if MPSTART<0 :return
repeat 20
RCNT=cnt
C=peek(MAPS,RCNT*MAPLENG+MPSTART)
if C>='A' {
repeat TEKIKAZU
if ELIVE(cnt)=0 {
ELIVE(cnt)=1
EX(cnt)=480
EY(cnt)=RCNT*16
POINTER(cnt)=0
ELOOP(cnt)=0
ESYURUI(cnt)=C-'A'
break
}
loop
}
loop
return
;/■/■/■ステージクリア処理/■/■/■
*CLEARSTAGE
color 255,0,0 :font "MS ゴシック",30,1
pos 160,100 :mes "STAGECLEAR"
wait 300
STAGE=STAGE+1
SC=SC+100
;goto *GAMESTART ;次の面がないのでおしまい
end
;/■/■/■ゲームオーバー処理/■/■/■
*GAMEOVER
mmplay 2
repeat 3
pos MX,MY
gcopy 1,32+(32*cnt),0,32,32
wait 10
loop
SC=0
dialog "REPLAY?",2,"GAMEOVER"
if stat=6 : goto *GAMESTART
end

| |
|
2013/9/5(Thu) 12:32:23|NO.56892
どこがいけないでしょうか?
|
|
2013/9/5(Thu) 14:55:52|NO.56897
できました
|
|