DxLibでゲームの実行EXEとは別に設定EXEを用意したい

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
のなめん

DxLibでゲームの実行EXEとは別に設定EXEを用意したい

#1

投稿記事 by のなめん » 3年前

こんにちは、件名の通りなのですがDxLibでゲームを作成しています。

そのゲームの一部に設定画面を用意する方法が一般的(?)というか、よくある方式だと思うのですが、

そのゲームのEXEとは別に、設定だけを行うEXEを作る方法が知りたいです。

東方とかそんな感じだったと思います。

こういったメインの実行ファイルとリンクしたファイルの作成をしたことがないので、どういった感じで

実現できているかもわかっていません。教えて頂けませんか?よろしくお願いします。

YuO
記事: 941
登録日時: 9年前
住所: 東京都世田谷区

Re: DxLibでゲームの実行EXEとは別に設定EXEを用意したい

#2

投稿記事 by YuO » 3年前

普通に別のプログラムを作るだけだと思いますが……。
設定したい部分をファイルにして,ゲーム本体と設定アプリが同一のファイルを読み書きするようにすればよいです。
別に,2つの実行ファイルの間に依存関係を作るわけでも無いです。

あんどーなつ
記事: 171
登録日時: 3年前
連絡を取る:

Re: DxLibでゲームの実行EXEとは別に設定EXEを用意したい

#3

投稿記事 by あんどーなつ » 3年前

普通のプログラミング経験者は、ゲームは作れないがダイアログは作れる、人達です。
ダイアログを作ったり、ファイルを作ったりするのは、ゲームロジックを組み立てるより簡単なので、Windowsプログラミングの入門書で学習してください。

C言語でプログラミングする場合は、「猫でもわかるWindowsプログラミング」がおすすめです。

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

Re: DxLibでゲームの実行EXEとは別に設定EXEを用意したい

#4

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

今の時代WIN32APIの学習を勧めるのはどうなんでしょう…。
他に便利な手段が沢山あるのにわざわざレガシーなAPIを学習するのは個人的にあまり勧めません。
C#なら簡単にwindowsプログラミングできますよ。
私はJAVAが好きなのでJAVAもよく使います。
もしどうしてもピュアC以外使いたくないと言うことであれば昔はMFCがよく使われていました。
初代龍神録の設定画面もMFCで書いてあります。
しかし設定画面を分ける必要ってそんなにありますか?
例えばPS4とかのゲームって設定も全部同じ画面でやりますよね。
確かに画面解像度の設定などは起動時にわかってた方がいいというメリットがありにはありますが。

所で別のexeの保存データを別のexeで読み取る方法は普通にデータをファイル出力して読み取ればいいだけですよ。
ファイル入出力の方法は分かりますか?

家に帰ったらサンプルプログラム作ってみます。

あんどーなつ
記事: 171
登録日時: 3年前
連絡を取る:

Re: DxLibでゲームの実行EXEとは別に設定EXEを用意したい

#5

投稿記事 by あんどーなつ » 3年前

Dixq (管理人) さんが書きました:今の時代WIN32APIの学習を勧めるのはどうなんでしょう…。
C/C++の初心者にJava/C#勧めても怒られることが多いので。
どんなに簡単な言語でもやったことがない人から見るとお化けですよ。

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

Re: DxLibでゲームの実行EXEとは別に設定EXEを用意したい

#6

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

どうしてもピュアCでなければならないならMFCではダメなのでしょうか?
初心者の学習障壁を気にするならWIN32APIを学ぶのはハードルが高くないでしょうか。

あんどーなつ
記事: 171
登録日時: 3年前
連絡を取る:

Re: DxLibでゲームの実行EXEとは別に設定EXEを用意したい

#7

投稿記事 by あんどーなつ » 3年前

MFCはExpress Editionでは使えない、最近のMFC解説書でamazonレビューの評価が高い書籍が少ない、MFCは結局のところオブジェクト指向を理解していないとつまずく(*)、という理由で私的には△です。

(*) George Shepherd著「プログラミングMicrosoft Visual C++.NET Vol.1 基礎編」のp. 25の次の一文を見て私はMFCに見切りをつけました。
筆者自身の経験から言うと、オブジェクト指向アプリケーションフレームワークの導入により、Windowsプログラミングの学習は昔よりもずっと簡単になっています(もっとも、オブジェクト指向プログラミングを習得していればの話ですが)。

hide

Re: DxLibでゲームの実行EXEとは別に設定EXEを用意したい

#8

投稿記事 by hide » 3年前

勧める言語やフレームワークが何であろうとその人の好みや考えがあるでしょうからいいんですが、
将来性とかそのAPIの立ち位置とか一言ぐらい添えるべきだったのでは。

初心者にとって難しいのは学習より取捨選択だと思います。

あんどーなつ
記事: 171
登録日時: 3年前
連絡を取る:

Re: DxLibでゲームの実行EXEとは別に設定EXEを用意したい

#9

投稿記事 by あんどーなつ » 3年前

hide さん

おっしゃるとおりだと思います。
私の意見を整理しておきます。

Windows SDK (またはWin32 API)

16bit時代から少しずつ修正してきた古株。今のところ、高速に動作する。ただし新規のWindowsアプリケーション開発においてはMicrosoftの推奨ではない。UWP時代にはWin32アプリをUWPアプリに変換するというような話もある。オブジェクト指向は不要。DXライブラリはWin32アプリケーションなので、Win32 APIを知っておくと理解しやすい部分もある。

Microsoft Foundation Class (MFC)

.NET Frameworkが誕生するまでは、Windowsアプリケーションの初歩の代表格であった。Win32 APIをC++のクラスでカプセル化している構造なので、Visual BasicやDelphiに比べると拡張性が高く、高速に動作する。オブジェクト指向を習得している必要がある。

.NET Framework (Windowsフォーム)

Sun MicrosystemsのJava(今はOracleの製品)に対抗してMicrosoftが開発したプラットフォーム。Javaよりも高速に動作するのでWindowsプログラミングでは好まれる。2010年代におけるWindowsアプリケーション開発の主流。C#, VB.net, C++/CLIなど多数の言語で同一のAPIを提供する。オブジェクト指向の概念が必要だが、C++よりも容易であり、初心者向き"でも"ある。

Windows Presentation Foundation (WPF)

.NET Frameworkの実行時コンパイルの仕組みを援用して、タッチパネル操作、グラフィックスの向上、開発効率の向上を図ったフレームワーク。HTMLライクな言語(XAML)は、習得すれば開発効率を向上させることができるがくせが強いので初心者向けではない。現在においてはWindowsフォームよりもWPFで開発することが推奨されているがあまり普及していない。日本語の情報が少ない。

Universal Windows Platform (UWP)

Windows 10で導入された仕組みであり、WPFに加えて、iOS, Androidアプリを同一コードにて作成することのできる夢のプラットフォーム。同一コードでWindows OSが動作するデバイス(PC, モバイル, Xbox, IoT)のアプリケーションを作成できる。(11/17修正しました)しかし、WPF以上に情報が少なく、使える人もごく少数に限られるので、初心者にはまずお勧めできない環境である。
最後に編集したユーザー あんどーなつ on 2016年11月17日(木) 05:16 [ 編集 1 回目 ]

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

Re: DxLibでゲームの実行EXEとは別に設定EXEを用意したい

#10

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

> MFCを使うにはオブジェクト指向を習得している必要がある

そんなことないと思いますが・・。
簡単な物ならGUIでポイポイするだけで出来上がります。
本に書いてあったからとやめるのじゃなく超簡単ですから一度使ってみてから選択肢から外すなりしてみてはいかがでしょう。
昔のEditionならExpressでもMFC使えますよ。(再配布は出来なかったかもしれませんが)

> hideさん
> 初心者にとって難しいのは学習より取捨選択だと思います。

もっともですね。
だからこそ一番の近道と最近の流行りを勧めるのがいいかと思いまして。
リッチーはUnixを作るためにはC言語を作った方が近道だと判断してC言語を作ったように、
物事を達成するには何が近道かを見極め、そのために他言語習得が必要なら習得すべきと思うんですよね。
正直WIN32APIを学習するのとC#を学習するのじゃ全然難易度が違いますし、
一旦覚えてからの汎用性、開発効率が違いますからね。
長い目で見たとしても現在最良とされている方法を理解するのが望ましいのかと

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

Re: DxLibでゲームの実行EXEとは別に設定EXEを用意したい

#11

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

ところで、のなめんさんの質問で、他のEXEで出力した物を他のEXEで入力する方法ですが、
家に帰ったので以下のようなサンプルコードを書いてみました。
config_tという構造体に設定情報を格納するとします。

コード:

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

//設定構造体
typedef struct {
	int width;			//画面幅
	int height;			//画面縦
	bool isFullScreen;	//フルスクリーン表示するか
}config_t;

int main()
{
	config_t config;
	config.width = 640;
	config.height = 480;
	config.isFullScreen = true;
	FILE *fp = fopen("config.dat","wb");
	fwrite(&config, sizeof(config_t), 1, fp);
	fclose(fp);
}
で、config.datにデータが出力されます。
設定画面で「OK」等が押された時にこれを実行してあげればいいでしょう。

ゲーム本体の方では起動時にこのconfig.datを以下のようにして読み込みます。

コード:

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

//設定構造体
typedef struct {
	int width;			//画面幅
	int height;			//画面縦
	bool isFullScreen;	//フルスクリーン表示するか
}config_t;

int main()
{
	config_t config;
	FILE *fp = fopen("config.dat","rb");
	fread(&config, sizeof(config_t), 1, fp);
	fclose(fp);
	printf("%dx%d, フルスクリーン=%s", config.width, config.height, config.isFullScreen?"ON":"OFF");
}

実行結果
640x480, フルスクリーン=ON
このように設定画面で設定した情報を他のEXEで拾うことが出来ます。
特に難しいことはなく単にファイル出力して入力するだけでOKです。

inemaru
記事: 108
登録日時: 3年前

Re: DxLibでゲームの実行EXEとは別に設定EXEを用意したい

#12

投稿記事 by inemaru » 3年前

設定ファイルを共有する実行ファイルがある状況について
注意したい点を一つ書くと、

フォーマットは、気を付けた方が良いかもしれません。

テキスト形式(txt, ini, xml, json等)であれば、問題は起こりにくいですが
バイナリ形式だと型の違いを意識してデータを読み書きする必要が出てきます。

windows環境であれば、バイトオーダー(エンディアン)までは気にする必要ないと思うので
別言語からバイナリを書き出す場合は、型の対応表を見ながらの対応になると思います。

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

Re: DxLibでゲームの実行EXEとは別に設定EXEを用意したい

#13

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

後構造体を別の実行ファイルで入出力するなら構造体のアライメントにも注意ですね

あんどーなつ
記事: 171
登録日時: 3年前
連絡を取る:

Re: DxLibでゲームの実行EXEとは別に設定EXEを用意したい

#14

投稿記事 by あんどーなつ » 3年前

Dixq (管理人) さんが書きました:> MFCを使うにはオブジェクト指向を習得している必要がある

そんなことないと思いますが・・。
簡単な物ならGUIでポイポイするだけで出来上がります。
本に書いてあったからとやめるのじゃなく超簡単ですから一度使ってみてから選択肢から外すなりしてみてはいかがでしょう。
昔のEditionならExpressでもMFC使えますよ。(再配布は出来なかったかもしれませんが)
なぜMicrosoft PressのMFC解説本を持っているのにMFCアプリケーションを作成したことがないと思われたのでしょうか?MFCはアサート機能や文字列クラスなどは便利だと思います。Win32 APIが頭に入っていれば、どうしてその名前なのか、どうしてそうするのかが分かりますし。

ただ、自動生成ツールにいつもびくびくしながらプログラミングをしなければならないので、それがトラウマになるかもしれないです。Win32のリソースエディタはMFCのエディタよりも単純な分楽、.NETのフォームエディタも100点ではないがMFCのエディタよりも改良されている、XAMLは癖が強いですが修正は簡単です。こまめにバックアップを取って慎重に作業すれば間違えないと思いますが、それでも動かしているコードが多いので「なんで?」「なんで?」の連続になるし、生成したコードのどこを書き直したのか後で思い出せない、など本当にいいと思えた試しがないです。

高校生の時はMFCと寝食を共にしていましたがVisual Basicで鼻歌みたいにソフトを作っている先輩を見て、今では、どうしてVisual BasicじゃなくてMFCにしたんだろうと非常に後悔している次第です。

アバター
usao
記事: 1566
登録日時: 6年前

Re: DxLibでゲームの実行EXEとは別に設定EXEを用意したい

#15

投稿記事 by usao » 3年前

オフトピック
経験ある言語はCだけ&GUI経験なし 状態なのだと仮定した場合,
ダイアログ1個だけ出てくるようなものを作る場合の難易度は,個人的には以下(私がさわったことあるものだけですが).
下に行くほど高難度.


・Win32API
 言語がCでOK.
 雛形コードを自動生成させても他と比較してそのコード量が圧倒的に少なく,WinMain()等が全て見えている等,
 見た目の第一印象が(他と比較して圧倒的に)未経験者にやさしい.
 APIの意味をググり,イベントドリブンなるものを把握すれば,とりあえず数日くらいで何かがぎりぎり動き始める程度には,どうとでもなる.


・MFC
 (1)言語がC++であることがまず壁.
 自動生成されたコードのうち,自分がいじる箇所がクラスになってるので,ちょっとはC++勉強しないと.
 Cの知識だけではやっぱり戦えない.
 (2)初心者にとってWin32APIとの大きな違いは,「このプログラムってどういう流れで動くの? どっから始まるの…?」という状態の中に放り出された状態からの開始になること.
 (3)何だかんだでWin32APIの経験が無い状態では厳しい.

 経験上, C経験だけ&GUI経験なし な人が「MFCなら楽にできる」とかいう話を信じていきなり触れると,(1)と(2)の相乗効果で高確率で撃墜される.
 ((2)の威力の程度は人による.あんま気にしないタイプの人もいるけど,全くとりかかれなくなる人もいる.)


・C# (私が経験あるのは Windowsフォーム とかいうのだけ)
 (1)まず言語がCとは全く違うので1から勉強が必要.Cの知識程度では全く戦えないどころか,むしろC/C++系経験があると邪魔になる.
 (2)フォームだのWPFだの複数の形態がある上に,古い言語バージョンの情報が検索上位に来たりして,初心者が自分の状況に合致する情報を検索するが異様に難しい.
 (3)フォームでやってると,フォームデザイナがすぐエラー吐いて,手も足も出なくなる.



#なお,上記3つをある程度経験した後で,
 ちょっとしたダイアログで済む程度のソフトを作る場合の簡便さがどんな感じかというと,
    C# >> MFC >>>> Win32API
 であり,順序が反転.

のなめん

Re: DxLibでゲームの実行EXEとは別に設定EXEを用意したい

#16

投稿記事 by のなめん » 3年前

返信が遅れて申し訳ありません。

>> Dixq様
サンプルソース非常に参考になりました!

問題は解決致しましたので、解決済とさせて頂きます。

閉鎖

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