[過去ログ]
DXライブラリ 総合スレッド その19 [無断転載禁止]©2ch.net (1002レス)
DXライブラリ 総合スレッド その19 [無断転載禁止]©2ch.net http://mevius.5ch.net/test/read.cgi/gamedev/1452005069/
上
下
前次
1-
新
通常表示
512バイト分割
レス栞
抽出解除
レス栞
このスレッドは過去ログ倉庫に格納されています。
次スレ検索
歴削→次スレ
栞削→次スレ
過去ログメニュー
476: 名前は開発中のものです。 [sage] 2018/09/07(金) 17:09:17.90 ID:stA8I9vh 良く分からんけど、こんな感じの事がしたいの? void LoadData( int t_Width, int t_Height, std::string t_FileName ) { int t_FileHandle = FileRead_open( t_FileName.c_str() ); int t_FileSize = FileRead_size( t_FileName.c_str() ); std::vector< std::vector< int > > t_MapDataVec; int t_LoadNum = 0; char t_Char; //マップの配列を確保 t_MapDataVec.resize( t_Height ); for( int i = 0; i < t_Height; i++ ) { t_MapDataVec[ i ].resize( t_Width ); } //正常に1文字を読み込める間、繰り返す while( ( t_Char = FileRead_getc( t_FileHandle ) ) != -1 ){ if( isdigit( t_Char ) != 0 ){ int t_Sum = 0; do{ t_Sum = ( t_Sum * 10 ) + ( t_Char - '0' ); t_Char = FileRead_getc( t_FileHandle ); }while( isdigit( t_Char ) != 0 ); t_MapDataVec[ t_LoadNum / t_Width ][ t_LoadNum % t_Width ] = t_Sum; ++t_LoadNum; } } FileRead_close( t_FileHandle ); } http://mevius.5ch.net/test/read.cgi/gamedev/1452005069/476
478: 名前は開発中のものです。 [] 2018/09/07(金) 22:11:13.47 ID:SP/YWN4v >>477 >getlineが使われてる様だが? int fh = FileRead_open(s.c_str()); えっと、まずこれをした時点で、 ファイル内の文字がfhに入ってると思ってるんで それをgetline(fh,buf[line]))するわけですから 問題ないかと思っているんですが、、私、なにか勘違いしてるのでしょうか、、 >t.open( "abc.csv");とかしたって読み込まないよ >そんなファイル無いんだから これはどーいうことですか?パスの表記の話でしたら ここでは割愛しただけですので実際は頭のフォルダとファイル名と入力してます。 t.open( "フォルダ名/abc.csv");な感じで。 、、そー言う問題ではなくて、archiveした場合 "abc.csv"というファイル名ではなくなるという話ですか?? >>476 まさか、これ、自分と同じことやってるプログラムですか? まさかこんなに短くできますよ、とかじゃないですよね? すごく興味深いのでちょっと処理をじっくり読ませて頂きます。 http://mevius.5ch.net/test/read.cgi/gamedev/1452005069/478
481: 名前は開発中のものです。 [] 2018/09/07(金) 23:04:19.42 ID:SP/YWN4v >>476 すみません、今まで使ったことない関数や表現がありますのでよかったら教えて頂けませんでしょうか、、 自分は今成長したいんで、非常に関心がありますのでぜひともお願いします。 質問1、 if( isdigit( t_Char ) != 0 ) ここの意味は、isdigitで「t_Charの(頭が)空じゃ無いなら」の認識で正解ですか? 判定関数のisdigitを利用したことないもので、、 質問2、 もし1の私の認識が当たっているとすれば do{ t_Sum = ( t_Sum * 10 ) + ( t_Char - '0' ); t_Char = FileRead_getc( t_FileHandle ); }while( isdigit( t_Char ) != 0 ); ここの条件式は、t_Charの中の文字を読み進めながら 「空の領域になるまで」という理解になりますが、それで間違いないですか? 質問3、 t_Sum = ( t_Sum * 10 ) + ( t_Char - '0' ); すみません、ここのt_Char - '0'の理解ができてないんですがこれはなにを意味していますか? 推測では「,」の場所を判断するために記載していると思うのですが 「- '0'」は文字の0と文字の「,」は同義語ですか? t_Sum = ( t_Sum * 10 ) + ( t_Char - '0' ); はなにをしているのか 解説して頂けませんでしょうか、、 4、究極に理解が足りず困っているのが t_MapDataVec[ t_LoadNum / t_Width ][ t_LoadNum % t_Width ] = t_Sum; です。 本当に、これは初めて見た表現なんですが t_LoadNum / t_Widthでなぜその時の行数の添字が割り出せるのか、 t_LoadNum % t_Widthでなぜその時の要素数の添字が割り出せるのか お願いします、解説を、、、、すごく関心があります。そもそも、誰もが記載するであろう、 for(int line=0; line<y; line++){ for(int col=0; col<x; col++){ の式が無いプログラムで、二次元配列を回している様子が 自分の想像限度外で、もうなにがなんだか。 t_LoadNumの値だけをインクリメントしてるだけでなぜ二次元配列をすべて回すことが可能になるんですか? http://mevius.5ch.net/test/read.cgi/gamedev/1452005069/481
483: 名前は開発中のものです。 [] 2018/09/07(金) 23:21:53.72 ID:SP/YWN4v >>480 C++を熟知せずとも、便利な関数のおかげで 手軽にゲームを作れる、それがDXライブラリの良さであり、 短所でもあるのだと思います。 画像を描画するのも関数ひとつです。それで表示できるので つまずきませんでした。 でもmap情報を外部ファイルにして読むことは、つまずています。 厳密にはアーカイブしなけば読むことは成功していますが、、 「お前は基本がなっていない」と言われたらそうなんですが でもチュートリアル的なブログや参考書でも、ひとつひとつ完全に理解しようとすると挫折するから 今の自分ではわからなくてもとりあえずそうなんだという精神で進めていきましょう的な 助言も多かったです。ぶつかるたびに覚えていけばいい的な、、違いますでしょうか? ファイルを扱う、バイナリ形式とかは、初めてです。なのでソースも見苦しいです。 でもそんな私でも>>476のプログラムはすごく魅力的だということがわかるんです。 学びたいんです、、簡単な解説でいいので、お願いできませんか? http://mevius.5ch.net/test/read.cgi/gamedev/1452005069/483
489: 名前は開発中のものです。 [] 2018/09/08(土) 00:57:50.45 ID:DgEMMqli >>488 はい、シンプルですごく驚きました。 それに、二次元配列の要素を回す場合は これが使えるのは両方の値が同じ場合だけですよね? 自分が要する配列は添字より列数が多い場合ばかりなので この方法は使えない。 要は>>476さんはソースの参考にということで 記載してくれたので、ちゃんと自分のやりたいことに 組み込めってことですよね。 http://mevius.5ch.net/test/read.cgi/gamedev/1452005069/489
495: 名前は開発中のものです。 [] 2018/09/08(土) 01:34:42.92 ID:DgEMMqli >>476の処理なんですが 二行目のint t_FileSize = FileRead_size( t_FileName.c_str() ); をしたあと、変数t_FileSizeは一切使用されておりませんが ここでファイルのサイズを得る必要があるのはなぜですか? どなたかわかる方、解説おねがします。 http://mevius.5ch.net/test/read.cgi/gamedev/1452005069/495
513: 名前は開発中のものです。 [] 2018/09/08(土) 22:42:35.24 ID:DgEMMqli あと、すみません>>476さん、 昨日からずっと>>476さんのソースを研究させて頂いてるんですけど 間違っているのではないかと思われる箇所があるんですが、 自分の思い違いなのか、書いた>>476さんにお尋ねさせてほしいのですが //マップの配列を確保 t_MapDataVec.resize(t_Height); for( int i = 0; i < t_Height; i++ ){ t_MapDataVec[i].resize(t_Width);} ↑ ここで配列t_MapDataVecの行数はt_Height、 t_MapDataVecの要素数はt_Widthからそれぞれ決めていますよね、 ここはそれで正解なんですけど、 問題はこの後、その配列に数値を格納するときなんですが t_MapDataVec[ t_LoadNum / t_Width ][ t_LoadNum % t_Width ] = t_Sum; ++t_LoadNum; ↑ これでは、行数の添え字の進み方ががおかしくなりませんか? これ、行数と要素の添え字を両方ともt_Widthを利用して算出してます。 しかし、行数の数はさっきのresizeではt_Heightで決めています。 つまり、t_Widthとt_Heightの値とは必ず同じというわけでは無いはずなので t_Widthだけを利用した算出方法では行数の添え字の動きに支障が出ませんか? http://mevius.5ch.net/test/read.cgi/gamedev/1452005069/513
メモ帳
(0/65535文字)
上
下
前次
1-
新
書
関
写
板
覧
索
設
栞
歴
スレ情報
赤レス抽出
画像レス抽出
歴の未読スレ
AAサムネイル
Google検索
Wikipedia
ぬこの手
ぬこTOP
0.031s