マップ管理ツールをDXlibの様なもので作る際の考え方について。

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
アバター
SyunoBOX
記事: 6
登録日時: 8年前
住所: 茨城
連絡を取る:

マップ管理ツールをDXlibの様なもので作る際の考え方について。

#1

投稿記事 by SyunoBOX » 8年前

初めての投稿になります。

登録して間もないですが、少なくとも数年は、こっそりとこちらのサイトを覗かせて頂いて居りました。お名前を見て、よく書き込んで居られる方だ!と思う事がある程度です。私は、ぼんやりとした質問しかできず、説明すると長くなるところがあるので、こちらでは、そう言った質問の仕方は好まれないと言うか、どこでもそうですが、質問するべきでは無いかなと考えて居りましたが、聞かぬは一生の恥、聞いた方が成長できると考え、恥を忍んで質問させて頂きます。
(でも、管理人さんを含め、常連?の方々は、優しいなとも、傍から…他所から見て感じて居るので、大丈夫だろうとも思って居ります…。)
ソースコードも含め、長文駄文が目立つとは思いますが、分かり易く、何とか短く…と考えて、私なりに誠実に質問させて頂いて居るつもりです。ですが、気になられた点がありましたら、改良・改善の参考にさせて頂きますので、良ければ、一言頂けると幸いです。
また、独学も独学、学ぶと言う字を使う事すらおこがましい程度で、間違った知識と言いますか、曖昧に理解して居る事柄が多いかと思います。その点、悪しからず、ご理解頂けると幸いです…。


さて、ここからが本題です…。

前提として、私は、(最下記の通りの環境で、)PC向けのゲーム作品を作りたいと思って、趣味で続けて居ります。
ゲーム以外のソフト等については、まるで考えを持って居りません。
現在は、二点から成る線分を足場にするマップ(基本は横に進む2Dスクロールのアクションゲームです。)を舞台にしたゲームを作って居り、そのマップを管理(数値の変更)するツールを、ゲームのプログラム内?に、一つのソースファイルとして用意しようとして居るところです。

そこで、聞く人に依っては、かなりどうでも良い質問なのですが、HTMLや、ツールソフトの様な、MFCやWPFやフォームアプリケーション?の様なものは、ツール画面?の様な、選択したり数値を入力したりする部分が、ある程度は形にと言うか、できて居る仕組みを利用し、プログラムとしては、配置する様にして記述できますが、DXライブラリの様に、この座標を左上に、この文字列を~と、一つ一つのパーツ?から考える様な場合に、一般的にはと言うか、他の皆さんは、どう考えて作られるのだろう…と考え、とんでもなく馬鹿野郎なのですが、もう少なくとも彼是一ヶ月ぐらいは悩んで居りまして、こうして質問させて頂いた次第です…。

かなり怪しい文と言いますか、曖昧な質問かと思います…。
ですので、長くなってはしまいますが、例を交えて、何とか説明させて頂こうと思います…。

例えば、上述の通り、私は、二点から成る線分でマップを表現して居るのですが、ツール部分?画面?としては、
--
カーソル先の線分 番号 N
X1 0 Y1 950
X2 1000 Y2 950

選択中の線分 番号 M
X1 100 Y1 900
X2 200 Y2 900

変更する線分 番号 _
X1 ___ Y1 ___
X2 ___ Y2 ___
---(※___は、入力部。クリックしたらカーソルを点滅させるなりして、キーボードで数値を入力できる様な部分です。例の中のカーソルは、マウスカーソルの方のカーソルの事です。)
この様に、似た様なパーツ?が連なるものになるかと思うのですが、
その際に、後で手直しし易い様にと言いますが、分かり易い様に、どんな風にプログラムを記述するか、座標を管理するか…と言う事に頭を悩ませて居るのです。

上記の例えを利用して更に説明させて頂くと、DXライブラリなら、

コード:

DrawBox( int x1 , int y1 , int x2 , int y2 , unsigned int Color , int FillFlag ) ;
DrawFormatStringToHandle( int x , int y , unsigned int Color , int FontHandle , char *FormatString , ... ) ;
の様に、DrawBoxの様な、図形を描画する関数を使い、ツール部分の枠や背景を作り、その中に、DrawString系の様な、文字列を描画する関数を使い、文字や数値を描画すると思うのですが、後に、見易いように黒く細い線等で枠を設けたり、座標位置を修正する事が考えられると思います。
そう言う事を考えると、HTMLの様な、ボックス?の考えの様に、パディングやマージンを、一つ一つの文字列に、構造体としてでも設けて、設定できる様にした方が、便利なのでは…?と思ってしまいます。(便利だと思うのなら、そうすれば良いだけなのでは…。)
少なくとも、こう言ったプログラミング?と言うのは、変数を用いて、簡略化と言うか、省略できる部分は、省略した方が良いと思うのですが、分かり辛くなるから、やらない方が良いと言う事もあるかと思うのです…。

ですから、こう言った事をプログラミング?する際には、どうでも良い部分だからと考えて、手打ちで座標を指定したりするのか、私の様に、細かく設定できる様にして置こうとするのか、私程では無くとも、ある程度は細かく指定するのか…と言う様な、考え方的なものについて知りたいのです…。

そんな事を聞いて、どうするんだ、どちらでも良い、それより貴方は他に理解しなければいけないところがある~等と言われてしまいそうな質問ではありますが、無い頭で、ストレスで顔面痛が出るぐらいに悩んでしまって居りますので、良ければ、お答え頂ければと思います…。何だか、うじうじした質問で、利用規約の、不快にさせないと等の文言に抵触するのではないかとすら思って、びくびくして居りますが、悪意は無く、本当に誠実に質問させて頂いて居りますので、どうぞ、よろしくお願いします…。

[1] 質問文
 [1.1] 自分が今行いたい事は何か
濃い水色の部分の、マップ管理ツールの作成が、今行いたい事ではありますが、作成の仕方を聞きたいと言う事だと、質問したい内容としては少し異なります。

 [1.2] どのように取り組んだか
最初は、私だけが使う、もしゲームが完成しても、配布する際には取り除く部分だから、手打ちと言うか、見た通りに座標等を指定して行けば良いと思いました。
しかし、例えば、入力部分にしたい範囲をクリックした際の事を考えたり、見栄えのために部分的に文字(フォント)の種類を変えたいと思いました。
そのため、現在としては、最終的に、文字のサイズを取得して、高さを調節したり等、簡素なソースではありますが、ボックスや文字列毎に構造体で、座標や大きさ等を指定し、それを利用して描画する様にしました。

 [1.3] どのようなエラーやトラブルで困っているか
これが正しいのか、長ったらしいだけで、手打ちでも良いのでは無いか…等、悩んでしまいました。

また、別の質問に成ってしまいますが、折角、DrowString系の関数を使用するのに、必要な引数の内容は、全て、構造体として管理できる様にしたのに、"%d"等の書式の、数値として代入したい変数だけは、構造体として、どう管理したら良いか分からず、結果、何行も、必要な分だけDrowString系を使用して居る状況です。
引数にする変数名を、文字列として構造体に入れて置けば良いんだ!と考えたのですが、数値として求められる引数に対し、文字列を入力して居るだけと成ってしまって、どうキャスト?型変換?すれば良いのか、どんな方法があるのだろうか…と言う点に置いても、悩んでしまって居ます…。
ですから、それが分からないのであれば、どの道、DrowString系の分は、改行を重ね、長文に成ってしまうのだから、手打ちでも良いのでは…、と思って居る節があります…。


 [1.4] 今何がわからないのか、知りたいのか
黄色い字の部分が、一番、具体的な質問です…。

[2] 環境  
 [2.1] OS : Windows7
 [2.2] コンパイラ名 : VC++2015

[3] その他
 ・どの程度C言語を理解しているか
まるで理解して居ない初心者だと思って頂ければ幸いです。
(具体的には、基本すら理解して居ないと思います。)

 ・ライブラリを使っている場合は何を使っているか
DXライブラリを使わせて頂いて居ります。(他に使った事のあるものがありません。)


私の人生に置いては、相変わらずなのですが、短く短くしたつもりが、何時も通りの、長文駄文と成ってしまいました…。申し訳ないです…。
今後も、こちらのサイトを利用させて頂きたいと考えて居りますので、次回以降の事に思いを馳せると、前置きの分は、次回以降は減らせるな…とは思います。

もし、お優しいどなたかに返信して頂けた場合、こちらからの返信は、今日は夜以降か、明日の日中以降に成るやも知れません…。すみません…。何か、厳しい意見を頂くのではないかと、確認するのも億劫だと考えて居たりしますが、きちんと、返信させて頂きますので、よろしくお願いします…。

重複した内容が多い様にも思いますが、最後に、もう一言、どうぞ、よろしくお願いします…。
また長文駄文だよ…。読み辛いったらありゃしない…(自己嫌悪)。

アバター
usao
記事: 1889
登録日時: 12年前
連絡を取る:

Re: マップ管理ツールをDXlibの様なもので作る際の考え方について。

#2

投稿記事 by usao » 8年前

オフトピック
回答では無いので,offtopicとして記述します.

> そのマップを管理(数値の変更)するツールを、ゲームのプログラム内?に、一つのソースファイルとして用意しようとして居るところです。

>私だけが使う、もしゲームが完成しても、配布する際には取り除く部分


・そのマップ管理ツール(?)を,「ゲームのプログラム内に」作る必要があるのでしょうか?
・あなたが書いているようにMFCだとかを使えばエディットボックスのようなものの描画までも独自で実装する必要は無いと思われるのですが,
 そういうのを自前で全部 ”あえて” したい,ということなのでしょうか.

私なら,ゲームのプログラムとは別のプログラムとして,
それこそ,MFCのダイアログベースあたりで作ると思います.
で,質問内容の方がいまいちわかりません,
話の中での
>手打ち
という言葉と, それ以外の何か との関係性(違い)がわかりません.

例えば,

コード:

//エディットボックスのようなものを描画する関数.
//箱の外枠を描画し,箱の内側にテキストを描画する.
//テキストの描画が箱の中に収まりきらない場合,テキストはどうのこうの…という形で描画される.
void DrawMyEditBox(
  int left, int top, int width, int height,  //ボックスの外枠矩形の表示位置サイズ
  const char *text,  //箱の中に表示するテキスト
  ... //フォントだのマージンだの中央揃えだのなんだのいう設定群
);
とかいう関数をとりあえず自前で作ったとして,
>手打ちで座標を指定
というのは,

コード:

//かわいい動物の名前を表示するための,ある1つのボックスの描画
DrawMyEditBox( 10, 10, 100, 16, "Cat", ... );

//動物の鳴き声を表示するための別のボックスの描画
DrawMyEditBox( 10, 30, 100, 16, "Meow!", ... );
のように,関数引数に直値を書くこと を表しているのでしょうか?

アバター
SyunoBOX
記事: 6
登録日時: 8年前
住所: 茨城
連絡を取る:

Re: マップ管理ツールをDXlibの様なもので作る際の考え方について。

#3

投稿記事 by SyunoBOX » 8年前

usaoさん、日記に続き、こちらの方にもコメントを頂き、ありがたやです!
この長ったらしい私の質問なのか良く分からない文面から、要点を理解し、的確に意見をして頂けて、とても嬉しいです。
それに対し、この返信も含め、変な文面で、申し訳ないです…。
オフトピック
(オフトピックの内容への返信は、オフトピックで返した方が良いのかなと思いまして、オフトピックとして記述します…。)

>・そのマップ管理ツール(?)を,「ゲームのプログラム内に」作る必要があるのでしょうか?
usaoさんが仰る様に、ゲームのプログラム内に、必ずしも、それを作る必要がある訳では無いです。
ただ、私としては、ゲームのテストプレイと言うか、マップ関連以外も含み、プログラムを書き加えたり変更したりする度に行う動作確認の時に、
マップの、この部分を少し変えて~と言った、動作確認中のマップの編集もできればな、と思った次第です。
また、こちらの方が先に述べるべき理由ですが、数値で判断してマップの編集をするのでは無く、
視覚的に、マップ上の線分…オブジェクトを動かし、編集したいなと思ったからでもあります。
下記の項目の内容に近くなりますが、上記の、視覚的に編集したいと言うのも含め、
他のゲームのプログラム内では無く、他のプログラムとして用意する事も、不可能では無いのかな、とも思います。
しかし、これは私の問題ではありますが、マップ関連も含め、制作中なので、
ゲームのプログラム内に、書き加えた方が、早いと言うか、都合が良いのかな…と思って、こうして居ります。

>・あなたが書いているようにMFCだとかを使えばエディットボックスのようなものの描画までも独自で実装する必要は無いと思われるのですが,
> そういうのを自前で全部 ”あえて” したい,ということなのでしょうか.
MFCだとかが、そう言ったエディットボックスの様なものを描画してくれると言うか、楽に用意する事ができる事だけは知って居るのですが、それを利用する方法は知りません…。
それならば、学ぶと言うか、使える様にすれば良いだけの話ではあるのですが、私の有って無い様な知識の中だと、
別の言語を使う際は、一つのプログラムの中に複数の言語を使うものでは無く、複数のプログラムとして用意し、
それを如何にして同期?連携?させるかを考えるものなのだろうと思って居ります。
そうすると、この場合は、エディットボックスの様なものを、ゲームの画面と言うか、ウィンドウとは別に用意して、
数値が変更されたり、した時に、その数値をゲーム側に与えてやる~と言った方法もあるかとは思うのですが、
C++とDXlibを利用したゲーム作りも、ままならない状況で、他の言語に手を出すべきでは無いのかな…と思い、
きっと、ゲームを作る中で、スタート画面やメニュー画面、メッセージ画面等を作る際にも必要になる事柄だろう、と思った次第です…。
もしかしたら、私がやろうとして居る方が面倒臭い事で、MFC等を少し利用した方が、早くて簡単なのかも知れない…とも思います。

>私なら,ゲームのプログラムとは別のプログラムとして,
>それこそ,MFCのダイアログベースあたりで作ると思います.
上記の項目でも、幾つか関連する事を書いてしまいましたが、usaoさんが仰る様にするのが、普通と言うか、一般的なのかな…と思います。
ただ、それは、おいおい出来る様にするべき事で、先述の通り、まずはC++とDXlibの中で、どうするか悩んだ方が良いのかな…と思った次第です。
うーん…。私は、とんでもなく馬鹿野郎なのかも知れないな、とも思います…。
usao さんが書きました:話の中での
>手打ち
という言葉と, それ以外の何か との関係性(違い)がわかりません.
usaoさんが、態々、コードを書いて示して下さった通り、
手打ちと言うのは、描画する関数を、長ったらしく、一つずつ手作業で打って書く事です。

それ以外の何かと言うのは、
SyunoBOX さんが書きました:私の様に、細かく設定できる様にして置こうとするのか、私程では無くとも、ある程度は細かく指定するのか…
と私が述べた点だと思いますが、
usaoさんが提示したコードの様な、関数を用意すると言う事までは、考えて居りませんでした…。

私の場合だと…、コードを全て提示すると、他人に見せるのも恥ずかしい粗末な内容で、とても長くなってしまうので、
簡潔に、分かり易く述べさせて頂くと、
usaoさんの仰るエディットボックス、つまりは箱と、フォントと、箱の中に表示するテキストの構造体配列を用意し、
その中身を、一つ一つ、それ等を初期化する関数の中で、内容を与え、
それ等を、描画する関数の引数に指定し、配列の番号を変えるだけで、良い様にして、
箱の数だけ、箱の中に表示するテキストの数だけ、ループをして、描画する様な形にしました。

また、私の最初の質問の中で、
>また、別の質問に成ってしまいますが、
等と述べて居る文字色がオレンジ色の部分がありましたが、
そこは、ポインタとアドレスとして、管理する事で、一応は、問題を解決する事ができました。
具体的には、先述の構造体の中に、メンバとして、ポインタ型の変数を設け、それに対し、引数の書式で呼び出したい変数のアドレスを与えて居ます。

長くなってしまいましたが、
usao さんが書きました:で,質問内容の方がいまいちわかりません,
と仰られた、質問内容については、そもそも、

マップ管理ツール(?)を、どの様な方法で実装するか、と言う質問では無く、
C++とDXlibを利用する中に置いては、マップ管理ツールの様なものを作る際には、文字列を描画する関数等を、多用するしか無いと思いますが、
その際には、どう言う風に、プログラムを書きますか?と言う様な、質問をしたかった様に思います…。

マップ管理ツール…と言う、よく分からないものを、タイトルやら何やら、随所に書いて居るのが悪いのですが、
マップ管理ツールを作って居る際に、疑問に思ってしまっただけで、
マップ管理ツールについては、また別の話と言う事になります…。

また、ややこしい、怪しい文になってきてしまいましたが、
要するに、描画等の、DXlibの関数を利用する際は、指定する引数が決まって居るのですから、
最終的?には、それをループし、中身の引数を配列にする等して、番号を変え、描画すると思うのですが、
その配列等の中身については、結局は、私が上記で示した様に、構造体なり何なり、
一つ一つを記述する必要があるかと思いますが、
そう言うものをプログラミング?する際に、他の方は、どんな風に考えるものなのだろう…と言うのを、
知りたかった…と言う事だと思います。

自分で書いて居て、訳の分からない事を言って居るな…とは思うのですが、素直に伝えさせて頂くと、こうなってしまいます…。
自分で読み直すのも、骨が折れるぐらい、長文駄文で、本当に、申し訳ない気持ちで一杯です…。
良ければ、返信を頂けると幸いです。よろしくお願いします。
また長文駄文だよ…。読み辛いったらありゃしない…(自己嫌悪)。

アバター
usao
記事: 1889
登録日時: 12年前
連絡を取る:

Re: マップ管理ツールをDXlibの様なもので作る際の考え方について。

#4

投稿記事 by usao » 8年前

例えば,前の私の投稿での描画関数 DrawMyEditBox のようなものが存在する場合,
「後は,その引数をどっからどうやって持ってきて与えるか」ということでしょうか?


●1:個数が少ないとき●
そのツールでは,「エディットボックスをせいぜい2~3個表示すれば良い」のであれば,
前の私の投稿の2つめの猫っぽいコード例のように,単純に書き連ねておけば済むように思います.

●2:大量のとき●
もっと大量に存在するような場合,

コード:

//個々のエディットボックスで独立に設定したい設定値群をまとめた構造体
struct MyEditBoxProps
{
  //様々な設定値
};

//全てのエディットボックスに一律に設定すれば良い類の設定値をまとめた構造体
struct MyEditBoxCommonSettings
{
  //様々な設定値
};

const int N_EditBox = 100;  //エディットボックスの個数
MyEditBoxProps EBProps[ N_EditBox ];  //エディットボックスの個数分の設定値を配列で持つ
string EBTexts[ N_EditBox ];  //各エディットボックスの中に表示すべき文字列
MyEditBoxCommonSettings EBCommonSetting;  //共通設定は1個だけあればよい

//エディットボックスのようなものを描画する関数
void DrawMyEditBox( const string &rText, const MyEditBoxProps &rProps, const MyEditBoxCommonSettings &rCommonSettings )
{
  //引数に与えられた設定値を用いて,枠を描いて,その中に引数で与えられた文字列を描画する
}

//描画部のコード : 100個のエディットボックスの描画
for( int i=0; i<N_EditBox; ++i )
{
  DrawMyEditBox( EBTexts[i], EBProps[i], EBCommonSetting );
}
とか書くことによって,描画部に DrawMyEditBox() の呼び出しを100個書き連ねなくて済むようになるけれども,
じゃあこのとき, 設定値 EBProps[] の中身の値をどうやって用意するか? という点が問題なのでしょうか?

10個とか20個とか程度なら,まぁ,ハードコーディングでもいいかなと思いますが,
これが50個とか100個とかいう数になるとか,
あるいは,ツールプログラム完成後にも描画具合の調整を頻繁に行うとかいう話であれば,
ツール起動時に外部のファイルから設定値を読み込む形にすれば便利かと思います.
(調整の度に毎度ツールをビルドしなくて済むし,既存のソフト(エクセルとか)を設定値のエディタとして使えて便利,とか.)

アバター
usao
記事: 1889
登録日時: 12年前
連絡を取る:

Re: マップ管理ツールをDXlibの様なもので作る際の考え方について。

#5

投稿記事 by usao » 8年前

オフトピック
ツールの作り 側の話ですが,
検索してみると,「DXlibを使ってるんだけども,ダイアログボックスを出すにはどうすればいいのか」みたいな話が
そこそこ見つかりますので,そういう方向も検討してみればいかがでしょうか.

#私はDXlibというのを使った経験がありませんので,間違っているかもしれませんが…
 DXlibを使う理由というのは,ゲームを作るのに「便利だから」なのだと推測します.
 しかし,今回の,「マップ管理ツールを作ること」に関しては,DXlibを使っていることでかえって「縛り」になってしまっていないでしょうか?

アバター
SyunoBOX
記事: 6
登録日時: 8年前
住所: 茨城
連絡を取る:

Re: マップ管理ツールをDXlibの様なもので作る際の考え方について。

#6

投稿記事 by SyunoBOX » 8年前

usaoさん、また返信して頂いて、ありがたやです!
ただ返信して頂いた訳では無く、きちんと、意を酌んで頂いて居る感じがして、とても嬉しく思います。
usao さんが書きました:「後は,その引数をどっからどうやって持ってきて与えるか」ということでしょうか?
仰る通りです。

usaoさんが提示して下さった1と2の項目に書いてある事が、
私の、質問したかった事、他の人に尋ねたかった事の、
正しく、答えであると思います。

私も、似た様な事を、このトピックのやり取りの中で、書いて居たかと思います。
やり方が分からないと言うより、このやり方が一般的なのか、他の人も、こう考えるだろうか、
私は何か、間違えて居ないだろうか…と言った事を、
確認したかったと言う事なのだと思います。

もっと、素直にと言うか、分かり易く、人に訊く事ができれば、良いのですが、
何時も、こんな風に、なってしまいます…。

私としては、聞きたかった事が聞けたと言う事なので、解決したと言う事になります。
前述から、聞きたかった事は、とどのつまりは簡単な事で、
他の人は、誰でも良かったかの様に、受け取れるかなと思うのですが、
そう言う訳では無く、usaoさんの様に、
私の、簡単な事を難しくと言うか、ややこしく、長文駄文にしてしまった質問に対し、
きちんと意を酌んで頂けた事が、解決に繋がったのだと思います。
本当に、ありがとうございます。
usao さんが書きました:じゃあこのとき, 設定値 EBProps[] の中身の値をどうやって用意するか? という点が問題なのでしょうか?
これも、仰る通りです。
前述の様に、usaoさんが提示して下さった1と2の項目から、
私としては、他の人も、こう言う風に記述するものなのだと確認する事ができた事で、
気持ちの上では、解決したと言えます。
ですが、もっと具体的には、その、"中身の値をどうやって用意するか?"と言う事を、
知りたかったと言う事だと思います。

usaoさんが使われて居る言葉ですが、"ハードコーディング"と言う言葉を、
私は理解して居りませんでした。

聞いた事はありますが、話の中で使用できる程度に理解をして居りませんでした。

結局のところ、質問の内容としては、DXlibやC++云々も重要では無く、
どの程度までならハードコーディングをするのか、
する場合は、どんな風に記述する様にして居るのか、

と言った事を訊きたかったと言う事です。

また、
usao さんが書きました:あるいは,ツールプログラム完成後にも描画具合の調整を頻繁に行うとかいう話であれば,
ツール起動時に外部のファイルから設定値を読み込む形にすれば便利かと思います.
これについては、失念と言いますか、忘れて居ました。

量が多くなる前に、多くなる事を考えて、悩んで居りましたが、
量が多い場合は、そうするのが、最適解と言うか、一般的なのかなと思いました。
流石に、マップの情報等は、そうして読み込んで居ますが、
自分では、ちょっとしたツールでも、記述するものが多いのであれば、
そうするべきなのだろう、と思いました。

もしかしたら、usaoさんが仰った事は、DXlibとC++の中なら~と言う事で、
他の言語では、また何か、違う方法があるのやも知れませんが、
どの言語でも、概ね、縦に広げる巻物の様に、
横書きに、一行一行、記述して行くものが、ソースコードだと思いますので、
他の言語でも、同じ様な感じなのだろう、と思います。

随分とこう、当たり前の事の様ですが、
例えば、1足す1は何故2なのかと悩む人は、世の中に少なからず居ると思うのです。
私にとっては、今回、こうして質問をして、usaoさんに返信して頂いた事で、
傍から見て感じるより、大きく得られたものがあると思って居ります。

私は、語彙の乏しい人間なので、繰り返しになってしまいますが、
本当に、本当に、ありがとうございます!

蛇足になりますが、前述の通り、私としては、解決したと思うのですが、
何か間違って居る事があるやも知れませんので、
明日からの土日は、様子を見て、特に何も無ければ、月曜にでも、
もしかしたら、他の人の、後人の助けになるかも知れませんので、
また、私なりに短く纏めた返信をして、解決とさせて頂こうと思います。
オフトピック
usaoさん、ツールの作り方についても返信を頂き、ありがたやです。

私は、だらだらと数年はDXlib、DXライブラリを使ってゲームを作ろう…として居るので、
実は、そう言った事も検索して調べた経験があります。

まあ、そうは言っても、usaoさんが仰る様な題の質問や話があった気がする、と言った程度ですが…。

勿論、そう言う方向も、検討したいと思います。

私の、この変な話の仕方と言うか、何と言うか…には、
根っ子に、一つ、頑固な思いがあるからだと思います。
それは、趣味とは言え、やりたくてやって居る事、
素直にできる様に成りたいと思って居る事だから、
何と言うか、正しさと言うか、そう言ったものを、追求してしまって居るのだと思います。

usaoさんが仰る様に、
>DXlibを使う理由というのは,ゲームを作るのに「便利だから」
と言う事の筈です。

しかし、それは一番の理由であって、
きっと、私の様に、プログラミングが仕事な訳では無いが、ゲーム等を作りたい…と言う人は、
DXlibだけ使える様に~では無く、他の言語を利用したり、
例えば、DXlibならDirectXを理解する為に~と言った、先の目標を見据えて、
大きな一歩目として、使って居るのではないか…と思います。

それが、usaoさんの仰るように、縛りになっては、何と言うか、本末転倒な気もしますが、
簡単に言ってしまえば、プログラミングってこう言うものなのか~と言った事を、
体験して居る様な感じだと思います…。
何だか、こう綴ると、とても稚拙な行為に思えて来ます…。

オフトピックではありますが、オフトピックのオフトピック(?)の様になってしまいますが、
素直に、もっと前に進みたいです…。
趣味で、独学みたいなものなので、ゲームが完成するまでは、
進んで居るのか、進んで居ないのか、暗中模索と言いますか、
経験はありませんが、まるで宇宙空間を独りで漂って居るみたいで、
難しいですね…。

またまた、話が長くなってしまいましたが、
こう、何かを学ぶ様な時は、usaoさんの様に、言葉を返して下さる方が居るかどうかと言うのは、
とても大きい様に思います…。

先生や師匠と言ったものは、煩わしく鬱陶しい様で、居ないと寂しいものだな、と思います…。
また長文駄文だよ…。読み辛いったらありゃしない…(自己嫌悪)。

アバター
usao
記事: 1889
登録日時: 12年前
連絡を取る:

Re: マップ管理ツールをDXlibの様なもので作る際の考え方について。

#7

投稿記事 by usao » 8年前

んー,なんでしょうね.
何かをしようとしたときに,方法の候補として{A,B,C}が見えているとして,その中のどの方法が「正しいか」という形に捉えるのではなく,
それぞれの利点と欠点の様子(?):

・Aはちとコーディングが大変そうだけど,そういう形にしておけば,後でここの部分に修正入れることになった場合には,労力が少ないかな.
 (しかし,実際,「後になって修正することは無かった…」となれば,結果としては「回り道だった」ということになるかも)

・Bはアルゴリズムが難しい(ちょっと勉強しないと…)けど,処理が早くて結果の様子もいい感じ と言われているようだ.
 (しかし,苦労して動くところまでこぎつけた結果,期待はずれだったりするかも)

・Cは実装が簡単に済みそうだけど,ちょっと処理が遅いと思うんだよなぁ,うーん…
 (でも実際にやってみたら,言うほど問題なくて,そのままでOKだったりするかも)


みたいなのを考えて,自分が 「何に重きを置くか」 で選べばよいかと思います.
(趣味のプログラムなのであれば,途中で「やっぱつれぇわ.別の方法に切り替えよう」とかしても良いのでしょうから,あまり悩まずに選んでも良いのでは.)



>そうするのが、最適解と言うか、一般的なのかなと思いました。

ここで 最適 というのは,
"その問題にとって"  ,あるいは "それに取り組む自分自身にとって" の「最適」であるべきで,
「一般的な方法(というのが何かしら存在したとして)」 とは,異なり得ると思います.

アバター
SyunoBOX
記事: 6
登録日時: 8年前
住所: 茨城
連絡を取る:

Re: マップ管理ツールをDXlibの様なもので作る際の考え方について。

#8

投稿記事 by SyunoBOX » 8年前

確かに…。
確かに、そうですね。

最初から、複数の選択肢が見えて居る訳では無く、
その、何かをしようとした時に、
少し考え、複数の選択肢を用意し、どれが良いかと悩むところが、私は有るのですが、
勿論、usaoさんが仰る様に、最終的には、何に重きを置くかで選びますが、
それでも、それは、本当に最後で、そこに至るまでは時間が掛かってしまいます。

しかし、usaoさんが仰る様に、
趣味と言うか、自発的に、自分で決めて行って居る事なのですから、
誰かや何かに縛られる必要は無いのだと、良い様に捉え、
駄目なら途中で変えたりしても良いと、あまり悩まずに選んでも良い事ですよね。

何が最適か、最善か~と言った、選択と言うのも、
一般的な方法か何かが存在したとしても、それも選択肢の一つであって、
どれを選択するべきかは、問題を鑑みて、自分自身で決める事ですよね…。

要するに、悩み過ぎず、試して駄目なら、またやり直せば良い…と言う感じでしょうか。

私、悩み過ぎと言うか、考え過ぎだと言われるところがあるのですが、
そう言う事なのですかね…。

まあ、選択肢の一つとして、一般的なものも一つに加えたい中で、
一般的な方法は何かと考え、それが一般的か知りたかったと言うのと、
他の人なら、それ等の選択肢から、どれを選ぶものなのか知りたかった、
と言う事でしたが、
それは、悩むと言うか、考えても良い事なのだとは思います。

でも、それに固執するべきでは無くて、
思い付くものがあるなら、先ずはそれを試す様にして、
進めば良い…と言う感じなのかな、と感じます。

何が言いたいかと言うと、
私は、考えずに進んでも良いところを、余計に考えて、
それを理由に、言い訳にして、立ち止まって居るだけなのかな…と。

それも、もう、考え始めたら、また悩んでしまいますし、
そうは言っても、何も考えない訳にはいきませんし、
自分の中で折り合いをつけるしか、無いですよね…。

兎にも角にも、考えるより動いた方が、とりあえずは、良い…のかなと思います。
気持ちの上では、一歩も二歩も前進した気がするので、頑張ります。
頑張れそうです。
また長文駄文だよ…。読み辛いったらありゃしない…(自己嫌悪)。

アバター
SyunoBOX
記事: 6
登録日時: 8年前
住所: 茨城
連絡を取る:

Re: マップ管理ツールをDXlibの様なもので作る際の考え方について。

#9

投稿記事 by SyunoBOX » 8年前

前のコメントで月曜にと書いて置きながら、木曜まで放置した事を懺悔します…。すみません。激しい頭痛と腹痛で罰を受けました…。

私としては、解決したと思いますので、解決とさせて頂きます。
もし、まだ解決して居ない部分があると指摘して頂ければ、変更します。
(後から変更可能なんだろうか。)

利用規約の義務行為の項に則り、どうやって解決したかを他の人に分かって頂ける様に、書きます。

そもそも、質問内容が長くて煩雑でしたが、
どの程度までならハードコーディングをするのか、
する場合は、どんな風に記述する様にして居るのか

と要約できると考えが至りました。

今回の場合は、C++とDXライブラリを用いたゲーム作りをする中で、
マップ管理ツールを作ろうと考え、それを作る中、
後から変更できる様に、多くを変数で扱うべきなのか、
ソースを短く分かり易くするために、そうするべきなのか

と私が悩み、質問をして居ります。

私は、最初は、C++とDXライブラリを用いた環境での問題だと考えましたが、
コメントを頂く中で、
言語等の環境に問わず、プログラミングに置いて、共通に考える事
だと考え直しました。
その為、今回の質問は、どんな環境かは関係の無い事でした。

ですが、上記の様な、私の用いて居る環境だと、
4つ目のコメント、
usao さんが書きました:●1:個数が少ないとき●
そのツールでは,「エディットボックスをせいぜい2~3個表示すれば良い」のであれば,
前の私の投稿の2つめの猫っぽいコード例のように,単純に書き連ねておけば済むように思います.

●2:大量のとき●
もっと大量に存在するような場合,
●2は続いてコードが在りますが、それを含め、
その4つ目のコメント全体が、答えに成ります。

具体的には●1●2の様に、その場合に依って、どんなソースにするかを決めます。
しかし、私は、幾つかの方法を思い付き、考えつつも、そのどれが良いのかと悩んで居りました。
それは、このコメントの中で、最初に記した通り、
ハードコーディングを、どの程度までならするかと言う事です。

しかし、それは、その場その場に依る事で、自分で考えなくてはいけません。
今回、質問したかった事の真意としては、それを、他の人の場合は、どう考えるかと言った事でした。

しかし、それも、その場その場に依る事で、
やはり、人に依って、小さな違いはあるかと思いますが、
考える事は、大体、誰でも同じである事を確認する事ができました。

つまり、全ては私の考え過ぎでした。
物作りは何でも、特にプログラミングは何度も試す事ができるのだから、
考える前に行動するべきでした。


それを理解する事ができたため、私としては、解決と言う事になります。

このトピックの長い質問内容と、私の長い文を読んで頂いた方には、
プログラミングは、ハードウェア、ソフトウェアやデータに悪い影響を及ぼす危険もありますが、
(め、メモリ破壊とか熱暴走でハードを破壊とか…?)
多くは、そんな事には成り得ない筈です。
ですから、考え過ぎずに、打ってゆき、試して駄目なら、質問すると良いと思います。

何と言うか、私は、分かり易く纏めたつもりですが、
よく分からない内容に成ってしまったかと思います。すみません。

私の質問に最後まで付き合って下さり、usaoさんには、とても感謝して居ります。
また、ここまで読んで下さった方が居りましたら、感謝の意を申し上げます。
ありがとうございます。
また長文駄文だよ…。読み辛いったらありゃしない…(自己嫌悪)。

アバター
Dixq (管理人)
管理人
記事: 1662
登録日時: 14年前
住所: 北海道札幌市
連絡を取る:

Re: マップ管理ツールをDXlibの様なもので作る際の考え方について。

#10

投稿記事 by Dixq (管理人) » 8年前

長い・・全部読めてないのですが、マップチップからマップデータ作成する需要って沢山あるのでわざわざ作らなくても既にツールあるんじゃないでしょうか。
ってことで「マップチップ 作成 ツール」で検索したらこんなもの出てきましたが
http://www.mapeditor.org/
http://forest.watch.impress.co.jp/docs/ ... 91792.html
こういう他人が作ったツールを使うのじゃだめなのでしょうか?

DXライブラリはDirectXで描画する関係のまわりを簡易にしたものでありゲームそのものを作らないのであればかえって非効率です。
既に適切なUIが沢山用意されているXAML+C#のような環境で書けるようなものはそちらで書いた方が手っ取り早いと思います。

自分のスキルアップのため限界に挑戦したいというのであればとめませんが・・。

アバター
SyunoBOX
記事: 6
登録日時: 8年前
住所: 茨城
連絡を取る:

Re: マップ管理ツールをDXlibの様なもので作る際の考え方について。

#11

投稿記事 by SyunoBOX » 8年前

か、管理人様…!
管理人様の日記にコメントしたばっかりに、目を付けられ…(以下略)。

本当に、馬鹿みたいに長くて、すみません…。

恐らく、読まれて居ない部分、一応、最初の質問文の中に記述してあるのですが、
2点から成る線分を足場にしたマップデータを作成して居ります。
(最後の解決としたコメントでは、短くしようと、その点は省略したつもりだったのですが、
省略せずに記述するべきだったかも知れません…。言葉足らずでした…。)

マップチップと言うか、格子状に区切って、マス目で管理するのが、
2Dなら一番だとは思うのですが、一応は、長い時間を経て、線分に辿り着きました…。
(画像については、線分に合わせ、マップチップの要領で表示して居ます。)

私は、ウディタからゲーム作りに興味を持ったので、
提示された様な、マップチップからマップデータを作成するツールについては、
一応は、存じて居ります。それ等を利用する手もあるかと思います…。

ゲームを作るのが目的であって、ツールと言う表現が、そもそも悪かったと言うか、
ちょっと大袈裟に伝える事になってしまったかなと思います…。

簡単に言うと、RPG等のメニュー画面の様に、
少し、選択肢がある程度のものを作ろうとして居ます。

線分なので、線分をマウスで選んだり、引いたりし、
それをそのメニュー画面の様に、座標等を表示して、
そこに数値で入力したりして、線分を配置したいのです…。

ゲームだけでも、そう言った画面は、よくあるものだと思い、
その練習みたいなものにもなるかな…と。通ずるものがあるかなと…。

XAML+C#については、何も知らなかったので、近い内に調べさせて頂きます…!

私の説明が、どうにも他の人に伝わり辛いのだと思うので、
その内、その画面だけでも完成しましたら、こちらの日記等で発表させて頂きますね…!

お忙しい中、長いだけのトピックを立てて、困らせてしまい、すみません…。
ただ、独りで、こんな風に言葉だけ多く考えて居ても、にっちもさっちもいかなかったので、
こうして、少し勇気を出して、こちらで色々と話をさせて頂き、とても励みに成って居ります。
その点、ありがとうございます。

また長文駄文、失礼しました…。
また長文駄文だよ…。読み辛いったらありゃしない…(自己嫌悪)。

返信

“C言語何でも質問掲示板” へ戻る