新・ゲームプログラミングの館3.3章「簡単な選択画面を作る」でつまづいてしまいました

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
ねんどじん
記事: 23
登録日時: 13年前

新・ゲームプログラミングの館3.3章「簡単な選択画面を作る」でつまづいてしまいました

#1

投稿記事 by ねんどじん » 10年前

3.3章のサンプルプログラムをC++で書こうとしたところ、添付したコードができましたが、
Ctrl+f5を押しても真っ黒な画面が出てきてすぐ消える、という挙動になってしまいました。
コンパイル時にエラーが出ないのでどう解決すればいいかがよくわからないのですが、
何が問題でこのような挙動になってしまっているのでしょうか?
また、今後このような問題が起きた時の解決するための方針も合わせて教えていただけると大変助かります。
よろしくお願いします。

ねんどじん
記事: 23
登録日時: 13年前

Re: 新・ゲームプログラミングの館3.3章「簡単な選択画面を作る」でつまづいてしまいました

#2

投稿記事 by ねんどじん » 10年前

ファイルサイズが大きすぎるのか、添付に失敗したようなので、以下にうpしておきます。
重ね重ねよろしくお願いします。

http://www.dotup.org/uploda/www.dotup.o ... 8.zip.html

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

Re: 新・ゲームプログラミングの館3.3章「簡単な選択画面を作る」でつまづいてしまいました

#3

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

まず、.sdfファイルやDebugフォルダは不要な上に重いので削除してアップしましょう。

menu_elementのchar* m_nameの領域を確保せずにコピーしようとして落ちてるのではないですか?
確認はしていませんが、ブレイクポイントで一行ずつ見て行けばどこで落ちているか分かりますよ。

ねんどじん
記事: 23
登録日時: 13年前

Re: 新・ゲームプログラミングの館3.3章「簡単な選択画面を作る」でつまづいてしまいました

#4

投稿記事 by ねんどじん » 10年前

>まず、.sdfファイルやDebugフォルダは不要な上に重いので削除してアップしましょう。

了解しました。

>menu_elementのchar* m_nameの領域を確保せずにコピーしようとして落ちてるのではないですか?
>確認はしていませんが、ブレイクポイントで一行ずつ見て行けばどこで落ちているか分かりますよ。

はい、m_nameの領域をmenu_elementのコンストラクタで確保したところ、どうやら問題は解決したようです。ありがとうございました。
ただ、Ctrl+f5で起動するとまた別の問題が起きたのか、エラーメッセージが出てプログラムが落ちてしまいます。
ブレイクポイントを使ってみた結果、
int white=GetColor(255,255,255);
と書いた時に、なぜかwhiteに-1が代入されているようだと分かりました。
GetColorのリファレンスも見てみたのですが、いまいちこの問題(whiteになぜか-1が代入される)の原因と解決策がわかりません。
どなたか今一度コードを確認していただけないでしょうか。

以下に上げ直しました。
http://www.dotup.org/uploda/www.dotup.o ... 1.zip.html

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 13年前
住所: 東海地方
連絡を取る:

Re: 新・ゲームプログラミングの館3.3章「簡単な選択画面を作る」でつまづいてしまいました

#5

投稿記事 by softya(ソフト屋) » 10年前

-1で支障がありますか? 環境で戻り値が変わるので-1 で多分大丈夫だと思うんですが。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

ねんどじん
記事: 23
登録日時: 13年前

Re: 新・ゲームプログラミングの館3.3章「簡単な選択画面を作る」でつまづいてしまいました

#6

投稿記事 by ねんどじん » 10年前

>-1で支障がありますか? 環境で戻り値が変わるので-1 で多分大丈夫だと思うんですが。

そうだったのですか。-1で大丈夫なら安心なのですが、それだと自分には
なぜこのソリューションをCtrl+f5でビルド(?)した時に強制終了するのかさっぱりわからなくなります。
ブレークポイントを配置してf5でデバッグしてみたんですが、今度は何も問題なさげに予定された通りの動きをしていました。
何が問題でCtrl+f5した際に強制終了してしまうのか、教えていただけませんか。
もう正直自分の手には負えなくなっています。

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 13年前
住所: 東海地方
連絡を取る:

Re: 新・ゲームプログラミングの館3.3章「簡単な選択画面を作る」でつまづいてしまいました

#7

投稿記事 by softya(ソフト屋) » 10年前

m_name=new char;だとstrcpyする領域としては必要なサイズとか考慮されていないので大問題ですね。ポインタの勉強をされたほうが良いと思います。
動いていたのはたまたまだと思います。
C++なのでstd::stringクラスを使ったほうが良いんですが、ポインタも勉強しておくべきだと思います。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

ねんどじん
記事: 23
登録日時: 13年前

Re: 新・ゲームプログラミングの館3.3章「簡単な選択画面を作る」でつまづいてしまいました

#8

投稿記事 by ねんどじん » 10年前

返信ありがとうございます。一度ポインタの勉強をし直してからチャレンジし直したいと思います。
はじめはstringを使っていたのですが、DrawFormatStringにstring型で文字列を渡せないという問題が起こったので途中で
char*型に書き直しました。

DrawFormatstringにstring型の文字列を引数として渡す方法があるのでしょうか?
それともDrawFormatStringにstring型の文字列を渡す場合はchar*型にキャストしなければいけないのでしょうか?

自分の技術レベルが根本的に足りてないということなので、これでこのトピックは一度解決扱いにしようと思います。
しかし上記に答えられる方は是非お願いします。

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 13年前
住所: 東海地方
連絡を取る:

Re: 新・ゲームプログラミングの館3.3章「簡単な選択画面を作る」でつまづいてしまいました

#9

投稿記事 by softya(ソフト屋) » 10年前

c_str()メンバ関数でconst char* constポインタは得られます。
クラスのインスタンスをchar*型にキャストは出来ません。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

ねんどじん
記事: 23
登録日時: 13年前

Re: 新・ゲームプログラミングの館3.3章「簡単な選択画面を作る」でつまづいてしまいました

#10

投稿記事 by ねんどじん » 10年前

返信ありがとうございます。c_str()については今知りました。やはりもう一度C++を学習し直さなければと思いました。
そうですよね、stringをchar*にキャストできたら変ですもんね、DrawFormatStringにstringを渡す方法がわからなくて混乱してました。
何度も回答してくださってありがとうございました。ではおやすみなさい。

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 13年前
住所: 東海地方
連絡を取る:

Re: 新・ゲームプログラミングの館3.3章「簡単な選択画面を作る」でつまづいてしまいました

#11

投稿記事 by softya(ソフト屋) » 10年前

ねんどじん さんが書きました:返信ありがとうございます。c_str()については今知りました。やはりもう一度C++を学習し直さなければと思いました。
そうですよね、stringをchar*にキャストできたら変ですもんね、DrawFormatStringにstringを渡す方法がわからなくて混乱してました。
何度も回答してくださってありがとうございました。ではおやすみなさい。
オーバーロードすれば(const char * const)は出来ると思いますが、 stringは対応定義していなかったはずだと思います(完全に自信がない・・・)。
自分で継承して作るのも方法です。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

閉鎖

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