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


HSPTV!掲示板


未解決 解決 停止 削除要請

2019
0526
きょうマップの貼り方を教えて下さい!8解決


きょう

リンク

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
このプログラムにマップを貼る方法を教えて下さい!!



この記事に返信する


k

リンク

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(メモ帳)でマップを一応書いているのですが返答してもらったものでは上手く出来ませんでした。
なにか他に方法はないでしょうか?



MillkeyStars

リンク

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
こんな感じです。お願いします!<(_ _)>



MillkeyStars

リンク

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



k

リンク

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さんありがとうございました。



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