C言語何でも質問掲示板


Total hit  今日  昨日  

必ずお読み下さい → 規約と注意事項  アンケートはこちら  エラーで投稿できない方はこちら  過去ログ検索はこちら

 
   プログラムの変数名の ....   
     ・[51391] やんち 
     ・[51549] じゃがいも 
     ・[51550] たかぎ 
     ・[51552] たいちう 
     ・[51556] たかぎ 
     ・[51732] じゃがいも 
     ・[51735] たかぎ 
     ・[51737] y 
     ・[51739] たかぎ 
     ・[51745] にゃ 
   ゲッター/セッターにつ ....   
     ・[51267] YuO 
     ・[51268] 山口 
     ・[51277] YuO 
     ・[51280] 山口 
     ・[51286] YuO 
     ・[51287] 山口 
     ・[51307] 山口 
     ・[51308] YuO 
     ・[51313] 山口 
     ・[51345] 山口 
     ・[51400] 山口 
     ・[51498] YuO 
     ・[51580] 山口 
     ・[51677] 山口 
     ・[51742] 山口 
   1〜50までの数字をかけ ....   
     ・[51733] たかぎ 
     ・[51734] 愛川 
     ・[51736] たかぎ 
   ゆっくりと目標値に近 ....   
     ・[51700] Justy 
     ・[51703] ft 
     ・[51705] Justy 
     ・[51712] ft 
     ・[51719] たいちう 
     ・[51724] Justy 
     ・[51729] ft 
   ファイル書き込み   
     ・[51457] ookami 
     ・[51475] pool 
     ・[51479] ookami 
     ・[51483] pool 
     ・[51493] ookami 
     ・[51726] pool 
   Sleep   
     ・[51721] たかぎ 
     ・[51725] あさひ 
   LPCWSTR型への変換   
     ・[51338] Blue 
     ・[51339] dic 
     ・[51340] dic 
     ・[51341] dic 
     ・[51342] softya 
     ・[51343] softya 
     ・[51344] dic 
     ・[51346] softya 
     ・[51348] hoge 
     ・[51353] たかぎ 
     ・[51383] dic 
     ・[51524] dic 
     ・[51525] たいちう 
     ・[51527] dic 
     ・[51528] dic 
     ・[51711] dic 
   画面解像度の変更   
     ・[51679] Ma 
     ・[51680] ゆう 
     ・[51681] Dixq (管理人) 
     ・[51684] ゆう 
     ・[51685] Ma 
     ・[51687] ゆう 
     ・[51688] ゆう 
     ・[51691] Justy 
     ・[51710] ゆう 
   DXライブラリのDrawCi ....   
     ・[51675] Justy 
     ・[51694] ジャーニー 
     ・[51695] ジャーニー 
     ・[51696] Justy 
     ・[51697] ジャーニー 
     ・[51698] ジャーニー 
   自機と一定距離を保っ ....   
     ・[51413] Dixq (管理人) 
     ・[51432] ft 
     ・[51456] ookami 
     ・[51689] ft 
   継承しているが呼ばれ ....   
     ・[51683] dic 
   Core Audio APIs での ....   
   【C++】vector<vec ....   
     ・[51469] たかぎ 
     ・[51485] yskey 
     ・[51486] たかぎ 
     ・[51499] Ma 
     ・[51657] yskey 
     ・[51659] たかぎ 
     ・[51672] yskey 
   【雑談】このサイトで ....   
     ・[51624] ideyan 
     ・[51629] softya 
     ・[51630] Ma 
     ・[51631] Tororo 
     ・[51646] HK 
     ・[51650] softya 
     ・[51652] Dixq (管理人) 
     ・[51655] HK 
     ・[51663] ひよこ 
     ・[51666] softya 
     ・[51671] tuelon 
   無題   
     ・[51626] mats 
     ・[51667] pon 
     ・[51669] ookami 
     ・[51670] pon 
   テンプレートクラス内 ....   
     ・[51658] たかぎ 
     ・[51660] 組木紙織 
     ・[51661] たかぎ 
   HPの内容を一部修正 [ ....   
     ・[51605] Dixq (管理人) 
     ・[51610] Tororo 
     ・[51611] ベリ工 
     ・[51612] Dixq (管理人) 
     ・[51613] ベリ工 
     ・[51614] Dixq (管理人) 
     ・[51615] たかぎ 
     ・[51616] ベリ工 
     ・[51619] Dixq (管理人) 
     ・[51621] 組木紙織 
     ・[51653] Dixq (管理人) 
   VC++ 2010 インストー ....   
     ・[51640] たかぎ 
   既読文 判定   
     ・[51582] lbfuvab 
     ・[51583] softya 
     ・[51585] Ma 
     ・[51587] softya 
     ・[51588] Justy 
     ・[51591] Ma 
     ・[51593] Justy 
     ・[51594] softya 
     ・[51595] Ma 
     ・[51596] Justy 
     ・[51598] Ma 
     ・[51600] Justy 
     ・[51623] Ma 
   ボス戦前の会話イベン ....   
     ・[51607] ひよこ 
     ・[51609] Justy 
     ・[51617] サンタクロース 
   今日DXライブラリ導入 ....   
     ・[51535] Justy 
     ・[51540] ゴルスラ 
     ・[51597] ゆうき 
     ・[51601] Dixq (管理人) 
     ・[51602] softya 
     ・[51604] Dixq (管理人) 
   剣の振り下ろしの描写   
     ・[51563] softya 
     ・[51564] DVDM 
     ・[51570] sleepy-T 
     ・[51571] softya 
     ・[51574] sleepy-T 
     ・[51575] Ma 
     ・[51599] sleepy-T 
   for文で、複数の処理を ....   
     ・[51521] ookami 
     ・[51551] ru-pu 
     ・[51572] アトラス 
   32×48のキャラクター ....   
     ・[51536] ookami 
     ・[51538] ライス 
     ・[51554] ookami 
     ・[51557] ライス 
   ディレクトリが作成さ ....   
     ・[51544] たかぎ 
     ・[51545] dic 
   ヘッダー typedef str ....   
     ・[51410] たかぎ 
     ・[51453] Justy 
     ・[51541] ubu 
   16進数の表示   
     ・[51519] Justy 
     ・[51520] リョウ 
     ・[51522] box 
     ・[51523] リョウ 
     ・[51526] たいちう 
     ・[51530] たかぎ 
     ・[51532] リョウ 
     ・[51534] たかぎ 
     ・[51539] リョウ 
   C言語での bool の分類 ....   
     ・[51427] たかぎ 
     ・[51428] バグ 
     ・[51443] ムンバ 
     ・[51446] たかぎ 
     ・[51448] たかぎ 
     ・[51449] ムンバ 
     ・[51450] ムンバ 
     ・[51473] ムンバ 
     ・[51480] たかぎ 
     ・[51488] ムンバ 
     ・[51491] たかぎ 
     ・[51492] たかぎ 
     ・[51494] ムンバ 
     ・[51495] たかぎ 
     ・[51502] ムンバ 
     ・[51504] たかぎ 
     ・[51513] ムンバ 
     ・[51514] たかぎ 
     ・[51515] ムンバ 
     ・[51529] たかぎ 
     ・[51537] ムンバ 
   アーカイブファイルに ....   
     ・[51452] Justy 
     ・[51465] たろう 
     ・[51518] Justy 
   二次関数の解について ....   
     ・[51438] たかぎ 
     ・[51508] ウルスラ 
     ・[51509] ウルスラ 
     ・[51512] h.k 
   RPGのマップについて   
     ・[51474] softya 
     ・[51477] ライス 
     ・[51487] softya 
     ・[51496] ライス 
     ・[51503] softya 
     ・[51505] ライス 
     ・[51507] softya 
     ・[51510] ライス 
   無題   
     ・[51455] ookami 
     ・[51471] リョウ 
     ・[51481] ookami 
     ・[51484] たかぎ 
     ・[51497] リョウ 
   MSCからの移行   
     ・[51462] たかぎ 
     ・[51463] 三郎 
     ・[51464] softya 
     ・[51466] 三郎 
     ・[51467] たかぎ 
     ・[51476] 三郎 
     ・[51478] たかぎ 
     ・[51482] たかぎ 
     ・[51489] softya 
     ・[51490] 三郎 
   FPS制御   
     ・[51454] Justy 
     ・[51470] 名無し 
   vectorコンテナについ ....   
     ・[51422] ookami 
     ・[51429] yskey 
     ・[51434] ookami 
     ・[51439] ookami 
     ・[51459] yskey 
   Javaでのグラフ作成に ....   
     ・[51310] ookami 
     ・[51311] たいちう 
     ・[51312] たいちう 
     ・[51314] bun 
     ・[51315] たいちう 
     ・[51323] ookami 
     ・[51350] bun 
     ・[51366] ookami 
     ・[51369] bun 
     ・[51370] たいちう 
     ・[51411] bun 
     ・[51414] ookami 
     ・[51431] box 
     ・[51458] たいちう 
   トランプゲーム「大富 ....   
     ・[51445] ookami 
     ・[51447] 蒼空 
   DXライブラリの時刻表 ....   
     ・[51421] nns 
     ・[51423] ookami 
     ・[51426] ゴルスラ 
     ・[51433] ideyan 
     ・[51435] ookami 
     ・[51436] ゴルスラ 
     ・[51440] ideyan 
     ・[51442] ookami 
     ・[51444] ゴルスラ 

Name: じゃがいも  ..ぴよぴよ(186ポイント)   Date: 2010/04/30(金) 21:48   No:51382       
Title: プログラムの変数名の命名    
こんばんは。
プログラムで詰まったという訳ではないんですが・・・。
現在C/C++でプログラムを組んでいますが、変数名の記法について疑問に思ったので質問させていただきます。

今私は、システムハンガリアン記法を使用してプログラムを組んでいます。
変数名:length を宣言するとして、

int型であればiLength、float型であればfLength、bool型であればbLength

という記法でプログラムを組んでいます。

しかし、調べてみたところ余りいいことは書かれていませんでした・・・。

そこで皆さんのプログラムの変数名の命名の仕方を教えていただければと思い、質問しました。

宜しくお願いいたします。


186ポイント を手に入れた。


Name: やんち [URL]  ..ぴよぴよ(946ポイント)   Date: 2010/04/30(金) 23:31   No:51391     
Title: Re:プログラムの変数名の命名    
システムハンガリアン記法は、時代の流れと共に、今は、もう古い文化となり
つつありますね。

元々、コードジェネレーションや、プリプロセッサの都合で、開発効率を助け
るためのに必要だったように思います。

昔は、プロセッサの性能が今よりも悪く、システムハンガリアン記法のような
小細工をして、コンパイル時間の短縮とかしてたんですなぁ。

最近のIDEなんかは、システムハンガリアン記法なんて不要みたいです。

今、実用レベルのプログラミングで、システムハンガリアン記法を使う事に
意味はないと思います。
しかし、システムハンガリアン記法を勉強する事自体は、有用な事だと思いま
すよ。

そのまま、プログラミングに転用できなくても、システムハンガリアン記法を
ベースに、今風にアレンジして、使用するのは、有りだと思います。

私がよくやる変数名の命名でしたら、

・ローカル変数名は自由。
・グローバル変数は「g_」で始める。
・スタティック変数は「s_」で始める。
・メンバ変数は「m_」で始める。
・パラメタにはプレフィックスを付けない。
・整数型なら、「n」を付ける。
・char型なら、「ch」を付ける。
・short型なら、「sh」を付ける。
・int型なら、「i」を付ける。
・long型なら、「lo」を付ける。
・unsigned型なら、「u」を付ける。
・bool型なら、「bo」を付ける。
・BYTE型なら、「by」を付ける。
・std::string型なら「str」を付ける。
・std::wstring型なら、「ws」を付ける。
・ゼロ終端文字列なら、「sz」を付ける。
・wchar_t型なら、「w」を付ける。
・std::vector型なら、「vector」を付ける。
・std::list型なら、「list」を付ける。
・std::map型なら、「map」を付ける。
・テンプレートの入れ子に付いては、一番外側の物まで採用する。

と言う感じですが、
特に、付けなくても、型が想像出来る場合には、省略したりもします。

目的は、より速やかに命名出来るようにする事なので、あまり悩むような事は
しません。


704ポイント を手に入れた。

Name: じゃがいも  ..ぴよぴよ(247ポイント)   Date: 2010/05/03(月) 19:49   No:51549 解決!     
Title: Re:プログラムの変数名の命名    
ご返信遅れて申し訳ありません。

詳しく書いてくださりありがとうございます。

やはりシステムハンガリアンは古いものとなっていますか・・・。

システムハンガリアン記法を基盤に新しい変数名の付け方を探してみます。


61ポイント を手に入れた。

Name: たかぎ [URL]  ..ハッカー(180,932ポイント)   Date: 2010/05/03(月) 20:02   No:51550     
Title: Re:プログラムの変数名の命名    
私自身はシステムハンガリアンは使いません。
ただ、理由があって使っている人を非難する気もありません。
今回はせっかくの機会ですので、後学のためにも、システムハンガリアンを使っていて、こういうところがよかったという体験談を聞かせていただければ幸いです。


81ポイント を落としてしまった。

Name: たいちう  ..比類無きプログラマー(78,978ポイント)   Date: 2010/05/03(月) 20:25   No:51552     
Title: Re:プログラムの変数名の命名    
読んだ時に、あれっ?と思ったまま、書くのを忘れていました。
やんちさんでなくても、偉い人教えて下さい。


> 元々、コードジェネレーションや、プリプロセッサの都合で、開発効率を助け
> るためのに必要だったように思います。

> 昔は、プロセッサの性能が今よりも悪く、システムハンガリアン記法のような
> 小細工をして、コンパイル時間の短縮とかしてたんですなぁ。

これは本当ですか?やんちさんの思いこみじゃなくて?
コンパイラに対する私の理解では、コンパイル時間が短縮される、
というのが全く想像つかないです。

アプリケーションハンガリアンの論文の"type"が勘違いされて、
システムハンガリアンになったと理解していたのですが。

http://msdn.microsoft.com/en-us/library/Aa260976
http://local.joelonsoftware.com/mediawiki/index.php/%E9%96%93%E9%81%95%E3%81%A3%E3%81%9F%E3%82%B3%E3%83%BC%E3%83%89%E3%81%AF%E9%96%93%E9%81%95%E3%81%A3%E3%81%A6%E8%A6%8B%E3%81%88%E3%82%8B%E3%82%88%E3%81%86%E3%81%AB%E3%81%99%E3%82%8B


54ポイント を手に入れた。

Name: たかぎ [URL]  ..ハッカー(181,061ポイント)   Date: 2010/05/03(月) 22:01   No:51556     
Title: Re:プログラムの変数名の命名    
> これは本当ですか?やんちさんの思いこみじゃなくて? 
> コンパイラに対する私の理解では、コンパイル時間が短縮される、 
> というのが全く想像つかないです。 

完全にスルーしていましたが、そんなはずはありませんね。
まあ、昔のBASICが接尾辞で型を区別していた(文字列なら$とか)ように、インタープリタならそういうこともあるかもしれませんが。


34ポイント を手に入れた。

Name: じゃがいも  ..ぴよぴよ(766ポイント)   Date: 2010/05/07(金) 00:35   No:51732     
Title: Re:プログラムの変数名の命名    
返事遅れて申し訳ありません。

私も調べた知識しかないのですが、何かが勘違いされてシステムハンガリアンになったというのはよく見かけました。
そこから先のことは詳しく知りませんが・・・・。

>システムハンガリアンを使っていて、こういうところがよかったという体験談を聞かせていただければ幸いです。
プログラム経験は短いですが、それでも良ければ・・・。

・使っていて良かった点
変数名の型がすぐに分かる。これによってバグ取りやデバッグが楽になる部分が少しですがありました。
変数名を自分で決める部分を大文字で始めることができる。int型の変数名lengthを宣言する場合iLengthと出来る。

・悪かった点
変数の型を変えるときに、全ての名前を変えなければならなくなってしまう。
個人的な意見ですが、int型の変数名cntを用意するときに、iCntとしつこい感じになってしまう。
タイプする文字が多くなってしまう。

私は、変数名の始まりを大文字で始めれるところに惹かれたので使用してみました。
どうにも、gameCntや、myCharという変数名が気に入らなかったので・・・。

参考になれば良いのですが・・・。

調べてみたのですが、やはり、C++ではローカル変数はCamel記法にした方がいいのでしょうか?
大事なのは記法の一貫性というのは分かっているのですが・・・。

Camel記法は最初の単語のみ小文字で始め、以降単語の先頭文字は大文字です。


519ポイント を手に入れた。

Name: たかぎ [URL]  ..ハッカー(182,707ポイント)   Date: 2010/05/07(金) 00:57   No:51735     
Title: Re:プログラムの変数名の命名    
> 変数名の型がすぐに分かる。これによってバグ取りやデバッグが楽になる部分が少しですがありました。

これが私には理解できないのですが、例えば...

std::map<std::string, std::vector<mydatatype>, mydatatype_compare>

という型があった場合、どんな変数名を付けるのでしょうか?
また...

template <typename charT, typename T>
std::basic_string<charT> integer_to_hexadecimal(T);

という関数テンプレートがあった場合、型Tの仮引数はどんな名前になるのでしょうか?
あるいは、関数内部で使用する変数は?

それとも、システムハンガリアンを使って命名するのは特定の型だけで、それ以外は放置なのでしょうか?

うまい解決方法があれば、例えばPHPのような静的な型がない言語で力を発揮するかもしれないのですが...

> 調べてみたのですが、やはり、C++ではローカル変数はCamel記法にした方がいいのでしょうか? 

私は原則として標準C++ライブラリと同様の記法にしています。
有効範囲が十分狭い変数であれば、一文字変数も普通に使います。


2倍のポイントを手に入れた! 704ポイント を手に入れた。

Name: y  ..入門者(4,647ポイント)   Date: 2010/05/07(金) 01:17   No:51737     
Title: Re:プログラムの変数名の命名    
システムハンガリアンが悪とは言いませんが、「無駄に長い」と思います。
無駄にというのは、だだ長いという意味ではなく、長いだけの意味が無いという意味です。
わかりづらくてすみません。
ただ、汎用的な英単語1つだけを変数名にするのはプログラマの怠慢だなと思うわけです。
要するに、型名が分かったところで、その変数が何の役割を果すのかまでは見えてきません。
ですので、iLengthなんてするよりも、text_lengthのほうが、長くても数倍意味のある名前なんじゃないかと思うんです。
iLengthはもしかするとtext_length(文字列の長さ)なのかもしれないけど、でももしかするとarray_length(配列の長さ)なのかもしれない、となると、型が分かったところで何の解決にもなりませんよね。
もしデバッガがファイル名と行数と変数名まで出してくれても、変数の意味が分からないとデバッグしようが無いんじゃないかと思うわけです。
int型なのは分かるんだけど、でも何の長さなのかわからない。
そういう意味でもシステムなのだと思います。

ただ、メンバ変数の頭にm_をつけるのは有用だと思ってます。
要は使い分けですね。
その使い分け具合を全てのプログラムに一貫してつけることが大事だと思います。


538ポイント を落としてしまった。

Name: たかぎ [URL]  ..ハッカー(182,753ポイント)   Date: 2010/05/07(金) 01:43   No:51739     
Title: Re:プログラムの変数名の命名    
そういえば、アセンブリ言語の場合はシステムハンガリアンは十分役に立ちますね。
アセンブリ言語は変数というものが言語機能として存在しないので、アドレス(実際にはラベル)だけで管理しなければなりません。
そのような状況であれば、ラベルにある程度型情報を埋めこまなければやってられません。
まあそうはいっても、インラインアセンブラで記述する程度のコード片であれば、そこまでやる必要もないでしょうけど。


61ポイント を手に入れた。

Name: にゃ  ..ぴよぴよ(163ポイント)   Date: 2010/05/07(金) 09:12   No:51745     
Title: Re:プログラムの変数名の命名    
 会社のコーディング規約にはハンガリアン表記を取り入れたものがあったが、言語によって不便な事もあってなくしました(^^;。所謂、弱い型付けの言語では、「そもそも、どっかっら出てきたの?」ってのが重要になってきて...
 一方、型付けが厳しい言語では、ハンガリアン表記を取り入れても、そうでなくてもエラーになるものは、エラーになるので...やっぱり止めました(^^;。

 分かりやすければ良い...ってのが現状です。


163ポイント を手に入れた。



Name: 山口  ..ぴよぴよ(865ポイント)   Date: 2010/04/26(月) 15:27   No:51266       
Title: ゲッター/セッターについて    
言語はVC++2005でXPを使っております。

VC++2005にて親ウインドウの特定のボタンを押すと
子ウインドウを呼び出すという処理を行っております。

子ウインドウが呼び出された時には初期値を親から渡し
子ウインドウが閉じられる時は親ウインドウに値を渡すと言った処理を行おうとしております。
調べてみるとゲッター/セッターの考え方を使うと出来ると書いてありました。

閉じるとき親ウインドウに渡すことは出来たのですが
子ウインドウの初期値を設定することが出来ません。
これでは駄目なのでしょうか?

一部省略にて失礼します。
// 親
    // フォームのセット
    AlarmSet^ Set;
    if(Set)    delete Set;
    Set = gcnew Alarm::AlarmSet();
    Set->ShowDialog(this);
    Set->SetSchedule("aa"); // 初期値
    
    // 値の取得
    String^ day = Set->GetDay();
    String^ time = Set->GetTime();
    String^ Schedule = Set->GetSchedule();

// 子
    // ゲッター
    public: String^ GetDay(){
                return dateTimePickerDay->Text;
    }
    public: String^ GetTime(){
                return dateTimePickerTime->Text;
    }
    public: String^ GetSchedule(){
                return textBoxSchedule->Text;
    }

    // セッター
    public: void SetDay(String^ value){
                dateTimePickerDay->Text = value;
    }
    public: void SetTime(String^ value){
                dateTimePickerTime->Text = value;
    }
    public: void SetSchedule(String^ value){
                textBoxSchedule->Text = value;
    }


725ポイント を落としてしまった。


Name: YuO  ..熟練のプログラマー(44,470ポイント)   Date: 2010/04/26(月) 15:58   No:51267     
Title: Re:ゲッター/セッターについて    
Form::ShowDialogは,そのフォームが閉じられるまで処理を戻しません。
初期値の設定は,ShowDialogよりも前におこなってください。
# この例だと,setter/getterよりproperty使うかなぁ……。
MSDN: Form.ShowDialog メソッド () (System.Windows.Forms)
http://msdn.microsoft.com/ja-jp/library/c7ykbedk(VS.80).aspx


155ポイント を手に入れた。

Name: 山口  ..かけだし(1,252ポイント)   Date: 2010/04/26(月) 18:31   No:51268     
Title: Re:ゲッター/セッターについて    
お蔭様で出来ました!!回答ありがとうございます。
又、バグ?を見つけてしまいました。

子ウインドウで登録ボタンを押したら子ウインドウを閉じて
親ウインドウに値を反映すると言ったことを行っています。
しかし登録ボタンを押さなくてAlt+F4等で閉じた際も値の反映が行われてしまいます。

原因はなんとなくわかるのですが解決法がわかりません。

子ウインドウのボタンを押したときには閉じるだけです。
※多分ここと値の取得方法が問題だと思います。
private: System::Void buttonSet_Click(System::Object^  sender, System::EventArgs^  e) {
this->Close();
}

又、今回のソースでは3つの値をやりとりしcheckedListBoxのアイテムに追加しております。

String^ day = Set->GetDay();
String^ time = Set->GetTime();
String^ Schedule = Set->GetSchedule();
String^ Item = day + " " + time + " " + Schedule;
// アイテムの追加
this->checkedListBox1->Items->Add(Item);

この様にしてしまっている為、リストボックス0番のtimeが
知りたいと言った場合の取得が出来なくなってしまっております。
SubString等で切り出しを行ってみたのですが12月等の桁が多い月にはバグが出てしまいます。
これを改善したいのですがどの様にすればよいのでしょうか・・・。


387ポイント を手に入れた。

Name: YuO  ..熟練のプログラマー(44,792ポイント)   Date: 2010/04/27(火) 00:21   No:51277     
Title: Re:ゲッター/セッターについて    
> 子ウインドウで登録ボタンを押したら子ウインドウを閉じて 
> 親ウインドウに値を反映すると言ったことを行っています。 
> しかし登録ボタンを押さなくてAlt+F4等で閉じた際も値の反映が行われてしまいます。 

ダイアログボックスの使い方について説明すると長くなりそうなので,まずはMSDNを。
MSDN: Windows フォームのダイアログ ボックス
http://msdn.microsoft.com/ja-jp/library/2chz8edb(v=VS.80).aspx

というわけで,
・登録ボタンのDialogResultプロパティをDialogResult::OKに設定する
・登録ボタンのClickイベントは削除する
・ShowDialogの戻り値がDialogResult::OKかどうかを判定する
というように変更すればよいと思います。


> この様にしてしまっている為、リストボックス0番のtimeが 
> 知りたいと言った場合の取得が出来なくなってしまっております。 
> SubString等で切り出しを行ってみたのですが12月等の桁が多い月にはバグが出てしまいます。 
> これを改善したいのですがどの様にすればよいのでしょうか・・・。

方法はいくつかあると思いますが……。
・day, time, scheduleを持つクラスをひとつ用意し,ToStringをオーバーロードしてday + " " + time + " " + Scheduleを返すようにしておく
→Itemsからオブジェクトを取得できるので,ばらばらのデータが取得可能。
・String::SplitやRegex::Splitで,day, time, scheduleを正確に分割するようにする
→day/time/scheduleにスペースが入らないのであればString::Split,そうでなければRegex::Split
個人的には前者の方が多いですね。
あとあと楽ですし。


322ポイント を手に入れた。

Name: 山口  ..かけだし(1,403ポイント)   Date: 2010/04/27(火) 02:12   No:51280     
Title: Re:ゲッター/セッターについて    
お忙しい中、ご回答ありがとうございます。

> 子ウインドウで登録ボタンを押したら子ウインドウを閉じて  
> 親ウインドウに値を反映すると言ったことを行っています。  
> しかし登録ボタンを押さなくてAlt+F4等で閉じた際も値の反映が行われてしまいます。  
お陰さまでこちらの問題を解決することが出来ました。
ありがとうございます。

・day, time, scheduleを持つクラスをひとつ用意し,ToStringをオーバーロードしてday + " " + time + " " + Scheduleを返すようにしておく 
→Itemsからオブジェクトを取得できるので,ばらばらのデータが取得可能。 

のやり方で実装しようと思うのですが親ウインドウに
    private: String^ Day;
    private: String^ Time;
    private: String^ Schedule;
    private: String^ Item;
を追加するということでしょうか?
イマイチわからないのですがご教授いただけないでしょうか?


151ポイント を手に入れた。

Name: YuO  ..熟練のプログラマー(45,071ポイント)   Date: 2010/04/27(火) 11:49   No:51286     
Title: Re:ゲッター/セッターについて    
説明するのが面倒なので,コードを書いてしまいます。
以下のクラスを,CheckedListBox::Itemsに追加するようにしてください。
C++/CLIを普段使わないので,コンパイルできることだけのチェックしかしていませんが……。

---- Class1.h
#pragma once

public ref class Class1
{
private:
    ::System::String^ day_;
    ::System::String^ time_;
    ::System::String^ schedule_;

public:
    Class1 (::System::String^ day, ::System::String^ time, ::System::String^ schedule);

    property ::System::String^ Day { ::System::String^ get(); };
    property ::System::String^ Time { ::System::String^ get(); };
    property ::System::String^ Schedule { ::System::String^ get(); };

    virtual ::System::String^ ToString () override;
};

---- Class1.cpp
#include    "stdafx.h"
#include    "Class1.h"

Class1::Class1 (::System::String^ day, ::System::String^ time, ::System::String^ schedule) : day_(day), time_(time), schedule_(schedule)
{
}

::System::String^ Class1::Day::get()
{
    return day_;
}

::System::String^ Class1::Time::get()
{
    return time_;
}

::System::String^ Class1::Schedule::get()
{
    return schedule_;
}

::System::String^ Class1::ToString ()
{
    return ::System::String::Format(L"{0} {1} {2}", day_, time_, schedule_);
}


279ポイント を手に入れた。

Name: 山口  ..かけだし(1,934ポイント)   Date: 2010/04/27(火) 13:01   No:51287     
Title: Re:ゲッター/セッターについて    
お忙しい中サンプルソースまでありがとうございます。

頂いたソースを追加し

親ウインドウで#include "Class1.h"としました。
>>以下のクラスを,CheckedListBox::Itemsに追加するようにしてください。 
これはどういう意味でしょうか?
又、ソースでやっていることはわかるのですが使い方がわかりません・・・。

             // 登録ボタン選択時
    private: System::Void buttonSet_Click(System::Object^  sender, System::EventArgs^  e) {
                 
                 // フォームのセット
                 AlarmSet^ Set;
                 if(Set)    delete Set;
                 Set = gcnew Alarm::AlarmSet();
                 
                 if(Set->ShowDialog(this) == System::Windows::Forms::DialogResult::OK){
                     int Num = this->checkedListBox1->Items->Count;
                     // 値の取得
                     String^ day = Set->GetDay(); 
//                     Day[0] = "a";//Set->GetDay();
                     String^ time = Set->GetTime();
                     String^ Schedule = Set->GetSchedule();
                     String^ Item = day + " " + time + " " + Schedule;

                     // アイテムの追加
                     this->checkedListBox1->Items->Add(Item);
                 }
            }


現在ボタンを選択した時は上記の様なソースになっております。
これをどのように改編すればよいのでしょうか・・。


531ポイント を手に入れた。

Name: 山口  ..かけだし(1,980ポイント)   Date: 2010/04/27(火) 23:52   No:51307     
Title: Re:ゲッター/セッターについて    
色々なサイトを見てみたのですがやはり追加するという意味がわかりません・・・。
どうかご回答頂けないでしょうか・・・?


46ポイント を手に入れた。

Name: YuO  ..熟練のプログラマー(45,435ポイント)   Date: 2010/04/28(水) 00:43   No:51308     
Title: Re:ゲッター/セッターについて    
eratta at [51266]
s/以下のクラス/以下のクラスのインスタンス/


> 色々なサイトを見てみたのですがやはり追加するという意味がわかりません・・・。

具体的に,どこを見たのでしょうか。
また,具体的に何をしましたか。

少なくとも,
MSDN: CheckedListBox.Items プロパティ (System.Windows.Forms)
http://msdn.microsoft.com/ja-jp/library/system.windows.forms.checkedlistbox.items(v=VS.80).aspx
MSDN: CheckedListBox.ObjectCollection クラス (System.Windows.Forms)
http://msdn.microsoft.com/ja-jp/library/system.windows.forms.checkedlistbox.objectcollection(v=VS.80).aspx
MSDN: ListBox.ObjectCollection.Add メソッド (System.Windows.Forms)
http://msdn.microsoft.com/ja-jp/library/system.windows.forms.listbox.objectcollection.add(v=VS.80).aspx
のあたりは読んだのですよね。
# 山口さんのコードで使われているプロパティ・クラス・メソッドのリファレンスですが。


364ポイント を手に入れた。

Name: 山口  ..かけだし(2,189ポイント)   Date: 2010/04/28(水) 14:11   No:51313     
Title: Re:ゲッター/セッターについて    
回答ありがとうございます。
URLもありがとうございます。
MSDN: CheckedListBox.Items プロパティ (System.Windows.Forms) 等は閲覧していたのですが
これのどこでクラスを読み込んでいるのでしょうか?

閲覧したのは
http://dobon.net/
等です。

this->checkedListBox1->Items->Add("あああ");
のようにすればitemsの要素に「あああ」という文字列を追加できることは理解しております。

別のページにクラスを作りそれを要素に追加するということを行ったことがないので理解できませんでした。
どうかご教授いただけないでしょうか?


209ポイント を手に入れた。

Name: 山口  ..かけだし(2,249ポイント)   Date: 2010/04/29(木) 21:33   No:51345     
Title: Re:ゲッター/セッターについて    
URLを張って頂いたのですがやはりわかりません・・・。
ご教授いただけないでしょうか?


2倍のポイントを手に入れた! 60ポイント を手に入れた。

Name: 山口  ..入門者(2,722ポイント)   Date: 2010/05/01(土) 06:13   No:51400     
Title: Re:ゲッター/セッターについて    
すみません・・・。
色々と試してみたのですが上手くいきません。
item等にクラスを追加することをしたことがなかったのでしっくりきません・・・。

             // 登録ボタン選択時
    private: System::Void buttonSet_Click(System::Object^  sender, System::EventArgs^  e) {
                 
                 // フォームのセット
                 AlarmSet^ Set;
                 if(Set)    delete Set;
                 Set = gcnew Alarm::AlarmSet();
                 
                 if(Set->ShowDialog(this) == System::Windows::Forms::DialogResult::OK){
                     Class1::Class1^ val = gcnew class1;
                     //val->

                     /*
                     int Num = this->checkedListBox1->Items->Count;
                     // 値の取得
                     String^ day = Set->GetDay(); 
//                     Day[0] = "a";//Set->GetDay();
                     String^ time = Set->GetTime();
                     String^ Schedule = Set->GetSchedule();
                     String^ Item = day + " " + time + " " + Schedule;

                     // アイテムの追加
                     this->checkedListBox1->Items->Add(Item);
                     */
                 }
            }


473ポイント を手に入れた。

Name: YuO  ..熟練のプログラマー(45,530ポイント)   Date: 2010/05/02(日) 21:02   No:51498     
Title: Re:ゲッター/セッターについて    
ListBox::ObjectCollection::Addの引数はSystem::Object^。
つまり,managedなオブジェクトであればなんでも引数にとります。

なので,
this->checkedListBox1->Items->Add(val);
とすれば,(いかなる型であれ)valがポイントするオブジェクトをListBoxの要素に追加できます。


95ポイント を手に入れた。

Name: 山口  ..入門者(3,021ポイント)   Date: 2010/05/04(火) 09:11   No:51580     
Title: Re:ゲッター/セッターについて    
何度もご回答ありがとうございます。
本当に助かります。

実行すると
1>〜\alarm\Form1.h(250) : error C2065: 'val' : 定義されていない識別子です。
1>〜\デスクトップ\alarm\Form1.h(250) : error C2597: 静的でないメンバ 'Class1::day_' への参照が正しくありません。
1>〜\デスクトップ\alarm\Form1.h(250) : error C2061: 構文エラー : 識別子 'class1'

というエラーが出てしまいます。
何故なのでしょうか。


仕様概要
・親と子のウインドウがあります。
・親のボタンをクリックすると子ウインドウが開きます。
・子ウインドウには3つのテキストボックスがあり登録を押すと
 親ウインドウ(リストボックス)にそれぞれの値が渡されます。

編集ボタンを押したときに子ウインドウに反映したり保存する時にCSVで吐き出す為に
親ウインドウで3つの値をそれぞれ分割して管理したいです。



299ポイント を手に入れた。

Name: 山口  ..入門者(3,072ポイント)   Date: 2010/05/06(木) 05:20   No:51677     
Title: Re:ゲッター/セッターについて    
色々試してみたのですがやはり上手くいきません・・・。
VC++はこちらで聞くのはまずいのでしょうか?
まずいのでしたら締めさせて頂きます。


51ポイント を手に入れた。

Name: 山口  ..入門者(3,137ポイント)   Date: 2010/05/07(金) 06:10   No:51742     
Title: Re:ゲッター/セッターについて    
必要な機能だけのものを作り挑戦してみてはいるのですが
クラスを追加するということが理解できません。

プロジェクトを添付させて頂きます。


65ポイント を手に入れた。



Name: 愛川  ..かけだし(1,597ポイント)   Date: 2010/05/07(金) 00:23   No:51731       
Title: 1〜50までの数字をかける    
お久しぶりですが、質問させていただきます。
1×2×3×…×50の計算を行うプログラムを作っています。
プログラムは以下のようになり、エラーも出ないのですが、
実行すると「0」が出力されてしまいます。
どこか間違っている点、直したほうが良い点がありましたら教えていただきたいです。
よろしくお願いいたします。
OSはWindows XP、Visual C++を使用しています。

#include<stdio.h>
int main(void){
    int s = 1, c;
    for(c = 1; c < 51; c++){
        s = s * c;
    }
        printf("%d\n", s);
        return(0);
}
 編集済み


255ポイント を手に入れた。


Name: たかぎ [URL]  ..ハッカー(182,003ポイント)   Date: 2010/05/07(金) 00:43   No:51733     
Title: Re:1〜50までの数字をかける    
処理系不明なので正確なことはいえませんが...

50!の計算結果を格納するには、ふつうint型では役不足です。
double型やlong double型なら表現範囲としてはOKですが、ふつう有効桁が足りません。
有効桁数をどう考えるかにもよりますが、多倍長演算が必要になると思います。

ところで、50!と決まっているのであれば、これは実質的に定数ですね。
それであれば、机上で計算して、文字列を出力するだけにするのもひとつの手です。
というか、静的に値が求まるのであれば、そうすべきです。


213ポイント を落としてしまった。

Name: 愛川  ..かけだし(1,621ポイント)   Date: 2010/05/07(金) 00:50   No:51734 解決!     
Title: Re:1〜50までの数字をかける    
ありがとうございます。
double型にしたらできました。 編集済み


24ポイント を手に入れた。

Name: たかぎ [URL]  ..ハッカー(182,692ポイント)   Date: 2010/05/07(金) 00:58   No:51736     
Title: Re:1〜50までの数字をかける    
> double型にしたらできました。

本当にそれでいいんですか?


15ポイント を落としてしまった。



Name: ft  ..上級者(15,277ポイント)   Date: 2010/05/06(木) 17:02   No:51699       
Title: ゆっくりと目標値に近づく動作    
前回自機を中心に円を描いて動くオプションについて質問させていただきました。

次に自機とオプションの角度を、100カウントくらいかけて自機とボスの角度と等しくなるようにしたいのですがどうすればいいでしょうか?
現在、下のような感じにしているのですが、これですとオプションは常にボス方向に向いてしまっているので、
自機が動いた後追従してゆっくり角度が合うようにしたいのです。
ボスは座標(240,136)に居るという設定でやっています
void graph_option(){
     float ch_boss;//自機とボスの角度
     float ch_option;//自機とオプションの角度
     ch_boss=atan2f(-ch.y+136,-ch.x+240);//自機とボスの角度(240,136)
     ch_option=atan2f(-ch.y+option_y,-ch.x+option_x-);//自機とオプションの角度
     option_x=cosf(ch_boss)*35+ch.x;
     option_y=sinf(ch_boss)*35+ch.y;
     DrawRotaGraphF(option_x, option_y, 0.45f, 0,img_ch_photo[0], 1,0 );
}


368ポイント を手に入れた。


Name: Justy  ..伝説なるハッカー(528,538ポイント)   Date: 2010/05/06(木) 17:22   No:51700     
Title: Re:ゆっくりと目標値に近づく動作    
 目標の角度から今の角度を引いて、その差の角度に係数をかけてその角度を今の角度に足して
それを新しい今の角度にする、とか。

例)目標が 45度で、自機が 20度なら、差は 25度。
 25度に係数 0.1をかけると 2.5度で、自機の角度に足して 22.5度を今の角度にする


128ポイント を手に入れた。

Name: ft  ..上級者(15,400ポイント)   Date: 2010/05/06(木) 18:12   No:51703     
Title: Re:ゆっくりと目標値に近づく動作    
座標(240,136)の右あたりでオプションの動作がおかしくなってしまいます。
ちょっと動くと自機を中心にぐるっと回ってしまう感じです。
-π、π付近に関する問題だと思うのですが、自機-ボス、自機-オプション、角度差それぞれどのような修正をかければいいのでしょうか?


123ポイント を手に入れた。

Name: Justy  ..伝説なるハッカー(528,620ポイント)   Date: 2010/05/06(木) 18:23   No:51705     
Title: Re:ゆっくりと目標値に近づく動作    
>座標(240,136)の右あたりでオプション
 せめて対象と自機との角度とか、係数とかその他詳細情報なしではよくわからないですが、
なんだか Déjà vuな気がします。

C言語何でも質問掲示板 - ホーミング弾について
http://www.play21.jp/board/formz.cgi?action=res&resno=45515&page=&lognum=140&id=dixq&rln=45550


82ポイント を手に入れた。

Name: ft  ..上級者(15,759ポイント)   Date: 2010/05/06(木) 19:43   No:51712     
Title: Re:ゆっくりと目標値に近づく動作    
位置はこちらから見て座標(240,136)の右側で起こります。
係数を大きくすると永遠と回ってしまうのですが、
小さくしても回り続けないにしても1周はしてしまいます。
前回は弾だけの角度でしたが、今回は複数の角度を扱うためどうしたらいいのでしょうか?
現在はこんな感じです。
void graph_option(){
    float ch_boss;//自機とボスの角度
    float ch_option;//自機とオプションの角度
    float sa;//ch_bossとch_optionの差

        ch_boss=atan2f(-ch.y+136,-ch.x+240);//自機とボスの角度
        ch_option=atan2f(-ch.y+option_y,-ch.x+option_x);//自機とオプションの角度
    sa=ch_boss-ch_option;

    ch_option=ch_option+0.04f*sa;//係数を0.05にするとクルクル回り続けます
 
    option_x=COS(ch_option)*35+ch.x+16;//現在の位置x
    option_y=SIN(ch_option)*35+ch.y+10;//現在の位置y

    DrawRotaGraphF(option_x, option_y, 0.45f, 0,img_ch_photo[0], 1,0 );
}


359ポイント を手に入れた。

Name: たいちう  ..比類無きプログラマー(79,419ポイント)   Date: 2010/05/06(木) 22:20   No:51719     
Title: Re:ゆっくりと目標値に近づく動作    
> option_x=COS(ch_option)*35+ch.x+16;//現在の位置x
> option_y=SIN(ch_option)*35+ch.y+10;//現在の位置y

16とか10とかが不要に見えますが。
これだけが原因ではなさそうですが。

ちなみに、係数を1.0にすると、ピタッとボスの方を向きますか?
それができないと、前提が覆ります。


47ポイント を手に入れた。

Name: Justy  ..伝説なるハッカー(528,791ポイント)   Date: 2010/05/06(木) 22:41   No:51724     
Title: Re:ゆっくりと目標値に近づく動作    
 実行できないので目推測ですが、なんとなくですがわかったかもしれません。
 saの角度を差で求めた後、計数を掛ける前に

        const float pi = static_cast<float>(PHI);
        if(sa > pi)     sa -= pi * 2; 
        else 
        if(sa < -pi)    sa += pi * 2;

としたらどうなりますか?
 編集済み


171ポイント を手に入れた。

Name: ft  ..上級者(15,929ポイント)   Date: 2010/05/06(木) 23:33   No:51729 解決!     
Title: Re:ゆっくりと目標値に近づく動作    
たいちうさん
画像サイズが32*20となっており、そのままですとちょっとズレてしまうのでその補正分です。

Justyさん
できました!
あ、なるほど、二者の位置関係上結果としてsaに180度付近の影響が出てくるのですか。
こうやって改めて眺めてみますと状況がよくわかります。
自分で辿り着けないのがダメダメですが^^;
どうもありがとうございました。


170ポイント を手に入れた。



Name: pool  ..ぴよぴよ(132ポイント)   Date: 2010/05/01(土) 00:57   No:51399       
Title: ファイル書き込み    
課題1.
ファイルを読み込んで、幅、高さ、を構造体に格納せよ。
課題2.
ファイルを読み込んで、幅、高さ、を構造体に格納せよ。

よろしくお願いします。 編集済み


132ポイント を手に入れた。


Name: ookami  ..初心者(7,872ポイント)   Date: 2010/05/02(日) 08:03   No:51457     
Title: Re:pgmファイルの読み込み、別ファイルへの書き込み    
PGMファイルって初めて知りました。この掲示板を見ていると本当に勉強になります^^

以下のサイトが参考になるかもしれません。
http://www.mm2d.net/c/c-09.shtml

> /*ここからよくわかりません*/ 
>  value.x=&data; 
>  *value.x=data; 

ここで、確保していないメモリ領域に値を書き込んでしまっているようです。「2次元配列の確保の仕方は以下のような感じ」を応用して、1次元配列を確保してはいかがでしょう。


134ポイント を手に入れた。

Name: pool  ..ぴよぴよ(133ポイント)   Date: 2010/05/02(日) 15:35   No:51475     
Title: Re:pgmファイルの読み込み、別ファイルへの書き込み    
ご回答有難うございます。


 編集済み


1ポイント を手に入れた。

Name: ookami  ..初心者(8,004ポイント)   Date: 2010/05/02(日) 16:16   No:51479     
Title: Re:pgmファイルの読み込み、別ファイルへの書き込み    
あら、てっきり「2次元配列の確保の仕方は以下のような感じ」はご自分で書いたものかと思っておりました。

PC上にメモリは膨大にありますが、プログラムはそのメモリのどこでも自由に使えるというわけではありません。処理系に「メモリをxxバイト確保せよ」と命令して、確保されたメモリだけを使えるのです。

http://www9.plala.or.jp/sgwr-t/lib/malloc.html
↑この辺が参考になるかと思います。

あと、
  /*ここからよくわかりません*/
というのは、何かコンパイルエラーや実行時エラーがあったということでしょうか。あればそれも書き込んでもらえれば、回答が集まりやすいと思いますよ。


132ポイント を手に入れた。

Name: pool  ..ぴよぴよ(138ポイント)   Date: 2010/05/02(日) 16:41   No:51483     
Title: 無題    
説明不足でした。すいません。これは出された問題をそのまま載せました。 編集済み

5ポイント を手に入れた。

Name: ookami  ..初心者(8,567ポイント)   Date: 2010/05/02(日) 19:38   No:51493     
Title: Re:pgmファイルの読み込み、別ファイルへの書き込み    
課題に書かれている
  gi->x=(float **)malloc(gi->height*sizeof(float *)); 
の部分を理解する必要がありますね。

例えば、
  float arr[128];
  :
  :
と、
  float *arr;
  arr=(float*)malloc(128*sizeof(float));
  :
  :
  free(arr);
は、ほぼ同じ意味になります。ここまではよろしいですか?これを踏まえ、


  /*ここからよくわかりません*/ 
  value.x=&data; 
  *value.x=data; 
  size=width*height; 
  for(i=0;i<size;i++){ 
   fscanf(fp,"%f",&data);  
   printf("*x : %f\n", *value.x); 
  } 

の部分を、

size=width*height; 
value.x=(float*)malloc(size*sizeof(float));
for(i=0;i<size;i++){
    fscanf(fp,"%f",&data);
    value.x[i]=data;
    printf("*x : %f\n",value.x[i]);

こんな感じ(未確認)にします。ここまではどうでしょう?
元のソースのどこが間違っているか、というのが何とも説明しづらいのですが..


421ポイント を手に入れた。

Name: pool  ..ぴよぴよ(168ポイント)   Date: 2010/05/06(木) 22:49   No:51726 解決!     
Title: 無題    
>ookamiさん
丁寧に教えて頂きありがとうございました! 編集済み


30ポイント を手に入れた。



Name: あさひ  ..ぴよぴよ(108ポイント)   Date: 2010/05/06(木) 22:14   No:51718       
Title: Sleep    
ユーザーに数字を入力してもらい
その秒数をSleepするというプログラムを作っています。

scanf("%d",&slp);
while(1)
{
printf("%d秒Sleep\n",slp);
Sleep(slp*1000);
}

1と入力すれば1秒スリープし、
10と入力すれば10秒スリープします。
ここまではいいのですが、
仮に0.5秒スリープさせたい場合、
0.5入力します。
ですが0.5と入力したときと0と入力したとき、
どちらもまったく変わらないような気がします。

プログラムの速さで0秒(スリープなし)だとかなり早いと思うので
0.5秒スリープさせたときとは変化があると思うのですが・・・

0.5秒など、小数単位でスリープさせることはできないのでしょうか?

それとも私の目がおかしく、ちゃんと0.5秒スリープされてるのでしょうか?


108ポイント を手に入れた。


Name: たかぎ [URL]  ..ハッカー(182,210ポイント)   Date: 2010/05/06(木) 22:22   No:51721     
Title: Re:Sleep    
処理系不明なのでSleepの仕様がわかりませんが...

0.5と入力したのを受け付けるには、浮動小数点型の変数で受けるか、文字列として受けるかしないとダメでしょう。


17ポイント を手に入れた。

Name: あさひ  ..ぴよぴよ(156ポイント)   Date: 2010/05/06(木) 22:41   No:51725 解決!     
Title: Re:Sleep    
おっと・・・
すみません忘れてました。
浮動小数点型にする必要がありましたね。

ふつうにintでやってました。

ありがとうございます。


48ポイント を手に入れた。



Name: dic  ..熟練のプログラマー(64,881ポイント)   Date: 2010/04/29(木) 15:50   No:51337       
Title: LPCWSTR型への変換    
ある関数を使うとき、引数にLPCWSTR型を使う関数があります
VC++6ではこれでコンパイル通ってたのですが
VC++2010 Express だとコンパイルが通らないです
char buf[1024]; の変数をどうやって LPCWSTR型に変換するのでしょうか?

というか、LPCWSTR型がよくわかってないです

#include "stdafx.h"
#include <Windows.h>

int _tmain(int argc, _TCHAR* argv[])
{
    char    buf[1024] = "test";
    LPCWSTR    buf2[1024];

    buf2 = buf; // コンパイルエラー

    return 0;
}
delete_ok.cpp(12): error C2440: '=' : 'char [1024]' から 'LPCWSTR [1024]' に変換できません。
          この変換が可能なコンテキストはありません。



2倍のポイントを手に入れた! 588ポイント を手に入れた。


Name: Blue  ..中級者(12,451ポイント)   Date: 2010/04/29(木) 16:25   No:51338     
Title: Re:LPCWSTR型への変換    
>VC++6ではこれでコンパイル通ってたのですが
本当に?

>LPCWSTR    buf2[1024];
って(FARはとりあえず無視すると)
const wchar_t* buf2[1024];
ということなのですが、

>buf2 = buf;
から
const wchar_t**(const wchar_t*[1024]) に char*(char[1024]) の値を入れたいということなのでしょうか?
(cont char**(LPCSTR*) に char* 入れるのも無理だけど。)

char buf[1024]
から
wchar_t buf2[1024]
ということなら変換方法はいろいろあるのですけど。


197ポイント を手に入れた。

Name: dic  ..熟練のプログラマー(64,963ポイント)   Date: 2010/04/29(木) 16:48   No:51339 解決!     
Title: Re:LPCWSTR型への変換    
色々調べてみました
wchar_tも出てきましたが以下のようにして理解できました

#include "stdafx.h"
#include <Windows.h>

int _tmain(int argc, _TCHAR* argv[])
{

    TCHAR    buf[1024] = _T("test");
    LPCWSTR    buf2;

    buf2 = buf;

    return 0;
}


 編集済み


82ポイント を手に入れた。

Name: dic  ..熟練のプログラマー(65,181ポイント)   Date: 2010/04/29(木) 17:14   No:51340     
Title: Re:LPCWSTR型への変換    
解決押したのですが、またつまづいたので連続して質問させてください
#include "stdafx.h"
#include <Windows.h>

int _tmain(int argc, _TCHAR* argv[])
{
    TCHAR    buf[1024];

    wcscpy_s( buf, sizeof(buf), _T("test") );

    return 0;
}


とコンパイル通るところまではいったのですが、
wcscpy_s(.. のところで実行エラー(アクセス違反)が起きます
wcscpy_s()関数は、どのようにして使うのでしょうか?
サンプルがあると助かります

環境はVC++2010 Expressです
UNICODE使用です


218ポイント を手に入れた。

Name: dic  ..熟練のプログラマー(65,076ポイント)   Date: 2010/04/29(木) 17:49   No:51341     
Title: Re:LPCWSTR型への変換    
#include "stdafx.h"
#include <Windows.h>

int _tmain(int argc, _TCHAR* argv[])
{
    TCHAR    *p;

    p = _wcsdup( _T("test") );

    free(p);

    return 0;
}


できました
失礼しました


105ポイント を落としてしまった。

Name: softya [URL]  ..ハッカー(152,822ポイント)   Date: 2010/04/29(木) 17:56   No:51342     
Title: Re:LPCWSTR型への変換    
問題が2つほどあります。
まず、tcharを使って書くなら統一してください。
wcscpy_sでは無く、_tcscpy_sにしてください。これでユニコードとマルチバイト両対応になります。
あとは、wcscpy_s/_tcscpy_sの第2パラメータはバイト数ではなく文字数を入れてください。ユニコード時のTCHARは2バイトですので、sizeof(buf)は2048になってしまいます。

以下に修正したものを書いときますね。

#include <Windows.h>
#include <tchar.h>

#define TCHAR_SIZE(buf) (sizeof(buf)/sizeof(TCHAR))

int _tmain(int argc, _TCHAR* argv[])
{
    TCHAR    buf[1024];

    _tcscpy_s( buf, TCHAR_SIZE(buf), _T("test") );

    return 0;
}


329ポイント を手に入れた。

Name: softya [URL]  ..ハッカー(152,861ポイント)   Date: 2010/04/29(木) 17:58   No:51343     
Title: Re:LPCWSTR型への変換    
>p = _wcsdup( _T("test") );
よく分からないからといって、_wcsdupで誤魔化すのは後で困ることになりますよ。


39ポイント を手に入れた。

Name: dic  ..熟練のプログラマー(65,240ポイント)   Date: 2010/04/29(木) 21:24   No:51344     
Title: Re:LPCWSTR型への変換    
errno_t wcscpy_s(
   wchar_t *strDestination,
   size_t numberOfElements,
   const wchar_t *strSource 
);
wcscpy_s,_tcscpy_s の第2引数は、配列のサイズではなくて 要素数を渡すのですね Elements は要素数ですね 安易にsizeof(buf); としてたので、実行時エラーがでてました 原因がわかりました
#include "stdafx.h"
#include <Windows.h>

int _tmain(int argc, _TCHAR* argv[])
{
    TCHAR    *p;

    p = _wcsdup( _T("test") );

    free(p);

    TCHAR    buf[1024];
    _tcscpy_s( buf, (sizeof(buf)/sizeof(TCHAR)), _T("_tcscpy_s") );

    wcscpy_s( buf, (sizeof(buf)/sizeof(TCHAR)), _T("wcscpy_s") );
    return 0;
}

とやって、_tcscpy_s, wcscpy_s 両方とも動き、デバッカでも
bufに指定した文字が代入されていることが確認できました


あと、統一してくださいとあるんですが、
http://msdn.microsoft.com/ja-jp/library/td1esda9(VS.80).aspx
によると
tchar.hのルーチンは_tcscpy_s
_UNICODE が定義されている場合 wcscpy_s
とありますが、統一というと、どういうことなのでしょうか?
 編集済み


164ポイント を手に入れた。

Name: softya [URL]  ..ハッカー(153,074ポイント)   Date: 2010/04/29(木) 21:40   No:51346     
Title: Re:LPCWSTR型への変換    
>とありますが、統一というと、どういうことなのでしょうか? 

ユニコードでコンパイルするとOKだと思いますが、試しにマルチバイトにオプションを変えてみると分かります。
tchar.hは、そもそもどちらでもコンパイル出来るようにしたマクロですので。
そこにwchar限定の関数を書いてしまうのは、折角の切り替える仕組みを台無しにします。
だったら全部、wcharで書くべきだと思いますよ。

参照

http://msdn.microsoft.com/ja-jp/library/c426s321%28VS.80%29.aspx


213ポイント を手に入れた。

Name: hoge  ..入門者(3,826ポイント)   Date: 2010/04/29(木) 23:01   No:51348     
Title: Re:LPCWSTR型への変換    
 C/C+には「アスキー文字(半角英数等)」と「ワイド文字(unicodeによる文字・半角全角を含む)」
という二種類の文字型があります。w の付く文字変数や文字列操作関数などは皆、ワイド文字用です。
 「char と wchar_t」
 「strlen と wcslen」
 「std::string と std::wstring」
 「MessageBoxA と MessageBoxW」
と言った感じです。
 基本的にこの両者は混在させるべきではありません。
 char を使うなら全て char, wchar_t を使うなら全て wchar_t にしないと、
文字列処理関数が正常に動作しない可能性があります。

 VC++ の TCHAR や LPTSTR などはtypedef、_tcscpy_s や_tcsclen などはマクロになっていて、
コンパイルスイッチでアスキー用の strlen と ワイド文字の wcslen などと切り変えられる
ようになっています。

tchar.h を見ると分かりますが、こういう感じになってます。

 #ifdef  _UNICODE
 typedef wchar_t     TCHAR;
 #define _tcslen         wcslen
 #define _tcscpy_s       wcscpy_s
 #else
 typedef char            TCHAR;
 #define _tcsclen        strlen
 #define _tcscpy_s   strcpy_s
 #endif

 T系の型や関数を使用することで、二つの文字体系を _UNICODE 定義の有無で切り替えられます。
 W系型や関数と、T系の型や関数をソースに混在させると、_UNICODEマクロが切り替わった
とき一部だけがその切り替えに対応されず、問題を起こす可能性があります。

 問題を起こさないためには、
  ・T系だけで統一する。
  ・W系だけで統一する。
  ・アスキーだけで統一する。
 のどれかにするのが良いという事になります。

 ちなみに VisualStudioの場合、Win32プロジェクト等をウィザードを使って生成すると、
コンパイルオプションに _UNICODE が設定されますのでデフォルトではT系=W系になっています。
「空のプロジェクト」などでウィザードを使わなずプロジェクトを生成すると、_UNICODEは設定されず
T系=アスキーになります。
 プロジェクトのプロパティ -> 構成プロパティ -> C/C++ -> コマンドライン を選択すると
コンパイルオプションが確認できます。
(「空のプロジェクト」の場合一度ビルドしてからでないとこの項目は出てこないかも)

補足として、
charは文字を表現する以外に、1バイトデータを表現するために使われることもあります。
この用途に限っては、TやWと関係なくいつでも使って問題ありません。
VCではBYTE という型も定義されているので、こちらを使うのも正しい選択です。
 編集済み


527ポイント を落としてしまった。

Name: たかぎ [URL]  ..ハッカー(178,395ポイント)   Date: 2010/04/30(金) 00:46   No:51353     
Title: Re:LPCWSTR型への変換    
参考までに、Visual C++ 2010ということであれば...

扱うことができる文字の表現方法は少なくとも5種類あります。

1. ナロー文字。ASCIIなど、1バイトで表現出来る文字
2. 多バイト文字。シフトJISなど、2バイト以上で1文字を表す。
3. ワイド文字。wchar_t型を使用し、UTF-16で表現
4. char16_t型を使用し、UCS-2で表現
5. char32_t型を使用し、UCS-4で表現

C++0xを部分的にサポートしたので、この辺はかなり複雑になりました。


22ポイント を手に入れた。

Name: dic  ..熟練のプログラマー(65,284ポイント)   Date: 2010/04/30(金) 21:53   No:51383     
Title: Re:LPCWSTR型への変換    
詳しい解説をありがとうございます
時間がとれないので、コピーしてじっくり読ませてもらいます


44ポイント を手に入れた。

Name: dic  ..熟練のプログラマー(65,553ポイント)   Date: 2010/05/03(月) 08:49   No:51524     
Title: Re:LPCWSTR型への変換    
だいぶ理解できました
ちょっと今の段階では統一しながらプログラムを組むのは難しいと思ってます

また、別の問題がおきました

#include "stdafx.h"
#include <stdio.h>
#include <tchar.h>


int _tmain(int argc, _TCHAR* argv[])
{
    int    i;

    TCHAR    buf[1024];

    for( i=0; i<10; i++ )
    {
        _tprintf_s( buf, _T("test - %d\n"), i );
        _tprintf_s( buf );
    }

    return 0;
}


とプログラムを組んだのですが
buf に
test - 0
test - 1
test - 2 
test - 3 
test - 4 
test - 5 
test - 6 
test - 7 
test - 8 
test - 9 
と入れていきたいのですが、うまくいきません
どのように処理すればいいのでしょうか?


269ポイント を手に入れた。

Name: たいちう  ..比類無きプログラマー(78,957ポイント)   Date: 2010/05/03(月) 09:09   No:51525     
Title: Re:LPCWSTR型への変換    
sprintfのセキュリティ強化版のTCHAR系をお望みですか?
でないなら、質問の意図が判りません。

_stprintf_s
http://msdn.microsoft.com/ja-jp/library/ce3zzk1k%28VS.80%29.aspx


45ポイント を手に入れた。

Name: dic  ..熟練のプログラマー(65,744ポイント)   Date: 2010/05/03(月) 09:20   No:51527     
Title: Re:LPCWSTR型への変換    
#include "stdafx.h"
#include <stdio.h>
#include <tchar.h>


int _tmain(int argc, _TCHAR* argv[])
{
    int    i;

    //    char型はコンパイルできる
    char    hoge[1024];
    for( i=0; i<10; i++ )
    {
        sprintf( hoge, "hoge-%d\n", i );
        printf( hoge );
    }


    //    TCHAR型は代入できない
    TCHAR    buf[1024];
    for( i=0; i<10; i++ )
    {
        _tprintf_s( buf, _T("test-%d\n"), i );
        _tprintf_s( buf );
    }

    return 0;
}


とchar型への代入はできるのですが
TCHAR型の場合の代入方法がわからないのです
UNICODE定義しているので2バイトの場合だと推測するのですが
この時に使用する関数がわかりません


191ポイント を手に入れた。

Name: dic  ..熟練のプログラマー(65,755ポイント)   Date: 2010/05/03(月) 09:25   No:51528     
Title: Re:LPCWSTR型への変換    
swprintf_s関数ですね
わかりました
ありがとうございます


11ポイント を手に入れた。

Name: dic  ..熟練のプログラマー(66,887ポイント)   Date: 2010/05/06(木) 19:40   No:51711     
Title: Re:LPCWSTR型への変換    
遅くなりましたが
VC++6では UNICODE 定義されていないので
CreateDirectryA
のように ...A
の方にマクロ展開しているようですね

VC++2010 では
CreateDirectoryW
に展開されますので、型が一致しないようです


65ポイント を手に入れた。



Name: ゆう  ..ぴよぴよ(581ポイント)   Date: 2010/05/06(木) 05:08   No:51676       
Title: 画面解像度の変更    
初めてお邪魔します。
DXライブラリ講座、利用させていただいてます。

SetGraphMode()を使用して画面解像度を変更する処理なのですが、
800×600のフルスクリーンモードを指定した場合、なぜか挙動がおかしくなってしまいます。
例として、以下のようなコードを実行した場合、真っ暗な画面がフルスクリーンで表示されるのみで、
描画したはずの円は表示されません。
解像度が640×480や1024×768の場合は問題なく表示されますし、800×600でもウィンドウモードの時には表示されています。
モニタも、もちろん800×600の解像度に対応しています。

なぜこのようなことになるのか、もしお心当たりがありましたらお願いします。


[追加補足]
何度か試してるうちに、フルスクリーンの場合他の解像度でも表示されなくなってしまいました。
何か根本的なことを勘違いしてるのでしょうか・・・。


#include "DxLib.h"

int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow){
    
    if( DxLib_Init() == -1 ){return -1;}          // DXライブラリ初期化処理
    if (SetGraphMode(800, 600, 32)==-1) {return -1;}    // 画面解像度変更

    DrawCircle(100, 100, 30, GetColor(255, 255, 255), 1); //円を描画

    WaitKey() ;                      // キー入力待ち
    DxLib_End() ;                     // DXライブラリ使用の終了処理

    return 0 ;                          // ソフトの終了 
編集済み


348ポイント を手に入れた。


Name: Ma  ..比類無きプログラマー(94,640ポイント)   Date: 2010/05/06(木) 06:43   No:51679     
Title: Re:画面解像度の変更    
表描画、かつフルスクリーンだとそんな弊害があったようななかったような・・・。
裏面描画に指定して、更新をしてみてください。
もしかしたら直るかも。


38ポイント を落としてしまった。

Name: ゆう  ..かけだし(1,361ポイント)   Date: 2010/05/06(木) 07:19   No:51680     
Title: Re:画面解像度の変更    
レスありがとうございます。
以下のようなコードに変更してみましたが、
結果は変らず、円は表示されませんでした。

SetGraphMode()の行を抜けば表示されるのですが、
それだと解像度が640×480で固定になってしまいます。
出来れば800×600を使いたいのですが・・・。

コードの問題ではなく、他の部分で何か問題があるのでしょうか。


#include "DxLib.h" 

int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow){ 
     
        if( DxLib_Init() == -1 ){return -1;}                    // DXライブラリ初期化処理 
        if (SetGraphMode(800, 600, 32)==-1) {return -1;}         // 画面解像度変更 
    
        SetDrawScreen( DX_SCREEN_BACK ) ;        //※ この行を追加 ※

        DrawCircle(100, 100, 30, GetColor(255, 255, 255), 1); //円を描画 

        ScreenFlip() ;                                         //※ この行を追加 ※

        WaitKey() ;                                            // キー入力待ち 
        DxLib_End() ;                                        // DXライブラリ使用の終了処理 

        return 0 ;                                              // ソフトの終了  



2倍のポイントを手に入れた! 780ポイント を手に入れた。

Name: Dixq (管理人) [URL]  ..ウィザード(1,183,578ポイント)   Date: 2010/05/06(木) 07:47   No:51681     
Title: Re:画面解像度の変更    
おそらくこのままのコードで制作を進めていくことはないと思います。
ゲームプログラミングの館の13章で試してみてください。

http://dixq.net/g/13.html


26ポイント を手に入れた。

Name: ゆう  ..かけだし(1,545ポイント)   Date: 2010/05/06(木) 09:08   No:51684     
Title: Re:画面解像度の変更    
レスありがとうございます。

教えていただいたゲームプログラミングの館の13章も試してみました。
ウィンドウモードであれば問題ないのですが、フルスクリーンかつSetGraphMode()を使用した場合には
やはり処理がおかしいことになってしまいます。
具体的には、まったく画像が表示されない場合がほとんどですが、チラッと表示されることもありました。
いずれにしても、正しい表示にはなりませんでした。


2倍のポイントを手に入れた! 184ポイント を手に入れた。

Name: Ma  ..比類無きプログラマー(94,693ポイント)   Date: 2010/05/06(木) 09:49   No:51685     
Title: Re:画面解像度の変更    
グラフィックデバイスとか環境を疑ったほうが良いかもしれません。
お使いのPC情報と、DXライブラリのバージョン等を公開してみては?


53ポイント を手に入れた。

Name: ゆう  ..かけだし(1,283ポイント)   Date: 2010/05/06(木) 10:21   No:51687     
Title: Re:画面解像度の変更    
お言葉に従ってPCのスペックを書き出していたところだったのですが、原因が判明しました。
ExtResという画面解像度変更用の常駐ツールを使用しているのですが、これが悪さをしていました。
このツールには「リフレッシュレート自動調整」という機能があって
画面解像度が変更されたときに自動的にリフレッシュレートを調整するのですが、
この機能をオフにしたらうまく表示されるようになりました。
SetGraphMode()で、自動調整されるリフレッシュレートと同じ値を指定しても同様に表示されるようです。
詳しくは分かりませんが、ExtResの自動調整とSetGraphMode()による指定で
リフレッシュレートが食い違うと不具合が起こる・・・ということなのでしょうか。
お騒がせしました!


262ポイント を落としてしまった。

Name: ゆう  ..かけだし(1,428ポイント)   Date: 2010/05/06(木) 10:49   No:51688     
Title: Re:画面解像度の変更    
ところで少し気になったのですが、
SetGraphMode()でリフレッシュレートを指定しないと、自動的に60に設定されてしまうのでしょうか?
私はいまだにCRTモニタを使っているので、リフレッシュレート60だと画面がちらついてしまうので
普段85に設定しています。
しかしSetGraphMode()でリフレッシュレートを指定しないと、その画面ちらつき状態になってしまいます。
(恐らくリフレッシュレートが変更されてしまっている)
リフレッシュレートを変更せずに画面解像度だけ変更する際は、
事前にリフレッシュレートを取得して再設定する必要があるんでしょうか。


145ポイント を手に入れた。

Name: Justy  ..伝説なるハッカー(528,347ポイント)   Date: 2010/05/06(木) 13:57   No:51691     
Title: Re:画面解像度の変更    
>SetGraphMode()でリフレッシュレートを指定しないと、自動的に60に設定されてしまうのでしょうか?
 dxlib.hを見れば判りますが、指定しない場合は自動的に 60が指定されたと見なされますので、
そうなります。


> 事前にリフレッシュレートを取得して再設定する必要があるんでしょうか
 SetGraphModeのリフレッシュレート指定で 0を入れたらどうなりますか?


104ポイント を手に入れた。

Name: ゆう  ..かけだし(1,513ポイント)   Date: 2010/05/06(木) 19:24   No:51710 解決!     
Title: Re:画面解像度の変更    
dxlib.hを確認すればよかったのですね。

0を入れたらリフレッシュレートは変更されませんでした!
伺わなかったら、事前に取得して再設定という無意味な処理を書いてしまうところでした。
リファレンスを見てるだけでは分からないことも多いですね、勉強になりました。

みなさんありがとうございました。


85ポイント を手に入れた。



Name: ジャーニー  ..初心者(5,155ポイント)   Date: 2010/05/06(木) 02:24   No:51674       
Title: DXライブラリのDrawCircleGauge関数について    
お久しぶりですいつもお世話になっています.

今回質問させていただくのはDXライブラリの隠し関数であるDrawCircleGaugeです.
ゲームなどでよく用いられる円形バーを表示しようと思いDXライブラリに関数がないか探していたところDrawCircleGauge関数というものが見つかりました.

DrawCircleGauge( int CenterX, int CenterY, double Percent, int GrHandle ) ;
となっており,中心座標と扇状に何パーセント表示するかで構成されているようです.
しかしこれを使用したところ,変な表示になってしまいます.

添付した画像がどのように表示されているかなのですが,元画像が右で左が関数を使用したものになっています.
表示がギザギザになっており,また赤色領域の表示がおかしくなっています.
これらは直すことができるのでしょうか?
この関数では画像ファイルが2^xのサイズでしかうまく表示されませんが,この画像は128×128ピクセルなので画像サイズに関しては問題ないかと思います.

どなたかわかるかた回答をよろしくお願いします.


368ポイント を手に入れた。


Name: Justy  ..伝説なるハッカー(528,243ポイント)   Date: 2010/05/06(木) 04:07   No:51675     
Title: Re:DXライブラリのDrawCircleGauge関数について    
 右のテクスチャでDrawCircleGaugeを使うと左のように円で表示されるのはちょっと解せませんが
とりあえず元テクスチャの方を DrawGraph等で普通に表示した時が 100%の時の円の絵になるよう
透明チャンネルを使って切り抜いてみてください。

 出来れば円の直径はテクスチャ幅の 7割以下の大きさで。
 一応うまく動くだろうサンプルを添付しておきますので、それで試してみて下さい。

 もしどう加工してもうまくいかないようでしたら、そのテクスチャを添付してもらえれば、
何かわかるかと思います。


191ポイント を手に入れた。

Name: ジャーニー  ..初心者(5,634ポイント)   Date: 2010/05/06(木) 16:53   No:51694     
Title: Re:DXライブラリのDrawCircleGauge関数について    
返信が遅くなってしまい申し訳ありません

添付していただいたテクスチャと,こちらで作成したテクスチャを用いてテストしてみました.
結果色表示に関しては添付の画像のように問題なく表示されましたが,どちらのテクスチャも円周部分がギザギザになっています.
これはもうこの関数の仕様ということで判断し,αチャンネルでごまかすしかないのでしょうか?

このテストに使用したプログラムは以下のようになっています.
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,
                        LPSTR lpCmdLine, int nCmdShow )
{
    ChangeWindowMode(TRUE);//ウィンドウモード
    if( DxLib_Init() == -1 )        // DXライブラリ初期化処理
    {
        return -1 ;            // エラーが起きたら直ちに終了
    }
    SetDrawScreen( DX_SCREEN_BACK );

    int s = LoadGraph("test.png");
    int s2 = LoadGraph("test2.png");
    double i=0;
    while(1)
    {
        DrawCircleGauge( 400, 200, i, s);
        DrawCircleGauge( 200, 200, i, s2);
        i+= 0.5;
        ScreenFlip();
        if( CheckHitKey(KEY_INPUT_ESCAPE) == 1 ) break;
    }
    DxLib_End() ;                // DXライブラリ使用の終了処理

    return 0 ;                // ソフトの終了 
}


479ポイント を手に入れた。

Name: ジャーニー  ..初心者(5,712ポイント)   Date: 2010/05/06(木) 16:54   No:51695     
Title: Re:DXライブラリのDrawCircleGauge関数について    
すいません添付画像ではギザギザが緩和されていますが,実際に動かすと円周部分にギザギザが見られる程度になっています.

2倍のポイントを手に入れた! 78ポイント を手に入れた。

Name: Justy  ..伝説なるハッカー(528,410ポイント)   Date: 2010/05/06(木) 16:58   No:51696     
Title: Re:DXライブラリのDrawCircleGauge関数について    
 ループ内に ClearDrawScreenがないので、画面に延々と絵を上書きしていますよ。
 描く前に ClearDrawScreen関数で画面を消去してみてください。


63ポイント を手に入れた。

Name: ジャーニー  ..初心者(5,760ポイント)   Date: 2010/05/06(木) 17:02   No:51697     
Title: Re:DXライブラリのDrawCircleGauge関数について    
関数を追加したら直りました.
こんな初歩ミスをおかすとは丁寧にテストするべきでしたね.
ありがとうございました.


48ポイント を手に入れた。

Name: ジャーニー  ..初心者(5,771ポイント)   Date: 2010/05/06(木) 17:02   No:51698 解決!     
Title: Re:DXライブラリのDrawCircleGauge関数について    
解決にします.

11ポイント を手に入れた。



Name: ft  ..中級者(14,645ポイント)   Date: 2010/04/29(木) 23:30   No:51349       
Title: 自機と一定距離を保って移動するオプション    
タイトルのようなオプションを実装したいのですが、全く分かりません。
(数カ月ぶりにプログラミングをやるので色々マヒしてます;)
具体的には、地霊殿の霊夢-射命丸のオプションのような動作をするもののうち、
進行方向に向かって移動するオプションです。
どういった感じでやればいいでしょうか?


111ポイント を手に入れた。


Name: Dixq (管理人) [URL]  ..ウィザード(1,182,461ポイント)   Date: 2010/05/01(土) 20:24   No:51413     
Title: Re:自機と一定距離を保って移動するオプション    
> ftさん

こんにちは。
射命丸のオプションは過去に動いた方向に発射するものですよね。
それならば、過去の座標を覚えておいて、現在の座標との角度を計算すればいいのではないでしょうか?

atan2関数で2つの座標から角度が計算出来ます。


6ポイント を手に入れた。

Name: ft  ..中級者(14,772ポイント)   Date: 2010/05/01(土) 23:21   No:51432     
Title: Re:自機と一定距離を保って移動するオプション    
はい、発射する方向はそのようにできると思うのですが、
オプションの動き方がうまく出来なくて困っています;
自機を中心として円を描くようにして動くオプションの実装方法がよくわからないのです。
実は正確には、操作しないときはオプションはボス方向に向かうようになり、
操作時は進行方向へ向かう動作を実装しようかと思ってます。
先程は地霊殿の〜と言いましたが、正確には文花帖で射命丸の周囲に浮遊している十字マークの動作を目指しています。


127ポイント を手に入れた。

Name: ookami  ..初心者(7,738ポイント)   Date: 2010/05/02(日) 07:42   No:51456     
Title: Re:自機と一定距離を保って移動するオプション    
こんなニュアンスでしょうか?

double px,py; // 自機の座標
double ox,oy; // オプションの座標
double t; // オプションの角度
double r; // 自機とオプションの距離

ox=r*cos(t)+px;
oy=r*sin(t)+py;

あと、専門用語(?)はなるべく少なくしたほうが回答が集まりやすいと思いますよ。


125ポイント を手に入れた。

Name: ft  ..中級者(14,909ポイント)   Date: 2010/05/06(木) 11:43   No:51689 解決!     
Title: Re:自機と一定距離を保って移動するオプション    
遅れてすみません。
お陰で自機を中心として円を描く動作が得られました。
自機-ボス、自機-オプションの2つの角度を出して、
次第に角度差を縮めていくという風にして実装を試みたいと思います。
とりあえず最初の問題がクリアできたため解決ということにしたいと思います。
ありがとうございました。


137ポイント を手に入れた。



Name: dic  ..熟練のプログラマー(66,751ポイント)   Date: 2010/05/06(木) 08:20   No:51682       
Title: 継承しているが呼ばれない    
下にあるソースでModuleDを継承させ
Module10::Exe()
Module10::Exe2()
を実装しましたが
Module10::Exe2 は呼ばれずに ModuleD::Exe2 が呼ばれてしまいます

やりたいこととしては Module10 に メソッドを追加して
ModuleD インスタンスからそのメソッドをよびたいのですがうまくいきません

どこが間違っているのでしょうか?

// 123.cpp : コンソール アプリケーションのエントリ ポイントを定義します。
//

#include "stdafx.h"

#include <vector>
using namespace std;

class    Module
{
public:
    virtual    void    Exe() = 0;
};
class    ModuleD    :    public    Module
{
public:
    void    Exe();
    void    Exe2();
};
class    Module10    :    public    ModuleD
{
public:
    void    Exe();
    void    Exe2();
};
class    Module20    :    public    ModuleD
{
public:
    void    Exe();
};

void    ModuleD::Exe() { printf( "ModuleD::Exe()\n" ); }
void    ModuleD::Exe2() { printf( "ModuleD::Exe2()\n" ); }

void    Module10::Exe()
{
    printf( "Module10::Exe()\n" );
}
void    Module10::Exe2()
{
    //    よばれない
    printf( "Module10::Exe2()\n" );
}

void    Module20::Exe()
{
    printf( "Module20::Exe()\n" );
}


int _tmain(int argc, _TCHAR* argv[])
{
    ModuleD    *module10    = new Module10;
    ModuleD    *module20    = new Module20;

    vector<ModuleD*>    manager;

    manager.push_back( module10 );
    manager.push_back( module20 );

    vector<ModuleD*>::iterator p = manager.begin();

    while( p != manager.end() )
    {
        (*p)->Exe();
        (*p)->Exe2();
        p++;
    }

    delete    module10;
    delete    module20;

    return 0;
}


 編集済み


325ポイント を手に入れた。


Name: dic  ..熟練のプログラマー(66,822ポイント)   Date: 2010/05/06(木) 08:30   No:51683 解決!     
Title: Re:継承しているが呼ばれない    

class    ModuleD    :    public    Module
{
public:
    void    Exe();
    virtual void    Exe2();
};


virtual にしたら呼ばれました


71ポイント を手に入れた。



Name: Ma  ..比類無きプログラマー(94,678ポイント)   Date: 2010/05/06(木) 06:09   No:51678       
Title: Core Audio APIs での録音    
Vista 以降からXPと同じようにはPC音源を録音できない問題が発生しているのですが、
(ドライバ次第らしく、かなり多発している問題のようです。)
これの解決策として有効だと思ったCore Audio APIで録音しようとしています。

環境は Win7 64 bit
Visual Studio C++ 2008 Express
Microsoft SDKs v7.0

http://msdn.microsoft.com/en-us/library/dd316764(v=VS.85).aspx

それで、ここのサンプルにある
CaptureSharedTimerDriven

CaptureSharedEventDriven
をビルドして試してみたんですが、薄い砂嵐のような雑音が入ったファイルができるだけで録音できませんでした。
(出力デバイスはすべて試しました。音が流れていることはミキサーに表示されています。)

今まではオーディオケーブルをスピーカー出力からマイクにつなげて対応してました。

思い立ちはAmaRec を使っていたところ、Win 7 では、 Core Audio Capture を使用していると書いてあり、
実際に録画してみるとたしかに録音できたことです。
(動画から音を抜き出すのはなしでw)

あとは音だけキャプチャできるものがほしかったため調べて実行してみたらこの問題につきあたったというわけです。

何か間違っているところなどありましたら指摘よろしくおねがいします。 編集済み


468ポイント を手に入れた。




Name: yskey  ..初心者(6,381ポイント)   Date: 2010/05/02(日) 12:56   No:51468       
Title: 【C++】vector<vector<int>>について    
どうもyskeyです。
何度もすいません。
vector<vector<int>>の扱い方はどのようにすればよいでしょうか。(動的二次元配列?)
push_backでどのように要素を追加できるんでしょうか?


49ポイント を手に入れた。


Name: たかぎ [URL]  ..ハッカー(179,368ポイント)   Date: 2010/05/02(日) 12:59   No:51469     
Title: Re:【C++】vector<vector<int>>について    
> vector<vector<int>>の扱い方はどのようにすればよいでしょうか。

どう使いたいかによります。
例えば、

vector<vector<int> > v(10);

としておけば、以後、v[0]〜v[9]に対して、

v[3].push_back(123);

のようにすればよいと思います。




82ポイント を手に入れた。

Name: yskey  ..初心者(6,428ポイント)   Date: 2010/05/02(日) 17:12   No:51485     
Title: Re:【C++】vector<vector<int>>について    
>>たかぎさん、ご返信有難うございます。
すいません、説明不足でした。
v[]自体も後から増やすことはできませんか?


47ポイント を手に入れた。

Name: たかぎ [URL]  ..ハッカー(179,869ポイント)   Date: 2010/05/02(日) 17:14   No:51486     
Title: Re:【C++】vector<vector<int>>について    
> v[]自体も後から増やすことはできませんか?

push_backなり、resizeなりすればよいのでは?


4ポイント を手に入れた。

Name: Ma  ..比類無きプログラマー(92,106ポイント)   Date: 2010/05/02(日) 21:45   No:51499     
Title: Re:【C++】vector<vector<int>>について    
v.push_back
なら外側のvectorに追加
v[1].push_back
なら内側のvectorに追加

っていうことです。


34ポイント を手に入れた。

Name: yskey  ..初心者(6,641ポイント)   Date: 2010/05/05(水) 21:07   No:51657     
Title: Re:【C++】vector<vector<int>>について    
>>たかぎさん、Maさん返信有難うございます。

詳しい状況を書いておけばよかったです。すいませんm(_ _ ;)m

ただいま、戦略SLGを製作中です。
信長の野望などをイメージしていただければよいのですが、マップのデータを作るのにグラフ構造を使おうとしています。
グラフ構造にポインタを使うより、配列の添字でデータをリンクできそうなベクタを利用できそうだ、と思い現在ある問題に悩んでいます。どんな問題に悩んでいるかというと、push_backを使うとき、要素のなかにさらにベクタがあるとpush_backの引数はどうすればいいのかわからないのです。




213ポイント を手に入れた。

Name: たかぎ [URL]  ..ハッカー(181,639ポイント)   Date: 2010/05/05(水) 21:26   No:51659     
Title: Re:【C++】vector<vector<int>>について    
マップのデータであれば、vectorを使うより静的なデータ構造を使う方がよくないですか?
 編集済み


24ポイント を手に入れた。

Name: yskey  ..初心者(6,715ポイント)   Date: 2010/05/05(水) 23:00   No:51672     
Title: Re:【C++】vector<vector<int>>について    
>>たかぎさん、有難うございます。
確かにそうですね。
マップは最初から数は決まっています。

しかし、何かと便利そうなのでどうやって使うのか気になります…


74ポイント を手に入れた。



Name: HK  ..かけだし(1,565ポイント)   Date: 2010/05/05(水) 00:40   No:51622       
Title: 【雑談】このサイトで学習してゲームができました。    
こんにちは。 何度かこちらにお世話になっているHKと申します。

数か月前からプログラミングの館を見ながら色々と勉強させていただきました。
おかげさまで初心者ながら東方風自作ゲームを作れるまでに至りました。

http://www.nicovideo.jp/watch/sm10609482
それがコチラです。(ニコニコで申し訳ないです。。)
もしご感想とかあればお願いします。
(本家東方そっくりに作ってありますが、そのことで批判はしないでくださいm(_ _)m )

龍神録を参考にしましたが、これは1から自分で組んでいます。

地道に本を読んで勉強するのも良いですが、私は
わかりやすいHPを見たり、掲示板で色々質問したりするうちに
身についてきたという実感が大きいです。
質問掲示板は偉大ですね。

この動画のゲームのほかに、単純な迷路作成プログラムとか、RPGとかは作れるようになりました。

さて、私は、以上のようなことを趣味の範囲でやっていたのですが、やっているうちに
だんだん興味が大きくなってきて、初心者以上のことをやってみたくなってきました。
一般にプログラマと呼ばれる人たちはどのようなことを初めにやるのでしょうか。

少なくともDXライブラリは卒業したいのですが。。。


215ポイント を落としてしまった。


Name: ideyan  ..初心者(5,069ポイント)   Date: 2010/05/05(水) 01:56   No:51624     
Title: Re:【雑談】このサイトで学習してゲームができました。    
こんにちは、稀に書き込んだりしているideyanです。

動画拝見しました。
凄くよくできてますね^^
某鼠弾幕にコメつけておきましたw

私も趣味でちょこちょこプログラム書いてますが、
基本的にめんどくさがりなので、素材集めが大変な奴とか、
大きな作品は作れません(苦笑
基本的に↓のようなミニゲームばかりになりますw
http://www.nicovideo.jp/watch/sm8957764
(……雑談ってあるし貼ってもいいよね?)

私から見ればHKさんはもう充分「初心者」以上のことを
やっているように見えますが……、質問内容には私も興味があります。
(一概にプログラマと言ってしまうと範囲が広すぎる気もしますが)

DXライブラリですか。。。
私の場合、3Dの何かを作ってみたくてDXライブラリを卒業したら
自分用の簡単な2D・3Dのライブラリがある程度形になったところで
DXライブラリを3Dに対応させるよ、とアナウンスがあってがっくりきた思い出があります。
悔しいので自作ライブラリを使い続けてますが、
作れるものの幅は以前より狭まってしまいましたw


HKさん、これからも頑張ってくださいね。


467ポイント を手に入れた。

Name: softya [URL]  ..ハッカー(157,157ポイント)   Date: 2010/05/05(水) 12:05   No:51629     
Title: Re:【雑談】このサイトで学習してゲームができました。    
おぉ。十分すごいですよ。

>一般にプログラマと呼ばれる人たちはどのようなことを初めにやるのでしょうか。 

何と言うか仕事じゃなければ好きなこと、面白そうなことを手当たり次第にやるのが普通じゃないでしょうか。スキルを上げるためにやると言うよりは、気づいたら上がっていたみたいな。DirectXやOpenGLでゲームを作ったり、何らかのゲームエンジンを作ったり、ゲーム制作用のツール/ライブラリを作ったり、ここのDixq (管理人)さんの様に講座サイトを作ったり、好きなことをやってみましょう。別にゲームに限らずオリジナル言語やオリジナルOSなどに手をだすのも面白いです。
    

>だんだん興味が大きくなってきて、初心者以上のことをやってみたくなってきました。 

人に教えるとか、講座を書くのもスキルアップになりますね。
人に分かって貰うには、こちらはより深い理解が必要ですから。

ここからは、私の独り言・・・。
誰かDXライブラリでRPGの作成講座作ってくれないかなぁ・・・。街、フィールド、ダンジョン、ボスが1つづつぐらいが良いなぁ。良く初心者に質問されるけど、紹介するサイトが無いんだよなぁ。
[真に受けないでくださいね(汗)]
 編集済み


474ポイント を手に入れた。

Name: Ma  ..比類無きプログラマー(94,210ポイント)   Date: 2010/05/05(水) 13:48   No:51630     
Title: Re:【雑談】このサイトで学習してゲームができました。    
>誰かDXライブラリでRPGの作成講座作ってくれないかなぁ・・・。街、フィールド、ダンジョン、ボスが>1つづつぐらいが良いなぁ。良く初心者に質問されるけど、紹介するサイトが無いんだよなぁ。 

まったくもって同じ意見です。すごく賛同です。
毎回同じ質問がくるので、ここみて勉強してわからなかったら戻ってきてね。
みたいなことができるサイトがあるといいですよね。


147ポイント を手に入れた。

Name: Tororo  ..初心者(6,840ポイント)   Date: 2010/05/05(水) 14:05   No:51631     
Title: Re:【雑談】このサイトで学習してゲームができました。    
HKさん

最後の弾幕の発想すごいですね^^
色が問題になるなんて・・・・

>>誰かDXライブラリでRPGの作成講座作ってくれないかなぁ・・・。街、フィールド、ダンジョン、ボスが>>1つづつぐらいが良いなぁ。良く初心者に質問されるけど、紹介するサイトが無いんだよなぁ。

自分、ブログをやり始めたので、そんな事を書いてみようかな・・・
でも、難しそうですね><
 


185ポイント を手に入れた。

Name: HK  ..かけだし(2,208ポイント)   Date: 2010/05/05(水) 19:22   No:51646     
Title: Re:【雑談】このサイトで学習してゲームができました。    
色々なご意見とても参考になりました。ありがとうございます。

RPG製作の解説サイトですかー。
ゲーム作りたい人って、なぜか最初にRPG作りたがりますよねw
かく言う私もです。RPGツクールとかいうのも出てくるくらいですし、
需要があるんですね やっぱり。

まだまだ私も修行中なので人に教えることをしたことがありませんが、
いつか、十分なレベルに達したら作成講座なんてのも作ってみたいと思います。


(解決!チェックはオンにしたほうがいいのでしょうか。雑談系の投稿を初めてしたもので。。)


260ポイント を手に入れた。

Name: softya [URL]  ..ハッカー(157,841ポイント)   Date: 2010/05/05(水) 19:30   No:51650     
Title: Re:【雑談】このサイトで学習してゲームができました。    
>(解決!チェックはオンにしたほうがいいのでしょうか。雑談系の投稿を初めてしたもので。。)

このまま続けても良いならチェックしなくて良いですよ。
ところで、なにかやりたい事は決まりそうですか?


42ポイント を手に入れた。

Name: Dixq (管理人) [URL]  ..ウィザード(1,183,542ポイント)   Date: 2010/05/05(水) 19:50   No:51652     
Title: Re:【雑談】このサイトで学習してゲームができました。    
> HKさん

な、なんだこのクオリティの高さは?!
素晴らしい作品ですね^^
そしてあのヘリョリレーザーが完全に再現されてますね♪
いや〜こういう動画を見るとまた私も作りたくなります・・。

しかしホントに「もっと評価されるべき」ですねぇ・・。
少し前にPH作ってみたの投稿がヒットしていましたけど、時間的な問題だったのでしょうか。

ところで初心者という段階はもう十分クリアしているのではないでしょうか^^;
好きなものを作っているうちに作りたいものを作るスキルは付いてくると思いますよ。


> ideyanさん

おぉ〜こういうミニゲーム良いですね^^

> DXライブラリを3Dに対応させるよ、とアナウンスがあってがっくりきた思い出があります。 

自作ライブラリとは素晴らしい。
その努力は決して無駄ではなかったのではないでしょうか^^
DXライブラリ3Dを使ったゲーム何か作ってみたいんですが、
3Dゲーで何か面白いゲーム思いつかないんですよね・・。
アニメーションとモデル使い始めたら作業量が格段に上がってしまいますし、
今作っているゲームもどちらにしようか悩んでいます・・。


> HKさん
> ゲーム作りたい人って、なぜか最初にRPG作りたがりますよねw 

私の事ですね解ります(笑
RPGが最初の制作ってのは結構地雷みたいですが、やっぱ作りたくなるんですよね〜^^;
昔感動したゲームを自分の手で作りたいって気持ちが大きいのでしょうか。
FF1位のものは一度完成させてみたいですね〜(´▽`)


> softyaさん
> 誰かDXライブラリでRPGの作成講座作ってくれないかなぁ・・・。

なんかゲームの解説サイトって本当に少ないんですよね〜。
序盤だけかいてあるのはあれども、本格的な解説がなかなか・・。

あ〜大学生のうちにもっと色んな事をやっておけばよかったな〜^^;


370ポイント を手に入れた。

Name: HK  ..かけだし(2,488ポイント)   Date: 2010/05/05(水) 20:17   No:51655     
Title: Re:【雑談】このサイトで学習してゲームができました。    
管理人さん こんにちは。観て頂いてありがとうございます!

>しかしホントに「もっと評価されるべき」ですねぇ・・。 

意外と伸びませんね 笑
でも、実は作成中だんだんめんどくさくなってしまい、いろいろ適当なままで
妥協したのを投稿したので別にいいや っていう感じです。(実はちょっと悔しいです。)
ウケル作品をどう作るかって難しいですよね。

>softyaさん
>なにかやりたい事は決まりそうですか?

上で3Dの話が出てきましたが、面白そうですね。
以前、HSPで試しに3Dゲームを作ったことがあります。
スーパーマリオ64のような3Dアクション+萌え要素 みたいな
ゲームだったのですが、モデルとか色々めんどくさかった思い出があります。

私はレースゲーム大好きなんですが、3Dレースゲームは重そうなイメージでガチガチです。
やはり作るの大変でしょうか…


280ポイント を手に入れた。

Name: ひよこ  ..比類無きプログラマー(82,574ポイント)   Date: 2010/05/05(水) 21:59   No:51663     
Title: Re:【雑談】このサイトで学習してゲームができました。    
動画見ました。
レーザの再現度が高いですね。
アイデアも素晴らしいかったです。


2倍のポイントを手に入れた! 84ポイント を手に入れた。

Name: softya [URL]  ..ハッカー(157,987ポイント)   Date: 2010/05/05(水) 22:32   No:51666     
Title: Re:【雑談】このサイトで学習してゲームができました。    
>私はレースゲーム大好きなんですが、3Dレースゲームは重そうなイメージでガチガチです。
>やはり作るの大変でしょうか…

まぁ、GTみたいなシミュレーション性が高いものは大変でしょうが、とりあえず始められてみてはどうでしょう。好きなら苦労も苦じゃないはずですよ。車をとりあえず走らせるだけでも、色々楽しめると思います。


146ポイント を手に入れた。

Name: tuelon  ..ぴよぴよ(754ポイント)   Date: 2010/05/05(水) 22:57   No:51671     
Title: Re:【雑談】このサイトで学習してゲームができました。    
すごすぎる!!
マイリス余裕でしたw
Bossの後ろの背景がぐにゃってたり、細かいとこまで再現されてますね。
確実に初心者のレベルは卒業されてますよw


71ポイント を手に入れた。



Name: pon  ..かけだし(1,272ポイント)   Date: 2010/05/04(火) 23:01   No:51618       
Title: 無題    
TopCoder SRM466 DIV1 250

問題文
「0、または約数を奇数個もつような数(leading zeroもあり)が当選ナンバーである。今あるナンバー(ID)の桁を書き換えて当選ナンバーにしたい。最小手数を求めよ。」

以下のようなものを書いたのですが、何がいけないのでしょうか。
topcoderのcompileも通りません。


105ポイント を手に入れた。


Name: mats  ..入門者(2,913ポイント)   Date: 2010/05/05(水) 04:44   No:51626     
Title: Re:無題    
stringと数字を比較したり,stringに対して%演算を行っているのがcompileが通らない原因ではないでしょうか.


31ポイント を手に入れた。

Name: pon  ..かけだし(1,342ポイント)   Date: 2010/05/05(水) 22:44   No:51667     
Title: Re:無題    
matsさんありがとうございます。
訂正版です。
しかし、Compileが通りません…
  LotteryCheating.cc:40: error: invalid use of member (did you forget the ‘&’ ?)
と出ます。


70ポイント を手に入れた。

Name: ookami  ..中級者(10,208ポイント)   Date: 2010/05/05(水) 22:51   No:51669     
Title: Re:無題    
ここだけか分かりませんが、41行目の

while(str.length() < c.length){

while(str.length() < c.length()){

なのではないでしょうか?


77ポイント を手に入れた。

Name: pon  ..かけだし(1,384ポイント)   Date: 2010/05/05(水) 22:54   No:51670 解決!     
Title: Re:無題    
ありがとうございます。
一つ下のは自分で気づいてなおしたのですが、上のをなおすのを忘れていました。
自分のしょぼいミスでした。ご迷惑をおかけしました。


42ポイント を手に入れた。



Name: 組木紙織  ..比類無きプログラマー(80,033ポイント)   Date: 2010/05/05(水) 19:30   No:51649       
Title: テンプレートクラス内で定義したフレンド関数を外に出したい。    
久々に質問します。

以下のようなテンプレートクラス(抜粋)を作っています。
その中にあるフレンド関数をクラスの外に出したいです。
どのようにすればいいでしょうか?

#include <vector>
#include <iterator>
#include <algorithm>
#include <iostream>

template<typename T>
class vec
{
private:
    std::vector<T> obj_;
public:
vec(T a1, T a2);

//ここの関数の実体をクラスの外に出したい。
friend std::ostream & operator<< (std::ostream &stream,const vec<T>& ob)
{
    std::vector<T>::const_iterator i=ob.obj_.end();
    stream << "(" ;
    copy(ob.obj_.begin(),ob.obj_.end()-1,std::ostream_iterator<T>(stream,", "));
    stream << *(i-1) <<")";
    return stream;
}

};
/***************************************************************************
テンプレートの実体
***************************************************************************/

//コンストラクタ
template<typename T>
vec<T>::vec(T a1, T a2):obj_(2)
{
    obj_[0] = a1;
    obj_[1] = a2;
}

int main()
{
    vec<int> v(1,1);
    std::cout << v << std::endl;
}



279ポイント を手に入れた。


Name: たかぎ [URL]  ..ハッカー(181,615ポイント)   Date: 2010/05/05(水) 21:24   No:51658     
Title: Re:テンプレートクラス内で定義したフレンド関数を外に出したい。    
この話は、不具合を持った処理系が多かったような気もしますが...

以下のようにすればうまくいきませんか?

template<typename T> class vec;

template <typename T>
std::ostream & operator<< (std::ostream &stream,const vec<T>& ob);

template<typename T> 
class vec 

private: 
    std::vector<T> obj_; 
public: 
vec(T a1, T a2); 

friend std::ostream & operator<< <T>(std::ostream &stream,const vec& ob);

}; 

//コンストラクタ 
template<typename T> 
vec<T>::vec(T a1, T a2):obj_(2) 

    obj_[0] = a1; 
    obj_[1] = a2; 


template <typename T>
std::ostream & operator<< (std::ostream &stream,const vec<T>& ob) 

    typename std::vector<T>::const_iterator i=ob.obj_.end(); 
    stream << "(" ; 
    copy(ob.obj_.begin(),ob.obj_.end()-1,std::ostream_iterator<T>(stream,", ")); 
    stream << *(i-1) <<")"; 
    return stream; 



352ポイント を手に入れた。

Name: 組木紙織  ..比類無きプログラマー(80,245ポイント)   Date: 2010/05/05(水) 21:42   No:51660     
Title: Re:テンプレートクラス内で定義したフレンド関数を外に出したい。    
私の環境(VS2005)ではうまくいきました。
ありがとうございます。


>この話は、不具合を持った処理系が多かったような気もしますが... 
そうなんですか?
この環境では出来ることは知っていたので気にしてなかったです。

さすがにフリーのBCC5.5とかでは問題があると思いますが。

重要な点は
friend std::ostream & operator<< <T>(std::ostream &stream,const vec& ob); 

テンプレート引数をつけてfriend宣言することですかね。
忘れないように記録しておきます。


212ポイント を手に入れた。

Name: たかぎ [URL]  ..ハッカー(181,665ポイント)   Date: 2010/05/05(水) 21:44   No:51661     
Title: Re:テンプレートクラス内で定義したフレンド関数を外に出したい。    
> テンプレート引数をつけてfriend宣言することですかね。 

そうですね。
あと、それを可能にするために、先行宣言が必要になることもポイントです。


26ポイント を手に入れた。



Name: Dixq (管理人) [URL]  ..ウィザード(1,182,769ポイント)   Date: 2010/05/04(火) 19:14   No:51603       
Title: HPの内容を一部修正 [報告・雑談]    
皆様こんにちは^^
GWいかがお過ごしでしょうか?
「久しぶりに羽を伸ばしたよ〜!」という方、「GW?何それおいしいの?」という方、
色々いらっしゃると思いますが、
私は久しぶりに実家に帰ってゆっくりしました。
久しぶりに帰る実家というものはやはり良いですね〜(´▽`)
何より札幌と違って広島はあったかい。。

==========================================

DXライブラリがver3になったこと、windows7が普及したことから、HPに置いてあるDXライブラリに関連したものをDXライブラリver3に変更しました。

サンプルプログラミングの館に置いてあるサンプルや龍神録プログラミングの館に入っているDXライブラリのバージョンを3にやり直しました。
ゲームプログラミングの館の0章も更新しました。

他に、このHPのどこかに記事やファイルが古いままで修正した方が良い場合があれば教えて下さい^^


323ポイント を手に入れた。


Name: Dixq (管理人) [URL]  ..ウィザード(1,182,751ポイント)   Date: 2010/05/04(火) 19:17   No:51605     
Title: Re:HPの内容を一部修正 [報告・雑談]    
追記:
softyaさんに、Visual Studio 2010 Expressがリリースされたので、それに関連した記述を付け加えたらどうかとご意見頂きましたので追記しておきます。
softyaさん、ご意見ありがとうございます^^


81ポイント を手に入れた。

Name: Tororo  ..初心者(6,655ポイント)   Date: 2010/05/04(火) 20:18   No:51610     
Title: Re:HPの内容を一部修正 [報告・雑談]    
リンクに追加? を希望でバイクのページをしてほしいです。
ブログの時に一度リンクを見つけてから見ていないので^^;
もしかして、すでにリンクが張ってあって、自分の確認ミスだった時はスイマセン><




//ーーーーーーーーーーーーここからどうでも良い事です

何だかんだで学校の勉強や部活を頑張っています。
ただ、プログラムをする暇がないのが問題です。
普通は、勉強と部活の両立と言います。
けれど、自分は勉強と部活とプログラムを両立したいです・・
でも、それはワガママ過ぎますかね^^


246ポイント を手に入れた。

Name: ベリ工  ..入門者(3,433ポイント)   Date: 2010/05/04(火) 20:47   No:51611     
Title: Re:HPの内容を一部修正 [報告・雑談]    
管理人様、基本的にROMっているベリ工です。
たまに発言もしますが・・・(笑

さて、管理人さんのブログを初めて見ました(今頃!?すんませんm(_ _)m
管理人さんってハヤブサ乗っているんですね?
実は私もハヤブサに乗っています。2008年モデル(フルモデルチェンジ後)のオレンジ隼です。
しかも初めて買ったバイクです(なんともチャレンジャーな(^^;;;;;

ツーリング画像たくさんブログに載っけて下さい。
楽しみにしてます。でわ。


183ポイント を手に入れた。

Name: Dixq (管理人) [URL]  ..ウィザード(1,183,123ポイント)   Date: 2010/05/04(火) 21:17   No:51612     
Title: Re:HPの内容を一部修正 [報告・雑談]    
何?!バイクの要望があるとは意外っ!

> Tororoさん

これですねw
http://dixq.net/bike/
まぁこれはバイク好きが嵩じて作ったしょうもないページですよ^^;
需要があるようならバイクのページもちゃんと作りたいですね^^

中学生活忙しそうですね。
でも、中、高の生活は一生で何にも変えられない大切な時間なので、悔いの無いようにがんばって下さいな^^


> ベリエさん

おぉ、隼乗りですか!しかも新型とは!
隼乗り仲間がいらっしゃるなんて、なんだか嬉しくなりますね^^
私も新型が乗りたかったのですが、高かったので買えませんでした(T_T

詳しくはプロフィール
http://dixq.net/profile.html
に書いてあるのですが、隼がほしいと思いながら何年も徐々に徐々に近づいていった物なのですw
しかし10台目にしても全く使いこなせません;
なので、初めて買ったバイクが隼なんて考えられません^^;
いや〜すごいですね、初めて乗った大型は9Rですが、当時はそれでもビックリしたものでした。隼に初めて乗られたときはさぞ驚かれたことでしょうw

ツーリング画像沢山アップしますね!
コメントなど、気軽にして下さると幸いです^^


372ポイント を手に入れた。

Name: ベリ工  ..入門者(3,774ポイント)   Date: 2010/05/04(火) 21:46   No:51613     
Title: Re:HPの内容を一部修正 [報告・雑談]    
そうでしょうねw
普通は250または400くらいから乗り出して腕を磨き、
GTクラス以外の大型バイクでさらに経験を積んで
最後にGTクラスのバイクに乗るっていうのが
ライダーの基本系!?なのでしょうが、
私の場合は
原付→隼
というすごいステップアップで、

>隼に初めて乗られたときはさぞ驚かれたことでしょうw

はまさにその通りですw驚きというか、
原付の感覚でアクセルふかしたんでウィリーしそうになりました(笑
(フロントタイヤが少し浮きましたw)

それが最初でしたね(あぶない

それでも買ってまる2年経過するんでだいぶ馴れましたね(ホントか???^^;;;;

>ツーリング画像沢山アップしますね! 
>コメントなど、気軽にして下さると幸いです^^

はい、楽しみにしていますm(_ _)m
でわっ。


341ポイント を手に入れた。

Name: Dixq (管理人) [URL]  ..ウィザード(1,183,004ポイント)   Date: 2010/05/04(火) 22:14   No:51614     
Title: Re:HPの内容を一部修正 [報告・雑談]    
うは〜、原付→隼 だなんて・・なんという冒険^^;

> 原付の感覚でアクセルふかしたんで

車体がよくふっ飛んでいかなかったですねw

> はい、楽しみにしていますm(_ _)m 

ベリエさんの隼もよければ拝見したいんですが、mixiとかブログとかお持ちではないですか?w

私の方は
北海道配属になったので、これからあちこちバイクで走って回りたいと思います^^


119ポイント を落としてしまった。

Name: たかぎ [URL]  ..ハッカー(181,016ポイント)   Date: 2010/05/04(火) 22:48   No:51615     
Title: Re:HPの内容を一部修正 [報告・雑談]    
なんか、Dixqさんのブログのタイトルが見るたびに変わっていますね。


13ポイント を手に入れた。

Name: ベリ工  ..入門者(3,788ポイント)   Date: 2010/05/04(火) 22:54   No:51616     
Title: Re:HPの内容を一部修正 [報告・雑談]    
>車体がよくふっ飛んでいかなかったですねw

その時はかろうじて耐えました(笑
コケはしませんでしたが、恐ろしかったですね!!

>ベリエさんの隼もよければ拝見したいんですが、mixiとかブログとかお持ちではないですか?w

あ〜、残念ながら"外"に公開しているHPやブログは無いですね・・・
"内"ならあります(笑
自宅のローカルLAN内にてWEBサーバ、FTPサーバ、メールサーバ、データベースサーバ
を立て、自分(の趣味^^;;;)でJSP&JAVAサーブレットとASP.NETの混合WEBアプリで作った
ブログには載っけていますけどねw
(あっ、でも仕事ではVC++とC#ばっかりやってますけどねw)
でもローカルLANなので誰も見ない(正確には絶対に見れない)ですけどね(^^;;;;

どこかフリーのHPやブログでも開いたらお知らせしますので
そのときまで待っていて下さいm(_ _)m

でわ。


14ポイント を手に入れた。

Name: Dixq (管理人) [URL]  ..ウィザード(1,183,172ポイント)   Date: 2010/05/04(火) 23:52   No:51619     
Title: Re:HPの内容を一部修正 [報告・雑談]    
> たかぎさん

よく言われますが、よく皆さんおわかりになりますね^^;
私は見ているブログのタイトルが変わってても全然わからないだろうなぁ・・。
しかし私のような者のブログをご覧下さってありがとうございます^^;


> ベリエさん

"内"に公開しているブログとは新しい・・w
家にすごい環境がそろってるんですねw
いや〜ネットからJAVAからC関連の知識まで幅広くお持ちとは素晴らしい!
私も見習ってがんばります。

> どこかフリーのHPやブログでも開いたらお知らせしますので 

楽しみにお待ちしております^^


168ポイント を手に入れた。

Name: 組木紙織  ..比類無きプログラマー(79,745ポイント)   Date: 2010/05/05(水) 00:05   No:51621     
Title: Re:HPの内容を一部修正 [報告・雑談]    
メールでも送ったんですが、過去ログ検索機能が使えなくなってます。
修正をお願いします。
http://dixq.net/board/log/



#なんでか知らないけど、今ゲームを作ることになったので、作り始めてます。
#まだ、構想を作ってる段階なので、どうなるか分かりませんが、
#コアの部分が出来たら公開したいとおもってます。



123ポイント を手に入れた。

Name: Dixq (管理人) [URL]  ..ウィザード(1,183,552ポイント)   Date: 2010/05/05(水) 19:50   No:51653     
Title: Re:HPの内容を一部修正 [報告・雑談]    
あ、本当ですね。修正しておきます。

10ポイント を手に入れた。



Name: 初心者  ..熟練のプログラマー(47,494ポイント)   Date: 2010/05/05(水) 17:25   No:51638       
Title: VC++ 2010 インストールエラー    
VC++2010をインストールしようとしたところ、
.NET Framework 4 でエラーが発生します。
どうしたらいいでしょうか??

どなたか助けてください(汗

環境
Windows Vista Ultimate SP2 64bit版

添付はエラー時の画面です


108ポイント を手に入れた。


Name: たかぎ [URL]  ..ハッカー(181,263ポイント)   Date: 2010/05/05(水) 17:36   No:51640     
Title: Re:VC++ 2010 インストールエラー    
もう一度インストーラを実行するとうまくいく場合があります。
それでもダメなら、マイクロソフトにレポートした方がよいでしょうね。



49ポイント を手に入れた。



Name: Ma  ..比類無きプログラマー(92,580ポイント)   Date: 2010/05/04(火) 04:20   No:51576       
Title: 既読文 判定    
ふと思ったので質問です。
昔作っていたノベルゲームで開発時間の都合上、既読文書のスキップ機能を諦めました。
もし、ビジュアルノベルゲームを作っているとして、既読文書かどうかの判定を作るとしたら、どのように実装しますか?
(今何か開発しているわけではありません。)


【条件】
・既読の判定は一ページごと。
・ノベルシステム部分(システム上の文章の記録方法/読み込み方法)は、制限されていません。


【オプション】(この項目はできればです)
シナリオ情報が途中で修正されたり追加されたりしても誤作動がなかったら理想的ですよね。
 -つまり、既読文の間に未読文が追加されても対応できそうなような仕様。




アイディアだけでOKです。
私なら、各ページにIDとフラグを与えますが、ちょっと非効率な気もします。
(IDはシナリオを作るソフトが被らないように自動生成。)

*一応
もしプログラムをお書き込みになる場合、C++ か java だと助かります。 編集済み


274ポイント を手に入れた。


Name: lbfuvab  ..プログラマー(25,669ポイント)   Date: 2010/05/04(火) 10:31   No:51582     
Title: Re:既読文 判定    
セーブデータに含めて管理します(しました)
昔需要も無いのにノベルゲ用のプログラムを作っていた時はそうしました。


5ポイント を手に入れた。

Name: softya [URL]  ..ハッカー(156,003ポイント)   Date: 2010/05/04(火) 11:34   No:51583     
Title: Re:既読文 判定    
シナリオですから何らかの分岐点はありますよね。
条件文の分岐点のIDで管理するってのはどうでしょうか?

ただし、IDの自動付与は
>シナリオ情報が途中で修正されたり追加されたりしても誤作動がなかったら理想的ですよね。 
の条件に反するので無理そうな気がします。


76ポイント を手に入れた。

Name: Ma  ..比類無きプログラマー(93,048ポイント)   Date: 2010/05/04(火) 12:04   No:51585     
Title: Re:既読文 判定    
> lbfuvab さん
>セーブデータに含めて管理します(しました) >セーブデータに含めて管理します(しました) 
すいません。もちろん、そうなると思うのでですが、どのように・・・というところがお聞きしたいです。


> softya さん
>条件文の分岐点のIDで管理するってのはどうでしょうか?
分岐点だけを記録するのでは、分岐後、どれだけ読んだかがわからないですよね。

となると、通り過ぎた条件分の分岐点IDのすべてと、枝分かれの可能性の数だけ合わせた分岐点後のどこまでかって情報を記録するということになりますかね?

たとえば、簡単な3つ枝の分岐点が一つで、終着点が3点だとしたら、その分岐を通ったかどうか、
その後の枝3つそれぞれに、何ページ読んだかどうかの記録。

でも、この方法、途中でページが増えたら対応できないです。。。



>ただし、IDの自動付与は 
>>シナリオ情報が途中で修正されたり追加されたりしても誤作動がなかったら理想的ですよね。  
>の条件に反するので無理そうな気がします。

毎ページ、必ず異なるIDを、そしてすでに与えたIDは被らないようにIDを与えるようにする、
という仕様にすれば途中でシナリオに変更があっても誤作動が起きないような気がします。
ただ、1ページ、1ページに、シナリオ情報にIDを付加したら、セーブデータは、
すでに読んだページのID一覧を記録。
もちろん、IDはすべて順序にそっていて、分岐点があるなら分岐ごとのIDにセクションわけするとか。

・例
[(ID名)]
(ページID)-(フラグ)
(ページID)-(フラグ)
(ページID)-(フラグ)

・具体例
[共通シナリオ/イントロ]
00001-1
00002-1
00003-1
00005-1
[ルートA]
00007-1
[ルートB]
00009-1
00010-0
[ルートC]
00013-0

ただ、毎回読みこまないといけないので、章ごとにファイルを別々にしたほうがよさそうです。
問題点は見てもわかるように、かなり無駄が出そうなところです。 編集済み


468ポイント を手に入れた。

Name: softya [URL]  ..ハッカー(155,964ポイント)   Date: 2010/05/04(火) 12:12   No:51587     
Title: Re:既読文 判定    
素朴なギモンなんですが、読んでいる途中で中断した場合も保存するって方向でしょうか?そうすると読み進んだら自動セーブ、あるいは中断時はセーブして終わると言った感じでしょうか。分岐点まで読んだかどうかの保存で十分な気がしますが。

97ポイント を落としてしまった。

Name: Justy  ..伝説なるハッカー(527,104ポイント)   Date: 2010/05/04(火) 12:15   No:51588     
Title: Re:既読文 判定    
> すでに読んだページのID一覧を記録
 ゲーム中に存在するページ IDが連番に(表示順は問わない)なっていれば
セーブデータとしては読んだかどうかは1ページあたり 1bitあれば管理できると思います。
 10000ページあっても 1.2KBちょっとです。


74ポイント を手に入れた。

Name: Ma  ..比類無きプログラマー(93,545ポイント)   Date: 2010/05/04(火) 12:32   No:51591     
Title: Re:既読文 判定    
>読んでいる途中で中断した場合も保存するって方向でしょうか?そうすると読み進んだら自動セーブ、あるいは中断時はセーブして終わると言った感じでしょうか。
はい、そのとおりです。
言葉足らずだったようですいません。

>分岐点まで読んだかどうかの保存で十分な気がしますが。
たしかにアマチュアが作るゲームならシナリオはそんな長くないし、セーブ機能があれば十分なのですが、
企業のを見ると、既読文に上手く対応しているので、それを真似る知識があるといいかな、って思ったのです。



>Justy さん
>ゲーム中に存在するページ IDが連番に(表示順は問わない)なっていれば 
そうですよね、私も最初はビット単位で記録しようと思いました。
それに、シナリオ修正にも対応できそうだし。
ただ、それだと分岐点の処理が難しそうだと思いました。
というのは、ビットごとだと途中で分岐IDをいれるのも困難だと思ったからです。
何かいい案がありますか?

*訂正
いや、分岐も何も関係なく、分岐IDを含めてシナリオを直線にすれば(シナリオは分岐してもその情報は分岐しないなら)いいのか。
あとは、シナリオが毎回更新されるたびに、途中でビットを加えるかどうかの処理をすればいいだけですからね。
 編集済み


247ポイント を手に入れた。

Name: Justy  ..伝説なるハッカー(527,230ポイント)   Date: 2010/05/04(火) 12:41   No:51593     
Title: Re:既読文 判定    
> ビットごとだと途中で分岐IDをいれるのも
 既読ページフラグとは別に持ってはどうでしょう。
 分岐毎にユニーク且つ連番な分岐 IDを割り振って、分岐選択済みフラグとして
既読ページフラグとおなじような感じでセーブデータに保存すればいいのでは、と。


126ポイント を手に入れた。

Name: softya [URL]  ..ハッカー(156,269ポイント)   Date: 2010/05/04(火) 12:48   No:51594     
Title: Re:既読文 判定    
私なら一行毎に自動ID付与するツールを作るでしょうね。そのIDで読んだかどうか管理。
シナリオを修正する度にツールを通過させて追加変更された部分に新しいIDを付与。
この場合はシナリオの並びとID番号の順番は一致しない。

まぁ、セーブサイズはビットにするほど気にしなくて良いのでは?
デバッグが面倒なだけだと思いますが。


117ポイント を手に入れた。

Name: Ma  ..比類無きプログラマー(93,992ポイント)   Date: 2010/05/04(火) 13:04   No:51595     
Title: Re:既読文 判定    
なるほど。
Justy さんの方針もいいと思いました。
この方法は、自分が勝手に困難だと思い込んでいたようです。

具体的には、シナリオ情報が以下のようになっていたとすると。。。
(//はコメントとします。#はスクリプト的目的です。[]は分岐処理です。)


#sceario 000
「共通シナリオです。あああああああああ」//0ビット目
「きょうつう(ryいいいいいいいいいい」//1ビット目
[分岐001:(選択肢1),(選択肢2)]//(選択肢:0ビット目/1ビット目)
[選択肢1]
「ああああああああああああああ」//2ビット目
#jumpTo 001
[end]
[選択肢2]
「いいいいいいいいいいいいいい」//3ビット目
[end]
「選択肢が終わりました。」//4ビット目
#scenario 001
「分岐で選択肢1を選んだ場合発生するシナリオです。」//5ビット目

(即興で考えたシナリオ情報ファイルの仕様です。)
のようになっていたとしたら、
6ビットで既読文を読んだかどうかを保存。
2ビットで、選択肢用の別ファイルに選んだかどうかを保存。
途中でシナリオが更新される場合は、前シナリオファイルと比較して足りないビットを付け足す感じです。

残る問題点は、修正のレベルによりますがシナリオ修正後に的確な場所にビットを付け足したり消去する処理が難しそうですね…。
これについては、シナリオ編集用のソフトを自前で作成して、ひとつひとつ修正するたびにどこのビット位置にどのようにビットの修正を行うのか記録するのが理想的と思いました。
(というのは、パッチみたいなことができるのを考えてです。)
あー、でもいろいろミスが起きて大変なことになりそうですね…。
これについて、なにか言及はないでしょうか?


>softyaさん。
やはり、そこに落ち着きそうですかね。
ビット単位での記録について考えていたら、おっしゃるとおりデバッグが難しい事になりそうな気がしてきました。
ID記録方針やっぱりいいのかな。 編集済み


447ポイント を手に入れた。

Name: Justy  ..伝説なるハッカー(527,629ポイント)   Date: 2010/05/04(火) 13:48   No:51596     
Title: Re:既読文 判定    
>6ビットで既読文を読んだかどうかを

>足りないビットを付け足す感じです
 このあたりは、ビット毎に用途が分かれていたり、選択肢用の別ファイルとか
ちょっと意味がわからなかったんですけど……。


>ビット位置にどのようにビットの修正を行うのか記録するのが理想的と思いました
 どのビットというか、理想はページIDから……ID 10だったら、オフセット 1バイト 2ビット目とか
計算で求めるのがいいでしょうね。


>でもいろいろミスが起きて大変なことになりそうですね
 しっかりとしたツールを作ればそういうこともないように思うんですけど、
どういうミスを想定されていますか?


>ビット
>ID記録方針やっぱりいいのかな
 既読フラグをビットにしただけでいうほどデバッグが難しくなるとは
思えないのですが、特にビットである必要はないのでそのあたりは環境とお好みで。

 結局のところその環境で動けばいいので、ID記録の方がやりやすいのであれば
それで問題ないとは思います。


399ポイント を手に入れた。

Name: Ma  ..比類無きプログラマー(94,004ポイント)   Date: 2010/05/04(火) 14:57   No:51598 解決!     
Title: Re:既読文 判定    
> どのビットというか、理想はページIDから……ID 10だったら、オフセット 1バイト 2ビット目とか 
>計算で求めるのがいいでしょうね。 

なるほど、そういうことでしたか。
誤解していました。すいません。
それなら、↑のよくわからないと言っていたのは、気にしないでください。
私の早とちりとかってな想像でしたw

>どういうミスを想定されていますか? 
ビットがずれたり、とかって考えてましたが、私が誤解していたようなので、解決しました。


たしかに、ID割り振って、保存するときは、IDのビットに行けばいいというわけですね。
すごく効率的に思えてきました。
あとは、IDがかぶらなければOKですね。

この方法が最善だと思います、ありがとうございました。
主目的が達成できたので解決にします。

ところで、ビット単位の計算って、char型配列が一般的でしょうか?
char配列だったとして、何百何十何ビット目のフラグをオンにする場合、

int flag = 1;
flag = flag << (ビット数%8);
char[ビット数/8] = char[ビット数/8] | flag;
↓//だから
char[ビット数/8] = char[ビット数/8] | (1 << (ビット数%8));

char[ビット数/8] |= (1 << (ビット数%8));
こんな感じでいいんでしょうか?
(ビット数は0から始まります。)

間違いがあればご指摘よろしくお願いします。 編集済み


12ポイント を手に入れた。

Name: Justy  ..伝説なるハッカー(527,795ポイント)   Date: 2010/05/04(火) 15:29   No:51600     
Title: Re:既読文 判定    
>char型配列
 unsigned char型で。
 エンディアンの問題がないなら unsigned intでも。

 あとはリリースまでにきっちりと将来必要なフラグの数が決められるなら配列でいいですし、
そうでないなら vectorなどの可変長で(その場合セーブデータには要素数も書き込む)。


>計算
 それで問題ないです。
 ただ 8という定数は CHAR_BITを使った方がよりいいですね。


166ポイント を手に入れた。

Name: Ma  ..比類無きプログラマー(94,063ポイント)   Date: 2010/05/05(水) 01:15   No:51623 解決!     
Title: Re:既読文 判定    
なるほど、よくわかりました。vector もよさそうですね。
次の機会があった時はこの方針にしてみます。
ありがとうございました。


59ポイント を手に入れた。



Name: サンタクロース  ..初心者(6,970ポイント)   Date: 2010/05/04(火) 19:33   No:51606       
Title: ボス戦前の会話イベントの作り方    
こんばんわ。サンタクロースです。
今回はボス戦前の会話イベントを実装しようと思っています。
いちおう会話の実装を龍神録さんのエフェクトを実装するように
作っていこうと思ったのですが、一回の会話(ボタンを押すまでの?)
を1つのエフェクトとすると、2、30個くらいになりものすごく無駄が出来てしまいますよね。
そこでもっと汎用的で無駄のないような実装の仕方はないでしょうか?
考え方だけでも教えてくれるとありがたいです。
 編集済み


183ポイント を手に入れた。


Name: ひよこ  ..比類無きプログラマー(82,490ポイント)   Date: 2010/05/04(火) 19:56   No:51607     
Title: Re:ボス戦前の会話イベントの作り方    
龍神録の場合です。
会話が始めるカウントになったら、
func_stateを変更して会話処理だけを行えばいいと思います。
わかりづらいかもしれないので
軽くこんな感じです。
switch(func_state){
case ゲームメイン:
break;
case 会話処理:
break;
}


68ポイント を手に入れた。

Name: Justy  ..伝説なるハッカー(528,052ポイント)   Date: 2010/05/04(火) 20:01   No:51609     
Title: Re:ボス戦前の会話イベントの作り方    
>1つのエフェクトとすると、2、30個くらいになりものすごく無駄が出来てしまいますよね
 何十個あったところで、文字とかフェイスが異なるとか細かな点しか違いはないのでは?
 
 であればその1つのエフェクトのパラメータに表示する文字とか変えたいパラメータを
外部から指定できるようにつくっておけば、パラメータだけ変えてそのエフェクトを何十回と
起動すればいいだけになります。


 サウスさんの支館の方で、龍神録にノベルズシステムを実装している例がありますので、
そちらも参考にしてみるといいかもしれません。

サウンドノベルシステムを実装しよう - 龍神録プログラミングの支館
http://sinkai.net/rp/19.php
 編集済み


257ポイント を手に入れた。

Name: サンタクロース  ..初心者(7,164ポイント)   Date: 2010/05/04(火) 22:58   No:51617 解決!     
Title: Re:ボス戦前の会話イベントの作り方    
お二人ともありがとうございます。
自分はいちいち会話イベントになったら時間を止めて、というふうに
考えていましたがfunc_stateの値を変えればよかったのですね。
これなら視野的にも区切りのついたような感じで非常に見やすいですね。
内容についてですが、無事うまくいっています^^。
画像はまだ加工やらなにやら残ってますが、文章のほうは正常に表せたので成功といってもよいとおもいます。


194ポイント を手に入れた。



Name: ゆうき  ..かけだし(1,602ポイント)   Date: 2010/05/03(月) 12:21   No:51533       
Title: 今日DXライブラリ導入したのですが‥    
VC++2008を使っています。
今日、DXライブラリ VisualC++用(Ver3.02c)を導入した初心者です。

第1章の最初の方で

「DxLib_VC2008_and_2005用.sln」を開きます。

とあるのですが、このフォルダが見当たりません。
なので、チャイナドレスの女の子を出現させるプログラムを呼びだせないでいます。

チャイナドレスの女の子の画像が格納されているのはわかるのですが‥。
解決法をご教授下さい。<m(__)m>


198ポイント を手に入れた。


Name: Justy  ..伝説なるハッカー(527,030ポイント)   Date: 2010/05/03(月) 12:52   No:51535     
Title: Re:今日DXライブラリ導入したのですが‥    
 フォルダがないのですか? それとも「DxLib_VC2008_and_2005用.sln」ファイルがないのですか?

 「DxLib_VC2008_and_2005用.sln」ファイルがあるはずの「サンプルプログラム実行用フォルダ」がない
のであればDXライブラリのインストールに失敗している可能性があります。
 再度DL・インストールしてみてください。

「サンプルプログラム実行用フォルダ」はあるけど「DxLib_VC2008_and_2005用.sln」がないのであれば
それは説明が記述された時点での DXライブラリでの説明なので、異なるバージョンを使用する場合は
説明が食い違うことがあります。
 そのあたりは適当に類推して進める必要があります。

 DxLib_VC2008_and_2005用.slnはなくても、slnの拡張子を持つファイルは幾つかあるはずです。
 ご使用の VisualC++のバージョンに合わせて適切なものを開いてみてください。


314ポイント を手に入れた。

Name: ゴルスラ  ..かけだし(1,092ポイント)   Date: 2010/05/03(月) 13:41   No:51540     
Title: Re:今日DXライブラリ導入したのですが‥    
DxLib_VC2008_and_2005用.sln は無いので、DxLib_VC2008用.slnを使用してください。
VisualC++ 2010でも使用可能です。


32ポイント を手に入れた。

Name: ゆうき  ..かけだし(1,630ポイント)   Date: 2010/05/04(火) 14:26   No:51597     
Title: Re:今日DXライブラリ導入したのですが‥    
ご回答ありがとうございます。


なんとかやってみます。


28ポイント を手に入れた。

Name: Dixq (管理人) [URL]  ..ウィザード(1,182,446ポイント)   Date: 2010/05/04(火) 17:43   No:51601     
Title: Re:今日DXライブラリ導入したのですが‥    
よく同じ質問があるので、0章の内容修正しました。
いつまでもXPの画面だっていうのもあれですし、いつか画像を全部新しくしたい気もしますが、
なかなか量が多いので・・。


15ポイント を落としてしまった。

Name: softya [URL]  ..ハッカー(156,419ポイント)   Date: 2010/05/04(火) 17:59   No:51602     
Title: Re:今日DXライブラリ導入したのですが‥    
>>Dixq (管理人)さんへ。

既にVisualC++ExpressEdtionが2010になっているんで、出来ればそこの説明も直された方が良いかと。
画像は無理でも、テキストだけでも。

VisualC++2008ExpressEdtioオフライン版はありますが、WEBインストール版はサイトが行方不明。
http://www.microsoft.com/japan/msdn/vstudio/2008/product/express/offline.aspx



150ポイント を手に入れた。

Name: Dixq (管理人) [URL]  ..ウィザード(1,182,670ポイント)   Date: 2010/05/04(火) 19:15   No:51604     
Title: Re:今日DXライブラリ導入したのですが‥    
> softyaさん

おぉ、もうリリースされたのですか^^
ありがとうございます。
DXライブラリに同梱されているプロジェクトファイルも近々更新されるかもしれませんね。
説明書き修正しますね。ご意見ありがとうございます。


99ポイント を落としてしまった。



Name: sleepy-T  ..ぴよぴよ(576ポイント)   Date: 2010/05/03(月) 22:18   No:51559       
Title: 剣の振り下ろしの描写    
2回目の投稿です。
ここの紹介してる環境でげーむを作っているのですけど、剣の振り下ろしの描写で悩んだので質問させていただきます。
剣を振り下ろすのを上から見たかんじにすると、何をしているかわかりにくくなるんですが、いい方法はないでしょうか。
ちなみに今は画像を縦に拡大縮小させてそんな感じ見せています。


138ポイント を手に入れた。


Name: softya [URL]  ..ハッカー(155,584ポイント)   Date: 2010/05/03(月) 23:02   No:51563     
Title: Re:剣の振り下ろしの描写    
絵がないのでなんとも言えないのですが、剣の軌跡を書いちゃダメですか?
後縦切りを止めて横切りにすると言うのも手です。


54ポイント を手に入れた。

Name: DVDM [URL]  ..熟練のプログラマー(52,779ポイント)   Date: 2010/05/03(月) 23:04   No:51564     
Title: Re:剣の振り下ろしの描写    
>>sleepy-Tさん
剣を振り下ろす動作をイメージしながら
剣の動きを追ってみるとそれっぽくなる気がします(例えば剣道の素振りなど)

ゲームボーイのゼルダを例に挙げてみますと
キャラの前に剣を描写して振ってるように見せてたような気がします。

もうすこし滑らかな動作が必要であれば
剣を振り下ろしていくアニメーション(絵)を用意すればいいのではないかと思います。
(例えば剣を振り下ろした時の軌跡など)

また、振り切った後に切れた・切れなかった、音等のエフェクトがあれば
尚、振ったように見えると思います。


172ポイント を手に入れた。

Name: sleepy-T  ..ぴよぴよ(635ポイント)   Date: 2010/05/04(火) 00:40   No:51570     
Title: Re:剣の振り下ろしの描写    
>>softyaさん
軌道は描写するつもりです。
横切りと縦切り両方分けて作ろうと思っています。

視点を完全に真上からにしたいんですけど難しいでしょうか?


59ポイント を手に入れた。

Name: softya [URL]  ..ハッカー(155,847ポイント)   Date: 2010/05/04(火) 00:52   No:51571     
Title: Re:剣の振り下ろしの描写    
>視点を完全に真上からにしたいんですけど難しいでしょうか?

キャラクタの大きさを大きめにとって剣のアクションが見えるようにすれば問題ないと思います。
立ちキャラが32x32ぐらいだとしたら、剣を含めたグラフィックの大きさを96x96ぐらいにするとか。



127ポイント を手に入れた。

Name: sleepy-T  ..ぴよぴよ(681ポイント)   Date: 2010/05/04(火) 01:12   No:51574     
Title: Re:剣の振り下ろしの描写    
横切りはそれでいけると思うんですが、縦切りはそれでいけるのでしょうか?
できればアニメーションをつかわず、汎用性のあるものにしたいです。


46ポイント を手に入れた。

Name: Ma  ..比類無きプログラマー(92,306ポイント)   Date: 2010/05/04(火) 03:57   No:51575     
Title: Re:剣の振り下ろしの描写    
アニメーションも十分汎用性があると思いますけどね。
アニメーションがなしでは、このような表現は難しいと思います。

それはともかく、遠近法を用いて上に振り上げたときに大げさに表現、その後振り下げるときは縮小。
振るとき以外は、剣をしまっているように描画すれば、さらに振っている感がでそう。
あと、風を切るエフェクト(画像と音)もあるといい。縦と横で別々にすると、違いが出やすいと思う。

アニメーションが駄目なら、、、、まぁがんばってw


200ポイント を手に入れた。

Name: sleepy-T  ..ぴよぴよ(773ポイント)   Date: 2010/05/04(火) 15:29   No:51599 解決!     
Title: Re:剣の振り下ろしの描写    
>>Maさん
なるほど確かにわかりやすく縦切りにするにはアニメーションのほうが労力少なそうですねw。
今回はアニメーションでやりたいとおもいます、皆さんありがとうございました。


92ポイント を手に入れた。



Name: アトラス  ..初心者(5,646ポイント)   Date: 2010/05/03(月) 01:35   No:51517       
Title: for文で、複数の処理を纏めて書くと処理が重くなってしまいます    
メッセージウィンドウを作る自作関数でちょっと悩んでいます。

x1,y1→ウィンドウの左上の座標
x2,y2→ウィンドウの右下の座標


void window(int x1,int y1,int x2,int y2){
    int i,t1,t2;



    DrawGraph(x1,y1,win.hidariue,true);//左上
    DrawGraph(x2-5,y1,win.migiue,true);//右上
    DrawGraph(x1,y2-5,win.hidarishita,true);//左下
    DrawGraph(x2-5,y2-5,win.migishita,true);//右下
    DrawExtendGraph(x1+5,y1+5,x2-5,y2-5,win.dot,true);//中心部分

    t1=GetNowCount();

    for(i=x1+5;i<x2-5;i++)
        DrawGraph(i,y2-5,win.shita,true);//下部分


    for(i=x1+5;i<x2-5;i++)
        DrawGraph(i,y1,win.ue,true);//上部分


    t1 = GetNowCount()-t1;

    t2=GetNowCount();

    for(i=y1+5;i<y2-5;i++)
        DrawGraph(x2-5,i,win.migi,true);//右部分


    for(i=y1+5;i<y2-5;i++)
        DrawGraph(x1,i,win.hidari,true);//左部分


    t2=GetNowCount()-t2;
    DrawFormatString(10,10,black,"%d %d",t1,t2);


}
と書いた場合と
void window(int x1,int y1,int x2,int y2){
    int i,t1,t2;



    DrawGraph(x1,y1,win.hidariue,true);//左上
    DrawGraph(x2-5,y1,win.migiue,true);//右上
    DrawGraph(x1,y2-5,win.hidarishita,true);//左下
    DrawGraph(x2-5,y2-5,win.migishita,true);//右下
    DrawExtendGraph(x1+5,y1+5,x2-5,y2-5,win.dot,true);//中心部分

    t1=GetNowCount();

    for(i=x1+5;i<x2-5;i++){
        DrawGraph(i,y1,win.ue,true);//上部分
        DrawGraph(i,y2-5,win.shita,true);//下部分
    }



    t1 = GetNowCount()-t1;

    t2=GetNowCount();

    for(i=y1+5;i<y2-5;i++){
        DrawGraph(x1,i,win.hidari,true);//左部分
        DrawGraph(x2-5,i,win.migi,true);//右部分
    }


    t2=GetNowCount()-t2;
    DrawFormatString(10,10,black,"%d %d",t1,t2);


}


と書いた場合で、処理速度がかなり違います

前者はt1,t2ともに1ミリ秒以下なのに対し、後者はt1,t2ともに16ミリ秒を超えています・・・。

一つのfor文の中身はなるべく少なくなるようにした方がいいのでしょうか?


1,120ポイント を手に入れた。


Name: ookami  ..初心者(8,780ポイント)   Date: 2010/05/03(月) 06:00   No:51521     
Title: Re:for文で、複数の処理を纏めて書くと処理が重くなってしまいます    
おはようございます。

上記の2つの例なら、違いはないです(強いて言えば前者の方が重いはずですが、微々たる物です)。おそらく時間計測の精度の問題ですね。

GetNowCountは「ミリ秒単位で返す」とヘルプにもありますが、環境によって(だったかな?)精度が違います。こちらの環境では「約16ミリ秒」単位になります。例えば以下のプログラムを走らせると、よく分かると思います。

for(i=0;i<1000;i++) {
    printf("%d\n",GetNowCount());
}

出力結果は「滑らかな上昇」ではなく、「約16msごとに階段状に上昇」になるはずです。


213ポイント を手に入れた。

Name: ru-pu  ..かけだし(1,155ポイント)   Date: 2010/05/03(月) 20:19   No:51551     
Title: Re:for文で、複数の処理を纏めて書くと処理が重くなってしまいます    
DXライブラリの高速描画手法の一つとして同じ画像をなるべく連続して描画するというのがあったはずです。
前者の方は同じ画像を連続して描画しているのに対して後者は1ループ中に違う画像を描画しているから
前者の方が高速に動作しているのではないでしょうか?
一見後者の方がfor文の数が少なくて高速に動作するように見えまずが、何回計測しても同じ結果が
出るのでしたら多分画像の連続描画による高速化の方がfor文の数を減らすよりも処理負荷軽減効果が
大きいということだと思います。 編集済み


119ポイント を手に入れた。

Name: アトラス  ..初心者(5,719ポイント)   Date: 2010/05/04(火) 00:53   No:51572 解決!     
Title: Re:    
>DXライブラリの高速描画手法の一つとして同じ画像をなるべく連続して描画するというのがあったはずです。 

なるほど、そういうことだったんですね、納得行きました。

お二人とも回答ありがとうございました。


73ポイント を手に入れた。



Name: ライス  ..初心者(5,090ポイント)   Date: 2010/05/03(月) 11:58   No:51531       
Title: 32×48のキャラクターチップ    
ゲームプログラミングの館で学習しているのですが、24章の"いけないところを作る。〜2D〜"について質問です。
普通の32×32のキャラクターチップではできたのですが、32×48のキャラクターチップではできませんでした。
いけないところは白い壁になっているのですが、上から白い壁に行くとキャラクターの1/3が白い壁に入ってしまいます。
どうすればいいのでしょうか?
分かる方は、ご教授をよろしくお願いします。

(ソース)
#include "DxLib.h"
 
typedef struct{
        int x,y,img,muki,walking_flag;
}ch_t;
 
int hantei[15][20] = {
        { 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 },
        { 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 },
        { 1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1 },
        { 1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1 },
        { 1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1 },
        { 1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1 },
        { 1,1,1,1,1,0,0,0,0,0,1,0,0,0,0,0,0,0,1,1 },
        { 1,1,1,1,1,0,0,0,0,0,1,0,0,0,0,0,0,0,1,1 },
        { 1,1,1,1,1,0,0,0,0,0,1,0,0,0,1,0,0,0,1,1 },
        { 1,1,1,1,1,0,0,0,1,1,1,0,0,0,1,0,0,0,1,1 },
        { 1,1,1,1,1,0,0,0,0,0,0,0,0,0,1,0,0,0,1,1 },
        { 1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1 },
        { 1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1 },
        { 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 },
        { 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 },
};
 
int can_or_cannot(int x,int y,int muki){
        if(muki==3)
                if(hantei[y/32-1][x/32]==1)
                        return 1;
        if(muki==1)
                if(hantei[y/32][x/32-1]==1)
                        return 1;
        if(muki==0)
                if(hantei[y/32+1][x/32]==1)
                        return 1;
        if(muki==2)
                if(hantei[y/32][x/32+1]==1)
                        return 1;
        return 0;
}
 
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow ){
        
    int image[16],i,j;
    char Key[256];
    ch_t ch;
 
    if( ChangeWindowMode(TRUE) != DX_CHANGESCREEN_OK || DxLib_Init() == -1 ) return -1;
 
    ch.x    =320;
    ch.y    =160;
    ch.walking_flag=0;
    ch.muki=3;
 
    SetDrawScreen( DX_SCREEN_BACK ) ;
    LoadDivGraph( "$vx_chara09_d2.png" , 16 , 4 , 4 , 32 , 48 , image ) ;
 
    while(!ProcessMessage() && !ClearDrawScreen() && !GetHitKeyStateAll( Key ) && !Key[KEY_INPUT_ESCAPE]){
 
                for(i=0;i<15;i++)
                        for(j=0;j<20;j++)
                                if(hantei[i][j]==1)
                                        DrawBox(j*32,i*32,(j+1)*32,(i+1)*32,GetColor(255,255,255),TRUE);
 
                if(ch.x%32==0 && ch.y%32==0){
            ch.walking_flag=1;
            if     ( Key[ KEY_INPUT_UP   ]  == 1 )
                    ch.muki=3;
            else if( Key[ KEY_INPUT_LEFT ]  == 1 )
                    ch.muki=1;
            else if( Key[ KEY_INPUT_DOWN ]  == 1 )
                    ch.muki=0;
            else if( Key[ KEY_INPUT_RIGHT]  == 1 )
                    ch.muki=2;
            else
                    ch.walking_flag=0;
            if(ch.walking_flag==1)
                if(can_or_cannot(ch.x,ch.y,ch.muki)==1
                    ch.walking_flag=0;
        }
 
        if(ch.walking_flag==1){
            if     (ch.muki==3)
                    ch.y--;
            else if(ch.muki==1)
                    ch.x--;
            else if(ch.muki==0)
                    ch.y++;
            else if(ch.muki==2)
                    ch.x++;
        }
 
        ch.img=image[(ch.x%32+ch.y%32)/8 + ch.muki*4];
 
        DrawGraph( ch.x , ch.y , ch.img , TRUE ) ;
 
        ScreenFlip();
    }
 
    DxLib_End();
    return 0;
}

(補足)
・使用しているキャラクターチップは、http://www.tekepon.net/fsm/のREFMAPが配布しているフリー画像素材です。 よって、著作権はREFMAPに帰属します。 
・開発環境は、"Microsoft Visual C++ 2008 Express Edition"です
・ライブラリは、"DXライブラリ"です。


2,101ポイント を手に入れた。


Name: ookami  ..中級者(9,044ポイント)   Date: 2010/05/03(月) 13:08   No:51536     
Title: Re:32×48のキャラクターチップ    
こんにちわ。1/3というのは下1/3(32ドット目より下)ということですよね?

回答として以下の二つが考えられるのですが、ライスさんはどちらをイメージしているのでしょうか。

1. 地形判定はあくまで32*32

マップを斜めから見ているイメージで、キャラクタの頭らへんは壁に重なって見えるのでよいのであれば、

DrawGraph( ch.x , ch.y , ch.img , TRUE ) ; 

DrawGraph( ch.x , ch.y-16 , ch.img , TRUE ) ; 

でいいと思います。


2. 頭も壁に重ならないようにする

こっちだとちょいと複雑になりますね。まずは、1と2のどちらか回答いただけますか?


264ポイント を手に入れた。

Name: ライス  ..初心者(5,099ポイント)   Date: 2010/05/03(月) 13:28   No:51538     
Title: Re:32×48のキャラクターチップ    
1番のほうイメージしてます。
1番の方法は、ちゃんとできました!

ちなみに、2番の方法はどうやるのですか?
知っておいたら使えそうなので、よろしければ教えてくださいm(_ _)m 編集済み


9ポイント を手に入れた。

Name: ookami  ..中級者(9,210ポイント)   Date: 2010/05/03(月) 21:23   No:51554     
Title: Re:32×48のキャラクターチップ    
そうですね... can_or_cannot関数を改造する感じになるでしょうかね。

キャラのサイズが32*32なのを前提に作られているので、まずはこれをパラメータに追加

int can_or_cannot(int x,int y,int muki)

int can_or_cannot(int x,int y,int sizex,int sizey,int muki)

で、can_or_cannotの中身も32*32が前提の(常に目の前の1マスだけチェックすればよいような)作りになっているので、sizex, sizey がそれぞれ 33〜64なら2マスチェック、65〜96なら3マス... のように処理を変更する、といった感じでしょうか。

必要ならもっと詳しく書きます。


166ポイント を手に入れた。

Name: ライス  ..初心者(5,152ポイント)   Date: 2010/05/03(月) 22:01   No:51557 解決!     
Title: Re:32×48のキャラクターチップ    
ありがとうございます^^
まだ私には難しそうなので、もう少し技術が上達してから必要ならば調べるなり、質問するなりします。

今回は本当にありがとうございましたm(_ _)m
とても助かりました!


53ポイント を手に入れた。



Name: dic  ..熟練のプログラマー(66,324ポイント)   Date: 2010/05/03(月) 16:43   No:51543       
Title: ディレクトリが作成されない    
またまたお世話になります
現在ディレクトリを作成する関数 CreateDirecoty を呼んでいるのですが
エラーコード:123
ERROR_INVALID_NAME 123 0x0000007B ファイル名、ディレクトリ名、またはボリューム ラベルの構文が間違っています。 
がでてディレクトリが作成できないです

以下がソースですが どこがいけないのでしょうか?
ディレクトリ名に全角のスペースを入れて手作業で作ってみたのですが作成できるようで
特にこれといったディレクトリ名に関して問題ないと考えているのですが
どこかに問題があるのでしょうか?

ファイルを読み込んで 最初の1行目をディレクトリにするという仕様です

void    Module160::Run()
{
    char    list[1024];
    int        i, j;
    for( i=1, j=1; i<=g_iEnd; i++ )
    {
        sprintf_s( list, "%d_list.txt", i );

        FILE    *file;
        fopen_s( &file, list, "rt" );

        char    directory[1024],    img_url[1024];
        memset( directory, 0, sizeof(directory) );
        fgets( directory, sizeof(directory), file );

        char    cur[1024];
        GetCurrentDirectoryA( sizeof(cur), cur );

        strcat_s( cur, "\\" );
        strcat( cur, directory );
//        CreateDirectory( tDir, NULL );
//        CreateDirectory( _T("test"), NULL );
        if( 0 == CreateDirectoryA( cur, NULL ) )
        {
            DWORD dw = GetLastError();
            printf( "failed.\n" );

        }

 編集済み


569ポイント を手に入れた。


Name: たかぎ [URL]  ..ハッカー(181,013ポイント)   Date: 2010/05/03(月) 16:46   No:51544     
Title: Re:ディレクトリが作成されない    
とりあえず、↓を読んでみると吉かも
http://www.kijineko.co.jp/tech/superstitions/gets-can-be-replaced-with-fgets-simply.html


2倍のポイントを手に入れた! 92ポイント を手に入れた。

Name: dic  ..熟練のプログラマー(66,426ポイント)   Date: 2010/05/03(月) 17:12   No:51545 解決!     
Title: Re:ディレクトリが作成されない    
たかぎさん
ヒントをありがとうございます

char cur[1024] の最後が \0 で終わっているので \0 を削除し
文字列の最後を 0 にしたらディレクトリが作成できました

        int    len = strlen(cur);
        cur[len-1] = 0;



102ポイント を手に入れた。



Name: ubu  ..ぴよぴよ(752ポイント)   Date: 2010/05/01(土) 15:20   No:51409       
Title: ヘッダー typedef structについて    
連日申し訳ありません。ubuです。

添付したファイルをgcc version 4.3.3でコンパイルすると、
以下のようにコンパイルエラーが出力されました。
make dep
make

g++  -c A.cpp 
In file included from A.cpp:4:
struct.h:3: error: conflicting declaration ‘typedef struct t_struct t_struct’
struct.h:3: error: ‘t_struct’ has a previous declaration as ‘typedef struct t_struct t_struct’

これはtypedef structが何度も定義されているからこのようになってしまっているのでしょうか?
また、struct.hで多重インクルードガードをつけると、
今度は2度目以降、struct.hを参照した時に、typedef structの実体が見えなくなり、
これもダメです。

どのようにすれば解決できるのでしょうか?


332ポイント を手に入れた。


Name: たかぎ [URL]  ..ハッカー(178,777ポイント)   Date: 2010/05/01(土) 15:32   No:51410     
Title: Re:ヘッダー typedef structについて    
二重インクルードを防止してください。



15ポイント を手に入れた。

Name: Justy  ..伝説なるハッカー(526,515ポイント)   Date: 2010/05/02(日) 01:46   No:51453     
Title: Re:ヘッダー typedef structについて    
>また、struct.hで多重インクルードガードをつけると、 
>今度は2度目以降、struct.hを参照した時に、typedef structの実体が見えなくなり、 
>これもダメです。 
 1回目の時に見えているのなら、2回目に見えてなくても問題ないのでは?


17ポイント を手に入れた。

Name: ubu  ..ぴよぴよ(845ポイント)   Date: 2010/05/03(月) 15:10   No:51541 解決!     
Title: Re:ヘッダー typedef structについて    
返事が遅れてしまい申し訳ありませんでした。

勘違いをしていたようです。
何とか解決しました。

少々規模が大きい故に相互インクルードを見逃していました。

ありがとうございました。
 編集済み


93ポイント を手に入れた。



Name: リョウ  ..ぴよぴよ(711ポイント)   Date: 2010/05/03(月) 01:24   No:51516       
Title: 16進数の表示    
すいませんまた質問します。
前に質問した
キーボードから入力した整数を n とする。アルファベット順で英小文字 'a' から 数えて n 番目の文字を印字するプログラムを作成せよ
という問題に下のような表示になるように16進数表示せよ
% ./ASCII
 Input integer: 18
 The charater away from 'a'(97) by 18 is 's'(115).
                           (0x61)           (0x73).
 %
という問題で16進数はどう表示すればいいのでしょうか?
osはlinuxで
コンパイラはgcc

途中のソースは
#include <stdio.h>

  # define BUFFER_SIZE (256)
  
  int get_int(void)
  {
    char buf[BUFFER_SIZE];

    fgets(buf, BUFFER_SIZE, stdin);

    return atoi(buf);
  }

#include <stdio.h>

int main(void)
{
  int a;
  char b, c;
  printf("Input integer: ");
  a = get_int();
    b = 97;
    c = 97 + a;
    if(a < 26) printf("The charater away from 'a'(97) by %d is '%c'(%d).\n", a, c, c)
           printf("                          (0x61)            ()");

    return 0;

}
です。


490ポイント を手に入れた。


Name: Justy  ..伝説なるハッカー(526,716ポイント)   Date: 2010/05/03(月) 02:07   No:51519     
Title: Re:16進数の表示    
 printfで出力するなら、変換指定子 xを使います。

    int a = 0;
    printf("0x%02x\n", a);


Manpage of PRINTF
http://www.linux.or.jp/JM/html/LDP_man-pages/man3/printf.3.html


71ポイント を手に入れた。

Name: リョウ  ..ぴよぴよ(803ポイント)   Date: 2010/05/03(月) 04:23   No:51520     
Title: Re:16進数の表示    
すいません。質問を少し間違えました。
私が聞きたいのは、アルファベットaからn番目のアルファベット
を表示している変数cを16進数ではどう表示するかです。
10進数は数字を足すだけなのでわかるんですが
16進数はたとえばzなら0x7aとアルファベットが入っているので
よくわからないのです。


92ポイント を手に入れた。

Name: box  ..ハッカー(152,558ポイント)   Date: 2010/05/03(月) 06:28   No:51522     
Title: Re:16進数の表示    
> 16進数はたとえばzなら0x7aとアルファベットが入っているので
> よくわからないのです。

じゃあ、0x0f + 0x01 を手で計算できますか?


17ポイント を手に入れた。

Name: リョウ  ..ぴよぴよ(827ポイント)   Date: 2010/05/03(月) 08:38   No:51523     
Title: Re:16進数の表示    
できないと思いますが、
できるとすれば0x0(f+1)ですか?


24ポイント を手に入れた。

Name: たいちう  ..比類無きプログラマー(78,885ポイント)   Date: 2010/05/03(月) 09:13   No:51526     
Title: Re:16進数の表示    
10進数から16進数への変換とその逆変換を、手で計算できますか?
boxさんの式の各項を10進数に変換し、10進数の足し算をし、
和を16進数に変換するとどうなりますか?


72ポイント を落としてしまった。

Name: たかぎ [URL]  ..ハッカー(180,393ポイント)   Date: 2010/05/03(月) 10:52   No:51530     
Title: Re:16進数の表示    
16進数(16進法)がどういうものなのか、もう一度勉強しなおすことをお勧めします。
# 私の世代では、中学1年の数学で習ったんですけどね。


30ポイント を手に入れた。

Name: リョウ  ..ぴよぴよ(857ポイント)   Date: 2010/05/03(月) 12:11   No:51532     
Title: Re:16進数の表示    
私の学校では16進数をまったく勉強しなかったです...
0x0f + 0x01 = 0x10
こうですか?


30ポイント を手に入れた。

Name: たかぎ [URL]  ..ハッカー(180,921ポイント)   Date: 2010/05/03(月) 12:35   No:51534     
Title: Re:16進数の表示    
> 私の学校では16進数をまったく勉強しなかったです... 

それはそうでしょう。
中学1年生の1学期で、N進法と集合論を教えられたのは、昭和46年から54年までの9年間だけですから(私はその最後の年でした)。
N進法を習っていなければ、16進数や2進数といきなりいわれてもわからないのは当然ですし、集合論を習っていなければ、論理演算もにわかには理解できませんね。

> 0x0f + 0x01 = 0x10 
> こうですか?

そうです。
16進法では、0〜15で1桁を表します。
ただし、10〜15を1文字で表すために、A〜F(小文字でもOK)を使うわけです。
そして、Fの次は桁が上がって10になります。
前に0xが付くのはC言語(というかUNIX)の流儀で、数学的には(10)16と表記しますし、BASICなら&H10、多くのアセンブリ言語では10Hと表記します。中には、$10とか、H'10と表記するものもあります。

ちなみに普段使っている10進法は、両手の指が10本だから使われるようになったもの(人間の片手の指が5本なのは、最初の脊椎動物、つまり魚の胸びれの骨が5本だったから)で、たまたまです。
一方、土地などの分割の便宜から、12進法を使っていた地域もあります。英語でelevenやtwelveがthirteen以降と明らかに異なる表現なのは12進法の影響といわれていますし、ヤード・ポンド法やダースなどの単位系も12進法です。
コンピュータが2進法を使うのも、ハードウェアを設計する上でその方が便利だったからです。


528ポイント を手に入れた。

Name: リョウ  ..ぴよぴよ(875ポイント)   Date: 2010/05/03(月) 13:41   No:51539 解決!     
Title: Re:16進数の表示    
みなさん返信ありがとうございます。
おかげさまで理解することができ、完成しました!
これから進数をもっと自習しようと思います。
またよろしくお願いいたしますm(--)m


18ポイント を手に入れた。



Name: ムンバ  ..プログラマー(36,508ポイント)   Date: 2010/05/01(土) 22:58   No:51425       
Title: C言語での bool の分類や使い方などについて    
こんばんは。いつもお世話になります。

C言語での bool の分類や使い方が解りません。

昨日から、検索エンジンで調べまくってるのですが
検索の仕方が悪いのかもしれません。^^;
手持ちの本にも記載されていませんでした。<古いからかもです?

検索で調べたサイト内での、ご解説に
boolの分類?だと思われるもの

・基本データ型
・真偽値型
・bool関数
・bool型
・真か偽かを扱う型(とも言えます。)
・trueかfalseの何れかを取る変数

などなどが記述されてありました。

C言語での bool の分類(種類)を
私の様な、C言語初心者にも解る様に、ご指導頂ける方
ご解説の程、宜しくお願い致します。

Q1:bool のC言語初心者に対する一般的な分類をお聞きしたいです。
  うまくお伝えできなければ申し訳御座いません。

Q2:C言語初心者が、bool を、もしも必要とした時
  どういう時に bool を使ったら良いのか
  ご指導頂ける方がいらっしゃれば、宜しくお願い致します。



310ポイント を手に入れた。


Name: たかぎ [URL]  ..ハッカー(178,874ポイント)   Date: 2010/05/01(土) 23:06   No:51427     
Title: Re:C言語での bool の分類や使い方などについて    
> Q1:bool のC言語初心者に対する一般的な分類をお聞きしたいです。 
>   うまくお伝えできなければ申し訳御座いません。 

マクロです。

> Q2:C言語初心者が、bool を、もしも必要とした時 
>   どういう時に bool を使ったら良いのか 
>   ご指導頂ける方がいらっしゃれば、宜しくお願い致します。 

真偽値を使いたいときで、かつC99以上に対応したコンパイラが使える場合です。
また、C90やC95への移植性に配慮する場合は使うべきではありません。


60ポイント を手に入れた。

Name: バグ  ..ハッカー(196,109ポイント)   Date: 2010/05/01(土) 23:09   No:51428     
Title: Re:C言語での bool の分類や使い方などについて    
ON・OFF、OK・NG、成功・失敗など二者択一の場合に使うのが一般的かと思われます。
戻り値が1か0しかありえない関数なんかだと、bool型にしてしまった方が分かりやすいかもしれませんね。
ただ、bool型でなければいけない状況というのは思い付かないです。


126ポイント を手に入れた。

Name: ムンバ  ..プログラマー(36,905ポイント)   Date: 2010/05/02(日) 00:14   No:51443     
Title: Re:C言語での bool の分類や使い方などについて    
たかぎさん、バグさん、早速のご解説どうもありがとう御座います。

私の環境を書き忘れていました。すみません。
Windows7(Pro 32bit) 
Microsoft Visual Studio 9.0

>たかぎさん
 ご解説頂きありがとうございます。
 bool の分類は、マクロ と言う分類で宜しいのでしょうか?

 >>真偽値を使いたいときで、かつC99以上に対応したコンパイラが使える場合です。 
 >>また、C90やC95への移植性に配慮する場合は使うべきではありません。 
  初心者の範囲?を、どう受け止めるかとかは別にしたいと思うのですが
  (生意気言って、すみません。<(_ _)>)
 >C90やC95への移植性に配慮する場合
  私の様な初心者には、理解できないのです。申し訳御座いません。

>バグさん
 Dixqさんの、サンプルプログラミングの館にある「ぷよぷよもどき」
 暇つぶしとは失礼かと思いますが・・・ごめんなさい。<(_ _)>
 自宅でも職場でも、遊ばせて頂いています。
 ありがとうございます。
 
 >>ただ、bool型でなければいけない状況というのは思い付かないです。

 bool は、最初はCにはなくて、C++に boolが入って?から
 後からC言語に追加されたと、ご解説されてるサイトがありました。
 
bool : 真(True)と偽(False)の二つの値しか持たない。

bool が気になったので質問させて頂きましたが
使い方が解らないし、使う必要が無い場合には、
使い方が解らないんだったら、使わない方がいい。
って感じで、自己処理しても宜しいでしょうか?
何とも bool 扱い方が難しいです。

ご解説、ありがとう御座いました。<(_ _)>


397ポイント を手に入れた。

Name: たかぎ [URL]  ..ハッカー(179,121ポイント)   Date: 2010/05/02(日) 00:28   No:51446     
Title: Re:C言語での bool の分類や使い方などについて    
> bool の分類は、マクロ と言う分類で宜しいのでしょうか? 

Cの場合はそうです。
ただし、C99からしかサポートされません。
Visual Studio 2008はC99に対応していませんので、boolマクロは使えません。

> >C90やC95への移植性に配慮する場合 
>   私の様な初心者には、理解できないのです。申し訳御座いません。 

 早い話が、Visual Studio 2008のようなC99に対応していないコンパイラを使うのであれば、boolマクロは使えないということです。

boolマクロおよびその実体である_Bool型は、1と0以外の値になることはありませんので、どんな値になるか分からないint型より明確かつ安全です。
ですので、boolマクロ(または_Bool型)を使える状況であれば優先的にそれを使うべきです。
boolや_Boolが使えない状況というのは、Visual Studioのようにサポートしないコンパイラを使わざるを得ない場合だけです。


198ポイント を手に入れた。

Name: たかぎ [URL]  ..ハッカー(179,081ポイント)   Date: 2010/05/02(日) 00:30   No:51448     
Title: Re:C言語での bool の分類や使い方などについて    
一応確認しますが、本当にCでboolを使うかどうかという話しなのでしょうか?
(Cのような使い方しかしていないとしても)C++であればまったく話は別になります。


40ポイント を落としてしまった。

Name: ムンバ  ..プログラマー(36,993ポイント)   Date: 2010/05/02(日) 00:38   No:51449     
Title: Re:C言語での bool の分類や使い方などについて    
はっ・・・!?そうかっ!

>ON・OFF、OK・NG、成功・失敗など二者択一の場合に使うのが一般的かと思われます。

バグさん、理解できました。

今日は、ゆっくり寝れそうです。
どうもありがとうございました。^^ 編集済み


88ポイント を手に入れた。

Name: ムンバ  ..プログラマー(37,119ポイント)   Date: 2010/05/02(日) 00:46   No:51450     
Title: Re:C言語での bool の分類や使い方などについて    
たかぎさん、ごめんなさい!
解決ボタン、押しちゃいました。ガ━━(= ̄□ ̄=)━━ン!!

高木さんにレス頂いたの確認しないまま、レス「 No:51449 」してしまいました。<(_ _)>
すみません。後日、必ずご報告致します。
おやすみなさい。(涙


126ポイント を手に入れた。

Name: ムンバ  ..プログラマー(37,010ポイント)   Date: 2010/05/02(日) 15:05   No:51473     
Title: Re:C言語での bool の分類や使い方などについて    
こんにちは。
解決マーク済みのスレ(レス?)、申し訳御座いません。

たかぎさん、すみませんでした。
 No:51446のご解説ありがとうございます。
了解です!

>> 一応確認しますが、本当にCでboolを使うかどうかという話しなのでしょうか? 

はい。
14歳からはじめるC言語オンラインゲームプログラミング教室
という本の「C言語をおさらいしよう」と言う項目のソース内に
bool が出てきたので質問させて頂きました。


109ポイント を落としてしまった。

Name: たかぎ [URL]  ..ハッカー(179,464ポイント)   Date: 2010/05/02(日) 16:17   No:51480     
Title: Re:C言語での bool の分類や使い方などについて    
> 14歳からはじめるC言語オンラインゲームプログラミング教室 

その本はDXライブラリを使うのでは?
それなら、CではなくC++ですよ。


32ポイント を手に入れた。

Name: ムンバ  ..プログラマー(37,170ポイント)   Date: 2010/05/02(日) 18:52   No:51488     
Title: Re:C言語での bool の分類や使い方などについて    
ええっ!?
確かに、DXライブラリを使ってC言語で・・・?^^;
C++なんですか?
C言語ってC++も含むんですか?Cだけじゃなく???(激汗
 ↑ この辺、これから調べてみます。^^

以前、こちらの掲示板で、たがきさんがおっしゃられていた様に
CとC++の区別をしっかり分けた方がいい
と言う様な事をおっしゃってましたが・・・。

そうでしたか。
色々なご解説、本当にありがとう御座いました。
勉強になります!
この本は、このまま続けます。

長々とすみませんでした。
また解らない事があれば(できる限り自力でとは思ってますが)
質問させて頂きますので、その節は宜しくお願い致します。
ありがとうございました。 編集済み


160ポイント を手に入れた。

Name: たかぎ [URL]  ..ハッカー(179,995ポイント)   Date: 2010/05/02(日) 18:59   No:51491     
Title: Re:C言語での bool の分類や使い方などについて    
> 確かに、DXライブラリを使ってC言語で・・・?^^; 
> C++なんですか? 

その本の中は見ていませんが、C++でしょうね。
強引にライブラリをラップしてCで使えないこともないでしょうが...

> C言語ってC++も含むんですか?Cだけじゃなく???(激汗 

含みません。
CとC++は似て非なる別の言語です。


2倍のポイントを手に入れた! 126ポイント を手に入れた。

Name: たかぎ [URL]  ..ハッカー(180,038ポイント)   Date: 2010/05/02(日) 19:01   No:51492     
Title: Re:C言語での bool の分類や使い方などについて    
C++の場合、boolは基本型のうちの汎整数型にあたります。
マクロではありません。


43ポイント を手に入れた。

Name: ムンバ  ..プログラマー(37,248ポイント)   Date: 2010/05/02(日) 19:44   No:51494     
Title: Re:C言語での bool の分類や使い方などについて    
早速のご返信、ありがとうございます。

了解しました!何度も、すみませんでした。<(_ _)>
この先、C++も余力があれば勉強してみたいと思ってます。

何度もしつこいですが、本当にありがとうございました。(感謝 編集済み


78ポイント を手に入れた。

Name: たかぎ [URL]  ..ハッカー(180,055ポイント)   Date: 2010/05/02(日) 19:53   No:51495     
Title: Re:C言語での bool の分類や使い方などについて    
> この先、C++も余力があれば勉強してみたいと思ってます。 

というか、今やっているのはC++ですよね。


17ポイント を手に入れた。

Name: ムンバ  ..プログラマー(38,169ポイント)   Date: 2010/05/02(日) 22:24   No:51502     
Title: Re:C言語での bool の分類や使い方などについて    
勝手ながら、解決マークを解除させて頂きました。
この行為が規約違反でしたら、どうかご指導下さい。
悪意や嫌疑等は御座いませんので、ご了承下さい。
ご指導の程、宜しくお願い致します。<(_ _)>

>>というか、今やっているのはC++ですよね。

たかぎさん、うまくお伝えできなければ申し訳御座いません。
また、貴重なお時間を割いてのご解説、感謝致します。
C++が、C言語の後継?などと言う事は本で見た事がある。
程度のレベルですし、プログラミングは本職では無いので
どうぞお手柔らかにお願い致します。

私には今勉強している、この本の内容(ソースなど)がC言語であるかC++であるかの区別が付きません。
「14歳からはじめるC言語オンラインゲームプログラミング教室」と表題?にあったので・・・
つまり、書名内に「C言語」 とありましたので
内容が今まで勉強してきたC言語だと思って、この本をネット検索して購入しました。

今まで読んだ本は

・これからはじめるC言語の本(著者:朝井 淳)
・猫でもわかる C言語プログラミング(著者:灸井 康孝)

です。

この二冊の本に
C++が、ソース内や解説に有るのか無いのか自分には解りません。

「猫でもわかるC言語プログラミング」の本で、理解できない事があると
「苦しんで覚えるC言語」を参照させて頂き
それでもわからない事があると、検索エンジンで調べ
さらに解らない時は、こちらの掲示板にて質問させて頂いていました。

C言語を勉強し始めたきっかけは
昔、参加していたネットゲームが閉鎖になってしまい
その時に参加していた方々との交流が、未だに続いている事もあって
似た様なゲームでも作れたらいいな〜。
という不順なきっかけで、C言語の勉強を始めました。
不順と言っても、やましい事とかは考えていませんよ。w

この過程でも、C++が混ざっていたのかもしれませんが、私には区別が付かないのです。(汗

プログラムを最初に勉強したのは、CGI(Perl)なのですが(HTMLも少し^^;)
当時はCGIでも、閉鎖になったネットゲームが作れるかも?と思ってたので
CGIの本や参考サイトを参考に、作ろうと思って勉強してみたのですが
結局CGIでは、カウンターと掲示板を作れる事しかできず
作ってる途中で知り合いから、閉鎖になった同じ様なゲームは
CGIではできないという事を知らされ
(その後の事は、とてつもなく長くなってしまうので、途中略させて頂きます。
 既に長いですが、ご勘弁です。)
C言語の勉強をしようと思った次第です。

「14歳からはじめるC言語オンラインゲームプログラミング教室」

C言語だと思って購入したのですが・・・
C言語オンラインゲームプログラミング教室
と、C言語って表記されてるので
C言語でネットゲームが作れると思って購入したのですが
実はC++でした。
って事ですか?


921ポイント を手に入れた。

Name: たかぎ [URL]  ..ハッカー(180,232ポイント)   Date: 2010/05/02(日) 22:35   No:51504     
Title: Re:C言語での bool の分類や使い方などについて    
> どうぞお手柔らかにお願い致します。

別にいじめているわけではないですよ。
自分が今何を学んでいるかぐらいははっきりさせておくべきだといっているだけです。

> 「14歳からはじめるC言語オンラインゲームプログラミング教室」 

> C言語だと思って購入したのですが・・・ 
> C言語オンラインゲームプログラミング教室 
> と、C言語って表記されてるので 
> C言語でネットゲームが作れると思って購入したのですが 
> 実はC++でした。 
> って事ですか?

そういうことです。
そのタイトルは明らかに購買者を困惑させていますので、訴えられても文句いえないような気がします。

本のタイトルは出版社がつけるので、ふつう著者に責任はありません。
ただ、同種のタイトルの本が複数出ているので、2冊目以降は著者も同罪のような気がします。


177ポイント を手に入れた。

Name: ムンバ  ..プログラマー(38,957ポイント)   Date: 2010/05/02(日) 23:59   No:51513     
Title: Re:C言語での bool の分類や使い方などについて    
このレス、長い雑談含んでますのでお許しを。

>>別にいじめているわけではないですよ。

 自分、解ってると思います。たかぎさん♪
 お心使い感謝致します。

 でなければ、こちらの掲示板を利用させて頂いてません。
 とっくに逃避行していると思います。
 C言語も止めちゃってますよ。きっと。
 だったら、止めれば!って言われても止めませんが。w
 こちらの掲示板で、ご解説頂いている皆さんに
 ご指導頂いたので、ここまでできたのだと思います。
 ありがとうございます!

 1年半くらい前に初めて、こちらで質問等させて頂いた時に、良く(←「good」の意味です)
 たかぎさんには、いじめられましたからね。(笑

 でも厳しいお言葉は、今の私には必要だったと思っているのです。
 今思うと私の発言は、妬(ねたみ)とか僻(ひがみ)にしか聞こえません。
 自分の努力が足りないんですよね。すぐに他人に頼ったり逃げたりして・・・
 青春ドラマかっ?ルーキーズの影響か?(自爆

>>自分が今何を学んでいるかぐらいははっきりさせておくべきだといっているだけです。

 だって書名に「C言語」って文字が含まれてたら
 表題や書名に、C++とかは書いてない限りと言うか、そういう場合は
 C言語だと思うじゃ〜ないですか〜っ!?<って他人に当たるな!俺。^^;

 キューさんが、いつもおっしゃってる様に
 本屋さんに行って、自分の目で確かめ
 自分に合った本を買うのが、良いのかもしれませんね。
 
 C言語とC++の区別がつかない勉強不足の私が訴えるつもりとかは無いです。
 勉強させて頂いてますし。(笑

 ・自分が買った本の1冊目で文句があり、間違いがあれば出版社を訴える。
 ・自分が買った本の2冊目に、1冊目と同じ著者で間違いがあって訂正?しない出版社で
  同じ著者の同種のタイトルの本があったら、著者を訴える。
 
 確かに自分で選び買った本に困惑はしていますが
 自分の理解度が足りないと言われては、それまででして。

 ちなみに、訴えるとか気力は無いです。
 が、場合によっては可能性も有り得ますよね。
 だって、C言語って見出しに書いてあるのですものね。
 
 
 

 


788ポイント を手に入れた。

Name: たかぎ [URL]  ..ハッカー(180,377ポイント)   Date: 2010/05/03(月) 00:07   No:51514     
Title: Re:C言語での bool の分類や使い方などについて    
> 確かに自分で選び買った本に困惑はしていますが 
> 自分の理解度が足りないと言われては、それまででして。 

これは読者の理解度の問題ではありません。
ラテン語を勉強しようと思って『ラテン語入門』という本を買ってきたけれど、中で解説しているのは実はイタリア語だったとしたらどうでしょう。
イタリア語はラテン語から派生した言語なので、同じようなもんでしょうか?
タイトルを見て、それがイタリア語の本だと気づかないのは読者の理解度が足りないせいでしょうか?
そんなはずはありませんよね。

> ちなみに、訴えるとか気力は無いです。 

ムンバさんが本当に訴える必要はないですが、本を作る側はそれぐらいの覚悟がいるという話です。


117ポイント を手に入れた。

Name: ムンバ  ..プログラマー(39,199ポイント)   Date: 2010/05/03(月) 00:38   No:51515 解決!     
Title: Re:C言語での bool の分類や使い方などについて    
たかぎさん!

このスレは、「C言語での bool の分類や使い方などについて」で質問させて頂いてますので
一旦解決させて頂き、宜しければ新スレッドで
新たに話し合い(雑談など)させて頂いても宜しいでしょうか?w

お時間ある時での雑談などと、新スレッドさせて頂けませんでしょうか?^^

もし宜しければ、良いタイトルなど思いつけば、たかぎさんから新規投稿で
私も思いつけば新規投稿でスレッド入れさせて頂きます。
もちろん、管理人さんからSTOPが入れば、アウトと言う事で。www

>>本を作る側はそれぐらいの覚悟がいるという話です。

 この辺り、自分がこの先本を購入するのに、個人的にご意見頂きたい事もあり。(笑

と言う事で、一旦解決させて頂きますね。
ありがとうございました。(謝

---追伸---

>>ラテン語を勉強しようと思って『ラテン語入門』という本を買ってきたけれど
>>中で解説しているのは実はイタリア語だったとしたらどうでしょう。

それはそれは、ごけったいな本で何より〜・・・
って、ぶち切れますよっ!それはっ!(爆
今日は寝ますね。おやすみなさい。(∪。∪)。。。zzzZZ 編集済み


242ポイント を手に入れた。

Name: たかぎ [URL]  ..ハッカー(180,363ポイント)   Date: 2010/05/03(月) 10:30   No:51529     
Title: Re:C言語での bool の分類や使い方などについて    
> このスレは、「C言語での bool の分類や使い方などについて」で質問させて頂いてますので 
> 一旦解決させて頂き、宜しければ新スレッドで 
> 新たに話し合い(雑談など)させて頂いても宜しいでしょうか?w 

そうですね。
boolについては、最後にまとめると...

Cならマクロ、C++なら汎整数型です。


14ポイント を落としてしまった。

Name: ムンバ  ..プログラマー(39,227ポイント)   Date: 2010/05/03(月) 13:15   No:51537 解決!     
Title: Re:C言語での bool の分類や使い方などについて    
ありがとうございました!
今後とも、宜しくお願いします。


28ポイント を手に入れた。



Name: たろう  ..かけだし(1,861ポイント)   Date: 2010/05/01(土) 22:17   No:51420       
Title: アーカイブファイルについて    
アーカイブファイルを作っています。
それでわからなくなったんで質問させていただきます。
下記のようにプログラムを組んだのですが、
Run-Time Check Failure #2 - Stack around the variable 'save_name' was corrupted.
というエラーが出てきてしまい進展しません。
どうしたらエラーをなくして実行できるようになるのでしょうか?


//--------------------------------------------------------------
// アーカイブ
//--------------------------------------------------------------
bool Archive( TCHAR* DirName, TCHAR* SaveName )
{
    WIN32_FIND_DATA    FindFileData;
    HANDLE            hFind;
    
    // ファイル先頭からの位置
    unsigned int file_point = sizeof(ArcData);
    
    FILE* archive_file;
    FILE* read_file;
    
    // 検索するファイル名
    TCHAR search_name[NAME_MAX];
    TCHAR save_name[NAME_MAX];
    TCHAR new_name[NAME_MAX];
    TCHAR parts_name[NAME_MAX];
    unsigned int copy_byte;
    int loop;
    unsigned int copy_loop;
    
    // セーブするファイル名
    _tcscpy_s( save_name, NAME_MAX * sizeof( TCHAR ), _T("out\\") );
    _tcscat_s( save_name, NAME_MAX * sizeof( TCHAR ), SaveName );
    _tcscat_s( save_name, NAME_MAX * sizeof( TCHAR ), _T(".dat") );
    
                     .
                     .
                     .
ソースが足りなければ補足します。
よろしくお願いします。


609ポイント を手に入れた。


Name: Justy  ..伝説なるハッカー(526,498ポイント)   Date: 2010/05/02(日) 01:43   No:51452     
Title: Re:アーカイブファイルについて    
 _tcscpy_sの第二引数は要素の数を指定するもので、バイトサイズじゃないです。


30ポイント を手に入れた。

Name: たろう  ..かけだし(2,107ポイント)   Date: 2010/05/02(日) 12:01   No:51465     
Title: Re:アーカイブファイルについて    
回答ありがとうございます。
>_tcscpy_sの第二引数は要素の数を指定するもので、バイトサイズじゃないです。 

何を指定すればよいのでしょうか?
あとこのソースの続きです。
    // 検索するファイル名を作成
    // フォルダ内の全ファイルを指定する
    _tcscpy_s( search_name, NAME_MAX * sizeof( char), DirName );
    _tcscat_s( search_name, NAME_MAX * sizeof( char ), _T("*.*") );
    
    // 最初の1行だけ実行
    hFind = FindFirstFile( _T("out\\ARC_TEST.h"), &FindFileData );
    
    if(hFind == INVALID_HANDLE_VALUE) {
        printf( "!! ERROR !! no file" );
    }
    // 最初のファイルはディレクトリなのではずす
    FindNextFile( hFind, &FindFileData );
    
    bool max_over = false;
    
    while( true ){
        
        // ファイルを検索
        if( FindNextFile( hFind, &FindFileData ) == 0 ){
            
            // エラーチェック
            if( GetLastError() == ERROR_NO_MORE_FILES ){
                // ファイルがもうないなら終了
                break;
            } else {
                // そうでなければエラーで戻る
                FindClose(hFind);
                return true;
            }
        }
        
        if( g_arc_data.count < FILE_MAX ){
            
            // ヘッダに情報を書き込む
            g_arc_data.parts[ g_arc_data.count ].point = file_point;
            g_arc_data.parts[ g_arc_data.count ].size = FindFileData.nFileSizeLow;
            
            // ファイル名のコピー
            _tcscpy_s( g_arc_data.parts[ g_arc_data.count ].name, NAME_MAX * sizeof( TCHAR ), FindFileData.cFileName );
            
            // 格納するファイルの先頭からの位置計算
            file_point += FindFileData.nFileSizeLow;
            
            // ファイルの数をカウントする
            g_arc_data.count++;
        } else {
            max_over = true;
            g_arc_data.count++;
        }
    }
    
    if( max_over ){
        printf( "!! ERROR !! FILE_MAX over : %d > %d\n", g_arc_data.count, FILE_MAX );
        return true;
    }
    
    // 検索終了
    FindClose( hFind );
    
    // バイナリ書き込みモードでまとめるファイルを開く
    _tfopen_s( &archive_file, save_name, _T("w+b") );
    
    // ヘッダ本体
    fwrite( &g_arc_data, sizeof( ArcData ), 1, archive_file );
    
    printf( "#ifndef __%s_H__\n", SaveName );
    printf( "#define __%s_H__\n", SaveName );
    printf( "\n\n" );
    printf( "#define %s_MEMBER \\\n", SaveName );
    
    for( loop = 0 ; loop < g_arc_data.count ; loop++ ){
        
        // 個別のファイルを1つのファイルにコピーする
        _tcscpy_s( new_name, NAME_MAX * sizeof( TCHAR ), DirName );
        _tcscat_s( new_name, NAME_MAX * sizeof( TCHAR ), g_arc_data.parts[loop].name );
        _tfopen_s( &read_file, new_name, _T("r+b") );
        
        for( copy_loop = 0 ; copy_loop < g_arc_data.parts[loop].size ; copy_loop++ ){
            
            // ファイルサイズ分だけ繰り返す
            fread( ©_byte, 1, 1, read_file );
            fwrite( ©_byte, 1, 1, archive_file );
        }
        printf( "\t%s", SaveName );
        _tcscpy_s( parts_name, NAME_MAX * sizeof( TCHAR ), g_arc_data.parts[loop].name );
        TCHAR* p_parts_name = &parts_name[0];
        p_parts_name = StrToUpper( p_parts_name );
        printf( "( %s, %d ) /* [%d] %s */ \\\n", parts_name, g_arc_data.parts[loop].size, loop, g_arc_data.parts[loop].name );
        
        fclose( read_file );
    }
    
    printf( "\n" );
    printf( "#undef  %s\n", SaveName );
    printf( "#define %s( _id, _size ) %s_ID_##_id, \n", SaveName, SaveName );
    printf( "enum %s_ID\n{\n", SaveName );
    printf( "\t %s_MEMBER\n", SaveName );
    printf( "\t %s_ID_NUM\n", SaveName );
    printf( "};\n\n" );
    
    printf( "#endif\n", SaveName );
    // ファイルを閉じる
    fclose( archive_file );
    
    
    // 正常終了
    return false;
}


224ポイント を手に入れた。

Name: Justy  ..伝説なるハッカー(526,645ポイント)   Date: 2010/05/03(月) 01:53   No:51518     
Title: Re:アーカイブファイルについて    
>何を指定すればよいのでしょうか
 第一引数で指定したバッファの要素数です。
 つまり、 NAME_MAX * sizeof( TCHAR )じゃなくて、NAME_MAXです。


2倍のポイントを手に入れた! 84ポイント を手に入れた。



Name: h.k  ..ぴよぴよ(75ポイント)   Date: 2010/05/01(土) 23:47   No:51437       
Title: 二次関数の解についてのプログラム    
学校の課題の二次関数の解を求めるプログラムでわからないところがあったので質問させて頂きます。
自分の作ったプログラムは

#include<stdio.h>
#include<math.h>

int main(void)
{
int a,b,c,d;
double e,u,m,r;

printf("Input coefficient A:");
scanf_s("%d",&a);
printf("Input coefficient B:");
scanf_s("%d",&b);
printf("Input coefficient C:");
scanf_s("%d",&c);

d=(b*b)-(4*a*c);
u=-b/(2.0*a);
r=-c/b;

   if(d==0 && a!=0 && b!=0 && c!=0){
printf("x1=x2=%f",u);}

   if(d>0 && a!=0 && c!=0){
e=sqrt(d)/(2*a);
printf("x1=%f\n",u+e);
printf("x2=%f\n",u-e);}

if(d<0 && a!=0 && c!=0){
m=sqrt(-d)/(2*a);
printf("x1=%f+%fi\n",u,m);
printf("x2=%f+%fi\n",u,m);}

if(a==0 && b!=0){
 printf("x1=x2=%f",r);}

if(a==0 && b==0 && c==0){
printf("No solution");}

return 0;
}

です。
コンパイラは通るのですが、”NO solution”の結果が出るはずの時に強制終了してしまいます。
なぜなのか考えてみたのですがわかりません。

C言語は学校で初めて半年ほどです。

環境はWindows XPで、コンパイラはVC++2008EEです。
提出期限は5月6日です。よろしくお願いします。


75ポイント を手に入れた。


Name: たかぎ [URL]  ..ハッカー(178,923ポイント)   Date: 2010/05/01(土) 23:52   No:51438     
Title: Re:二次関数の解についてのプログラム    
> 二次関数の解

二次方程式の解の間違いでは?

それはそうと、ゼロ除算が異常終了の原因だと思います。


11ポイント を手に入れた。

Name: ウルスラ  ..ぴよぴよ(361ポイント)   Date: 2010/05/02(日) 23:05   No:51508     
Title: Re:二次関数の解についてのプログラム    
たがきさんの言うように、ゼロ除算がよくないかと。
数学上、0は割れないんで。

scanfで読み取るときに、ゼロが入力されないようにプログラムを改正したほうがいいかもしれませんね。

例えば、

printf("Input coefficient A:"); 
scanf_s("%d",&a); 

の部分を、

a = 0
while( a == 0 ){
  printf("Input coefficient A:"); 
  scanf_s("%d",&a); 
}

と書き換えて、ゼロを入力すると再度入力するようにする・・・とか。

まぁ、その辺は自分で考えて解消してください。


251ポイント を手に入れた。

Name: ウルスラ  ..ぴよぴよ(395ポイント)   Date: 2010/05/02(日) 23:07   No:51509     
Title: Re:二次関数の解についてのプログラム    
すいません。たかぎさんの名前を打ち間違えてしまいました。
たかぎさん。ごめんなさいm(_ _)m


34ポイント を手に入れた。

Name: h.k  ..ぴよぴよ(119ポイント)   Date: 2010/05/02(日) 23:53   No:51512 解決!     
Title: Re:二次関数の解についてのプログラム    
みなさんの意見を参考にしてもう一度作り直してみたらうまくいきました!
本当に助かりました!
ありがとうございました^^ 編集済み


44ポイント を手に入れた。



Name: ライス  ..かけだし(2,482ポイント)   Date: 2010/05/02(日) 14:42   No:51472       
Title: RPGのマップについて    
現在、簡単なRPGを作ろうと思っています。
でも、マップの作成・表示方法が分かりません。
また、マップを作成した場合、マップ自体に進めるor進めないの判定を持たせることはできるのでしょうか?
それとも、プログラムの中で、0なら進める・1なら進めないという判定をさせないといけないのでしょうか?
どなたか分かる方は、ご教授をよろしくお願いします。

(補足)
・開発環境は、Microsoft Visual C++ 2008 Express Editionです。
・ライブラリは、DXライブラリです。
・マップ以外の素材は、ほとんどそろっています。


251ポイント を手に入れた。


Name: softya [URL]  ..ハッカー(154,399ポイント)   Date: 2010/05/02(日) 15:19   No:51474     
Title: Re:RPGのマップについて    
とりあえずこの掲示板の管理人さんのサイトの「ゲームプログラミングの館」の24章まで理解してみましょう。
http://dixq.net/g/
で、24章までが理解出来たならマップチップに付いて説明しますね。
サンプルは白黒ですが、ちょっと変えるだけで背景画像に対応させることが出来ます。
理解を進める途中で分からないことが出たら、この続きで聞いてください。 編集済み


92ポイント を手に入れた。

Name: ライス  ..入門者(2,579ポイント)   Date: 2010/05/02(日) 15:44   No:51477     
Title: Re:RPGのマップについて    
softyaさん、丁寧なご返信ありがとうございます。
ゲームプログラミングについてはこのサイトで学習してきたので、24章までは理解できています。
一応、マップチップもある程度そろっています。
よろしければ、続きの説明をよろしくお願いしますm(_ _)m


97ポイント を手に入れた。

Name: softya [URL]  ..ハッカー(154,702ポイント)   Date: 2010/05/02(日) 17:30   No:51487     
Title: Re:RPGのマップについて    
>よろしければ、続きの説明をよろしくお願いしますm(_ _)m

1)マップチップの表示に関しては、24章の当たり判定の配列と同じサイズのマップチップ番号の配列を用意してマップチップの番号を登録します。
2)マップチップ自体は、LoadDivGraphで読み込みます。
3)24章の白黒の代わりにマップチップ番号配列から番号を読んで該当するパーツを白い壁を描画と処理しているところで表示します。
まず、ここまでやってみてください。

ただ、本格的に作るならマップのデータを作成するツールを使わないと大変面倒ですね。
これを自作するか、汎用のフリーソフトを利用するか考えないといけません。
どうしましょうか?
私自身自分で作る派なので、お薦めの汎用ツールを知らないんですよね。

参考↓
http://search.vector.co.jp/search?query=%83%7D%83b%83v%83G%83f%83B%83%5E%81%5B

探すポイントは編集しやすいことと当たり判定やイベント設定の機能が充実していることです。
つまり、RPGツクールなどの機能があるかどうかです。


303ポイント を手に入れた。

Name: ライス  ..入門者(2,905ポイント)   Date: 2010/05/02(日) 20:02   No:51496     
Title: Re:RPGのマップについて    
ありがとうございます。

>1)マップチップの表示に関しては、24章の当たり判定の配列と同じサイズのマップチップ番号の配列を用意してマップチップの番号を登録します。 
2)マップチップ自体は、LoadDivGraphで読み込みます。 
3)24章の白黒の代わりにマップチップ番号配列から番号を読んで該当するパーツを白い壁を描画と処理しているところで表示します。 

上の方法はとりあえずできました。

>ただ、本格的に作るならマップのデータを作成するツールを使わないと大変面倒ですね。

BMPファイルに書き出す方法ではできましたが、当たり判定やイベント設定がされているマップデータの呼び出し方が分かりません。
拡張子はMPSで、マップエディタは"WOLF RPG EDITOR"というRPG制作ツールのものです。
"WOLF RPG EDITOR"の方で調べたのですが、もともとRPG制作ツールなのでマップデータだけを利用するのはもしかしたら対応してないのかもしれません。
もし、拡張子がMPSのマップデータのプログラム内での呼び出し方を知っていたら教えてくださいm(_ _)m


326ポイント を手に入れた。

Name: softya [URL]  ..ハッカー(155,045ポイント)   Date: 2010/05/02(日) 22:32   No:51503     
Title: Re:RPGのマップについて    
>もし、拡張子がMPSのマップデータのプログラム内での呼び出し方を知っていたら教えてくださいm(_ _)m

ウディタは知ってますが、フォーマットは未公開のようですね。
他のツールか、自作を考えられた方が良いですね。


85ポイント を手に入れた。

Name: ライス  ..入門者(2,950ポイント)   Date: 2010/05/02(日) 22:42   No:51505     
Title: Re:RPGのマップについて    
そうですか、分かりました。
他のツールを探してみます。
ちなみに、マップエディタを作成するのって難しいんですか?


45ポイント を手に入れた。

Name: softya [URL]  ..ハッカー(155,223ポイント)   Date: 2010/05/02(日) 23:04   No:51507     
Title: Re:RPGのマップについて    
>ちなみに、マップエディタを作成するのって難しいんですか?
問題はGUIですね。Win32APIだけで組むと表示に面倒です。

DXライブラリだけで作ることも出来ますから、そちらを考えた方が良いかも知れません。
表示の部分はもう出来てますが、マウスの操作や読み込みダイアログ(これだけはWin32APIを使った方が楽)、あとは同じウィンドウ内にマップチップの表示部位とマップエディット部分に分ける事など色々作らなきゃいけません。良い勉強にはなると思いますよ。ウィンドウのボタンとかは使えないので、代用処理が必要だったり面倒ですけどね。


178ポイント を手に入れた。

Name: ライス  ..入門者(2,989ポイント)   Date: 2010/05/02(日) 23:08   No:51510 解決!     
Title: Re:RPGのマップについて    
分かりました。
ご丁寧にありがとうございました。
とりあえず、解決とさせていただきます。

本当にいろいろありがとうございました。


39ポイント を手に入れた。



Name: リョウ  ..ぴよぴよ(218ポイント)   Date: 2010/05/02(日) 01:41   No:51451       
Title: 無題    
始めまして プログラム初心者のリョウといいます。
質問したいのは下の問題です。
キーボードから入力した整数を n とする。アルファベット順で英小文字 'a' から 数えて n 番目の文字を印字するプログラムを作成せよ。
 % ./NthChar
 Input integer: 9
 The charater away from 'a' by 9 is 'j'.
 %
この問題をとけと言われているのですが、ヒントや説明もなくてまずどうすればいいかわかりません。
教科書を見ても分からないので、どういう方法でプログラムすればいいか教えてくれないでしょうか?
osはlinuxです。


218ポイント を手に入れた。


Name: ookami  ..初心者(7,613ポイント)   Date: 2010/05/02(日) 07:29   No:51455     
Title: Re:無題    
こんにちは。作りかけのソースがあれば貼ってもらえると助言が集まりやすいと思いますよ。

無ければ以下の順でお答えください。

まず、コンパイラは何ですか?
次に、お約束の"Hello, World!" は印字できますか?
文字コードについて理解していますか?(printf("%c\n",65); の出力結果は分かりますか?)


34ポイント を手に入れた。

Name: リョウ  ..ぴよぴよ(155ポイント)   Date: 2010/05/02(日) 13:56   No:51471     
Title: Re:無題    
コンパイラはちょっとわからないんですが、emacsを使っていてコンパイルするときは gcc -o を使っています。
印字するというのは、printf("Hello,World!")
これでいいですか?
文字コードは'e'が出力されると思います。


63ポイント を落としてしまった。

Name: ookami  ..初心者(8,146ポイント)   Date: 2010/05/02(日) 16:25   No:51481     
Title: Re:無題    
それです。「gcc」がコンパイラの名前です。

Hello, World! はそれでOKです。

以下は惜しい。
printf("%c\n",0x65);なら 'e' が出力されます。
printf("%c\n",65);では 'A' です。
http://e-words.jp/p/r-ascii.html

上記のページにもある通り、ASCII文字コードの処理系ならば、

文字 文字コード
'a'  97
'b'  98
:
:
'j'  106
:
:

と並んでいます。例題では 9 を入力しており、'a'(97)に 9 足した 'j'(106) が印字されている、ということになります。

で、作りかけのものがあったら貼ってもらったほうが、回答が集まりやすいと思いますよ。


142ポイント を手に入れた。

Name: たかぎ [URL]  ..ハッカー(179,865ポイント)   Date: 2010/05/02(日) 16:53   No:51484     
Title: Re:無題    
一応作ってみました。

#include <stdio.h> 
#include <stdlib.h>

int main(void) 
{
    fputs("Input integer:", stdout); fflush(stdout);
    char s[2+1], c;
    scanf("%2[0-9]%c", s, &c);
    int i;
    if (c != '\n' || (i = atoi(s)) >= 26)
        return EXIT_FAILURE;

    printf("The character away from 'a' by %d is '%c'.\n",
            i, "abcdefghijklmnopqrstuvwxyz"[i]);


例によって、コメントなし、解説なしです。
自力で理解してください。


175ポイント を手に入れた。

Name: リョウ  ..ぴよぴよ(221ポイント)   Date: 2010/05/02(日) 20:04   No:51497 解決!     
Title: Re:無題    
みなさん返信ありがとうございます。
おかげさまで理解できました!
どうもありがとうございます。
またわからないことがあれば質問すると思いますので
よろしければまたお願いいたします。



66ポイント を手に入れた。



Name: 三郎  ..かけだし(1,094ポイント)   Date: 2010/05/02(日) 10:39   No:51461       
Title: MSCからの移行    
1.私は20年ほど前、MSDOSの時代にPC9800を使いC言語でプログラムの経験がありますが、
  その後全くプログラム開発をしていませんでした。
  MicrosoftOptimizing Compiler V5.10
  MicrosoftOverlay linker V3.65
  再開しょうと思いますが、もうMSDOSの時代でもなく、PC9800もありません。
  Winの時代ですので、とりあえず何から準備すればよいか見当が付きません。
2.現在の環境は
  PCはDELL ノートパソコン
  OS:Vista
  インストールしてあるコンパイラ等はVisual C++Express Edition
3.実施したい事 
  USB(RS232)から取り込んだデータのグラフィック表示、演算など。

VC++の入門書とかC言語の参考書は多少持っています。Winの事も多少わかります。
VC++の場合MSCの場合と勝手が違いすぎ何処を開いてソースを何処に書けばよいか分りません。
この掲示板に投稿してあるソースは昔のイメージと似たようなものもあるように思いますが、どの画面を開いて書くのでしょうか?、どのようなツールが必要なのでしょうか。Vc++は最適ではないのでしょうか。
よろしくお願いします。

   


2倍のポイントを手に入れた! 840ポイント を手に入れた。


Name: たかぎ [URL]  ..ハッカー(179,159ポイント)   Date: 2010/05/02(日) 10:56   No:51462     
Title: Re:MSCからの移行    
MS-Cはバージョン6からしか使っていなかったのでバージョン5のことはよく分からないのですが...

当時はコマンドラインで開発されていたのでしょうか?
それとも、PWB(バージョン5にもあったのかどうか不明)で開発されていたのでしょうか?



78ポイント を手に入れた。

Name: 三郎  ..かけだし(1,181ポイント)   Date: 2010/05/02(日) 11:18   No:51463     
Title: Re:MSCからの移行    
コマンドラインです。
PWBは何の事かも知りませんです。
当時、分厚いランタイムライブラリーを開いて苦闘していました。
MSC V5.1はグラフィックをサポートしていなかったので?、CTとか云うライブラリーをリンクしていました。


87ポイント を手に入れた。

Name: softya [URL]  ..ハッカー(154,307ポイント)   Date: 2010/05/02(日) 11:31   No:51464     
Title: Re:MSCからの移行    
初めまして。
たぶん同年代に近いsoftyaです。

今のVC++は、20年前のMS-Cに比べて全く違っているので戸惑われていると思います。
私も MS-C6.0 → VC++5.0時点でだいぶ戸惑いました(C++とMFCに戸惑ったと言うのが正しいかも知れませんが)。
と言ってもC言語と言う面から見るとC言語の規約が多少変わっているのと16bitから32bitのCPUに対応したに過ぎません。標準関数の違いや、標準でグラフィック関数が無いことを乗り越えればなんとかなると思います。

>USB(RS232)から取り込んだデータのグラフィック表示、演算など。 

USBドライバから情報を読み込んで、何らかのグラフィックAPIを使い画面に表示します。
RS232CはWindowsAPIでアクセス出来ます。
MS-DOS時代と違いVRAMに直接アクセスできませんので、必ずWindowsOSのお世話にならなくてはいけません。

>この掲示板に投稿してあるソースは昔のイメージと似たようなものもあるように思いますが、どの画面を開いて書くのでしょうか?、

使い方は下記が参考になると思います。
http://cvwww.ee.ous.ac.jp/vc08prog.html

>どのようなツールが必要なのでしょうか。Vc++は最適ではないのでしょうか。

ツールとしてはVC++で問題ないと思います。
問題なのは、どのグラフィックAPI(ライブラリ)を利用するかです。 

1)WindowsAPIを使う。ウィンドウ・アプリの作成。
全面的に使うには覚えること、理解することが多いのが問題かも知れません。
http://wisdom.sakura.ne.jp/system/winapi/index.html

2)グラフ作成ライブラリを利用する。GnuplotやPGPLOTを使う。
http://hooktail.org/computer/index.php?%A5%B0%A5%E9%A5%D5%A1%A6%B2%F2%C0%CF%A5%C4%A1%BC%A5%EB
問題はウィンドウアプリではないので、

3)ここで紹介されているゲームライブラリ(DXライブラリ)でグラフィックを表示する。
ウィンドウ・アプリ的なインターフェイス(ボタン)などを作るのは逆に面倒になります。


618ポイント を手に入れた。

Name: 三郎  ..かけだし(1,298ポイント)   Date: 2010/05/02(日) 12:15   No:51466     
Title: Re:MSCからの移行    
softyaさん貴重な情報有難うございました。リンクを辿りVC++を触ってみます。
グラフツールの方も参考にします。
私は全て独学で基礎知識が薄弱です。多分softyaさんより遥か高齢と思います。
こんごとも宜しくお願いします。


117ポイント を手に入れた。

Name: たかぎ [URL]  ..ハッカー(179,286ポイント)   Date: 2010/05/02(日) 12:29   No:51467     
Title: Re:MSCからの移行    
softyaさんが挙げられた以外に、GUI部分はC#やVisual Basicなどで作って、内部処理だけをCで作るという方法もあります。
どんな演算をするのかにもよりますが、全部C#という選択肢もないわけではありません。

> PWBは何の事かも知りませんです。 

一応これだけは補足しておきます。
PWBというのは、Programmers' Workbenchの意味で、Microsoft C(およびMicrosoft C/C++)に備わっていた統合開発環境のことです。
Quick CやTurbo Cにも統合開発環境がありましたね。


127ポイント を手に入れた。

Name: 三郎  ..ぴよぴよ(847ポイント)   Date: 2010/05/02(日) 15:39   No:51476     
Title: Re:MSCからの移行    
皆さんからコメント頂いたのを読まさせて貰って、これは大変だなあと思いました。
私の場合、計算といっても加減乗除と三角関数、それに対数くらいのものです。
MSDOSの場合MSCで、なんら不自由していなかったのに、何故同じ事をするのに、こんなにも難しい事をしなければいけないのか?。素朴な疑問が根底にあります。
パソコンに取り込むものはA/D変換したデータ、外部入出力(I,O)で表示は、それらの経時のトレンドグラフ、統計処理、作表ぐらいのものです。
市場にMSDOSのパソコン、周辺装置(プリンター、磁気記憶装置、CRT)従来のソフト(コンパイラー、リンカー、エデイター、etc)があれば、なんら不自由しない。
操作、制御する機械は今も昔の機械と大差ない。このような需要は依然として多いはず。
私は昔のパソコンなど故障して捨ててしまって、ソフトも説明書を捨ててしまい処置なし。

PWB、、、イメージは分ります。IDEとかいってチョット触った事があります。

Visual C++Express Edition にはMFCをサポートしなくGDIをつかえないと書いてありました。
ネイテイブ形式でなく、マネージ形式のプログラムにしても、やはり造れないのでしょうか。


451ポイント を落としてしまった。

Name: たかぎ [URL]  ..ハッカー(179,432ポイント)   Date: 2010/05/02(日) 16:14   No:51478     
Title: Re:MSCからの移行    
> ネイテイブ形式でなく、マネージ形式のプログラムにしても、やはり造れないのでしょうか。 

C++/CLIを使えば作れます。
ただ、C++/CLIは、C/C++のコードと.NETのコードのブリッジを作るには便利ですが、全体を作るのであればC#の方が便利です。


64ポイント を手に入れた。

Name: たかぎ [URL]  ..ハッカー(179,690ポイント)   Date: 2010/05/02(日) 16:39   No:51482     
Title: Re:MSCからの移行    
↓にもコメントを。

> 操作、制御する機械は今も昔の機械と大差ない。このような需要は依然として多いはず。 

実際、大差ありませんね。
ただ、ユーザーの目が肥えたというか、まったく本質ではない見た目を重視されますので、本当に必要かどうかにかかわらず、本格的なGUIが要求されるケースが大多数であることも事実です。
また、コマンドラインに対して、食わず嫌いというか、実際以上に敷居が高いとか、初心者向けではないとか誤解している人が多いのも事実です。

私の場合、とにかく安く作って欲しいというお客さんには、PHPのコマンドラインツールとかで済ませています。
スタンドアローンで動くアプリならそれで十分なことが多いのです。

そういえば、以前この掲示板で話題に出たEGGXという環境は、簡単にグラフィックが使えて、ちょっとしたものを作るには便利でした。X Window Systemでないと動かないのが難ですが、調べてみてもよいと思います。
あるいは、ちょっとしたGUIを作るだけなら、Tcl/Tkをライブラリとして使うのもおすすめです。
 編集済み


226ポイント を手に入れた。

Name: softya [URL]  ..ハッカー(154,960ポイント)   Date: 2010/05/02(日) 18:53   No:51489     
Title: Re:MSCからの移行    
DOSにこだわるのであれば、FreeDOSとLSI-C86試食版と言う開発環境もあります。
http://ja.wikipedia.org/wiki/FreeDOS
http://www.vector.co.jp/soft/maker/lsi/se001169.html
http://www.vector.co.jp/soft/maker/lsi/se011449.html
これを使えばグラフィックも作れます。
http://www.vector.co.jp/soft/dos/prog/se243629.html
さすがにUSBは厳しいと思いますが。
そういう意味では、印刷は厳しいです。

それか、手軽に扱うを着眼手にすると、こういう物も使えると思います。
(仮称)十進BASIC
http://hp.vector.co.jp/authors/VA008683/
comポートの入出力ができますので、USB-COMポートであれば扱えます。


258ポイント を手に入れた。

Name: 三郎  ..ぴよぴよ(896ポイント)   Date: 2010/05/02(日) 18:56   No:51490 解決!     
Title: Re:MSCからの移行    
なんとかして、先を見ればVC++に挑戦してみます。
いろいろ御教授有難うございました。少しでも出来れば満足です。


49ポイント を手に入れた。



Name: 名無し  ..初心者(5,277ポイント)   Date: 2010/05/01(土) 14:22   No:51407       
Title: FPS制御    
FPS制御しようとして、龍神録プログラミングの館の43「きっちりFPS〜」の
コードを入れたら、エラーが出ました。どこがおかしいでしょうか?
環境はBCCDeveloperです。少し長いので要らないところは省いてます

int fps_count,count0t;
int f[FLAME];
int color=GetColor(255,255,255);

double ave;

void fps_wait(){
    int term,i,gnt;
    static int t=0;
    if(fps_count==0){                               
        if(t==0)                                    
            term=0;
        else                                        
            term=count0t+1000-GetNowCount();
    }
    else                                            
        term = (int)(count0t+fps_count*(1000.0/FLAME))-GetNowCount();

    if(term>0)                                      
        Sleep(term);

    gnt=GetNowCount();

    if(fps_count==0)                                
        count0t=gnt;
    f[fps_count]=gnt-t;                             
    t=gnt;
                                                    
    if(fps_count==FLAME-1){
        ave=0;
        for(i=0;i<FLAME;i++)
            ave+=f[i];
        ave/=FLAME;
    }
    fps_count = (++fps_count)%FLAME ;
}

//x,yの位置にfpsを表示

void draw_fps(int x,int y){   //多分この行がおかしい 
    if(ave!=0){
        DrawFormatString(x, y,color[0],"[%.1f]",1000/ave);
    }
    return;
}


エラー:無効な間接参照(関数 draw_fps(int,int) )
    関数でないものを呼び出している(関数 __stdcall WinMain(HINSTANCE__ *,HINSTANCE__ *,char
*,int) )



501ポイント を手に入れた。


Name: Justy  ..伝説なるハッカー(526,561ポイント)   Date: 2010/05/02(日) 02:01   No:51454     
Title: Re:FPS制御    
 color変数は配列ではないのですが、配列であるかのように使用しているところがあります。

46ポイント を手に入れた。

Name: 名無し  ..初心者(5,292ポイント)   Date: 2010/05/02(日) 13:36   No:51470 解決!     
Title: Re:FPS制御    
直りました!
ありがとうございます!


15ポイント を手に入れた。



Name: yskey  ..初心者(6,125ポイント)   Date: 2010/05/01(土) 21:41   No:51416       
Title: vectorコンテナについて    
こんばんは、yskeyと申します。
現在DxLibで戦略ゲームを製作中で、ベクターコンテナによるグラフ構造を作ろうとしています。

グラフ構造をプログラム内で宣言するのに少し工夫をしようと思いこんな方法を思いつきました。
たとえば画像のようなマップを作るときは、

,2,4\n
,1,4,5,3\n
,2,5\n
,1,2,5\n
,2,3,4\n

のようにします。(\nは明示するために書いています)
これをこのようなプログラムで読み込みます。
コンマのときブランチを増やして次にある番号の配列のポインタをRegion_Node.Branchにしまいます。
-----------------------------------------------構造体宣言部
struct Region_Node_t{
    vector<Region_Node_t*> Branch;
};
vector<Region_Node_t> Region_Node;
-----------------------------------------------読み込みプログラム

int Region_Ini(){
    int fp,buf,bur_count=0,com_count=0;

    if((fp=FileRead_open("dat/ini/region.dat"))==NULL){
        return -1;
    }

    while((buf=FileRead_getc(fp))!=EOF){
        if(buf=='\n')Region_Node.push_back();
    }
    if(FileRead_seek(fp,0,SEEK_SET)!=0)return -1;

    while((buf=FileRead_getc(fp))!=EOF){
        if(buf==','){
            Region_Node[bur_count].Node.push_back();
            buf=FileRead_getc(fp);
            Region_Node[bur_count].Branch[com_count] = &Region_Node[buf];
            com_count++;
        }
        if(buf=='\n'){
            bur_count++;
            com_count=0;
        }

    }
    return 0;
}


要するにpush_back()を使って配列を増やすときに引数がいるのですが、push_backで配列を増やした後に構造体のメンバにポインタを格納したいときはどうすればよいのでしょうか?


451ポイント を手に入れた。


Name: ookami  ..初心者(6,836ポイント)   Date: 2010/05/01(土) 22:25   No:51422     
Title: Re:vectorコンテナについて    
いろいろ気になる点はあるのですが、vector<vector<int> >のようにしてはマズいですか?

あとは細かい点↓

Region_Node[bur_count].Node.push_back();
のNodeはBranchの間違いですかね。

Region_Node[bur_count].Branch[com_count] = &Region_Node[buf];

Region_Node[bur_count].Branch[com_count] = &Region_Node[buf-'0']; // …かな?環境依存ですがとりあえず。


133ポイント を手に入れた。

Name: yskey  ..初心者(6,225ポイント)   Date: 2010/05/01(土) 23:10   No:51429     
Title: Re:vectorコンテナについて    
ookamiさんご返信ありがとうございます。

<vector<vector<int>>とするint型のものしか代入できないですよね?
リスト構造っぽいことをしているので、int型だと同じ構造体のポインタが入れれなくなるのでマズイです。

後、buf-'0'っていうのはいったいどうゆうことをしているのでしょうか?


100ポイント を手に入れた。

Name: ookami  ..初心者(7,077ポイント)   Date: 2010/05/01(土) 23:35   No:51434     
Title: Re:vectorコンテナについて    
リスト構造であれば、ポインタの他にメインデータの領域がいりますよね?

最初のソースで「ポインタの代入」にはなってますが、添え字が意図通りではないだろうなと。bufには数値ではなく文字コードが入っているはずですから。


75ポイント を手に入れた。

Name: ookami  ..初心者(7,274ポイント)   Date: 2010/05/01(土) 23:54   No:51439     
Title: Re:vectorコンテナについて    
追記

メインデータを省略しているとしても、実際の要素がpushされる前にポインタを取得しようとしているので、動作は不定になりそうですね。


54ポイント を手に入れた。

Name: yskey  ..初心者(6,332ポイント)   Date: 2010/05/02(日) 10:05   No:51459 解決!     
Title: Re:vectorコンテナについて    
よく考えたらatoi()関数使うの忘れてました…

いま気づいたんですが、ベクターコンテナって配列だからポインタじゃなくてポインタの代わりに添え字でやればいいんですね。

>>ookamiさん
どうもありがとうございました。


107ポイント を手に入れた。



Name: bun  ..かけだし(2,334ポイント)   Date: 2010/04/28(水) 04:48   No:51309       
Title: Javaでのグラフ作成について    
C言語に限らないということなので、Javaについて質問させていただきます。
今、円グラフの作成に取り掛かっているのですがいくつかわからないことがでてきました。
以下にまとめます。

1,今のソースでは12等分したいが12等分されない。
2,円周率で生じる誤差をどのように修正したら良いのか?
3,fillOvalをどのように組み込めばよいかわからない。
目指したい円グラフをエクセルで作成して画像で上げておきます。

現段階のソースは以下の通りです。
12個の値は適当にいれてやっているのですが、12等分されない現状です。

import java.applet.Applet;
import java.awt.*;


    
  public class CircleGraph extends Applet {
  int pa[]=new int[12];

  public void init() {
     setBackground(new Color(255,255,255));
     pa[0]=;pa[1]=;pa[2]=;pa[3]=;pa[4]=;pa[5]=;
     pa[6]=;pa[7]=;pa[8]=;pa[9]=;pa[10]=;pa[11]=;
   }


 public void paint(Graphics g) {
     g.drawOval(50,50,300,300); 
     int i,x1,y1,sum,deg,r=150;
     sum=0;
     for(i=0;i<12;i++){
          sum=sum+pa[i];
    }
     for(i=0;i<12;i++){
     deg=pa[i]*360/sum ;
     if(i>=1){
     deg=pa[i]*360/sum+pa[i-1]*360/sum ;
     double rad=150*Math.PI*deg/360;
     x1=(int)(200+r*Math.cos(rad));
     y1=(int)(200-r*Math.sin(rad));
     g.drawLine(200,200,x1,y1);
     }     
 }
  }
 
}




430ポイント を手に入れた。


Name: ookami  ..初心者(6,359ポイント)   Date: 2010/04/28(水) 07:40   No:51310     
Title: Re:Javaでのグラフ作成について    
とりあえず1のみの回答ですみませんが…

まず、PI(ラジアン)=180度なので、

double rad=150*Math.PI*deg/360;

double rad=Math.PI*deg/180;

ですね。

あと、

deg=pa[i]*360/sum+pa[i-1]*360/sum ;

のところは、「今の値に前回値を足した値」ではなく「i番目までの合計値」ではないでしょうか。

また、円と線分の中心がずれているようです。


150ポイント を手に入れた。

Name: たいちう  ..比類無きプログラマー(77,072ポイント)   Date: 2010/04/28(水) 10:19   No:51311     
Title: Re:Javaでのグラフ作成について    
> 12個の値は適当にいれてやっているのですが、12等分されない現状です。

適当じゃ駄目でしょ。適切に入れてますか?
Javaが動く環境がないのですが、次のように変えて試してください。

public void init() {
    setBackground(new Color(255,255,255));
    for (int i = 0; i < 12; i++) {
        pa[i] = 30;
        // 12等分でない例
        // pa[i] = (i % 3) ? 15 : ((i % 3 == 1) ? 30 : 45);
    }
}

public void paint(Graphics g) {
    g.drawOval(50,50,350,350);
    int i,x1,y1,sum,deg,r=150;
    sum=0;
    for(i=0;i<12;i++){
        double rad=2*Math.PI*sum/360;
        x1=(int)(200+r*Math.cos(rad));
        y1=(int)(200-r*Math.sin(rad));
        g.drawLine(200,200,x1,y1);
        sum=sum+pa[i];
    }
}


209ポイント を手に入れた。

Name: たいちう  ..比類無きプログラマー(77,314ポイント)   Date: 2010/04/28(水) 10:40   No:51312     
Title: Re:Javaでのグラフ作成について    
> 2,円周率で生じる誤差をどのように修正したら良いのか?

円周率の誤差については誤差が蓄積されないようにするとか、
当たり前の事しか言えません。これ以上はケースバイケースですので、
具体的なソースコードなどを元にしないとアドバイスはしにくいです。

憶測ですが、別の原因でプログラムが思う通りに動かないのも
誤差のせいにしていませんか?


> 3,fillOvalをどのように組み込めばよいかわからない。 

fillArcを使ったほうが良いでしょう。
http://www.ics.kagoshima-u.ac.jp/edu/taiken2003/java-program.html


2倍のポイントを手に入れた! 242ポイント を手に入れた。

Name: bun  ..入門者(3,139ポイント)   Date: 2010/04/28(水) 14:34   No:51314     
Title: Re:Javaでのグラフ作成について    
JAVA環境のある別PCからの書き込みです。
12等分することはできましたが、それぞれの値ごとに円弧内を塗ることができません。
fillarcの中の数値がおかしいのだとは思いますが・・・
アドバイスお願いします。

import java.applet.Applet;
import java.awt.*;

  public class CircleGraph extends Applet {
  int pa[]=new int[12];

  public void init() {
     setBackground(new Color(255,255,255));
     pa[0]=180;pa[1]=120;pa[2]=83;pa[3]=112;pa[4]=90;pa[5]=109;
     pa[6]=120;pa[7]=130;pa[8]=200;pa[9]=155;pa[10]=180;pa[11]=170;
   }


 public void paint(Graphics g) {
     g.drawOval(50,50,300,300); 
     int i,x,y,x1,y1,sum,sum2,deg,deg1,r;
     r=150;
     sum=0;
     sum2=0;
     for(i=0;i<12;i++){
          sum=sum+pa[i];
        }
     
     deg1=pa[0]*360/sum ;
     double rad=Math.PI*deg1/180;
     x=(int)(200+r*Math.cos(rad));
     y=(int)(200-r*Math.sin(rad));
     g.drawLine(200,200,x,y);  
   for(i=1;i<12;i++){
    if(i>=1){
       sum2=sum2+pa[i-1]*360/sum;
       deg=pa[i]*360/sum+sum2;
       
       rad=Math.PI*deg/180;
       x1=(int)(200+r*Math.cos(rad));
       y1=(int)(200-r*Math.sin(rad));
       g.setColor(new Color(0,0,0));
       g.drawLine(200,200,x1,y1);
       int R=(int)(Math.random()*256);
       int G=(int)(Math.random()*256);
       int B=(int)(Math.random()*256);
       g.setColor(new Color(R,G,B));
       g.fillArc(50,50,300,300,deg,deg+pa[i+1]*360/sum); 
  }     
 }
  }
 
}


805ポイント を手に入れた。

Name: たいちう  ..比類無きプログラマー(77,400ポイント)   Date: 2010/04/28(水) 14:45   No:51315     
Title: Re:Javaでのグラフ作成について    
> 12等分することはできましたが、

本当にこのプログラムでできましたか?
ookamiさんも指摘している、

> また、円と線分の中心がずれているようです。

が直っていないですけど。


闇雲にやらず、まずはfillArcの練習をしましょう。
90度の扇形を描くことはできますか?
自由な向きで描けますか?

30度の扇形は描けますか?
60度の扇に見えるように、色違いで2つ並べて表示できますか?


86ポイント を手に入れた。

Name: ookami  ..初心者(6,416ポイント)   Date: 2010/04/28(水) 21:50   No:51323     
Title: Re:Javaでのグラフ作成について    
> 12等分することはできました

とありますが、

>     pa[0]=180;pa[1]=120;pa[2]=83;pa[3]=112;pa[4]=90;pa[5]=109;
>     pa[6]=120;pa[7]=130;pa[8]=200;pa[9]=155;pa[10]=180;pa[11]=170;

を見ると、12等分にはなったらおかしいのでは...?

あと、

pa[i+1]

のところでpa[12](範囲外)を参照していませんか? 編集済み


57ポイント を手に入れた。

Name: bun  ..入門者(3,680ポイント)   Date: 2010/04/29(木) 23:43   No:51350     
Title: Re:Javaでのグラフ作成について    
大変申し訳ありませんでした。
12等分ではなく12分割でした。
fillarc等を考慮しなおして書き直してみたのですが、画像のような空白ができたりしてしまう状態になってしまいました。一つ目の部分は空白になると思うのですが・・
どこがいけないんでしょうか?
ご教授お願いいたします。
import java.applet.Applet;
import java.awt.*;

  public class CircleGraph extends Applet {
  int pa[]=new int[12];

  public void init() {
     setBackground(new Color(255,255,255));
     pa[0]=180;pa[1]=120;pa[2]=83;pa[3]=112;pa[4]=90;pa[5]=109;
     pa[6]=120;pa[7]=130;pa[8]=200;pa[9]=155;pa[10]=180;pa[11]=170;
   }


 public void paint(Graphics g) {
     g.drawOval(0,0,300,300); 
     int i,x,y,x1,y1,sum,sum2,deg,deg1,r;
     r=150;
     sum=0;
     sum2=0;
     for(i=0;i<12;i++){
          sum=sum+pa[i];
        }
     
     deg1=pa[0]*360/sum ;
     double rad=Math.PI*deg1/180;
     x=(int)(150+r*Math.cos(rad));
     y=(int)(150-r*Math.sin(rad));
     g.drawLine(150,150,x,y);  
   for(i=1;i<12;i++){
    if(i>=1){
       sum2=sum2+pa[i-1]*360/sum;
       deg=pa[i]*360/sum+sum2;
       
       rad=Math.PI*deg/180;
       x1=(int)(150+r*Math.cos(rad));
       y1=(int)(150-r*Math.sin(rad));
       g.setColor(new Color(0,0,0));
       g.drawLine(150,150,x1,y1);
       int R=(int)(Math.random()*256);
       int G=(int)(Math.random()*256);
       int B=(int)(Math.random()*256);
       g.setColor(new Color(R,G,B));
       g.fillArc(0,0,300,300,deg,pa[i]*360/sum); 
  }     
 }
  }
 
}

 編集済み


541ポイント を手に入れた。

Name: ookami  ..初心者(6,690ポイント)   Date: 2010/04/30(金) 02:59   No:51366     
Title: Re:Javaでのグラフ作成について    
deg=pa[i]*360/sum+sum2;

deg=sum2;

でどうでしょう。あと[0]の分のfillArcを足せば、骨子は出来上がりじゃないでしょうか。

あとは、「右を基点に反時計周り」で意図どおりですか?

それから、輪郭は後から描いたほうがはっきりしていいと思います。


73ポイント を手に入れた。

Name: bun  ..入門者(3,752ポイント)   Date: 2010/04/30(金) 04:43   No:51369     
Title: Re:Javaでのグラフ作成について    
ありがとうございます!
形にはなりました。

しかし、空白が出てきてしまいます。
座標がint型なので整数で返してしまい、誤差が生じるのだと思います。
drawLineなどはdrawLine(int x1, int y1, int x2, int y2)のようにint型にしなければならないのでdoubleなどは使えないと思うのですが・・・
これの解決方法はあるのでしょうか? 




72ポイント を手に入れた。

Name: たいちう  ..比類無きプログラマー(77,900ポイント)   Date: 2010/04/30(金) 10:26   No:51370     
Title: Re:Javaでのグラフ作成について    
> 座標がint型なので整数で返してしまい、誤差が生じるのだと思います。

誤差が原因と考えるには大きすぎませんか?
最新のソースコードと実行結果を載せて下さい。


24ポイント を手に入れた。

Name: bun  ..入門者(4,475ポイント)   Date: 2010/05/01(土) 17:22   No:51411     
Title: Re:Javaでのグラフ作成について    
現状をアップします。
最後の部分に空白が出てます。

import java.applet.Applet;
import java.awt.*;

  public class CircleGraph extends Applet {
  int pa[]=new int[12];

  public void init() {
     setBackground(new Color(255,255,255));
     pa[0]=180;pa[1]=120;pa[2]=83;pa[3]=112;pa[4]=90;pa[5]=109;
     pa[6]=120;pa[7]=130;pa[8]=200;pa[9]=155;pa[10]=180;pa[11]=170;
   }


 public void paint(Graphics g) {
     g.drawOval(0,0,300,300); 
     int i,x,y,x1,y1,sum,sum2,deg,deg1,r;
     r=150;
     sum=0;
     sum2=0;
     for(i=0;i<12;i++){
          sum=sum+pa[i];
        }
     
     deg1=pa[0]*360/sum ;
     double rad=Math.PI*deg1/180;
     x=(int)(150+r*Math.cos(rad));
     y=(int)(150-r*Math.sin(rad));
     g.drawLine(150,150,x,y);  
     int R=(int)(Math.random()*256);
     int G=(int)(Math.random()*256);
     int B=(int)(Math.random()*256);
     g.setColor(new Color(R,G,B));
     g.fillArc(0,0,300,300,0,pa[0]*360/sum); 

  for(i=1;i<12;i++){
    if(i>=1){
       sum2=sum2+pa[i-1]*360/sum;
       deg=sum2;
       
       rad=Math.PI*deg/180;
       x1=(int)(150+r*Math.cos(rad));
       y1=(int)(150-r*Math.sin(rad));
       g.setColor(new Color(0,0,0));
       g.drawLine(150,150,x1,y1);
       R=(int)(Math.random()*256);
       G=(int)(Math.random()*256);
       B=(int)(Math.random()*256);
       g.setColor(new Color(R,G,B));
       g.fillArc(0,0,300,300,deg,pa[i]*360/sum); 
  }     
 }
   g.setColor(new Color(0,0,0));
   g.drawOval(0,0,300,300);   
}
 
}


723ポイント を手に入れた。

Name: ookami  ..初心者(6,703ポイント)   Date: 2010/05/01(土) 20:27   No:51414     
Title: Re:Javaでのグラフ作成について    
sum2=sum2+pa[i-1]*360/sum;
deg=sum2;



sum2=sum2+pa[i-1];
deg=sum2*360/sum;

ではどうでしょう。sum2の意味変わりますが。


13ポイント を手に入れた。

Name: box  ..ハッカー(152,484ポイント)   Date: 2010/05/01(土) 23:16   No:51431     
Title: Re:Javaでのグラフ作成について    
>   for(i=1;i<12;i++){
>     if(i>=1){

この前後のロジックが似通っていますよね。
同じような文を複数箇所に書くとメンテナンスしにくくなりそうです。
また、上記のforループはiが1〜11の間を回るので、
if文は不要ではないでしょうか(iは1以上に決まっている)。


106ポイント を手に入れた。

Name: たいちう  ..比類無きプログラマー(78,429ポイント)   Date: 2010/05/02(日) 09:04   No:51458     
Title: Re:Javaでのグラフ作成について    
誤差の蓄積ですね。
sum2の計算の際に小数点以下が切り捨てられますが、
切り捨てた後の値を12個足しても360にはなりません。
角度に関係する変数は全てdouble型で扱って、
fillArcに四捨五入して渡しましょう。
四捨五入した後の値を、その後の計算で使ってもいけません。

fillArcに渡している引数をデバッグ出力して、
思った通りに計算できているか確認してください。

boxさんも指摘しているように、似たようなロジックが複数あるのはバグの温床になります。
iが0の時とそれ以外を分ける必要はないはずですよ。

double sum = 0;
for (i = 0; i < 12; i++) {
    double deg = pa[i]を変換
    fillArc(0, 0, 300, 300, round(sum), round(sum + deg));
    sum += deg;
}


350ポイント を手に入れた。



Name: 蒼空  ..かけだし(2,047ポイント)   Date: 2010/05/02(日) 00:11   No:51441       
Title: トランプゲーム「大富豪」を作っているのですが    
まだC言語をやり始めて半年の初心者ですが、考えてもわからないので投稿させてもらいます。

トランプゲーム「大富豪」を作っているのですが、自分なりに下のようなプラグラムを考えてみました

@全体的な初期化
A山札の決定
B山札をプレイヤーに順に配る
C手札を強い順に並べる※「弱い → 強い」の順に
Dゲーム開始

大まかには↑のように考えています。
そして、自力で3番まではできたのですが、4番目がうまくできなくて持っている本などで調べましたが
エラーが出てしまいます。
エラーが出ている部分の付近は↓だと思いますので、どうか助言をくれませんか?
void tehuda_order(){//手札を並べる
    int a,r,i;
    int temp;//一時保管用
    for(a=0;a<PLAYER_MAX;a++){
        for(i=player[a].tehudamaisu-1;i>=0;i++){//for(i=0;i<player[a].tehudamaisu-1;i++){
            for(r=0;r<i;r++){
                if(player[a].tehuda[r].img>player[a].tehuda[r+1].img){
                    temp=player[a].tehuda[r].img;
                    player[a].tehuda[r].img=player[a].tehuda[r+1].img;
                    player[a].tehuda[r+1].img=temp;
                }
            }
        }
    }
}
エラーの内容は、「アクセス違反」らしいです。
知識が浅いので少々コードが醜いかもしれませんが、よろしくお願いします。
他力本願で悪いのですが、「もっといい方法があるよ」って方は教えていただけると幸いです。


2倍のポイントを手に入れた! 1,020ポイント を手に入れた。


Name: ookami  ..初心者(7,579ポイント)   Date: 2010/05/02(日) 00:23   No:51445     
Title: Re:トランプゲーム「大富豪」を作っているのですが    
ここだけかどうかわかりませんが、

for(i=player[a].tehudamaisu-1;i>=0;i++)

for(i=player[a].tehudamaisu-1;i>=0;i--)

は確実そうですね。


46ポイント を手に入れた。

Name: 蒼空  ..かけだし(2,133ポイント)   Date: 2010/05/02(日) 00:30   No:51447 解決!     
Title: Re:トランプゲーム「大富豪」を作っているのですが    
ookamiさん返信ありがとうございます!

まさか、そこを見落としていたなんて。
i++をi--に直したら正常になりました。
初歩的なミスを指摘してくださってありがとうございました。

これからも何かあったらまた質問させていただきますが、
その時はまたよろしくお願いします。
最後に本当にありがとうございました


86ポイント を手に入れた。



Name: ゴルスラ  ..ぴよぴよ(227ポイント)   Date: 2010/05/01(土) 22:11   No:51419       
Title: DXライブラリの時刻表示で、うまくいきません    
DXライブラリで時刻表示を作ってみたのですが、時刻は表示されるのですが、clsDx();で毎回消しているはずなのに、何故か重なって表示されます。
どうすればいいでしょうか?
回答、お願いしますm(__)m

ソースコード:

#include "DxLib.h"
#define SetDrawScreen(BACK) SetDrawScreen(DX_SCREEN_BACK)
#define SetDrawScreen(FRONT) SetDrawScreen(DX_SCREEN_FRONT)

      int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow ){
        ChangeWindowMode( TRUE ) ; // ウインドウモードに変更
        if( DxLib_Init() == -1 ){ return -1; }

        DATEDATA Date;            //時間データ

        for(;;){
            if( ProcessMessage() == -1 ){ break ;}
            clsDx();
            SetDrawScreen(BACK);
            GetDateTime( &Date ) ;    //時間取得
            printfDx("現在時刻:%d年%d月%d日、%d時%d分%d秒",Date.Year,Date.Mon,Date.Day,Date.Hour,Date.Min,Date.Sec);
            ScreenFlip();
        }

        DxLib_End();
        return 0;
}



227ポイント を手に入れた。


Name: nns  ..ぴよぴよ(52ポイント)   Date: 2010/05/01(土) 22:19   No:51421     
Title: Re:DXライブラリの時刻表示で、うまくいきません    
とりあえずSetDrawScreenは最初の1回だけでいいのでは?

30ポイント を手に入れた。

Name: ookami  ..初心者(7,002ポイント)   Date: 2010/05/01(土) 22:42   No:51423     
Title: Re:DXライブラリの時刻表示で、うまくいきません    
#define SetDrawScreen(BACK) SetDrawScreen(DX_SCREEN_BACK)
#define SetDrawScreen(FRONT) SetDrawScreen(DX_SCREEN_FRONT)
↑これですと、1行目のは無効になりますね。2行目のも意図どおりには行かないです。

SetDrawScreen(FRONT)でも
SetDrawScreen(BACK)でも
SetDrawScreen(hoge)でも
SetDrawScreen(DX_SCREEN_FRONT)に展開されます。

さじ加減の迷うところですが、私ならこの場合はdefineを使わないです。

あと、未確認ですがprintfDxではなくDrawStringFで試してみてください。 編集済み


166ポイント を手に入れた。

Name: ゴルスラ  ..ぴよぴよ(630ポイント)   Date: 2010/05/01(土) 23:01   No:51426     
Title: Re:DXライブラリの時刻表示で、うまくいきません    
nnsさん、ookamiさん、お早い回答有難うございます。
#defineの所ですが、どうすればいいのでしょうか?
また、DrawStringFがなかったようなので、DrawFormatStringかな?とおもって、こっちでやりました。
ですが、まだ正しく表示されません。
また、よろしくお願いします。
ソースコード:

#include "DxLib.h"

    int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow ){ 
        ChangeWindowMode( TRUE ) ; // ウインドウモードに変更 
        if( DxLib_Init() == -1 ){ return -1; } 

        DATEDATA Date;            //時間データ 

        SetDrawScreen(DX_SCREEN_BACK); 
        for(;;){ 
            if( ProcessMessage() == -1 ){ break ;} 
            clsDx(); 
             GetDateTime( &Date ) ;    //時間取得 
            DrawFormatString(0,0,GetColor(255,255,255),"現在時刻:%d年%d月%d日、%d時%d分%d秒",Date.Year,Date.Mon,Date.Day,Date.Hour,Date.Min,Date.Sec); 
            ScreenFlip(); 
        } 

        DxLib_End(); 
        return 0; 
}


403ポイント を手に入れた。

Name: ideyan  ..入門者(3,938ポイント)   Date: 2010/05/01(土) 23:28   No:51433     
Title: Re:DXライブラリの時刻表示で、うまくいきません    
ClearDrawScreen()
を使ってバックバッファを初期化してみてはどうですか?


25ポイント を手に入れた。

Name: ookami  ..初心者(7,220ポイント)   Date: 2010/05/01(土) 23:39   No:51435     
Title: Re:DXライブラリの時刻表示で、うまくいきません    
> rawFormatStringかな?
す、すみません(汗) それです。余計な手間をおかけしてしまいました。

#define SetDrawScreen(BACK) SetDrawScreen(DX_SCREEN_BACK)
#define SetDrawScreen(FRONT) SetDrawScreen(DX_SCREEN_FRONT)
↑この2行を消して、メインループの中の
SetDrawScreen(BACK)

SetDrawScreen(DX_SCREEN_BACK)
に変えます。


143ポイント を手に入れた。

Name: ゴルスラ  ..ぴよぴよ(838ポイント)   Date: 2010/05/01(土) 23:46   No:51436     
Title: Re:DXライブラリの時刻表示で、うまくいきません    
>>ideyanさん
ClearDrawScreen();ですが、時刻の表示はできますが、背景画像とか、文とかが全部消えてしまうので使えません。

>>ookamiさん
ということは、SetDrawScreen(BACK);
と短縮して書くことはできないということでしょうか?

#define DrawStringF DrawFormatString
↑のようなのは大丈夫でしょうか?:DrawStringF("表示"); 編集済み


2倍のポイントを手に入れた! 208ポイント を手に入れた。

Name: ideyan  ..入門者(4,602ポイント)   Date: 2010/05/02(日) 00:05   No:51440     
Title: Re:DXライブラリの時刻表示で、うまくいきません    
printfDx()はバッファ(?)に文字をためていき、
ScreenFlip()をするときに一気に描画するとリファレンスにあります。
clsDx()で消えるのはこのバッファに溜まっている文字です。

ClearDrawScreen()を使わない場合、バックバッファには前回描画したものが
そのまま残っています。
DrawFormatString()を使うにせよ、printfDx()を使うにせよ、
クリアせずに前回の描画の上から違う文字列を書いているだけなので
文字は重なって当然です。

>背景画像とか、文とかが全部消えてしまうので使えません。 
背景画像とか文も毎回描画しなおしじゃダメですか?

全部描画しなおすのがどうしても嫌だというなら、
時計を表示してる場所の背景部分を黒で塗り潰すとか、専用の画像を用意するなりして
その部分だけでも毎回描画するという方法もあるかと思います。


2倍のポイントを手に入れた! 664ポイント を手に入れた。

Name: ookami  ..初心者(7,533ポイント)   Date: 2010/05/02(日) 00:12   No:51442     
Title: Re:DXライブラリの時刻表示で、うまくいきません    
背景画像の表示はどこで(ループの外で?)やってるのでしょうか?


> SetDrawScreen(BACK);
と短縮して書きたい場合は、
int BACK=DX_SCREEN_BACK;

とするか、

#define BACK DX_SCREEN_BACK

ですかね。BACKという名前が他でかぶのを避けるために、ちと曲解ですが

#define SETDRAWSCREENBACK() SetDrawScreen(DX_SCREEN_BACK)

として

SETDRAWSCREENBACK();

と使うか。()はなくてもいいですが。

>#define DrawStringF DrawFormatString
>↑のようなのは大丈夫でしょうか?
大丈夫です。

えぇと…私の理解では↓
■defineのパラメータの例

#define a(b) A(b)
a(hoge) → A(hoge) に展開。bをhogeに置換。

#define a(b) A(B)
a(hoge) → A(B) に展開。b がないので置換がない。


259ポイント を手に入れた。

Name: ゴルスラ  ..かけだし(1,060ポイント)   Date: 2010/05/02(日) 00:16   No:51444 解決!     
Title: Re:DXライブラリの時刻表示で、うまくいきません    
>>ideyanさん
最終的にはやっぱりめんどくさい方法をとらなければいけないんですね^^;

>>ookamiさん
intを使ってみます。

返信ありがとうございました^^
最終的にはすべて再描写することにしました。


2倍のポイントを手に入れた! 222ポイント を手に入れた。




 
[ 1 , ... ]
 
 
管理者画面   RSS   + Powered By 21style +