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


HSPTV!掲示板


未解決 解決 停止 削除要請

2013
1009
HSP初心者マップチップについての質問9解決


HSP初心者

リンク

2013/10/9(Wed) 19:07:32|NO.57543

前にゲームのステージのことを質問させていただいたときに、
この疑問を質問するのを忘れていました。新規にスレッドを立ててしまって
申し訳ないです。
ゲームのステージの情報をcsvファイルなどに保存してそれを読み込むという
回答を頂きました。
それを実際にやってみました。
ですが、保存したデータ(csvファイル)とは違うマップになってしまいます。

screen 0,500,500 kx=100 ky=420 ak=30 buffer 1 picload "kyara.bmp" buffer 2 picload "back.bmp" gsel 0 gmode 2 sdim map,10*10+1 notesel map noteload "map1.csv" *main redraw 0 repeat 10 my=cnt repeat 10 mx=cnt tip=int(strmid(map,my*10+mx,1)) pos mx*50,my*50 gcopy 2,tip*50,0,50,50 loop loop stick key,5 if key&1:kx-=8:ho=1 if key&4:kx+=8:ho=0 if ho=1:hou=50:else:hou=0 getkey z,90 if z=1 and jump=0:jump=1:kyo=ak if jump=1:ky-=kyo:kyo-=4 if ky=420:jump=0:ky=420 pos kx,ky gcopy 1,hou,0,50,80 mes map redraw 1 wait 5 goto *main
↑のスクリプトは、キャラクターの移動なども含まれています
↓はcsvファイルです
map ="0000000011"
map+="0000000111"
map+="0000001111"
map+="0000011111"
map+="0000111111"
map+="0001111111"
map+="0011111111"
map+="1111111111"
map+="0101010101"
map+="1010101011"
どうすれば保存したcsvファイルのデータと同じようなマップが作れるのでしょうか。
回答をよろしくお願いします。



この記事に返信する


asdf

リンク

2013/10/9(Wed) 20:16:23|NO.57545

書かれているスクリプトだけでは
問題が再現できないので、確認はしていませんが
スクリプトには問題はなさそうです
問題があるのはおそらくcsvファイルで、
csvファイルには以下のまま書いて保存しているのではないしょうか?
map ="0000000011"
map+="0000000111"
map+="0000001111"
map+="0000011111"
map+="0000111111"
map+="0001111111"
map+="0011111111"
map+="1111111111"
map+="0101010101"
map+="1010101011"
そうであれば
以下のように、内容だけを抜き出し、改行を除いたものを
csvファイルとして保存することでプログラム自体は正しい動作をすると思います

0000000011000000011100000011110000011111000011111100011111110011111111111111111101010101011010101011

なぜ、このようにする必要があるかというと
tip=int(strmid(map,my*10+mx,1))
この部分でマップデータから指定した位置(mx,my)のチップID(?)を取得して
このIDから描画する画像を変えているからです
その際、map1.csvファイル中にある「map ="」などもチップの1つとして扱われ
(mx,my)=(0,0)のときは「m」が一番左上のチップIDとして扱われる事になるのです
「m」「a」「p」「 」「=」「"」はすべてintにキャストしたとき0となり
表示がおかしくなるというわけです
ちなみに改行もこの場合、チップの1つとして扱われるので注意が必要です

以上が問題の解決法ですが、本来csvファイルはこのような使い方ではないと思います
この方法であればファイルの拡張子(.csvなどの事)は関係なく、txtなどでも問題ないと思います。
csvファイルを使いたいのであれば、csvファイルについて調べてみましょう
「hsp csv」などと検索すれば解説してあるサイトが見つかると思います
もしくはほかの方が解説してくれるかもしれません。



HSP初心者

リンク

2013/10/9(Wed) 20:38:10|NO.57547

asdf様
ご回答ありがとうございます。
解決いたしました。
なるほど...。csvファイルについてもっと調べてみます!



Ve

リンク

2013/10/10(Thu) 17:28:18|NO.57552

やりたい事は判るのですが・・・CSVのCとは『カンマ(,)』の事です。

1文字を1チップとすると、チップの上限が限られますし、
0〜9の10種類、英字・記号を入れれば、多くなりますが・・・

もっと良い方法があります。

カンマ(,)で1チップを区切る方法です。


;バッファを指定 notesel data ;dataに格納する場合 ;data="0,0,0,0,0,0,0,0,1,1\n0,0,0,0,0,0,0,1,1,1\n0,0,0,0,0,0,1,1,1,1\n0,0,0,0,0,1,1,1,1,1\n0,0,0,0,1,1,1,1,1,1\n0,0,0,1,1,1,1,1,1,1\n0,0,1,1,1,1,1,1,1,1\n0,1,1,1,1,1,1,1,1,1\n1,1,1,1,1,1,1,1,1,1" ;↑ ;同じ結果(判りやすいほうで参考にして欲しい) ;↓ ;メモリノートパッド命令を使う場合 noteadd "0,0,0,0,0,0,0,0,1,1" noteadd "0,0,0,0,0,0,0,1,1,1" noteadd "0,0,0,0,0,0,1,1,1,1" noteadd "0,0,0,0,0,1,1,1,1,1" noteadd "0,0,0,0,1,1,1,1,1,1" noteadd "0,0,0,1,1,1,1,1,1,1" noteadd "0,0,1,1,1,1,1,1,1,1" noteadd "0,1,1,1,1,1,1,1,1,1" noteadd "1,1,1,1,1,1,1,1,1,1"
これでCSVと呼べるデータファイルになります。


そのデータ内のカンマで区切ったデータを1つずつ読み込んで、
▼マップチップのように配置するサンプルがコチラ

;バッファを指定 notesel data ;メモリノートパッド命令を使う場合 noteadd "0,0,0,0,0,0,0,0,1,1" noteadd "0,4,70,0,0,0,0,145,104,1" noteadd "0,111,6,0,0,0,1,15,46,1" noteadd "0,165,7,0,0,1,1,75,27,1" noteadd "0,30,78,99,92,7,38,79,46,1" noteadd "0,24,46,61,101,107,76,14,81,1" noteadd "0,56,15,1,1,1,1,111,14,1" noteadd "0,88,99,1,1,1,1,97,71,1" noteadd "1,55,51,1,1,1,1,48,75,1" ;CSVの読込 ;マップサイズ size_x=10 size_y=9 dim map,size_x,size_y ;カンマで区切ってチップの番号を配列に入れる repeat size_y sdim l,256 noteget l,y i=0 repeat size_x getstr sel,l,i,',' sel=int(sel) map(cnt,y)=sel i+=strsize loop y++ loop ;マップチップ表示 y=0 repeat size_y repeat size_x ;↓チップ番号から適当な色を作る hsvcolor map(cnt,y),255,map(cnt,y)*100 boxf cnt*32,y*32,(cnt*32)+32,(y*32)+32 x++ loop y++ loop stop

CSVデータでマップを生成すると、こんな感じになります。
サンプルでは色を変更しただけのチップですが、画像に変更する事も可能です。



HSP初心者

リンク

2013/10/10(Thu) 20:04:36|NO.57554

Ve様
ご回答ありがとうございます。
なるほど、CSVのCはカンマのことでしたか。



check

リンク

2013/10/10(Thu) 22:10:42|NO.57559

さらに補足すると、CSVはComma-Separated Valuesの略で、
意味としては「カンマで分けられた値」という意味。
そのまんまだな。

MS Office ExcelやOpen Office Calc等の表計算シートを作成するソフトでも扱える。



HSP初心者

リンク

2013/10/11(Fri) 16:37:56|NO.57564

check様
Exselなどでも扱えるのですか!
勉強になります。



HSP初心者

リンク

2013/10/11(Fri) 17:09:00|NO.57565

すいません。
解決にしましたが、新たな疑問が浮かびました。
これで、ステージを読み込むようにできたので、
当たり判定を作ろうとしたのですが、
うまくできません。
いろいろ調べて、
まずキャラクターがどのチップの上にいるか計算し、キャラのいるチップが0だったら落下とか、
キャラのいるチップが1だったらぶつかってそれ以上動けないというようにするなどと
作ってみましたが、どうもうまくいきません。
(キャラクターのいる所のチップ番号が0でも1でも落下してしまいます。)
自分なりに工夫してみましたが、できませんでした。
どうか解決策を教えて頂けませんか。
(長文失礼いたしました)



test

リンク

2013/10/11(Fri) 17:44:32|NO.57566

どんなソースを書いてどんな工夫をしたのか書いてもらわないと、答えようがありません。
別の話題になりますので、新しいスレッドを立てて、実行できるソースなどを載せて質問してみましょう。



HSP初心者

リンク

2013/10/11(Fri) 18:35:57|NO.57567

test様
そうですね...。
大変失礼致しました。
気をつけます。



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