|
|
|
2019/5/26(Sun) 10:21:18|NO.87470
size=32 ;マス目の大きさ(駒より大きく21以上)
msize(0)=16,12 ;マップの大きさ
dim map,msize(0),msize(1) ;マップ変数
repeat msize(0) :map(cnt,0)=1 :map(cnt,msize(1)-1)=1 :loop ;外枠
repeat msize(1) :map(0,cnt)=1 :map(msize(0)-1,cnt)=1 :loop
atari(0)=0,0,0,0 ;当たり判定
px=size: py=size ;駒の位置
jump=0 ;ジャンプ中かどうか
jc=0 ;ジャンプ中のカウンタ
jump_g(0)=5,5,5,5,5,5,4,4,4,4,3,3,3,3,2,2,1,1,-1,-1,-2,-2,-3,-3,-3,-3,-4,-4,-4,-4,-5,-5,-5,-5,-5 ;ジャンプ係数
screen 0,size*msize(0),size*msize(1),0
*map_make; マップ作成
repeat
redraw 0
await 10
stick key,32+256+512
if key&256 :map(mousex/size,mousey/size)=1
if key&512 :map(mousex/size,mousey/size)=0
gosub *draw_map
redraw 1
if key&32: break
loop
*main; メインループ
repeat
redraw 0
title ""+px+"/"+py
await 10
stick key,1+4+16
gosub *hantei
gosub *draw_map
gosub *draw_koma
redraw 1
loop
stop
*hantei; 当たり判定
if key&1{;左移動時
if (map((px-2)/size,py/size)=1)|(map((px-2)/size,(py+18)/size)=1) :else :px-=2
}
if key&4{;右移動時
if (map((px+20)/size,py/size)=1)|(map((px+20)/size,(py+18)/size)=1) :else :px+=2
}
if key&16 :if jump=0 :jump=1
if jump>0{;ジャンプ中
x1=(px+4)/size :y1=(py-jump_g(jc))/size
x2=(px+16)/size :y2=(py-jump_g(jc))/size
if (map(x1,y1)=1)|(map(x2,y2)=1){ ;上当たり判定
jump=-1 :jc=0
}else{ ;下当たり判定
x1=(px+4)/size :y1=(py+21)/size
x2=(px+16)/size :y2=(py+21)/size
if (map(x1,y1)=1)|(map(x2,y2)=1) :jump=0 :jc=0
py-=jump_g(jc)
}
jc++
if jc>=35 :jump=-1 :jc=0
}else{;ジャンプ中でない時
repeat 4
x1=(px+4)/size :y1=(py+21)/size
x2=(px+16)/size :y2=(py+21)/size
if (map(x1,y1)=1)|(map(x2,y2)=1) :break :else :py++
loop
}
if (key=0)|(key=1)|(key=4) :jump=0 ;スペースキーを離したかどうか
return
*draw_map; マップ描画
color 255,255,255 :boxf :color 0,0,0
repeat msize(0)
x=cnt
repeat msize(1)
if map(x,cnt): boxf x*size,cnt*size,x*size+size,cnt*size+size
loop
loop
return
*draw_koma; 駒描画
color 255,0,0
circle px,py,px+20,py+20
return
このプログラムにマップを貼る方法を教えて下さい!!
| |
|
2019/5/26(Sun) 14:15:50|NO.87471
こんな感じでしょうかー
size=32 ;マス目の大きさ(駒より大きく21以上)
msize(0)=16,12 ;マップの大きさ
dim map,msize(0),msize(1) ;マップ変数
repeat msize(0) :map(cnt,0)=1 :map(cnt,msize(1)-1)=1 :loop ;外枠
repeat msize(1) :map(0,cnt)=1 :map(msize(0)-1,cnt)=1 :loop
atari(0)=0,0,0,0 ;当たり判定
px=size: py=size ;駒の位置
jump=0 ;ジャンプ中かどうか
jc=0 ;ジャンプ中のカウンタ
jump_g(0)=5,5,5,5,5,5,4,4,4,4,3,3,3,3,2,2,1,1,-1,-1,-2,-2,-3,-3,-3,-3,-4,-4,-4,-4,-5,-5,-5,-5,-5 ;ジャンプ係数
buffer 1
picload "C:\\hsp35\\sample\\game\\cardbg.png",1
buffer 2
picload "C:\\hsp35\\sample\\game\\parts.bmp",1
screen 0,size*msize(0),size*msize(1),0
*map_make; マップ作成
repeat
redraw 0
await 10
stick key,32+256+512
if key&256 :map(mousex/size,mousey/size)=1
if key&512 :map(mousex/size,mousey/size)=0
gosub *draw_map
redraw 1
if key&32: break
loop
*main; メインループ
repeat
redraw 0
title ""+px+"/"+py
await 10
stick key,1+4+16
gosub *hantei
gosub *draw_map
gosub *draw_koma
redraw 1
loop
stop
*hantei; 当たり判定
if key&1{;左移動時
if (map((px-2)/size,py/size)=1)|(map((px-2)/size,(py+18)/size)=1) :else :px-=2
}
if key&4{;右移動時
if (map((px+20)/size,py/size)=1)|(map((px+20)/size,(py+18)/size)=1) :else :px+=2
}
if key&16 :if jump=0 :jump=1
if jump>0{;ジャンプ中
x1=(px+4)/size :y1=(py-jump_g(jc))/size
x2=(px+16)/size :y2=(py-jump_g(jc))/size
if (map(x1,y1)=1)|(map(x2,y2)=1){ ;上当たり判定
jump=-1 :jc=0
}else{ ;下当たり判定
x1=(px+4)/size :y1=(py+21)/size
x2=(px+16)/size :y2=(py+21)/size
if (map(x1,y1)=1)|(map(x2,y2)=1) :jump=0 :jc=0
py-=jump_g(jc)
}
jc++
if jc>=35 :jump=-1 :jc=0
}else{;ジャンプ中でない時
repeat 4
x1=(px+4)/size :y1=(py+21)/size
x2=(px+16)/size :y2=(py+21)/size
if (map(x1,y1)=1)|(map(x2,y2)=1) :break :else :py++
loop
}
if (key=0)|(key=1)|(key=4) :jump=0 ;スペースキーを離したかどうか
return
*draw_map; マップ描画
;color 255,255,255 :boxf :color 0,0,0
pos 0,0
gcopy 1,0,0,size*msize(0),size*msize(1)
repeat msize(0)
x=cnt
repeat msize(1)
;if map(x,cnt): boxf x*size,cnt*size,x*size+size,cnt*size+size
if map(x,cnt): pos x*size,cnt*size:gcopy 2,0,48,32,32
loop
loop
return
*draw_koma; 駒描画
color 255,0,0
circle px,py,px+20,py+20
return
| |
|
2019/5/27(Mon) 00:31:27|NO.87477
ありがとうございます! やってみます!
|
|
2019/5/27(Mon) 15:55:32|NO.87483
.tyt(メモ帳)でマップを一応書いているのですが返答してもらったものでは上手く出来ませんでした。
なにか他に方法はないでしょうか?
|
|
2019/5/27(Mon) 16:50:01|NO.87484
.txt のマップの一部をそのままここに書いた方がいいと思うよ。
.txt のマップ構造がわからないと、それに対応するスクリプトが書けないわけだからね。
|
|
2019/5/27(Mon) 19:37:54|NO.87487
000000000100000000000000000000000000000000000000000000
000000000100000000000000000000000000000000000000000000
000000000100000000000000000000000000000000000000000000
000000000100000000000000000000000000000000000000000000
000000000100000000000000000000000000000000000000000000
000000000001000100010000000000000000000000000000000000
000111100000000010010000000000000000000000000000000000
000000000000000000010000000000000000000000000000000000
000000000000000000010000000000000000000000000000000000
000000000111000111110001111111111111111111111111111111
000000000000000000010001000000000000000000000000000000
000000000000000000010001000000000000000000000000000000
000000000000000000010001000000000000000000000000000000
000000000000000000010001000000000000000000000000000000
000000000000000000010001000000000000000000000000000000
000000000000000000010001000000000000000000000000000000
000000000000000000010001000000000000000000000000000000
000000000000000000010001000000000000000000000000000000
000000000000000000010001000000000000000000000000000000
000000000000000000010001000000000000000000000000000000
000000000000000000010001000000000000000000000000000000
000000000000000000010001000000000000000000000000000000
000000000000000000010001000000000000000000000000000000
000000000000000000010001000000000000000000000000000000
000000000000000000010001000000000000000000000000000000
000000000000000000010001000000000000000000000000000000
000000000000000000010001000000000000000000000000000000
000000000000000000010001000000000000000000000000000000
000000000000000000010001000000000000000000000000000000
000000000000000000010001000000000000000000000000000000
こんな感じです。お願いします!<(_ _)>
| |
|
2019/5/27(Mon) 22:06:48|NO.87491
こんな感じでいいのかな?
スクリプトは、kさんのスクリプトを改造してファイルから読み込みできるようにしただけです。
//定数
size=32 ;マス目の大きさ(駒より大きく21以上)
MapFileName = dir_exe+"\\map.txt" //マップ情報のtxtファイル
//共通変数定義及び設定
dim map,64,64 //マップ変数
dim msize,2 //マップのマス数変数
msize(0) = 16,12 //マップのマス数(規定値)
atari(0)=0,0,0,0 ;当たり判定
px=size: py=size ;駒の位置
jump=0 ;ジャンプ中かどうか
jc=0 ;ジャンプ中のカウンタ
jump_g(0)=5,5,5,5,5,5,4,4,4,4,3,3,3,3,2,2,1,1,-1,-1,-2,-2,-3,-3,-3,-3,-4,-4,-4,-4,-5,-5,-5,-5,-5 ;ジャンプ係数
IsSave = 1 ;マップ編集されている場合、保存するまで有効なフラグ(1 がすでに保存されているフラグ)
//マップデータロード(サブルーチンジャンプ)
gosub *MapDataLoad
//画像ロード(パーツ)
buffer 1
picload dir_exe+"\\sample\\game\\cardbg.png",1
buffer 2
picload dir_exe+"\\sample\\game\\parts.bmp",1
//マップデータのマスサイズで画面を初期化
screen 0,size*msize(0),size*msize(1),0 : title "マップ編集モード"
//プログラム終了時にデータ保存するか判定するための終了時のonexit
onexit *p_end
//メインループ
*main
await 16
stick key,256+512
if key&32 : Title "テストモード : "+px+"/"+py : goto *TestMode_main
if key&256 : map(mousex/size,mousey/size) = 1 : IsSave = 0 : title "マップ編集モード*"
if key&512 : map(mousex/size,mousey/size) = 0 : IsSave = 0 : title "マップ編集モード*"
redraw 0
gosub *draw_map
redraw 1
goto *main
//テストモードループ
*TestMode_main
await 16
stick key,1+4+16
if key&32 : Title "マップ編集モード" : goto *main
redraw 0
gosub *hantei
gosub *draw_map
gosub *draw_koma
redraw 1
goto *TestMode_main
//ファイルからマップをロード
*MapDataLoad
sdim MapDataStr,1250304
notesel MapDataStr
noteload MapFileName
//マップの横マスの最大数を割り出す
repeat notemax
TmpMapWidth = ""
noteget TmpMapWidth,cnt
WidthSize = strlen(TmpMapWidth)
if BigWidth <= WidthSize : BigWidth = WidthSize
loop
msize(0) = BigWidth
msize(1) = notemax
dim map,msize(0),msize(1) //マップ変数の再初期化
//マップデータのファイルからマップ変数へマップデータを反映
repeat msize(1)
ycnt = cnt
TmpMapWidth = ""
noteget TmpMapWidth,ycnt
repeat strlen(TmpMapWidth)
Value = peek(TmpMapWidth,cnt)
if Value = '0' : map(cnt,ycnt) = 0
if Value = '1' : map(cnt,ycnt) = 1
loop
loop
return
//マップをファイルに保存する
*MapDataSave
sdim MapDataStr,1250304
notesel MapDataStr
repeat length2(Map)
ycnt = cnt
TmpMapWidth = ""
repeat length(Map)
if map(cnt,ycnt) = 0 : TmpMapWidth += "0"
if map(cnt,ycnt) = 1 : TmpMapWidth += "1"
loop
noteadd TmpMapWidth
loop
notesave MapFileName
return
*hantei; 当たり判定
if key&1{;左移動時
if (map((px-2)/size,py/size)=1)|(map((px-2)/size,(py+18)/size)=1) :else :px-=2
}
if key&4{;右移動時
if (map((px+20)/size,py/size)=1)|(map((px+20)/size,(py+18)/size)=1) :else :px+=2
}
if key&16 :if jump=0 :jump=1
if jump>0{;ジャンプ中
x1=(px+4)/size :y1=(py-jump_g(jc))/size
x2=(px+16)/size :y2=(py-jump_g(jc))/size
if (map(x1,y1)=1)|(map(x2,y2)=1){ ;上当たり判定
jump=-1 :jc=0
}else{ ;下当たり判定
x1=(px+4)/size :y1=(py+21)/size
x2=(px+16)/size :y2=(py+21)/size
if (map(x1,y1)=1)|(map(x2,y2)=1) :jump=0 :jc=0
py-=jump_g(jc)
}
jc++
if jc>=35 :jump=-1 :jc=0
}else{;ジャンプ中でない時
repeat 4
x1=(px+4)/size :y1=(py+21)/size
x2=(px+16)/size :y2=(py+21)/size
if (map(x1,y1)=1)|(map(x2,y2)=1) :break :else :py++
loop
}
if (key=0)|(key=1)|(key=4) :jump=0 ;スペースキーを離したかどうか
return
*draw_map; マップ描画
;color 255,255,255 :boxf :color 0,0,0
pos 0,0
gcopy 1,0,0,size*msize(0),size*msize(1)
repeat msize(0)
x=cnt
repeat msize(1)
;if map(x,cnt): boxf x*size,cnt*size,x*size+size,cnt*size+size
if map(x,cnt): pos x*size,cnt*size:gcopy 2,0,48,32,32
loop
loop
return
*draw_koma; 駒描画
color 255,0,0
circle px,py,px+20,py+20
return
*p_end
if IsSave = 0{
dialog "マップファイルが保存されていません。上書き保存しますか?",3,"ファイル上書き確認"
if stat = 6 : gosub *MapDataSave
}
end
| |
|
2019/5/27(Mon) 22:42:42|NO.87493
>このプログラムにマップを貼る方法を教えて下さい!!
>.tyt(メモ帳)でマップを一応書いているのですが
>返答してもらったものでは上手く出来ませんでした。
.tyt(txt?)(メモ帳)があるのを知らなかったので私が何か勘違いしてたみたいです(^^;
>スクリプトは、kさんのスクリプトを改造してファイルから読み込みできるようにしただけです。
MillkeyStarsさん、ありがとうございました。
|
|
2019/6/1(Sat) 12:17:57|NO.87528
KさんMillkeyStarsさんありがとうございました。
|
|