Re: プログラムをリセットしたい ( No.1 ) |
- 名前:Will 日時:2008/06/17 19:43
「リセットを実現できるような関数がDXライブラリにありますか?」という質問であれば答えはNoです。
Windows APIの知識がおありであれば、プログラムが終了するときに、自分自身を再起動するという方法で実現可能かと思います。
(二重起動が可能であることが前提ですが)
もしくは、リセットのときは自力で変数の内容をリセットしてWinMainの最初のところに来ることが出来るようにプログラミングすることは可能です。
WinMain(省略)
{
do {
// 初期化処理
// 本体処理
} while (...); // リセットならばループを抜けない
}
|
Re: プログラムをリセットしたい ( No.2 ) |
- 名前:haha 日時:2008/06/17 20:33
>>Willさん
返答ありがとうございます。
>プログラムが終了するときに、自分自身を再起動するという方法
についてですが、ググった結果、C言語の「execl」という関数でそのようなことが可能とのことなんですが、書式通りにプログラムに導入してみても、
「未定義の関数 'execl' を呼び出した(関数 __stdcall WinMain(HINSTANCE__ *,HINSTANCE__ *,char *,int) )」
と出てきてしまいます。
なにか特別のインクルードするヘッダファイルが必要だったりするんでしょうか?
Windows APIの知識がないとやっぱりきついんですかね・・・?
なんかDXライブラリの範囲を超えてしまっているような気がしますが、もしもわかるようだったら教えてくださいm(_ _)m
参考:ttp://okwave.jp/qa642829.html
↑のANo.3に書いてある内容を実践したいのですが・・・
|
Re: プログラムをリセットしたい ( No.3 ) |
- 名前:優柔不断 日時:2008/06/19 21:51
execl関数は標準ライブラリ関数ではありません。
最初にジャンプするのであれば、goto文などの使用も一部考えてはどうでしょうか?
うまく使えば、かなりプログラムを簡略化できます。
|
Re: プログラムをリセットしたい ( No.4 ) |
- 名前:L.H.@文林 日時:2008/06/21 00:48
メインループに関数ポインタ配列を組み込んで、その中に変数を全て初期化する関数をセットしておき、
メインループでまず最初にキーを初期化関数呼び出しに設定し、初期化が終わったら
キーをゲームスタート関数に切り替えて初期化終了、という風に設計したら
簡単に実現できますよ。
というか僕はそうしています。
更に、ゲームオーバー処理関数の最後にキーを初期化に切り替えて、
ゲームオーバー→初期化→ゲームスタート画面 という流れにも簡単に出来ます。
プログラム再起動しなくてもやり直せた方が、テストもしやすいですしね^^
で、特定のボタンを押したときに、キーを初期化関数呼び出しに戻してメインループに
戻れば、自動的にまっさらの状態になってゲームスタートに戻ってきます。
ただし、ゲームスタート後に確保したメモリや作成したオブジェクトの解放などは、
当たり前ですが自分でキッチリ管理してくださいね(^^;
|