ページ 11

DXライブラリとエクセルのコラボ

Posted: 2009年3月30日(月) 03:35
by yussanstar
今、DXライブラリでRPGを作っています。
そこで、町や村、ダンジョンを作るのに
エクセルでマップのようなものを描いて、
色により、どんな素材を置くかを判断させたいです。
(例:黒→../../../item/草地.png 青→../../../item/井戸.png)

どうすればいいでしょうか。よろしくお願いします。

Re:DXライブラリとエクセルのコラボ

Posted: 2009年3月30日(月) 04:22
by 朽木
色だけ、ではなくて、
1 1 1 1
0 0 0 1
1 0 0 1
1 1 1 1
にして、数字に合わせて色付けするのが良いと思うんですがダメなんでしょうか。

色については、xlsとtxt(タブ)に分けてするのが簡単な方法かと@@

Re:DXライブラリとエクセルのコラボ

Posted: 2009年3月30日(月) 04:25
by yussanstar
うーん、ちょっとよく分かりません。
もう少し詳しく教えてください。
どうプログラムを書けばいいか、とか。。。

再びよろしくお願いします。

Re:DXライブラリとエクセルのコラボ

Posted: 2009年3月30日(月) 05:47
by 朽木
ごめんなさい。求める部分が良く分からないので上で書いた通りに作りました。

参考程度でお願いします。

main.cpp ... ソースコード
map.wld ... map.xlsをタブtxt出力したもの
map.xls ... マップ編集用Excelファイル

Re:DXライブラリとエクセルのコラボ

Posted: 2009年3月30日(月) 06:10
by 朽木
あっ、ごめんなさい。後々に map.wld を手編集したので map.xls との中身が異なっています。
出力し直して実行すると、大きさが違う(足りない)ために 2 が返るので注意して下さい。
あと、fscanfの返り値の判定が間違っていました。
20行目の、
if ( fscanf(fp, "%d", &map_data[loop_y][loop_x]) == 0 ) {
を、
if ( fscanf(fp, "%d", &map_data[loop_y][loop_x]) == EOF ) {
に直して下さい。
追:
8行目の、
static unsigned int map_data[MAP_WIDTH][MAP_HEIGHT];
を、
static unsigned int map_data[MAP_HEIGHT][MAP_WIDTH];
に。
ミスありすぎで怖くなってきました。本当に参考程度にして下さいね。@@;

Re:DXライブラリとエクセルのコラボ

Posted: 2009年3月30日(月) 10:17
by 御津凪
エクセルでの色のついたセルをtxt(タブ)で出力すると、セル内の値(と位置)のみ出力され、
色情報が失われてしまうのでこの方法では無理ですが、
Ruby 等のOLE機能を使ってエクセルを直接読み込み、色を取得する方法はあります。
(そのサンプルがほとんど無いのがつらいところではありますが)

Re:DXライブラリとエクセルのコラボ

Posted: 2009年3月30日(月) 19:08
by yussanstar
朽木さんへ.....

ビルドしてみたのですが、
プロジェクト : error PRJ0002 : エラーの結果 -1 が '' より返されました。
とエラーが出てしまいます。
もちろん、修正していただいた箇所は直しました。
もし、どうしても実行不可能というのなら、実行結果だけでも教えて欲しいのですが。

お手数をおかけいたします。

Re:DXライブラリとエクセルのコラボ

Posted: 2009年3月31日(火) 08:04
by 朽木
ごめんなさい。原因が良く分かりませんでした。
実行結果:
LoadMapData("./map.wld", 5, 5) ... return 0
map_data = {
    {1, 1, 1, 1, 1},
    {0, 0, 0, 0, 1},
    {1, 0, 0, 0, 1},
    {1, 0, 0, 0, 1},
    {1, 1, 1, 1, 1}
}
e
此方では空プロジェクトで作っているんですが、もしそれでもダメならexe入りを…