C言語何でも質問掲示板


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

 
   リプレイデータの作り ....   
     ・[36894] ねこ 
     ・[36895] Dixq (管理人) 
     ・[36896] 御津凪 
     ・[36918] 早川 
     ・[36930] TRUTH 
   char* について   
     ・[36743] non 
     ・[36748] たかぎ 
     ・[36755] MNS 
     ・[36756] たかぎ 
     ・[36758] non 
     ・[36767] MNS 
     ・[36772] box 
     ・[36778] Hermit 
     ・[36783] たかぎ 
     ・[36792] Hermit 
     ・[36799] toyo 
     ・[36800] たかぎ 
     ・[36857] Hermit 
     ・[36858] hoge 
     ・[36868] たかぎ 
     ・[36870] たかぎ 
     ・[36921] Hermit 
     ・[36923] たかぎ 
     ・[36924] Hermit 
     ・[36926] Justy 
     ・[36927] たかぎ 
   LPSTR型の文字列をLPW ....   
     ・[36900] 御津凪 
     ・[36919] なすがに 
   課題で悩んでいます・ ....   
     ・[36909] もぐりん 
     ・[36916] non 
   よろしくお願いします   
     ・[36912] non 
     ・[36915] non 
   質問です   
     ・[36873] Mist 
     ・[36874] ねこ 
     ・[36879] ユーリ 
     ・[36910] conio 
   ボスを無敵にするやり ....   
     ・[36727] TRUTH 
     ・[36769] kai 
     ・[36856] kai 
     ・[36884] TRUTH 
     ・[36902] kai 
   ファイルのプロパティ ....   
     ・[36728] 御津凪 
     ・[36848] なすがに 
     ・[36898] なすがに 
   ゲームプログタミング ....   
     ・[36844] pooka 
     ・[36892] やそ 
     ・[36897] もじゃ 
   ボム発動時について   
     ・[36875] バグ 
     ・[36891] Dixq (管理人) 
   割った余りという概念   
     ・[36887] ねこ 
     ・[36888] TRUTH 
     ・[36890] ランド 
   txtファイルのread   
     ・[36720] よーむ 
     ・[36721] ねこ 
     ・[36722] Mist 
     ・[36723] Mist 
     ・[36724] non 
     ・[36725] LUNA 
     ・[36889] LUNA 
   VB6についての質問です ....   
     ・[36816] Blue 
     ・[36817] やそ 
     ・[36818] nokty 
     ・[36819] Blue 
     ・[36820] バグ 
     ・[36876] nokty 
     ・[36877] ねこ 
     ・[36878] Blue 
     ・[36880] バグ 
     ・[36885] nokty 
     ・[36886] nokty 
   LoadDivGraph関数につ ....   
     ・[36847] ねこ 
     ・[36871] ヒラリー 
   無題   
     ・[36866] 初級者 
     ・[36867] toyo 
   warning C4996   
     ・[36710] DVDM 
     ・[36713] ☆ 
     ・[36715] 通り 
     ・[36766] み〜 
     ・[36855] たいちう 
     ・[36864] DVDM 
   配列について質問です   
     ・[36712] dic 
     ・[36737] 静波 
     ・[36739] non 
     ・[36746] 静波 
     ・[36750] non 
     ・[36768] 静波 
     ・[36771] ねこ 
     ・[36773] non 
     ・[36776] dic 
     ・[36777] 静波 
     ・[36784] 静波 
     ・[36789] ねこ 
     ・[36795] 静波 
     ・[36803] non 
     ・[36860] 静波 
   背景をななめに   
     ・[36505] @ 
     ・[36509] ねこ 
     ・[36548] kazuoni 
     ・[36564] kazuoni 
     ・[36859] ☆ 
   Visual C++でのデバッ ....   
     ・[36851] YuO 
     ・[36852] nayo 
   100!まで表せる計算機   
     ・[36785] たかぎ 
     ・[36786] ぷれこ 
     ・[36788] たかぎ 
     ・[36804] non 
     ・[36811] lbfuvab 
     ・[36841] ぷれこ 
   ×で終了した時の処理   
     ・[36822] yu 
     ・[36823] チルチル 
     ・[36824] yu 
     ・[36825] ねこ 
     ・[36828] チルチル 
     ・[36829] ねこ 
     ・[36831] チルチル 
     ・[36832] 御津凪 
     ・[36834] ねこ 
     ・[36836] yu 
     ・[36837] チルチル 
     ・[36839] yu 
     ・[36840] チルチル 
   アンチエイリアシング ....   
     ・[36794] 御津凪 
     ・[36833] てんちょー 
   STG作ってきました ....   
     ・[36736] チルチル 
     ・[36744] ひよこ 
     ・[36745] チルチル 
     ・[36761] ひよこ 
     ・[36763] array 
     ・[36774] ひよこ 
     ・[36779] あ〜る 
     ・[36780] ひよこ 
     ・[36805] @ 
     ・[36810] ひよこ 
     ・[36812] TRUTH 
     ・[36814] ひよこ 
   エラー   
     ・[36806] 愛 
     ・[36808] conio 
     ・[36809] 御津凪 
   C言語について質問です ....   
     ・[36684] non 
     ・[36685] C言語初心者 
     ・[36687] 紅葉 
     ・[36691] non 
     ・[36692] C言語初心者 
     ・[36694] box 
     ・[36705] C言語初心者 
     ・[36716] non 
     ・[36730] conio 
     ・[36781] C言語初心者  
     ・[36787] conio 
     ・[36790] C言語初心者 
     ・[36793] conio 
     ・[36796] C言語初心者 
     ・[36797] conio 
     ・[36798] C言語初心者 
     ・[36802] conio 
   アイテムの個数につい ....   
     ・[36762] yu 
     ・[36764] あ〜る 
     ・[36770] yu 
     ・[36775] あ〜る 
   Releaseができない・・ ....   
     ・[36700] 御津凪 
     ・[36702] チルチル 
     ・[36703] 御津凪 
     ・[36704] Justy 
     ・[36731] チルチル 
     ・[36732] 御津凪 
     ・[36734] チルチル 
     ・[36735] 御津凪 
     ・[36738] チルチル 
     ・[36740] 御津凪 
     ・[36742] チルチル 
     ・[36747] 御津凪 
     ・[36749] チルチル 
     ・[36751] ねこ 
     ・[36752] チルチル 
     ・[36753] 御津凪 
     ・[36754] チルチル 
   このサイトにある「AA ....   
     ・[36686] Dixq (管理人) 
     ・[36729] kutarapple 
   .netでのtextbox   
     ・[36384] YuO 
     ・[36385] s 
     ・[36387] YuO 
     ・[36403] S西 
     ・[36411] バグ 
     ・[36443] S西 
     ・[36476] S西 
     ・[36481] S西 
     ・[36490] バグ 
     ・[36500] YuO 
     ・[36545] S西 
     ・[36547] S西 
     ・[36559] バグ 
     ・[36571] S西 
     ・[36573] バグ 
     ・[36574] バグ 
     ・[36651] S西 
     ・[36658] pooka 
     ・[36677] S西 
     ・[36679] バグ 
     ・[36681] S西 
     ・[36683] S西 
     ・[36696] バグ 
     ・[36699] S西 
     ・[36701] S西 
     ・[36714] バグ 
     ・[36718] バグ 
   HPのサーバー移行につ ....   
     ・[36695] 御津凪 
     ・[36697] array 
     ・[36711] Dixq (管理人) 
     ・[36717] 御津凪 
   3D背景の消失点につい ....   
     ・[36673] Dixq (管理人) 
     ・[36693] 土鳩 
   ボスの弾幕が変わらな ....   
     ・[36644] array 
     ・[36645] yrao 
     ・[36650] Dixq (管理人) 
     ・[36659] ひよこ 
     ・[36662] yrao 
     ・[36664] yu 
     ・[36665] yrao 
     ・[36666] array 
     ・[36674] Dixq (管理人) 
     ・[36688] yrao 
     ・[36690] Dixq (管理人) 
   色の取得   
     ・[36669] yu 
     ・[36670] Dixq (管理人) 
     ・[36680] 博多市 
   導入法   
     ・[36661] yu 
     ・[36672] Dixq (管理人) 
     ・[36676] lbfuvab 
   WinXPにて ファイルの ....   
     ・[36614] Justy 
     ・[36617] なすがに 
     ・[36619] Justy 
     ・[36621] kokosan60 
     ・[36629] Justy 
     ・[36632] toyo 
     ・[36634] なすがに 
     ・[36648] Justy 
     ・[36653] なすがに 
     ・[36656] Justy 
     ・[36675] なすがに 
   ポインタエラー   
     ・[36663] yu 
     ・[36671] Dixq (管理人) 
   2Dポリゴンに使う配 ....   
     ・[36655] Justy 
     ・[36667] チルチル 
   トーナメント表作成に ....   
     ・[36640] 御津凪 
     ・[36646] Dixq (管理人) 
     ・[36647] 羽球好き 
     ・[36649] 御津凪 
   43章 きっちりFPSを ....   
     ・[36637] ひよこ 
     ・[36642] すずめ 
   グレイズを実装!   
     ・[36390] あ〜る 
     ・[36391] ひよこ 
     ・[36395] Dixq (管理人) 
     ・[36397] あ〜る 
     ・[36399] Dixq (管理人) 
     ・[36401] あ〜る 
     ・[36410] ねこ 
     ・[36412] yu 
     ・[36414] Dixq (管理人) 
     ・[36416] ねこ 
     ・[36418] あ〜る 
     ・[36421] yu 
     ・[36426] ねこ 
     ・[36454] 素人 
     ・[36457] MNS 
     ・[36463] 素人 
     ・[36468] 素人 
     ・[36504] - 
     ・[36510] ねこ 
     ・[36533] DVDM 
     ・[36553] 素人 
     ・[36580] DVDM 
     ・[36582] 素人 
     ・[36584] あ〜る 
     ・[36607] 素人 
     ・[36608] yu 
     ・[36610] 素人 
     ・[36611] yu 
     ・[36613] 素人 
     ・[36615] yu 
     ・[36616] 素人 
     ・[36618] DVDM 
     ・[36622] Dixq (管理人) 
     ・[36627] yu 
     ・[36641] 素人 
   二次元配列の問題で質 ....   
     ・[36522] non 
     ・[36539] 初級者 
     ・[36540] itoyan 
     ・[36554] やそ 
     ・[36556] やそ 
     ・[36560] ぷれこ 
     ・[36562] やそ 
     ・[36563] やそ 
     ・[36566] ねこ 
     ・[36567] non 
     ・[36568] toyo 
     ・[36569] non 
     ・[36570] やそ 
     ・[36572] non 
     ・[36578] ぷれこ 
     ・[36579] やそ 
     ・[36581] non 
     ・[36628] ぷれこ 
     ・[36638] itoyan 
   すでに定義されてます ....   
     ・[36546] conio 
     ・[36620] 亀猫 
     ・[36623] Dixq (管理人) 
     ・[36625] conio 
     ・[36635] 亀猫 

Name: 早川 [URL]  ..ぴよぴよ(415ポイント)   Date: 2009/07/15(水) 14:07   No:36893       
Title: リプレイデータの作り方について    
いつも質問ばかりで済みません。
最近弾幕ゲームを作っている者です。
ゲームはもうほぼ完成しているんですが、
リプレイデータの作り方がよくわかりません。
昔のゲームのリプレイデータを観てみると、数字の羅列があるんですが・・・
弾幕ゲームではやっぱり、弾一つ一つを記録しなきゃいけない・・・わけはないですよね?
だって、重すぎですし。多分、自キャラの動きを記録する方法であってますか?

あともう一つ、乱数によって作られた弾のデータは格納できませんよね。
今作っているゲームはホーミング弾以外に乱数弾を使っちゃってるんですよ。

・・・やっぱり、完全な乱数を使わずに弾を作成する方法で作りなおすべきなのでしょうか??


質問が多くなって済みません。お聞きしたいことは、

・「リプレイデータ作成はキー操作を記録する方法でいいのですか?」
・「そうなると、弾幕に乱数弾を使わないほうがいいのですか?」

です。


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


Name: ねこ  ..プログラマー(27,085ポイント)   Date: 2009/07/15(水) 14:36   No:36894     
Title: Re:リプレイデータの作り方について    
・「リプレイデータ作成はキー操作を記録する方法でいいのですか?」
はい、そうです。シューティングならそれが普通です。

・「そうなると、弾幕に乱数弾を使わないほうがいいのですか?」
ランダムにrand関数を用いる場合、srand関数でランダム値の制御を行う事が出来ます。
time関数で取得した値をsrand関数で設定し、またリプレイデータの「時間情報」として保存します。

リプレイを再生する時はリプレイデータにある「時間情報」を再度srandに割り当てる事でリプレイ保存時と同じ乱数を発生させる事が出来ます。
よく分からない場合は記述した関数名で検索等すると色々とサンプルが出てくると思います。


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

Name: Dixq (管理人)  ..ウィザード(1,044,865ポイント)   Date: 2009/07/15(水) 14:45   No:36895     
Title: Re:リプレイデータの作り方について    
キーの入力状態を記憶しておき、操作した時と同じ状況を作り出せばいいですよ。

あと、Justyさんからの受け売りですが、
全てのキーの入力状態を記憶する必要はなく、キーの入力に変化があったフレーム番号とその変化を記憶させれば、リプレイデータが軽量化出来そうです。


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

Name: 御津凪 [URL]  ..ハッカー(105,672ポイント)   Date: 2009/07/15(水) 14:45   No:36896     
Title: Re:リプレイデータの作り方について    
ねこさんの発言の追記です。

ゲーム中でキー入力などに左右されない部分(描画処理など)で乱数が使用されていた場合、
乱数の発生順序が狂うことがあり正しくリプレイを再生できなくなる可能性があるので、
その点だけは注意してください。

あと、ここの掲示板の過去ログにもリプレイデータの作り方で質問されているトピックがあるので、
そちらを見ておくのも良いかもしれません。


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

Name: 早川  ..ぴよぴよ(469ポイント)   Date: 2009/07/15(水) 22:01   No:36918 解決!     
Title: Re:リプレイデータの作り方について    
素早い返答ありがとうございます!!
現在、乱数を使わずに配列で「乱数表」を使用する方法を
とっています。

「キー入力に変化があったフレームのみ記録」はすごく参考になりました!!
さっそくやってみます!!


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

Name: TRUTH  ..かけだし(1,877ポイント)   Date: 2009/07/16(木) 10:20   No:36930     
Title: Re:リプレイデータの作り方について    
DXライブラリのサンプルプログラムのところに
乱数初期化値を保存して、乱数も制御するという方法があるようです。
自分はまだ試していませんが、参考になれば・・・

ttp://homepage2.nifty.com/natupaji/DxLib/dxprogram.html#N25


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



Name: MNS  ..中級者(13,240ポイント)   Date: 2009/07/13(月) 19:08   No:36741       
Title: char* について    
const char* string = "ABCDE" や
char* string = "ABCDE" は

char str[] = "ABCDE";
char* string = &str[0];

と同じことなのでしょうか?

ふと、このようなコードを見た時に、
これでは"A"の分しか確保されなのでは無いか、と思いまして。


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


Name: non  ..熟練のプログラマー(54,714ポイント)   Date: 2009/07/13(月) 19:35   No:36743     
Title: Re:char* について    
同じかと問われれば、違うと思いますね。
stringに入るアドレスが、スタック領域を指すか、静的領域を指すかが違ってます。

>これでは"A"の分しか確保されなのでは無いか、と思いまして。
ちょっと、意味がわかりません。どこに確保?



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

Name: たかぎ [URL]  ..ハッカー(106,957ポイント)   Date: 2009/07/13(月) 20:05   No:36748     
Title: Re:char* について    
> 同じことなのでしょうか?

違います。
どう違うかは文脈にもよりますので、前後のコードを補足してください。


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

Name: MNS  ..中級者(13,682ポイント)   Date: 2009/07/13(月) 21:02   No:36755     
Title: Re:char* について    
>>nonさん
const char* の場合は静的領域
ただの char* の場合は静的もしくはスタック領域を指すということでしょうか?

>>たかぎさん
要は、
char* string = "ABCDE"
このコードを実行すると、
char str[] = "ABCDE";
"ABCDE"が配列のようにがどこかの空メモリにおかれ、
char* string = &str[0];
その最初のアドレス('A'のアドレス)がstring代入される
ということです。(strは適当にでっちあげたものです)

>"A"の分しか確保されなのでは無いか
'A'はどこかの空いたメモリにおかれるかもしれませんが、
"BCDE"分はメモリが空いているか空いていないか関係なく
'A'のあとの連続したところに置かれてしまうのではないか、(配列の添字を超えた時のように)
ということです。


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

Name: たかぎ [URL]  ..ハッカー(107,084ポイント)   Date: 2009/07/13(月) 21:19   No:36756     
Title: Re:char* について    
> 要は、
> char* string = "ABCDE"
> このコードを実行すると、
> char str[] = "ABCDE";
> "ABCDE"が配列のようにがどこかの空メモリにおかれ、
> char* string = &str[0];
> その最初のアドレス('A'のアドレス)がstring代入される
> ということです。(strは適当にでっちあげたものです)

ですから、具体的にどうなるかは文脈に依存します。さらには処理系にも依存します。
また、「空メモリ」とは何でしょうか?

strがどの記憶域に配置されるか、そしてどんな結合(外部結合、内部結合、無結合)を持つか、そして、文字列の書き換え可否について考えてみてください。


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

Name: non  ..熟練のプログラマー(54,782ポイント)   Date: 2009/07/13(月) 21:21   No:36758     
Title: Re:char* について    
char* string = "ABCDE"
の "ABCDE"が静的領域に確保されます。
char str[] = "ABCDE";
では、str[0]からstr[5]までの領域がスタック領域に確保されて、"ABCDE"が代入されます。


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

Name: MNS  ..中級者(13,857ポイント)   Date: 2009/07/13(月) 22:07   No:36767     
Title: Re:char* について    
う〜ん、想像以上に難しいことみたいですね。
環境によって異なるから一概には言えないということでしょうか?

というか、そもそも
const char* string = "ABCDE"
char* string = "ABCDE"
前者は定数で後者は変数ですから全く別物ですね

char* string = "ABCDE"
は静的領域に確保されるんですか?
まだ勉強が必要なようです。

これ以上難しいことはわたしは理解できませんので、
質問を絞りたいと思います。
大丈夫そうなんですが、
@char *string = "ABCDE"というコードは安全か
A1が大丈夫な場合、stringは何を指すのか


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

Name: box  ..ハッカー(142,034ポイント)   Date: 2009/07/13(月) 22:39   No:36772     
Title: Re:char* について    
とにかく、コードの断片だけ見ても何ともいえない、
というのは、ご指摘のあったとおりです。

当該の文を含むコード全体と、お使いのコンパイラを
教えてくだされば、より厳密な回答が来ると思います。


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

Name: Hermit  ..上級者(24,732ポイント)   Date: 2009/07/13(月) 23:40   No:36778     
Title: Re:char* について    
>const char* string = "ABCDE"
>char* string = "ABCDE"
>前者は定数で後者は変数ですから全く別物ですね

C++ だったら違うかもしれませんが(C++はよく知らないので)
const は、C に於いては、コンパイラに、「ここは書き換えてはいけませんよ」と教えているだけです。
この場合は、"ABCDE" を書き換えてはいけませんと教えているだけです。

char * const string = "ABCDE";
だったら、「string を書き換えてはいけません」という意味になります。
(これくらいはわかるか・・・)

出来上がるコードは、基本的には同じものになります。
(最適化とかが効いて、ちょっと違うコードになることもあるかもしれませんが・・・基本的には同じになります)

で、その部分を書き換えようとした場合・・・エラーになるんでしたっけ?
古い gcc などだと、警告どまりだった気もしますが・・
はっきり覚えてないので、試す気があれば、自分で試してみてください(^^;

見落としていたようなのでついでに
>@char *string = "ABCDE"というコードは安全か
Cを使う限り安全ということはないです。

>A1が大丈夫な場合、stringは何を指すのか
初期状態は、"ABCDE" の 'A' の位置のポインタです。


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

Name: たかぎ [URL]  ..ハッカー(107,328ポイント)   Date: 2009/07/14(火) 00:15   No:36783     
Title: Re:char* について    
> const は、C に於いては、コンパイラに、「ここは書き換えてはいけませんよ」と教えているだけです。

規格上、具体的な規定はありませんが、多くの場合、constの有無によって配置すべきセクションが変わります。
結果として、メモリマップ上のどこに配置されるか、ROMなのかRAMなのかが変わります。
処理系によっては、const修飾子の有無によって、ポインタのサイズが変わります。

> で、その部分を書き換えようとした場合・・・エラーになるんでしたっけ?

未定義動作ですので、完全に処理系によって振る舞いが異なります。

ある処理系では、文字列リテラルがRAMに配置され、普通に書き換えができてしまいます。
ある処理系では、文字列リテラルがROMに配置され、書き込んでも値が変わりません。
ある処理系では、MMUによって保護されるため、書き込もうとするとSIGSEGVが発生するなどします。
ある処理系では、ROMに書き込んだ時点でリセットがかかります。


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

Name: Hermit  ..上級者(24,814ポイント)   Date: 2009/07/14(火) 01:00   No:36792     
Title: Re:char* について    
>多くの場合、constの有無によって配置すべきセクションが変わります。

昔ながらの知識だと、間違いが多いか(^^;

const の有無によって、配置する場所が変わるんですか?
auto 変数に const 付けても、auto変数ですよね。
char *string = "ABCDE";
だと、"ABCDE" は、最初から書き換え不能エリアに配置されていいので変化ないはずですよね。
const char string[]="ABCDE";
のような場合でしょうか?
外部変数の場合かな・・・

ポインタサイズまで変わるんですか?
strlen には、普通の const でない文字列ポインタは渡せないんですか?
それとも、暗黙に拡張、変換されて渡される?

最近わからないことが多い・・・


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

Name: toyo  ..プログラマー(37,539ポイント)   Date: 2009/07/14(火) 06:08   No:36799     
Title: Re:char* について    
>char *string = "ABCDE";
>だと、"ABCDE" は、最初から書き換え不能エリアに配置されていいので変化ないはずですよね。

#include <stdio.h>

int main(void)
{
char* str = "ABC";
str[1] = 'Z';
printf("%s\n", str);
return 0;
}

コンパイラによっては(具体的にはbcc32)上のプログラムで普通に実行できたりします
bcc32ではconst char* str = "ABC";だと書き換えようとしたところでコンパイルエラーになります
規約に決まってないことはコンパイラ作った人の考え方でいろいろな実装があり限定はできません


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

Name: たかぎ [URL]  ..ハッカー(107,521ポイント)   Date: 2009/07/14(火) 07:50   No:36800     
Title: Re:char* について    
> const の有無によって、配置する場所が変わるんですか?
> auto 変数に const 付けても、auto変数ですよね。

自動記憶域の場合はセクションは変わりません。

> char *string = "ABCDE";
> だと、"ABCDE" は、最初から書き換え不能エリアに配置されていいので変化ないはずですよね。

変化はないですが、書き換え不能エリアかどうかはわかりません。

> const char string[]="ABCDE";
> のような場合でしょうか?
> 外部変数の場合かな・・・

静的記憶域の場合は、constの有無でセクションが変わります。

> ポインタサイズまで変わるんですか?
> strlen には、普通の const でない文字列ポインタは渡せないんですか?
> それとも、暗黙に拡張、変換されて渡される?

constの有無でポインタのサイズが変わるのは、例えばM32C用のコンパイラであるNC308です。
この環境では、const T*はデフォルトでfarポインタ、T*はデフォルトでnearポインタになります。
(非標準な独自拡張ではありますが...)
strlenの場合、const char*を受け取りますので、near → farに暗黙的に変換されます。


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

Name: Hermit  ..プログラマー(25,034ポイント)   Date: 2009/07/15(水) 01:17   No:36857     
Title: Re:char* について    
>静的記憶域の場合は、constの有無でセクションが変わります。
そこでしたか。
という事は、extern か、static の場合って事ですね。
そのあたりだと、const の付加で領域が変わっても問題無さそうですね。
そこまで考えてなかった。

>strlenの場合、const char*を受け取りますので、near → farに暗黙的に変換されます。
こんなのも有りですか。不用意に、const は付けられませんね。
これだと、ポインタ配列の確保が難しくなるので、ANSICの仕様にあるなら、
ANSIに文句を言いたい。


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

Name: hoge  ..入門者(2,990ポイント)   Date: 2009/07/15(水) 01:58   No:36858     
Title: Re:char* について    
>constの有無でポインタのサイズが変わるのは、例えばM32C用のコンパイラであるNC308です。
こんな特殊な例を出しても初心者が混乱するだけでは?
少なくとも規格上は、constの有無でポインタのサイズ変わることはない筈。



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

Name: たかぎ [URL]  ..ハッカー(107,539ポイント)   Date: 2009/07/15(水) 07:12   No:36868     
Title: Re:char* について    
> こんな特殊例な例を出しても初心者が混乱するだけでは?

だから、処理系を補足するように前からお願いしています。
初心者かどうかもわかりませんし。


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

Name: たかぎ [URL]  ..ハッカー(107,839ポイント)   Date: 2009/07/15(水) 07:44   No:36870     
Title: Re:char* について    
> 少なくとも規格上は、constの有無でポインタのサイズ変わることはない筈。

一応これについても書いておきます。
JIS X3010:2003の「6.2.5 型」には、

 voidへのポインタは,文字型へのポインタと同じ表現及び同じ境界調整要求をもたなければならない。同様に,適合する型へのポインタ同士の場合,修飾版であるか又は非修飾版であるかに関わらず,同じ表現及び同じ境界調整要求を持たなければならない。

とありますので、標準規格の範囲では、const修飾子の有無によってポインタのサイズが変わることはありません。


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

Name: Hermit  ..上級者(24,805ポイント)   Date: 2009/07/15(水) 23:50   No:36921     
Title: Re:char* について    
>規格上、具体的な規定はありませんが、多くの場合、constの有無によって配置すべきセクションが変わります。
>結果として、メモリマップ上のどこに配置されるか、ROMなのかRAMなのかが変わります。
>処理系によっては、const修飾子の有無によって、ポインタのサイズが変わります。

続けて書いてあったので、ポインタサイズが変わるのも規格上
(ANSI か、ISO か、JIS ですよね。)
規定が無い為かと思ってしまいました。


とりあえず確認で聞きますが、規格上では、
「constの有無によって配置すべきセクションが変わります。 」
の方は、const を付けることによって配置すべきセクションが変わることは許されているんですよね。
(変えない選択肢もあるとは思うが、変える選択肢もあるってことでいいんですよね)


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

Name: たかぎ [URL]  ..ハッカー(107,880ポイント)   Date: 2009/07/16(木) 00:29   No:36923     
Title: Re:char* について    
> 続けて書いてあったので、ポインタサイズが変わるのも規格上
> (ANSI か、ISO か、JIS ですよね。)
> 規定が無い為かと思ってしまいました。

すみません。ちょっと混乱させましたね。

> とりあえず確認で聞きますが、規格上では、
> 「constの有無によって配置すべきセクションが変わります。 」
> の方は、const を付けることによって配置すべきセクションが変わることは許されているんですよね。
> (変えない選択肢もあるとは思うが、変える選択肢もあるってことでいいんですよね)

こちらについては何も決まっていないはずです。
ただ、ほとんどの処理系ではセクションが変わりますね。


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

Name: Hermit  ..上級者(24,848ポイント)   Date: 2009/07/16(木) 01:14   No:36924     
Title: Re:char* について    
bcc32 では変わらないようだったので
久しぶりに、gcc 入れてコンパイルすると、
const 部分は、
> .section .rdata,"dr"
が付いてますね。
読み込み専用領域に読み込まれるんでしょうね。

const はこんな作用もあるんだと、改めて知りました。


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

Name: Justy  ..伝説なるハッカー(394,077ポイント)   Date: 2009/07/16(木) 01:40   No:36926     
Title: Re:char* について    

>読み込み専用領域に読み込まれるんでしょうね

 これ環境によっては結構クリティカルなことになったりするんですよね。

 例えば、1MBのデータを constをつけずに静的変数として定義した場合、
ROM側にその 1MBのデータがあるのはいいのですが、
(実際にも誰も書き換えないのだとしても constが無い以上書き換えられると
判断され)スタートアップ時にその ROM上のデータを RAMにコピーして
データを持つ処理系があったりします。

 メモリがそのデータの容量に対し潤沢にあればいいのですが、
そうでない場合それに気づかないと結構痛いことに……。


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

Name: たかぎ [URL]  ..ハッカー(107,925ポイント)   Date: 2009/07/16(木) 07:39   No:36927     
Title: Re:char* について    
>  メモリがそのデータの容量に対し潤沢にあればいいのですが、
> そうでない場合それに気づかないと結構痛いことに……。

C++だと、動的初期化が必要なオブジェクトは、constを付けていてもRAMに配置されるので、知らないと痛いめにあいますね。


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



Name: なすがに  ..入門者(2,790ポイント)   Date: 2009/07/15(水) 15:49   No:36899       
Title: LPSTR型の文字列をLPWSTR型に変換するには?    
お世話になっております。

Win XP SP3 VC++ 2008EE を使用しています。言語はVC++です。

先日ここで質問し、ファイルのプロパティの概要に文字列を書き込む方法を教えていただきました。
http://www.play21.jp/board/formz.cgi?action=res&resno=36605&page=&id=dixq&rln=36675

教えていただいたサンプルプログラムを元に、
コマンドラインの引数で指定された文字列を、ファイルのプロパティの概要に書き込む
プログラムを作成しています。

単純に直接代入するコードを書いたところコンパイルエラーが出たので、
文字列の型があってないのが原因と思い確認してみたところ、
WinMainの引数 lpCmdLine は、LPSTR型で、
書き込み先の構造体のメンバ propWrite[i].pwszVal は、LPWSTR型でした。

試しに(LPWSTR)でキャストを行い作ってみたのですが、
書き込みこそできるものの、文字化けが起こってしまいます。
例えば、
abcdefg

扡摣ユgFdz
になります。

LPSTR型で受けた文字列をLPWSTR型に変換するには、どのようにすればよいのでしょうか。

よろしくお願いいたします。


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


Name: 御津凪 [URL]  ..ハッカー(105,895ポイント)   Date: 2009/07/15(水) 16:03   No:36900     
Title: Re:LPSTR型の文字列をLPWSTR型に変換するには?    
LPSTR 型の元は char* 型(ANSI 文字列)で、
LPWSTR 型の元は wchar_t* 型(UNICODE 文字列)となっています。

つまり、 ANSI 文字列から UNICODE 文字列に変換する必要があります。

VC++ では、 wbtowcs_s という UNICODE 文字列へ変換する関数があり、
それを使用すれば変換が可能です。

または、 WinMain の代わりに wWinMain を使用する方法もあります。
wWinMain の引数は、
int WINAPI wWinMain(HINSTANCE, HINSTANCE, LPWSTR, int);



となっており、LPWSTR でコマンドライン引数を受け取ることが出来ます。


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

Name: なすがに  ..入門者(2,915ポイント)   Date: 2009/07/15(水) 22:58   No:36919 解決!     
Title: Re:LPSTR型の文字列をLPWSTR型に変換するには?    
早速のご回答ありがとうございます。

教えてくださった関数は、mbstowcs_s関数でしょうか。
始めて使用する関数でしたが、こちらのページを参考にしながら
使ってみたところ、うまくいきました。
http://msdn.microsoft.com/ja-jp/library/ms235631%28VS.80%29.aspx

また、wWinMainを使用する方法でも、目的を達成できました。
特別な処理が必要なさそうでしたので、こちらでやることにしました。

特に文字の型について、大変勉強になりました。
丁寧なご回答ありがとうございました。


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



Name:  ..ぴよぴよ(184ポイント)   Date: 2009/07/15(水) 19:26   No:36907       
Title: 課題で悩んでいます・・    
初めての書き込みです。
課題でプログラムを作成するという宿題がでていて、どうしてもわからないところがあるんです。
誰か教えていただけませんか?

任意の数字を100個エクセル(sheet1のA1:A100)にデータを作成しなさい。
データは疑似乱数を使うこと。
ここまではできました。
このデータを降順に並び替えを行う手続きmySort(A1:A100)を作成し、sheet1のA102で実行しましょうと
課題がでているのですが、どうプログラムを作ればいいのかわからないので教えてください。
よろしくお願いします。


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


Name: もぐりん  ..ぴよぴよ(230ポイント)   Date: 2009/07/15(水) 19:58   No:36909     
Title: Re:課題で悩んでいます・・    
宿題は、C言語で作成するのですか?
それともExcelのVBAで作成するのですか?
後者ならC言語とは関係ない質問になりますよ。


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

Name: non  ..熟練のプログラマー(55,023ポイント)   Date: 2009/07/15(水) 21:14   No:36916     
Title: Re:課題で悩んでいます・・    
>sheet1のA102で実行しましょう
これって、どういう意味ですか?
セルA102にコマンドボタンを作るのでしょうか?


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



Name: ケン  ..ぴよぴよ(2ポイント)   Date: 2009/07/15(水) 19:28   No:36908       
Title: よろしくお願いします    
キーボードから符号なし整数とシフト数を入力し,指定した数だけ右へ循環シフト(ローテーション)した結果を表示するプログラムを作成せよ。という問題が宿題で出されたのですが全く分からなくて困っています。

お力を貸していただかないでしょうか?


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


Name: non  ..熟練のプログラマー(54,836ポイント)   Date: 2009/07/15(水) 20:28   No:36912     
Title: Re:よろしくお願いします    
符号なし整数は何バイトですか?また、型は何ですか?


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

Name: non  ..熟練のプログラマー(54,972ポイント)   Date: 2009/07/15(水) 21:08   No:36915     
Title: Re:よろしくお願いします    
仮に8ビットだとした場合。
また、右にローテートとは下位にシフトするとした場合。
元の数をaとすると、

aと0x01との論理積をとる。これをcとする。
cを左に7ビットシフトし、これをcとする。
aを右に1ビットシフトし、これをaとする。
aとcの論理和をとる。


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



Name: ユーリ  ..入門者(4,604ポイント)   Date: 2009/07/15(水) 09:21   No:36872       
Title: 質問です    

#include <stdio.h>

int main(void)
{
char i;
char moji[30];
printf("文字を入力してください\n");
scanf("%s",moji);

switch(moji[i]) {
case 'a':
printf("%s",moji);

case 'i':
printf("%s",moji);

case 'u':
printf("%s",moji);

case 'e':
printf("%s",moji);

case 'o':
printf("%s",moji);

default:
break;
}
moji[i]='=';
printf("%s",moji);

return 0;
}

入力した文字たとえばemiを母音のところを=表示=m=と表示したいのですが
上記のプログラムまでできていますがうまくいきません
ヒントの方をお願いします。


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


Name: Mist  ..熟練のプログラマー(65,897ポイント)   Date: 2009/07/15(水) 09:36   No:36873     
Title: Re:質問です    
前も指摘されていましたがタイトルは質問内容がわかりるものにしましょう。

switch以降は間違っていますので以下をヒントに作り直してください。
1.strlenで入力された文字数を取得する
2.forでi=0から入力された文字数まで2-1の処理を実行
2−1.mozi[i]が母音であれば'='に置き換える、子音であれば何もしない



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

Name: ねこ  ..プログラマー(26,538ポイント)   Date: 2009/07/15(水) 09:44   No:36874     
Title: Re:質問です    
これ前に質問して解決した問題じゃ・・・

http://www.play21.jp/board/formz.cgi?action=res&resno=36368&page=&lognum=111&id=dixq&rln=36413


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

Name: ユーリ  ..入門者(4,613ポイント)   Date: 2009/07/15(水) 10:33   No:36879     
Title: Re:質問です    
すいません まちがえました

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

Name: conio [URL]  ..プログラマー(34,646ポイント)   Date: 2009/07/15(水) 20:01   No:36910     
Title: Re:質問です    

>>すいません まちがえました

「解決したのに、解決していない問題だと間違えて、また投稿してしまった」
と言うことでしょうか?
(良く分からないので、解釈が間違っているかもしれません)


とりあえず、上記のプログラムで思ったことは
---------------------------------------------------------------------
●char型の変数iが初期化されてない
●添え字に使うのであれば、iはint型で良いのでは?
●文字列を変換する部分と、表示する部分は分けたほうが良い
●breakや処理の分岐など、switch文の中がおかしい。
●for文などを使っていないので、文字列を変換する部分が意味を成さない。
(i = 0だったとして、置換されるのは先頭の文字だけ)
---------------------------------------------------------------------
こんな感じですかね。


とりあえず、30文字未満であれば下記のプログラムで動くはずです。
-----------------------------------------------------------------
#include <stdio.h>

void Replace( char str[])
{
int i = 0;

while(str[i]){
switch(str[i]) {
case 'a':
case 'i':
case 'u':
case 'e':
case 'o': str[i] = '=';
break;
default:break;
}
i += 1;
}
}

int main(void)
{
int i = 0;
char moji[30];

printf("文字を入力してください\n");scanf("%s",moji);
Replace(moji);
printf("%s",moji);

return 0;
}
-----------------------------------------------------------------


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



Name: kai  ..かけだし(1,326ポイント)   Date: 2009/07/13(月) 04:11   No:36707       
Title: ボスを無敵にするやり方    
龍神録改造のボスについて質問です。
弾幕を放ってる最中はボスを無敵にして(東方の深弾幕結界みたいに)
タイムがきれるまで次の弾幕に移行しないようにしたいのですが
やり方が分からず困ってます。
void boss_shot_bulletHxxx(){
}
の中に何を付け加えたら可能なのでしょうか?
アドバイスお願いします。


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


Name: TRUTH  ..ぴよぴよ(195ポイント)   Date: 2009/07/13(月) 12:18   No:36727     
Title: Re:ボスを無敵にするやり方    
初めましてーまだ見習いのTRUTHです。

BOSSを無敵にする方法ですが、やり方だけ書くと
どう探っていけば分からないと思うので簡単な説明も書いておきますね。


out.cpp(ショット判定)の自機ショット判定を見れば分かりますが

//ボスが出現していて、描画しないフラグがオフで、ショット中なら
if(boss.flag==1 && boss.graph_flag==0 && boss.state==2){
if(out_judge_cshot_boss(i)){
cshot[i].flag=0;
hit_boss(cshot[i].power);

という部分がありますよね?boss.graph_flag==0という条件があります。
描画しないフラグとありますが、これを使うと簡単だと思います。


ボス弾幕計算のところでboss.graph_frag=1と書くだけで、無敵判定のような状態になりますが、
50章のホーミングショットをしてしまうと弾がボスに張り付いてしまうので


//一番近い敵を探して角度をセットする
void calc_homing(int k){
(略)
//近い敵が見つかったら、あるいはボスがいて、HPがあるときは角度をセット
if(num!=-1 || boss.flag==1 && boss.hp>0){

のif(num!=-1 || boss.flag==1 && boss.hp>0)の条件に
boss.graph_flagが0ならばという条件を加えるだけでホーミングもキャンセルされて
簡易無敵状態になるはずです。



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

Name: kai  ..かけだし(1,412ポイント)   Date: 2009/07/13(月) 22:30   No:36769     
Title: Re:ボスを無敵にするやり方    
とても丁寧で分かりやすい返答ありがとうございます!
ずっと、boss.flagをいじっていたので、困ってましたが
boss.graph_fragを使うことは思いつかなかったです。
TRUTHさんのおかげで無事に無敵化することができました。
ありがとうございました!


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

Name: kai  ..かけだし(1,595ポイント)   Date: 2009/07/15(水) 01:10   No:36856     
Title: Re:ボスを無敵にするやり方    
ちょっと問題があったのでまたアドバイスをお願いします。


int t=boss_shot.cnt,i;

boss.graph_flag=1;
if(t >= 840){//14秒立ったあと
boss.graph_flag=0;//描画しないフラグがオフ
}


これをvoid boss_shot_bulletHxxx()の中につけたしたのですが、
なぜかこの場合、ボスが待機中はホーミングショットをうつと
弾がボスに張り付いてしまいました。(この弾幕以後)
これも張りつかないようにしたいのですがどうしたらいいでしょうか?


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

Name: TRUTH  ..かけだし(1,529ポイント)   Date: 2009/07/15(水) 11:25   No:36884     
Title: Re:ボスを無敵にするやり方    
上で回答したときに改造した龍神録に
同じコードを組み込んでみましたが、ホーミング弾が張り付くことはないですね・・・


上で回答した時のcalc_homing内のifは同じ用な条件をつけられていますか?
自分のは以下のように書いていますので見比べてみてください。

//近い敵が見つかったら、あるいはボスがいて、HPがあるときは角度をセット
if(num!=-1 || boss.flag==1 && boss.hp>0 && boss.graph_flag==0){


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

Name: kai  ..かけだし(1,799ポイント)   Date: 2009/07/15(水) 16:55   No:36902 解決!     
Title: Re:ボスを無敵にするやり方    
あれ!!?
デバッグし直したら
いつの間にかちゃんと直ってました。
なんかどっかで自分がプログラムミスしてたのが原因でした。

TRUTHさん、
色々とありがとうございます。
おかげで実装できました。感謝です!


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



Name: なすがに  ..かけだし(2,291ポイント)   Date: 2009/07/13(月) 12:17   No:36726       
Title: ファイルのプロパティ→概要→カテゴリ・ソースの書き換えができない    
先日、ここで
「WinXPにて ファイルのプロパティ→概要を書き換えるには?」
http://www.play21.jp/board/formz.cgi?action=res&resno=36605&page=&id=dixq&rln=36675
という質問をさせていただいたものです。

VC++を導入し、教えていただいたサンプルをもとに、ファイルのプロパティを書き換えるコードを
書くことにしました。ほとんどサンプルのままなのですが、うまくできないことがあって困っています。

テキストファイルの場合、ファイルのプロパティ→概要タブには、以下のような項目があります。
タイトル、表題、カテゴリ、キーワード、コメント、ソース、作成者、改訂番号
の8つです。

添付したプログラムでは、propidを0x00000002から一つずつ増やし、そこにString 1、String 2と
順に書きこんでいく処理を行っています。実験のためString32までやっています。
しかし、このプログラムを実行したあとにファイルのプロパティを確認すると、

タイトル  String 1
表題    String 2
カテゴリ
キーワード String 4
コメント  String 5
ソース
作成者   String 3
改訂番号  String 8

となっており、カテゴリとソースのところには何も書き込まれていません。
propidの値が間違っているのでしょうか。

カテゴリ、ソースにも目的の文字列を書き込むには、どうすればよいのでしょうか。

実行環境はWinXP Pro SP3、MS VC++でビルド、です。
ほかにも必要な情報がありましたらお教えください。
よろしくお願いいたします。


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


Name: 御津凪 [URL]  ..ハッカー(104,984ポイント)   Date: 2009/07/13(月) 12:30   No:36728     
Title: Re:ファイルのプロパティ→概要→カテゴリ・ソースの書き換えができない    
Platform SDK に入っている PropIdl.h に、各プロパティ名のID (PIDSI_*) が載っていますが、
(432行目辺り)
カテゴリとソースは別のところで設定する必要があるようです。
(453行目辺りに PIDDSI_CATEGORY という名前で ID が振られています)


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

Name: なすがに  ..かけだし(2,426ポイント)   Date: 2009/07/14(火) 22:58   No:36848     
Title: Re:ファイルのプロパティ→概要→カテゴリ・ソースの書き換えができない    
迅速なご回答ありがとうございます。
お返事が遅れ申し訳ないです。

確認しました。なるほど。
カテゴリはDocSummaryInformation Property、
ソースはFMTID_MediaFileSummaryInfo - Propertyになるんですね。

今はまだ、あまりC++に深入りしたくないので、SummaryInformation Property Set
で対応できる部分だけで何とかしたいと思います。

勉強になりました。ありがとうございました。


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

Name: なすがに  ..かけだし(2,451ポイント)   Date: 2009/07/15(水) 15:20   No:36898 解決!     
Title: Re:ファイルのプロパティ→概要→カテゴリ・ソースの書き換えができない    
失礼しました。

「解決!」のマークをつけ忘れていました。

ありがとうございました。


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



Name: もじゃ  ..ぴよぴよ(839ポイント)   Date: 2009/07/14(火) 21:53   No:36838       
Title: ゲームプログタミングの館22章    
C言語初心者で、ゲームプログラミングの館を見ながら覚えていっています。
使用OSはXPで、コンパイラはVC++ 2008 EE です。
これまでは、まずサンプルプログラミングを見ずに自分で考えてみて、答え合わせのような形でサンプルと見比べる・・・と言うようなやり方で、上手く進んでいたのですが、22章にてつまづいてしまいました。
今までは、〜行のプログラミングが間違っているよ、と言う表記がでたのですすっといっていて、今回も1回でたので、それを直してコンパイルに成功、と思いきや、以下のメッセージがでました。

test.exe の 0x0056c1bc でハンドルされていない例外が発生しました: 0xC0000005: 場所 0xccdfcb94 を読み込み中にアクセス違反が発生しました。

初めて見たエラーメッセージなので、びっくししたのもあるんですが、これじゃあどこが間違っているか分かりません。
1行目からサンプルプログラミングとかなり長い時間にらめっこしてみても、違いが分かりませんでした。
サンプルプログラミングをコピー&ペーストしてみたら実行できたので、プログラミングの間違いだとは分かったのですが、どこが間違っているかさっぱり分かりません。
これができなかったらどう、という訳ではないのですが、やはりここをきちんと理解して次に進むのと、理解せずに曖昧に次に進むのとではやはり後々つまづく原因になりそうなので、理解して次に進みたいんです。
どこが間違っているかを教えて頂ければ幸いです。

自分が打ち込んだプログラミング

#include "DxLib.h"

typedef struct{
int x,y,img,muki,walking_flag;
}ch_t;

int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow ){

int image[16];
char key[256];
ch_t ch;

if(ChangeWindowMode(TRUE) != DX_CHANGESCREEN_OK || DxLib_Init() == -1 ) return -1; //初期化処理

ch.x =320;
ch.y =240;

SetDrawScreen(DX_SCREEN_BACK);
LoadDivGraph("char.png",16,4,4,32,32,image);

while(!ProcessMessage() && !ClearDrawScreen() && !GetHitKeyStateAll(key) && !key[KEY_INPUT_ESCAPE]){
if(ch.x%32==0 && ch.y%32==0){ //座標が32で割り切れたら入力受付
ch.walking_flag=1; //歩くフラグ立てる
if(key[KEY_INPUT_UP]==1) //上キー押してたら
ch.muki=0; //上向きフラグ立てる
else if(key[KEY_INPUT_LEFT]==1) //左キー押してたら
ch.muki=1; //左向きフラグ立てる
else if(key[KEY_INPUT_DOWN]==1) //下キー押してたら
ch.muki=2; //下向きフラグ立てる
else if(key[KEY_INPUT_RIGHT]==1)//右キー押してたら
ch.muki=3; //右向きフラグ立てる
else //何も押してなかったら
ch.walking_flag=0; //歩かないフラグ立てる
}

if(ch.walking_flag==1){
if(ch.muki==0)
ch.y--;
else if(ch.muki==1)
ch.x--;
else if(ch.muki==2)
ch.y++;
else if(ch.muki==3)
ch.x++;
}
ch.img = image[(ch.x%32+ch.y%32)/8 + ch.muki*4]; //時に応じた画像をセット
DrawGraph(ch.x,ch.y,ch.img,TRUE); //描画
ScreenFlip();
}

WaitKey();
DxLib_End();
return 0;
}


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


Name: pooka [URL]  ..中級者(10,812ポイント)   Date: 2009/07/14(火) 22:27   No:36844     
Title: Re:ゲームプログタミングの館22章    
ch.mukiが初期化されていないため
>ch.img = image[(ch.x%32+ch.y%32)/8 + ch.muki*4];//時に応じた画像をセット
ここでアクセス違反を起こしているようです。
私の環境ではch.mukiの値は-858993460になっていました。

館の方ではループに入る前に
ch.muki = 3;
となっているので確認してみてください。


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

Name: やそ  ..比類無きプログラマー(96,116ポイント)   Date: 2009/07/15(水) 13:22   No:36892     
Title: Re:ゲームプログタミングの館22章    
確かに館の22章では

ch.x=320;
ch.y=160;
ch.walking_flag=0;
ch.muki=3;

となっておるぞい。
ちょっとした確認ミスじゃの^^;



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

Name: もじゃ  ..ぴよぴよ(780ポイント)   Date: 2009/07/15(水) 14:47   No:36897 解決!     
Title: Re:ゲームプログタミングの館22章    
pookaさん、やそさん、アドバイスありがとうございました。
まさか、2行まるまる抜けていたとは・・・、スペルミスばかり確認していました・・・。
しょうもないミスで、本当にすいませんでした。


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



Name:  ..ぴよぴよ(317ポイント)   Date: 2009/07/15(水) 03:06   No:36861       
Title: ボム発動時について    
再び、龍神録のボムについて聞きたいんですが、
ボム発動時は画面が暗くなります。
これを逆に画面を白くしたい(明るくではない)のですがどうしたらいいでしょうか?
アドバイスお願いします。


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


Name: バグ  ..ハッカー(162,599ポイント)   Date: 2009/07/15(水) 09:47   No:36875     
Title: Re:ボム発動時について    
真っ白に塗り潰せばいいのでは?(^_^;)

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

Name: Dixq (管理人)  ..ウィザード(1,044,739ポイント)   Date: 2009/07/15(水) 12:42   No:36891     
Title: Re:ボム発動時について    
そうですね、DXライブラリでは、元以上の明るさには出来ないので上から塗り潰すしかないようです。
四角形の色を白にして上書きすればいいです。
ブレンドする濃さはアルファブレンドで調整したらOKです。


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



Name: KMS  ..ぴよぴよ(37ポイント)   Date: 2009/07/15(水) 11:09   No:36882       
Title: 割った余りという概念    
初めまして。

C言語を貴殿のサイト様で勉強している者です。

C言語でゲームを作っているのですが、「割った余り」という概念がいまいち理解できません。

具体的にどういった箇所で使うのか、また応用の仕方も解せないんです・・・。

------------------------------------------
if(hantei[y/32-1][x/32]==1)//進めるか判定
return 1;//エラー
------------------------------------------
上記の判定([y32-1])や、

------------------------------------------
if(ch.x%32==0 && ch.y%32==0)
------------------------------------------
の、割り切る判定もちょっと苦手、というかよくわかっていません。

具体的にご教授頂けないでしょうか?

申し訳ありません・・・。


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


Name: ねこ  ..プログラマー(27,327ポイント)   Date: 2009/07/15(水) 11:39   No:36887     
Title: Re:割った余りという概念    
<if(hantei[y/32-1][x/32]==1)//進めるか判定
まずこの時について、具体的にxの値に対する計算結果を考えます。

000〜031:0
032〜063:1
064〜095:2
096〜127:3
...(以下略)

上記から分かるように「x/32」の結果は「32」毎に1ずつ増えていきます。
1マスの横サイズを32ピクセルとした時、何マス目か?をこの計算によって得られます( 「0マス目」から始まる )

これをもう少し身近な例で例えます。
1マスが5mmの方眼紙ノートがあります。ノートの適当な位置に点を付けます。
点がノートの左端(マス目の端)から何mmの所にあるか定規で測ります。
「これは左から何マス目ですか?」と聞かれると左端からの距離○○mmが分かっているため
「○○mm / 5mm 」の小数部を切った値に+1すると、点が左から何マス目か分かりますよね。
※ 12mmなら2.4、切捨てて2。それに1足すと3マス目と分かります。

次に点が方眼紙のマスの端にありますか?と聞かれると
方眼は5mmの正方形なので「○○mmを5で割って、余りが無い(0)時」というのは分かりますよね。
※ 10mmなら2余り0なのでマスの端になる

さて、では方眼紙の例を5mmから32mmに置き換えてみてください。一緒の事をしてるのは分かりますか?

大体こんな感じです。


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

Name: TRUTH  ..かけだし(1,783ポイント)   Date: 2009/07/15(水) 11:44   No:36888     
Title: Re:割った余りという概念    
初めまして。自分もここで勉強しているものです。

割った余りを使うというのはプログラムを組む上では非常に重要なことのようです。
(自分も勉強し始めた頃は、余りを使う発想に驚かされました)



割った余りは色々な使い方があるようです。

3の倍数を考えて見ますと・・・
3の倍数とは3で割り切れる数であり、3で割って余りが0の数とも解釈できます。
割りたい数をiとした場合、3の倍数は i%3=0 とも言えます。
これを頭において

------------------------------------------
if(ch.x%32==0 && ch.y%32==0)
------------------------------------------
を見てみますと、ch.xが32の倍数の時 かつ ch.yが32の倍数の時 と読めると思います。
つまり ch.xもch.yも32の倍数の場合のみ、実行するという意味にとれませんか?

下手な説明ですみません。余りを使った一例ですので、数字をいろいろ変えて
試行錯誤していけば、見えてくる物があると思いますので頑張ってください。


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

Name: ランド  ..初心者(5,077ポイント)   Date: 2009/07/15(水) 12:12   No:36890     
Title: Re:割った余りという概念    
挙げられた例についてはもう回答が出ているようなので、トランプで一例を。

標準ライブラリ<stdlib.h>の中に0から0x7FFF(32767)までの値をランダムに求める、rand関数というものがありますが、
このような固定の数字のままでは非常に扱いづらいです。
そこで、

a = rand()%54;

とすることで、0〜53までの値をaに代入できます。
(DXライブラリでは a = GetRand(53); で同様の処理ができます)

予め0-12:クラブ 13-25:スペード 26-38:ハート 39-51:ダイヤ 52,53:ジョーカーと決めておけば、
上記の代入の後、

a / 13 == 0 →クラブ
a / 13 == 1 →スペード
a / 13 == 2 →ハート
a / 13 == 3 →ダイヤ
a / 13 == 4 →ジョーカー
a % 13 +1 → そのカードの数字(ジョーカーの場合を除く) (+1は0〜12を1〜13にするためです)

というように、ランダムにカードを一枚選ぶことができます。


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



Name: LUNA  ..初心者(5,165ポイント)   Date: 2009/07/13(月) 09:48   No:36719       
Title: txtファイルのread    
宿題で、あるテキストファイルを読み出してコンソール画面に出力させるプログラムなのですが、実行結果がおかしくて困っています。もともと貰ったプログラムをトレースして実行させるものなのでこれで動くはずなのですが・・・実行結果が000000000・・・ばっかりです。
以下プログラム

//プログラム
#include<stdio.h>
#include<ctype.h>
#include<stdlib.h>
#include<string.h>
//定数
#define MAP_X 5
#define MAP_Y 5

//メイン関数
void main(void)
{
FILE *fp;
char *filename = "map.txt"; //アドレスにmap.txtを入れる?
char date[3+1]; //なぜ4じゃなく3+1と記述しているのか不明
int x,y,c; //x,yは出力用の変数。cはファイルから読み出した数値を入れている?
int keta_cnt=0;
int date_cnt=0;
int buff[MAP_X*MAP_Y+1]={0};
int Mapdate[MAP_Y][MAP_X]={0};

if((fp=fopen(filename,"r"))==NULL){ //map.txtファイルがなかったら警告を出して終了 "r"は読み込み(read)
printf("%s-Not Found\n",filename);
return ;
}

while((c=getc(fp))!=EOF){ //ファイルから一文字入力(getc)。fgetcでも可。fpがEOFではない間以下の処理を行う?
if(isdigit(c)){ //isdigit数字(0〜9)なら真。
date[keta_cnt]=(char)c; //data[keta_cnt]の中にcの数値を文字型で入れる。
keta_cnt++;
}
else{ //そうでなければ
date[keta_cnt]='\0';
buff[date_cnt]=atoi(date); //文字列をint型に変換
keta_cnt=0;
keta_cnt++;
if(date_cnt >= MAP_X*MAP_Y) break;
}
}
fclose(fp); //fopenでオープンされたファイルをクローズする。正常なら0、エラーならEOFを返す

memcpy(Mapdate,buff,sizeof(Mapdate));

for(y=0;y<MAP_Y;y++){ //出力部分
for(x=0;x<MAP_X;x++){
printf("%d",Mapdate[y][x]);
}
printf("\n");
}
return ;
}



理解するために注釈文だらけです。
どこかおかしいところでもあるのでしょうか・・・?


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


Name: よーむ  ..ぴよぴよ(83ポイント)   Date: 2009/07/13(月) 10:19   No:36720     
Title: Re:txtファイルのread    
date[keta_cnt]='\0';
buff[date_cnt]=atoi(date); //文字列をint型に変換
keta_cnt=0;
keta_cnt++;
if(date_cnt >= MAP_X*MAP_Y) break;

ぱっと見た感じketa_cntを0にした後、keta_cntを足すのではなく別のものを足すのではないでしょうか?


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

Name: ねこ  ..プログラマー(26,159ポイント)   Date: 2009/07/13(月) 10:30   No:36721     
Title: Re:txtファイルのread    
多分「keta_cnt++;」が「date_cnt++;」の間違い

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

Name: Mist  ..熟練のプログラマー(65,816ポイント)   Date: 2009/07/13(月) 10:30   No:36722     
Title: Re:txtファイルのread    

else{ //そうでなければ

date[keta_cnt]='\0';

buff[date_cnt]=atoi(date); //文字列をint型に変換

keta_cnt=0;

date_cnt++;

if(date_cnt >= MAP_X*MAP_Y) break;

}


あと、MAP_Yが5に定義されているから最後の行が表示されないけどそれは仕様??
(テキストには6行あるよね)


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

Name: Mist  ..熟練のプログラマー(65,830ポイント)   Date: 2009/07/13(月) 10:32   No:36723     
Title: Re:txtファイルのread    
あと、単語が変。
データはdata。
dateは日付。


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

Name: non  ..熟練のプログラマー(54,607ポイント)   Date: 2009/07/13(月) 10:36   No:36724     
Title: Re:txtファイルのread    

>>char *filename = "map.txt"; //アドレスにmap.txtを入れる?
map.txtという文字列が格納されている場所の先頭アドレスをfilenameに入れている。
(filenameでmap.txtが格納されているアドレスを指すと考えた方がわかりやすい)

>>char date[3+1];//なぜ4じゃなく3+1と記述しているのか不明
入力文字が3桁まで、文字列終端の'\0'が1つで、計4文字
というのを明確にしている。



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

Name: LUNA  ..初心者(5,337ポイント)   Date: 2009/07/13(月) 10:40   No:36725     
Title: Re:txtファイルのread    
ご指摘ありがとうございます。指摘された部分を直したら普通に動きました^^;
後単語が変という点につきましてはこのプログラム自体まだ理解してなかったので気が付きませんでしたorz
あとはこのプログラムを応用してマップチップ用のデータをtxtから読み出せれば完了なのでがんばってみようかと思います。
そのため、一応まだ解決マークをつけないでおきます。


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

Name: LUNA  ..初心者(5,361ポイント)   Date: 2009/07/15(水) 12:07   No:36889 解決!     
Title: Re:txtファイルのread    
一応解決できましたのでマークにチェック入れときます。

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



Name: nokty  ..かけだし(1,178ポイント)   Date: 2009/07/14(火) 17:01   No:36815       
Title: VB6についての質問です。    
2度目のお世話になります。
早速ですが質問です。

VB6の勉強過程で、C言語のコードをVBに換えて練習をしようとしたところ
いきなり詰まってしまいました。

C言語では

#include <stdio.h>

int main (void) {

int i, j, ln;

printf("何段ですか:");
scanf("%d", &ln);

for ( i = 1; i <= ln; i++) {
for ( j = 1; j <= i; j++)
putchar('*');
putchar('\n');
}

return (0);
}


というもので、例えば5を入力すると
*
**
***
****
*****
この結果が返ってきます。

これをVBに換える際自分の構想としては


Private Sub Command1_Click()
Dim gyousuu As Long
Dim haba As Long
For gyousuu = 1 To Text1.Text
For haba = 1 To gyousuu
MsgBox "*"
Next
MsgBox "vbCrLf"
Next

End Sub


という形にしたのですが、目も当てられない結果が返ってきました。

・VBにおいてCのprintfにあたるものが分からない。
・putchar('\n')のように改行を単体で出せるコードが分からない。
この2点が欠けていることで正常に機能させれないかと思うのですが、
どうすればよいのでしょうか。
自分なりに調べはしたのですが答えが見つかりません。

また、ほかにもまずい点があれば指摘していただけると参考になります。

VBは勉強を始めて2日目なので、少し砕いた表現が有難いです。
よろしくお願いします。


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


Name: Blue  ..中級者(10,809ポイント)   Date: 2009/07/14(火) 17:19   No:36816     
Title: Re:VB6についての質問です。    
VB6でコンソールアプリケーションを作成することを想定しましますか?

Formにテキストボックスを置いて、ボタンを押して表示ということであれば、
テキストボックスのTextプロパティに代入するだけです。
改行は

\r\n → vbCrLf
\r → vbCr
\n → vbLf

です。テキストボックスに表示するときはたいてい vbCrLf を使います。
(C言語のWindwosアプリでもそうですし)


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

Name: やそ  ..比類無きプログラマー(96,109ポイント)   Date: 2009/07/14(火) 17:23   No:36817     
Title: Re:VB6についての質問です。    
改行は
chr(13) + chr(10)
を文字列のお尻にくっつけてあげればいいです。

msgboxで表示できませんでしたか?


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

Name: nokty  ..かけだし(1,259ポイント)   Date: 2009/07/14(火) 17:45   No:36818     
Title: Re:VB6についての質問です。    
>Blueさん
ありがとうございます。
すいません
TextBoxで読み込んだものをCommandClickで表示させる、
という説明が抜けていて手間をおかけしました。

理想としてはmsgboxに
*
**
***
****
*****
の状態で表示されるようにしたいのですが、
初期的な範囲でない技術を使うものは避けたいです。

テキストボックスのプロパティに代入ということですが、
どの部分をどの項目に代入するのでしょうか
無知すぎて申し訳ないです。

>やそさん
ありがとうございます。
改行はうまくいくようになったと思うのですが、
msgboxでは*が1個のwindowを*の個数分開くだけで本当にうまくいっているのかは怪しいです。


助言ありがとうございます。
向こう数日間ネットからかけ離れた新人研修に飛ばされるので次回のチェックが遅くなると思います。
必ず来週中には見に来ますので助言の方お願いします。
では失礼します。


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

Name: Blue  ..中級者(10,924ポイント)   Date: 2009/07/14(火) 17:55   No:36819     
Title: Re:VB6についての質問です。    
MsgBoxにであれば一時変数にため込んだものを表示するだけですね。

Private Sub Command1_Click()

Dim row As Long
Dim width As Long
Dim triangle As String

For row = 1 To Val(Text1.Text)
For width = 1 To row
triangle = triangle + "*"
Next
triangle = triangle + vbCrLf
Next
MsgBox triangle
End Sub


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

Name: バグ  ..ハッカー(162,587ポイント)   Date: 2009/07/14(火) 18:05   No:36820     
Title: Re:VB6についての質問です。    
VB6.0の勉強用によさげなHPを見つけたので、貼っておきますね。
ttp://f6.aaa.livedoor.jp/~pgisland/vbbegin.htm


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

Name: nokty  ..かけだし(1,629ポイント)   Date: 2009/07/15(水) 09:53   No:36876     
Title: Re:VB6についての質問です。    
>Blueさん
ありがとうございます。
Blueさんのコードで実行してみたところ、望んでいた通りの動作となりました。

しかし、
triangle = triangle + vbCrLf
の意図するところがよく分かりません。

*出力 改行 **出力 改行 ***出力 改行

という流れではなく、

*出力 改行 **出力 改行改行 ***出力 改行改行改行

という動作をしているという理解で合っているでしょうか?
しかし、そうでしたら改行が増えていくのでスキマが広がっていきそうに思いますが、
実際にはきれいに出力されています。

この部分の説明をしていただけるとありがたいです。
よろしくお願いします

>バグさん
ありがとうございます。
どのサイトが分かりやすいか、VB入門サイトをあさりつつ、
メインとするものを決めていた最中だったので非常に助かりました。

助言頂いているのに欲を出して申し訳ないのですが、
VBのきれいなコードが載っているサイト、もしくは書籍などご存じないでしょうか。
もしくはプログラミングデザインのようなものを探しているのですが、
VBに関しては、やはりCやjavaほどの情報量がないので
どうしてもほしいものを見つけるのが難しいです。
よろしくお願いします。


新人研修で見ることができないかと思いましたが、今日の昼までは大丈夫でした。
とりあえずは、何がまずかったのか、どうすればよいのか、
が分かったのでスッキリして研修に取り組むことができます。
ありがとうございました。


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

Name: ねこ  ..プログラマー(26,695ポイント)   Date: 2009/07/15(水) 10:00   No:36877     
Title: Re:VB6についての質問です。    
FOR文が2個入れ子になっている事に注意してみてください。
例えば3個表示する場合だと「triangle」変数は以下のように変わっていきます

1.*
2.*(改行)
3.*(改行)*
4.*(改行)**
5.*(改行)**(改行)
6.*(改行)**(改行)*
7.*(改行)**(改行)**
8.*(改行)**(改行)***
9.*(改行)**(改行)***(改行)

これをダイアログで表示すると以下---の範囲のように表示されます。
--------
*
**
***

--------

1,3,4,6,7,8は入れ子の2個目のForの中で加算され
2,5,9はその下の加算処理で計算されています。


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

Name: Blue  ..中級者(11,108ポイント)   Date: 2009/07/15(水) 10:05   No:36878     
Title: Re:VB6についての質問です。    
VBでもステップ実行ができますので、イミディエイトウィンドやローカルウィンドウを使って
triangleの中身がどのようになっているのか確認してみてはどうでしょうか?

F9 を押すとブレイクポイントを置けるので、
>Private Sub Command1_Click()
にカーソルを持って行き、F9

次にF5を押すと、いつもと同じようにFormが表示されます。
TextBox1に適当な値を入れてボタンを押すと、表示がコードの画面に移ります。
先ほどブレイクポイントを置いたところに→で黄色くなるので、
そこでF8でステップ実行できます。

あとは下にあるローカルウインドウを見ていると値がどのように変化しているのか
確認できます。


ちなみに、今の時代にVB6の参考書が(普通の書店に)あるかは微妙です。
VB6が発売されたのはおよそ10年前ですので。


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

Name: バグ  ..ハッカー(162,215ポイント)   Date: 2009/07/15(水) 10:38   No:36880     
Title: Re:VB6についての質問です。    
私がVC++6.0の勉強をする際に非常に助かった書籍と同じ著者のものです。
中身を確認した訳ではありませんが、おそらく分かり易いんじゃないかな?
ビギナー編のほかにシニア編というのもあるようです。
安いので、この際、両方そろえてもいいのではないかと思われます。

ttp://www.amazon.co.jp/%E6%96%B0Visual-Basic%E5%85%A5%E9%96%80-%E3%83%93%E3%82%AE%E3%83%8A%E3%83%BC%E7%B7%A8%E2%80%95Ver-6-0%E5%AF%BE%E5%BF%9C%E7%89%88-Visual-Basic%E5%AE%9F%E7%94%A8%E3%83%9E%E3%82%B9%E3%82%BF%E3%83%BC%E3%82%B7%E3%83%AA%E3%83%BC%E3%82%BA/dp/4797307595/ref=sr_1_15?ie=UTF8&s=books&qid=1247621308&sr=1-15

>>Blueさん
うちの近所の書店だけかもしれませんが、最近VB6.0の参考書が妙に充実してるんですよ。
数ヶ月前には全く無かったはずなのに、先日覗いてみるとVBのコーナーにVB6.0の書籍がわんさかと補充されておりました。「注文間違えたんじゃねーのか?」と思ったのは言うまでもありません(笑)


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

Name: nokty  ..かけだし(2,008ポイント)   Date: 2009/07/15(水) 11:33   No:36885     
Title: Re:VB6についての質問です。    
>ねこさん
ありがとうございます。
言われて気がつきました。
入れ子になっているfor内のtriangleと、
親のforのtriangleを別物だと思っていました。
図を見て一発でした。

>Blueさん
ありがとうございます。
VBのこの機能はすばらしく便利ですね。
今までこういうものがなかったので、詰まったときにこの機能を使うっていう発想ができませんでした。

VB6.0をインストールしている最中に
「今からVB6をインストールして勉強始めようって人は世界で君一人かもしれん」
と先輩に言われました。
確かに、入門サイトも2001年で更新終了だとかをよく見かけますね…

>バグさん
ありがとうございます。
中古だとかなりの安値になるので、とりあえず揃えておこうと思います。

需要は限りなく低そうですが、
未だにVB使っている人には…?
無理ですね。
その店が心配です。


何から何までありがとうございました。
これをもって解決とさせて頂きます。


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

Name: nokty  ..かけだし(1,960ポイント)   Date: 2009/07/15(水) 11:36   No:36886 解決!     
Title: Re:VB6についての質問です。    
すいません
解決させるのと編集パスワードを忘れたので
連投になりますがこの記事を解決に使わせていただきます。


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



Name: ヒラリー  ..ぴよぴよ(106ポイント)   Date: 2009/07/14(火) 22:15   No:36842       
Title: LoadDivGraph関数について    
初めまして。ヒラリーと申します
ただ今、こちらで紹介されているDxLibを使ってゲームを製作中ですが
LoadDivGraph関数に画像を読み込ませたらバッファオーバーランという物を起こしてしまいました

調べてみると画像の大きさが原因だったようですが(縦270、横6080のbmpを読み込んでました)
オーバーランしないためには1枚の画像の大きさをどの程度に留めておくといいんでしょうか?
アドバイスお願いします


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


Name: ねこ  ..プログラマー(26,488ポイント)   Date: 2009/07/14(火) 22:51   No:36847     
Title: Re:LoadDivGraph関数について    
DXLIBのHPリファレンスでは特に明記されてませんが、基本的には最大1024x512くらいが理想じゃないかと。


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

Name: ヒラリー  ..ぴよぴよ(141ポイント)   Date: 2009/07/15(水) 08:38   No:36871 解決!     
Title: Re:LoadDivGraph関数について    
アドバイス有難うございます
その数値を目安にこれからは作っていきたいと思います


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



Name: galilei  ..ぴよぴよ(4ポイント)   Date: 2009/07/15(水) 00:24   No:36853       
Title: 無題    
初心者です。
すいません。宿題なんですけど、色々やっても動きません。
何処を改善すればいいかお願いします。

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <string.h> /*strcat関数で必要 */

int main()
{
srand((unsigned) time(NULL)); /* 乱数系列の変更 */
int i, j;
FILE *fp;
char bun[256], file[33][30];

fp = fopen("test2.txt", "r"); /* ここにファイル名を入れる */

if(fp == NULL) {
perror("ファイルをオープンできません\n");
return -1;
}

i = 0;
while(fscanf(fp, "%s", &file[i][0]) != EOF) {
i++;
}
fclose(fp);

fp = fopen("test3.txt", "w"); /* ここに書き込むファイルの名前を入れる */
if(fp == NULL) {
perror("ファイルをオープンできません\n");
return -1;
}

j = 0;

while(j < 20) {
i = 0;

i = rand()%11;
strcpy(bun, &file[i][0]);
strcat(bun, "は");
i += (12 - i);
i += rand()%9;
strcat(bun, &file[i][0]);
i += (22 - i);
i += rand()%10;
strcat(bun, &file[i][0]);
strcat(bun, "\n");
fprintf(fp, bun);
j++;
}
fclose(fp);

return 0;
}




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


Name: 初級者  ..初心者(6,480ポイント)   Date: 2009/07/15(水) 06:31   No:36866     
Title: Re:無題    
どんな結果を得るのが正しくて、
実際にはどんな結果を得てしまうのでしょうか?


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

Name: toyo  ..プログラマー(37,794ポイント)   Date: 2009/07/15(水) 07:05   No:36867     
Title: Re:無題    
勘違いしてそうな場所
i = rand()%11;
// i は 0-10(0-11ではありません)
i += (12 - i);
// これはまとめると i = 12 になります
i += rand()%9;
// i は 12-20
i += (22 - i);
// これも i = 22 のことです
i += rand()%10;
// i は 22-31

これではfile[ 11 ]とfile[ 21 ] と file[ 32 ]は選択されません

i = rand()%12;
strcpy(bun, &file[i][0]);
strcat(bun, "は");
i = 12 + rand()%10;
strcat(bun, &file[i][0]);
i = 22 + rand()%11;
strcat(bun, &file[i][0]);
strcat(bun, "\n");
fprintf(fp, bun);

がやりたいことだと考えましたが


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



Name:  ..上級者(20,252ポイント)   Date: 2009/07/13(月) 05:25   No:36709       
Title: warning C4996    
漢字弾幕についてですが、
龍神録の漢字弾幕プログラムを作成以降
warning C4996: 'sprintf': This function or variable may be unsafe. Consider using sprintf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.

'sprintf' の宣言を確認してください。

warning C4996: 'fopen': This function or variable may be unsafe. Consider using fopen_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.

'fopen' の宣言を確認してください。

という警告が沢山表示されます。
この警告を消すにはどうしたらいいでしょうか?


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


Name: DVDM [URL]  ..かけだし(1,833ポイント)   Date: 2009/07/13(月) 05:56   No:36710     
Title: Re:warning C4996    
>>☆さん
以下の方法で警告を消すことができます。
・#pragma warning (disable : 4996)
・#define _CRT_SECURE_NO_WARNINGS
どちらを書いて頂いても構いません。
記述場所はプログラムの先頭にでも書いておくといいと思います。

また、sprintf()やfopen()の代わりに、sprintf_s()やfopen_sを使うことでも警告は消えます。


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

Name:  ..上級者(20,339ポイント)   Date: 2009/07/13(月) 07:52   No:36713     
Title: Re:warning C4996    
返答ありがとうございます。
sprintf()については、おかげで消えました。
でもfopen_sについては、置き換えると

error C2660: 'fopen_s' : 関数に 2 個の引数を指定できません。

というエラーが出てしまいます・・
なんとかならないでしょうか?


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

Name: 通り  ..かけだし(1,093ポイント)   Date: 2009/07/13(月) 08:23   No:36715     
Title: Re:warning C4996    
ググるなりして関数の仕様を確認しようよ

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

Name: み〜  ..プログラマー(29,093ポイント)   Date: 2009/07/13(月) 22:05   No:36766     
Title: Re:warning C4996    
>通り
・・・


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

Name: たいちう  ..プログラマー(33,027ポイント)   Date: 2009/07/15(水) 00:43   No:36855     
Title: Re:warning C4996    
>DVDMさん
fopen_sは2個の引数ないんじゃ?


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

Name: DVDM [URL]  ..かけだし(2,031ポイント)   Date: 2009/07/15(水) 04:08   No:36864     
Title: Re:warning C4996    
>>たいちうさん
置き換えるだけではエラーが出るので、使うと書いたのですが私の書き方が悪かったみたいですね;
申し訳ございませんでした。


FILE* fp;
errno_t error;
if( (error = fopen_s( &fp, "ファイル名", "モード" )) != NULL )
{
/* ファイルオープンに失敗したとき */
}


MSDNライブラリより:http://msdn.microsoft.com/ja-jp/library/z5hh6ee9(VS.80).aspx

こんな風に書いておけば宜しいですか?


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



Name: 静波  ..ぴよぴよ(37ポイント)   Date: 2009/07/13(月) 03:11   No:36706       
Title: 配列について質問です    
添付してあるような配列を作成しました。
しかし文字が多すぎるとなってエラーです。

どうすればいいのでしょうか?
こんなに長い配列は使えないのでしょうか?


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


Name: dic  ..プログラマー(27,868ポイント)   Date: 2009/07/13(月) 07:15   No:36712     
Title: Re:配列について質問です    
' ← シングルクオーテーションを
" ← ダブルクオーテーションに変えてください

あと tewaisi', で片方がぬけてます

変数も
char *f_name[429] = { "...", "...", "...
としてください


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

Name: 静波  ..ぴよぴよ(127ポイント)   Date: 2009/07/13(月) 18:44   No:36737     
Title: Re:配列について質問です    
ありがとうございました。
他にもエラーが出てしまい困ってるのですが、助けていただけないでしょうか?


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

Name: non  ..熟練のプログラマー(54,639ポイント)   Date: 2009/07/13(月) 18:57   No:36739     
Title: Re:配列について質問です    
何というエラーですか?
dicさんが指摘されている以外には、ないと思いますが。


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

Name: 静波  ..ぴよぴよ(204ポイント)   Date: 2009/07/13(月) 20:00   No:36746     
Title: Re:配列について質問です    
nonさん。

その部分に対してのエラーは解決したのですが、
実は苗字と名をランダムで表示するプログラムを作成しています。

そちらがなかなか上手くいかずに困っていたのです・・・


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

Name: non  ..熟練のプログラマー(54,723ポイント)   Date: 2009/07/13(月) 20:16   No:36750     
Title: Re:配列について質問です    
プログラムを見せてくれなきゃ、助けようがない。


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

Name: 静波  ..ぴよぴよ(247ポイント)   Date: 2009/07/13(月) 22:13   No:36768     
Title: Re:配列について質問です    
nonさん。
ですよね・・・
すみませんファイルを添付したので見ていただいてよろしいでしょうか?

よろしくお願いします。


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

Name: ねこ  ..プログラマー(26,341ポイント)   Date: 2009/07/13(月) 22:36   No:36771     
Title: Re:配列について質問です    
肝心のエラー文章が無いですよw

パッと見た感じここがおかしいです
write_f_name = f_name[x];
write_l_name = l_name_g[y];

文字列ポインタ受け取るなら定義がこうじゃないといけない
char* write_f_name; //ファイルに苗字を書き込むときに使う変数//
char* write_l_name; //ファイルに名を書き込むときに使う変数//




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

Name: non  ..熟練のプログラマー(54,855ポイント)   Date: 2009/07/13(月) 22:47   No:36773     
Title: Re:配列について質問です    
他にも多数、間違いアリ。
エラーが出るのだから、もう少し、自分で考えてみたら。
例えば、宣言されていなかったり、変数名がなかったり・・・・など。


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

Name: dic  ..プログラマー(27,913ポイント)   Date: 2009/07/13(月) 23:01   No:36776     
Title: Re:配列について質問です    
パス入力部分を goto 文で飛ばしてます
あと、修正したところを元の部分をコメントアウトして残してます
srand( time(NULL) ); は ランダムな関数テーブルを初期化するので一度でいいです
数ミリ秒での処理なので、同じランダム関数テーブルを使用することになり
同じ数字がでてきます

strcpy() 関数と fputs() 関数について理解すれば大丈夫と思います
できたら他の人の作ったプログラムか、参考書などを手本に文字列関係の基礎を
しっかりやったほうがいいです

あとはちょっと
y = rand() % rand_l_name_g と
y = rand() % rand_l_name_m の区別がつくようにしたほうがいいです
せっかくコメント書いてるんですから


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

Name: 静波  ..ぴよぴよ(408ポイント)   Date: 2009/07/13(月) 23:27   No:36777     
Title: Re:配列について質問です    
nonさん。
指摘ありがとうございます。

なんとかエラーを出さずにコンパイルすることに成功しました。

しかし私が予想していたことと違うのですが、ヒントをいただけないでしょうか?

私は毎回ランダムで氏名がファイルに書き込まれるようにしたかったのですが、
すべて同じ氏名が書き込まれてしまっていました・・・・

修正したソースファイルをまた添付しておきます。

ホントに何度も何度も申し訳ないです・・・


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

Name: 静波  ..ぴよぴよ(680ポイント)   Date: 2009/07/14(火) 00:19   No:36784     
Title: Re:配列について質問です    
申し訳ないです。
すべて同じではありませんでした。

しかし
50くらいが同じです。
【例】
yamada tarou
yamada tarou
yamada tarou
:
:
:
yamada tarou
katou tatuya
katou tatuya
katou tatuya
:
:
:
katou tatuya
saitou kazuya
saitou kazuya
saitou kazuya
:
:
:
saitou kazuya

と同じものが多すぎます・・・
ランダムを使っているので全てバラバラにすることは出来ないのはわかっていますが、
もう少しバラバラになると思っていました。
同じものがくっついたりするとは思いませんでした。

なにか良い改善方法を教えてください。


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

Name: ねこ  ..プログラマー(26,357ポイント)   Date: 2009/07/14(火) 00:47   No:36789     
Title: Re:配列について質問です    
dicさんのsrandについての書き込みをよく読んであげてください。

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

Name: 静波  ..ぴよぴよ(799ポイント)   Date: 2009/07/14(火) 01:25   No:36795     
Title: Re:配列について質問です    
すみませんでした。
全部バラバラになりました。
本当にありがとうございます。


最後にもう一つだけ質問させていただきたいのですが、
プログラムを実行中に「問題が発生したため作業を中止します」とエラーになってしまい最後まで処理されないのですが、それは私のプログラムの問題でしょうか?
それとも別に原因があるのでしょうか?


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

Name: non  ..熟練のプログラマー(54,876ポイント)   Date: 2009/07/14(火) 08:52   No:36803     
Title: Re:配列について質問です    
要素数が間違っていないか、確認してください。


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

Name: 静波  ..ぴよぴよ(828ポイント)   Date: 2009/07/15(水) 02:56   No:36860 解決!     
Title: Re:配列について質問です    
みなさん。
ありがとうございました。

無事に解決し、プログラムが完成しました。


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



Name:  ..上級者(19,966ポイント)   Date: 2009/07/08(水) 12:36   No:36453       
Title: 背景をななめに    
通常背景を右上から左下にスクロールさせてななめに
流れるようにしたいのですがうまくいきません。どうしたらできますか?
void graph_back00(){//通常背景
SetDrawArea( 32 , 16 , 416 , 464 ) ;//描画可能エリアを設定
DrawGraphFd(0,count%700-700,img_back[0],FALSE);
DrawGraphFd(0,count%700 ,img_back[0],FALSE);
SetDrawArea( 0, 0, 640, 480);//エリアを戻す
}


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


Name: @  ..ぴよぴよ(2ポイント)   Date: 2009/07/09(木) 15:57   No:36505     
Title: Re:背景をななめに    
う〜ん。

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

Name: ねこ  ..上級者(24,469ポイント)   Date: 2009/07/09(木) 16:12   No:36509     
Title: Re:背景をななめに    
DrawGraphFd関数の中がわかんないけど第一引数を-(count%300)にしたらそれっぽい動きになるんじゃないでしょうか。
多分縦横4枚表示になるよ。


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

Name: kazuoni [URL]  ..比類無きプログラマー(93,879ポイント)   Date: 2009/07/09(木) 22:37   No:36548     
Title: Re:背景をななめに    
暇だったんで、作ってみました。
とりあえず、自分で点p(x1,y1) , 点Q(x2,y2)を指定します。
(x2>x1 && y2>y1が条件です。)
すると、用意した背景が(x2,y1)から(x1,y2)に向かって移動します。
(希望していた右上から左下にスクロール)
とりあえず、角を中心に画像がスクロールすることに重きを置いたので、
座標指定によってはぶるってしまう時があります。
まぁ、仕様ってことでw

条件以外の動作は未定義です。っというか、かならず止まります。
気を付けてください。

あとは、自分で工夫してみてください。
(※かなり汚く書かれてます。あくまで参考に・・・)

#追記
draw_areaシリーズが指定座標です


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

Name: kazuoni [URL]  ..比類無きプログラマー(94,000ポイント)   Date: 2009/07/10(金) 11:13   No:36564     
Title: Re:背景をななめに    
さらに暇だったので、関数化して、不具合をいろいろ修正しました。

int DrawBackScroll(int x1 , int y1 , int x2 , int y2 , int ghandle , int mode , int bc_bc_color=0 )

(x1,y1)と(x2,y2)の間で指定したモードで背景がスクロールする。
また、スクロール背景の背景も指定できる。

[引数]

int x1 , int y1 , int x2 , int y2 … 座標
(x1,y1)と(x2,y2)で四角形をなせば、その四角形の範囲でスクロールする。
四角形をなさない場合は、デフォルトで、
(0,0) , (W_SIZEX,W_SIZEY)の四角形で行う。なので、
const int W_SIZEX = 640;
const int W_SIZEY = 480;
などの宣言が関数内もしくはグローバルで宣言が必要

int ghandle … 画像ハンドル

int mode … スクロールする向き
0=右上から左下
1=右下から左上
2=左上から右下
3=左下から右上
(自分のプログラムでは、列挙体で管理しています。)

int bc_bc_color=0 … スクロール背景の背景の色
(デフォルトでなしです)

[戻り値]
意味なし

int DrawColorFrame(int X1,int Y1,int X2,int Y2,int color)
(x1,y1)と(x2,y2)の範囲外の領域をcolorで塗りつぶす


[引数]

int X1,int Y1,int X2 int Y2 … スクロール背景の範囲
主な詳細はDrawBackScrollと同じ

int color … 塗りつぶす色

[戻り値]
意味なし

っとこんな仕様です。(もちろん、DXライブラリ使用)
あとは、自分で角度とか調節できるようにすれば、
もう少し使いやすくなるかも。今回はこれで^^;

っというか、質問内容が龍神っぽかった(?)ので、
質問回答にはなってません。。失礼しました。。

#補足
DrawBackScrollで、背景のつなぎをかなりアバウトに行っていて、
背景を管理人さんの配布している龍神の背景を用いると、
結構つなぎ目が気になります。これは各自調節してください。
(ドット補完のあたり)
自分の組み方だと、時々刻々微妙に背景が揺れていますので、
なかなか完璧につなぐのは難しいかもです・・・


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

Name:  ..上級者(20,356ポイント)   Date: 2009/07/15(水) 02:37   No:36859     
Title: Re:背景をななめに    
ありがとうございます。
さっそく試してみたいと思います。


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



Name: nayo  ..中級者(11,448ポイント)   Date: 2009/07/14(火) 23:37   No:36850       
Title: Visual C++でのデバッグ時のマクロ    
お久しぶりです
現在Visual C++ 2008 Express Editionにてゲームを作成しています
静的ライブラリをデバッグモード、リリースモードでそれぞれ分けて作成しているのですが
いちいち自分でデバッグ時用のマクロを定義し、リリース時ならコメントアウト、などして
静的ライブラリのファイル読み込み分けしています

そこでふと思ったのですが、Visual C++側でデバッグ時には自動的に何かマクロが定義されたりしてないのでしょうか
もしそのようなことができればこのような作業をしなくて済むと考えたのですが

どなたか些細なことですがよろしくお願いします


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


Name: YuO  ..プログラマー(31,847ポイント)   Date: 2009/07/14(火) 23:46   No:36851     
Title: Re:Visual C++でのデバッグ時のマクロ    
デフォルトでは,
・DEBUG構成
_DEBUG
・RELEASE構成
NDEBUG
が,それぞれ定義されます。

なお,<assert.h>のassertマクロでは,NDEBUGを使っています。
http://msdn.microsoft.com/ja-jp/library/9sb57dw4.aspx
http://msdn.microsoft.com/ja-jp/library/b0084kay.aspx


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

Name: nayo  ..中級者(11,336ポイント)   Date: 2009/07/14(火) 23:58   No:36852 解決!     
Title: Re:Visual C++でのデバッグ時のマクロ    
お早い回答ありがとうございます
このようなマクロが定義されていたのですね
これでちょっと面倒だな、という作業から解放されそうです

また細かなことかもしれませんが分からないことがあったらそのときはよろしくお願いします


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



Name: ぷれこ  ..入門者(2,944ポイント)   Date: 2009/07/14(火) 00:02   No:36782       
Title: 100!まで表せる計算機    
先日はお世話になりました、ぷれこです。

今日でた宿題は「100の階乗までを表示できる計算機をintの行列で表せ」というもので、
intの行列 kazu[MAX] にひとけたずつ数を入力し、大きな桁を表示できるようにするというものなのですが、

現状、

#include <stdio.h>
#define MAX 200
void main(void)
{
int kazu[MAX];
int i,j,k,x,y;
/*数値を0に固定*/
for (i = 0;i < MAX;i++){
kazu[i] = 0;
}
kazu[0] = 1;
printf("階乗を入力する\n");
scanf("%d",&x);

for (i = 1;i < x + 1;i++){
/*その回の階乗分をかける*/
for (j = 0;j < MAX;j++){
kazu[j] = kazu[j]*i;
}
/*繰り上げ処理*/
for (j = 0;j < MAX;j++){
if (kazu[j] > 9){
kazu[j+1] = kazu[j+1] + kazu[j]/10;
kazu[j] = kazu[j]%10;
}
}
}

printf("%d の階乗は ",x);
for (i = y;i > 0;i--){
printf("%d",kazu[i]);
}
printf(" です。");

}

といったところまで作ったのですが、桁数を求める方法が分からないので、答えにたどりつけません。
桁数を求められれば答えにたどりつけると思うのですが……
皆さん、お力をお貸しください。



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


Name: たかぎ [URL]  ..ハッカー(107,345ポイント)   Date: 2009/07/14(火) 00:19   No:36785     
Title: Re:100!まで表せる計算機    
100個ぐらいなら、表引きにした方が簡単では?


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

Name: ぷれこ  ..入門者(2,958ポイント)   Date: 2009/07/14(火) 00:29   No:36786     
Title: Re:100!まで表せる計算機    
学校の宿題なので、行列でないといけないらしいです。

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

Name: たかぎ [URL]  ..ハッカー(107,344ポイント)   Date: 2009/07/14(火) 00:43   No:36788     
Title: Re:100!まで表せる計算機    
> 学校の宿題なので、行列でないといけないらしいです。

行列ではなく配列ですよね。
計算結果を文字列のテーブルで持って、それを元に結果の配列に値を設定する方が簡単だということです。


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

Name: non  ..熟練のプログラマー(54,805ポイント)   Date: 2009/07/14(火) 09:10   No:36804     
Title: Re:100!まで表せる計算機    

printf("%d の階乗は ",x);
for (y=0,i = MAX-1;i >= 0;i--){
if(kazu[i])
y=1;
if(y)
printf("%d",kazu[i]);
}
printf(" です。");



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

Name: lbfuvab  ..上級者(21,231ポイント)   Date: 2009/07/14(火) 13:34   No:36811     
Title: Re:100!まで表せる計算機    
どうやら多倍長演算ですね。

それなら必要な機能は
1、非負の多倍長整数と非負の整数の掛け算
2、非負の多倍長整数の表示
だけです。
桁数については常用対数でいけます。


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

Name: ぷれこ  ..入門者(2,974ポイント)   Date: 2009/07/14(火) 22:09   No:36841 解決!     
Title: Re:100!まで表せる計算機    
あの後いろいろ弄ってたら、どうにか動きました。
皆様、どうもありがとうございました。


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



Name: チルチル  ..プログラマー(30,660ポイント)   Date: 2009/07/14(火) 19:49   No:36821       
Title: ×で終了した時の処理    
DXライブラリのウィンドウを「×」とか「Alt+F4」で閉じた場合は
どのような手順で終了されているのでしょうか?

私はDxLib_End();の前にデータをセーブする処理を行っているのですが
上のような方法で終了したら、DxLib_End();を通ってくれないのでしょうかね・・
そうだとするとかなり問題なんですが・・


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


Name: yu  ..プログラマー(35,885ポイント)   Date: 2009/07/14(火) 19:56   No:36822     
Title: Re:×で終了した時の処理    
ProcessMessage で×が押されたとき等の処理をしていると思いますので (多分ですが...
(ウィンドウプロシージャのメッセージ処理?)

この関数が -1 を返した時、メインループを抜けて即セーブすればよいと思います

悩むより一度自分でやってみることをお勧めします ^^


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

Name: チルチル  ..プログラマー(30,694ポイント)   Date: 2009/07/14(火) 20:01   No:36823     
Title: Re:×で終了した時の処理    
ProcessMessageが-1を返した時と言う事は
終了するまでに数フレーム猶予があるんでしょうか?


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

Name: yu  ..プログラマー(35,955ポイント)   Date: 2009/07/14(火) 20:08   No:36824     
Title: Re:×で終了した時の処理    
フレームと言いますか
WinMain関数 が return するまでの間、ですかね
ですが、なるべく早めに終了させなければならないそうです

http://homepage2.nifty.com/natupaji/DxLib/dxfunc.html#R1N3


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

Name: ねこ  ..プログラマー(26,375ポイント)   Date: 2009/07/14(火) 20:12   No:36825     
Title: Re:×で終了した時の処理    
SendMessageって関数について調べたら理解しやすいかもしれないですよ。

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

Name: チルチル  ..プログラマー(30,731ポイント)   Date: 2009/07/14(火) 20:36   No:36828     
Title: Re:×で終了した時の処理    
SendMessageについてはよくわかりませんでしたが
と言う事はProcessMessageが-1になった時に強制的にWinMain関数まで戻ってreturnするのでしょうか?


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

Name: ねこ  ..プログラマー(26,252ポイント)   Date: 2009/07/14(火) 20:48   No:36829     
Title: Re:×で終了した時の処理    
電話で例えるならProcessMessageは留守録を見る行為、SendMessageは着信だとしたら
留守録を見て着信が来てたら終わる。留守録を見ないと着信があったか分からない。

つまりProcessMessage関数実行時に「何か終了命令あった?」って逐次聞いてるわけです。
WinMainに干渉するわけじゃないです。


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

Name: チルチル  ..プログラマー(30,828ポイント)   Date: 2009/07/14(火) 21:01   No:36831     
Title: Re:×で終了した時の処理    
あ〜なるほどそういう事ですか
しかしProcessMessageはループのある場所では大体呼んでいますから
ProcessMessageごと関数で囲んで置き換えるしかないんでしょうかね・・
でもProcessMessage実行時に終了命令があるか確認するとしても
戻り値を返すと言う事はProcessMessage内で終了されているわけでは無さそうですね・・
いったいどこで終了されているのでしょうか?


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

Name: 御津凪 [URL]  ..ハッカー(105,429ポイント)   Date: 2009/07/14(火) 21:29   No:36832     
Title: Re:×で終了した時の処理    
中でやっていることの話をすると、Windows API のメッセージループの話になってしまいますが、
このメッセージループの処理で、「×で閉じた」というメッセージが送信され、
DXライブラリでは、これを受信したとき、「終了させるタイミング」と判断し、終了の意味を示す値を返しているだけです。
返しているだけなので、内部では終了処理自体してません。

終了処理をするのは、自ら書いたコード(DxLib_End を呼び出すなど)で行います。


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

Name: ねこ  ..プログラマー(26,435ポイント)   Date: 2009/07/14(火) 21:34   No:36834     
Title: Re:×で終了した時の処理    
主題を見逃してましたが、チルチルさんのしようとしてる事は多分無理です。

明示的でない終了のタイミングでのファイルのやりとりは中断される可能性もありますし、書き込むメモリが正常な保証もありません。
差分ファイルも作ってないならドラクエで言えば「ぼうけんのしょはきえてしまいました」って事になります。

セーブ自体の設計を再考してみてはどうでしょうか?


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

Name: yu  ..プログラマー(36,051ポイント)   Date: 2009/07/14(火) 21:45   No:36836     
Title: Re:×で終了した時の処理    
>> ねこ様
>> 明示的でない終了のタイミングでのファイルのやりとりは中断される可能性もありますし、
>> 書き込むメモリが正常な保証もありません。

そうなのですか...
自分は結構危険なことをしていたのですね;
うまくいったので良しとしていました...
ありがとうございます

>> チルチル様

適切ではないことを言ってすみませんでした orz


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

Name: チルチル  ..プログラマー(30,912ポイント)   Date: 2009/07/14(火) 21:45   No:36837     
Title: Re:×で終了した時の処理    
う〜ん、では毎フレームセーブするか
クリアした時にでも記録する事にしてみます
しかし明示的でないタイミングの処理が無理なら
たまにゲームなんかで×を押すと「終了しますか?」
みたいなウィンドウが出ますけど、アレはまた別の何かなんでしょうか?
そういえば龍神録は×を押しても終了しませんがアレもまた別の何かなんでしょうか?


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

Name: yu  ..プログラマー(36,275ポイント)   Date: 2009/07/14(火) 21:57   No:36839     
Title: Re:×で終了した時の処理    
>> チルチル様

Windowsプログラミングを少しかじれば、
そこら辺のことは見えてくるかと思います
(まだWinAPIの勉強を始めて1週間しか経過していない自分が言うのもあれですが....)

つまり
御津凪様が仰られたように
終了は自身が書いたコードで行われます
ですので
×ボタンが押された → メッセージボックス表示 → 戻り値がtrueなら終了
という感じにもできるかと思います
よくある「終了しますか?」はMessageBox()で簡単にできます


>> そういえば龍神録は×を押しても終了しませんがアレもまた別の何かなんでしょうか?

これはDXライブラリ側で関数が用意されています

SetWindowUserCloseEnableFlag( int Flag );


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

Name: チルチル  ..プログラマー(31,005ポイント)   Date: 2009/07/14(火) 22:01   No:36840 解決!     
Title: Re:×で終了した時の処理    
なるほどこんな関数もあったんですね
APIなどは今の実力では無理そうなので
そのうち勉強してみます

とりあえず終了時以外にセーブポイントを追加してみます
どうもありがとうございました


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



Name: てんちょー  ..ぴよぴよ(198ポイント)   Date: 2009/07/14(火) 01:00   No:36791       
Title: アンチエイリアシングされた文字を一文字ずつ表示    
はじめまして。 ノベルゲームを作りたくてCをはじめました。
1年くらい前から 「ゲーム作りで学ぶ! 実践的C言語プログラミング」 というサイトと
このサイトを見ながらノベルゲームを作ろうとしているのですが、アンチエイリアシングされた
文字を一文字ずつ表示するようなプログラムが作れず苦戦しています。

アンチエイリアシングされた文字を一文字ずつ表示するようなプログラムであればどのようなものでも
かまいません。

どなたかわかる片がいればご教授お願いします。


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


Name: 御津凪 [URL]  ..ハッカー(105,215ポイント)   Date: 2009/07/14(火) 01:25   No:36794     
Title: Re:メッセージを1文字ずつ表示    
> アンチエイリアシングされた文字を一文字ずつ表示するようなプログラムであればどのようなものでもかまいません。

こちらのページはどうでしょうか?
http://marupeke296.com/DXG_Font.html
(DirectX と Win32API 系の知識が若干必要ですが)


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

Name: てんちょー  ..ぴよぴよ(219ポイント)   Date: 2009/07/14(火) 21:33   No:36833 解決!     
Title: Re:メッセージを1文字ずつ表示    
ありがとうございます。
このサイトを参考にがんばってみます。


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



Name: ひよこ  ..熟練のプログラマー(46,132ポイント)   Date: 2009/07/13(月) 18:02   No:36733       
Title: STG作ってきました。    
このままのSTGを改造してきました。
ボムのエフェクトがかなりきついので、これについては絶対感想に入れてほしいです。
EXTRAとか作りました。(おまけです。
STGが今までのです。
遊んでくださったら感想をください。
アップローダ様
http://down11.ddo.jp/uploader/download/1247475296/attach/Ryusei.zip
PASS「hiyoko」です。


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


Name: チルチル  ..プログラマー(30,053ポイント)   Date: 2009/07/13(月) 18:41   No:36736     
Title: Re:STG作ってきました。    
製作お疲れ様です、デスクトップにある流星書記を上書きしてプレイしてみました
音楽室が追加されてなかなか形になってきた気がします

え〜と、ではまずボムのエフェクトから
見た感じ画面内の弾の位置にエフェクトが出るようですが
確かにちょっとビックリしますね
とりあえずカットインはエフェクトの手前に表示したほうが良いかもしれませんね
そうですね〜例えば最初は小さく薄く表示して
しだいに大きく濃くなっていき
最後に収束して得点アイテムに変わると良いかもしれません

他に気になった所を挙げると

@会話に入るとアイテムの動きが止まり判定も消える

Aボスの目が透過されているのは気のせい?

Bボスの体力メーターは自機ショットより手前に表示した方が良いかも

Cクリア画面からタイトルに戻れない?

DEX「ながれぼし」止まってても当たらない?

Eスペル名がスコアボードにめり込んでいるのは仕様ですか?

F残りの体力バーの数が表示されてわかりやすくなりましたが、自爆までの時間を追加してはどうでしょうか?

Gボスの魔方陣などはもう少し綺麗な画像を使ってはどうですか?

H余裕があれば背景を改良してみても良いかもしれません、宇宙の3D背景は綺麗な気がします


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

Name: ひよこ  ..熟練のプログラマー(46,407ポイント)   Date: 2009/07/13(月) 19:40   No:36744     
Title: Re:STG作ってきました。    
チルチルさん さっそく遊んでいただきありがとうございます。

ボムのエフェクト
>>画像を使っているので、画像を使って表示方法は変えさせていただきます。(単なる表示じゃなくて

@ これについてはプログラムしてませんでした。
A ずっと前から透過されてますね。 しかし透明な目ってのも悪くない気が・・・
B ボスのHPメータのあとに自機ショットの描画でよろしいのでしょうか?
C ESCで戻れると思うのですが・・・
D 「止まってても当たらない?」ってなんでしょうか?
  弾の前にいるのにあたり判定がないって意味でしょうか。
E 仕様です。
F 追加します。
G 描き直すってことですかね?
H 余裕があれば作ってみましょう。


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

Name: チルチル  ..プログラマー(30,302ポイント)   Date: 2009/07/13(月) 19:50   No:36745     
Title: Re:STG作ってきました。    
>ずっと前から透過されてますね。 しかし透明な目ってのも悪くない気が・・・
仕様なら問題は無いですね

>ボスのHPメータのあとに自機ショットの描画でよろしいのでしょうか?
え〜と自機ショットの後にHPメーターを描画で

>ESCで戻れると思うのですが・・・
あ〜そうでしたか、「ESCで戻る」とか表示してくれるとありがたいです

>弾の前にいるのにあたり判定がないって意味でしょうか。
上の方だけ弾が飛ぶので下にいれば特に移動しなくても当たらないって事です

>描き直すってことですかね?
描き直すか探すかって事で


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

Name: ひよこ  ..熟練のプログラマー(46,446ポイント)   Date: 2009/07/13(月) 21:24   No:36761     
Title: Re:STG作ってきました。    
チルチルさん いろいろとありがとうございました。
絵は書き直しました。
他の人も感想待ってます。


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

Name: array [URL]  ..熟練のプログラマー(51,139ポイント)   Date: 2009/07/13(月) 21:43   No:36763     
Title: Re:STG作ってきました。    
プレイさせてもらいました♪

私が言うのもおかしいのかも知れませんが、@に関しては私も違和感がありました
ボム使用後のエフェクトについてですが、実装はめんどくさいのにゲーム内容的にはあまり関係ないので
本当に面倒ですよね…がんばって実装してあると思います。後はチルチルさんのいう様な動きが実現できれば
よりよくなりそうですね

これからも制作を続けるみたいなので頑張って下さい


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

Name: ひよこ  ..熟練のプログラマー(46,546ポイント)   Date: 2009/07/13(月) 22:53   No:36774     
Title: Re:STG作ってきました。    
arrayさん 遊んでくださりありがとうございます。

@は実装します。

実装はめんどくさいのにゲーム内容的にはあまり関係ないので
>>内容には関係ないですが、そのゲームの一つの魅力みたいな意味で
>>ボムのエフェクトについて考えてみました。

他の人も感想をくださるとうれしいです。


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

Name: あ〜る  ..中級者(10,675ポイント)   Date: 2009/07/13(月) 23:41   No:36779     
Title: Re:STG作ってきました。    
やらせて頂きました〜
完成度高いですね…ゲームとして成り立ってる、僕のとは大違いです(-.-;)
弾幕も綺麗なのが多くて良かったです
強いて言うなら、ボスに動きが余り無かったように感じました
もっとボスを動くようにしたら弾幕のバリエーションも増やせると思います
ゲームシステムについては、皆さんが言ってるので、その他で特にこれといって気になった事は無かったです


………僕も頑張ろ…


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

Name: ひよこ  ..熟練のプログラマー(46,757ポイント)   Date: 2009/07/13(月) 23:56   No:36780     
Title: Re:STG作ってきました。    
あ〜るさん 遊んでくださりありがとうございます。

完成度高いですね。
>>今回、EXTRAと音楽の館を実装しました。

弾幕も綺麗なのが多くて良かったです
>>そう言ってもらえるとうれしいです。

ボスに動きが余り無かったように感じました 。
>>確かに動かないですね。EXTRAを改造しようと思ってます。

あ〜るさんもゲームできたら遊ばせてくださいね。

他の人の意見がゲームを変えるので
他の人の感想を待ってます。


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

Name:  ..ぴよぴよ(91ポイント)   Date: 2009/07/14(火) 11:11   No:36805     
Title: Re:STG作ってきました。    
やってみました。
ボムを放つと
もの凄くPCが重くなってフリーズして強制終了になってしまいました・・


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

Name: ひよこ  ..熟練のプログラマー(46,796ポイント)   Date: 2009/07/14(火) 12:56   No:36810     
Title: Re:STG作ってきました。    
@さん 遊んでくださりありがとうございます。
今回のボムは、画像をたくさん表示するので、けっこうきついです。
ボムのエフェクトなし版(画像表示しないもの)を作ったらいいのでしょうか?

他の人の感想待ってます。


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

Name: TRUTH  ..ぴよぴよ(462ポイント)   Date: 2009/07/14(火) 16:20   No:36812     
Title: Re:STG作ってきました。    
はじめましてープレイさせていただきました。


早速ですが・・・
気になったのはやはり弾幕の下にボスのHPバーがあって見えにくいのと
ボムの違和感(チルチルさんもおっしゃっていますが・・・)ですね。


ボムをどのように実装されてるか分からないので推測ですが・・・
ボムを使用したときに弾幕flagをオフにして、その時の敵の弾の座標を使って
弾が消えてるように見せかけるために光ってる画像にしていますよね。



なぜこんなことを聞くのかというと・・・
描写の順番が、弾>ボムエフェクト>ゲームボード>弾が消えてるような光った画像 のようで
弾幕が濃い時にボムを使用すると、ボムエフェクト(カットイン込み)が「弾が消えてるような光った画像」で見えなくなってしまう上に
スコア欄にまで「弾が消えてるような光った画像」が食い込んでしまっています。


感想や気になったところはこのあたりですが
自分もSTG製作中なので非常に参考になりました。



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

Name: ひよこ  ..熟練のプログラマー(46,975ポイント)   Date: 2009/07/14(火) 16:49   No:36814     
Title: Re:STG作ってきました。    
TRUTHさん 遊んでくださりありがとうございます。

ボムをどのように実装されてるか分からないので推測ですが・・・
>>このゲームは龍神録の館の改造です。

ボムがスコア欄にまで「弾が消えてるような光った画像」が食い込んでしまっているのは、
graph_main>>エフェクトメインとなっているのですが・・逆は無理ですね。
プログラムを変更することにします。

自分もSTG製作中なので非常に参考になりました。
>>ありがとうございます。
>>TRUTHさんのSTG楽しみに待ってます。

他の人もまだまだ感想待ってます。


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



Name: もこ  ..ぴよぴよ(184ポイント)   Date: 2009/07/13(月) 04:24   No:36708       
Title: エラー    
龍神録プログラムで、リビルドをしたら
graph_back.obj : error LNK2019: 未解決の外部シンボル "int __cdecl DrawGraphFd(int,int,int,int)" (?DrawGraphFd@@YAHHHHH@Z) が関数 "void __cdecl graph_back00(void)" (?graph_back00@@YAXXZ) で参照されました。
error LNK1120: 外部参照 1 が未解決です。

というエラーが出てしまったのですが、これはどういう意味なんでしょうか?
またどうやったらエラーがとれるでしょうか?
なにかをリンクをしないといけないのでしょうか・・?
やり方が分かりません・・優しく教えてください><


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


Name:  ..ぴよぴよ(0ポイント)   Date: 2009/07/14(火) 11:12   No:36806     
Title: Re:エラー    
リンカ?

Name: conio  ..プログラマー(34,217ポイント)   Date: 2009/07/14(火) 11:25   No:36808     
Title: Re:エラー    
------------------------------------------------------------------------------------------------
graph_back00(void)という関数の中で、DrawGraphFd(int,int,int,int)という関数が呼び出されているけど
そんな関数は存在しませんよ?
------------------------------------------------------------------------------------------------

という意味です。
"DrawGraphFd"という関数はちゃんとありますか?


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

Name: 御津凪 [URL]  ..ハッカー(105,260ポイント)   Date: 2009/07/14(火) 11:25   No:36809     
Title: Re:エラー    
「DrawGraphFd という名前の関数が使用されていますが、見つかりませんでした」(=未解決の外部シンボル)
という意味です。

最新版(2.25b)にはそのような名前の関数名がないですし、
打ち間違い(最後の"d"もしくは"Fd")かと思いますがどうでしょう?


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



Name: C言語初心者  ..入門者(3,162ポイント)   Date: 2009/07/12(日) 17:39   No:36682       
Title: C言語について質問です。    
すいません課題がどうしてもわからなくて悩んでます。
どうか教えてください。
問題が

1週間の売り上げ一覧を表示するプログラムを作成せよ。
   実行例  おにぎりの1週間の売り上げた合計数量と合計金額 
                            合計  合計
        種類 単価 月 火 水 木 金 土 日 数量  金額
        梅干 100 50 55 60 65 70 75 80  455  45500
        焼鮭 110 20 25 30 35 40 45 50  245  26950
        ツナ 120 10 15 20 25 30 35 40  175  21000
        焼肉 130  5 10 15 20 25 30 35  140  18200 
なのですが、
下のプログラムの中の下線部の部分がどういれたらいいかわかりません。

#include <stdio.h>
main()
{
int i,j,suu;
long kin;
int a[4][8] = {{ 100, 50, 55, 60, 65, 70, 75, 80},
{ 110, 20, 25, 30, 35, 40, 45, 50},
{ 120, 10, 15, 20, 25, 30, 35, 40},
{ 130, 5, 10, 15, 20, 25, 30, 35}};
char b[4][5] = {"梅干","焼鮭","ツナ","焼肉"};

printf("*** おにぎり1週間の合計数量と合計金額 ***\n");
printf(" 合計 合計\n");
printf("種類 単価 日 月 火 水 木 金 土 数量  金額\n");

for(_________){  /*ここにどういれればいいかわかりません*/
  printf("%s",b[i]);
suu=0, kin=0;


printf("%5d",____); /*単価の表示ってどうやるんでしょうか?*/

for(_________){ /*日〜土の数量表示 */

printf("%3d",____);
______________________ /* 1週間分の数量合計 */
}

___________________________ /* 1週間分の売上金額合計 */

printf("%6d%8ld\n",______); /* 合計数量と合計金額の表示 */
}
}


2倍のポイントを手に入れた! 1,018ポイント を手に入れた。


Name: non  ..熟練のプログラマー(54,260ポイント)   Date: 2009/07/12(日) 20:00   No:36684     
Title: Re:C言語について質問です。    
とりあえず、最初のforのところだけ、
まず、forは繰り返し処理で、特に繰り返す回数が決まってるときによく使われます。
ここでは、その下の行に、
printf("%s",b[i]);
と、ありますから、カウンタ変数としてiが使われているだろうと想像できます。
b[i]はおにぎりの種類の文字列ですから、おにぎりの種類だけ繰り返します。
for(i=初期値;i<最終値;iのカウントアップ)
で、この行を作ってみて下さい。

って、このレベルの解説でよろしいでしょうか?
授業の内容からすれば、もう2次元配列なので、for文の文法はわかると思いますが。




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

Name: C言語初心者  ..入門者(3,183ポイント)   Date: 2009/07/12(日) 21:11   No:36685     
Title: Re:C言語について質問です。    
返信ありがとうございます。

for(i=0;i<4;i++)

最初のところはこれであってますかね?


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

Name: 紅葉  ..中級者(11,370ポイント)   Date: 2009/07/12(日) 21:23   No:36687     
Title: Re:C言語について質問です。    
ざっくりとしか見ていないので何とも言えませんが
あっていると思います。
といいますか試してみてはw?

単価の表示 a[i][0]

後は他の方にお任せします><


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

Name: non  ..熟練のプログラマー(54,409ポイント)   Date: 2009/07/12(日) 21:52   No:36691     
Title: Re:C言語について質問です。    
はい正解です。
では、次に
printf("%5d",____);
単価の表示ですから、単価が配列のどこに入っているかわかりますよね。
紅葉さんがかかれているから、いいですね。

次の
for(_________){ /*日〜土の数量表示 */
です。
さっきと同じように、カウンタ変数を考えてみると、
最初の宣言でint i,j,suu;とあります。
suuは初期値に0を入れてるところがあるから、カウンタ変数ではなさそうです。
じゃ、たぶんjですね。
配列の日曜から、土曜は配列のどこにあるかを考えれば、jを何から何まで回せばいいか
わかると思います。



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

Name: C言語初心者  ..入門者(3,199ポイント)   Date: 2009/07/12(日) 22:10   No:36692     
Title: Re:C言語について質問です。    
for(j=0;j<6;i++)
printf("%3d",a[1][6]);
ですかね?


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

Name: box  ..ハッカー(141,970ポイント)   Date: 2009/07/12(日) 22:22   No:36694     
Title: Re:C言語について質問です。    
> for(j=0;j<6;i++)
> printf("%3d",a[1][6]);
> ですかね?

お手元にCのコンパイラがあるのでしたら、
「コードを書いたら、人に聞く前に自分で試す」という
考え方を身につけられる方がよいと思います。

上に引用したコードは、
6回まわるループの中で、毎回、a[1][6]という固定の値を出力している、
という時点で、おそらく仕様に合っていないでしょう。


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

Name: C言語初心者  ..ぴよぴよ(190ポイント)   Date: 2009/07/13(月) 02:00   No:36705     
Title: Re:C言語について質問です。    
学校の授業でやっている程度なので家にはコンパイラはないんですよ。。。
ダウンロードしてやれって言われそうなのですが、明後日課題提出でもうとりあえず教えてほしかったんです。
すいません丸投げみたいな感じで。。。


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

Name: non  ..熟練のプログラマー(54,489ポイント)   Date: 2009/07/13(月) 08:37   No:36716     
Title: Re:C言語について質問です。    
> for(j=0;j<6;i++)
> printf("%3d",a[1][6]);
> ですかね?

jを0から5まで回しても間違いではありませんが、
配列の0列目は、単価ですよね。1列目が月曜日。
この曜日に対応させてjを回した方がわかりやすいと思います。
> printf("%3d",a[1][6]);
iとjを使わなきゃ、意味がないでしょう。

もう少し、よく考えましょう。


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

Name: conio [URL]  ..プログラマー(31,434ポイント)   Date: 2009/07/13(月) 16:57   No:36730     
Title: Re:C言語について質問です。    

------------------------------------------------------------------
int a[4][8] = {{ 100, 50, 55, 60, 65, 70, 75, 80},
{ 110, 20, 25, 30, 35, 40, 45, 50},
{ 120, 10, 15, 20, 25, 30, 35, 40},
{ 130, 5, 10, 15, 20, 25, 30, 35}};
char b[4][5] = {"梅干","焼鮭","ツナ","焼肉"};
------------------------------------------------------------------
これの対応関係は分かりますか?
(配列のどれがどの値になるのか、という関係)

具体的には下記のようになります。
--------------------------------------------------------------------
  【梅干】     【焼鮭】     【ツナ】     【焼肉】
a[0][0] = 100 a[1][0] = 110 a[2][0] = 120 a[3][0] = 130 ※単価
a[0][1] = 50 a[1][1] = 20 a[2][1] = 10 a[3][1] = 5 ※(月)
a[0][2] = 55 a[1][2] = 25 a[2][2] = 15 a[3][2] = 10 ※(火)
a[0][3] = 60 a[1][3] = 30 a[2][3] = 20 a[3][3] = 15 ※(水)
a[0][4] = 65 a[1][4] = 35 a[2][4] = 25 a[3][4] = 20 ※(木)
a[0][5] = 70 a[1][5] = 40 a[2][5] = 30 a[3][5] = 25 ※(金)
a[0][6] = 75 a[1][6] = 45 a[2][6] = 35 a[3][6] = 30 ※(土)
a[0][7] = 80 a[1][7] = 50 a[2][7] = 40 a[3][7] = 35 ※(日)

b[0] = 梅干
b[1] = 焼鮭
b[2] = ツナ
b[3] = 焼肉
--------------------------------------------------------------------

で、梅干の月〜日までの売り上げは 50, 55, 60, 65, 70, 75, 80です。
上記の対応関係を見ると、下記のようにすれば良いと分かると思います。
printf("%3d",a[0][1]);
printf("%3d",a[0][2]);
printf("%3d",a[0][3]);
printf("%3d",a[0][4]);
printf("%3d",a[0][5]);
printf("%3d",a[0][6]);
printf("%3d",a[0][7]);

そして、規則的に1ずつ増えている部分 があると思うので、
それをうまくfor文にしてみましょう。
(この課題のプログラムだと、i以外に使える変数は一つしかないですね)

まとめるとこんな感じです。
一部"?"で伏字となっています。
----------------------------------------------------------------------------------
for(i = 0; i < 4; i++){  /*ここにどういれればいいかわかりません*/
  printf("%s",b[i]);
suu=0, kin=0;


printf("%5d",a[i][0]); /*単価の表示ってどうやるんでしょうか?*/

for(_________){ /*日〜土の数量表示 */

printf("%3d",a[i][?]);
______________________ /* 1週間分の数量合計 */
}

___________________________ /* 1週間分の売上金額合計 */

printf("%6d%8ld\n",______); /* 合計数量と合計金額の表示 */
}
}
----------------------------------------------------------------------------------



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

Name: C言語初心者  ..ぴよぴよ(47ポイント)   Date: 2009/07/14(火) 00:01   No:36781     
Title: Re:C言語について質問です。    
プログラマーさんすごくわかりやすく解説ありがとうございます。

for(j=1;j<=7;j++)
printf("%3d",a[i][j]);

これで合っていますか?


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

Name: conio [URL]  ..プログラマー(32,457ポイント)   Date: 2009/07/14(火) 00:35   No:36787     
Title: Re:C言語について質問です。    

>>for(j=1;j<=7;j++)
>>printf("%3d",a[i][j]);
>>これで合っていますか?
合っています。
(ついでに、for(j = 1; j < 8; j++)でもOKです)

残りは@、A、Bですね。
------------------------------------------------------------------------
#include <stdio.h>
int main(void)
{
int i,j,suu;
long kin;
int a[4][8] = {{ 100, 50, 55, 60, 65, 70, 75, 80},
{ 110, 20, 25, 30, 35, 40, 45, 50},
{ 120, 10, 15, 20, 25, 30, 35, 40},
{ 130, 5, 10, 15, 20, 25, 30, 35}};
char b[4][5] = {"梅干","焼鮭","ツナ","焼肉"};

printf("*** おにぎり1週間の合計数量と合計金額 ***\n");
printf(" 合計 合計\n");
printf("種類 単価 日 月 火 水 木 金 土 数量 金額\n");

for(i = 0; i < 4; i++){ /*ここにどういれればいいかわかりません*/
printf("%s",b[i]);
suu=0, kin=0;


printf("%5d",a[i][0]); /*単価の表示ってどうやるんでしょうか?*/

for(j = 1; j < 8; j++){ /*日〜土の数量表示 */

printf("%3d",a[i][j]);
@【       】 /* 1週間分の数量合計 */
}

A【       】 /* 1週間分の売上金額合計 */

printf("%6d%8ld\n",B【    】); /* 合計数量と合計金額の表示 */
}
}
------------------------------------------------------------------------

まず、@は一週間分の数量を合計する処理です。
梅干でいうと、下記のようになります。
----------------------------------------------------------------------------------------------
合計 = 50 + 55 + 60 + 65 + 70 + 75 + 80
合計 = a[0][1] + a[0][2] + a[0][3] + a[0][4] + a[0][5] + a[0][6] + a[0][7]
----------------------------------------------------------------------------------------------

で、a[i][j]という風にして、a[0][1] 〜 a[0][7]まで変えて行く処理は完成しているので、
あとはそれを、変数に足していくだけです。
(プログラムでは明言されていませんが、数量を入れるための変数がありますね)


次にAは、売り上げ金額を求める処理です。
普通に考えて、
--------------------------------------
売り上げ金額 = 単価 × 売れた数量
--------------------------------------
です。
上記の式が、それぞれどの変数に対応しているかを考えれば問題ないと思います。


最後に、Bは数量と売り上げ金額を表示するだけです。
表示したい変数(数量、金額)をprintf関数の中に入れるだけとなります。


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

Name: C言語初心者  ..入門者(3,302ポイント)   Date: 2009/07/14(火) 00:52   No:36790     
Title: Re:C言語について質問です。    
@はよくわからないんですがこうでしょうか?
(a[i][j],sum)

Aは@がよくわかってないんですが、
数量の合計 × a[i][0]

という考えでいいんですかね?

Bはそれぞれどの変数を使ったらいいのかわかりません。。


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

Name: conio [URL]  ..プログラマー(32,723ポイント)   Date: 2009/07/14(火) 01:05   No:36793     
Title: Re:C言語について質問です。    
>>@はよくわからないんですがこうでしょうか?
>>(a[i][j],sum)
全然違います。
そもそもプログラム中に"sum"という変数は存在しません。

i,j以外の変数が2つありませんか?
プログラムの中から探してください。

そして、プログラムでの足し算は分かりますか?
仮に、合計を表す変数が"sum"だとして、それに5を足す場合は、
-----------
sum += 5;
-----------
となります。

(sum, 5)
↑このような記述では何も起こりません。エラーになります。


>>Aは@がよくわかってないんですが、
>>数量の合計 × a[i][0]
>>という考えでいいんですかね?
そうです。単価の部分はそれであってます。


>>Bはそれぞれどの変数を使ったらいいのかわかりません。。
プログラム中にある"suu""kin"って何だと思いますか?
それぞれ 何かの頭の文字を取った変数に見えませんか?


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

Name: C言語初心者  ..入門者(3,318ポイント)   Date: 2009/07/14(火) 01:39   No:36796     
Title: Re:C言語について質問です。    
@はこうですか?
a[i][1]+a[i][2]+a[i][3]+a[i][4]+a[i][5]+a[i][6]+a[i][7]=suu

Aは
suu * a[i][0] = kin

B
printf("%6d%8ld\n",suu, kin)
ですかね?


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

Name: conio  ..プログラマー(33,196ポイント)   Date: 2009/07/14(火) 02:04   No:36797     
Title: Re:C言語について質問です。    
惜しいです。
が、あと少しです。

足し算などを行う場合、値を入れる変数が左側に来ます。
なので、Aは下記のようになります。
--------------------
kin = suu * a[i][0];
--------------------

Bもあっていますので、残るは@だけです。
@も同じく、プログラムで書くのであれば、
-------------------------------------------------------------------------------------
suu = a[i][1] + a[i][2] + a[i][3] + a[i][4] + a[i][5] + a[i][6] + a[i][7];
-------------------------------------------------------------------------------------
となります。

そして、for文で 変数jを1〜7まで変化させてるので、
変数"suu"に足して行く値は"a[i][j]"という様に出来ます。

-----------------------------------------------
for(j = 1; j < 8; j++){ /*日〜土の数量表示 */
printf("%3d",a[i][j]);
suu ?? ????/* 1週間分の数量合計 */
}
-----------------------------------------------
これが最後です。
suuに足して行く部分(???となっている部分)を作れば完成です。


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

Name: C言語初心者  ..入門者(3,318ポイント)   Date: 2009/07/14(火) 02:14   No:36798     
Title: Re:C言語について質問です。    
suu = a[i][j] + a[i][j-1]
こんな感じですか?
的外れのような気がすごくします・・・。


Name: conio  ..プログラマー(34,079ポイント)   Date: 2009/07/14(火) 08:18   No:36802     
Title: Re:C言語について質問です。    

>>suu = a[i][j] + a[i][j-1]
>>こんな感じですか?
>>的外れのような気がすごくします・・・。
全然違います。
試しにjが1から7まで変化した時を当てはめてみたら分かります。

------------------------------------------
※i = 0の時。

suu = a[0][1] + a[0][0] (j = 1)
suu = a[0][2] + a[0][1] (j = 2)
suu = a[0][3] + a[0][2] (j = 3)
suu = a[0][4] + a[0][3] (j = 4)
suu = a[0][5] + a[0][4] (j = 5)
suu = a[0][6] + a[0][5] (j = 6)
suu = a[0][7] + a[0][6] (j = 7)
------------------------------------------
上記を見ても分かるように、a[0][1] 〜 a[0][7]まで一回ずつ足されていないと思います。
おまけに、足しているのではなく代入しているので値が上書きされています。

例えば、"sum"に5 と6 を足す場合。
下記のようにすると、sumの値が6で上書きされて6になります。
11にはなりません。
--------
sum = 5; //sumに5を代入 0 → 5
sum = 6; //sumに6を代入 5 → 6
--------

sumに値を足して行くのならば、下記のようになります。
-------------------------------------------
sum += 5; //sumに5を足す 0 + 5 = 5
sum += 6; //sumに6を足す 5 + 6 = 11
-------------------------------------------

で、梅干で考えて見ましょう。
梅干の数量は、50 55 60 65 70 75 80 です。
それが a[0][1] a[0][2] a[0][3]a[0][4]a[0][5] a[0][6] a[0][7]に対応しています。

これを"suu"に足していく場合は下記のようにすればいいです。
--------------------------------------
suu += a[0][1]; // 0 + 50 = 50
suu += a[0][2]; // 50 + 55 = 105
suu += a[0][3]; // 105 + 60 = 165
suu += a[0][4]; // 165 + 65 = 230
suu += a[0][5]; // 235 + 70 = 300
suu += a[0][6]; // 305 + 75 = 375
suu += a[0][7]; // 380 + 80 = 455
--------------------------------------

printf関数のところは、下記の様な表示処理を
printf("%3d", a[i][j]);とし、
j の値を1〜7まで増加させて実現させましたね。
-----------------------
printf("%3d",a[0][1]);
printf("%3d",a[0][2]);
printf("%3d",a[0][3]);
printf("%3d",a[0][4]);
printf("%3d",a[0][5]);
printf("%3d",a[0][6]);
printf("%3d",a[0][7]);
-----------------------

これを、suuに値を足していく処理にも応用すればよいだけとなります。
値を足して行く式で、規則的に1ずつ増えているところはありませんか?


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



Name: あ〜る  ..中級者(10,415ポイント)   Date: 2009/07/13(月) 21:23   No:36759       
Title: アイテムの個数について    
お久しぶりです
龍神録プログラミングの館39、40章のアイテムを実装する所で、アイテムの実装には成功したんですが、いざアイテムの種類や個数を弄ってみようとしたらアイテムの種類は変えられたんですが、個数を変えるには何処をどう弄ればいいのかわかりませんでした…
自分でコードを読んで何とか理解しようとした限りでは多分
sizeof(enemy[s].item_n)/sizeof(int)
の数値を変えればいいと思うんですが、sizeofの意味を調べてみても、この一行の意味するところがわからず、いきずまってしまいました…
どなたかわかる片がいれば、ご教授お願いします

環境は
WindowsXP
BorlandC++
です
よろしくお願いします


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


Name: yu  ..プログラマー(35,580ポイント)   Date: 2009/07/13(月) 21:31   No:36762     
Title: Re:アイテムの個数について    
enemy[s].item_n配列はint型の配列ですから、int型一個分の大きさで割ると
enemy[s].item_n配列の要素数が出ます

アイテムの個数を変えたのでしたら
enemy[s].item_n配列の要素数を増やせばよいと思います
struct.h に定義されていますよ

...ここまで言っておいてなんですが、間違っていたらすみません;


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

Name: あ〜る  ..中級者(10,515ポイント)   Date: 2009/07/13(月) 21:47   No:36764     
Title: Re:アイテムの個数について    
返信ありがとうございます!
ただ、一体の敵を倒した時に出て来るアイテムの個数を、敵によって色々変えられるようにしたいので、敵によって自由に数値を変えられるようにしたいのです…
書き方がわかりにくくてすいません…


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

Name: yu  ..プログラマー(35,848ポイント)   Date: 2009/07/13(月) 22:35   No:36770     
Title: Re:アイテムの個数について    
>> ただ、一体の敵を倒した時に出て来るアイテムの個数を、敵によって色々変えられるようにしたいので、敵>> によって自由に数値を変えられるようにしたいのです…

では、item_n配列の要素数を敵一体が持つアイテムの最大数分の配列を確保してみてはいかがでしょうか
出すアイテムの種類、数は外部の csv で決定されています。

正し、ソースの変更点がいくつかあります

とりあえず、struct.h のitem_n配列の要素数の変更と
(enemy_t内とenemy_order_t内)

load.cpp 内の load_story()で
item_n[]に代入する処理と

enemy.cpp 内の enemy_enter()で
for(j=0;j<6;j++)
の 6 を item_n[] の要素数にする

もしかしたら、まだあるかもしれません・・・


以前自分もSTGでアイテムの出し方を考えましたが、
自分はソースに、アイテムが出る種類・数をパターン化してアイテムを登録しました
どちらが拡張性があって管理しやすいかはわかりません orz


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

Name: あ〜る  ..中級者(10,566ポイント)   Date: 2009/07/13(月) 22:53   No:36775     
Title: Re:アイテムの個数について    
返信ありがとうございます
教えて下さった事を参考に色々いじくってたら思った結果になりました!
ありがとうございました!


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



Name: チルチル  ..プログラマー(29,609ポイント)   Date: 2009/07/12(日) 23:34   No:36698       
Title: Releaseができない・・    
BCCの設定をDebugからReleaseにしてみたら

Error: 外部シンボル '_keymatch' が未解決(D:\新しいフォルダ\データ\RESISTANCE\パソコン部\AA.CPP\LIBJPEG.LIB|jpegtran が参照)
Error: 外部シンボル '_read_scan_script' が未解決(D:\新しいフォルダ\データ\RESISTANCE\パソコン部\AA.CPP\LIBJPEG.LIB|jpegtran が参照)
Error: 外部シンボル '_read_stdin' が未解決(D:\新しいフォルダ\データ\RESISTANCE\パソコン部\AA.CPP\LIBJPEG.LIB|jpegtran が参照)
Error: 外部シンボル '_write_stdout' が未解決(D:\新しいフォルダ\データ\RESISTANCE\パソコン部\AA.CPP\LIBJPEG.LIB|jpegtran が参照)
Error: 外部シンボル '_jcopy_markers_setup' が未解決(D:\新しいフォルダ\データ\RESISTANCE\パソコン部\AA.CPP\LIBJPEG.LIB|jpegtran が参照)
Error: 外部シンボル '_jtransform_request_workspace' が未解決(D:\新しいフォルダ\データ\RESISTANCE\パソコン部\AA.CPP\LIBJPEG.LIB|jpegtran が参照)
Error: 外部シンボル '_jtransform_adjust_parameters' が未解決(D:\新しいフォルダ\データ\RESISTANCE\パソコン部\AA.CPP\LIBJPEG.LIB|jpegtran が参照)
Error: 外部シンボル '_jcopy_markers_execute' が未解決(D:\新しいフォルダ\データ\RESISTANCE\パソコン部\AA.CPP\LIBJPEG.LIB|jpegtran が参照)
Error: 外部シンボル '_jtransform_execute_transformation' が未解決(D:\新しいフォルダ\データ\RESISTANCE\パソコン部\AA.CPP\LIBJPEG.LIB|jpegtran が参照)

と言うエラーが出てしまいました・・

これはどういう事でしょうか?


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


Name: 御津凪 [URL]  ..ハッカー(104,088ポイント)   Date: 2009/07/12(日) 23:44   No:36700     
Title: Re:Releaseができない・・    
Debug と Release の設定で違うところを見比べてください。

特にライブラリのリンクをチェックしてください。
何かリンクするファイルが抜けていませんか?
(LIBJPEG.LIB が見つからない様子)


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

Name: チルチル  ..プログラマー(29,646ポイント)   Date: 2009/07/13(月) 00:03   No:36702     
Title: Re:Releaseができない・・    
すみません「Debug と Release の設定」と「ライブラリのリンク」はどこに書いてあるんでしょうか・・

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

Name: 御津凪 [URL]  ..ハッカー(104,770ポイント)   Date: 2009/07/13(月) 00:24   No:36703     
Title: Re:Releaseができない・・    
> すみません「Debug と Release の設定」と「ライブラリのリンク」はどこに書いてあるんでしょうか・・

名称(項目名)のことを言っているのではないですよ。
ビルド構成を Debug から Release にした時、Debug で指定した設定があるのであれば、
Release の構成でもそれに適した設定をする必要があります。

確認しますが、 Debug の設定ではきちんと通るのですよね?

BCC Developer のプロジェクト設定では、プロジェクト構成を変更するともちろん設定も変わるので、
Debug の設定でキチンとビルドできるのであれば、プロジェクト設定の中で違うところを探してみてください。
(コンパイル1と2は関係ないはず)

デフォルトで Debug と Release で違うのは、
・出力ディレクトリ名
・コンパイル条件(-D)
・コンパイル1と2のいくつかの項目
です。

これらは今回のエラーの要因ではないはずだと思いますが、
上に書いたとおりlibjpeg.lib が無いと言っているので、本当に LIBJPEG.LIB が無いのか、
まずは確認してみてください。

※ちなみに Debug では libjpeg_d.lib をリンクします。


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

Name: Justy  ..伝説なるハッカー(392,808ポイント)   Date: 2009/07/13(月) 00:30   No:36704     
Title: Re:Releaseができない・・    
 コンソールアプリケーションを作ろうとしていませんか?

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

Name: チルチル  ..プログラマー(29,707ポイント)   Date: 2009/07/13(月) 17:46   No:36731     
Title: Re:Releaseができない・・    
コンソールアプリケーションではないです

設定で怪しそうなのはここでしょうかね・・
しかしどこを変えればいいのかわかりません・・


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

Name: 御津凪 [URL]  ..ハッカー(105,007ポイント)   Date: 2009/07/13(月) 17:54   No:36732     
Title: Re:Releaseができない・・    
その他オプションが怪しいですね。
そこを Release 時のプロジェクト設定にも入れてみてください。


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

Name: チルチル  ..プログラマー(29,740ポイント)   Date: 2009/07/13(月) 18:12   No:36734     
Title: Re:Releaseができない・・    
え〜と「Release 時のプロジェクト設定」とは何を指すのでしょうか?

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

Name: 御津凪 [URL]  ..ハッカー(105,009ポイント)   Date: 2009/07/13(月) 18:17   No:36735     
Title: Re:Releaseができない・・    
添付された画像に、ダイアログ上部のところに「現在のプロジェクト構成」とある部分があります。
そこの "Debug" とある部分を "Release" に変えてください。

それで「Release 時のプロジェクト設定」に切り替わります。


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

Name: チルチル  ..プログラマー(30,114ポイント)   Date: 2009/07/13(月) 18:53   No:36738     
Title: Re:Releaseができない・・    
やってみたのですがインクルードパスが指しているのがどこなのかわからないものがありました・・
見たところ存在しないフォルダを指しています・・


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

Name: 御津凪 [URL]  ..ハッカー(105,014ポイント)   Date: 2009/07/13(月) 18:59   No:36740     
Title: Re:Releaseができない・・    
存在しないインクルードパスやライブラリパスは無視されます。
そういうものは削除しても基本問題ありません。

ダイアログの一番下にある「その他オプション」はどうでしたか?
何も設定されていなかったりしたら、 Debug と同じ設定にしてみてください。


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

Name: チルチル  ..プログラマー(30,158ポイント)   Date: 2009/07/13(月) 19:12   No:36742     
Title: Re:Releaseができない・・    
見たところ存在しないパス以外は同じにしたんですがうまく行きません
わかりにくい所にあるのかもしれません・・


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

Name: 御津凪 [URL]  ..ハッカー(105,057ポイント)   Date: 2009/07/13(月) 20:02   No:36747     
Title: Re:Releaseができない・・    
一つ確認して(返答をもらって)いないことがあるのですが、
DXライブラリの中に libjpeg.lib はありますか?


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

Name: チルチル  ..プログラマー(30,319ポイント)   Date: 2009/07/13(月) 20:12   No:36749     
Title: Re:Releaseができない・・    
LIBJPEG.LIBと言うファイルならプロジェクトの中にありますけど・・

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

Name: ねこ  ..プログラマー(26,230ポイント)   Date: 2009/07/13(月) 20:18   No:36751     
Title: Re:Releaseができない・・    
BCCなんで詳細は分からないですが、DXLIBの公式設定と見合わせてみてはどうでしょうか?

VC-EXPRESSならマルチスレッドデバッグ(MDd)/(MT)の設定ミスの時のエラーに酷似してますが
そのあたり単純な見落とし等ないかチェックしてみてはどうでしょう?


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

Name: チルチル  ..プログラマー(30,337ポイント)   Date: 2009/07/13(月) 20:25   No:36752     
Title: Re:Releaseができない・・    
え〜とDXLIBの公式設定とはどこで見られるのでしょうか?

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

Name: 御津凪 [URL]  ..ハッカー(105,165ポイント)   Date: 2009/07/13(月) 20:33   No:36753     
Title: Re:Releaseができない・・    
> コンソールアプリケーションではないです

とあるのでスルーしていましたが、
Release の設定ではちゃんと Windows アプリケーション(-W)になっているのでしょうか?


…もし差し支えないのであれば、プロジェクトファイルだけ(*.bdp)をあげてみて(添付して)もらえないでしょうか?
パスなどに個人情報が載ってしまうので原則お勧めできませんが、テキスト形式なので、書き換えて伏せておくことはできます。


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

Name: チルチル  ..プログラマー(30,569ポイント)   Date: 2009/07/13(月) 21:01   No:36754 解決!     
Title: Re:Releaseができない・・    
>Release の設定ではちゃんと Windows アプリケーション(-W)になっているのでしょうか?
なっていませんでした・・
変更したら正常にコンパイルできました
これからは常にReleaseで行きたいと思います・・
お騒がせしてすみません、どうもありがとうございます。


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



Name: kutarapple  ..ぴよぴよ(362ポイント)   Date: 2009/07/12(日) 14:31   No:36678       
Title: このサイトにある「AA動画の作り方」について    
 ニコ動のAA動画を見て興味をもったので挑戦してみようかと思いましたが素人なのですぐ行き詰ってしまいます。
 紹介ページのように作業を進め、動画をbmp画像ファイルに変換するところまで完了しました。
 この先の進め方について教えていただけたらと思います。

 PC環境としては以下のものを使っています。

 OS : windows vista
コンパイラ : VC++ 2008EE

 なお、冒頭に書いた通り突発的に取り掛かろうとしているので、プログラミングに関する知識は皆無です(これから少しずつ覚えるかと思いますが)。
 現時点では、適当なところに「convAA」と「dispAA」のフォルダを作りこの後、紹介ページに書かれている「convAAとdispAAにDXライブラリがコンパイル出来るプロジェクトを作って下さい。」に取りかかりたいのですが、この意味が分からず手が止まっています。
 私のPC環境下で次に何をすればよいかを教えていただけたらと思います。

 プログラムのコードについては、紹介ページに掲載されているものをコピペして、必要な個所(FOLDERNAME、FILENAME、STARTとENDの番号)だけ変えて使わせてもらおうと思ってます。

 ちなみに、更に初歩的な質問ですがbmp画像ファイルが収納されているフォルダ名が「op00」で、ファイル名が「op00-0000○○○○(○は連番の意味です)」 ならば、「FOLDERNAME」は「op00」で「FILENAME」も「op00」ということでよいのでしょうか。

 素人の初歩的な質問ですが、どなたかよろしくお願いします(管理人さんからも説明いただけたらとてもありがたいです)。




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


Name: Dixq (管理人) [URL]  ..ウィザード(1,043,579ポイント)   Date: 2009/07/12(日) 21:13   No:36686     
Title: Re:このサイトにある「AA動画の作り方」について    
>kutarappleさん

初めまして。管理人です。
AA動画のページご覧下さりありがとうございます。
AA動画のページですが、紹介すべきプログラムコードが一部抜けている部分があるようで、あのままでは動きません。
後日になってしまいますが、修正しておきます。
また、

>プログラミングに関する知識は皆無です

と仰るのがどの程度かこちらではわかりませんが、本当にご存じない状態ですと、
何をしているのかわけがわからないのでは無いかと思います。
まず、BMPファイルの作り方、読み込み方やC言語の基本、そしてDXライブラリの使い方などを学ばれてはいかがでしょうか?
まずAA動画を作ってみるだけでいいからやってみたいということでしたら、後日修正したコードをコピペしてもらったらいいと思いますが。
なお、DXライブラリを使えるようにする準備はゲームプログラミングの館か、DXライブラリの本家HPに詳しく書いてありますのでご覧下さい。


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

Name: kutarapple  ..ぴよぴよ(502ポイント)   Date: 2009/07/13(月) 15:49   No:36729     
Title: Re:このサイトにある「AA動画の作り方」について    
管理人さんからご回答いただけ、とてもありがたいです。

確かに、知識がない状態ですので正直何をやっているのか見当がつきません。

「おもしろそうだな」と思ったので、中身が分からなくてもできるのならと思いましたが、やはりわからないと面白さも半減してしまいます。

せっかくなので、このサイトで紹介してあるようなことから少し勉強してみようと思います。

ですが、後日修正したコードが掲載されるということでしたら何も考えずに飛びつきそうですが・・・

わざわざご回答いただき、ありがとうございました。


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



Name: S  ..ぴよぴよ(67ポイント)   Date: 2009/07/07(火) 10:55   No:36378       
Title: .netでのtextbox    

VC.netで画面にtextboxを作りました。
ただ問題点が3つほどあります。

@Ctrl+Aですべてを選択ができる。
ACtrl+Zでメモ帳のように一回だけUNDOするのではなく
  wordなどのように何回UNDOできるようにしたい。
B又、Escキーでアプリを終了させたい。(やはりWM_ESCみたいなのを書くのでしょうか?)


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


Name: YuO  ..プログラマー(31,075ポイント)   Date: 2009/07/07(火) 12:01   No:36384     
Title: Re:.netでのtextbox    
(1) は質問ではないようなので飛ばします。

(2) は,自分で処理するしかないです。

Windows Forms の TextBox もメモ帳の入力欄も,どちらも元を正せば Win32 の EDIT コントロールです。
で,EDIT コントロール自体には一度分の UNDO 機能しかありません。
# WPF なら複数回の UNDO ができるのですが。

(3) キーが押された場合に閉じる処理は自分で書く必要があります。

Form の KeyPreview プロパティを true に設定し,
OnKeyDown 関数をオーバーライドするか,Form の KeyDown イベントで,
e->KeyData が Keys::Escape だった場合は Form の Close 関数を呼び出すようにします。


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

Name: s  ..ぴよぴよ(413ポイント)   Date: 2009/07/07(火) 14:06   No:36385     
Title: Re:.netでのtextbox    

ご回答ありがとう御座います。
すみません・・・1も質問です。
Ctrl+Aですべてを選択できるようにしたい。
が正しいです。
以上、ご確認よろしくお願いします。


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

Name: YuO  ..プログラマー(31,648ポイント)   Date: 2009/07/07(火) 16:09   No:36387     
Title: Re:.netでのtextbox    
修正) KeyData => KeyCode

機能がないなら自分で書けばいいわけで……。

対象の TextBox の KeyDown イベントで,
・e->KeyCode が Keys::A
・e->Control が true
を満たしたら,SelectAll メソッドを呼び出せばよいです。

詳細は,以下のあたり。

MSDN: Control.KeyDown イベント (System.Windows.Forms)
http://msdn.microsoft.com/ja-jp/library/system.windows.forms.control.keydown.aspx
MSDN: KeyEventHandler デリゲート (System.Windows.Forms)
http://msdn.microsoft.com/ja-jp/library/system.windows.forms.keyeventhandler.aspx
MSDN: KeyEventArgs クラス (System.Windows.Forms)
http://msdn.microsoft.com/ja-jp/library/system.windows.forms.keyeventargs.aspx
MSDN: KeyEventArgs.KeyCode プロパティ (System.Windows.Forms)
http://msdn.microsoft.com/ja-jp/library/system.windows.forms.keyeventargs.keycode.aspx
MSDN: Keys 列挙体 (System.Windows.Forms)
http://msdn.microsoft.com/ja-jp/library/system.windows.forms.keys.aspx
MSDN: KeyEventArgs.Control プロパティ (System.Windows.Forms)
http://msdn.microsoft.com/ja-jp/library/system.windows.forms.keyeventargs.control.aspx
MSDN: KeyEventArgs.Handled プロパティ (System.Windows.Forms)
http://msdn.microsoft.com/ja-jp/library/system.windows.forms.keyeventargs.handled.aspx
MSDN: TextBoxBase.SelectAll メソッド (System.Windows.Forms)
http://msdn.microsoft.com/ja-jp/library/system.windows.forms.textboxbase.selectall.aspx


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

Name: S西  ..ぴよぴよ(114ポイント)   Date: 2009/07/07(火) 21:54   No:36403     
Title: Re:.netでのtextbox    

YuOさん
回答ありがとうございます。
e->KeyCode
このインスタンス?がないようです・・・。
KeyStateというものがあり似たようなものをWindowsAPIでつかった記憶があります。
またtextboxについてなのですが特殊な作り方をしていて
3つのことをおやりたい場合私の場合どうやって書けばよろしいのでしょうか?
ソースを載せさせていただきます。


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

Name: バグ  ..ハッカー(161,558ポイント)   Date: 2009/07/07(火) 22:37   No:36411     
Title: Re:.netでのtextbox    
Yuoさんがほとんど答えを書かれていますが…(^_^;)

一番手っ取り早いのはテキストボックスを継承して、機能追加すればよいでしょう。


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

Name: S西  ..ぴよぴよ(180ポイント)   Date: 2009/07/08(水) 07:36   No:36443     
Title: Re:.netでのtextbox    
すいません・・・
私の勘違いでできなかったようです・・・。
エラーで動かなかったのですがリビルドしたらできました・・・。

2について挑戦してみます。


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

Name: S西  ..ぴよぴよ(618ポイント)   Date: 2009/07/08(水) 22:41   No:36476     
Title: Re:.netでのtextbox    
2番についてはなんとかできそうです。

現在考えているのは
例)30回戻れるようにする場合

String型で配列を30定義します。
int型でCntを定義します

テキストボックスに変更がある度にCntを+1し
Str[Cnt] = 〜->text;
if(Cnt > 30){

}

Ctrl+Zなら
Cntを-1
〜->text = Str[Cnt];

if(Cnt > 30){

}

みたいに書こうかと考えております。
みづらくてすみません。
時間がないので明日、試しますが
これでは無理そうでしょうか?

またメモ帳のようにテキストボックスにスクロールバーを付けたいです。
どうにかしてできないでしょうか?


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

Name: S西  ..ぴよぴよ(722ポイント)   Date: 2009/07/08(水) 23:42   No:36481     
Title: Re:.netでのtextbox    
申し訳ないのですが追加で質問です
C++みたいにグローバル変数を宣言したいのですが
どこに書けばグローバル扱いになるのでしょうか?

int UndoCnt = 0;
array<String^>^ UndoString = gcnew array<String^>(UNDO_MAX);

上記の物をグローバル変数として使いたいです。
質問ばかりですみません。


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

Name: バグ  ..ハッカー(161,667ポイント)   Date: 2009/07/09(木) 08:12   No:36490     
Title: Re:.netでのtextbox    
変数名からなんとなくやりたい事は推測できますが、グローバルにする必要は無いのでは?(^_^;)
おそらく、フォーム内でしか使わないでしょうから、フォームクラスのメンバとして追加してやればいいと思いますよ。
どうしても外部からのアクセスが必要であれば、publicにするか、アクセッサ(ゲッターもしくはセッター)からアクセスできるようにしてやればよいでしょう。


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

Name: YuO  ..プログラマー(31,739ポイント)   Date: 2009/07/09(木) 15:50   No:36500     
Title: Re:.netでのtextbox    
> またメモ帳のようにテキストボックスにスクロールバーを付けたいです。
> どうにかしてできないでしょうか?

MSDN 見ればちゃんと載っていますが……。
MSDN: TextBox.ScrollBars プロパティ (System.Windows.Forms)
http://msdn.microsoft.com/ja-jp/library/system.windows.forms.textbox.scrollbars.aspx


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

Name: S西  ..ぴよぴよ(867ポイント)   Date: 2009/07/09(木) 22:07   No:36545     
Title: Re:.netでのtextbox    
>>バグs
フォームクラスのメンバ〜
これって何処にどうかけばよろしいのでしょうか?
private: System::Windows::Forms::int^ cnt;
と書いたら当たり前ですがエラーが起きました

>>Yuos
すみません・・・できました><
VC.netでの開発は初めてで
使っている本には載っていなかったので・・・
ありがとうございます


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

Name: S西  ..ぴよぴよ(893ポイント)   Date: 2009/07/09(木) 22:35   No:36547     
Title: Re:.netでのtextbox    
refのところに書いたらできました><
すみませんご迷惑をおかけしました。


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

Name: バグ  ..ハッカー(161,691ポイント)   Date: 2009/07/10(金) 10:33   No:36559     
Title: Re:.netでのtextbox    
解決したようですが、C#で書いてみましたので参考になれば…
実は普段はC#.NETでコーディングしているので、こちらの方が慣れているんですよね(^_^;)

UndoMaxというプロパティの数値を変更すると、アンドゥできる回数が変更できます。
TextBoxを継承して作成してますので、他はTextBoxと同じ用に使用できます。
アンドゥ用の文字列は(アンドゥは後入れ先出しなので)Stackクラスへ格納しています。



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

Name: S西  ..かけだし(1,265ポイント)   Date: 2009/07/10(金) 13:56   No:36571     
Title: Re:.netでのtextbox    
ご質問が3点御座います。
多くて申し訳ないのですが助けていただけますと幸いです。

A
タブのテキストをダブルクリック、もしくわF2変えられるようにしたいのですが、
ダブルクリックの取得方法を含め、どのように処理をすればよいかわかりません・・・

現在、画面右上にテキストボックスを配置しそこに文字をうち左上ファイルから
「タブ名を変換」をクリックしていただくと変わる仕様となっております。
これだと使わない人にとっては邪魔かと思います。
使うときにだけテキストボックスをダイアログみたい(F2を押すと直接?入力できるようになるでもOK)にでていただけると助かります。

説明が下手ですみません
何かアドバイスをいただけないでしょうか?


B
またUNDO機能なのですがTextBox本来のUNDOが先に働いてしまって
不具合が生じます。これを切ることはできないのでしょうか?
こちらについてもアドバイスを頂けますと助かります。


C
ファイルの保存のとき実行ファイルから見たフォルダの位置に保存する。
現在は"text_01"等と書いてあってexeと同じ場所に保存されてしまいます。
これをexeと同じディレクトリにあるSaveフォルダに入れたいです。
"Save\test_01.txt"と書いたらエラーは起こらないのですが保存するとエラーが起こります。

お忙しい中、ご確認よろしくお願いします。


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

Name: バグ  ..ハッカー(161,816ポイント)   Date: 2009/07/10(金) 14:33   No:36573     
Title: Re:.netでのtextbox    
A:別のフォームクラスを作成して、F2が押された際にそのフォームを表示するとよいです。

B:前述の私のソースを御覧ください。かなり詳しくコメントしてありますので…。C#でもC++でも方法自体は同じです。

C:ApplicationクラスのStartupPathというプロパティが便利です。


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

Name: バグ  ..ハッカー(161,926ポイント)   Date: 2009/07/10(金) 14:38   No:36574     
Title: Re:.netでのtextbox    
おっと、1つ忘れてました。
ダブルクリック時のイベントの追加はリソースエディタから行えます。
イベントハンドラを追加したいコントロールにフォーカスを合わせて、プロパティウインドウの雷マークをクリックし、DoubleClickと書かれてあるところでダブルクリックするとハンドラが追加されます。


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

Name: S西  ..かけだし(1,359ポイント)   Date: 2009/07/12(日) 00:37   No:36651     
Title: Re:.netでのtextbox    
バグ様
ご返答が遅くなり申し訳ありませんでした。
自分なりに書いてみたのですがやはりできませんでした。

A
新しいフォームの作成について調べてみたのですがイマイチやり方がわかりません。
2つのフォームが操作できる方法と片方しかできなくやり方があることぐらいまでは
何とか理解できました。

B
スタック型について調べ、
後入れ先出しという意味は理解できました。
ただ.net環境での開発は今回が初めてですので
C#のソースを読むことができません・・・。
折角わかりやすく書いていただいているのに申し訳ないです。


if(e->Control == true){
if(e->KeyCode == Keys::Z){ //Z
this->UndoString[this->UndoCnt] = this->textBox[this->tabControl1->SelectedIndex]->Text;
if(this->UndoCnt < UNDO_MAX){
this->UndoCnt++;
}
this->textBox[this->tabControl1->SelectedIndex]->Text = this->UndoString[this->UndoCnt];
}else if(e->KeyCode == Keys::Y){ //Y
if(this->UndoCnt > 0){
this->UndoCnt--;
}else{

}
this->textBox[this->tabControl1->SelectedIndex]->Text = this->UndoString[this->UndoCnt];
}
}


C
こちらについてパスの取得はできました。
しかし指定したフォルダがないとエラーが起こるので
この処理を入れる必要があるみたいです・・・。

ダブルクリックについてのイベントは追加できました><
ありがとうございます。


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

Name: pooka [URL]  ..中級者(10,568ポイント)   Date: 2009/07/12(日) 03:36   No:36658     
Title: Re:.netでのtextbox    
Aについてちょっと作ってみました。

参考になりそうな所
ttp://msdn.microsoft.com/ja-jp/library/39wcs2dh(VS.80).aspx
ttp://msdn.microsoft.com/ja-jp/library/y2xxdce3(VS.80).aspx


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

Name: S西  ..かけだし(1,727ポイント)   Date: 2009/07/12(日) 14:25   No:36677     
Title: Re:.netでのtextbox    
pookaさん

フォーム作れました><
ありがとうございます。


問題がまたでてきてしまいまして
フォーム2でTextboxで書いた内容をフォーム1に受け渡す時ってどうするのでしょうか?
this->とかは書けないですよね・・・externとかするのでしょうか?

Form2.h
フォーム1側のテキスト              フォーム2側のアイテム
tabPage[this->tabControl1->SelectedIndex]->Text = this->nameTextBox->Text;


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

Name: バグ  ..ハッカー(162,007ポイント)   Date: 2009/07/12(日) 15:02   No:36679     
Title: Re:.netでのtextbox    
ゲッター、セッター、アクセッサ、プロパティ…辺りをキーワードにググってみてください。

逆に質問なのですが、VC++での開発は初めてだという事ですが、他の言語(といっても、VC++もC++ですけど…)の経験はありますか?
どうも、オブジェクト指向というか、クラスについて理解できていない印象を受けるのですが…


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

Name: S西  ..かけだし(1,849ポイント)   Date: 2009/07/12(日) 17:29   No:36681     
Title: Re:.netでのtextbox    
いままでDOS上のCを扱ったことはあります。
その為、クラスという概念が理解できていません。(やってることはなんとなくわかります)
とある処理でつかう変数や関数をパッケージ化してるのですよね?

また以前はCOBOLで会計関係のシステムを作っておりました。
その為、若干とっつきにくいです。


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

Name: S西  ..かけだし(1,939ポイント)   Date: 2009/07/12(日) 17:43   No:36683     
Title: Re:.netでのtextbox    
すみません。

フォーム自体ののテキストは参照できました。
tabPage[this->tabControl1->SelectedIndex]->Text = nameForm->Text;

ただそのフォーム内のアイテムをかくとエラーになります。
tabPage[this->tabControl1->SelectedIndex]->Text = nameForm->nameTextBox->Text;


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

Name: バグ  ..ハッカー(162,375ポイント)   Date: 2009/07/12(日) 23:02   No:36696     
Title: Re:.netでのtextbox    
あぁ、なるほど、それでですか。

えっと、ちょっと回答が前後しますが、UndoTextBoxをVC++で書き直してみました。
コンポーネントクラスとして書いていますので、コンポーネントクラスの追加の仕方から説明しておきます。

1:VisualStudio2005を起動する
2:プロジェクトを読み込む
3:ツールバーの「プロジェクト」をクリックする
4:「新しい項目の追加」をクリックする
5:「コード」をクリックする
6:「コンポーネントクラス」をクリックする
7:「ファイル名」を適当に入力する(UndoTextBoxとか)
8:「追加」をクリックする

これでコンポーネントクラスが追加されますので、追加されたファイルへ添付ファイルの中身をコピーしてください。

これで一度ビルドすれば、リソースエディタからUndoTextBoxを貼り付けることが出来るようになります。

うーん、VC++.NETは面倒ですね。C#やVBの方が分かり易いんじゃないかなぁ?


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

Name: S西  ..かけだし(2,015ポイント)   Date: 2009/07/12(日) 23:42   No:36699     
Title: Re:.netでのtextbox    
バグさん

お忙しい中、ありがとうございます。
なんとかUNDOについて、できました><
UNDO機能もMAXをいじり調整ができました。
本当に助かります。


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

Name: S西  ..入門者(2,739ポイント)   Date: 2009/07/12(日) 23:52   No:36701     
Title: Re:.netでのtextbox    
連レスすみません。

>>フォーム自体ののテキストは参照できました。
>>tabPage[this->tabControl1->SelectedIndex]->Text = nameForm->Text;
>>ただそのフォーム内のアイテムをかくとエラーになります。
>>tabPage[this->tabControl1->SelectedIndex]->Text = nameForm->nameTextBox->Text;

こちらのエラーコードを書かせていただきます。

1>c:\documents and settings\hayato\デスクトップ\コピー 〜 コピー 〜 kanadememo\kanadememo\Form1.h(402) : error C2248: 'Sample::Form2::nameTextBox' : private メンバ (クラス 'Sample::Form2' で宣言されている) にアクセスできません。
1> c:\documents and settings\hayato\デスクトップ\コピー 〜 コピー 〜 kanadememo\kanadememo\Form2.h(45) : 'Sample::Form2::nameTextBox' の宣言を確認してください。
1> c:\documents and settings\hayato\デスクトップ\コピー 〜 コピー 〜 kanadememo\kanadememo\Form2.h(22) : 'Sample::Form2' の宣言を確認してください。


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

Name: バグ  ..ハッカー(162,387ポイント)   Date: 2009/07/13(月) 08:00   No:36714     
Title: Re:.netでのtextbox    
Form2.hをインクルードしてない…とか?(^_^;)

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

Name: バグ  ..ハッカー(162,551ポイント)   Date: 2009/07/13(月) 09:34   No:36718     
Title: Re:.netでのtextbox    
あ、よく読んでなかった…失礼しました。
Form2のnameTextBoxというオブジェクトはprivate属性ですので、Form2クラス内でしか参照できません。
ですので、外部クラス(今回の場合はForm1かな?)からアクセスできるnameTextBoxのTextを取り出す為の関数(これが先に書き込みしたアクセッサとかゲッターと呼ばれるものです)を作ってやらなければいけません。

例えば…ですが、Form2内にpublic属性で

public: String^ GetTextBoxText()
{
return nameTextBox->Text;
}

みたいな関数を作成して、この関数を介してテキストボックスに入力された文字列を取り出してみては如何でしょうか?


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



Name: Dixq (管理人) [URL]  ..ウィザード(1,044,057ポイント)   Date: 2009/07/12(日) 21:42   No:36689       
Title: HPのサーバー移行について    
皆様、最近暑くなって来ましたが、いかがお過ごしでしょうか?
私はこの梅雨が早く明けてくれと毎日願っています。
(雨が降ると外で何かしたくても出来ないんですよねぇ・・。)

-----------キリトリ---------------

以前から発生している、ファイルが正常にDL出来ない問題ですが、どうもレンタルサーバー側の問題じゃないかということで、今レンタルしているtok2へ
http://tok2.com/pro/
問い合わせてみました。
ここは年2400円という破格なのですが、対応が悪く、
単純に解決しそうな問い合わせにしか応えてくれません・・。
以前一度だけメールが返ってきたのですが、5〜6通送ってももうメールが返って来る事はありませんでした。
安いサービスを提供していると言ってもこれは無い・・ということで、
レンタルサーバーの提供会社を変更することにしました。
もうtok2ではこの問題は解決出来そうにありません。

そこでServerQueenというところはどうかなと、ここで申し込みました。
http://www.serverqueen.jp/

まだ支払いはしていないのですが、とりあえず3ヶ月で申し込みました。
共有サーバーQ-02なら年1万円位で借りられそうです。

しかしこのServerQueen、ググってもあまり評判がヒットしないしよくわからないんですよね。
何かこれに関してご意見とか頂けるとありがたいです。
(それより○○のレンタルサーバーがいいよ、とか、2年間で申し込んだ方が安上がりでいいよ、とか、そこはやめとけ、とか・・)
また、このzipファイルが正常にIEでDL出来ないトラブルの原因、どなたかわかる方がいらっしゃれば教えて下さいm(_ _;)m

(なお、今回のサーバー移行で、URLが変わったりすることはありませんので、見た目等の変わりはありません)


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


Name: 御津凪 [URL]  ..ハッカー(104,001ポイント)   Date: 2009/07/12(日) 22:58   No:36695     
Title: Re:HPのサーバー移行について    
> ググってもあまり評判がヒットしない

ServerQueen はまだサービスを開始して間もない様なので、そんなに評判のコメントは出てきていないのだと思います。

以前、ここをチェックしてたことがありますが、
通常使用する場合は問題が無いそうですが、欠点がある(メモリがちょっと少ない?)らしいです。


ちなみに、私のところで使っているサーバー(ablenet)では、
ServerQueen より若干高いものの、サーバーの安定性としては問題ないと思います。
(評判的には中の上らしいです)
ただ、解約は解約書を FAX か郵送という手続きのところですので注意が必要です。

あと、他の低価格サーバーでは満足の良く評判を見ることはあまり無かったですね。

P.S
ここの掲示板、もうすぐ 100万 ヒットですね。


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

Name: array [URL]  ..熟練のプログラマー(50,998ポイント)   Date: 2009/07/12(日) 23:11   No:36697     
Title: Re:HPのサーバー移行について    
ServerQueenについては分かりませんが、アクセス解析が良さそうですね

他の鯖も探しているみたいなので…
私のHPは「XREA」を利用しています。価格と鯖の安定には評判があると思います。
こっちにも簡単なログ解析がありますが、ページ毎のアクセスが見れないので
フリー提供のアクセス解析を私は使ってます

XREA+
http://www.value-domain.com/xrea.php

上位鯖としてCORESERVERも提供されてます。
http://www.coreserver.jp/

まぁちなみに私の紹介URLから登録すれば私にXREAで使える100円分くらいの紹介料が入るはずなので、私が喜びます(笑
登録してもいいよ、という感じであればメールにて送らせてもらいます


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

Name: Dixq (管理人) [URL]  ..ウィザード(1,044,627ポイント)   Date: 2009/07/13(月) 06:24   No:36711     
Title: Re:HPのサーバー移行について    
>御津凪さん

ありがとうございます。
お〜チェックされていたのですね。
私はググって上に広告が出てきたからそのままクリックしたという何とも乗せられた感たっぷりで申し込みました^^;

>欠点がある(メモリがちょっと少ない?)らしいです。

使用しているサーバーのスペックはどこかではっきりわかりますか?
使っているCPUの名前だけかいてあるようですが・・。
ablenetの方が性能いいんですかね?
もしもサーバークイーンに特別問題が無かったらとりあえず3ヶ月だけ使ってみて様子をみてみようかなと思ったりしています。

>ここの掲示板、もうすぐ 100万 ヒットですね。

お、ホントですね。
そういえば先日トータルアクセス500万になりました。
ここまで運営出来たのも皆様のおかげです。本当にありがとうございますm(_ _)m
しかしこうしてみると、このHPの1/5は掲示板によるアクセスなのかもしれませんね^^;


>>arrayさん

おぉ、安いですね〜^^;
tok2と変わらない位の値段ですね。

>私の紹介URLから登録すれば私にXREAで使える100円分くらいの紹介料が入るはずなので、私が喜びます(笑

わかりましたw
帰宅したらまた詳しく見てみます!
もしこちらに決定させていただいた場合は上記URLから申し込みさせていただきますねw


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

Name: 御津凪 [URL]  ..ハッカー(105,032ポイント)   Date: 2009/07/13(月) 09:12   No:36717     
Title: Re:HPのサーバー移行について    
サーバーなどについての評判は、
「(サーバー名) 評判」でググって、1〜3番目辺りのリンクに大体乗っています。

> 欠点がある(メモリがちょっと少ない?)らしいです。

これは 2ch の書き込みからの情報で、どの程度かはわかりません。

ablenet と比べるにしても、 ServerQueen を使ってみたわけではないため、
差はちょっとわからないですね。
時間と試す資金があれば、実際に使ってみて比べるかもしれません。


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



Name: 土鳩  ..ぴよぴよ(109ポイント)   Date: 2009/07/12(日) 02:40   No:36654       
Title: 3D背景の消失点について。    
初めまして、土鳩と申します。
私は現在、龍神録プログラミングの館の3D背景作成の章を勉強しているのですが、
58章〜のサンプルを実行すると、画面の中心に壁や地面の消失点がありますよね?
その消失点を動かすことはできないのでしょうか?


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


Name: Dixq (管理人) [URL]  ..ウィザード(1,043,066ポイント)   Date: 2009/07/12(日) 12:58   No:36673     
Title: Re:3D背景の消失点について。    
>土鳩さん

はじめまして。管理人のDixqと申します。

3D描画における中心ということですよね?こちらの過去ログで解決出来るでしょうか?
http://www.play21.jp/board/formz.cgi?action=res&resno=26917&page=&lognum=85&id=dixq&rln=26993


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

Name: 土鳩  ..ぴよぴよ(226ポイント)   Date: 2009/07/12(日) 22:16   No:36693 解決!     
Title: Re:3D背景の消失点について。    
迅速な対応ありがとうございます。
しかしもう過去ログに解決策があったとは・・・
これからはもっと過去ログをくまなく調べてから質問しないといけませんね。
今回はありがとうございました。
またつまずいたときはもしかしたら質問するかもしれませんが、
(つまずかないようにするのが先ですが・・・)
その時はまた、よろしくお願いいたします。


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



Name: yrao  ..かけだし(2,217ポイント)   Date: 2009/07/11(土) 20:30   No:36643       
Title: ボスの弾幕が変わらない    
こんばんは
とても初歩的だと思われる質問なのですが、回答いただければ幸いです




func.cpp内の、ボスが出す弾幕を指定する部分で
・・・H009,

・・・H010,
に変更したのですが、弾幕の種類が変わりません。

他にも変えなければならない所があるのでしょうか?


プロジェクトは50章のものを使っています。


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


Name: array [URL]  ..熟練のプログラマー(50,705ポイント)   Date: 2009/07/11(土) 22:33   No:36644     
Title: Re:ボスの弾幕が変わらない    

func.hの中にboss_shot_bulletH010を追加していなければ追加する必要があります


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

Name: yrao  ..かけだし(2,241ポイント)   Date: 2009/07/11(土) 23:33   No:36645     
Title: Re:ボスの弾幕が変わらない    
追加してはいるのですが…

ちなみにH010以外の弾幕にも変わりませんでした;


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

Name: Dixq (管理人) [URL]  ..ウィザード(1,042,451ポイント)   Date: 2009/07/12(日) 00:30   No:36650     
Title: Re:ボスの弾幕が変わらない    
関数ポインタを格納する部分に自分の実行したい関数をいれていますか?

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

Name: ひよこ  ..熟練のプログラマー(45,802ポイント)   Date: 2009/07/12(日) 06:14   No:36659     
Title: Re:ボスの弾幕が変わらない    
まさか弾幕を出す数が足りないのでしょうか?
ini.cppの
boss.danmaku_num[1]=4;//最後に出るボスが何個目までの弾幕を出すか(47)
を変えましたか?


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

Name: yrao  ..かけだし(2,369ポイント)   Date: 2009/07/12(日) 09:37   No:36662     
Title: Re:ボスの弾幕が変わらない    
回答ありがとうございます。


弾幕を出す数は足りているようでした。

関数ポインタを格納する部分というのは何処のことなのでしょうか?


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

Name: yu  ..プログラマー(35,402ポイント)   Date: 2009/07/12(日) 09:47   No:36664     
Title: Re:ボスの弾幕が変わらない    
>> 関数ポインタを格納する部分というのは何処のことなのでしょうか?

func.h の


void (*boss_shot_bullet[DANMAKU_MAX])()=
{
//ココ
}


だと思います


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

Name: yrao  ..かけだし(2,434ポイント)   Date: 2009/07/12(日) 10:17   No:36665     
Title: Re:ボスの弾幕が変わらない    
その部分も変更してありました;



ちなみに
ShotH.cpp内で、H010とH009とで名前を入れ替えたところ(深弾幕結界をH009にしたということです)、弾幕の種類はちゃんと変わってくれました。


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

Name: array [URL]  ..熟練のプログラマー(50,759ポイント)   Date: 2009/07/12(日) 12:11   No:36666     
Title: Re:ボスの弾幕が変わらない    
正直、原因を特定するのに情報が少なすぎるので

関数ポインタを格納する部分の中身の記述と
H010をどの様に呼び出そうとしているのかを知りたいです。


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

Name: Dixq (管理人) [URL]  ..ウィザード(1,043,350ポイント)   Date: 2009/07/12(日) 13:03   No:36674     
Title: Re:ボスの弾幕が変わらない    
ヘッダを更新しても、その部分がビルドに反映されていないんじゃないでしょうか?
一度VC++を再起動し、「リビルド」してみて下さい。

それでもダメなら、プロジェクトのあるフォルダにある、以下のようなファイルを削除してもう一度コンパイルしてみてください。

RyuJin.ncb
RyuJin.vcproj.NAME-MIWNSM2BV7.name.user
RyuJin.suo


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

Name: yrao  ..かけだし(2,499ポイント)   Date: 2009/07/12(日) 21:27   No:36688     
Title: Re:ボスの弾幕が変わらない    
管理人様、リビルドを実行してみたところ、無事弾幕が変わってくれました!

本当にありがとうございます。


またarray様、説明不十分ですみませんでした。
次回からは気をつけたいと思います。


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

Name: Dixq (管理人) [URL]  ..ウィザード(1,044,165ポイント)   Date: 2009/07/12(日) 21:46   No:36690     
Title: Re:ボスの弾幕が変わらない    
.cppは変更するとCtrl+F5でちゃんとビルドしてくれるのですが、
それを含んでいるヘッダファイルはビルドの対象にならない場合があるようなんです。
なので、コンパイルする時にその変更したヘッダファイルもビルドの対象になっているか、よく確認してみて下さい。


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



Name: 博多市  ..ぴよぴよ(75ポイント)   Date: 2009/07/12(日) 12:32   No:36668       
Title: 色の取得    
こんにちは。いま私は龍神録プログラミングの館で勉強中なのですが、座標を指定してその座標の現在表示されている色を取得する関数はありますか?あったらその関数の使い方を教えてください、お願いします・・・

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


Name: yu  ..プログラマー(35,489ポイント)   Date: 2009/07/12(日) 12:44   No:36669     
Title: Re:色の取得    
こんにちは〜


int GetPixel( int x , int y ) ;

こんな関数がありますが、
処理が重いようなのであまり宜しくないかもしれません

ttp://homepage2.nifty.com/natupaji/DxLib/function/dxfunc_graph.html#R2N6


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

Name: Dixq (管理人) [URL]  ..ウィザード(1,042,536ポイント)   Date: 2009/07/12(日) 12:46   No:36670     
Title: Re:色の取得    
>博多市さん

こんにちは。

GetPixel関数のことですかね?
http://homepage2.nifty.com/natupaji/DxLib/function/dxfunc_graph.html#R2N6

しかしこの関数は重いので多用は禁物です。
もしこの関数で取得した色情報からRGB要素に分解したいならこの辺参考になりそうです。

http://hpcgi2.nifty.com/natupaji/bbs/patio.cgi?mode=view&no=1029

(追記:思いっきり被りました、すみませんorz)


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

Name: 博多市  ..ぴよぴよ(93ポイント)   Date: 2009/07/12(日) 17:04   No:36680 解決!     
Title: Re:色の取得    
素早い回答ありがとうございます!とても参考になりました!

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



Name: 通りすがり  ..上級者(17,184ポイント)   Date: 2009/07/12(日) 03:07   No:36657       
Title: 導入法    
四聖龍神録Plusをやってみてかなりで気がよくてすばらしいです

これをPSPに導入したいのですが出来ますか?


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


Name: yu  ..プログラマー(35,299ポイント)   Date: 2009/07/12(日) 09:34   No:36661     
Title: Re:導入法    
PC上で龍神録は起動できますが、PSPではきついと思います。
起動できても相当処理落ちするかと...

自分でPSP用にソースコードを書いてゲームを作れば遊べると思います
DXライブラリPortable という便利なものがあります

ttp://dxlibp.sourceforge.jp/


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

Name: Dixq (管理人) [URL]  ..ウィザード(1,042,983ポイント)   Date: 2009/07/12(日) 12:54   No:36672     
Title: Re:導入法    
端的に言うと、そのままでは出来ません。
自分でPSPで動くようにプログラムを作り直さなければなりません。

内容を詳しく確認していないのですが、2chで東方関連のPSPへの移植がされているようです。

まとめ
http://gameurawaza.me.land.to/danmaku/
PSPで東方やりたい奴14
http://schiphol.2ch.net/test/read.cgi/gameurawaza/1243093435/

以前このような動画がアップされたので、より一層PSPへの期待が高まったようです。
http://www.nicovideo.jp/watch/sm6620783


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

Name: lbfuvab  ..上級者(21,172ポイント)   Date: 2009/07/12(日) 14:08   No:36676     
Title: Re:導入法    
ある程度実験してみた所、60fpsでは無理でした。
もっと最適化すればなんとかなるのかも知れません。


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



Name: なすがに  ..ぴよぴよ(311ポイント)   Date: 2009/07/10(金) 23:43   No:36605       
Title: WinXPにて ファイルのプロパティ→概要を書き換えるには?    
Windows XP Pro NTFS C言語(コンパイラはcygwinでgccを使用) にて、
ファイルのプロパティ→概要タブにある情報を読み書きしたいと考えています。
ググってみたところ、IPropertyStorageのメソッドを使えば安全に
書き換えができるというところまでわかりましたが、
具体的にどういったコードを書けばアクセスできるのかがわかりません。
必死にサンプルプログラムがないか探しましたが、見つかりませんでした。
そこで、
簡単なサンプルか、参考になるページを教えていただけませんでしょうか。

プログラムの経験としましては、C言語の基礎はできる程度です。
APIは使用したことがありません。

ほかに必要な情報などがありましたらご指摘くだされば補足いたします。
よろしくお願いいたします。


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


Name: Justy  ..伝説なるハッカー(390,381ポイント)   Date: 2009/07/11(土) 00:54   No:36614     
Title: Re:WinXPにて ファイルのプロパティ→概要を書き換えるには?    
CodeProject -Access the Summary Information Property Set of a file using Visual C++.
ttp://www.codeproject.com/KB/files/SummInfoPropSetFile.aspx

 これなんてどうですか?
 書いてあるサンプルは C:\Document.txtにあるファイルの概要タブのタイトルを
書き換えるものになっています。


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

Name: なすがに  ..かけだし(1,072ポイント)   Date: 2009/07/11(土) 01:34   No:36617     
Title: Re:WinXPにて ファイルのプロパティ→概要を書き換えるには?    
早速のご回答ありがとうございます。

教えていただいたページのサンプルコードをコンパイルしようとしたところ、以下のエラーが出ました。
stdafx.hがないとのことですが、これは本来何に付属しているものなのでしょうか。
使用したコンパイラは、cygwin付属のgccです。

/***************************************************************************************/
C:\Programming\myc\rwproperty>gcc -o proptest2 proptest2.c
proptest2.c:1:20: stdafx.h: No such file or directory
proptest2.c: In function `WinMain':
proptest2.c:62: error: `reinterpret_cast' undeclared (first use in this function)
proptest2.c:62: error: (Each undeclared identifier is reported only once
proptest2.c:62: error: for each function it appears in.)
proptest2.c:62: error: syntax error before "void"
proptest2.c:66: error: `throw' undeclared (first use in this function)
proptest2.c:66: error: syntax error before string constant
proptest2.c:75: error: structure has no member named `Create'
proptest2.c:82: error: syntax error before string constant
proptest2.c:102: error: structure has no member named `WriteMultiple'
proptest2.c:103: error: `PID_FIRST_USABLE' undeclared (first use in this function)
proptest2.c:106: error: syntax error before string constant
proptest2.c:109: error: structure has no member named `Release'
proptest2.c:116: error: structure has no member named `Open'
proptest2.c:121: error: syntax error before string constant
proptest2.c:126: error: structure has no member named `ReadMultiple'
proptest2.c:128: error: syntax error before string constant
proptest2.c:131: error: `new' undeclared (first use in this function)
proptest2.c:131: error: syntax error before "char"
proptest2.c:143: error: syntax error before string constant


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

Name: Justy  ..伝説なるハッカー(392,701ポイント)   Date: 2009/07/11(土) 02:10   No:36619     
Title: Re:WinXPにて ファイルのプロパティ→概要を書き換えるには?    
 あー、このサンプルは C++か。
 んー、とりあえずCに直してみましたが、cygwinで通るかどうかはわかりません。
 うまくいかなかったら他の人の回答を待つか、自力で改良してみてください。


#include <stdio.h>
#define CINTERFACE
#define COBJMACROS
#include <windows.h>
#include <ole2.h>

#pragma comment( lib, "ole32.lib" )


const FMTID PropSetfmtid ={
/* F29F85E0-4FF9-1068-AB91-08002B27B3D9 */
    0xf29f85e0,
    0x4ff9,
    0x1068,
    {0xab, 0x91, 0x08, 0x00, 0x2b, 0x27, 0xb3, 0xd9 }
    };

int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
     // TODO: Place code here.

    IPropertySetStorage *pPropSetStg = NULL;
    IPropertyStorage *pPropStg = NULL;
    PROPSPEC propspec;
    PROPVARIANT propWrite;
    PROPVARIANT propRead;
    HRESULT hr = S_OK;
    char* str;

    // Open a file and a property set within it.
    hr = StgOpenStorageEx( L"C:\\Document.txt",
                STGM_DIRECT|STGM_SHARE_EXCLUSIVE|
                STGM_READWRITE,
                STGFMT_ANY,
                0,
                NULL,
                NULL,
                &IID_IPropertySetStorage,
                (void**)(&pPropSetStg) );


    if( FAILED(hr) )
        return 0;
    
    hr = IPropertySetStorage_Create(pPropSetStg, &PropSetfmtid, NULL,
                PROPSETFLAG_DEFAULT,
                STGM_CREATE|STGM_READWRITE|
                STGM_SHARE_EXCLUSIVE,
                &pPropStg );
    if( FAILED(hr) ) return 0;

    propspec.ulKind = PRSPEC_PROPID;
    propspec.propid = 0x00000002;

    //specify the value of property
    propWrite.vt = VT_LPWSTR;
    propWrite.pwszVal = L"this value set through code";

    hr = IPropertyStorage_WriteMultiple(pPropStg, 1, &propspec,
         &propWrite, PID_FIRST_USABLE );
    if( FAILED(hr) ) return 0;

    IPropertyStorage_Release(pPropStg);
    pPropStg = NULL;

    //again open the property set
    hr = IPropertySetStorage_Open(pPropSetStg, &PropSetfmtid,
         STGM_READ|STGM_SHARE_EXCLUSIVE,
         &pPropStg );
    if( FAILED(hr) ) return 0;

    // Read the property back and validate it
    hr = IPropertyStorage_ReadMultiple(pPropStg, 1, &propspec, &propRead );
    if( FAILED(hr) ) return 0;
    
    str = (char *)malloc(wcslen(propRead.pwszVal) + 1);
    wsprintfA ( str, "%S", propRead.pwszVal);
    free(str);

    if( hr == S_FALSE ) return 0;
    else if( propWrite.vt != propRead.vt ) return 0;
    else if( wcscmp( propWrite.pwszVal, propRead.pwszVal ) != 0 ) return 0;
    else wprintf( L"Success\n" );

    return 0;
}



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

Name: kokosan60  ..中級者(11,976ポイント)   Date: 2009/07/11(土) 03:43   No:36621     
Title: Re:WinXPにて ファイルのプロパティ→概要を書き換えるには?    
>>Justyさん
このプログラムはwindows.hやWinMainを使用しているので
UNIX系のCygwinのgccでは通りません。


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

Name: Justy  ..伝説なるハッカー(392,751ポイント)   Date: 2009/07/11(土) 10:03   No:36629     
Title: Re:WinXPにて ファイルのプロパティ→概要を書き換えるには?    

>このプログラムはwindows.hやWinMainを使用しているので
>UNIX系のCygwinのgccでは通りません

 cygwinでも windows.hとかもあったはずですし、
WinMainからの起動も -mwindowsのオプションで出来た、はずです。

 でも、たしかに、オプションの指定なしには通らないかもしれませんね。
 (pragma commentも機能しないでしょうし)

 つまり、
gcc -mwindows -mno-cygwin -lole32 -o proptest2 proptest2.c
 とかになるのかな
(うちには入れてないので確認はできませんが)


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

Name: toyo  ..プログラマー(37,287ポイント)   Date: 2009/07/11(土) 11:27   No:36632     
Title: Re:WinXPにて ファイルのプロパティ→概要を書き換えるには?    
C:\cygwin\usr\include\w32api
にwindows.hその他ありますね

でもcygwinではIProperty〜関数は使えないようです
VisualC++ではPropIdl.hで定義されてますがcygwinにはありませんでした


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

Name: なすがに  ..かけだし(1,444ポイント)   Date: 2009/07/11(土) 12:52   No:36634     
Title: Re:WinXPにて ファイルのプロパティ→概要を書き換えるには?    
みなさん、たくさんのご回答本当にありがとうございます。
大変感謝しております。

Justyさんの書き直してくださったコードをコンパイルしようとしたところ、以下のようなエラーが出ました。
PID_FIRST_USABLE が宣言されていない、というのは、やはりcygwinではIProperty系の関数は使えないという
ことなのでしょうか。

/*****************************************************************/
C:\Programming\myc\rwproperty>gcc -mwindows -mno-cygwin -lole32 -o proptest3 proptest3.c
proptest3.c: In function `WinMain':
proptest3.c:60: error: `PID_FIRST_USABLE' undeclared (first use in this function)
proptest3.c:60: error: (Each undeclared identifier is reported only once
proptest3.c:60: error: for each function it appears in.)



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

Name: Justy  ..伝説なるハッカー(392,869ポイント)   Date: 2009/07/12(日) 00:21   No:36648     
Title: Re:WinXPにて ファイルのプロパティ→概要を書き換えるには?    
 toyoさん、フォローありがとうございます。
 なるほど、PropIdl.hがない、と。
 

 このヘッダは Windows SDKの中にあるので、それを使えば
ひょっとしたら動くかもしれませんが……。

 cygwinだけで何とかするのは厳しいかもしれませんね。


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

Name: なすがに  ..かけだし(1,844ポイント)   Date: 2009/07/12(日) 01:54   No:36653     
Title: Re:WinXPにて ファイルのプロパティ→概要を書き換えるには?    
PropIdl.h を探し、先のコンパイルエラーに関係のありそうなものを追加してみました。

typedef __RPC_unique_pointer IPropertySetStorage;
EXTERN_C const IID IID_IPropertySetStorage;
#define PID_FIRST_USABLE ( 0x2 )

この3行をグローバル領域に追記しました。
コンパイルエラーの行数は少なくなりましたが、意味を理解していないので何とも言えません。
申し訳ないです。

==================================================================
#include <stdio.h>
#define CINTERFACE
#define COBJMACROS
#include <windows.h>
#include <ole2.h>

typedef __RPC_unique_pointer IPropertySetStorage;
EXTERN_C const IID IID_IPropertySetStorage;
#define PID_FIRST_USABLE ( 0x2 )

#pragma comment( lib, "ole32.lib" )
const FMTID PropSetfmtid ={
/* F29F85E0-4FF9-1068-AB91-08002B27B3D9 */
0xf29f85e0,
0x4ff9,
…………
==================================================================

コンパイルエラー
==================================================================
$ gcc -o proptest4.out proptest4.c
proptest4.c:10: error: syntax error before "IPropertySetStorage"
proptest4.c:10: warning: useless keyword or type name in empty declaration
proptest4.c:10: warning: empty declaration
==================================================================


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

Name: Justy  ..伝説なるハッカー(392,791ポイント)   Date: 2009/07/12(日) 03:02   No:36656     
Title: Re:WinXPにて ファイルのプロパティ→概要を書き換えるには?    
 cygwinを入れていないので、ほとんど想像でしかアドバイスできず、
この方向で進めても、解決しないか、解決してもそれまでに数十の問答を繰り返さないと
解決までいかないと思います。

 別の方が cygwin上で可能な別のアプローチを提案されるのを待つか、
この際 VisualStudioを入れてそちらを使ってみてはどうでしょうか。


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

Name: なすがに  ..かけだし(1,792ポイント)   Date: 2009/07/12(日) 13:18   No:36675 解決!     
Title: Re:WinXPにて ファイルのプロパティ→概要を書き換えるには?    
わかりました。熱心なご回答ありがとうございました。
とりあえず、VC++でコンパイルして、このプログラムを外部的に利用する方向で考えてみます。

大変勉強になりました。ありがとうございました。


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



Name: res  ..ぴよぴよ(3ポイント)   Date: 2009/07/12(日) 06:34   No:36660       
Title: ポインタエラー    
25章の「ボスに当たり判定をつけてみよう」で
7回弾幕を終えるとポインタエラーになると書いてありますが
これはなぜなんですか?また、そのエラーの原因となるソースはどこですか?
7回以上弾幕を増やす方法はないんでしょうか?


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


Name: yu  ..プログラマー(35,356ポイント)   Date: 2009/07/12(日) 09:43   No:36663     
Title: Re:ポインタエラー    
func.h で定義されている void (*boss_shot_bullet[DANMAKU_MAX])()
に弾幕関数への関数ポインタが登録されていないからではないでしょうか

弾幕を増やしたいのでしたら、配列の中に

boss_shot_bulletH000,

をたくさん書けば良いと思います


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

Name: Dixq (管理人) [URL]  ..ウィザード(1,042,798ポイント)   Date: 2009/07/12(日) 12:49   No:36671     
Title: Re:ポインタエラー    
ポインタ配列の要素は

#define DANMAKU_MAX 7

により、7つしか用意されていませんが、
弾幕番号がインクリメントされて、7以上になってしまうと、
無い場所をさしてしまうので、ポインタエラーになってしまいます。

7つ以上にしたいなら、定義の数を変更し、ポインタ配列格納部に自分の追加したい関数を追加して下さい。


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



Name: チルチル  ..プログラマー(28,949ポイント)   Date: 2009/07/12(日) 01:40   No:36652       
Title: 2Dポリゴンに使う配列    
DXライブラリのDrawPolygonBase関数を使用して画像を変形させる処理を作ろうと思っているのですが
頂点の数が毎回バラバラなのでポリゴンの構造体配列をどう宣言すれば良いのか迷っています

私の思い付いた方法は

1.malloc関数で頂点の数だけ構造体配列を用意し描画した後に開放する

2.予想される頂点の最大数だけ構造体配列を宣言しておく

3.沢山の四角形に分割するのでポリゴン2枚分のローカル構造体配列を宣言して使い回し何回かに分けて描画する

なのですが、どの方法も問題があって困っています・・

1の方法は1フレームに何回も描画するので処理落ちしそう・・

2の方法は頂点の数が数個の時から数百個の時まであるので無駄が多そう・・

3の方法はポリゴンを何回かに分けて描画すると境目が目立つので見た目が悪くなってしまう・・

こういう場合はどうしたら良いでしょうか?


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


Name: Justy  ..伝説なるハッカー(392,642ポイント)   Date: 2009/07/12(日) 02:40   No:36655     
Title: Re:2Dポリゴンに使う配列    

>こういう場合はどうしたら良いでしょうか?

 どうい性質のものを描画するのかでも変わってくるとは思いますが、
基本は1でいいのではないでしょうか。

 数百個くらいなら2でも問題はないですね。


 或いは状況に応じて1と2の複合……例えばあるエフェクトの描画に使うとき、
エフェクト出す段階で最大サイズを求めて領域を malloc、エフェクトが
消滅、或いは不要になった段階で freeとか。


 あと 1/60秒程度に高々数回〜数十回 mallocしたくらいで
処理落ちするような低スペックPCはそのそもゲームに向いていないので
気にしなくていいかと、


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

Name: チルチル  ..プログラマー(29,007ポイント)   Date: 2009/07/12(日) 12:17   No:36667 解決!     
Title: Re:2Dポリゴンに使う配列    
mallocは効率が悪いと聞いていたんですが
気にするほどでもないんですね

では1でやってみます
どうもありがとうございました


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



Name: 羽球好き  ..ぴよぴよ(242ポイント)   Date: 2009/07/11(土) 17:10   No:36639       
Title: トーナメント表作成について    
こんにちは!
専門学校2年の羽球好きと申します。
卒業研究はVC++でゲームを作ろうと、サイトを通して勉強させてもらってますが、ゲームとは別に、知り合いからスポーツの試合で組み合わせに使うトーナメント表を作れない?と聞かれました。
ネットではエクセルなどを使ったものが目に付くのですが、人数を入力したらトーナメント表が作成されるようなプログラムはVC++でも可能でしょうか?
このような関数がある等、何かお知恵を拝借できたらと思い、書き込みいたしました。
ゲームと関係なく申し訳ないですが、よろしくお願いいたします。


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


Name: 御津凪 [URL]  ..ハッカー(103,227ポイント)   Date: 2009/07/11(土) 17:20   No:36640     
Title: Re:トーナメント表作成について    
トーナメント表の生成自体は比較的簡単に作れそうですが、
それを直接印刷するとなると、印刷に関するAPIを知らなくてはならなくなり、余計な知識も必要になります。
代わりに画像として出力するならその部分は要らなくなりますが…。


とにかくトーナメント表を作るだけなら簡単です。
(表示は整える必要があるため難しいですが)

あと、一応トーナメント表作成のソフトはあるみたいですよ。


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

Name: Dixq (管理人)  ..ウィザード(1,042,432ポイント)   Date: 2009/07/11(土) 23:34   No:36646     
Title: Re:トーナメント表作成について    
目的は何でしょうか?例えば

(1),トーナメントを作るプログラムを作成することを通して勉強したい
(2),とにかくトーナメントが既存のソフトかなにかで作れたらいい
(3),サンプルプログラムが欲しい

など。
もし1や3なら環境や使用したいライブラリ、出力形式などを詳細に書いていただけるとありがたいです。


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

Name: 羽球好き  ..ぴよぴよ(293ポイント)   Date: 2009/07/12(日) 00:09   No:36647     
Title: Re:トーナメント表作成について    
御津凪さま、管理人さま、丁寧な返事ありがとうございます。
また質問が漠然としてたみたいで、申し訳ありません。

目的は、知り合いに作れない?と聞かれ、どうせ作るなら今独学で勉強し始めてるVC++で作ってみたいって興味からです。
漠然としてて申し訳ないのですが・・・。
C言語は学校で1年間勉強してるのですが、VC++に関してはあまり知識がありません。
ちなみに、知り合いが使ってるエクセルのトーナメント表は、もともとトーナメントの形は出来ていて、別シートに名前を入力して、関数でトーナメント表に名前書き込まれるものなんですが(わかりにくくてすみません)、人数入力したらトーナメント表が生成され、名前入力しプリントアウトできるまでを頑張って作れたらと思ってます。


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

Name: 御津凪 [URL]  ..ハッカー(103,857ポイント)   Date: 2009/07/12(日) 00:27   No:36649     
Title: Re:トーナメント表作成について    
一から作るとなると、 VC++ では(覚える時間を含めて)時間的に厳しいかと思います。

上記にも書いたように、トーナメント表を作るだけなら問題なく作れるのですが、
(ここで言っているのはトーナメント表の構造のことで、表示の仕方ではないことに注意)

1.トーナメント表を描画する処理
2.描画したトーナメント表を画像として出力、保存する処理(確認のために必要)
3.描画したトーナメント表をプリントアウトする処理

特に、3番目は現在のプリンター技術に合わせた高度な処理と手続きが必要になるので薦められません。

代わりに言語の似ている VC# を使えばこれらの処理は全て任せられるので、何十倍も楽に早く作れます。






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



Name: すずめ  ..入門者(3,641ポイント)   Date: 2009/07/11(土) 14:35   No:36636       
Title: 43章 きっちりFPSを制御してみよう    
43章は何度かやったはずなんですが、また別のプロジェクトで
FPSを表示させようとしてコピペしたらerrorがでました。
errorの内容は
'fp' : 定義されていない識別子です
自分なりに調べたら、fps.cppのfps_wait()のなかほどに

fprintf(fp,"%d:%d\n",fps_count,term);
if(fps_count==600)
fclose(fp);

が、解説のほうにはありますが、43章以降のダウンロードした
サンプルのファイルにはありません。
上記のコードをコメントアウトすれば正常に動きます。

素人なので調べて
FILE *fp;を追加すると、今度は初期化されていない・・・・・と出てきます。

それで質問です。
上記のコードをコメントアウトするのがいいのか?、
もしそうしないなら、どうすればeroorが出なくなるか?
どなたか教えてください。


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


Name: ひよこ  ..熟練のプログラマー(45,729ポイント)   Date: 2009/07/11(土) 15:19   No:36637     
Title: Re:43章 きっちりFPSを制御してみよう    
私も同じことがあって掲示板で聞くと static FILE *fp=fopen("txt.txt","w");(だけでしょうか?
を追加したソースをみせてもらいました。


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

Name: すずめ  ..入門者(3,710ポイント)   Date: 2009/07/11(土) 19:42   No:36642 解決!     
Title: Re:43章 きっちりFPSを制御してみよう    
ということは、txt.txtというファイルを作って
適当なところに置いておくということですね。

ひよこさん、どうもありがとうございました。


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



Name: 素人  ..中級者(9,075ポイント)   Date: 2009/07/07(火) 18:41   No:36389       
Title: グレイズを実装!    
ボムの件ではありがとうございました。
グレイズも実装して見ようと思うのですが
グレイズを作るにはどういった「流れ(順序)」で作ればいいのでしょうか?
ボムとはちょっと難しい感じがするんですが
アドバイスをお願いします。


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


Name: あ〜る  ..中級者(9,848ポイント)   Date: 2009/07/07(火) 18:48   No:36390     
Title: Re:グレイズを実装!    
まずグレイズの当たり判定を、今まで作った自機の当たり判定とかのコードを参考にして作ります
あとはグレイズ数を表す変数を作り、↑で作った当たり判定を満たしていたら、その変数に+1すればOKだと思います

あ、あと前のボムの数にしても今回のグレイズ数にしても、ちゃんとゲーム開始な時に初期化するのを忘れないようにして下さいね(^^)


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

Name: ひよこ  ..熟練のプログラマー(44,958ポイント)   Date: 2009/07/07(火) 18:53   No:36391     
Title: Re:グレイズを実装!    
龍神録の改造ならある範囲を用意して
out_judge(弾のX座標,弾のY座標,ある範囲のX,ある範囲のY,
弾の当たり判定の大きさ,当たり判定の大きさ,弾のスピード,弾の角度)
として、out_judge_enemyshotを(参考に)
で1がかえってきたらch.graze+=1;をすればいいと思います。


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

Name: Dixq (管理人) [URL]  ..ウィザード(1,041,489ポイント)   Date: 2009/07/07(火) 21:01   No:36395     
Title: Re:グレイズを実装!    
確かに当たり判定範囲にあった時、+1すればいいのでしょうが、グレイズは当たり判定範囲にあっただけで+1しないようにするのがポイントです。
もし当たり判定範囲に入っているだけで+1してしまうと、遅い弾などの近くにいると、すごい勢いでグレイズが上がってしまいます。
(マイフレームカウントしてしまう)

グレイズに関する変数は弾にも持たせる必要があり、その弾は発射してから当たり判定範囲が満たされたことがあるかどうかも調べる必要があります。

ですので、bullet_t構造体にグレイズ変数を用意し、弾を発射した時に1とでも代入しておき、グレイズの判定を満たしたら、これを0にしておき、再度判定されないようにするなどの工夫が必要だと思います。


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

Name: あ〜る  ..中級者(9,932ポイント)   Date: 2009/07/07(火) 21:05   No:36397     
Title: Re:グレイズを実装!    
あ、そっか
申し訳無いです…
あと横から質問で申し訳無いんですが、レーザーの場合はどうすればいいんでしょうか?
レーザーにグレイズしてから何カウントかしたら、グレイズフラグみたいなのを元に戻してもう一度グレイズ出来るようにすれば大丈夫でしょうか?


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

Name: Dixq (管理人) [URL]  ..ウィザード(1,041,793ポイント)   Date: 2009/07/07(火) 21:19   No:36399     
Title: Re:グレイズを実装!    
私はレーザー一本にグレイズ1カウントしかカウントしないようにしていますが、東方ってどうでしたっけ?
東方と同じシステムにしたければ、そちらを調べてみて、同じになるように計算されてみてはいかがでしょう?

私としてはもし何カウントかしたらフラグを戻すのではなく、
一度当たり判定範囲を離れ、再度当たり判定範囲に近づいたらまたカウントする方がいいような気がします。


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

Name: あ〜る  ..中級者(9,975ポイント)   Date: 2009/07/07(火) 21:23   No:36401     
Title: Re:グレイズを実装!    
なるほど…
東方では何回もグレイズ出来ます
まぁレーザーについては色々やって好みを実装する事にします
ありがとうございました


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

Name: ねこ  ..上級者(21,500ポイント)   Date: 2009/07/07(火) 22:31   No:36410     
Title: Re:グレイズを実装!    
東方は連続弾の合成で表示してるんじゃなかったかな。
死んだ時にレーザーに突っ込むと中だけ削れたりするので分かりやすいかなと。
なので構成数だけグレイズします。

僕はレーザーの場合一つの弾に対して複数の判定領域を持たせてそれぞれで判定してます。
なので長いレーザー程グレイズ数が多いですね。
東方と同じく中が削れるので1個の当たり判定だと都合が悪くなってしまいました。


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

Name: yu  ..プログラマー(34,341ポイント)   Date: 2009/07/07(火) 22:39   No:36412     
Title: Re:グレイズを実装!    
>>ねこ様

東方のレーザーは米弾か鱗弾(表現が難しいです...)の一つを
引き伸ばしているように見えます

鱗弾を引き伸ばしたレーザー(先の尖ったレーザー)は連続弾で作るのは難しいと思います
あくまで推測ですが^^;

削ることができるのはレーザーを短くするか
2つに別れた場合は新しくレーザーを登録しているのではないでしょうか


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

Name: Dixq (管理人) [URL]  ..ウィザード(1,041,956ポイント)   Date: 2009/07/07(火) 22:53   No:36414     
Title: Re:グレイズを実装!    
私もどうやって表現しようか随分悩みました・・。
いきついた答えが龍神録のような実装の仕方なんですが、どうでしょうかね?
反魂蝶のような切れる事のないレーザーは一つの弾として計算されており、
途切れるレーザーは細かいレーザーの連続じゃないかなと思ったりしました。
その辺はグレイズで確認したり、細かい確認はしてないのでわかりませんが・・。


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

Name: ねこ  ..上級者(21,819ポイント)   Date: 2009/07/07(火) 23:09   No:36416     
Title: Re:グレイズを実装!    
>yu様
すいません、合成で表示というのは連続で存在する弾を一つの描画処理で管理するという意味です。
と書いても分かりにくいですね(汗)
8個連なっていたら8個を例えば加算で描いていって表現するのではなく
8個分の長さに沿って調整するような感じです。
その連続の途中で切れたり、バウンドして方向が変わって居たらそこまでのを描き、続きから調べるような。
うん、なんか自分でもよくわかんないけどそんな感じです。

バウンドするレーザーとかあるので連続弾型かな〜とずっと思ってました。

>Dixq様
レーザーでグレイズがガリガリ回るのが好きです!
グレイズ自体がスコア絡みだけだったり地霊殿みたいにアイテム回収効果があってプレイに影響あったりシステムによって違うので、どれが正しいってわけでもないんだと思います。



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

Name: あ〜る  ..中級者(10,057ポイント)   Date: 2009/07/07(火) 23:19   No:36418     
Title: Re:グレイズを実装!    
あ〜〜、やっぱりレーザーでグレイズいっぱいするの好きですか!?
あれ結構気持ち良いですよねぇ、やっぱり頑張って何グレイズもするようにしてみようか…
レーザーを拡大して描画するのも多分プログラム的にはそんなに難しく無いですよね?というか昔これの質問あった気がしますし


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

Name: yu  ..プログラマー(34,374ポイント)   Date: 2009/07/07(火) 23:36   No:36421     
Title: Re:グレイズを実装!    
>>ねこ様

描画処理のことではなかったのですね orz
すみません;

確かにレーザーが壁で跳ね返る弾幕がありますね
どうやってるのかな〜と思っていましたが
ねこ様の仰る方法ならできそうですね

後、妖々夢にグニャグニャ曲がるレーザーもあったり...w


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

Name: ねこ  ..上級者(22,158ポイント)   Date: 2009/07/08(水) 00:00   No:36426     
Title: Re:グレイズを実装!    
>yu様
いえいえあの描き方ではそう捉える方が普通ですごめんなさい。

僕は逆に常に連続で作っていたのでDixqさんの極太レーザーの説明を見て
「あぁ・・・そういえば別にこれでいいのか」と気付いた程です(笑)

<グニャグニャ
別スレでも書いたのですが、本来これをするために連続型にしたような記憶がありますねぇ。


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

Name: 素人  ..中級者(9,058ポイント)   Date: 2009/07/08(水) 15:21   No:36454     
Title: Re:グレイズを実装!    
アドバイスありがとうございます。一つの弾でグレイズが二回以上増えないようにすること以外はできました。
二回以上グレイズが増えないようにしたいのですが
管理人さんの言ってる
グレイズ変数を用意し、弾を発射した時に1とでも代入しておき、グレイズの判定を満たしたら、これを0にしておき、再度判定されないようにする というのがいまいち分かりません。
もっと具体的にいうとどういうことでしょうか?
特に弾を発射した時に1とでも『代入』するということがよく分かりません。
何に対して代入するのでしょうか?またそのやり方はどうしたらいいですか?


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

Name: MNS  ..中級者(12,562ポイント)   Date: 2009/07/08(水) 15:31   No:36457     
Title: Re:グレイズを実装!    
敵の弾にグレイズ変数を用意して、
最初はそのグレイズ変数には1を代入しておき、
(ここで、グレイズの判定で、
 判定しようとしている弾のグレイズ変数が1かどうか比較し、
 満たしていたら判定を行う)
グレイズの判定を終えたら、その弾のグレイズ変数に0を代入する。

こういうことではないでしょうか?


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

Name: 素人  ..中級者(9,399ポイント)   Date: 2009/07/08(水) 18:06   No:36463     
Title: Re:グレイズを実装!    
まず、敵の弾にグレイズ変数を用意というのが分からないです。
次にグレイズ変数には1を代入する場所。

//敵ショットと自機との処理
void enemyshot_and_ch(){
int s,n;
if(ch.flag==0 && ch.mutekicnt==0 && out_lazer()==1){
ch.cnt=0;
ch.flag=1;
se_flag[3]=1;
}
//雑魚敵のショット
for(s=0;s<SHOT_MAX;s++){//敵ショット総数
if(shot[s].flag>0){//そのショットが登録されていたら
for(n=0;n<SHOT_BULLET_MAX;n++){//弾総数
if(shot[s].bullet[n].flag==1){//弾が登録されていたら
if(bom.flag!=0){
shot[s].bullet[n].flag=0;
continue;
}
if(out_judge_enemyshot(s,n)==1){//自機にその弾が接触していたら
shot[s].bullet[n].flag=0;//弾をオフ
if(ch.flag==0 && ch.mutekicnt==0){
ch.cnt=0;
ch.flag=1;
se_flag[3]=1;
}
}

ここのどこかというのは分かるんですけど



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

Name: 素人  ..中級者(9,438ポイント)   Date: 2009/07/08(水) 19:38   No:36468     
Title: Re:グレイズを実装!    
グレイズの処理については自己解決しました。
ありがとうございます。
あとはグレイズのエフェクトなんですが、
どうやればグレイズした瞬間に白い物体が飛ぶような処理にできるのでしょうか?
アドバイスください


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

Name: -  ..ぴよぴよ(13ポイント)   Date: 2009/07/09(木) 15:56   No:36504     
Title: Re:グレイズを実装!    
.

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

Name: ねこ  ..上級者(24,540ポイント)   Date: 2009/07/09(木) 16:14   No:36510     
Title: Re:グレイズを実装!    
グレイズした時に白い物体描画用の情報をエフェクト配列に追加するとか・・・。
エフェクト配列でいけるのか、別途配列用意するのかが分かんないですが。


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

Name: DVDM [URL]  ..かけだし(1,070ポイント)   Date: 2009/07/09(木) 19:37   No:36533     
Title: Re:グレイズを実装!    
>>素人さん
グレイズ領域に入った時、自機や敵が弾を撃つような感じで
適当にグレイズエフェクトを飛ばせばいいのではないでしょうか。
飛ばす角度はランダムな値やあらかじめ用意した方向テーブルを用意するといいと思います。

ある角度に飛ばした後は、Xフレーム経ったら消すか、一定の距離進んだ後に
グレイズエフェクトを消去する処理を入れてやるとそれらしい動きになるのではないかと思います。


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

Name: 素人  ..中級者(9,479ポイント)   Date: 2009/07/10(金) 07:28   No:36553     
Title: Re:グレイズを実装!    
なるほど!
その処理をやってみたいと思います。
ところでimgファイル内のどれがグレイズエフェクトの画像なのかが
分からないのですが、hit.pngで合ってますか?


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

Name: DVDM [URL]  ..かけだし(1,135ポイント)   Date: 2009/07/10(金) 17:48   No:36580     
Title: Re:グレイズを実装!    
>>素人さん
グレイズエフェクトにしたい画像を読み込めばいいと思います。
一応PhotoShopで hit.png を開いてみましたが良く解らなかったです。
その画像でないと動かない訳ではないので imag/char/ball.png を小さくして表示するのもいいかもしれません。


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

Name: 素人  ..中級者(9,501ポイント)   Date: 2009/07/10(金) 19:41   No:36582     
Title: Re:グレイズを実装!    
分かりました。そうさせてもらいます。
あと、処理を書いてる途中に気づいたことで、
同じ弾の場合、グレイズが一回しか判定しないようにしたのですが、
ボスの弾幕って何回も同じ弾を繰り返しリサイクルする処理のようなので、
ボスの繰り返された弾幕を放ってきた場合、2回目以降グレイズしたとき
グレイズしなくなります。リサイクルされた弾幕も同じようにグレイズ
するようにしたいのですが、どうしたらいいですか?
アドバイスお願いします。


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

Name: あ〜る  ..中級者(10,388ポイント)   Date: 2009/07/10(金) 20:24   No:36584     
Title: Re:グレイズを実装!    
弾のフラグが0になったら、そのグレイズするかどうかの変数をまた、グレイズできるように戻せばいいんじゃないでしょうか?


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

Name: 素人  ..中級者(9,350ポイント)   Date: 2009/07/11(土) 00:01   No:36607     
Title: Re:グレイズを実装!    
リサイクルされた弾幕も同じようにグレイズ
するようにするのはこれでいいと思うのですが、
ボスの弾幕をBOSS_BULLET_MAX分自機にヒット(自機が無敵状態のとき)させると
なぜかボスが弾を放たなくなりました。
放つようにするのはどうしたら改善するか教えてください。


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

Name: yu  ..プログラマー(34,434ポイント)   Date: 2009/07/11(土) 00:09   No:36608     
Title: Re:グレイズを実装!    
.graze が 1 の場合にグレイズできるのですよね?
かすったら 0 になると考えて

弾が出なくなるのは全ての弾の .graze が 1 だから弾が登録できなくなるのではないでしょうか
 (つまり、かすらないと新規に弾を登録できなくなりますね)
変えるべき場所はそこではないと思います。
 (そこでもできますが・・・)

boss_shotH.cpp 内の弾幕を作っている関数内で
弾登録時に
.graze = 1;
を追加すればよいと思います。


実際、自分もプログラミングし始めたころに
龍神録でグレイズを実装しようとしましたが、
自分も少し詰まりました。 ( 静的変数というものを知らなかったので... )

やり始めは大変ですが慣れると楽しくなると思いますので
頑張ってください ^^


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

Name: 素人  ..中級者(9,426ポイント)   Date: 2009/07/11(土) 00:27   No:36610     
Title: Re:グレイズを実装!    
弾幕を作っている一つ一つ関数全部に
.graze = 1;
を追加ということですか・・?
凄く面倒なことになってしまうので
boss_shot.cpp内で出来る方法を選びたいのですが
どうすればいいのでしょうか?


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

Name: yu  ..プログラマー(34,638ポイント)   Date: 2009/07/11(土) 00:33   No:36611     
Title: Re:グレイズを実装!    
これでもできますが...

int search_boss_shot(){//空き番号を返す
for(int i=0;i<BOSS_BULLET_MAX;i++){
if(boss_shot.bullet[i].flag==0){
boss_shot.bullet[i].graze = 1;
return i;
}
}
return -1;
}


自分の場合は弾を発射する関数を用意しておいて
値を入れるだけで弾を登録するようにしてあったので
一行だけの変更で大丈夫でした

詳しくは
龍神録プログラミングの支館様のこちらのほうで
http://sinkai.net/rp/0.php

#追記(0:41) 一部記事を編集しました


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

Name: 素人  ..中級者(9,959ポイント)   Date: 2009/07/11(土) 00:47   No:36613     
Title: Re:グレイズを実装!    
え〜とですね、それも前に試したのですけど
そうするとなぜか、ボスはgrazeの当たり判定範囲の部分だけ
ボスが弾幕を放つようになり、その範囲以降は弾は消えてしまうというバグが起こってしまいました。


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

Name: yu  ..プログラマー(34,740ポイント)   Date: 2009/07/11(土) 01:03   No:36615     
Title: Re:グレイズを実装!    
上の記事で確認したつもりでしたが・・・

>> .graze が 1 の場合にグレイズできるのですよね?
>> かすったら 0 になると考えて

つまり 1 と 0 が逆になっています


if(out_judge_bossshot_graze(n) == 1 && boss_shot.bullet[n].graze == 1){//グレイズ範囲にその弾が接触していたら
ch.graze += 1;
boss_shot.bullet[n].graze = 0;
}


に変更してみてください


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

Name: 素人  ..中級者(10,004ポイント)   Date: 2009/07/11(土) 01:24   No:36616     
Title: Re:グレイズを実装!    
かすったら1になる仕様だったので一応yuさんの言ってることは理解してたのですが
念のため逆に値を変えてみましたけど、同じように
ボスはgrazeの当たり判定範囲の部分だけボスが弾幕を放つバグが出ました。う〜ん・・


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

Name: DVDM [URL]  ..かけだし(1,707ポイント)   Date: 2009/07/11(土) 02:00   No:36618     
Title: Re:グレイズを実装!    
>>素人さん
>ボスはgrazeの当たり判定範囲の部分だけボスが弾幕を放つバグが出ました。
まさかとは思いますが、弾の描画処理を「グレイズ当たり判定内にある間実行」という処理に変更したりしていませんか?


私がプログラム内で不具合が出た時は、一端うまく動いている状態へと戻してみます。
うまく動いていたソースから、不具合が出た時までに追加した部分をコメントアウトしていくやり方です。
まず怪しい部分をコメントアウトして、その結果で更にコメントアウトをして・・・と繰り返して範囲を絞っていきます。
段々範囲を絞っていくと自ずと不具合が出ている場所に辿り着くと思います。


今回の件に当てはめると、一端グレイズ処理をコメントアウト等してグレイズ機能をOFFにして実行してみてみます。
もしこれでうまく描画出来ているならばグレイズ処理の追加が原因で不具合が起こったことになり、
うまく描画出来ていないのならばグレイズ機能以外の部分で不具合が起こっています。


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

Name: Dixq (管理人) [URL]  ..ウィザード(1,042,142ポイント)   Date: 2009/07/11(土) 05:57   No:36622     
Title: Re:グレイズを実装!    
>分からないのですが、hit.pngで合ってますか?

いや、hit.pngは敵に弾がヒットした時に出るエフェクト画像です。
龍神録では、例えばボスに弾が当たっている時、被弾点から何かモワモワ出ますよね。あれです。



仰るように、弾幕登録関数を作った方が後々作業が楽ですね。
もし面倒なら置換するって手もあります。
例えば

boss_shot.bullet[k].cnt = 1;



boss_shot.bullet[k].cnt = 1;
boss_shot.bullet[k].graze = 1;

に置換するとかですね。
 


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

Name: yu  ..プログラマー(35,194ポイント)   Date: 2009/07/11(土) 08:55   No:36627     
Title: Re:グレイズを実装!    
>> かすったら1になる仕様だったので一応yuさんの言ってることは理解してたのですが

そうでしたか....すみません orz

>> ボスはgrazeの当たり判定範囲の部分だけボスが弾幕を放つバグが出ました。

う〜ん・・・私では今提示してあるコードだけではバグの原因が分かりません;
DVDM様が仰るようにどこが不具合の原因かを大体目星を付けて
バグを修正したほうがいいですね。

どうしても分かりませんでしたら、変更した箇所のコードを全て提示して頂ければ
どこで不具合が起きているか見つけられるかもしれません


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

Name: 素人  ..中級者(9,695ポイント)   Date: 2009/07/11(土) 17:37   No:36641 解決!     
Title: Re:グレイズを実装!    
5時間悩んだあげくに
boss_shot.cpp内で


//ボスの弾幕を計算する
void boss_shot_calc(){
int i;
boss.endtime--;
if(boss.endtime<0)
boss.hp=0;
for(i=0;i<BOSS_BULLET_MAX;i++){
if(boss_shot.bullet[i].flag>0){
boss_shot.bullet[i].x+=cos(boss_shot.bullet[i].angle)*boss_shot.bullet[i].spd;
boss_shot.bullet[i].y+=sin(boss_shot.bullet[i].angle)*boss_shot.bullet[i].spd;
boss_shot.bullet[i].cnt++;
if(boss_shot.bullet[i].cnt>boss_shot.bullet[i].till){
if(boss_shot.bullet[i].x<-50 || boss_shot.bullet[i].x>FMX+50 ||
boss_shot.bullet[i].y<-50 || boss_shot.bullet[i].y>FMY+50)
boss_shot.bullet[i].flag=0;
}
}
if(boss_shot.bullet[i].flag==0){//←ここから
boss_shot.bullet[i].graze=0;//リサイクルされた弾幕をグレイズさせるため
}//←ここまで
}
boss_shot.cnt++;
}


を追加することによって無事になんとかバグなどが解消され
グレイズを実装することに成功しました。
一緒に考えてくれた皆さま方、アドバイスなどありがとうございました。


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



Name: ぷれこ  ..ぴよぴよ(892ポイント)   Date: 2009/07/09(木) 17:34   No:36520       
Title: 二次元配列の問題で質問です    
はじめまして、ぷれこと申します。
先日、入力した五つの金額を金種別にに分けて合計して出力する宿題が出たのですが、どうにも上手くいきません。
#include <stdio.h>

void main(void)
{
int m[7][11]={{0,10000,5000,2000,1000,500,100,50,10,5,1},
{0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0},};
int i,j;

for (i = 1;i < 6;i++){
printf("%d人目の金額を入力してください",i);
scanf("%d", &m[i][0]);
}

printf("支払い金額 ");

for (j = 1;j < 11;j++){
printf("%5d ", m[0][j]);
}
printf("\n");
for (i = 1;i < 6;i++){

m[i][1] = m[i][0];
printf("%10d ", m[i][0]);

for (j = 1;j < 11;j++){

m[i][j+1] = m[i][j] % m[0][j];
m[i][j] = m[i][j] / m[0][j];
printf("%5d ", m[i][j]);

if(m[i][j+1] <= 0){
j =11;
}
}
printf("\n");
}

printf("----------------------------------------------------------------------\n");

for (j = 0; j < 11; j++){
m[6][j] = 0;
for (i = 1; i < 6; i++){
m[6][j] += m[i][j];
}
if(j == 0){
printf("%10d ", m[6][j]);
}
else{
printf("%5d ", m[6][j]);
}
}

printf("\n");
}


現状、このようにC言語でプログラムを組んでいるのですが、どこが問題なのでしょうか?
アドバイスをお願いいたします。


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


Name: non  ..熟練のプログラマー(53,375ポイント)   Date: 2009/07/09(木) 17:48   No:36522     
Title: Re:二次元配列の問題で質問です    
計算することと、出力することを分けて考えた方がいいでしょう。
プログラムは長くなっても、わかりやすいプログラムになります。


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

Name: 初級者  ..初心者(6,444ポイント)   Date: 2009/07/09(木) 21:14   No:36539     
Title: Re:二次元配列の問題で質問です    
二次元配列を使うことが条件なのですか?

もし、そうでなければ、配列としては金種の一次元を定義するだけで
答が求まる方法があります。

今のソースは、簡単に書けるものをわざわざむずかしくしているように見えます。


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

Name: itoyan  ..ぴよぴよ(33ポイント)   Date: 2009/07/09(木) 21:34   No:36540     
Title: Re:二次元配列の問題で質問です    
えーと,途中のfor文で
for (j = 1;j < 11;j++){
  m[i][j+1] = m[i][j] % m[0][j];
  ....
}
と書いてるけど,j=10のときの,左辺のm[i][11]は
想像と違う場所を指しているはずです.
次の行の先頭m[i+1][0]と同じ場所になっているのでは?
(メモリの話が絡むので正しくないということだけでとりあえず.)

結論として直すところを言うと,for文でj<10とすればOKなはず.

あとは定数はdefine,enumするなりしておきましょう.
可読性が増します.11というよりも,
#define BillandCoinNum 11(紙幣と硬貨の枚数)などとしたら
後で解読に苦労しないですよ.
(本当は右に合計金額があるから,名前としてはあまり良くないのだが)

上の方も述べられておりますが,
二次元配列でやらなくてもねえとは思いますが,課題だから仕方ないか.


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

Name: やそ  ..比類無きプログラマー(94,519ポイント)   Date: 2009/07/10(金) 09:28   No:36554     
Title: Re:二次元配列の問題で質問です    
>現状、このようにC言語でプログラムを組んでいるのですが、どこが問題なのでしょうか?
アドバイスをお願いいたします。

どのような結果が表示されて?
本来どうなって欲しかった?
という情報が欠落しています。

何をどうしたいのか、ドウ表現すれば相手に伝わるのか(わかってもらえるのか)
を考えて投稿願います。

最終地点(ゴール)の認識がずれていたら何にもならないからね^^;


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

Name: やそ  ..比類無きプログラマー(95,153ポイント)   Date: 2009/07/10(金) 10:08   No:36556     
Title: Re:二次元配列の問題で質問です    

int main()
{
int m[7][11]={{0,10000,5000,2000,1000,500,100,50,10,5,1},
{0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0},};
int i,j;

for (i = 1;i < 6;i++){
printf("%d人目の金額を入力してください",i);
scanf("%d", &m[i][0]);
}

/* ↑これで6人分の金額がとりあえず入力されたわけですな */
int kingaku;

for(i=1;i<7;i++)
{
kingaku=m[i][0];
for(j=1;j<11;j++)
{
m[i][j]=kingaku/m[0][j];/* 金種別の枚数を計算&保管 */
kingaku=kingaku%m[0][j];/* 残り金額を計算 */
}
}
printf("----------------------------------------------------------------------\n");
for(i=0;i<7;i++)
{
for(j=0;j<11;j++)
printf("%6d ", m[i][j]);
}



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

Name: ぷれこ  ..かけだし(1,429ポイント)   Date: 2009/07/10(金) 10:46   No:36560     
Title: Re:二次元配列の問題で質問です    
皆さん、申し訳ありませんでした。
このプログラムでは

1人目の金額を入力してください187200
2人目の金額を入力してください79063
3人目の金額を入力してください50020
4人目の金額を入力してください111101
5人目の金額を入力してください227629

このように入力すると、

支払い金額 10000 5000 2000 1000 500 100 50 10 5 1
187200 18 1 1 0 0 2
79063 7 1 2 0 0 0 1 1 0 3
50020 5 0 0 0 0 0 0 2
111101 11 0 0 1 0 1 0 0 0 1
227629 22 1 1 0 1 1 0 2 1 4
----------------------------------------------------------------------
655013 63 3 4 1 1 4 1 5 1 8

このような形の表で表示されるようにしたいのですが。

現状では、

支払い金額 10000 5000 2000 1000 500 100 50 10 5 1
-9408 0
13527 1 0 1 1 1 0 0 2 1 2
-15516 0
-19971 0
31021 3 0 0 1 0 0 0 2 0 1
----------------------------------------------------------------------
-347 2 -24895 1 2 1 0 0 4 1 3

と表示されています。

入力部分がおかしいのでしょうか?


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

Name: やそ  ..比類無きプログラマー(95,577ポイント)   Date: 2009/07/10(金) 11:07   No:36562     
Title: Re:二次元配列の問題で質問です    
それならば一度入力を分けましょう。
<PRE>
int main()
{

int m[7][11]={{0,10000,5000,2000,1000,500,100,50,10,5,1},
{0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0},};
int i,j;
int kingaku;

for (i = 1;i < 7;i++){
printf("%d人目の金額を入力してください",i);
scanf("%d", &kingaku);
m[i][0]=kingaku;
}

/* 一度この段階でm[i][0]を人数分表示して入力した金額が正しく入っているか確かめてみると良い */

for(i=1;i<7;i++)
printf("%7d ",m[i][0]);

/* 問題ないようなら計算に進みましょう */




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

Name: やそ  ..比類無きプログラマー(95,595ポイント)   Date: 2009/07/10(金) 11:09   No:36563     
Title: Re:二次元配列の問題で質問です    
あ、おしりの</pre>忘れた^^;
恥ずかすぃ〜(笑)


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

Name: ねこ  ..プログラマー(25,296ポイント)   Date: 2009/07/10(金) 11:23   No:36566     
Title: Re:二次元配列の問題で質問です    
>やそさん
僕もよくやります(笑)
削除キー入れておくと、後で編集して修正できますよ。


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

Name: non  ..熟練のプログラマー(54,267ポイント)   Date: 2009/07/10(金) 12:20   No:36567     
Title: Re:二次元配列の問題で質問です    
添付のプログラムを、私の環境(BC++5.0)で実行すると下のようになります。

1人目の金額を入力してください187200
2人目の金額を入力してください79063
3人目の金額を入力してください50020
4人目の金額を入力してください111101
5人目の金額を入力してください227629
支払い金額 10000 5000 2000 1000 500 100 50 10 5 1
187200 18 1 1 0 0 2
79063 7 1 2 0 0 0 1 1 0 3
0 0
111101 11 0 0 1 0 1 0 0 0 1
0 0
----------------------------------------------------------------------
377364 36 2 3 1 0 3 1 1 0 4

ぶれこさんの実行結果になりません。187200が-9408になるということは、intが4バイトという
ことですね。コンパイラは何を使ってますか?


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

Name: toyo  ..プログラマー(37,191ポイント)   Date: 2009/07/10(金) 12:38   No:36568     
Title: Re:二次元配列の問題で質問です    
intが2バイトなのでしょうね
intをlongにしてprintfの%dを%ldにしたらいいでしょう

intが2バイトのコンパイラってLSI C-86でしょうかね


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

Name: non  ..熟練のプログラマー(54,225ポイント)   Date: 2009/07/10(金) 12:57   No:36569     
Title: Re:二次元配列の問題で質問です    
>intが2バイトなのでしょうね
あらら、うっかりとしてしまいました。2バイトですね。


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

Name: やそ  ..比類無きプログラマー(95,640ポイント)   Date: 2009/07/10(金) 13:47   No:36570     
Title: Re:二次元配列の問題で質問です    
ということは金額が32767までなら上手くいくかどうかやってもらったほうがいいかも。

sizeeofで調べてもらってもいいけどね^^


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

Name: non  ..熟練のプログラマー(54,320ポイント)   Date: 2009/07/10(金) 14:00   No:36572     
Title: Re:二次元配列の問題で質問です    
longにしないと駄目かもね。
どっちにしても、 itoyan さんが言われているところを直さないと駄目ですけどね。
そのためには、私が最初に言った
>計算することと、出力することを分けて考えた方がいいでしょう。
これを、やらなきゃね。堂々巡り。

スレ主さん、進んでんの?


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

Name: ぷれこ  ..入門者(2,532ポイント)   Date: 2009/07/10(金) 16:41   No:36578     
Title: Re:二次元配列の問題で質問です    
確認したら、確かにLCI C-86の試食版を使っていました。
言われた所を直したらこうなりました。
#include <stdio.h>

#define BCN 11

void main(void)

{

int m[7][BCN]={{0,10000,5000,2000,1000,500,100,50,10,5,1},

{0,0,0,0,0,0,0,0,0,0,0},

{0,0,0,0,0,0,0,0,0,0,0},

{0,0,0,0,0,0,0,0,0,0,0},

{0,0,0,0,0,0,0,0,0,0,0},

{0,0,0,0,0,0,0,0,0,0,0},

{0,0,0,0,0,0,0,0,0,0,0},};

int i,j;



for (i = 1;i < 6;i++){

printf("%d人目の金額を入力してください",i);

scanf("%d", &m[i][0]);

}

for (i = 1;i < 6;i++){

m[i][1] = m[i][0];


for (j = 1;j < BCN - 1;j++){

m[i][j+1] = m[i][j] % m[0][j];

m[i][j] = m[i][j] / m[0][j];


}


}


printf("支払い金額 ");

for (j = 1;j < BCN;j++){

printf("%5d ", m[0][j]);

}

printf("\n");

for (i = 1;i < 6;i++){

printf("%10d ", m[i][0]);

for (j = 1;j < BCN;j++){

printf("%5d ", m[i][j]);


}

printf("\n");

}



printf("----------------------------------------------------------------------\n");



for (j = 0; j < BCN; j++){

m[6][j] = 0;

for (i = 1; i < 6; i++){

m[6][j] += m[i][j];

}

if(j == 0){

printf("%10d ", m[6][j]);

}

else{

printf("%5d ", m[6][j]);

}

}



printf("\n");

}


この状態で、入力額が32767以下なら問題なく動作しました。

授業で、int と char 以外の関数を使っていないこと、学校のパソコンではLSI C-86を使用していないことから、このままでも問題ないと思います。

皆様、どうもありがとうございました。

あと、追加問題としてそれ以降0しかない時は省略する。(187200の場合は50,10,5,1の桁が表示されない)
というのがあり、最初の文の

if(m[i][j+1] <= 0){
j =11;
}

はそこを表そうとしたのですが、この場合はどうしたらよいですか?


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

Name: やそ  ..比類無きプログラマー(96,058ポイント)   Date: 2009/07/10(金) 17:48   No:36579     
Title: Re:二次元配列の問題で質問です    
>追加問題としてそれ以降0しかない時は省略する。(187200の場合は50,10,5,1の桁が表示されない)
これって、現状のレベルからしたらちょっと難しいかもしれませんね。


#define NINZU 3
#define BCN 11




中略

int m[3][11]={{0,10000,5000,2000,1000,500,100,50,10,5,1},
{19999,1,1,2,0,1,4,1,4,1,4},
{7700,0,1,1,0,1,2,0,0,0,0}};




中略



int keisan=0;

for(i=1;i<NINZU;i++) /* 人数 */
{
printf("%5d",m[i][0]);
keisan=0;
for(j=1;j<BCN;j++) /* 金種 */
{
if(keisan<m[i][0])
{
printf(" %d",m[i][j]);
keisan=keisan+(m[i][j]*m[0][j]);
}
else {
j=BCN;
printf("\n");
}
}
}

テスト用にデータは2人分で。
コンパイル&テストなどはしていませんが、
こんなんでどうでせう?


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

Name: non  ..熟練のプログラマー(54,424ポイント)   Date: 2009/07/10(金) 18:22   No:36581     
Title: Re:二次元配列の問題で質問です    
>あと、追加問題としてそれ以降0しかない時は省略する。(187200の場合は50,10,5,1の桁が表示されない)

確かに、このレベルの問題でいきなり、この課題はどうかと思う。
省略するのは、0になった以降の計算の方では?
表示をしないのは、かえって不自然だと思う。
課題なんだから、不自然でもしょうがないけど。


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

Name: ぷれこ  ..入門者(2,594ポイント)   Date: 2009/07/11(土) 09:00   No:36628 解決!     
Title: Re:二次元配列の問題で質問です    
やそさんの物を参考にして、どうにか完成しました。

とりあえず0以降が表示されなくなったので、これで行くことにします。

皆様、どうもありがとうございました。


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

Name: itoyan  ..ぴよぴよ(83ポイント)   Date: 2009/07/11(土) 16:29   No:36638     
Title: Re:二次元配列の問題で質問です    
もう解決済みだから良いかとは思うけどおまけ.

if(m[i][j+1] <= 0){
j =11;
}
ではj=11の代わりにcontinue;
と書けば良いと思うよ.


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



Name: 亀猫  ..かけだし(1,985ポイント)   Date: 2009/07/09(木) 21:51   No:36544       
Title: すでに定義されてます・・・    
本当に初歩的な質問で申し訳ございません・・・。

test1.cppに

#include "DxLib.h"

int Key[256];

int GetHitKeyStateAll_2(int GetHitKeyStateAll_InputKey[]){
char GetHitKeyStateAll_Key[256];
GetHitKeyStateAll( GetHitKeyStateAll_Key );
for(int i=0;i<256;i++){
if(GetHitKeyStateAll_Key[i]==1) GetHitKeyStateAll_InputKey[i]++;
else GetHitKeyStateAll_InputKey[i]=0;
}
return 0;
}

int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow ){
ChangeWindowMode(TRUE);//ウィンドウモード
if(DxLib_Init() == -1 || SetDrawScreen( DX_SCREEN_BACK )!=0) return -1;//初期化と裏画面化

while(ProcessMessage()==0 && ClearDrawScreen()==0 && GetHitKeyStateAll_2(Key)==0 && Key[KEY_INPUT_ESCAPE]==0){
//↑メッセージ処理   ↑画面をクリア     ↑入力状態を保存       ↑ESCが押されていない


//ココにプログラム



ScreenFlip();
}

DxLib_End();
return 0;
}



ココにプログラムというところにプログラムを書いて


test2.cpp を作って




#include "DxLib.h"

int Key[256];

int GetHitKeyStateAll_2(int GetHitKeyStateAll_InputKey[]){
char GetHitKeyStateAll_Key[256];
GetHitKeyStateAll( GetHitKeyStateAll_Key );
for(int i=0;i<256;i++){
if(GetHitKeyStateAll_Key[i]==1) GetHitKeyStateAll_InputKey[i]++;
else GetHitKeyStateAll_InputKey[i]=0;
}
return 0;
}

int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow ){
ChangeWindowMode(TRUE);//ウィンドウモード
if(DxLib_Init() == -1 || SetDrawScreen( DX_SCREEN_BACK )!=0) return -1;//初期化と裏画面化

while(ProcessMessage()==0 && ClearDrawScreen()==0 && GetHitKeyStateAll_2(Key)==0 && Key[KEY_INPUT_ESCAPE]==0){
//↑メッセージ処理   ↑画面をクリア     ↑入力状態を保存       ↑ESCが押されていない


//ココにプログラム


ScreenFlip();
}

DxLib_End();
return 0;
}




同じようにココにプログラムと書いてあるところにプログラムを書いてデバック開始を押したら
WinMain@16がすでに定義されています。 とでて、できません・・。

test.cppには主人公を操作するプログラムでtest2.cppにはマップを表示するプログラムです。

WinMainという部分を消してデバック開始を押したらintにたいして初期化...みたいなエラーがでました・・・
サンプルプログラムを見ても複雑すぎて解読できません・・・。

本当に初歩的な質問で申し訳ございません・・・。


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


Name: conio [URL]  ..プログラマー(28,715ポイント)   Date: 2009/07/09(木) 22:29   No:36546     
Title: Re:すでに定義されてます・・・    

>>同じようにココにプログラムと書いてあるところにプログラムを書いてデバック開始を押したら
>>WinMain@16がすでに定義されています。 とでて、できません・・。
test1.cpp と test2.cpp をソースファイルに追加してコンパイルしたという事ですかね?
その場合はWinMain関数が2つ存在することになるので、エラーになると思いますよ。

あと、「マップを表示して 主人公を動かす」というようなプログラムにしたいのであれば、
下記のようにして実行する事が出来ます。

現在は文字しか使ってませんが、画像を使うようにすれば同じように出来るはずです。
------------------------------------------------------------------------------
#include "DxLib.h"

int Key[256];
int Cr;
int pt_x = 300, pt_y = 220;

int GetHitKeyStateAll_2(int GetHitKeyStateAll_InputKey[]){
char GetHitKeyStateAll_Key[256];
GetHitKeyStateAll( GetHitKeyStateAll_Key );

for(int i=0;i<256;i++){
if(GetHitKeyStateAll_Key[i]==1)
GetHitKeyStateAll_InputKey[i]++;
else GetHitKeyStateAll_InputKey[i]=0;
}
return 0;
}

void MovePlayer(void)
{
if(CheckHitKey(KEY_INPUT_RIGHT))
pt_x += 2;
else if(CheckHitKey(KEY_INPUT_LEFT))
pt_x -= 2;

if(CheckHitKey(KEY_INPUT_UP))
pt_y -= 2;
else if(CheckHitKey(KEY_INPUT_DOWN))
pt_y += 2;

}
void DrawMap(void)
{
DrawString( 0 , 0 , "マップが表示されました" , Cr );
}

void DrawPlayer(void)
{
DrawString( pt_x , pt_y - 40 , "ここにいる" , Cr );
DrawString( pt_x , pt_y - 20 , "  ↓" , Cr );
DrawString( pt_x , pt_y , "  ●" , Cr );
}

int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow ){
ChangeWindowMode(TRUE);//ウィンドウモード
if(DxLib_Init() == -1 || SetDrawScreen( DX_SCREEN_BACK )!=0) return -1;//初期化と裏画面化
Cr = GetColor( 255 , 255 , 255 ) ;

while(ProcessMessage()==0 && ClearDrawScreen()==0 && GetHitKeyStateAll_2(Key)==0 && Key[KEY_INPUT_ESCAPE]==0){
//↑メッセージ処理   ↑画面をクリア     ↑入力状態を保存       ↑ESCが押されていない

MovePlayer();
DrawMap();
DrawPlayer();

ScreenFlip();
}
DxLib_End();
return 0;
}
------------------------------------------------------------------------------


2倍のポイントを手に入れた! 1,512ポイント を手に入れた。

Name: 亀猫  ..入門者(2,701ポイント)   Date: 2009/07/11(土) 02:12   No:36620     
Title: Re:すでに定義されてます・・・    
返信ありがとうございます。
返答遅くなってしまって申し訳ございません・・・。

>>test1.cpp と test2.cpp をソースファイルに追加してコンパイルしたという事ですかね?

そういうことです。

test1.cppでプレイヤー操作のプログラムを組んで test2.cppでマップを表示するプログラムを組むとういうような
違うソースファイルを追加してどちらも出来るようにするというテストをしてるので、どこを消せばちゃんと
コンパイルできるでしょうか?

例えば
  攻撃するプログラム    操作するプログラム
に分かれてて、どちらも↓のココにプログラムに書いたら定義されていますとでて出来ないので、どこを消せば二つともできるのでしょうか?


#include "DxLib.h"

int Key[256];

int GetHitKeyStateAll_2(int GetHitKeyStateAll_InputKey[]){
char GetHitKeyStateAll_Key[256];
GetHitKeyStateAll( GetHitKeyStateAll_Key );
for(int i=0;i<256;i++){
if(GetHitKeyStateAll_Key[i]==1) GetHitKeyStateAll_InputKey[i]++;
else GetHitKeyStateAll_InputKey[i]=0;
}
return 0;
}

int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow ){
ChangeWindowMode(TRUE);//ウィンドウモード
if(DxLib_Init() == -1 || SetDrawScreen( DX_SCREEN_BACK )!=0) return -1;//初期化と裏画面化

while(ProcessMessage()==0 && ClearDrawScreen()==0 && GetHitKeyStateAll_2(Key)==0 && Key[KEY_INPUT_ESCAPE]==0){
//↑メッセージ処理   ↑画面をクリア     ↑入力状態を保存       ↑ESCが押されていない


//ココ!!



ScreenFlip();
}

DxLib_End();
return 0;
}


説明下手ですみません・・・。

要は二つのソースファイルを実行するにはどうすればいいでしょうか?

質問ばかりですみません・・・。


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

Name: Dixq (管理人) [URL]  ..ウィザード(1,042,337ポイント)   Date: 2009/07/11(土) 06:03   No:36623     
Title: Re:すでに定義されてます・・・    
とりあえず、分割コンパイルするには、どうしたらいいか調べてみて下さい。

例えば
http://dixq.net/s/5.html

一方で、宣言したグローバル変数を他のファイルで使うにはextern宣言をします。
関数はプロトタイプ宣言を記述したヘッダファイルを両方からインクルードすればよいでしょう。
また、インクルードすべきヘッダファイルは他のファイルでも同じです(DxLib.hとか)
(ただし、DxLib.hの機能を使わないファイルでは必要ない)

「分割コンパイル」や「extern」というキーワードで調べたり試したりしてみて下さい。


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

Name: conio [URL]  ..プログラマー(30,362ポイント)   Date: 2009/07/11(土) 08:44   No:36625     
Title: Re:すでに定義されてます・・・    

例えば、PlayerならPlayer、MapならMapに関するものだけをソースファイルにして
分割したいという事ですね。

そういうことであれば、下記のようにして実行する事が出来ます。

【WinMain.cpp】-----------------------------------------------------------
#include "DxLib.h"
#include "Player.h"
#include "Map.h"

int Key[256];

int GetHitKeyStateAll_2(int GetHitKeyStateAll_InputKey[]){
char GetHitKeyStateAll_Key[256];
GetHitKeyStateAll( GetHitKeyStateAll_Key );

for(int i=0;i<256;i++){
if(GetHitKeyStateAll_Key[i]==1)
GetHitKeyStateAll_InputKey[i]++;
else GetHitKeyStateAll_InputKey[i]=0;
}
return 0;
}

int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow ){
ChangeWindowMode(TRUE);//ウィンドウモード
if(DxLib_Init() == -1 || SetDrawScreen( DX_SCREEN_BACK )!=0) return -1;//初期化と裏画面化
Cr = GetColor( 255 , 255 , 255 ) ;
Player player;
Map map;

while(ProcessMessage()==0 && ClearDrawScreen()==0 && GetHitKeyStateAll_2(Key)==0 && Key[KEY_INPUT_ESCAPE]==0){
//↑メッセージ処理   ↑画面をクリア     ↑入力状態を保存       ↑ESCが押されていない

player.MovePlayer();

map.DrawMap();
player.DrawPlayer();

ScreenFlip();
}
DxLib_End();
return 0;
}
----------------------------------------------------------------------------------
【Player.h】----------------------------------------------------------------------
#include"DxLib.h"

class Player{
public:
Player();
~Player();
void MovePlayer(void);
void DrawPlayer(void);

private:
int pt_x;
int pt_y;
int Cr;
};
-----------------------------------------------------------------------------------
【Player.cpp】---------------------------------------------------------------------
#include"Player.h"

Player::Player()
{
pt_x = 300;
pt_y = 200;
Cr = GetColor( 255 , 255 , 255 ) ;
}

Player::~Player()
{


}

void Player::MovePlayer(void)
{
if(CheckHitKey(KEY_INPUT_RIGHT))
pt_x += 2;
else if(CheckHitKey(KEY_INPUT_LEFT))
pt_x -= 2;

if(CheckHitKey(KEY_INPUT_UP))
pt_y -= 2;
else if(CheckHitKey(KEY_INPUT_DOWN))
pt_y += 2;
}

void Player::DrawPlayer(void)
{
DrawString( pt_x , pt_y - 40 , "ここにいる" , Cr );
DrawString( pt_x , pt_y - 20 , "  ↓" , Cr );
DrawString( pt_x , pt_y , "  ●" , Cr );
}
----------------------------------------------------------------------------------
【Map.h】-------------------------------------------------------------------------
#include"DxLib.h"
class Map{
public:
Map();
~Map();
void MakeMap(void);
void DrawMap(void);
private:
int FieldMap[15][15];
int Cr;

void Init(void);
};
----------------------------------------------------------------------------------
【Map.cpp】-----------------------------------------------------------------------
#include"Map.h"

Map::Map()
{
Cr = GetColor( 255 , 255 , 255 ) ;
Init();
MakeMap();
}

Map::~Map()
{


}

void Map::MakeMap()
{
for(int i = 0; i < 15; i++)
for(int j = 0; j < 15; j++)
if(i == 0 || i == 14 || j == 0 || j == 14)
FieldMap[i][j] = 1;
}
void Map::DrawMap()
{
for(int i = 0; i < 15; i++)
for(int j = 0; j < 15; j++)
if(FieldMap[i][j] == 1)
DrawString( i * 18 , j * 18 , "●" , Cr );

DrawString( 4 * 18 , 15 * 18 , "↑マップのつもり" , Cr );
}

void Map::Init(void)
{
for(int i = 0; i < 15; i++)
for(int j = 0; j < 15; j++)
FieldMap[i][j] = 0;
}
-------------------------------------------------------------------------------------
■ソースファイル
┣Map.cpp
┣Player.cpp
┗WinMain.cpp
■ヘッダーファイル
┣Map.h
┗Player.h


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

Name: 亀猫  ..入門者(2,774ポイント)   Date: 2009/07/11(土) 13:09   No:36635 解決!     
Title: Re:すでに定義されてます・・・    

申し訳ございません・・・。RPGゲームを作成しようとしてたので、シューティングゲームの館は確認してませんでした・・・。


なるほど!WinMainはWinMainで分割するんですね!返信ありがとうございます!

シューティングゲームの館を参考したりしてがんばります!


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




 
[ 1 , ... ]
 
 
管理者画面   RSS   + Powered By 21style +