|
|
2011/1/4(Tue) 15:54:19|NO.36525
この記事は投稿者により削除されました。
2011/1/13(Thu) 17:29:37
|
|
2011/1/4(Tue) 21:46:40|NO.36528
サブルーチンだけみせられても何とも言えませn
|
|
2011/1/5(Wed) 06:28:57|NO.36530
バグが残っていますが
少し面倒になってきたので、この辺で。
#include "user32.as"
scx = 800 ;ウィンドウサイズx
scy = 480 ;ウィンドウサイズy
mysize = 32 ;自分の大きさ mysize
buffer 1
screen 0,scx,scy
gmode 2
;定数の定義
jump=10 ;ジャンプ力
gr=2 ;重力(高いほど重力低い)
fallmax=15 ;最高落下速度
speed=2 ;横移動のスピード
;変数の初期化
gcount=gr ;重力カウンター
ox=x-mysize/2 ;自分位置x
oy=0 ;自分位置y
omx=0 ;左右移動量
omy=0 ;上下移動量
jimen=0 ;地面にいるか空中にいるか
#const o %0000
#const g %0001
#const w %0010
#const s %0011
;マップ読み込み
dim MAP,16,16
; 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4
MAP(0,0) =o,o,o,o,o,o,o,o,o,o,o,o,o,o,w
MAP(0,1) =o,o,o,o,o,o,o,o,o,o,o,o,o,o,w
MAP(0,2) =o,o,o,o,o,o,o,o,o,o,o,o,o,o,w
MAP(0,3) =o,o,o,o,o,o,o,o,o,o,o,o,o,o,w
MAP(0,4) =o,s,g,g,g,g,s,o,o,o,o,o,o,o,w
MAP(0,5) =o,o,o,o,o,o,o,g,s,o,o,o,o,o,w
MAP(0,6) =o,o,o,o,o,o,o,o,o,o,o,o,o,o,w
MAP(0,7) =o,o,o,o,o,o,o,o,o,o,o,s,s,o,g
MAP(0,8) =o,o,o,o,o,o,o,o,o,o,o,w,o,o,w
MAP(0,9) =o,o,o,o,o,o,o,o,s,o,o,o,o,o,w
MAP(0,10)=o,o,o,o,o,o,o,o,w,o,o,o,o,o,w
MAP(0,11)=o,o,o,o,o,s,o,o,w,o,o,s,o,o,w
MAP(0,12)=o,o,o,o,o,w,o,o,o,o,o,w,o,o,w
MAP(0,13)=o,o,o,o,o,w,o,o,o,o,o,w,o,o,w
MAP(0,14)=g,g,g,g,g,g,g,g,g,g,g,g,g,g,g
; 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4
*main
redraw 0
gosub *DRAWMAP
gosub *jibunsyori
gosub *drawown
redraw 1
await 1
goto *main
*DRAWMAP
color 0,0,0 :boxf 0,0,799,479
repeat 15
RCNT=cnt
repeat 15
if MAP(cnt,RCNT)!0 {
color 255,255,255
boxf cnt*32,RCNT*32 , cnt*32+32 -1 ,RCNT*32+32 -1
}
loop
loop
return
*jibunsyori
stick KY,5,1
if KY and 1 : omx=-speed :
if KY and 4 : omx=speed :
if KY and 16 {
if jimen :omy=-jump:jimen = 0
}
gcount--
if jimen : gcount=0 : omy = 0
if gcount=0 {
omy = limit(omy+1,-jump,fallmax)
gcount=gr
}
stokox = ox
ox+=omx
oy+=omy
opx0=(ox)/32: opy0=(oy)/32
opx1=(ox+31)/32: opy1=(oy+31)/32
jimen = ( (MAP(opx0,opy1)&g) or (MAP(opx1,opy1)&g) )
kabe = ( (MAP(opx0,opy0)&w) or (MAP(opx1,opy0)&w))
kabe2 = ( (MAP(opx0,opy1)&w) or (MAP(opx1,opy1)&w) )
tenjyou = ( (kabe!0) and (omy<=-1))
if tenjyou : oy=(opy0+1)*32 : omy = 0
if kabe : ox=stokox
if (jimen) {
if kabe2 {
if (oy\32)!2 : ox = stokox :
if (ox\32) or (opx0=opx1) : oy=opy0*32+1
}else{
oy=opy0*32+1
}
}
omx=0
ox=limit(ox,0,scx)
title strf("地面 %d : 壁 %d,%d : 天井 %d : 現在位置 %d,%d : 移動予定 %d,%d",jimen,kabe,kabe2,tenjyou,opx0,opy0,opx1,opy1)
return
*drawown
color 255
// boxf ox,oy,ox+32-1,oy+32-1
if jimen {
boxf ox,oy-1,ox+32-1,oy+32-2
}else{
boxf ox,oy,ox+32-1,oy+32-1
}
return
| |
|
2011/1/5(Wed) 14:01:53|NO.36533
ループ内で判定をX移動後とY移動後2回しています。
変数名が適当なので醜いです。(^^;
dim map,10,10
map(0,0)=1,1,1,1,1,1,1,1,1,1
map(0,1)=1,0,0,0,0,0,0,0,0,1
map(0,2)=1,0,0,0,0,0,0,0,0,1
map(0,3)=1,0,0,0,0,1,0,0,0,1
map(0,4)=1,0,0,0,0,1,1,0,0,1
map(0,5)=1,0,0,0,0,0,0,0,0,1
map(0,6)=1,0,0,0,0,0,0,1,0,1
map(0,7)=1,1,0,0,0,0,1,0,1,1
map(0,8)=1,0,1,0,0,1,0,0,0,1
map(0,9)=1,1,1,1,1,1,1,1,1,1
color 0,0,0
boxf
x=100:y=100:size=30:bsize=40:
repeat
ax=0
stick sk,5
if sk&4 : ax=4
if sk&1 : ax=-4
if sk&16 : if skf=0 : ay=-14 : skf=1
ay++
y+=ay
gosub *hantei
if aa>0 {
if ay>=0 { y=bby*bsize-size-1:ay=0:skf=0}
else {y=aay*bsize+bsize:ay=0}
}
x+=ax
gosub *hantei
if aa>0 {
if ax>=0 { x=bbx*bsize-size-1}
else {x=aax*bsize+bsize}
}
redraw 0
color 0,0,0
boxf
color 255,255,255
repeat 10
yy=cnt
repeat 10
xx=cnt
if map(xx,yy)=1 : boxf xx*bsize,yy*bsize,xx*bsize+bsize-2,yy*bsize+bsize-2
loop
loop
color 255,0,0
boxf x,y,x+size,y+size
redraw 1
await 17
loop
*hantei
aax=x/bsize
bbx=(x+size)/bsize
aay=y/bsize
bby=(y+size)/bsize
aa=map(aax,aay)+map(bbx,aay)+map(aax,bby)+map(bbx,bby)
return
| |
|
2011/1/9(Sun) 17:39:55|NO.36584
大変遅れてしまいましたがinfoさんにkさんありがとうございます!
|
|