C言語何でも質問掲示板


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

 
   無題   
     ・[36287] Dixq (管理人) 
   宇宙空間を表現   
     ・[36244] Dixq (管理人) 
     ・[36275] はね 
     ・[36286] Dixq (管理人) 
   繰り返し   
     ・[36285] Dixq (管理人) 
   情報オリンピック   
     ・[36183] non 
     ・[36184] あか 
     ・[36186] non 
     ・[36187] あか 
     ・[36188] non 
     ・[36189] あか 
     ・[36191] non 
     ・[36195] あか 
     ・[36197] non 
     ・[36199] あか 
     ・[36200] sizuma 
     ・[36202] あか 
     ・[36212] kazuoni 
     ・[36213] sizuma 
     ・[36218] non 
     ・[36219] sizuma 
     ・[36221] sizuma 
     ・[36222] 素人 
     ・[36223] あか 
     ・[36224] たいちう 
     ・[36225] あか 
     ・[36227] \(^o^)/ 
     ・[36228] あか 
     ・[36230] non 
     ・[36235] kazuoni 
     ・[36236] sizuma 
     ・[36237] あか 
     ・[36238] kazuoni 
     ・[36246] non 
     ・[36247] 七誌 
     ・[36274] a 
     ・[36276] b 
   素材のファイル名前に ....   
     ・[36263] あ〜る 
     ・[36265] MNS 
     ・[36266] 御津凪 
     ・[36268] チルチル 
     ・[36269] 山崎 
   キャラクターの読み込 ....   
     ・[36175] lbfuvab 
     ・[36177] ねこ 
     ・[36267] ミトリ 
   staticメンバ変数の実 ....   
     ・[36259] Justy 
     ・[36261] dic 
     ・[36262] dic 
   staticメンバ変数の使 ....   
     ・[36252] MNS 
     ・[36256] dic 
   ファイル読み込み関係 ....   
     ・[36169] ねこ 
     ・[36240] y 
     ・[36241] GPGA 
     ・[36242] ねこ 
     ・[36255] y 
   メロディーを奏でたい ....   
     ・[36193] Justy 
     ・[36233] TKOZ 
     ・[36251] TKOZ 
     ・[36254] Justy 
   無題   
     ・[36245] Dixq (管理人) 
     ・[36248] ちょたけ 
   シューティングの試作 ....   
     ・[36203] Justy 
     ・[36205] BEMANI 
     ・[36216] yu 
     ・[36232] ようすけ 
   60章 視点を変える方 ....   
     ・[36028] Justy 
     ・[36054] kai 
     ・[36055] kai 
     ・[36089] kai 
     ・[36090] Justy 
     ・[36091] kai 
     ・[36093] Justy 
     ・[36094] kai 
     ・[36095] kai 
     ・[36096] Justy 
     ・[36097] kai 
     ・[36105] ねこ 
     ・[36115] kai 
     ・[36117] ねこ 
     ・[36134] kai 
     ・[36161] kai 
     ・[36198] 通りすがり 
     ・[36208] Justy 
     ・[36229] kai 
   マップチップ   
     ・[36207] GPGA 
     ・[36209] 亀猫 
     ・[36210] GPGA 
     ・[36211] チルチル 
     ・[36214] 亀猫 
     ・[36215] ねこ 
     ・[36220] 亀猫 
   変数の書く位置の好み   
     ・[36146] チルチル 
     ・[36152] 御津凪 
     ・[36153] バグ 
     ・[36154] あ〜る 
     ・[36155] non 
     ・[36157] ねこ 
     ・[36165] toyo 
     ・[36201] tkmakwins15 
   「2DゲームにおけるZ ....   
     ・[36027] 御津凪 
     ・[36037] 山崎 
     ・[36069] KKXY 
     ・[36087] 御津凪 
     ・[36101] KKXY 
     ・[36103] 山崎 
     ・[36121] KKXY 
     ・[36124] 御津凪 
     ・[36132] KKXY 
     ・[36133] 御津凪 
     ・[36140] KKXY 
     ・[36149] 御津凪 
     ・[36194] KKXY 
   ハッシュ関数について   
     ・[36120] 御津凪 
     ・[36127] vis3sock 
     ・[36131] 御津凪 
     ・[36170] vis3sock 
     ・[36171] 御津凪 
     ・[36172] Mist 
     ・[36190] vis3sock 
   ベーシックをC言語に・ ....   
     ・[36116] バグ 
     ・[36118] やそ 
     ・[36173] sora 
     ・[36178] ねこ 
     ・[36179] non 
     ・[36180] やそ 
   プレイヤーの移動のと ....   
     ・[36158] あ〜る 
     ・[36159] 御津凪 
     ・[36176] junta 
   プログラミング本編で ....   
     ・[36130] デラ初心者 
     ・[36167] Dixq (管理人) 
   無題   
     ・[36163] kazuoni 
     ・[36164] 山崎 
   キーフックについて   
     ・[35914] Justy 
     ・[35915] ... 
     ・[35917] Justy 
     ・[35919] ... 
     ・[35920] Justy 
     ・[35929] ... 
     ・[35952] Justy 
     ・[35965] ... 
     ・[35978] Justy 
     ・[36004] ... 
     ・[36011] Justy 
     ・[36122] ... 
     ・[36142] Justy 
     ・[36148] ... 
   BITMAP画像を表示する ....   
     ・[36065] GPGA 
     ・[36135] 白 
   19番目のエラー   
     ・[36110] ねこ 
     ・[36123] デラ初心者 
     ・[36125] pooka 
     ・[36126] ねこ 
     ・[36128] pooka 
     ・[36129] デラ初心者 
   無題   
     ・[36112] trtr 
     ・[36113] やっくん 
   17番目のエラー   
     ・[36076] conio 
     ・[36108] デラ初心者 
   導入に関して   
     ・[36107] ねこ 
   キー入力履歴の取得   
     ・[36102] 山崎 
     ・[36106] non 
   BGMのフェードイン、ア ....   
     ・[35986] 山崎 
     ・[36099] テヌー 
     ・[36100] 山崎 
   プログラムの相談   
     ・[36073] バグ 
     ・[36077] たかぎ 
     ・[36078] non 
     ・[36080] たいちう 
     ・[36092] 通行人 
   シングルトンパターン ....   
     ・[36002] GPGA 
     ・[36016] Justy 
     ・[36044] dic 
     ・[36048] ねこ 
     ・[36051] GPGA 
     ・[36052] dic 
     ・[36056] dic 
     ・[36057] GPGA 
     ・[36058] dic 
     ・[36088] Justy 
   2Dマップを作る際にc ....   
     ・[36079] non 
     ・[36081] やっくん 
     ・[36084] やっくん 
     ・[36086] やっくん 
   素因数分解の時間   
     ・[36019] たいちう 
     ・[36029] sizuma 
     ・[36085] lbfuvab 
   C   
     ・[36063] バグ 
     ・[36067] りのつか 
     ・[36068] バグ 
   龍神録の14番目がで ....   
     ・[35792] ねこ 
     ・[35810] デラ初心者 
     ・[35815] 天魔 
     ・[35838] デラ初心者 
     ・[35871] 天魔 
     ・[35877] pooka 
     ・[35885] 天魔 
     ・[35916] デラ初心者 
     ・[35918] pooka 
     ・[35970] デラ初心者 
     ・[35971] pooka 
     ・[35973] デラ初心者 
     ・[36062] デラ初心者 
   龍神録プログラミング ....   
     ・[35981] Justy 
     ・[35982] ラグ 
     ・[36059] 匿名 
   ゲーム作ってみました   
     ・[35606] ねこ 
     ・[35607] yu 
     ・[35609] 通りすがりの東方厨 
     ・[35610] yu 
     ・[35612] ひよこ 
     ・[35613] BEMANI 
     ・[35614] array 
     ・[35623] Dixq (管理人) 
     ・[35775] こめかみ 
     ・[35777] 木霊 
     ・[35993] a 
     ・[36005] すずめ 
     ・[36006] 御津凪 
     ・[36039] Amusement programmer(3315) 
   printfの出力形式につ ....   
     ・[36035] Korsakov 
     ・[36036] toyo 
   intの位置。 ランダム ....   
     ・[36032] ねこ 
   マウス座標が特定の範 ....   
     ・[35950] yu 
     ・[35951] クロウ 
     ・[35963] ねこ 
     ・[36003] yskey 
   グラディウスみたいな ....   
     ・[35988] バグ 
     ・[35989] mari 
     ・[35990] バグ 
     ・[35992] pooka 
     ・[35994] バグ 
     ・[35995] バグ 
     ・[35996] mari 
     ・[35997] バグ 
     ・[35998] mari 
     ・[35999] バグ 
     ・[36000] バグ 
   漢の文字コードについ ....   
     ・[35664] ねこ 
     ・[35670] マルチネス 
     ・[35680] non 
     ・[35690] YuO 
     ・[35724] ねこ 
     ・[35991] マルチネス 
   C言語 アドレス帳   
     ・[35930] box 
     ・[35931] non 
     ・[35932] sizuma 
     ・[35935] JN 
     ・[35937] MNS 
     ・[35941] box 
     ・[35942] JN 
     ・[35944] sizuma 
     ・[35945] JN 
     ・[35947] pooka 
     ・[35948] sizuma 
     ・[35959] JN 
     ・[35960] ねこ 
     ・[35961] non 
     ・[35962] JN 
     ・[35964] non 
     ・[35967] sizuma 
     ・[35980] JN 
     ・[35984] sizuma 
   並び替え   
     ・[35714] 山崎 
     ・[35715] 研修生 
     ・[35716] non 
     ・[35717] 研修生 
     ・[35720] YuO 
     ・[35721] バグ 
     ・[35722] non 
     ・[35725] やそ 
     ・[35728] dic 
     ・[35743] 研修生 
     ・[35781] 研修生 
     ・[35790] バグ 
     ・[35793] 研修生 
     ・[35794] non 
     ・[35795] 研修生 
     ・[35796] non 
     ・[35797] 研修生 
     ・[35798] ねこ 
     ・[35799] non 
     ・[35800] 研修生 
     ・[35801] Mist 
     ・[35802] non 
     ・[35803] 研修生 
     ・[35804] 研修生 
     ・[35805] ねこ 
     ・[35806] Mist 
     ・[35807] non 
     ・[35808] 研修生 
     ・[35809] 研修生 
     ・[35811] lbfuvab 
     ・[35812] 研修生 
     ・[35813] Mist 
     ・[35817] バグ 
     ・[35837] ねこ 
     ・[35958] 研修生 
     ・[35974] リリス 
   エラーの理由がわかり ....   
     ・[35823] たかぎ 
     ・[35828] ??? 
     ・[35829] toyo 
     ・[35956] ??? 
     ・[35957] バグ 

Name: ちょたけ  ..ぴよぴよ(140ポイント)   Date: 2009/07/05(日) 00:19   No:36270       
Title: 無題    
たびたびですがゲームプログラミングの館の14の
コピー&コンパイルサンプルプログラムと実行結果とが合わないと思います
サンプルプログラムの方にback.bmpが描画されるような関数がありません


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


Name: Dixq (管理人) [URL]  ..ウィザード(1,040,893ポイント)   Date: 2009/07/05(日) 06:43   No:36287     
Title: Re:無題    
あ、そうですね。
ミスのようです。
修正しますね。ご報告ありがとうございます。


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



Name: はね  ..中級者(11,024ポイント)   Date: 2009/07/04(土) 17:47   No:36243       
Title: 宇宙空間を表現    
こんにちは。
龍神録を楽しく改造して遊ばさせてもらってます。
改造しながらふと思ったことなんですが
本家龍神録のPhantasmモードを選んだあと、
宇宙空間みたいな世界の画面に飛びますよね?
あれってどうやって遠くからだんだん画面に向かって
近づいているような感じにしてるんですか?
ついでに綺麗なランダムに星が散らばってるのも
気になってます。改造龍神録のボス背景の一つにしてみたいなぁと
考えているんですがどうも実装できなくて困ってます。
誰か実装出来た方がいたらぜひソースを教えてください。
よろしくお願いします。


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


Name: Dixq (管理人)  ..ウィザード(1,039,753ポイント)   Date: 2009/07/04(土) 18:07   No:36244     
Title: Re:宇宙空間を表現    
(出先なので携帯から投稿してます)

背景は3Dで計算しています。
詳しくは龍神録の館の58〜60章の辺りをご覧下さい。


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

Name: はね  ..中級者(11,059ポイント)   Date: 2009/07/05(日) 00:55   No:36275     
Title: Re:宇宙空間を表現    
3Dで絵データをランダムに一定の場所に固まることなく散ばせる方法はどうしたらいいのでしょうか?

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

Name: Dixq (管理人) [URL]  ..ウィザード(1,040,870ポイント)   Date: 2009/07/05(日) 06:37   No:36286     
Title: Re:宇宙空間を表現    
「乱数をある程度制御する」方法ですね。これについてはまずこの辺をご覧下さい。

http://dixq.net/rp/28.html

様々な方向に飛ばそうと思っても、
単に乱数を使っただけでは、ある角度に集中して偏ってしまうかもしれません。
しかし、乱数の生成範囲を限定してやり、その範囲を自分の思う範囲を制御してやればある程度自分の思い通りの乱数になります。

例えば今、
0〜29の乱数を3回生成したいとしましょう。

int Ram;
Ram = rand()%30;
Ram = rand()%30;
Ram = rand()%30;

これでも確かに出来るでしょうが、極端な話、全部同じ値になってもおかしくありません。
しかしこれを

int Ram;
Ram = rand()%10+ 0;
Ram = rand()%10+10;
Ram = rand()%10+20;

こうすることで、少なくとも
0〜 9の間の数値が1回、
10〜19の間の数値が1回、
20〜29の間の数値が1回、
出現する事が保証されます。

私は乱数を制御したい時はこうしています。

 


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



Name: qwe  ..ぴよぴよ(225ポイント)   Date: 2009/07/05(日) 05:30   No:36284       
Title: 繰り返し    
プログラミングの館を眺めてて思ったことなんですが

Zボタンを押したら
printfDx("a\n");と出力し
再びZボタンを押したら
printfDx("b\n");と出力される
ただし、以前の出力した『a』という文字は消える
再びZボタンを押したら
printfDx("a\n");と出力される
ただし、以前の出力した『b』という文字は消える
再びZボタンを押したら
printfDx("b\n");と出力される
ただし、以前の出力した『a』という文字は消える
再びZボタンを押したら
printfDx("a\n");と出力される
ただし、以前の出力した『b』という文字は消える
        ・
        ・
        ・

こんな感じに永遠に繰り返すプログラムを簡単に作るとしたら
皆さんはどうプログラムを書きますか?


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


Name: Dixq (管理人) [URL]  ..ウィザード(1,040,098ポイント)   Date: 2009/07/05(日) 06:24   No:36285     
Title: Re:繰り返し    
こんな感じでいかがでしょうか?
ゲームの館の「毎回書くプログラムの骨格」http://dixq.net/g/#41
「//ココ」部分を以下に置換します。



if(Key[KEY_INPUT_Z]==1){
clsDx();
printfDx("%c\n",'a'+InputZ);
InputZ = (InputZ+1)%2;
}

後、どこか最初に

int InputZ = 0;



を書いておいて下さい。
Zが押されるたびに、InputZが足され、2以上足されると最初に戻ります。
InputZは0か1になります。
文字コードaにInputZを足した文字コードを表示させているので、aかbとなります。
こんな感じでどうでしょうか?


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



Name: あか  ..ぴよぴよ(306ポイント)   Date: 2009/07/03(金) 17:57   No:36182       
Title: 情報オリンピック    
情報オリンピックの2008年度予選問題3の連鎖のプログラムわかる方いらっしゃいましたら教えていただけないでしょうか?
どうしてもわかりません。お願いします。

http://www.ioi-jp.org/joi/2008/2009-yo-prob_and_sol/2009-yo-t3/2009-yo-t3.html



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


Name: non  ..熟練のプログラマー(52,506ポイント)   Date: 2009/07/03(金) 18:22   No:36183     
Title: Re:情報オリンピック    
そんな、大会があるのですね。初めて知りました。HPを見たら、解説もありましたし、
何がわからないのか書いていただかないと、あの解説以上のことを書くのは面倒です。


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

Name: あか  ..ぴよぴよ(404ポイント)   Date: 2009/07/03(金) 18:34   No:36184     
Title: Re:情報オリンピック    

書き込みありがとうございます。

その解説ではなくて、その問題のプログラム自体がわからないので、プログラムを教えていただきたいんですけど。


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

Name: non  ..熟練のプログラマー(52,548ポイント)   Date: 2009/07/03(金) 18:41   No:36186     
Title: Re:情報オリンピック    
丸投げは禁止されております。
できるところまで、作成されてはいかがですか。


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

Name: あか  ..ぴよぴよ(430ポイント)   Date: 2009/07/03(金) 18:45   No:36187     
Title: Re:情報オリンピック    

作成してみたのですが、実行できなくて困っているところです。


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

Name: non  ..熟練のプログラマー(52,561ポイント)   Date: 2009/07/03(金) 18:48   No:36188     
Title: Re:情報オリンピック    
そのプログラムを貼り付けてください。


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

Name: あか  ..ぴよぴよ(667ポイント)   Date: 2009/07/03(金) 18:52   No:36189     
Title: Re:情報オリンピック    

これなんですが↓

#include<stdio.h>
int main(void)
{
FILE*fp;
fp=fopen("input.txt","r");
{
int a,b[10000][2],bb[10000][2],c,d=0,e;
fscanf(fp,"%d",&a);
fscanf(fp,"%d",&e);
fclose (fp);
scanf("%d",&a);
scanf("%d",&e);
b[d][0]=bb[d][0]=e;
b[d][1]=bb[d][1]=1;
for(c=0;c<a-1;c++){
scanf("%d",&e);
}
if(b[d][0]==e){
b[d][1]++;
bb[d][1]++;
}
}
else{
(d++;b[d][0]=bb[d][0]=e);
{bb[d][1]}
}
printf("---------------------\n");
for(c=0;c<d+1;c++){
printf("%d :%d-%d\n");
}
printf("---------------------\n");
if(bb[c][1]==bb[c-1][1]+bb[c+1][1]>=4;){
printf("%d",c,bb[c][0],bb[c][1]);
return 0;
}
}


このプログラムを修正していただけないでしょうか?


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

Name: non  ..熟練のプログラマー(52,688ポイント)   Date: 2009/07/03(金) 19:38   No:36191     
Title: Re:情報オリンピック    
大変申し訳ないけど、あなたの実力はまだこのプログラムを作るところまで
来ていません。この、課題は学校の課題で与えられて解かなければいけないもの
なのでしょうか?もし、あなたが自分の実力をつけるためにこの課題に挑戦して
いるのでしたら、もうすこし基本の勉強してからの方がいいです。

仮に学校の課題で解かなければいけないのなら、まず、ファイルを読んで
配列に格納する所だけでも、正しく動くように作ってみて下さい。


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

Name: あか  ..ぴよぴよ(716ポイント)   Date: 2009/07/03(金) 22:29   No:36195     
Title: Re:情報オリンピック    

実力がなくて申し訳ありません。

教えていただけないのはとても残念です。

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

他の人の意見を聞くことにします。


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

Name: non  ..熟練のプログラマー(52,487ポイント)   Date: 2009/07/03(金) 23:17   No:36197     
Title: Re:情報オリンピック    
不快な思いをさせたようで申し訳ありません。
答えだけを習っても、勉強になりませんよと申し上げたかったのです。
学校の課題なら、先生に教えを請うのが一番いいと思います。
それが、学校の先生の役目ですから。
がんばってください。

なお、先ほど解いてみました。
お恥ずかしいことに、入力1と入力2は正解を導けましたが、
入力4と入力5は正解になりませんでした。
原因がわからずに、ちょっと気分転換です。




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

Name: あか  ..ぴよぴよ(797ポイント)   Date: 2009/07/03(金) 23:55   No:36199     
Title: Re:情報オリンピック    

先生は教えてくれたのですが、先生と同じプログラムではだめだと言われました。

答えを見ながら勉強するのも、よい勉強法の1つだと考えております。

どうか教えていただけないでしょうか??


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

Name: sizuma [URL]  ..入門者(4,763ポイント)   Date: 2009/07/04(土) 00:00   No:36200     
Title: Re:情報オリンピック    
面白そうですね。
丁度さっきからCのファイル入出力の勉強を始めたんで、演習代わりにテキスト見ながら僕もやってみようと思いいます


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

Name: あか  ..ぴよぴよ(826ポイント)   Date: 2009/07/04(土) 00:18   No:36202     
Title: Re:情報オリンピック    

もしわかりましたら、そのプログラム教えてください。


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

Name: kazuoni [URL]  ..比類無きプログラマー(92,968ポイント)   Date: 2009/07/04(土) 02:15   No:36212     
Title: Re:情報オリンピック    
自分もやってみました。

・・・nonさんと同じく、答えが合わない・・・。orz
入力1、2は正解でした。
入力4=4973
入力5=9943

と出ました・・・。


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

Name: sizuma [URL]  ..初心者(5,554ポイント)   Date: 2009/07/04(土) 02:36   No:36213     
Title: Re:情報オリンピック    
ファイル入出力はテキスト読んでからやって、それとなく出来たんですけどアルゴリズム考えるの難しいですねー
連鎖は汎用性がありそうなんで、他で出てきても使えるように
ーって考えてたんですがうまくいかず。
C#だったらChainクラスを作ってまとめるんだけど、Cではどうしよう・・・って行き詰まりました;
まぁとりあえず文法勉強しろよ、ってことなんですけどね(苦笑

一応一時間かけて、再帰で連鎖チェックする感じで大まかな骨組みはつくったんですけど、デバックする元気はないんで明日気が向いたら続きします。



>答えを見ながら勉強
よいソースをトレースするのはいい勉強になると思います。
でもそれはどんな風に構造化してるのか、などのテクニックを勉強するのにですね。
文法をお手本にするためなら、それはただ答えを見て写す作業と一緒です。
まぁ100回ぐらい繰り返せば使えるようになるかもしれませんね。


>そのプログラム教えてください
先生は書いたプログラムを見せてくれたのですよね?それをみて勉強して、書いてみてはどうですか?
べつに出来たのをのせるのは構わないんですが。
正直僕(初心者)のソースを見ても勉強にならないと・・・


>教えていただけないのはとても残念です
nonさんの書き込みはただ自分の書いたソースをのせるより、よっぽどあなたのためになる書き込みだと思います。せっかくアドバイス頂いたんですから、とりあえずnonさんの書かれてるようにまずファイルIOの部分をしっかり作ってみてはどうですか?
僕はインデントがないコードがスラスラ読めるほどのレベルではないんで(心も狭いし)
あかさんのコードは読んでないですが。
こんなアルゴリズム組めなくてもたいした問題ではないと思いますけど、ファイルIOは重要だと思います。
なんか僕、説教くさくてウザいですかね^^;


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

Name: non  ..熟練のプログラマー(52,615ポイント)   Date: 2009/07/04(土) 09:42   No:36218     
Title: Re:情報オリンピック    
おはようございます。
布団の中で考えていたら、間違いに気がつきました。
無事に、すべて正解と一致しました。
kazuoniさんもきっと同じ間違いでしょう。
問題をよく読み直せば、最初の条件が2回目以降とちょっと違うのに気がつきます。
じゃ、がんばってください。


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

Name: sizuma [URL]  ..初心者(5,566ポイント)   Date: 2009/07/04(土) 11:44   No:36219     
Title: Re:情報オリンピック    
僕も今走らせてみたんですが、kazuoniさんと同じ結果になりましたorz

問題読み直してきますー


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

Name: sizuma [URL]  ..初心者(5,736ポイント)   Date: 2009/07/04(土) 12:30   No:36221     
Title: Re:情報オリンピック    
自分のミスを2点見つけたんですが、一つ目の修正を試してみたら1000ではちゃんと動くのが5000では途中で動かなくなりました。むしろ1000でちゃんと動くのが不思議なんですけどね。
5000もある配列の処理に再帰なんて使ってたからだろうか・・・


全部書き換えるのは面倒なんで、ここでやめておきます
見難い再帰はただのダメプログラムだ、といい勉強になりました
というわけであかさんすいません、できませんでした(苦笑


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

Name: 素人  ..初心者(8,804ポイント)   Date: 2009/07/04(土) 13:01   No:36222     
Title: Re:情報オリンピック    

熟練のプログラマーさん>
やってみるだけやってみたんですけど、確認したいんで、そのプログラムはってくれませんか??


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

Name: あか  ..ぴよぴよ(851ポイント)   Date: 2009/07/04(土) 13:03   No:36223     
Title: Re:情報オリンピック    


緊急事態なんです。
なんとか教えてもらえないでしょうか??


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

Name: たいちう  ..プログラマー(32,950ポイント)   Date: 2009/07/04(土) 14:15   No:36224     
Title: Re:情報オリンピック    
> 先生は書いたプログラムを見せてくれたのですよね?
> それをみて勉強して、書いてみてはどうですか?

と、sizumaさんも書いてますが、緊急事態なら勉強してはどうでしょうか。


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

Name: あか  ..ぴよぴよ(909ポイント)   Date: 2009/07/04(土) 14:20   No:36225     
Title: Re:情報オリンピック    

先生は見せてくれましたが一瞬しかみせてくれなかったのでどんな内容なのかメモできませんでした。

時間がないので、本当にお願いします。

教えてください。


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

Name: \(^o^)/  ..ぴよぴよ(4ポイント)   Date: 2009/07/04(土) 14:28   No:36227     
Title: Re:情報オリンピック    
掲示板から掲示板を進めるのはどうかと思いますが、
私も含めてここにいる人たちでも分からないならば
2chの
C/C++の宿題片付けます 128代目
http://pc12.2ch.net/test/read.cgi/tech/1245853701/
プログラマーを本職にしてる人たちが大勢いるスレなので
ここで聞けばすぐに答えが返ってくると思います。
聞いてみてはいかがでしょうか?


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

Name: あか  ..ぴよぴよ(923ポイント)   Date: 2009/07/04(土) 14:34   No:36228     
Title: Re:情報オリンピック    


ありがとうございます。

聞いてみます。


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

Name: non  ..熟練のプログラマー(52,858ポイント)   Date: 2009/07/04(土) 14:55   No:36230     
Title: Re:情報オリンピック    
あらまぁ、2チャンネルにいっちゃった。
どうして、少しは努力しようとしないのかなぁ?
ファイルの入力だけでもできたら教えるつもりだったのに。

じゃ、他の人の参考までに。

#include <stdio.h>
#include <stdlib.h>

int data[10000+2];
int N;

int data_load(void)
{

}
void disp(int n)
{
int i;
for(i=1;i<=n;i++)
printf("%d\n",data[i]);
}
int noc(int i,int c)
{
int p,q,n;
int size;
n=N;
p=i-1;
q=i+1;

size=1;
while(data[p]==c){
size++;
p--;
}
while(data[q]==c){
size++;
q++;
}

while(size>=4){
n=p+(N+1-q);
size=0;
c=data[p];
while(p>=0 && data[p]==c){
size++;
p--;
}
while(q<=N && data[q]==c){
size++;
q++;
}
}
return n;
}

int main(void)
{
int min,m;
int i,j;
N=data_load();
min=N;
for(i=2;i<N;i++){
for(j=1;j<4;j++){
m=noc(i,j);
if(min>m)
min=m;
}
}
printf("min=%d\n",min);
return 0;
}


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

Name: kazuoni [URL]  ..比類無きプログラマー(93,355ポイント)   Date: 2009/07/04(土) 15:45   No:36235     
Title: Re:情報オリンピック    
nonさんのコード・・・簡潔すぎますw

自分のやつすごいです。非効率過ぎました。。
黒歴史で載せます・・・。小一時間頑張ったので・・・w
うーん。これはオリンピック予選敗退ですね。
しかも高校生・・・。

はぁ。全然だめでした。肩ががっくり落ちました。。


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

Name: sizuma [URL]  ..初心者(7,327ポイント)   Date: 2009/07/04(土) 15:50   No:36236     
Title: Re:情報オリンピック    
考えるの普通に面白いんですけどね
>nonさんのプログラム
やっぱり再帰じゃないほうがシンプルで見やすいですねorz
僕はmain書きながらプログラム考えてたんですが、やっぱりだんだんごちゃごちゃしてきました


ちなみに僕はこんな感じでした

>添付ファイルにしました

とりあえず読みづらいなぁー
書いてるうちにグローバル変数が増えてきて・・・
関数に渡す引数も多くなってくるし
すごい助長な部分もあります。そのまえに5000じゃ正しく動作しないし(笑
連鎖の2回目から条件がちょっと違うのも変えてないです
初めてのCでのFile入出力でしたが、やっぱり実際してみるとちょっと分かった気分になりますね


>貼ってみるとやはり長かったんで、添付にしました



>kazuoniさん
僕の方が非効率な自信があります(笑
難しいですよねー
自分は文法本見ながらファイルIOしましたが、これだけで3時間かかりました;
正解率を見てみると、問3からが難しいみたいですね
1,2でちゃんととって、3〜6でどれかできれば、予選突破レベル
ってすれば、予選は突破できる、、、、かも


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

Name: あか  ..かけだし(1,127ポイント)   Date: 2009/07/04(土) 17:02   No:36237 解決!     
Title: Re:情報オリンピック    

2チャンネルでも解答返ってきませんでした。

熟練のプログラマーs>
言っておきますけど努力はしましたよ。
勝手に努力してないみたいな言い方はやめてほしいものですね。
それからあなたのプログラムは長すぎると思います。
もっと短いプログラムでできますよ。

でも、解決しましたので、皆さんにはお礼をいわなければなりません。
こんな自分のためにいろいろ書き込みありがとうございました。
感謝いたします。

プログラムはなんとか自分ですることができました。(他の方のを参考にして)

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


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

Name: kazuoni [URL]  ..比類無きプログラマー(93,661ポイント)   Date: 2009/07/04(土) 17:14   No:36238     
Title: Re:情報オリンピック    
>勝手に努力してないみたいな言い方はやめてほしいものですね。

その努力を見たかったので、nonさんは
>>仮に学校の課題で解かなければいけないのなら、まず、ファイルを読んで
>>配列に格納する所だけでも、正しく動くように作ってみて下さい。
と伝えたのです。これができれば、アルゴリズムの解説に移ることができますしね。

>それからあなたのプログラムは長すぎると思います。
>もっと短いプログラムでできますよ。
プログラムを極端に短くすることは、可読性が落ちる可能性もありますし、
処理効率が一概にいいとは言い切れないと思います。
まずは、自分ならこう組みますが?っと提示するのが前提かと。

(自分のプログラムは無駄が多すぎますが・・・)


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

Name: non  ..熟練のプログラマー(53,193ポイント)   Date: 2009/07/04(土) 18:39   No:36246     
Title: Re:情報オリンピック    
>それからあなたのプログラムは長すぎると思います。
>もっと短いプログラムでできますよ。
あきれて、何もいうことがない。
じゃ、作ってアップしてくれ。

って、相手してもしょうがないので・・・
短くしました。ついでに、再帰プログラムにしました。

#include <stdio.h>
#include <stdlib.h>
#include <conio.h>

int data[10000+2];
int N;

int data_load(void)
{
FILE *fp;
int n,i=1;
if((fp=fopen("data1.txt","r"))==NULL){
printf("File Open ERROR!\n");
exit(1);
}
fscanf(fp,"%d",&n);
while(fscanf(fp,"%d",&data[i++])!=EOF){}
fclose(fp);
return n;
}
int renoc(int c,int p,int q,int sw)
{
int n,size;
n=p+(N+1-q);
size=(sw==0)?1:0;
while(p>=0 && data[p]==c){
size++;
p--;
}
while(q<=N && data[q]==c){
size++;
q++;
}
return (size>=4)?renoc(data[p],p,q,1):((sw==0)?N:n);
}
int main(void)
{
int min,m;
int i,j;
N=data_load();
min=N;
for(i=2;i<N;i++){
for(j=1;j<4;j++){
m=renoc(j,i-1,i+1,0);
if(min>m)
min=m;
}
}
printf("min=%d\n",min);
return 0;
}




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

Name: 七誌  ..かけだし(1,835ポイント)   Date: 2009/07/04(土) 19:09   No:36247     
Title: Re:情報オリンピック    
> 2チャンネルでも解答返ってきませんでした。
返ってきてますよ。


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

Name: a  ..かけだし(1,033ポイント)   Date: 2009/07/05(日) 00:52   No:36274     
Title: Re:情報オリンピック    
2chの返答はこうなったようですね

#include <stdio.h>

void check_file(char *filename);
int check_okikata(int *array, int size, int index, int color);

int main()
{
char *filenames[] = {
"2009-yo-t3-in1.txt",
"2009-yo-t3-in2.txt",
"2009-yo-t3-in3.txt",
"2009-yo-t3-in4.txt",
"2009-yo-t3-in5.txt",
};
int nfiles = sizeof(filenames) / sizeof(*filenames);
int i;

for (i = 0; i < nfiles; ++i) { check_file(filenames[i]); }

return 0;
}

void check_file(char *filename)
{
FILE *fp;
int N, *array, i, color, min;

fp = fopen(filename, "r");
if (fp == NULL) {
printf("Error: can't open file %s\n", filename);
exit(1);
}

if (fscanf(fp, "%d", &N) != 1) {
printf("Error: illegal data format %s\n", filename);
exit(1);
}

array = (int *)malloc(N * sizeof(int));
if (array == NULL) {
printf("Error: no memory\n");
exit(1);
}

for (i = 0; i < N; ++i) {
if (fscanf(fp, "%d", &array[i]) != 1 || array[i] < 1 || array[i] > 3) {
printf("Error: illegal data format %s\n", filename);
exit(1);
}
}

min = N;
for (i = 0; i < N; ++i) {
for (color = 1; color <= 3; ++color) {
int nokori = check_okikata(array, N, i, color);
if (nokori < min) min = nokori;
}
}
printf("%s : %d --> %d\n", filename, N, min);

free(array);
fclose(fp);
}

int check_okikata(int *array, int size, int index, int color)
{
#define RENZOKU 4

int i, imin, imax, length, sum;

imin = index - 1;
imax = index + 1;
sum = 0;
length = 1;
for (;;) {
while (imin >= 0 && array[imin] == color) { --imin; ++length; }
while (imax < size && array[imax] == color) { ++imax; ++length; }
if (length < RENZOKU) break;
sum += length;
if (imin < 0 || imax >= size) break;
length = 0;
color = array[imax];
}

return size - sum;
}


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

Name: b  ..かけだし(1,387ポイント)   Date: 2009/07/05(日) 01:16   No:36276     
Title: Re:情報オリンピック    
せっかく答えて下さっているnonさんに対して、
スレ主は失礼過ぎると思います。



#include<stdio.h>
int main(void)
{
FILE*fp;
fp=fopen("input.txt","r");

/*↓「{ 」の位置がおかしい */
{
/*変数の宣言位置がおかしい*/
/*変数名がa,bだと何を表わすのか、ぱっと見わからない*/
/*他の人に、修正を求めるのであればわかりやすい変数名、もしくはコメントをつけるべき*/
/*2次元配列にした理由はなぜか?*/
int a,b[10000][2],bb[10000][2],c,d=0,e;

fscanf(fp,"%d",&a);
fscanf(fp,"%d",&e);
fclose (fp);

/*ここでfscanfで読み込んだ値を上書きしている? 間違い*/
scanf("%d",&a);
scanf("%d",&e);

b[d][0]=bb[d][0]=e;
b[d][1]=bb[d][1]=1;

/*同じ変数eに何回も入力をしている*/
for(c=0;c<a-1;c++){
scanf("%d",&e);
}
if(b[d][0]==e){
b[d][1]++;
bb[d][1]++;
}
/*変数のスコープは↓ここまで。つまり、ここ以下では変数は機能しない*/
/*そもそも、基礎的な書き方が間違っているので何とも言えない*/
}
else{
/*↓何をしたいのか、わからない 根本的な文法的間違い*/
(d++;b[d][0]=bb[d][0]=e);
{
/*↓何をしたいのか、わからない 文法的な間違い*/
bb[d][1]
}
}
printf("---------------------\n");
for(c=0;c<d+1;c++){
printf("%d :%d-%d\n");
}
printf("---------------------\n");

/*文法的な間違い*/
if(bb[c][1]==bb[c-1][1]+bb[c+1][1]>=4;){
/*printfの書き方が違う*/
printf("%d",c,bb[c][0],bb[c][1]);

/*return の位置が違う*/
return 0;
}
}


スレ主は、これを修正してください、ということでしたが、
これを直すなら、全部書き変えなくてはいけません。
基礎的な構文も間違っているので、これで努力していると言っても説得力が全くないですね。


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



Name: チルチル  ..プログラマー(27,885ポイント)   Date: 2009/07/04(土) 21:05   No:36257       
Title: 素材のファイル名前について    
ちょっとした疑問なんですが
皆さんのサンプルやゲームを見ると
使用する画像や効果音の名前が
英数小文字で書かれている事が多いのですが
これはただの好みでしょうか?
英数小文字の方が読み込みが早かったりするのですか?


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


Name: あ〜る  ..中級者(9,792ポイント)   Date: 2009/07/04(土) 22:43   No:36263     
Title: Re:素材のファイル名前について    
多分半角全角のキーを押すのがめんどくさいからだと
僕もめんどいんでアルファベットです
あとはサンプルとか見ててもチルチルさんの言う通り皆アルファベットなんで、暗黙のルールみたいなもんなのかなぁ?と勝手に納得してます
プログラム技術はまだ無いんで出来るだけプログラマーっぽい事して雰囲気だけ出したい気持ちもありますし(^^;)


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

Name: MNS  ..中級者(12,262ポイント)   Date: 2009/07/04(土) 22:46   No:36265     
Title: Re:素材のファイル名前について    
基本的には日本語名でもあまり関係ないと思いますが、
2バイト文字はいろいろと問題が多いのも確かです。


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

Name: 御津凪 [URL]  ..ハッカー(100,607ポイント)   Date: 2009/07/04(土) 23:15   No:36266     
Title: Re:素材のファイル名前について    
プログラム的な話をすると、

・(MNSさんの仰ることとちょっと違いますが)日本語文字の場合、パスの表現である'\'が使われているため
 プログラムによっては誤動作を起こす場合がある
・ファイルのパックや圧縮などで、ファイル名が長いとその分だけ容量が増えるため、
 1バイトのみで表現できる文字を使用するから(普通気にすることではないですが)
・昔からのプログラムの慣習(?)

が、あげられますね。

ちなみに、2番目の話ですが、
昔のゲーム環境では ROM に詰め込むのにファイルパスを1文字単位で管理していたという話を
聞いたことがあります。


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

Name: チルチル  ..プログラマー(27,928ポイント)   Date: 2009/07/04(土) 23:26   No:36268 解決!     
Title: Re:素材のファイル名前について    
そういえば日本語は2バイト使うんでしたね・・
よくわかりました、どうもありがとうございます。


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

Name: 山崎  ..上級者(18,299ポイント)   Date: 2009/07/04(土) 23:27   No:36269     
Title: Re:素材のファイル名前について    
え、皆さん素材のファイルを半角英数にしてるんですかっ!?

私も一応、何か誤作動が起こるのが怖いので半角英数で名前をつけてます。
でも本当は、わかりやすく日本語でつけたいですね…。
「ミイラ男が走る1.bmp」とか
「魔王が攻撃2.bmp」とか(笑)。

半角英数でファイル名をつけるのがスタンダードだとは知りませんでした。
半角英数にしててよかったです…。


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



Name: ミトリ  ..ぴよぴよ(539ポイント)   Date: 2009/07/03(金) 15:23   No:36174       
Title: キャラクターの読み込みについて    
龍神録のプログラミングを参考にさせてもらいながら作っています。
キャラクターをオリジナルで書いてそれをシューティングに使いたいのですが、実際に読み込ませると余白部分の不透明化が出来ていないようで余白を含めて□のように表示されてしまいます。
読みなおして考えたのですが初心者なので出来ない理由がわからなかったので書きこみました。

どうすればできるようになるかご指導お願いします!!


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


Name: lbfuvab  ..上級者(21,156ポイント)   Date: 2009/07/03(金) 15:28   No:36175     
Title: Re:キャラクターの読み込みについて    
PNGでアルファチャンネル対応のソフトを使って下さい。

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

Name: ねこ  ..上級者(19,405ポイント)   Date: 2009/07/03(金) 15:55   No:36177     
Title: Re:キャラクターの読み込みについて    
または、SetTransColor関数で透過するRGB値を指定します。

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

Name: ミトリ  ..ぴよぴよ(562ポイント)   Date: 2009/07/04(土) 23:19   No:36267 解決!     
Title: Re:キャラクターの読み込みについて    
できました!
ありがとうございます^^


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



Name: dic  ..プログラマー(27,204ポイント)   Date: 2009/07/04(土) 21:16   No:36258       
Title: staticメンバ変数の実体    
また質問させてもらいます

下記のソース その1をリリースモードでコンパイルすると24kbyteのexeファイルができました
その後 その2を同じくリリースモードでコンパイルしましたが同じ24kbyteでした
新しく A::b[DEF_SIZE] の実体を定義したので、その2ではできあがる実行ファイルのサイズが
増えると見込んでいたのですが そうではなかったみたいでした
とすると A::a[DEF_SIZE} も A::b[DEF_SIZE} も exe ファイルには埋め込まれてないと推測できます
するとこの変数はどこに実体があるのでしょうか?

コンパイラはVC6.0 です


//-----------------その1--------------------------
#include <stdio.h>

#define DEF_SIZE 10000000
class A
{
public:
static int a[DEF_SIZE];
};
int A::a[DEF_SIZE];

int main()
{
return 0;
}

//--------------------その2---------------------------
#include <stdio.h>

#define DEF_SIZE 10000000
class A
{
public:
static int a[DEF_SIZE];
static int b[DEF_SIZE];
};
int A::a[DEF_SIZE];
int A::b[DEF_SIZE];

int main()
{
return 0;
}



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


Name: Justy  ..伝説なるハッカー(387,242ポイント)   Date: 2009/07/04(土) 21:41   No:36259     
Title: Re:staticメンバ変数の実体    

>するとこの変数はどこに実体があるのでしょうか?

 この静的な変数には初期値がありません。
 
 Windowsの実行ファイルの場合、こういう変数は実行ファイルの中には
静的に配置する変数(シンボル)の先頭のオフセットアドレスの情報(とサイズ)
だけがあるだけです。

 実行時にその指示に従い、メモリを割り当てると実体ができあがります。


 しかし、以下のようにコードに手を加えて初期値を入れてみてください。
 
int A::a[DEF_SIZE] = { 1 };

 A::aを初期化するためのデータが実行ファイル内に埋め込まれますので
ファイルサイズは増えます。


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

Name: dic  ..プログラマー(27,264ポイント)   Date: 2009/07/04(土) 22:25   No:36261     
Title: Re:staticメンバ変数の実体    
なるほど 初期値がいるのですね
無事、ファイルサイズも増え、staticメンバ変数の実体の実情もつかめました
ありがとうございます


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

Name: dic  ..プログラマー(27,270ポイント)   Date: 2009/07/04(土) 22:26   No:36262 解決!     
Title: Re:staticメンバ変数の実体    
解決しました

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



Name: dic  ..プログラマー(26,727ポイント)   Date: 2009/07/04(土) 19:56   No:36249       
Title: staticメンバ変数の使用方法    
基本的なことでつまづいてるので教えてもらえないでしょうか?
下記にあるソースをコンパイルすると

error C2040: 'public: static int * A::b' : 'int' は 'int [10]' と間接操作のレベルが異なります。

というコンパイルエラーがでます

そこで、
int[10] A::b;
としてもエラーがでるので、どうやってstaticメンバ変数の実体を定義するのでしょうか?


#include <stdio.h>

class A
{
public:
static int a;
static int b[10];
};

int A::a = 0;
int A::b;

int main()
{
printf( "%d\n", A::a );

int i;
for( i=0; i<10; i++ )
printf( "%d\n", A::b[i] );
return 0;
}



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


Name: MNS  ..中級者(12,219ポイント)   Date: 2009/07/04(土) 20:04   No:36252     
Title: Re:staticメンバ変数の使用方法    
えっと、
int A::b;

int A::b[10];
ではないでしょうか?


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

Name: dic  ..プログラマー(26,769ポイント)   Date: 2009/07/04(土) 21:01   No:36256 解決!     
Title: Re:staticメンバ変数の使用方法    
なるほど そっちに配列だと定義するのですね
解決しました
ありがとうございました


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



Name: y  ..かけだし(1,567ポイント)   Date: 2009/07/03(金) 09:02   No:36168       
Title: ファイル読み込み関係の関数    
Dxライブラリのファイル読み込み関係の関数についてなんですが、
使い方がよくわかりません。

text_read = FileRead_open ("test.txt") ;
test_a = 0 ;
FileRead_seek ( text_read , 1 , SEEK_SET ) ;
test_a = FileRead_getc ( text_read ) ;
FileRead_close ( text_read ) ;

とやっても、textファイルの中身にかかわらず、-1になってしまうのですが、何が悪いのでしょうか。


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


Name: ねこ  ..上級者(19,388ポイント)   Date: 2009/07/03(金) 09:18   No:36169     
Title: Re:ファイル読み込み関係の関数    
どちらが-1になっているのか分からないのですが

・text_readが-1の場合
 ファイルが読み込めていません。この指定だとslnファイルと同じ場所に無いといけません。

・test_aが-1の場合
 テキストファイルの文字数を超えた位置を検索している。
 FileRead_seekの第二引数で「1」を指定していますが、これは先頭から「2文字目」から取得するようになります。
 従って、もし半角1文字しか打っていないテキストファイルだと読み込む情報が無いのでエラーになります。


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

Name: y  ..かけだし(1,654ポイント)   Date: 2009/07/04(土) 17:26   No:36240     
Title: Re:ファイル読み込み関係の関数    
説明不足ですみません

-1 なのは、test_a で、text_read は 0だったので、ファイルの読み込み自体はできていると思います

ファイルの中身は、5文字くらい半角数字を書き込んでいるので、2文字目から読み込んでも、
エラーにはならないと思ったんですが


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

Name: GPGA  ..熟練のプログラマー(64,299ポイント)   Date: 2009/07/04(土) 17:38   No:36241     
Title: Re:ファイル読み込み関係の関数    
>text_read は 0だったので、ファイルの読み込み自体はできていると思います
できていません。

FileRead_openのリファレンスをキチンと読みましょう。
http://homepage2.nifty.com/natupaji/DxLib/function/dxfunc_other.html#R19N1


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

Name: ねこ  ..上級者(20,178ポイント)   Date: 2009/07/04(土) 17:40   No:36242     
Title: Re:ファイル読み込み関係の関数    
<text_read は 0だったので
すいません、エラー時-1なのは「FileRead_getc」だけでした。

text_readが0という事はファイルが読み込めていません。
特に設定していなければslnファイルがある場所に「test.txt」ファイルがあれば読み込み可能なはずです。
もう一度ファイルの場所と名前を確認して見てください。


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

Name: y  ..かけだし(1,629ポイント)   Date: 2009/07/04(土) 20:42   No:36255 解決!     
Title: Re:ファイル読み込み関係の関数    
ファイルの位置を直したら、ちゃんと読み込めました
いろいろとありがとうございました。


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



Name: TKOZ  ..プログラマー(26,110ポイント)   Date: 2009/07/03(金) 18:40   No:36185       
Title: メロディーを奏でたいのですが…うまくいきません    
あるアルゴリズムを考えたのですが、それを実装しようとしたら、
コンパイルは通るのですが、うまくMidiデバイスで演奏されません。
どこが間違っているのでしょうか?

ちなみに、あるアルゴリズムとは、単純なもので、
テキストファイルをfscanfで行単位で
読み込み、あ行なら「ド」、か行なら「レ」、さ行なら「ミ」…といった風に
Midiデバイスで演奏するものです。

開発環境は、BCCDevleloperでWindowsXPです。

ソースを張っておきます。

あと、Justyさん、行列とベクトルの学習がもうすぐ終わりそうです。一応、報告だけさせてもらいます。
使っている本は、「ゲーム開発のための数学・物理学入門」という本です。
第6章まで辿り着きました。第6章は、行列の変換の章です。
今、第6章の練習問題をやっているところです。
ところで、物理の方も、しっかり勉強したほうがいいのでしょうか?


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


Name: Justy  ..伝説なるハッカー(386,075ポイント)   Date: 2009/07/03(金) 21:13   No:36193     
Title: Re:メロディーを奏でたいのですが…うまくいきません    

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

 基本的なところですが、

・ ロケールが設定されていない
・ wchar_t型の文字列を fscanfで拾うなら %ls

 に注意して直してみてください。

 これで多分なんかしら進展するはずです。




>行列とベクトルの学習がもうすぐ終わりそうです

 おお、頑張ってますね。



>物理の方も、しっかり勉強したほうがいいのでしょうか?

 目的がゲーム制作の為、であるなら、最低限……力、時間、速度、加速度、とかの
キーワードが出てくるあたり……があればまずはそれでいいと思います。

 やり始めるとキリがないので、必要になったらその都度調べて勉強する、
というスタンスにしておけば手っ取り早いですし、覚えたことをその場でソースに
書いて実践できるのでいいかと。


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

Name: TKOZ  ..プログラマー(26,249ポイント)   Date: 2009/07/04(土) 15:24   No:36233     
Title: Re:メロディーを奏でたいのですが…うまくいきません    
ネットカフェから書き込みです。
Rocaleと%lsでやってみたのですが、うまくいきませんでした。
他にも原因がありそうです。

物理は、もうほとんど忘れているので、学習しようと思います。
力って、F=MAでしたっけ?時間は、み/(は・じ)で、道のり÷速さですね。
速度は、道のり÷時間、加速度は、忘れました。


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

Name: TKOZ  ..プログラマー(26,329ポイント)   Date: 2009/07/04(土) 20:02   No:36251 解決!     
Title: Re:メロディーを奏でたいのですが…うまくいきません    
wchar_t型から、char型に変更したら、うまくいきました。
何がいけなかったのか、分かりませんが、とりあえず、解決ということに
します。

それのソースも張っておきますね。


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

Name: Justy  ..伝説なるハッカー(386,762ポイント)   Date: 2009/07/04(土) 20:34   No:36254     
Title: Re:メロディーを奏でたいのですが…うまくいきません    

>Rocaleと%lsでやってみたのですが、うまくいきませんでした

 もう Borlandの古いコンパイラは持っていないので確認は出来ないのですが、
やはり古いコンパイラなので wchar_tの扱いがいろいろ特殊なのか問題があるのか、
しているのかもしれませんね。


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



Name: ちょたけ  ..ぴよぴよ(36ポイント)   Date: 2009/07/03(金) 17:18   No:36181       
Title: 無題    
C言語〜ゲームプログラミングの館〜の10.入力状態を取得する
というところでコピー&コンパイル用サンプルプログラムの13行目に
while( CheckHitKey( KEY_INPUT_RETURN ) == 0 ){//ENTERが押されている間ループ

とあるのですが、ENTERが押されている間ではなくENTERが押されていない間ループじゃないでしょうか
こちらが間違ってたらすみません


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


Name: Dixq (管理人)  ..ウィザード(1,039,793ポイント)   Date: 2009/07/04(土) 18:09   No:36245     
Title: Re:無題    
(出先なので携帯から投稿してます)

ご報告ありがとうございます。
そうですね、帰宅したら修正しておきます。


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

Name: ちょたけ  ..ぴよぴよ(60ポイント)   Date: 2009/07/04(土) 19:39   No:36248 解決!     
Title: Re:無題    
解決マークつけます

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



Name: ようすけ  ..入門者(4,689ポイント)   Date: 2009/07/03(金) 22:47   No:36196       
Title: シューティングの試作品です☆    
お久しぶりです

シューティングの試作品を皆様にやってもらいたく
またきました。

アップローダ様↓

http://kissho3.xii.jp/100/

DLKEY 0111(半角で)

コメント スカイソルジャーskysoldier


スコアラーの方々の為に今回は稼ぎ要素も取り入れてみました。

でも試作品という事なので、一面で終わりですW

バグやゲームの感想等くれたら感謝です。


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


Name: Justy  ..伝説なるハッカー(386,662ポイント)   Date: 2009/07/04(土) 00:27   No:36203     
Title: Re:シューティングの試作品です☆    
 とても WinAPIで作られているとは思えないほど良くできていますね。
 
 そして軽い。DirectXなどのアプリは大概 CPUを馬鹿食いするのですが、
さすがに WinAPIなだけあって恐ろしいほど軽いです。


 いろいろ随所に工夫がみてとれます。
 各キャラに影の表現があるのもいいですね。
 
 背景はベベル絵を多用したあたりが、おおっと思わされました。
 さすがに、木のべベルはちょっとつけすぎ感がありましたが。

 最初、木の配置マップがあって、その配置に基づいて上から置いているのかな、
と思いましたが、背景にくっついていたのですね。

 別けておくと処理は重いかもしれませんが、影が木の上などに重なったときなど
不自然な影にならなくて済むかもしれません。


 さて、結局ボスは倒せませんでしたが、最近のこの掲示板では見かけないタイプのゲームで
新鮮だったのもあって、なかなか楽しめました。



 で、バグというのかどうかは微妙で、多分どれも既に気づいていることだとは思いますが、
何点か気になったところを。


・ GAME OVERになっても曲が鳴り続けている
 タイトル画面に戻ってもプレイ中の曲がなっているようです。

・ Alt+F4やウインドウ右上の×ボタンなどでアプリを終了できない。
 確認ダイアログが出るのはいいのですが、タイトル画面に戻るになっています。
 もちろん一端タイトル画面に戻って、終了を選択すればいいのですが、
通常のウインドウズアプリとは異なる挙動です。

 タスクマネージャのアプリケーションタブや、タスクバーの右クリックのメニューからでも
終了できません。

・ 赤との中間色が残っている
 素材の各絵の背景が赤で、キャラの縁にその赤との中間色があるため、
その部分が透過されず、微妙な赤い縁が画面に残ってしまっています。

 綺麗に中間色を取り除くか、32bitBMPなどの透明チャンネルを持たせて
中間色も綺麗に抜けるようにした方がいいかもしれません
(その分重くなったり、WinNT系以外で動かなくなるかもしれませんが……)


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

Name: BEMANI  ..プログラマー(37,040ポイント)   Date: 2009/07/04(土) 00:42   No:36205     
Title: Re:シューティングの試作品です☆    
>>ようすけさん
WinAPIで作成ですか・・・いいですね〜〜。
このままWinAPIオンリーで作るもいいかもしれませんね><


【一つ目】
ゲーム中Escapeキーを押してタイトルに戻るとメッセージボックスが出てくる音がずっと鳴っていました。
ゲームを開始する、あるいは終了した時音が鳴りやみました。

【二つ目】
パワーアップアイテムを取り(三方向発射)、自機が被弾した時以降パワーアップアイテムが出なかったです。
仕様なのであれば仕方ない所です。

【三つ目】
ゲームオーバー時にタイトルに遷移しますが、ステージの音楽が鳴り続けていました。

【四つ目】
Alt+F4キーで終了しようとするとタイトルに戻るかどうかのメッセージボックスが出てきました。
終了するようにしてみてはどうでしょう〜。


制作お疲れ様です。
これからも頑張って下さいませ〜。


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

Name: yu  ..プログラマー(34,031ポイント)   Date: 2009/07/04(土) 09:26   No:36216     
Title: Re:シューティングの試作品です☆    
やってみました〜

前回と同様に
ボスが出てくる演出とか、アニメーション、エフェクト等が
素晴らしかったです。

自分はWinAPIを今勉強しているのですが
こんなクオリティーの高いものは作れませんw

自分も御二人方と同じくALT+F4のダイアログが気になりました
後、ダイアログが出てくるときの音がずって鳴って
操作がきかなくなり、タスクを強制終了しました・・・

制作お疲れ様でした^^


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

Name: ようすけ  ..初心者(5,391ポイント)   Date: 2009/07/04(土) 15:05   No:36232     
Title: Re:シューティングの試作品です☆    
返事遅くなりました。

皆さん遊んでくださりありがとうございます。


Justyさん

>とても WinAPIで作られているとは思えないほど良くできていますね。

 いろいろ随所に工夫がみてとれます。

そう言っていただけると嬉しいです☆

苦労して作った甲斐があります。


> GAME OVERになっても曲が鳴り続けている
 タイトル画面に戻ってもプレイ中の曲がなっているようです。

 こちらのPCでもたまにそのような事が
 あるので、調べてみます。
 
> Alt+F4やウインドウ右上の×ボタンなどでアプリを終了できない。
 確認ダイアログが出るのはいいのですが、タイトル画面に戻るになっています。
 もちろん一端タイトル画面に戻って、終了を選択すればいいのですが、
通常のウインドウズアプリとは異なる挙動です。

 タスクマネージャのアプリケーションタブや、タスクバーの右クリックのメニューからでも
終了できません。


 なるほど、早急に対応します(汗

 
> 赤との中間色が残っている
 素材の各絵の背景が赤で、キャラの縁にその赤との中間色があるため、
その部分が透過されず、微妙な赤い縁が画面に残ってしまっています。

 私的にはあまり気にならなかったんですが、やはり気になる方には気になりますかW

 背景も含め敵の絵など9割方はエクセルで描いて、その絵を右クリックでコピーして、
 それをペイントに貼り付けしてBMPで保存、というやり方でやってたんですが
 それだと敵の輪郭部分が綺麗に透視されず残ってしまうんですよねぇ(汗
 ちょっと考えてみます。



BEMANIさん


>このままWinAPIオンリーで作るもいいかもしれませんね><

  できればせっかく慣れ親しんだAPIがいいんですが、同時に音を鳴らすことができないので、
  DirectXを考えてます。

  やっぱ効果音も大事だと思いますし☆

>【一つ目】
ゲーム中Escapeキーを押してタイトルに戻るとメッセージボックスが出てくる音がずっと鳴っていました。
ゲームを開始する、あるいは終了した時音が鳴りやみました。

  了解です!調べてみます。

>【二つ目】
パワーアップアイテムを取り(三方向発射)、自機が被弾した時以降パワーアップアイテムが出なかったです。
仕様なのであれば仕方ない所です。


 これはいまのところ仕様です☆ 今後変えていきます。
 

YUさん


>前回と同様に
ボスが出てくる演出とか、アニメーション、エフェクト等が
素晴らしかったです。


 ありがとうございます☆

 今回は特にエフェクトに力を入れたので嬉しいです☆


>自分はWinAPIを今勉強しているのですが
こんなクオリティーの高いものは作れませんw


 いえいえ、とんでもないです。
 私は「猫でもわかる」シリーズからWINAPIに入りましたよ。

 最初はわからない事ばかりだとは思いますが(私の場合今でもW)
 がんばって下さい。


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



Name: kai  ..ぴよぴよ(359ポイント)   Date: 2009/06/30(火) 07:15   No:35985       
Title: 60章 視点を変える方法    
龍神録60章を改造して遊んでいるのですが、
東方星蓮船の3面の最初みたいに視点を動かして
左右にゆらゆら動くようにしたいのですが、
どうソースを変えたらそんな風になるでしょうか?



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


Name: Justy  ..伝説なるハッカー(384,325ポイント)   Date: 2009/07/01(水) 00:04   No:36028     
Title: Re:60章 視点を変える方法    
 東方星蓮船の3面がどうなっているのか見たことがないので知りませんが、
視点を動かすだけなら、CreateLookAtMatrixにカメラの位置とか向きとかを入れてビュー行列を作り、
SetTransformToView()でセットすればその位置と向きにカメラが向きます。

 それだけでは判りづらそうなので、3Dbackground.cppを改良した
適当なサンプルを作ってみました。


// カメラ位置
struct Camera
{
    VECTOR base_pos;
    VECTOR pos_offset;
    VECTOR base_target;
    VECTOR target;
    VECTOR up;
} camera;

// カメラ初期化
static void InitCamera()
{
    MATRIX cameraMatrix;
    GetTransformToViewMatrix(&cameraMatrix);
    camera.base_pos.x = -cameraMatrix.m[3][0];
    camera.base_pos.y = -cameraMatrix.m[3][1];
    camera.base_pos.z = -cameraMatrix.m[3][2];
    camera.pos_offset.x = camera.pos_offset.y = camera.pos_offset.z = 0;
    camera.base_target.x = camera.base_pos.x + cameraMatrix.m[2][0] * 100 + 25;
    camera.base_target.y = camera.base_pos.y + cameraMatrix.m[2][1] * 100;
    camera.base_target.z = camera.base_pos.z + cameraMatrix.m[2][2] * 100;
    camera.target = camera.base_target;
    camera.up.x = 0, camera.up.y = 1, camera.up.z = 0;
}

static void UdateCamera()
{
    const float range = 50;
    VECTOR r;
    r.x = -((float)(ch.x - FX) / (FMX - FX) * range - range*0.5f);
    r.y = ((float)(ch.y - FY) / (FMY - FY) * range - range*0.5f);
    r.z = 0.f;
    
    const float k = 0.04f;
    camera.pos_offset.x += (r.x - camera.pos_offset.x) * k;
    camera.pos_offset.y += (r.y - camera.pos_offset.y) * k;
    
    VECTOR pos;
    VectorAdd(&pos, &camera.base_pos, &camera.pos_offset);
    
    MATRIX cameraMatrix;
    CreateLookAtMatrix(&cameraMatrix, &pos, &camera.target, &camera.up);
    SetTransformToView(&cameraMatrix);
}

 あとは GV.hをインクルードした上で Ini3Dbackground関数のどこかで InitCamera()を、
Main3Dbackground()の先頭で UdateCamera()をコールしてあげてください。

 肝は CreateLookAtMatrix()の第2引数にカメラの位置を、第3引数にどこの位置を見るか
を指定してあげることです。

 これを頑張って改良していけば、そのうちゆらゆらするのも作れるかと思います。


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

Name: kai  ..ぴよぴよ(545ポイント)   Date: 2009/07/01(水) 14:06   No:36054     
Title: Re:60章 視点を変える方法    
>Ini3Dbackground関数のどこかで InitCamera()を、
>Main3Dbackground()の先頭で UdateCamera()をコールしてあげてください。
っていうのがちょっと言ってる意味が分からないのですが、どういうことなのでしょうか?
もうちょっと分かりやすく教えていただけたら幸いです。
それと
>CreateLookAtMatrix()の第2引数にカメラの位置を、第3引数にどこの位置を見るかを指定
とのことですが、どんな感じに指定すればいいのでしょうか?
簡単でいいですので例を挙げてもらえませんか?


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

Name: kai  ..ぴよぴよ(592ポイント)   Date: 2009/07/01(水) 14:21   No:36055     
Title: Re:60章 視点を変える方法    
ずみません。
>Ini3Dbackground関数のどこかで InitCamera()を、
>Main3Dbackground()の先頭で UdateCamera()をコールしてあげてください。
これは自己解決しました。


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

Name: kai  ..ぴよぴよ(631ポイント)   Date: 2009/07/01(水) 23:57   No:36089     
Title: Re:60章 視点を変える方法    
この視点は初期化できないんでしょうか?
最初からやり直すと
少しづつ右によって行くバグが発生するのですが・・
仕様なのかな?


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

Name: Justy  ..伝説なるハッカー(385,531ポイント)   Date: 2009/07/02(木) 00:41   No:36090     
Title: Re:60章 視点を変える方法    
 あー、FMX/FMYって位置じゃなくてサイズだったか。

 じゃ、

    r.x = -((float)(ch.x) / FMX * range - range*0.5f);
    r.y = ((float)(ch.y) - (FMY-FMY*3/4)) / FMY * range - range*0.5f;

 で。


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

Name: kai  ..ぴよぴよ(655ポイント)   Date: 2009/07/02(木) 01:19   No:36091     
Title: Re:60章 視点を変える方法    
??
試してみましたが特にバグは消えませんでした・・


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

Name: Justy  ..伝説なるハッカー(385,553ポイント)   Date: 2009/07/02(木) 01:28   No:36093     
Title: Re:60章 視点を変える方法    
「最初からやり直す」ってアプリそのものを起動し直すことですか?
それとも何かそういう方法が?

 そういう現象に遭遇しないのですが。


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

Name: kai  ..ぴよぴよ(849ポイント)   Date: 2009/07/02(木) 01:44   No:36094     
Title: Re:60章 視点を変える方法    
支館様のプログラムを活用したコンテニューです。
最初から始めるを選ぶとfunc_state = 99;になりゲーム初期化をする処理になるようにしてあります。
そのあと、ini();を呼びだしたのち、通常処理のfunc_state=100;にとぶようにしてあるのですが、
そのときコンテニューした場合、全画面の位置がやや右に移動してから起動してしまいます。
ふたたびコンテニューすると、もっと右に移動し、これを繰り返すと左側に桜の木と右側に黒画面しか
スクロールしない状況になります。


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

Name: kai  ..ぴよぴよ(900ポイント)   Date: 2009/07/02(木) 01:52   No:36095     
Title: Re:60章 視点を変える方法    
念のため、3Dbackground.cppに記述してあること自体が間違っている可能性もあるかも
しれないので添付しておきます


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

Name: Justy  ..伝説なるハッカー(385,731ポイント)   Date: 2009/07/02(木) 01:55   No:36096     
Title: Re:60章 視点を変える方法    

>最初から始めるを選ぶとfunc_state = 99;になりゲーム初期化をする処理になるようにしてあります

 そういう機能を入れた、ということですか。
 なるほど、であればだいたい理由はわかります。

 InitCamera()では起動直後の状態の情報を取得しているので、
2回目以降は不要な初期化が含まれています。

 なので、2回目以降は InitCamera()内の

    camera.pos_offset.x = camera.pos_offset.y = camera.pos_offset.z = 0;

の行だけ実行するようにしてください。


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

Name: kai  ..ぴよぴよ(972ポイント)   Date: 2009/07/02(木) 02:17   No:36097     
Title: Re:60章 視点を変える方法    
考えて色々やってみたのですが
camera.pos_offset.x = camera.pos_offset.y = camera.pos_offset.z = 0;
の行だけ2回目以降は実行するやり方というのが分からなく、うまくいきませんでした。
どうしたらいいのでしょうか?


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

Name: ねこ  ..上級者(18,597ポイント)   Date: 2009/07/02(木) 09:43   No:36105     
Title: Re:60章 視点を変える方法    
横から失礼します。
ただ2回目以降は呼ばないなら下記のようにすればいいだけじゃないでしょか。


static bool bCameraInit = false;
// カメラ初期化
static void InitCamera() {
if( bCameraInit == false ) {
// 既存処理
bCameraInit = true;
} else {
camera.pos_offset.x = camera.pos_offset.y = camera.pos_offset.z = 0;
}
}


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

Name: kai  ..ぴよぴよ(929ポイント)   Date: 2009/07/02(木) 13:53   No:36115     
Title: Re:60章 視点を変える方法    
ねこさん、ありがとうございます。
さっそくやってみたのですが、それだと最初っから画面が真っ暗になってしまうのですが・・


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

Name: ねこ  ..上級者(18,993ポイント)   Date: 2009/07/02(木) 14:09   No:36117     
Title: Re:60章 視点を変える方法    
えーっともしかして「//既存処理」のとこそのままにしてますか?
// 既存処理の所はJustyさんが張ったCameraInitの中を意味してるので
下の赤の部分を貼り付けて下さいね。

// カメラ初期化
static void InitCamera()
{

MATRIX cameraMatrix;
GetTransformToViewMatrix(&cameraMatrix);
camera.base_pos.x = -cameraMatrix.m[3][0];
camera.base_pos.y = -cameraMatrix.m[3][1];
camera.base_pos.z = -cameraMatrix.m[3][2];
camera.pos_offset.x = camera.pos_offset.y = camera.pos_offset.z = 0;
camera.base_target.x = camera.base_pos.x + cameraMatrix.m[2][0] * 100 + 25;
camera.base_target.y = camera.base_pos.y + cameraMatrix.m[2][1] * 100;
camera.base_target.z = camera.base_pos.z + cameraMatrix.m[2][2] * 100;
camera.target = camera.base_target;
camera.up.x = 0, camera.up.y = 1, camera.up.z = 0;

}


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

Name: kai  ..ぴよぴよ(981ポイント)   Date: 2009/07/02(木) 19:40   No:36134     
Title: Re:60章 視点を変える方法    
直りました!
ほんと、Justyさんとねこさんには感謝の気持ちでいっぱいです!
ありがとうございました。!これからもっと頑張って改良したいと思います!


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

Name: kai  ..かけだし(1,145ポイント)   Date: 2009/07/03(金) 02:55   No:36161     
Title: Re:60章 視点を変える方法    
最後に質問があるのですが
define.h内の
フィールドの左上の座標
#define FX 32を#define FX 128
にして中央に画面をセットしたら
背景がやや左側から流れるようになりました。
初期位置から見て、前にまっすぐに流れるように背景の位置を+96ずらしたいのですが
3Dbackground.cpp内の具体的にどこをいじったらいいのでしょうか?
分かる方がいたらぜひ教えてください。よろしくおねがいします。


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

Name: 通りすがり  ..上級者(17,148ポイント)   Date: 2009/07/03(金) 23:47   No:36198     
Title: Re:60章 視点を変える方法    
96?

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

Name: Justy  ..伝説なるハッカー(386,680ポイント)   Date: 2009/07/04(土) 01:19   No:36208     
Title: Re:60章 視点を変える方法    
試していませんが + 25をカット、かな。

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

Name: kai  ..かけだし(1,184ポイント)   Date: 2009/07/04(土) 14:36   No:36229 解決!     
Title: Re:60章 視点を変える方法    
おお!25を削除しただけで直りました。
Justyさんありがとうございます!


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



Name: 亀猫  ..かけだし(1,210ポイント)   Date: 2009/07/04(土) 00:52   No:36206       
Title: マップチップ    
こんばんは。お世話になってます。

マップを作成する時 16x16 でチップにして壁や道を組み合わせて作りました。

しかし、この方法だと int map[480]; と膨大な量になってしまいます。
しかも、どこが壁でどこが→を曲がる道か複雑になってしまいます。

マップの素材は First Seed Material というサイトのものを使っています。


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


Name: GPGA  ..熟練のプログラマー(64,140ポイント)   Date: 2009/07/04(土) 01:10   No:36207     
Title: Re:マップチップ    
>int map[480];
2KBもないわけですが、どの辺が膨大なのでしょう?

後、亀猫さんの文章はただの報告で、質問内容が何も書かれていません。


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

Name: 亀猫  ..かけだし(1,367ポイント)   Date: 2009/07/04(土) 01:22   No:36209     
Title: Re:マップチップ    
膨大という表現が間違ってました・・・。

横16、縦30で、合計チップ480なので、1 2 3 4 5 6 7 8 9....
17 18 19 20..........
.................480 となって、180チップ目の画像を探すのが面倒です。180チップ目の画像を簡単に見つける方法はありますか?


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

Name: GPGA  ..熟練のプログラマー(64,227ポイント)   Date: 2009/07/04(土) 01:35   No:36210     
Title: Re:マップチップ    
画像を探すのが面倒という意味がわかりません。

16x16のマップチップは一つ一つにIDが割り当てられていて
int map[480]というのは、実際の画面に表示するための領域ですよね?

180チップ目の画像はmap[179]で参照できるのでは?


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

Name: チルチル  ..プログラマー(27,814ポイント)   Date: 2009/07/04(土) 01:39   No:36211     
Title: Re:マップチップ    
マップチップがどういう物かよくわからないので
全然違うことを言ってるかもしれませんが

画像を簡単に見つける方法ならとりあえず座標から導き出してはどうでしょうか?

マップに使う画像が固定という前提の話ですが

配列を2次元配列にして同じ数だけ画像ハンドルを格納する配列を用意しておき
LoadDivGraph関数でマップチップのサイズに分割して
マップの要素番号と対応させて描画すれば楽だと思います

もしくはマップの画像を読み込み
DrawRectGraph関数で座標から使う部分を導き出すという事もできると思います


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

Name: 亀猫  ..かけだし(1,557ポイント)   Date: 2009/07/04(土) 02:38   No:36214     
Title: Re:マップチップ    
画像を載せていいのかダメなのかわからないので解決したら、消します。
この画像は 16x16で分かれています。 横16 縦30

この画像の一番左から123456789101213141516
17181920212223242526

と480個に分解できるのでその中の[180]番目の画像がマップのどの位置に来るのか一つ一つ数えていかないといけないので、面倒です。
簡単に見つけ出す方法はありますか?あれば教えてください・・・。
説明が下手ですみません。

画像を添付しようとしたのですがファイルの形式・・・がでて張れないのでごめんなさい。


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

Name: ねこ  ..上級者(19,866ポイント)   Date: 2009/07/04(土) 08:43   No:36215     
Title: Re:マップチップ    
ん〜と、とりあえず640x480の画像を16x30サイズで「横30x縦16」の480個取得している状態ですよね?
恐らく「LoadDivGraph」関数で。
そして、それに対応したマップの画像も二次元配列でなく、一次元配列の「int map[480];」で管理していると予測します。

その場合横30、縦16の分割なので以下のような方法でx,y座標が求められます。
int idx = 180
int x = (int)(idx % 30) * 32;
int y = (int)(idx / 30) * 16;

こういうのが知りたかったんじゃないでしょうか?違ってたらすいません。


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

Name: 亀猫  ..かけだし(1,576ポイント)   Date: 2009/07/04(土) 12:10   No:36220 解決!     
Title: Re:マップチップ    
解決しました!
返信してくださった方ありがとうございます。


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



Name: たま  ..ぴよぴよ(138ポイント)   Date: 2009/07/02(木) 21:58   No:36143       
Title: 変数の書く位置の好み    
変数の位置なのですが皆さんはAとBどちらで書きますか?
できれば理由も教えてくださると助かります(例:好みで〜など)

//A
int main(void){

int a=0;
a = 1;
printf("%d",a);

int b=0;
b = 1;
printf("%d",b);

return 0;
};
//B
int main(void){

int a=0;
int b=0;
a = 1;
b = 1;
printf("%d",a);
printf("%d",b);

return 0;
};


くだらない質問ですみません。


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


Name: チルチル  ..プログラマー(27,721ポイント)   Date: 2009/07/02(木) 22:06   No:36146     
Title: Re:変数の書く位置の好み    
私はBですね、同じような処理は1ヵ所にまとめておかないと後でわからなくなるので・・
まあ私の場合は

int main(void){
int a=1,b=1;
printf("%d",a);
printf("%d",b);
return 0;
};
みたいな感じで書くと思います
printfもまとめる派ですね


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

Name: 御津凪 [URL]  ..比類無きプログラマー(99,443ポイント)   Date: 2009/07/02(木) 22:43   No:36152     
Title: Re:変数の書く位置の好み    
私もBです。

理由は、C と C++ を両方書くからで、出来るだけの統一を考えて行ってます。
(あんまりやりませんが、C++ から C に書き直すのに手間は掛からなくなりますし)

ちなみに、私の場合は、
int main(void) {

int a = 0;
int b = 0;

a = 1;
b = 1;

printf("%d", a);
printf("%d", b);

return 0;
};


変数の定義と処理の間などに空白行を入れて見やすくしています。


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

Name: バグ  ..ハッカー(161,582ポイント)   Date: 2009/07/02(木) 22:49   No:36153     
Title: Re:変数の書く位置の好み    
私はAですね。
あとからソースを見直した時に、その場所よりも後で使用しているというのが確実なので、デバッグの際に多少ですが場所を絞りやすくなります。


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

Name: あ〜る  ..中級者(9,809ポイント)   Date: 2009/07/02(木) 22:50   No:36154     
Title: Re:変数の書く位置の好み    
僕もBですー
まぁ理由は二人とだいたい一緒です
定義は宣言と一緒にしちゃう時もあるし、関数ないで中身が変わるときはそのつど分かりやすいように書いてます。
まぁやっぱ自分が分かりやすいのが一番です

#二人っていうのはチルチルさんと御津凪さんです。バグさんとタイミングが被ってしまいわかりないとアレなんで追記


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

Name: non  ..熟練のプログラマー(52,433ポイント)   Date: 2009/07/02(木) 22:59   No:36155     
Title: Re:変数の書く位置の好み    
Bですね。基本使うのはCですから。
C++を使う場合でも、forのカウンタ変数などブロック内の
変数のときだけ、途中で宣言してます。



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

Name: ねこ  ..上級者(19,245ポイント)   Date: 2009/07/02(木) 23:37   No:36157     
Title: Re:変数の書く位置の好み    
僕はAですね。
付け加えるなら途中でしか使わない変数なら{}で囲って使用可能範囲を狭めます。

A派なので.cファイルで先頭にしか定義出来ない時がちょっとしんどいです。



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

Name: toyo  ..プログラマー(37,028ポイント)   Date: 2009/07/03(金) 06:12   No:36165     
Title: Re:変数の書く位置の好み    
Cしか書けないのでBです
プログラム書きながら新しく変数を追加するときはわざわざ関数の先頭に戻って宣言を追加しないといけないのがつらいところです。



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

Name: tkmakwins15  ..比類無きプログラマー(97,701ポイント)   Date: 2009/07/04(土) 00:10   No:36201     
Title: Re:変数の書く位置の好み    
Aです。(C++)
途中でreturnなどがある場合、それ以降のコードで作成する変数のコンストラクタが呼ばれないからです。


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



Name: KKXY  ..ぴよぴよ(577ポイント)   Date: 2009/06/30(火) 23:04   No:36020       
Title: 「2DゲームにおけるZ座標」について    
C++で「2DゲームにおけるZ座標」のプログラムを作ることはできないでしょうか?
「2DゲームにおけるZ座標」と言われても多くの人がわからないとおもいますが、
画像の情報の中に「Z座標」という変数があり、その変数が大きければ大きいほど
画像が手前に表示されるというものです。
RPGツクールのRGSSをいじったことがある人なら、すぐわかると思いますが・・・・。
このサイトの中にあったDitectXにはこのZ座標の制御をしてないので、
自分でプログラムをつくって制御しようと思ったのですが・・・。
「後で描画されたものほど手前に表示される」ことわかりましたので、
描画する画像の情報の中にZ座標の変数を入れて、そのZ座標の変数で描画の順番を制御しようと
思ったのですが、どうやればいいのかまったくわかりません。
一体どうやって制御したいかと申しますとまず、画像の情報に「どれだけ拡大縮小して描画するのか」
「どんな色調にするのか」という情報を入れたいため、画像を扱うためのクラスを作り、そのクラスの
メンバー変数には画像と色調や拡大縮小率などの「その画像をどう描画するのか」といった情報が入っている
メンバー変数とその画像を描画するために特別に用意されたメンバー関数があります。
 で、問題なのがそのメンバー関数の呼び出しの順番の制御なのですが・・・・・。
その順番をどうやれば制御できるのかさっぱりわかりません。しかもその画像を扱うためのクラスが
二種類もあるのです。

なんか説明がごちゃごちゃしてすみません・・・。要するにRPGツクールのRGSSの機能をC++で
再現したいということでRPGツクールのRGSSのヘルプを見れば自分が言いたいことが
よくわかると思うのですが・・・・。
 後、管理人さん、前に呼び捨てにしてすみませんでした。


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


Name: 御津凪 [URL]  ..比類無きプログラマー(97,944ポイント)   Date: 2009/07/01(水) 00:02   No:36027     
Title: Re:「2DゲームにおけるZ座標」について    
Z 座標=描画の優先順位
とすれば、呼び出し順序の処理方法が見えてくると思います。

つまり、 Z 座標が大きい順から画像の描画を行えば、
Z 座標が小さい画像が手前に来るようになります。

描画リストを用意し、そのリストで Z 座標が大きい順でソートを行い、
そのリストで描画を行えば簡単に実装できると思います。


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

Name: 山崎  ..上級者(17,280ポイント)   Date: 2009/07/01(水) 07:05   No:36037     
Title: Re:「2DゲームにおけるZ座標」について    
おはようございます。

今私が作っているゲームが、まさにその「Z軸のある2Dゲーム」ですね。
御津凪さんのおっしゃるとおり、オブジェクトはZ軸の大きさの順に描画しています。
正確に言えばZの値が小さいものから順に描画しています、
私はZ軸は手前の方向が+になるように設計しています。

私の場合は、オブジェクトは線形リストで管理しています。
線形リストなら、要素の追加や削除に結構自由が利きますしね。
(STLのリストを使わず、自分で双方向リストを作ったので制御が大変でしたが)
1フレームごとに線形リストを先頭から読み込んでいって、
Zの値でソートします。
そうすれば、次のフレームでは線形リストの先頭から順に描画していくだけで
遠くのものは先に、手前のものは後に描画することができます。

遠くにあるものほど小さく描画するのなら、
オブジェクトの大きさ(高さ、幅)をZの値で割ればいいと思います。
そうすれば、近くのあるものは大きく、遠くのものは小さく描画されます。
基本は「大きさをZで割る」でいいと思いますが、
微調整しないと表示されるオブジェクトが小さすぎたり大きすぎたりするかもしれません。
そこは、何度もデバッグで確認して調整するしかないですね。
ただ、私のゲームは遠近法は使ってないですが…。

RPGツクールをやったことが無いのでそれに関してはちょっと何も言えないですね。


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

Name: KKXY  ..ぴよぴよ(477ポイント)   Date: 2009/07/01(水) 21:20   No:36069     
Title: Re:「2DゲームにおけるZ座標」について    
>描画リストを用意し、そのリストで Z 座標が大きい順でソートを行い、
そのリストで描画を行えば簡単に実装できると思います。

そこまで考えたのですが
そのリストの作り方がどうもわからなくて・・・。


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

Name: 御津凪 [URL]  ..比類無きプログラマー(98,409ポイント)   Date: 2009/07/01(水) 23:16   No:36087     
Title: Re:「2DゲームにおけるZ座標」について    
突っ込んだ処理の説明をすると、

描画の順序を記憶するためのリストを準備し、
そのリストへ追加する時点で既にリストに追加されている描画情報から適切な位置に追加していくことで、
常にソートされたリストを構築することが出来ます。
ちなみに描画情報のデータは実際の描画クラスのインスタンスでも構いません。(前後関係が確認できるならOK)
そして、そのリストに登録されているデータを元に描画処理を行っていけば、求めている処理が出来ます。

山崎さんの仰るような、比較的処理の負荷の少ないリスト構造を扱う場合は比較的簡単ですし、
ここの掲示板では過去ログにはいくつかの話題に載っていますので、詳しいリストの構築方法はそちらを参考にしたほうが早いかもしれません。
(「線形リスト」や「双方向リスト」等で探すと引っかかりやすいです)


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

Name: KKXY  ..ぴよぴよ(557ポイント)   Date: 2009/07/02(木) 06:26   No:36101     
Title: Re:「2DゲームにおけるZ座標」について    
すみません、言い方間違えました。
「リストそのもの」の作り方ではなく、「インスタンス」のリスト、
または「クラスのリスト」の作り方がわからないのです。


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

Name: 山崎  ..上級者(18,030ポイント)   Date: 2009/07/02(木) 06:46   No:36103     
Title: Re:「2DゲームにおけるZ座標」について    
リストの作り方、ですね。

とりあえずSTLコンテナのlistを使うことをお勧めします。
明確な理由が無い限り、自分で線形リストを0から実装する必要もないでしょう。
STLコンテナを使えば、最初から基本的な機能はそろっていますしね。

とりあえず、「STLコンテナ」とは何かご存知でしょうか?
ご存じないのならばこちらのサイトなどを読んでみるとよいでしょう。先頭のhは抜いてあります。
ttp://www.geocities.jp/ky_webid/cpp/library/003.html

例えば、class Aというクラスがあったとしましょう。
STLコンテナのlistを使ったとするならば、クラスAのインスタンスを格納するリストは
list<A> listA;
このように宣言するといいでしょう。listAというのはそのリストにつけた名前です。

・・・それとも、STLコンテナを使わず自分でリストを実装したい・・・とかでしょうか?


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

Name: KKXY  ..ぴよぴよ(801ポイント)   Date: 2009/07/02(木) 16:33   No:36121     
Title: Re:「2DゲームにおけるZ座標」について    

>class Aというクラスがあったとしましょう。
STLコンテナのlistを使ったとするならば、クラスAのインスタンスを格納するリストは
list<A> listA;
このように宣言するといいでしょう。listAというのはそのリストにつけた名前です。

この方法でやってみた結果、描画クラスのリストを作ることができました。
後は描画リストをどうやって制御するのかということなのですが、そこでまた問題が
発生してしまいました。

それは描画クラスをどうやって描画リストに入れるかです。
一応、クラスを宣言する→宣言したクラスをリストにいれる、という方法で出来るのですが、
できれば宣言したと同時にクラスをリストの中に入れたいのです。
例にすると描画クラスAを宣言したときに、その時にはすでに描画リストにAというクラスが入っている
ということをしたいのです。

それと僕が2・3番目にした質問は「変数」のリストは宣言して作れても、
「クラス」のリストは宣言して作ることが出来ない、という
意味だったのですが・・・。説明不足だったのでしょうか・・・・。




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

Name: 御津凪 [URL]  ..比類無きプログラマー(98,590ポイント)   Date: 2009/07/02(木) 16:54   No:36124     
Title: Re:「2DゲームにおけるZ座標」について    
> できれば宣言したと同時にクラスをリストの中に入れたいのです。

(「宣言」ではなく「生成」なのでは?)

これは、コンストラクタの時にリストへ登録し、デストラクタが呼ばれたらリストから外す構造を持てば、
インスタンスが存在する間、必ずリストに追加されている状況を作れるはずです。
(ただし、リストが作られる前に描画クラスを生成することが出来なくなるので注意)


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

Name: KKXY  ..ぴよぴよ(930ポイント)   Date: 2009/07/02(木) 18:33   No:36132     
Title: Re:「2DゲームにおけるZ座標」について    
>これは、コンストラクタの時にリストへ登録し、デストラクタが呼ばれたらリストから外す構造を持てば、
インスタンスが存在する間、必ずリストに追加されている状況を作れるはずです。
(ただし、リストが作られる前に描画クラスを生成することが出来なくなるので注意)

まさにその通りのことをやりたいのですがそのやり方がわからないのです・・・・。

それと「宣言」ではなく「生成」だったのですね。
間違いを指摘していだたいてありがとうございます。


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

Name: 御津凪 [URL]  ..比類無きプログラマー(99,084ポイント)   Date: 2009/07/02(木) 18:53   No:36133     
Title: Re:「2DゲームにおけるZ座標」について    
list<A*> g_list;

class A{

A(){g_list.add(this);}
~A(){g_list.remove(this);}
};

こんな感じで出来ませんか?
(ちょっと変なコードですが)


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

Name: KKXY  ..かけだし(1,281ポイント)   Date: 2009/07/02(木) 21:47   No:36140     
Title: Re:「2DゲームにおけるZ座標」について    
やってみたらlistの生成の所で"Aは定義されていない識別子です"というエラー文が出て無理でした・・・。
そこで
クラスAの基底クラスとなるクラスBを作る→クラスBのリストを作る
→クラスBを継承したクラスAを作り、そのコントラクタにg_list.push_front(this);の構文を、
デストラクタにg_list.remove(this);の構文を入れる。
とやったら出来ました。
ただ、listに入っているクラスのメンバー関数を呼び出す方法がわかりません。
そこがわかれば完成すると思うのですが・・・。
それと出来ればこれ以外の方法があったら教えてもらえますでしょうか。
ちなみにadd(this)にしたらエラーが出ました。自分が持っているコンパイラは
この命令をサポートしていないのでしょうか・・・・。
なお、使っているコンパイラはvisual C++ 2008です。


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

Name: 御津凪 [URL]  ..比類無きプログラマー(99,566ポイント)   Date: 2009/07/02(木) 22:36   No:36149     
Title: Re:「2DゲームにおけるZ座標」について    
リストへの追加(add)と削除(remove)としてわかりやすく記述したので、実際のSTLの list には無い命令です。

上記で書いたコードだと、

list<A*> g_list;

の前に、

class A;

を書いておくとエラーが消えるはずです。

あと、格納したリストのデータにアクセスするには、
list<A*>::iterator p = g_list.begin();

while( p != g_list.end() ) {
(*p)->Draw();
++p;
}

といった感じで出来ますよ。
あと、適当な位置にデータを挿入するのも、この方法を使って insert すればできます。


> それと出来ればこれ以外の方法があったら教えてもらえますでしょうか。

となると、双方向リストを自分好みに作るか、プログラム側で描画順序を調整する(グループ分け等で)ぐらいになるかと思います。
後者の方は実装を注意すれば比較的簡単に実装できますが、グループ内の前後関係は維持できません。
しかし、それほど前後関係にこだわらないようなゲーム(ノベル系や2DのRPG系など)なら非常に有効です。


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

Name: KKXY  ..かけだし(1,310ポイント)   Date: 2009/07/03(金) 21:26   No:36194 解決!     
Title: Re:「2DゲームにおけるZ座標」について    
やってみたら作ることができました。
皆さん、どうもありがとうございました。


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



Name: vis3sock  ..ぴよぴよ(116ポイント)   Date: 2009/07/02(木) 15:31   No:36119       
Title: ハッシュ関数について    
今度初めて、ハッシュ関数を使ったスクリプトを作る事になりました。
まず、ハッシュって何?から始まって何となく理解はできたのですが
どう組んでいいのか検討が付きません。
どうか、アドバイスを頂けないでしょうか?

パケット内のMAC Addressを除く128byteをハッシュ値として
L2(RAWデータ) <- MAC Address以外全て
L3(IPv4,IPv6) <- 全て
のhashマスクを制作する。

これから、どうやってハッシュ関数を作ればいいのか分かりません。
糸口を下さい!よろしくお願いいたします


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


Name: 御津凪 [URL]  ..比類無きプログラマー(98,506ポイント)   Date: 2009/07/02(木) 15:52   No:36120     
Title: Re:ハッシュ関数について    
ハッシュ関数である MD5 や SHA 等でググると、ハッシュ関数の仕様や処理方法などが見つかりますよ。

Javascript を使ったハッシュ関数を見かけた覚えがありますので探してみてはどうでしょうか。


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

Name: vis3sock  ..ぴよぴよ(302ポイント)   Date: 2009/07/02(木) 17:18   No:36127     
Title: Re:ハッシュ関数について    
ありがとうございます。
今まで色々なHPを参考にさせて頂いたのですが
それでも理解出来なかったのでこちらに投稿させていただきました。

どう処理するロジックを組んだらいいのかが分からないんです。悲しい事に・・・

今回はCRC32 それと BObを使用するみたいです。

struct xdata {
  char key[32];  // キー
  int value;    // 値
  xdata* next;  // 次のデータへのポインタ
};
のようにハッシュテーブルを持ち、データ処理をさせるのでしょうか?
「どこを計算値として割り当てるのか?」
が、分かれば作れるといわれているのですがその値すらどう求めていったらいいのか
分かりません。


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

Name: 御津凪 [URL]  ..比類無きプログラマー(99,022ポイント)   Date: 2009/07/02(木) 18:16   No:36131     
Title: Re:ハッシュ関数について    
> どう処理するロジックを組んだらいいのかが分からないんです。悲しい事に・・・

こういうハッシュ関数などのアルゴリズムは、ここで書くよりも他のサイトに掲載されているところを見て覚えた方が理解が早いはずです。
CRC32 は、巡回冗長検査という名称で Wikipedia に載っていて非常に詳しい処理方法が書かれていますし、参考になるソースコードも外部リンクとして掲載されていますよ。
(外部リンク先は外国ですが、ソースコードを見る分には困らないはずです)

あと、BObってアルゴリズム名ですか?
検索しても暗号化の概要に出る、二者(Alice と Bob)の例題しか出てきませんでしたが…。


私は CRC はいじったことが無いので詳しく説明できませんが、
大体のハッシュ関数は、大まかに以下のような構造で処理を行っています。
// ハッシュ関数の作業データ

typedef struct MyHashData {
unsigned char data[8]; // ハッシュ出力結果(8バイト)
int cur; // 作業用
};

// ハッシュ関数の本体。
void my_hash(MyHashData* hash, int size, unsigned char* data){
int i;
for(i = 0;i < size;++i){
hash->data[hash->cur] += data[i];
hash->cur = (hash->cur + 1) & 7;
}
}
(即席で作ったハッシュ関数。被りやすく、偏ったハッシュ値を生成するので実用性はまったく無いです^^)

ハッシュ関数は基本、作業用変数とハッシュ値出力用のデータ、ハッシュ値計算用の関数群で構成され、
(上記の例には書いてませんが)作業用変数の初期化と、ハッシュ関数へのデータを渡し終わった後の処理が含まれるものもあります。


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

Name: vis3sock  ..ぴよぴよ(586ポイント)   Date: 2009/07/03(金) 11:32   No:36170     
Title: Re:ハッシュ関数について    
Hashに関するHP等を教えて頂いてありがとうございます。
御津凪様の書いて下さった
例文もすごいわかりやすくて、HP見てても相変わらず何をする為の処理か
とか分からないままなんですが、少し理解できるようになれました。

おはずかしいのですが、
1.フレームの先頭から Source,Destination,MAC Addressを除く
2.IP Payload先頭から全て計算に用いる(ALL 1)

とは、どういった値を128byteのハッシュ値としていくのでしょうか?

※Bobは、暗号キーとしてしか認識がないのですが
CRC32と同列になる関数なんだそうです。
参考になるか分からないんですが一応URLを
http://www.ops.ietf.org/lists/psamp/psamp.2005/msg00011.html


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

Name: 御津凪 [URL]  ..ハッカー(100,118ポイント)   Date: 2009/07/03(金) 13:45   No:36171     
Title: Re:ハッシュ関数について    
CRC32 は比較的簡単な構造のハッシュ関数だったので、他の方のソースコードを参考に書いたコードを
こちらで添付しておきましたので参考にしてみてください。

> ※Bobは、暗号キーとしてしか認識がないのですが
> CRC32と同列になる関数なんだそうです。

出来ればもう少し詳しい部分(ソースコードなど)がわかれば、ある程度解説などの説明が出来るのですが…。
(少なくとも日本のサイトには見当たりませんでした)

もしかしたら"Bob"って、共通鍵暗号等の暗号キーのことだったりしませんか?
上記にも書いた、 Alice と Bob の話は、暗号化の原文から登場しているそうですし、
その中の暗号キーにも"Bob"が使われてたりしてます。

あと、"128byteのハッシュ値" のことでひとつ確認ですが、
CRC32 は 4byte(32bit) の値しか出しません。
どのようにして "128byteのハッシュ値" を算出するのでしょうか?

提案(出題?)者がいれば確認を取ってみてください。
(ちなみに MD5 は 128bit のハッシュ値を、 SHA-1 は 160bit のハッシュ値を算出します)



> 1.フレームの先頭から Source,Destination,MAC Addressを除く
> 2.IP Payload先頭から全て計算に用いる(ALL 1)

このあたりは…すみません。私はそこはやったことが無いので詳しくはわからないです。
他の方に知識をお分けしてもらうしか…。
(ハッシュ関数には直接関係のない部分ですし)


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

Name: Mist  ..熟練のプログラマー(65,380ポイント)   Date: 2009/07/03(金) 14:40   No:36172     
Title: Re:ハッシュ関数について    
http://www.picfun.com/lan06a.html
http://hp.vector.co.jp/authors/VA027424/tcp_ip/index.html

まず、上記のようにIPのフレームフォーマットは理解されておられますか?

> 128byte

128bitの間違いじゃないですか?
で、128bitだと仮定して

> 1.フレームの先頭から Source,Destination,MAC Addressを除く

をストレートに解釈してイーサネットヘッダとIPヘッダから上記の物を除くと112bit(14byte)としかないですけどね。
足りない部分は固定の値でパディングするのでしょうか?
もしくは、IPヘッダから送信元IPか送信先IPのいずれか一方だけを除外するということでしょうかね。
それだと、128bitにはなりますね。
提示されている情報だけだとこれ以上は判らないです。

> 2.IP Payload先頭から全て計算に用いる(ALL 1)
2個目のページを見てもらえれば説明不要かと思います。


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

Name: vis3sock  ..ぴよぴよ(845ポイント)   Date: 2009/07/03(金) 19:02   No:36190 解決!     
Title: Re:ハッシュ関数について    
御津凪 様
ソースありがとうございました!
シンプルで分かり安くて真似て処理プログラム作成してみます
ありがとうございます

>どのようにして "128byteのハッシュ値" を算出するのでしょうか?
1bitづつハッシュ関数に渡して計算させるようになります

>"Bob"って、共通鍵暗号等の暗号キーのことだったりしませんか?
ハードが計算処理して下さるようになったのですが、
共通鍵の暗号キーでまさしく御津凪 様の言うとおりのようです。


Mist 様
提示してくださったURLを見て、ずっと私自身がIPヘッダを見てて、
勘違いしていた事がわかりましたありがとうございます。

1は、MACヘッダ内でSource MAC Address,Destination MAC Address,以外の
部分をhashマスクとして使用し、全bitを立てる処理(bit立ってなかったら立てる)
ようにするマスク処理だったようです。
仕様を勘違いしてました。

> 2.IP Payload先頭から全て計算に用いる(ALL 1)
(このHPわかりやすい!)の通りでした


ハッシュに渡す値の算出方法までお伺いしてしまって(更に分かりにくいものに)
すみませんでした。




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



Name: sora  ..ぴよぴよ(122ポイント)   Date: 2009/07/02(木) 13:40   No:36114       
Title: ベーシックをC言語に・・・    
ベーシックで書かれたプログラムをC言語に直して実行しなさい、という問題を出されてしまったのですが、
ベーシックの知識が全くなく、C言語でのプログラミングも苦手なためまったくわかりません。
ベーシックで書かれたプログラムは以下のとおりです。

CLS
RANDOMIZE TIMER
h = 10
DIM a(h)
m = 0: v= 0: n = 1000
PRINT " 0.5 1.5 2.5 3.5 4.5 5.5 6.5 7.5 8.5 9.5"
PRINT " ---------------------------------------"
FOR k = 1 TO n
i = INT(RND(1) * h)
a(i) = a(i) + 1
NEXT k
FOR k = 0 TO h - 1
m = m + (k + .5) * a(k)
a(k) = a(k) / n
NEXT k
m = m / n
FOR k = 0 TO h - 1
PRINT USING "###.##"; a(k);
v = v + (k - .5 - m) ^ 2 * a(k)
NEXT k
PRINT
PRINT "平均"; m: PRINT "分散"; v: PRINT "標準偏差"; SQR(v)
END

ベーシックの知識のある方など、わかる方がいらっしゃれば力を貸していただけないでしょうか。
よろしくお願いします。


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


Name: バグ  ..ハッカー(161,495ポイント)   Date: 2009/07/02(木) 13:56   No:36116     
Title: Re:ベーシックをC言語に・・・    
ちなみにCの知識はどの程度ですか?
BASICのプログラムとはいえ、初歩的な物ですし、多少でもCを知っていれば、なんとなく予想できそうな内容ですが…
全く分からないのであれば、問題を出した人に聞くか、入門サイトは入門書などで勉強してください。
そうでないなら、自分でどこまでやっていて、ここが分からないという感じに疑問点を明確にしてください。


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

Name: やそ  ..比類無きプログラマー(93,402ポイント)   Date: 2009/07/02(木) 14:39   No:36118     
Title: Re:ベーシックをC言語に・・・    
バグさんもおっしゃっているように、BASICのプログラムも非常に初歩的なものですね。
FORとかPRINTとかはCでも同様の命令がありますから想像できますよね?

ttp://ja.wikipedia.org/wiki/BASIC

配列の宣言をDIM文で行っています。
乱数の種をTIMERにより時間から取っているのも想像に難くないですね。
CLSは多分画面消去(CLEAR SCREENの略だったかと)

PRINT USINGは書式付出力
RNDは乱数生成

BASIC 命令一覧

とかのキーワードで調べて御覧なさい^^

まずはそれから〜



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

Name: sora  ..ぴよぴよ(215ポイント)   Date: 2009/07/03(金) 15:10   No:36173     
Title: Re:ベーシックをC言語に・・・    
知識は乱数が少しわかる程度です・・・

いろいろと調べてやってみたのですが、

FOR k = 1 TO n
i = INT(RND(1) * h)
a(i) = a(i) + 1
NEXT k

この部分でループをさせる理由が分からないのです・・・
実際実行しても、エラーが出て結果が出てくれません・・・


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

Name: ねこ  ..上級者(19,434ポイント)   Date: 2009/07/03(金) 15:59   No:36178     
Title: Re:ベーシックをC言語に・・・    
BASICやってるわけじゃないのであくまで「予測」ですが
INT(RND(1)*h)は RND(1)で0.0〜1.0の乱数を取得し、h(10)かける事で配列の添え字を決めています。
乱数関数はCではrandでいいのかちょっと自信ないですが


for( int k = 0; k < n; k++ ) {
i = rand() % 10;
a[i] = a[i] + 1;
}


こういうことなんじゃないかと思います。


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

Name: non  ..熟練のプログラマー(52,433ポイント)   Date: 2009/07/03(金) 16:01   No:36179     
Title: Re:ベーシックをC言語に・・・    
nは1000ですから1000回繰り返している
RND(1)は0〜1未満の乱数の発生なのでh倍すなわち10倍すれば
0から10未満の数になる。これをINTすれば0から9までの整数になる。
a(i) = a(i) + 1 は、配列の中身を1つ増やしているので、結局
1000回乱数を発生させ、a(0)〜a(9)までの、データにその発生回数を
格納しているってことでしょうか。
この後、この乱数で出たデータの平均や分散を求めてます。

>実際実行しても、エラーが出て結果が出てくれません・・・
これは、BASICで実行したときですか?それともC言語?
いずれにしても、何というエラーですか?

それにしても、これはゼミでの課題ですか?
BASICを授業で教えていないのに、Cに変換しろってのが、疑問です。


Name: やそ  ..比類無きプログラマー(93,495ポイント)   Date: 2009/07/03(金) 16:10   No:36180     
Title: Re:ベーシックをC言語に・・・    
理由・・・

それは後の計算をするためにはその素となるデータが必要だと思います。
そのデータを配列aに作成しているのだと思います。
1000回ループということは、1000個のデータ(サンプル)が必要だったんでしょう。

エラーについてはどんなエラーかわからないので答えようがありませんが、
BASICならたいていはsyntax error じゃないですか?


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



Name: junta  ..ぴよぴよ(931ポイント)   Date: 2009/07/02(木) 23:29   No:36156       
Title: プレイヤーの移動のときのグラフィックについて    
いつもお世話になっています。少し分からないことがあったので質問させていただきます。

キャラの移動グラフィックのことなのですけど、東方などの場合、右に移動したら足が滑らかに動くのですが、
自分の場合、どんな方法を試してみても、右に移動したら、カク!って感じになってしまうのですが
どうしたらよいのでしょう。 (何言ってんだか説明下手ですみません)

ちなみにプレイヤーの画像は、横7枚×縦3枚で、一枚のサイズが48×40の、全部で22枚あるグラフィックです


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


Name: あ〜る  ..中級者(9,950ポイント)   Date: 2009/07/02(木) 23:38   No:36158     
Title: Re:プレイヤーの移動のときのグラフィックについて    
よ〜〜く見たらわかるんですが、東方の場合キャラの足が動き切った画像と動いてない画像の間に一枚足が動いてる最中の画像があります(少なくとも妖々夢の咲夜さんでは)
なので滑らかにしたかったら、↑のようにするか足の動きを少なくすればいいと思います
ただゲームをやってる時はあんまキャラに注目しないんで、よっぽど酷くない限り目立たないと思いますよ(^-^)


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

Name: 御津凪 [URL]  ..比類無きプログラマー(99,680ポイント)   Date: 2009/07/03(金) 00:01   No:36159     
Title: Re:プレイヤーの移動のときのグラフィックについて    
私は一番新しいほうの霊夢の自機を模写していたとき(サンプル館にあるアレ)、下記のような動きをしているのを確認しました。

・通常時(未操作時)は8枚のアニメーション(約6フレーム刻み)、
・左右に移動する瞬間は3枚のアニメーション(1フレーム刻み)が入り、
・左右時のループアニメーションは4枚(約6フレーム刻み)、
・通常時に戻るときは左右移動のアニメーションの逆再生を使用。
(ちょうど22枚)

これを私のほうで何とか再現は出来たのですが、
アニメーション用のカウンタと、左右入力時のカウンタを追加することで可能ですよ。


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

Name: junta  ..ぴよぴよ(888ポイント)   Date: 2009/07/03(金) 15:55   No:36176 解決!     
Title: Re:プレイヤーの移動のときのグラフィックについて    
なるほど(。。)アニメーション等を自分で作れば良いのですか・・・勉強になります!

御2人様どうも有難う御座いました!早速試してみたいと思います
有難う御座いました!


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



Name: sood  ..かけだし(2,223ポイント)   Date: 2009/07/01(水) 23:02   No:36083       
Title: プログラミング本編での第四章が表示されない    
http://dixq.net/rp/

第四章のキャラの表示で、
左上に画像が表示されるはずなのですが、
なぜか表示されません。

これは設定の問題なのでしょうか?
それともソースの写し間違えでしょうか?コピペなのですが・・・


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


Name: デラ初心者  ..かけだし(1,500ポイント)   Date: 2009/07/02(木) 17:55   No:36130     
Title: Re:プログラミング本編での第四章が表示されない    
自分も初心者で明確な回答が出来ないかもしれませんが・・・
struct.hやload.cppに書き忘れなどありませんか?
エラーでないんでしたら画像がないなど考えられます
エラーならエラー文を載せてくれれば解ると思います


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

Name: Dixq (管理人) [URL]  ..ウィザード(1,039,702ポイント)   Date: 2009/07/03(金) 06:19   No:36167     
Title: Re:プログラミング本編での第四章が表示されない    
最近DLが完全に出来ていないトラブルが多いようです。
描画しようとしている画像がフォルダにあるかどうか確認してみて下さい。


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



Name: Rajan  ..ぴよぴよ(8ポイント)   Date: 2009/07/03(金) 03:08   No:36162       
Title: 無題    
for 分 わからない

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


Name: kazuoni [URL]  ..比類無きプログラマー(92,921ポイント)   Date: 2009/07/03(金) 03:44   No:36163     
Title: Re:無題    
基礎をまとめていらっしゃるページはたくさんあるので、
ググってみてください。

あと、質問なのか、雑談なのか・・・
自分にはいまいちつかみとれませんが、
もっと具体的に、for文を使っているうえで、何がわからないのか、
などを明記すると、もし質問の場合、
自分の求めている回答が得られると思います。

詳しくは、利用規約をご覧下さい。


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

Name: 山崎  ..上級者(18,188ポイント)   Date: 2009/07/03(金) 06:08   No:36164     
Title: Re:無題    
36111の記事に投稿者名も記事の内容も酷似していますね。
for文に関してのアドバイスは既にそちらの記事にもいくつか返信があるので、
新しい記事を立ち上げずにそちらを読んではいかがでしょう。

・・・しかし、いくらなんでも質問の内容が雑すぎるのではないでしょうか・・・。
これでは、荒らしや成りすまし、悪意ある書き込みと思われても仕方ないと感じてしまいます。


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



Name: ...  ..かけだし(1,641ポイント)   Date: 2009/06/28(日) 16:44   No:35909       
Title: キーフックについて    
キーフックでアルファベットを検出すると、大文字小文字関係なしに0x41〜0x5Aになりますょね。
これってフックプロシージャの中で大文字と小文字を区別しようとしてもできないってことなんでしょうか??
シフトが押されている場合とかで分けようと思ったのですが、フックプロシージャにおける同時に押されている場合の処理の方法もわかりません。。。
例えば小文字の場合-32(大文字に変換)して返す、大文字の場合+32(小文字に変換)して返す。
といった処理をする場合どのように書けばよろしいのでしょうか??
無知で申し訳ありません。お願いします。


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


Name: Justy  ..伝説なるハッカー(381,872ポイント)   Date: 2009/06/28(日) 17:37   No:35914     
Title: Re:キーフックについて    
 GetKeyboardStateで調べれば Caps/Shiftの押下状態がわかるので、
そこから判定してはどうでしょうか。


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

Name: ...  ..かけだし(1,751ポイント)   Date: 2009/06/28(日) 17:56   No:35915     
Title: Re:キーフックについて    
>>Justyサン
回答ありがとうございます。
確かにShift+アルファベットならそれでわかりますが、Caps Lockが付いているかはどうかってどうやって判断したらよいのですか??
あと中で文字を加工して返すというのはどうやればよいのですか??


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

Name: Justy  ..伝説なるハッカー(382,060ポイント)   Date: 2009/06/28(日) 18:34   No:35917     
Title: Re:キーフックについて    

>Caps Lock

 VK_CAPITAL



>文字を加工して返すというのはどうやればよいのですか

 大文字・小文字変換であれば標準関数の toupper/tolowerで
変換して、受け渡し用の変数か関数に引き渡せばいいかと思います。


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

Name: ...  ..かけだし(1,875ポイント)   Date: 2009/06/28(日) 19:10   No:35919     
Title: Re:キーフックについて    

プログラムが始まる前にCaps Lockがついている場合も同じようにキーが押されている状態になっているのですか??

フックプロシージャ内で得られる情報は仮想キーコード(0x41〜0x5A)だけなのでその辺の関数は意味がないのですが。。。。。
ASCIIコードで取得できますか??


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

Name: Justy  ..伝説なるハッカー(381,961ポイント)   Date: 2009/06/28(日) 19:34   No:35920     
Title: Re:キーフックについて    

>プログラムが始まる前にCaps Lockがついている場合も同じように
>キーが押されている状態になっているのですか

 フックプロシージャの WPARAMの仮想キーコードではなく、
GetKeyboardStateとか GetKeyStateの方から VK_CAPITALの情報を拾えば
取得できるはずですよ。

 あと、0-9の数字、A-Zのアルファベットに対応する仮想キーコードと ASCIIコードは
一致します。

仮想キーコード
ttp://yokohama.cool.ne.jp/chokuto/urawaza/prm/virtual_key_code.html

 仮に一致しなかったとしても、変換テーブルを書くなり、if/switchで判定すれば
変換することは容易でしょう。


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

Name: ...  ..かけだし(2,033ポイント)   Date: 2009/06/28(日) 21:00   No:35929     
Title: Re:キーフックについて    



取得するときはプロシージャ内でShiftが押されているかどうかを判断して
押されていれば大文字というふうに、こちら側が判断して取得できますが、
文字をCallNextHookEx()に渡すときは結局仮想キーコードのみをWPARAMとして渡すわけなので
パソコンがどのようにして大文字と小文字を判断しているのかに合わせて処理をしなければいけないと思うのですが。。。
ついでにAは0x41で一致していますが、aは0x61。これはテンキーの1あたりに来ます。toupper()などを使うとそうなると思います。


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

Name: Justy  ..伝説なるハッカー(382,192ポイント)   Date: 2009/06/28(日) 23:38   No:35952     
Title: Re:キーフックについて    

>文字をCallNextHookEx()に渡すときは結局仮想キーコードのみを
>WPARAMとして渡すわけなのでパソコンがどのようにして大文字と小文字を
>判断しているのかに合わせて処理をしなければいけないと思うのですが

 どういう状態を想定して、最終的に何をしたいのでしょうか。
 意味がよくわかりません。

 送られてきた WPARAMの仮想キーコードがアルファベットの時、
それが大文字になるか小文字になるかをプロシージャ内で判定できればいいのですよね?

 CAPS/SHIFTの状態からでは大文字と小文字を判断出来ないということでしょうか?
(IMEがオンだとそちらの状態に引きずられるので、100%の判定はこの方法では無理ですが)


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

Name: ...  ..かけだし(2,045ポイント)   Date: 2009/06/29(月) 18:17   No:35965     
Title: Re:キーフックについて    

大文字小文字の判定だけでなく、最初に書いてあるとおり大文字が入力されたら小文字を返し、大文字が入力されたら小文字を返す。
といったことがしたいのです。


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

Name: Justy  ..伝説なるハッカー(382,371ポイント)   Date: 2009/06/29(月) 23:07   No:35978     
Title: Re:キーフックについて    

>大文字が入力されたら小文字を返し、大文字が入力されたら小文字を返す

 えーと、判らないのは「どこへ返すか」です。
 普通に考えれば、関数の呼び出し元に戻り値か何かで返したいかなということになりますが、
プロシージャではそういうことではないでしょうし……。

 ひょっとしてやりたいことは「返す」というか、
Windowsアプリが受け取る文字を偽装(この場合は 大文字小文字)したい、
ということだったりしませんか?


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

Name: ...  ..かけだし(2,053ポイント)   Date: 2009/06/30(火) 18:08   No:36004     
Title: Re:キーフックについて    
あぁ、そういうことです!!

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

Name: Justy  ..伝説なるハッカー(383,314ポイント)   Date: 2009/06/30(火) 21:32   No:36011     
Title: Re:キーフックについて    
 理解できました。

 ということはこんな感じでしょうか。


LRESULT CALLBACK KeyboardHookProc(int code, WPARAM wp, LPARAM lp)
{
    if(code >= 0 && code != HC_NOREMOVE)
    {
        if(wp >= 'A' && wp <= 'Z')
        {
            int invCase = GetKeyState(VK_SHIFT) < 0? 1: 0;
            if(GetKeyState(VK_CAPITAL) & 1)
                invCase = !invCase;
            
            PostMessageA(hWnd, WM_CHAR, (WPARAM)(invCase? tolower(wp): wp), lp);
            return -1;
        }
    }
    return CallNextHookEx(hHook, code, wp, lp);
}

 A-Zなら Caps/Shiftの判定を行い、反転させたものを PostMessageで送信し、
それ以外なら何もしません。

 これで押したキーがアルファベットなら WM_CHARメッセージに反転された情報が送られます。


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

Name: ...  ..かけだし(2,390ポイント)   Date: 2009/07/02(木) 16:40   No:36122     
Title: Re:キーフックについて    
ありがとうございますw
C言語なので自分なりに少し改良しましたが、もうひとつ問題ができました。

LRESULT CALLBACK HookProc
(int nCode, WPARAM wp, LPARAM lp)
{
BOOL invCase;
if (nCode<0) return CallNextHookEx(hHook,nCode,wp,lp);
if (wp>='A' && wp<='Z') {
invCase=(GetKeyState(VK_SHIFT)&0x80)?TRUE:FALSE;
if (GetKeyState(VK_CAPITAL)&0x80) invCase=(invCase)?FALSE:TRUE;
PostMessage(ghEdit,WM_CHAR,(WPARAM)((invCase)?tolower(wp):wp),lp);
return TRUE;
}
return CallNextHookEx(hHook,nCode,wp,lp);
}

これを実行するとキー入力が二回拾われてしまうのです。
つまりWM_KEYUPとWM_KEYDOWN。これをWM_KEYDOWNのみ回避するとかってできますか??
二回に一回キーを拾うという方法だと押しっぱなしの時の動作が少しおかしくなりそうなので↑の方針でお願いします。


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

Name: Justy  ..伝説なるハッカー(385,795ポイント)   Date: 2009/07/02(木) 21:50   No:36142     
Title: Re:キーフックについて    
 じゃぁ、lpの最終ビットをチェックしてみてはどうでしょう。

KeyboardProc 関数
ttp://msdn.microsoft.com/ja-jp/library/cc430012.aspx


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

Name: ...  ..かけだし(2,445ポイント)   Date: 2009/07/02(木) 22:11   No:36148 解決!     
Title: Re:キーフックについて    
(lp&(1<<31))?'1':'0'で判定してみたところ
キーダウンのときが0で、押され続けている間も0、キーアップだけが1みたいですね。
ありがとうございましたw
本当に助かりました!!


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



Name:  ..入門者(3,126ポイント)   Date: 2009/07/01(水) 18:57   No:36061       
Title: BITMAP画像を表示する方法    
[1] 質問文
 [1.1] 目的: 一般のプログラム(コンソールアプリではない)に画像を表示すること
 [1.2] 行ったこと: 色々なHPのサイトのサンプルをコピペしてコンパイルしたり、
      「猫でもわかるwindowsプログラミング」という本についていたサンプルコードを
      そのままコンパイルしてみました。
 [1.3] 現状: サンプルをコピペしてもウィンドウは出るのですが、画像が表示されません。
 [1.4] 知りたいこと: CALLBACK WndProc関数内のWM_PAINTにコピペして再現するためのコード
      それを実行するために宣言するべき変数、そのた.hや.rcのファイルを書かなければ
      ならないなら、それの最低限の内容。
       windows.hだけで済むようにしたいです。
[2] 環境  
 [2.1] OS : windowsXp,Vista
 [2.2] コンパイラ名 : Microsoft Visual Studio 2008

テンプレに当てはめただけなので大変読みづらいと思いますが、
よろしくお願いします。


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


Name: GPGA  ..熟練のプログラマー(64,092ポイント)   Date: 2009/07/01(水) 19:48   No:36065     
Title: Re:BITMAP画像を表示する方法    
BMPファイルをドラッグ&ドロップすると、表示されます。

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

Name:  ..入門者(3,160ポイント)   Date: 2009/07/02(木) 20:00   No:36135 解決!     
Title: Re:BITMAP画像を表示する方法    
読みやすいコードでどの関数が何を行っているのか
わかりやすかく、すぐに理解し応用することが
できました。ありがとうございました。


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



Name: デラ初心者  ..かけだし(1,097ポイント)   Date: 2009/07/02(木) 11:45   No:36109       
Title: 19番目のエラー    
また質問させていただきます
19番目のエフェクトを作ってみようでこんなエラーがでます
effect.cpp(1) : fatal error C1083: include ファイルを開けません。'../include/GV.h': No such file or directory
ファイルが開けないようですが
どうすればいいんでしょうか?


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


Name: ねこ  ..上級者(18,583ポイント)   Date: 2009/07/02(木) 12:07   No:36110     
Title: Re:19番目のエラー    
No such file or directory
※意味:指定されたファイル、またはディレクトリがありません。

1.ファイルの有無を確認する
2.ファイルが無い場合、どこかに同名のファイルが無いか探す
3.あった場合、指定されたパスの場所に置いてみる

このエラーが出た時はこんな手順でファイルの有無と場所の確認をします。
どこにも無い場合はプロジェクトの不備か、DL時に壊れてしまっていないかを確認
ってとこでしょうか。


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

Name: デラ初心者  ..かけだし(1,247ポイント)   Date: 2009/07/02(木) 16:40   No:36123     
Title: Re:19番目のエラー    
dat/img/enemy/hit_effect.png
にあればいいんですよね?

effectをsourceの中に入れたらエラーは無くなりましたが
右記のグラフィックファイルのロードに失敗しました:dat/img/enemy/hit_effect.png
とでますがソースファイルが間違ってるのでしょうか?
読み込みのソースはload.cppファイルに書くのでしょうか? 
一応ソース(load.cpp)を載せておきます


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

Name: pooka [URL]  ..初心者(8,542ポイント)   Date: 2009/07/02(木) 16:55   No:36125     
Title: Re:19番目のエラー    
>LoadDivGraph( "dat/img/enemy/hit_effect.png" , 5 , 5 , 1 , 140 , 140 , img_del_effect ) ;
LoadDivGraph( "../dat/img/enemy/hit_effect.png" , 5 , 5 , 1 , 140 , 140 , img_del_effect ) ;
ではないでしょうか?


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

Name: ねこ  ..上級者(19,215ポイント)   Date: 2009/07/02(木) 17:02   No:36126     
Title: Re:19番目のエラー    
pookaさんが答えられてる通りだと思います。

後こちらも19章をコンパイル、起動した時点で何も問題は起こりませんでした。
以前の質問時「色々試したのですが〜」とありましたが、触っちゃいけないところまで触ってる可能性って無いですか?
全部試したわけではないですが、基本的に「開く」「コンパイル」「起動」の手順の時点でエラーが起きる事はないと思います。
触ったか分からないならプロジェクトを再度落として一新すると今後つまづく事が減るかもしれませんよ。


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

Name: pooka [URL]  ..初心者(8,616ポイント)   Date: 2009/07/02(木) 17:26   No:36128     
Title: Re:19番目のエラー    
龍神録プログラミングの館を見ながらやってるのでしょうか?
19章を見てみると../が書いてなかったので・・・
他の章でも../が書いてない所があるようなので、適宜補う必要があるかもしれません。


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

Name: デラ初心者  ..かけだし(1,403ポイント)   Date: 2009/07/02(木) 17:39   No:36129 解決!     
Title: Re:19番目のエラー    
回答ありがとうございます
ねこさんの触っちゃいけないところまで触ってる可能性って無いですか?>多分余計なことをしているかもしれません
触ったか分からないならプロジェクトを再度落として一新すると今後つまづく事が減るかもしれませんよ。>
そうですよね・・・今度からそうしてみます!!

pooka>龍神録を見ながらやってます
確かに書いてないですね

/を入れたらできました

また質問するときは
よろしくお願いします



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



Name: らじゃん  ..ぴよぴよ(9ポイント)   Date: 2009/07/02(木) 12:14   No:36111       
Title: 無題    
こんにちは。

for文の使い方が分かりません


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


Name: trtr  ..ぴよぴよ(3ポイント)   Date: 2009/07/02(木) 12:38   No:36112     
Title: Re:無題    
C言語の入門サイトはいっぱいあるから、
ここに書き込むのはそれなりに調べてからのほうがいいよ…。


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

Name: やっくん  ..中級者(11,227ポイント)   Date: 2009/07/02(木) 12:42   No:36113     
Title: Re:無題    
for文は繰り返し行いたい処理をする場合に使います。

for( 初期値 ; 条件式 ; 処理を終えた後の増減){
//処理
}

のような流れになっています。

例えば、


int i;

for(i = 0; i <= 10; i++){
printf("hello,world\n");
}


中身を見てみますと、
・i = 0 iは0からスタート。
・i <= 10 iが10以下の間、処理を繰り返す。
・i++ 処理を終えたらi = i + 1をする。もしここでiが10を超えたらループを抜けます。

<処理順序>
1,i = 0 は10より小さいのでhello,worldを出力。
2,処理を終えたのでi++してi=1になる。
3,i = 1 は10より小さいのでhello,worldを出力。

-中略-

4,i = 10 は10より小さいのでhello,worldを出力。
5,処理を終えたのでi++してi=11になる。
6,i = 11 は10以下では無いのでループを抜ける。

下手な説明ですみません;
これで分かりましたでしょうか。</font>


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



Name: デラ初心者  ..ぴよぴよ(956ポイント)   Date: 2009/07/01(水) 20:56   No:36066       
Title: 17番目のエラー    
また質問です。
17番目のソースをビルドするとエラーがでます
1章\mydat\source\cshot.cpp(56) : error C2039: 'shot_cnt' : 'ch_t' のメンバではありません。
1章\mydat\include\struct.h(2) : 'ch_t' の宣言を確認してください。
1章\mydat\source\cshot.cpp(57) : error C2039: 'shot_cnt' : 'ch_t' のメンバではありません。
1章\mydat\include\struct.h(2) : 'ch_t' の宣言を確認してください。
1章\mydat\source\cshot.cpp(65) : error C2039: 'shot_cnt' : 'ch_t' のメンバではありません。
と出てきます
'ch_t' の宣言とは
typedef struct{
int flag; //フラグ
int cnt; //カウンタ
int power; //パワー
int point; //ポイント
int score; //スコア
int num; //残機数
int mutekicnt; //無敵状態とカウント
int shot_mode; //ショットモード
int money; //お金
int img; //画像
int slow; //スローかどうか
double x,y; //座標
}ch_t;
のことですか?
それとも
//キャラクターショットに関する構造体
typedef struct{
int flag,power,cnt,knd;//フラグ、パワー、カウンタ、種類
double x,y,angle,spd;//座標、角度、スピード
}cshot_t;
こっちのほうですか?

教えてください


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


Name: conio [URL]  ..プログラマー(25,580ポイント)   Date: 2009/07/01(水) 22:26   No:36076     
Title: Re:17番目のエラー    
---------------------------------------------------------------------------------------
1章\mydat\source\cshot.cpp(56) : error C2039: 'shot_cnt' : 'ch_t' のメンバではありません。
1章\mydat\include\struct.h(2) : 'ch_t' の宣言を確認してください。
---------------------------------------------------------------------------------------

エラーの通り構造体ch_tの宣言に問題があります。
(構造体ch_tの中に、"shot_cnt"という変数なんて存在しませんよ というエラーです。)

それぞれの変数はどのように使われているかは分かりませんが、

ともかくch_t構造体の中に、shot_cntという変数を追加すればいいと思います。

typedef struct{
int flag; //フラグ
int cnt; //カウンタ
int power; //パワー
int point; //ポイント
int score; //スコア
int num; //残機数
int mutekicnt; //無敵状態とカウント
int shot_mode; //ショットモード
int shot_cnt; //ショットのカウンタ(?)
int money; //お金
int img; //画像
int slow; //スローかどうか
double x,y; //座標
}ch_t;


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

Name: デラ初心者  ..ぴよぴよ(999ポイント)   Date: 2009/07/02(木) 10:39   No:36108 解決!     
Title: Re:17番目のエラー    
回答ありがとうございます

おかげでできました
有り難うございます





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



Name: RYO  ..ぴよぴよ(277ポイント)   Date: 2009/07/02(木) 09:17   No:36104       
Title: 導入に関して    
「2. ウィンドウを表示させる。」まで進めたのですが、これ以上進めません。「サンプルプログラム実行用フォルダの中のVisualStdioでしたら"DxLib.sln"を開き、プログラムが書ける状態にしてください。」というので詰まりました。"DxLib_VC2008_and_2005用.sln"というファイルはあるのですが、"DxLib.sln"というファイルが見当たりません。試しに同名のファイルを作成して以下のプログラムを記入して実行したところ「ファイルが見つかりません」とエラーが発生してしまいます。

#include "DxLib.h"

int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow ){
if( DxLib_Init() == -1 ) return -1;



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

原因がよく分からなく進めません。よろしくお願いします。


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


Name: ねこ  ..上級者(18,737ポイント)   Date: 2009/07/02(木) 09:51   No:36107     
Title: Re:導入に関して    
<DxLib_VC2008_and_2005用.sln
このファイルでOKです。VisualStudio2008か2005を使っているのでしたら、このファイルをドラッグ&ドロップすると
変換ウィザードが開き、「次へ」を押してたら変換完了して使用出来るようになります。
 ※ダブルクリックだと何故か開かなかったです。

恐らくDxLibがVC2008に対応した際、名前が変わったのかと予測されます。


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



Name: 質問  ..ぴよぴよ(14ポイント)   Date: 2009/07/02(木) 02:39   No:36098       
Title: キー入力履歴の取得    
C言語で方向キーに数字を割り当て、配列もしくは構造体へ格納する課題に取り組んでいます。

方向キーへの数字の割り当てるまではできたのですが、
キー入力の順番に割り当てられた数字を配列もしくは構造体へ格納するところで詰まっております。

↑=1、↓=2、←=3、→=4 として、↑↑↓↓←→←→ とキー入力したら、
配列もしくは構造体へ 1、1、2、2、3、4、3、4とキー入力順に格納されるようにするには
どのようにプログラムすればよろしいでしょうか?

環境はWindowsXP、コンパイラにはBorand C を使っております。
何卒、御教授下さい。


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


Name: 山崎  ..上級者(17,818ポイント)   Date: 2009/07/02(木) 06:36   No:36102     
Title: Re:キー入力履歴の取得    
おはようございます。

とりあえず、今まで作ったところまでのコードを載せてみてはいかがでしょう?
どんな構造体を宣言していて、どのように方向キーからの入力を取得していて、
どうやって方向キーを数字に直しているかも、答える側としては重要だと思います。

それとも、ただ「構造体のある要素に数字を格納する」あるいは
「配列のある要素に数字を格納する」ことだけができないのでしょうかな?
それと、「数字」という言葉で表現されていますが、おそらく「文字」としてじゃないですよね?


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

Name: non  ..熟練のプログラマー(52,388ポイント)   Date: 2009/07/02(木) 09:46   No:36106     
Title: Re:キー入力履歴の取得    
矢印キーの取得には何を使いますか?


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



Name: テヌー  ..ぴよぴよ(107ポイント)   Date: 2009/06/30(火) 06:04   No:35983       
Title: BGMのフェードイン、アウト    
龍神録を改造してて気になったのですが
BGMのフェードイン、フェードアウトって出来るんでしょうか?
知ってる方がいましたらやり方を教えていただけたらありがたいです。


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


Name: 山崎  ..上級者(16,498ポイント)   Date: 2009/06/30(火) 07:15   No:35986     
Title: Re:BGMのフェードイン、アウト    
おはようございます。

音声のフェードアウトならChangeVolumeSoundMem、
BGMのフェードアウトならSetVolumeMusicを使ってみてはいかがでしょう。
使い方なら、本家DXライブラリのリファレンスページに載っておりますね。


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

Name: テヌー  ..ぴよぴよ(188ポイント)   Date: 2009/07/02(木) 02:54   No:36099     
Title: Re:BGMのフェードイン、アウト    
返答ありがとうございます。
調節しか書いてありませんでしたが
具体的にだんだんBGMをフェードアウトさせるというのはどういうプログラムを組んだら
可能なのでしょうか?


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

Name: 山崎  ..上級者(17,670ポイント)   Date: 2009/07/02(木) 06:26   No:36100     
Title: Re:BGMのフェードイン、アウト    
SetVolumeMusicを使った場合でご説明いたしましょう。

例えば、127フレーム(約2秒間ちょっと)かけて、音楽をフェードアウトさせるとしましょう。
普段は最大のボリューム(255)で音楽を鳴らしていたとします。
127フレームで255を0にするわけですから、
1フレームではボリュームを2減らせばいいことになります。

つまり、ボリュームを表す変数をひとつ用意しておき、
フレーム毎にその変数を2減らしてSetVolumeMusic()で音量をかえるといいでしょう。

仮にボリュームを表す変数が
static int Volume;
と宣言されていたとしますと、
Volume=Volume-2;
SetVolumeMusic(Volume);
この2行を127フレームかけて連続で呼び出せばその2秒ちょっとの間に
音楽をフェードアウトさせることができます。


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



Name: 瑠璃  ..ぴよぴよ(19ポイント)   Date: 2009/07/01(水) 21:44   No:36072       
Title: プログラムの相談    
事務関係で小さな会社に勤めております。
そこでとあるプログラムを作ってほしいと言われました。

プロジェクト管理システム(VC++)

仕様としては電話帳みたいなイメージです。
氏名、案件名、業種、期間、・・・、項目1、項目2
といった項目を毎月30件ずつくらい登録します。

最初はデータの吐き出しをCSV形式で考えていたのですが
大丈夫でしょうか?
それともお勧めの形式があるでしょうか?


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


Name: バグ  ..ハッカー(161,398ポイント)   Date: 2009/07/01(水) 22:09   No:36073     
Title: Re:プログラムの相談    
今後データレコード数がまだまだ増える予定ならば、データベースと連携させるのもいいかもしれません。

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

Name: たかぎ [URL]  ..ハッカー(106,727ポイント)   Date: 2009/07/01(水) 22:32   No:36077     
Title: Re:プログラムの相談    
月30件程度であれば10年経っても3600件ですから、CSVでも十分だと思います。
現時点で予想している以上に登録件数が増えるような事態になれば、きっと件数だけの問題ではなくなります。
その時点で再設計する方が現実的ではないでしょうか?


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

Name: non  ..熟練のプログラマー(52,285ポイント)   Date: 2009/07/01(水) 22:44   No:36078     
Title: Re:プログラムの相談    
そのデータでどのような処理が必要なのかが問題です。
私が思うに、EXCELで充分なのではないでしょうか?
Cで作らなければいけない理由はなんでしょうか。
EXCELのVBAでもいろいろできると思いますけど。データ少ないし。


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

Name: たいちう  ..プログラマー(32,945ポイント)   Date: 2009/07/01(水) 22:52   No:36080     
Title: Re:プログラムの相談    
目的はなんでしょうか?
プログラム作成か、プロジェクト管理か、学習か。

プロジェクト管理だけが目的ならば、Excelだけで十分のようですが。
マクロを使わないでも良いでしょう。どんなプロジェクト管理かにも
よりますが、優れたフリーウェアも見つかるかもしれません。

あなたがそのプログラムを作る時間(学習も含めて)は、
プログラムによって省力できる時間の何カ月分にあたるでしょうか。

とにかく作りたいんじゃい、というなら別ですが、
採算だけを考えるならば作らないほうが正解だと思います。

# nonさんとかぶったけど、載せちゃえ。


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

Name: 通行人  ..ぴよぴよ(297ポイント)   Date: 2009/07/02(木) 01:24   No:36092     
Title: Re:プログラムの相談    
管理が目的として・・・

Excelに比べてとっつき難い感がありますが、Accessもお勧めですよ。
後、データベースCGIも、Web上に構築できるので使い勝手が非常に
優秀だと思います。


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



Name: dic  ..プログラマー(25,571ポイント)   Date: 2009/06/30(火) 13:48   No:36001       
Title: シングルトンパターンのインスタンスの削除方法    
今下記までの骨組みはできたのですが
インスタンスを生成してますが、削除方法がどうやったらいいのかわかりません

通常だったら、デストラクタに delete _instance とすべきなのでしょうか?
どこでdelete _instance とすれば適切でしょうか


#include <stdio.h>

class Singleton
{
private:
static Singleton* _instance;
protected:
Singleton();
public:
static Singleton* Instance();
void TestShow();
};
//------------------------------------------------------
Singleton* Singleton::_instance = 0;
Singleton* Singleton::Instance() {
if( _instance == 0 ) {
_instance = new Singleton;
printf( "create instance.\n" );
}
return _instance;
}
Singleton::Singleton(){
}
void Singleton::TestShow(){
printf( "TestShow called.\n" );
}

//------------------------------------------------------
int main()
{
Singleton::Instance()->TestShow();

return 0;
}


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


Name: GPGA  ..熟練のプログラマー(63,692ポイント)   Date: 2009/06/30(火) 15:48   No:36002     
Title: Re:シングルトンパターンのインスタンスの削除方法    

普通シングルトンクラスのインスタンスは静的領域を使用するので、deleteを使う必要はないかと

class Singleton {
public :
static Singleton* Instance();
};

Singleton* Singleton::Instance() {
static Singleton ins;
return &ins;
}
 


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

Name: Justy  ..伝説なるハッカー(383,473ポイント)   Date: 2009/06/30(火) 22:25   No:36016     
Title: Re:シングルトンパターンのインスタンスの削除方法    

>デストラクタに delete _instance とすべきなのでしょうか?

 途中で明示的に破棄する必要があるなら、 Destory()とかの静的メソッドとかを作って、
その中で deleteすればいいのではないでしょうか。

 終了までずっと存在し続けるなら、std::atexitで破棄関数を登録して、その中で deleteする
という手があります。


 ただ、どちらにしてもその際に _instanceを NULLで初期化するなら
それはデストラクタでやったほうがいいです。


 ところで、コンストラクタが protectedになっていますが、このクラスは継承する予定が??


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

Name: dic  ..プログラマー(26,563ポイント)   Date: 2009/07/01(水) 09:31   No:36044     
Title: Re:シングルトンパターンのインスタンスの削除方法    
>GPGAさん
ちょっと改造して下記のようにしましたところ
newが開放されてないと警告がでました

デスクトップ\singleton\main.cpp(25) : {39} normal block at 0x004301D0, 1 bytes long.


#include <stdio.h>
#define _CRTDBG_MAP_ALLOC
#include <crtdbg.h>
#ifdef _DEBUG
#define new new( _NORMAL_BLOCK, __FILE__, __LINE__ )
#endif


class Singleton
{
private:
static Singleton* _instance;
protected:
Singleton();
public:
static Singleton* Instance();
void TestShow();
void Delete();
};
//----------------------------------------------------
Singleton* Singleton::_instance = 0;
Singleton* Singleton::Instance() {
if( _instance == 0 ) {
_instance = new Singleton;
printf( "create instance.\n" );
}
return _instance;
}
Singleton::Singleton(){
}
void Singleton::Delete(){
delete _instance;
}
void Singleton::TestShow(){
printf( "TestShow called.\n" );
}
//----------------------------------------------------
int main()
{
_CrtSetDbgFlag( _CRTDBG_LEAK_CHECK_DF | _CRTDBG_ALLOC_MEM_DF );

Singleton::Instance()->TestShow();

// delete を呼ばない
// Singleton::Instance()->Delete();

return 0;
}


たしかに静的領域なので、変数の確保はされてるんですが、delete しなくて大丈夫なのでしょうか?

>>Justyさん
最初から最後まで存在するんで、デストラクタを検討したいと思います

継承は練習で、するつもりです
ただ、実戦では頭がこんがらがるのでしないと思います


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

Name: ねこ  ..上級者(18,492ポイント)   Date: 2009/07/01(水) 10:33   No:36048     
Title: Re:シングルトンパターンのインスタンスの削除方法    
多分終了時のメモリリークの警告の事ですよね。
Justyさんが書かれている「atexit」関数に削除関数を追加。
それからDelete関数はNULLで無い場合に処理するように作成。


class A
{
private:
static A* m_pA;
protected:
A(){
int a = 0; // ブレイクポイント用
}
public:
virtual ~A(){
}

// 削除
static void Delete()
{
if( m_pA != NULL )
delete m_pA;
m_pA = NULL;
}

// 生成取得
static A* Instance()
{
if( m_pA == NULL )
m_pA = new A();
return m_pA;
}
};
// 静的変数初期化
A* A::m_pA = NULL;

// 初期化フラグ
BOOL g_bInit = FALSE;

void main()
{
// 初期化
if( g_bInit == FALSE )
{
// 終了時に呼び出す関数の登録
atexit( A::Delete );

// インスタンス生成
A::Instance();

// 消す⇒消さないに変更
//A::Delete();

// 初期化フラグON
g_bInit = TRUE;
}
}


#Instance関数の中、修正しました。


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

Name: GPGA  ..熟練のプログラマー(63,947ポイント)   Date: 2009/07/01(水) 11:01   No:36051     
Title: Re:シングルトンパターンのインスタンスの削除方法    
>たしかに静的領域なので、変数の確保はされてるんですが、delete しなくて大丈夫なのでしょうか?
newで確保する領域はヒープ領域です。
静的領域は、グローバル変数やstatic変数を確保する領域のことです。

最初から最後までいるわけですから、new/deleteを使用せずstatic変数にすればいいと思うわけです。


class Singleton {
Singleton(){}
public :
static Singleton* Instance();
void Func(){}
};

Singleton* Singleton::Instance() {
static Singleton ins; // これはエラーにならない
return &ins;
}

int main() {
Singleton ins; // エラーになる
Singleton* p = new Singleton(); // エラーになる
Singleton::Instance()->Func(); // エラーにならない
return 0; // プログラム終了後、シングルトンインスタンスが解放される
}
 


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

Name: dic  ..プログラマー(26,629ポイント)   Date: 2009/07/01(水) 13:25   No:36052 解決!     
Title: Re:シングルトンパターンのインスタンスの削除方法    
>>ねこさん、GPGAさん
丁寧な回答ありがとうございます
なるほど、そういうことだったんですね
ようやく理解できました
ありがとうございました


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

Name: dic  ..プログラマー(26,697ポイント)   Date: 2009/07/01(水) 14:29   No:36056     
Title: Re:シングルトンパターンのインスタンスの削除方法    
>>GPGAさん
確認したいのですが
画像のようにヒープ領域は、newで利用され、deleteが必要で
static変数などは、exeファイルにはじめから格納されており
exeファイルを読み込んだ時点で、すでにstatic変数は確保されてるということでしょうか?


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

Name: GPGA  ..熟練のプログラマー(64,077ポイント)   Date: 2009/07/01(水) 15:26   No:36057     
Title: Re:シングルトンパターンのインスタンスの削除方法    
>exeファイルを読み込んだ時点で、すでにstatic変数は確保されてるということでしょうか?
exeファイルを実行すると、まずプログラム領域が確保され、そこにexeファイルを展開します。
次に、スタック領域、静的領域が確保され、あまった領域がヒープ領域となります。
従って、exeを実行した時点でメモリは確保されますが、実態化する(コンストラクタが呼ばれる)のは
静的グローバル変数(関数外のstatic変数)は、exeが実行されたときで
静的ローカル変数(関数内のstatic変数)は、その変数が定義されている位置に処理が来たときです。


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

Name: dic  ..プログラマー(26,666ポイント)   Date: 2009/07/01(水) 17:38   No:36058     
Title: Re:シングルトンパターンのインスタンスの削除方法    
なるほど
よくわかりました
ありがとうございました


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

Name: Justy  ..伝説なるハッカー(385,383ポイント)   Date: 2009/07/01(水) 23:19   No:36088     
Title: Re:シングルトンパターンのインスタンスの削除方法    
 もう解決していますが、ひとつだけ。
 
 この手のシングルトンの設計は寿命の問題が厄介になります。
 
 ポインタとして割り付けた場合はわりと制御しやすいのですが、
静的領域においた場合、解放は終了時に自動で行われてしまい、
そのままではプログラマがタイミングの制御ができません。

 大抵の場合それでも問題はないとは思いますが、2つの静的領域に配置された
オブジェクトがあり、一方のデストラクタで一方を呼び出していたりすると
破棄される順によっては既に破棄済みのオブジェクトにアクセスすることに
なります。

 例えば、これ。

#include <iostream>
#include <string>

class Log
{
    Log()
    {
        ostream_ = &std::cout;
        std::cout << "Log::Constractor" << std::endl;
    }
    ~Log()
    {
        ostream_ = 0;
        std::cout << "Log::Destructor" << std::endl;
    }
    std::ostream * ostream_;
    
    
    Log(const Log&);
    Log& operator=(const Log&);
    
public:

    static Log& Instance()
    {
        static Log s;
        return s;
    }
    
    void Func(const std::string &message)
    {
        *ostream_ << message << std::endl;
    }
};

class   Singleton
{
    Singleton()         {  }
    ~Singleton()        { Log::Instance().Func("Singleton::Destructor"); }

public:

    void Func()         { Log::Instance().Func("Singleton::Func"); }

    static Singleton& Instance()
    {
        static Singleton s;
        return s;
    }
};

int main()
{
    Singleton::Instance().Func();
    return 0;
}

 Singletonクラスのデストラクタよりも Logクラスのデストラクタの方が先に走るので、
破棄された Logクラスにアクセスすることになり、未定義の動作となります。

 まぁ、そんな使い方しなければいいだけの話かもしれませんが。


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



Name: やっくん  ..中級者(10,552ポイント)   Date: 2009/07/01(水) 22:22   No:36075       
Title: 2Dマップを作る際にcharとintどっちを使う?    
DXライブラリ使用で2Dのマップを作る際に変数はcharとintどちらを使うべきでしょうか。

現在、少しでも少ない容量でってことでcharを使ってるんですが、

例えば、当たり判定(マップ)の配列をcharですると

char map_01[10][10] = {{1,1,1,1,2,2,2,1,1,1,1},
{1,0,0,0,0,0,0,0,0,0,1},
{1,0,0,1,0,0,0,0,0,0,1},
{1,0,0,1,0,6,0,7,0,0,1},
{3,0,0,1,0,6,0,7,0,0,5},
{3,0,0,1,0,1,0,0,0,0,5},
{3,0,0,0,0,0,0,0,0,0,5},
{1,0,0,0,0,0,0,0,0,0,1},
{1,0,0,0,0,0,0,0,0,0,1},
{1,0,0,0,0,0,0,0,0,0,1},
{1,1,1,1,4,4,4,4,1,1,1},
};


と、あるとします。

0・・・キャラが移動できる場所
1・・・壁
2・・・次マップへ切り替わり
3・・・次マップへ切り替わり
4・・・次マップへ切り替わり
5・・・次マップへ切り替わり
6・・・障害物A
7・・・障害物B

これだけでも10進数で判定を扱うなら残りわずかでしか使えないようになってしまいます。

何か良い方法は無いでしょうか。

またはintでやっても良いのでしょうか


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


Name: non  ..熟練のプログラマー(52,373ポイント)   Date: 2009/07/01(水) 22:50   No:36079     
Title: Re:2Dマップを作る際にcharとintどっちを使う?    
>これだけでも10進数で判定を扱うなら残りわずかでしか

10進数って?ちょっと意味がわかりません。
unsigned charは0から255ですよ。まだ、沢山扱えそうですけど・・・・


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

Name: やっくん  ..中級者(10,598ポイント)   Date: 2009/07/01(水) 23:00   No:36081     
Title: Re:2Dマップを作る際にcharとintどっちを使う?    
解答ありがとうございます。
charは1文字しか扱えないと思っていたので0〜9だと思っていました。
unsignedなど使いどころがわからなかったのでもう一度本を見て学び直してみます。


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

Name: やっくん  ..中級者(10,756ポイント)   Date: 2009/07/01(水) 23:03   No:36084 解決!     
Title: Re:2Dマップを作る際にcharとintどっちを使う?    
完全に勉強不足でしたorz
unsignedじゃなくても数値は-128〜127ですね
確かに十分です。

nonさんありがとうございましたm(__)m
解決とさせていただきます


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

Name: やっくん  ..中級者(10,817ポイント)   Date: 2009/07/01(水) 23:08   No:36086     
Title: Re:2Dマップを作る際にcharとintどっちを使う?    
charは1バイト分でしたね。
2の7乗で0〜127の128個とそれに負の数を合わせたら-128〜127の256個(1バイト分で表示できる数値)になりましたー。


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



Name: lbfuvab  ..上級者(21,108ポイント)   Date: 2009/06/30(火) 21:50   No:36013       
Title: 素因数分解の時間    
馬鹿なことを聞いているのかも知れませんが、本当に分からないので質問させていただきます。
二つの素数を掛けた合成数nについて素因数分解する場合、
調べなければならないのは[√n]までですよね?([]はガウス記号)

なのに何故計算時間が指数関数的に増えていくのかが良く分からないです。
いくら調べても納得がいきません。

どなたか詳しい方教えてください。


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


Name: たいちう  ..プログラマー(32,771ポイント)   Date: 2009/06/30(火) 22:50   No:36019     
Title: Re:素因数分解の時間    
詳しいという程の事もないのですが、何点か回答らしきものを。

まず「計算時間が指数関数的に増えていく」とは、
誰が主張しているのでしょうか?
その主張が間違っている可能性や、「指数関数的」という言葉が
比喩的に使われている可能性があります。

また、合成数nに対してなら数学的な意味での「指数関数的」とは言えなくても、
合成数の桁数(もしくはビット数)nに対してなら「指数関数的」と言えるでしょう。
主張している人の意図はこっちではないでしょうか。

こっから先が私ではついていけない部分なのですが、
どうやら「準指数関数的」というのが正しいらしいです。
興味があれば読んでみてください。
(よろしければ、かいつまんで私に教えてください)

http://slashdot.jp/comments.pl?sid=139683&cid=450555
http://www.rkmath.rikkyo.ac.jp/~kida/bunkai.htm


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

Name: sizuma [URL]  ..入門者(4,698ポイント)   Date: 2009/07/01(水) 00:38   No:36029     
Title: Re:素因数分解の時間    
僕は今までは

素数の数はほぼ同じぐらいの増加量だと思うので、nが2倍になれば、素数に対しての計算も2倍
でも計算アルゴリズム自体が大きい数になればなるほど時間のかかる処理だとすれば計算は2倍でも計算時間は2倍以上になるハズ。割り算計算が基本だと思うので、計算時間も増加しやすいと思いますし。


・・・って思ってました。
でもたいちうさんの書いてあるみたいに、ビットに対しては指数関数的っていうことなんでしょうね。
大学数学レベルの話になってくると思うんで、僕にも分かるように教えてほしいです(笑


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

Name: lbfuvab  ..上級者(21,141ポイント)   Date: 2009/07/01(水) 23:06   No:36085 解決!     
Title: Re:素因数分解の時間    
有難うございます。
・・・う〜ん、理解できませんorz
しかし、不思議な事に単なる指数関数時間でもないんですね・・・


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



Name: かつのり  ..ぴよぴよ(4ポイント)   Date: 2009/07/01(水) 17:56   No:36060       
Title: C    
ここで聞いていいのか分からないのですけど、
普通のC言語とC++、C#の違いって何が違うんですか?プログラム的な意味で。
ググってもよく分からなかったので質問させてもらいました。


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


Name: バグ  ..ハッカー(161,326ポイント)   Date: 2009/07/01(水) 19:23   No:36063     
Title: Re:C    
「プログラム的な意味」という意味が分かりません(^_^;)


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

Name: りのつか  ..ぴよぴよ(4ポイント)   Date: 2009/07/01(水) 21:08   No:36067     
Title: Re:C    
C++とC#はオブジェクト指向?

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

Name: バグ  ..ハッカー(161,382ポイント)   Date: 2009/07/01(水) 21:16   No:36068     
Title: Re:C    
Cでもやれない事はないけど、C++とC#はそうですね。
特にC#はC++の進化系というよりはJavaに
近いですね。


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



Name: デラ初心者  ..ぴよぴよ(113ポイント)   Date: 2009/06/26(金) 12:28   No:35791       
Title: 龍神録の14番目ができない    
龍神録の14番目色んな弾幕データーを作ってみようが
できません
コピペしてやったのですができませんでした
色々自分で試したのですがエラーが増えてくだけでorz
GV.hとstruct.hとload.cppがエラーらしいのですが
サッパリ解りません。
エラーの数は145です。


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


Name: ねこ  ..中級者(13,710ポイント)   Date: 2009/06/26(金) 13:26   No:35792     
Title: Re:龍神録の14番目ができない    
<コピペしてやったのですができませんでした
ひとまずコピペした時点でのエラー内容を貼り付けるか、テキストで添付して下さい。
エラー数や色々自分で試した、では問題が見えません。


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

Name: デラ初心者  ..ぴよぴよ(146ポイント)   Date: 2009/06/26(金) 17:54   No:35810     
Title: Re:龍神録の14番目ができない    
訂正14番目ではなく13番目でした
すいません
編集キーを忘れてしまったのでこっちで貼ります。




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

Name: 天魔  ..かけだし(1,075ポイント)   Date: 2009/06/26(金) 20:18   No:35815     
Title: Re:龍神録の14番目ができない    
現在私も13番目で詰まっている者なのでちゃんと指摘できるかわかりませんが、各cppファイルにある

error C2065: 'SHOT_BULLET_MAX' : 定義されていない識別子です

という行は私も出ました。

おそらく、struct.hの中でinclude文の下に"SHOT_BULLET_MAX 1000"を記述していませんか?
その場合は" #include "struct.h" "を一番下に持っていけば何か変わるかもしれません。
少なくとも私はそれで改善することができました。


他のエラーはそちらのソースファイルを見てみないとよくわかりませんね・・・・。


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

Name: デラ初心者  ..ぴよぴよ(187ポイント)   Date: 2009/06/27(土) 11:19   No:35838     
Title: Re:龍神録の14番目ができない    
やってみます。
あと他のソースファイルも貼っときます
頼ってばかりですいません。


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

Name: 天魔  ..ぴよぴよ(906ポイント)   Date: 2009/06/28(日) 00:21   No:35871     
Title: Re:龍神録の14番目ができない    
見たところ、記述自体には問題無いみたいですね。

ですが、一部行の配置が私のものと違うようです。

まずは "GV.h" の " GLOBAL configpad_t configpad; "の下に" #include "math.h" " を移動させてみてください。

これでエラーがきえるとすれば、include文は位置も重要ってことになる・・・・のかな?
(もし常識的なことでしたらお恥ずかしい限りですが)

それと " #include "struct.h" " の " #include "struct.h" "をヘッダ内の一番下に移動させるのも忘れずに。

これでまだエラーが出たら、お手上げかも・・・。


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

Name: pooka [URL]  ..初心者(7,940ポイント)   Date: 2009/06/28(日) 01:54   No:35877     
Title: Re:龍神録の14番目ができない    
>デラ初心者さん
添付されたファイルを見ると、struct.hに

typedef struct{
//カウンタ、移動パターン、敵の種類
int cnt,pattern,knd;
//初期座標と移動スピード
double x,y,sp;
//弾幕開始時間、弾幕の種類、色、体力、弾の種類、停滞時間、アイテム(6種類)
int bltime,blknd,col,hp,blknd2,wait,item_n[6];
}enemy_order_t;

これが抜けているようです。
あとはdefine.hの#include "struct.h"を一番下に持ってくれば大丈夫だと思います。

>天魔さん
>まずは "GV.h" の " GLOBAL configpad_t configpad; "の下に" #include "math.h" " を移動させてみてください。
これは移動しなくても大丈夫だと思いますよ。

>include文は位置も重要ってことになる・・・・のかな?
struct.hの位置に関して、こちらで説明してくださってる方がいらっしゃるので参考にしてみてください。
ttp://www.play21.jp/board/formz.cgi?action=res&resno=34622&page=&lognum=105&id=dixq&rln=34642


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

Name: 天魔  ..ぴよぴよ(869ポイント)   Date: 2009/06/28(日) 08:57   No:35885     
Title: Re:龍神録の14番目ができない    

> >まずは "GV.h" の " GLOBAL configpad_t configpad; "の下に" #include "math.h" " を移動させてみてください。
> これは移動しなくても大丈夫だと思いますよ。
おお!そうでしたか、ありがとうございます^^;

> >include文は位置も重要ってことになる・・・・のかな?
> struct.hの位置に関して、こちらで説明してくださってる方がいらっしゃるので参考にしてみてください。
> ttp://www.play21.jp/board/formz.cgi?action=res&resno=34622&page=&lognum=105&id=dixq&rln=34642

ありがとうございます、参考にさせていただきます!


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

Name: デラ初心者  ..ぴよぴよ(250ポイント)   Date: 2009/06/28(日) 18:22   No:35916     
Title: Re:龍神録の14番目ができない    
pookaさん天魔さん有り難うございます。
エラーが46まで減りましたが完全になくなりません。
エラーがload.ccpにあるみたいですけど行を変えれば良いんでしょうか?


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

Name: pooka [URL]  ..初心者(7,939ポイント)   Date: 2009/06/28(日) 18:59   No:35918     
Title: Re:龍神録の14番目ができない    
LoadDivGraph( "../dat/img/bullet/b0.png" , 5 , 5 , 1 , 76 , 76 , img_bullet[0] ) ;
LoadDivGraph( "../dat/img/bullet/b1.png" , 6 , 6 , 1 , 22 , 22 , img_bullet[1] ) ;
LoadDivGraph( "../dat/img/bullet/b2.png" , 10 , 10 , 1 , 5 , 120 , img_bullet[2] ) ;
LoadDivGraph( "../dat/img/bullet/b3.png" , 5 , 5 , 1 , 19 , 34 , img_bullet[3] ) ;
LoadDivGraph( "../dat/img/bullet/b4.png" , 10 , 10 , 1 , 38 , 38 , img_bullet[4] ) ;
LoadDivGraph( "../dat/img/bullet/b5.png" , 3 , 3 , 1 , 14 , 16 , img_bullet[5] ) ;
LoadDivGraph( "../dat/img/bullet/b6.png" , 3 , 3 , 1 , 14 , 18 , img_bullet[6] ) ;
LoadDivGraph( "../dat/img/bullet/b7.png" , 9 , 9 , 1 , 16 , 16 , img_bullet[7] ) ;
LoadDivGraph( "../dat/img/bullet/b8.png" , 10 , 10 , 1 , 12 , 18 ,img_bullet[8] ) ;
LoadDivGraph( "../dat/img/bullet/b9.png" , 3 , 3 , 1 , 13 , 19 , img_bullet[9] ) ;

sound_se[0]=LoadSoundMem("../dat/se/enemy_shot.wav");

No:35838で添付されたファイルを見ると、上の記述がload関数外に書かれているのでload関数内に書いてください。


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

Name: デラ初心者  ..ぴよぴよ(313ポイント)   Date: 2009/06/29(月) 20:00   No:35970     
Title: Re:龍神録の14番目ができない    
有り難うございます!!
皆さんのおかげで出来そうです。
あとエラーが二つの残ってるのですが・・・
よろしくお願いします。




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

Name: pooka [URL]  ..初心者(8,083ポイント)   Date: 2009/06/29(月) 20:16   No:35971     
Title: Re:龍神録の14番目ができない    
shot_calc、graph_bulletそれぞれの関数をshot_main、graph_mainより前に書いてください。

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

Name: デラ初心者  ..ぴよぴよ(270ポイント)   Date: 2009/06/29(月) 20:57   No:35973     
Title: Re:龍神録の14番目ができない    
おお!!出来ました
皆様のおかげです。
有り難うございます
敵が大玉しか撃ってこないけどこれでいいんですよね?


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

Name: デラ初心者  ..ぴよぴよ(317ポイント)   Date: 2009/07/01(水) 19:11   No:36062 解決!     
Title: Re:龍神録の14番目ができない    
解決しました
皆様のおかげです (教えてくれなければ挫折していた所です)
有り難うございました
頑張って続きをやります


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



Name: ラグ  ..かけだし(2,063ポイント)   Date: 2009/06/29(月) 23:01   No:35977       
Title: 龍神録プログラミングの館での、エフェクトの追加について    
はじめまして(といってもかなり前にちょっとだけお世話になりましたが)、ラグと申します
龍神録プログラミングの館にはいつもお世話になっております
管理人さんは本当に素晴らしい方だと常々思っております

さて、私は少し前から龍神録プログラミングの館を参考に、少しずつ縦STGの作成を勉強してきました
館のソースをコピペするだけでは解決できなかったことも何度かありましたが、ちゃんと動くサンプルを見ながらとりあえず23章まで進めました
ここで、敵の消滅エフェクトに衝撃波のようなものを追加したいと考え、effect.cpp内などにdel_effect関係をコピペした後適当に文字を置き換えたshockwave関係の関数などを追加しました
次に、void calc_effect内にcase 5:を増やし、そこにとりあえずcase 0:の内容をコピペしました
そして、shockwaveを計算するcalc_shockwaveでeffect[k].knd=5とすれば、衝撃波を勢いよく表示してくれるのではないかと考えたのですが、全く表示されませんでした
宣言や初期化などもdel_effect同様に行ったはずなのですが…
しかし、calc_shockwaveでeffect[k].knd=0とすると、ちゃんと衝撃波が表示されました
このeffect[k].knd=0というのが、元からあった消滅エフェクトです

この説明だけではわかりづらいと思いますので、ソースをうpろだにあげておきました
URL:http://www.dotup.org/uploda/www.dotup.org185088.lzh.html
pass:lug

衝撃波をちゃんと表示できたことはよいのですが、衝撃波の広がり方を複数つくれなかったり、他に作りたいエフェクトがあっても追加できない、という事態を恐れています
そこで皆様にお尋ねしたいのですが、この龍神録プログラミングの館の例に従って新たなエフェクトを追加し、きちんと動かすにはどのようにすればよろしいでしょうか
まずは、敵の消滅時に衝撃波を表示するエフェクトを追加したいです

環境はXPでVC++2008EEとDXライブラリを用いています
プログラミングの知識は素人同然です

ちなみに、タイトル画面やキャラ選択、敵本体と自機の当たり判定などをとりあえずつくりましたが、特に影響はないはず…
どうか皆様のお力を貸してください
お願いします


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


Name: Justy  ..伝説なるハッカー(382,653ポイント)   Date: 2009/06/29(月) 23:40   No:35981     
Title: Re:龍神録プログラミングの館での、エフェクトの追加について    

>宣言や初期化などもdel_effect同様に行ったはずなのですが

 肝心なのを忘れているようです。
 処理そのものは走っているのですが……描画されてません。

 描画は graph.cppの graph_effect()が担っていますが、これはエフェクトの種類毎に
指定して描画するようになっています。

 つまり、種類<5>のエフェクトを描画する場合は graph_effect(5)をどこかに
入れなければ表示されません。

 graph_main()を見るとつらつらと種類毎に graph_effect()を呼んでいるところがあるので、
適当なところに潜り込ませるといいでしょう。


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

Name: ラグ  ..かけだし(2,186ポイント)   Date: 2009/06/29(月) 23:57   No:35982 解決!     
Title: Re:龍神録プログラミングの館での、エフェクトの追加について    
>Justy様

素早い回答ありがとうございます
指摘された箇所を確認すると、確かにgraph_main内でgraph_effect(5)を呼ぶのを忘れていたようです
ここを直したところ、無事表示されました
他の処理に気をとられすぎていたようですね…
これからは忘れないように注意したいと思います
本当にありがとうございました


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

Name: 匿名  ..上級者(18,392ポイント)   Date: 2009/07/01(水) 17:46   No:36059     
Title: Re:龍神録プログラミングの館での、エフェクトの追加について    
うpろだにあるものが流れているので私からはなんともいえないです・・
もう一度あげてもらえれば


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



Name: ziok  ..ぴよぴよ(735ポイント)   Date: 2009/06/23(火) 19:39   No:35602       
Title: ゲーム作ってみました    
はじめましての方は初めまして。
お久しぶりの方はお久しぶりです。ZIKOと申します。

本サイトを参考にさせていただきながら、弾幕ゲームを作成させていただきました。

使用可能キャラを11人、ステージ数を7つ+エクストラを1つ用意し、11人個別に用意したストーリモードや、フリーモード、さらに2P同時プレイ(ゲームパッド推奨)等をご用意いたしました。
こんなクソゲーで申し訳ないですが、多くの皆様にプレイしてもらい、ご意見やご感想をもらえれば光栄です。

ゲーム添付できそうにないので、こちらのうpろだを借りさせていただきました。

URL:http://toku.xdisc.net/1/download/1245687189.zip
pass:ziko

(管理人による追記 6/24 5:40)
(こちらに置きました。 → http://dixq.net/zip/bbs/ziko.zip )

プレイされた方。
ゲームを作ってみたものの、やはり管理人のDixq様が作成された『四聖龍神録』や原作の東方、そのほかの皆様がこの掲示板でアップロードされた作品にくらべると超劣化版な感じになってしまったかもしれませんが、どうだったでしょうか?

本作品も、龍神録と同じようにフリーソフトとして配布したいのですが、どうするか検討中です。管理人と連絡した結果、ここのHPにアップロードしていただけるかもしれませんが。

ただそれに伴いひとつご質問がありまして…
作成した画像ファイル等はDXアーカイバでアーカイブ化したのですが、エンコーダがあるのであんまり意味がないので、
エンコーダ等を使って展開させないようにするためにはどうすればいいのか教えていただけないでしょうか?


ちなみに…
友人に頼まれまして、恐れ多くも夏コミ参加をさせていただくことになりました。
管理人のDixq様にも許可を得ました。
ブースにて無料配布を行います。
夏コミでは本作品に3Dや、エクストラステージなどの追加等を行いたいと思っています。
コミックマーケット2日目の8月15日(土) 場所:東地区V-28a
サークル名:てと&まろ
となっています。よろしければよっていってください



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


Name: ねこ  ..中級者(10,925ポイント)   Date: 2009/06/23(火) 21:24   No:35606     
Title: Re:ゲーム作ってみました    
やってみましたー。全7ステージ+EXとあって中々やりごたえがありましたw
5面くらいから弾幕が東方化してましたね。レミィゆかりんきゃのこ様って感じですか。
とか思ってたら改良されてて見事に不意を突かれたりして別の意味でも楽しかったですw

先に質問へ。
<エンコーダ〜
DXLIBで配布されてるエンコーダ使ってたら同様にあるデコーダで解凍されてしまいます。
パスをかけてもデコーダのソース自体があるので完全には防げません。
DXLIBのLoadGraph関数がDXAからファイルを読むため、更にプロテクトをかけるにはDXLIBの一部を独自に作ると良いかもしれません。

<気になったところなど
キーコンフィグくださいorz

一部レーザー系の弾幕なんですが、細い線のまま回転して、止まった時点で既に当たり判定を持ってるものがあってちょっと余裕を持ってほしいなぁと感じました。

5面の背景の継ぎ目が微妙に気になりました・・・w

一番上の子使ってたんですが、ボム打ってから最後に弾が消えるあたりで当たり判定が復活してます。
仕様かもしれませんが、何か違和感があったので。


夏コミ出す時はどんなに弾幕似てても名前は東方のスペカ名から改名した方がいいかもですね〜。
無料だし、あんまり気にしないでもいいかもしれませんけど
東方は変な人も多いので・・・お気を付け下さい。


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

Name: yu  ..プログラマー(32,631ポイント)   Date: 2009/06/23(火) 21:38   No:35607     
Title: Re:ゲーム作ってみました    
まだゲームをやっていないのですが
少し気になったことがあります

SEに東方本家のSEとバイナリデータが一致するサウンドファイルがあったのですが(自分が見たのはマスパ)
これは少し変えたほうが良いのではないでしょうか・・・

あくまで推測ですが、ニコニコモンズのほうからとってきたものがありませんか?
(readmeに書いてないので分かりませんが・・・)
あそこで配布してあるものは本家のSEをそのまま上げてあるやつもあるので気を付けてください


>>作成した画像ファイル等はDXアーカイバでアーカイブ化したのですが、エンコーダがあるのであんまり意味がないので、
>>エンコーダ等を使って展開させないようにするためにはどうすればいいのか教えていただけないでしょうか?

すみません・・・
展開して中を見させていただきました
ゲームする前にやることじゃないですよね;

東方関連は少し慎重に扱ったほうが良いかもしれません・・・
以前自分もSTG作った時にいろいろと指摘されたので気を付けてください;


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

Name: 通りすがりの東方厨  ..ぴよぴよ(111ポイント)   Date: 2009/06/23(火) 21:59   No:35609     
Title: Re:ゲーム作ってみました    
これは驚かざるを得ない・・。
スナップショットみて即行DLしました。
まだ1面なので、これでしばらく遊ばせて貰います。

しかしピチューン音とか確かにこのままコミケに出すと騒ぎになりかねませんね。
東方関連はかなり神経質になったほうがいいですよ。
仮に有名になれば弾幕が似ているだけでも叩かれるのは必至でしょうし。

ねこさんが言うように東方厨は変に東方関連に敏感ですからね。
充分ご注意を。


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

Name: yu  ..プログラマー(32,777ポイント)   Date: 2009/06/23(火) 22:17   No:35610     
Title: Re:ゲーム作ってみました    
ゲームのほうをやってきました〜

一面一面が丁寧に作られていてかなり楽しめました
自機もたくさんいますし、かなりやり込めそうですね
東方本家の弾幕の再現のようなものがあったりして驚きましたw
エフェクトも綺麗、かっこいいものが多かったです

気になった点は
ねこ様が言われているものもそうですが
メニュー時に戻るボタンが見当たりませんでした。orz
後、ゲーム中にタイトルに戻られるよな機能が欲しかったです

全体としてかなり楽しめたので本当に素晴らしかったです

制作お疲れ様でした


#一部記事を修正しました


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

Name: ひよこ  ..熟練のプログラマー(43,285ポイント)   Date: 2009/06/23(火) 22:40   No:35612     
Title: Re:ゲーム作ってみました    
けっこう弾幕が好きなのでさっそく遊んでみました。
いろいろいいですね。エフェクト関係が特にです。
ぜんぜん劣化版なんて思えませんでしたよ。
自分の作品とあまりに差がつきすぎて困っちゃったくらいです(こちらのほうがすばらしいです。
まだ2面までしかやってませんが、楽しく遊ばせてもらいます。
制作お疲れ様です。



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

Name: BEMANI  ..プログラマー(36,298ポイント)   Date: 2009/06/23(火) 22:48   No:35613     
Title: Re:ゲーム作ってみました    
>>ziokさん
これは凄いです;
いいですね〜、凄く楽しませて貰いました〜。
個人的な意見ですが、凄く難しかったです;
ストーリーをまだ一人しかやらなかったですが、コンテニューあっても最後まで行けませんでした(笑)
いやぁ〜最近のSTGは難しいっすね><

エクストラが超気に入りました。
BGMの和風ハピコア調は初めて聴いたので凄く最高でした。

フルスクリーン後、Alt+Tabキーでデスクトップに戻り、再度アプリケーションをアクティブにするとエラーで落ちました。


これからも制作頑張って下さい〜。


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

Name: array [URL]  ..熟練のプログラマー(50,554ポイント)   Date: 2009/06/23(火) 23:16   No:35614     
Title: Re:ゲーム作ってみました    
天神録遊ばせてもらいました。

といってもSTGは苦手なので、全ステクリアまでいってませんが
クリアしたらキャラのグラフィックが表示されるという嬉しい機能つきなんですかねw
弾幕の虹色はとても綺麗でプレイしてて楽しかったです

私はゲームを作る人に憧れてる人なので、ゲームをプレイすると、自分でも作れるかな?
という観点から見てしまうのですが、作りこみに感動しました。
キャラクタ選択や、ステージ移動。良く魅せるためにはそれなりの手間がかかると思うのですが
妥協しないで作りこんでるのは苦労されたと思います。

ここまで作りこんでるので、自身をもって配布しても良いと思います。
ただ、著作権には気を付けてください


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

Name: Dixq (管理人) [URL]  ..ウィザード(1,038,359ポイント)   Date: 2009/06/24(水) 06:06   No:35623     
Title: Re:ゲーム作ってみました    
以前、ご報告いただいていましたが、ホントに素晴らしいですね^^
まだほとんどプレイ出来ていないので、今日帰宅したらやらせて頂きます☆

以下作品がより良いものになるよう、少しでも手助けが出来ればと思いますので、
改善出来そうなトコロを書いておきますね。


・一番上のキャラの自機ショットを作りこんではどうか?
→デフォルトで選択されているキャラはユーザーが一番使用する確率が高いと思うので、
そのキャラの自機ショットは特にこだわってみてはどうでしょうか?
現在は敵の弾画像が使われているので。

・敵の出現パターンと弾幕が一部だけ龍神録の館のサンプルと似ているのを改善してはどうか
→せっかくこれだけ作りこんでいるのにサンプルと同じ部分があると安っぽく見えるので、完全にオリジナルにしてはどうか?

・メニューやポーズはESCキーでも行えるようにしてはどうか?
→ゲームによってはEscで突然終了するものもありますが、Escを押す人も多いと思いますので。

・自機の中心を示す点画像をもう少し作りこんでみてはどうか?
→ゲーム中最もよく見るのは案外低速移動中のキャラの中心点画像だったりするんじゃ無いかと思います。
ただの●じゃ無く、色々とデコレートしてみてはどうでしょう?

・ゲームクリア、次のステージに行く時、スコアボードの下に1ピクセル位隙間がある。
→スコアボードが右にスライドする時、下に1ピクセル位の隙間がありますので直してみてはどうでしょう。

・敵が出てくる間隔が長い所が少し暇になってしまっている(2面とか)
→敵を倒してアイテムを回収してもなお、ワンテンポ遅く、敵が出てこないシーンがいくつかありますよね。
ポンポン敵が出てきてサクサク倒せる事が爽快感に繋がると思うので、
もう少し敵が出てくるタイミングを密集させてみても良いと思います。

・2面の中ボス時、赤弾と黄色レーザーの配色は色の組み合わせがキレイではないかもしれない。
→後、背景が明るいので、レーザーが映えないので、レーザーは背景が暗い時に出すか、
色の組み合わせをもう少し考えてみてはどうでしょう?
2面後半の雑魚も黄色光弾を出してきますが、背景が明るいので見えにくいです。
表現の仕方は色々あると思いますが「弾が見えにくい」はホント評判悪いので、
その辺よく考えてみてはどうでしょう。



これからも、多くの人に意見を貰って、より素晴らしい作品になるよう頑張って下さい^^


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

Name: こめかみ  ..熟練のプログラマー(48,892ポイント)   Date: 2009/06/26(金) 01:22   No:35775     
Title: Re:ゲーム作ってみました    
ふつくしい。。。

面白い弾幕ゲーム作るために先ず本家の東方をクリアできなければ話にならないと思い、
最近のゲーム生活は主に東方等の弾幕ゲーム漬けな私の感想です。(それでも一向に上達してる気がしないのですがw)

個人的にネタスペカ名が最大の初見殺しですね(w

特に、狂魔館ステージは噴出しっぱなしでした。
それでいて東方を踏襲しつつ演出もパワーアップしてて美しいのがなおさら笑いに拍車をかけちゃってもう最高です。これの為だけに初めてコミケにいってみようかと思いました(w

喰らいボム判定がかなり甘いのか私にも全ステージクリア出来ました。
まだ妖妖夢でファンタズムステージ出してないのに弾幕結界体験しちゃいましたよ(w

いやはや羨ましいです。私も頑張ります!


>夏コミ出す時はどんなに弾幕似てても名前は東方のスペカ名から改名した方がいいかもですね〜。

そういうものなのですか。
私はこのスペカ名改変がツボにはまったので改名は残念に思います。

そもそも弾幕に名前をつけるという発想がzunさんのオリジナルな部分だと私などは思うので、
個人的にはあまり気にしなくてもいいような気もします。
東方本家を尊重する意味でもスペカ名パロはそんなに気にしなくてもいいのではないでしょうかね。
考えようによっては明らかに東方の弾幕をリスペクトしてるのに全く違うスペカ名にしてしまうほうが、
弾幕デザインのオリジナルを主張してるみたいで誤解されやすい気もします。

や、弾幕歴ほんの一年にも満たない素人の戯言です。あまりお気になさらないでください。


あーEXもあるんですか。やりたいなー今はちょっと時間無いなー。


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

Name: 木霊  ..プログラマー(34,134ポイント)   Date: 2009/06/26(金) 04:37   No:35777     
Title: Re:ゲーム作ってみました    
 久しぶりに時間が取れたのでプレイしてみました。(書き込み自体数ヶ月ぶりです)
「貴船未緒」を使ってクリアしましたが、全体的に読み込み関連でしょうか?
処理がかなり重いようです。(自分がノートパソコンを使ってるからかもしれませんが)
 ゲーム自体は面白いのですが、夏コミに参加するという事なので重箱の隅をつつかせてもらいますw


ということで、改善提案・要望等を列挙します。

1・オプションの位置とオプション弾の発射位置がずれています。
  オプション弾の発射座標を確認してください。

2・画面上部から出てきた敵は一定時間ホーミングされないようです。
  具体的な条件は分かりませんが調査してください。

3・一つの弾で複数回かすることができてしまいます。
  遅い弾だと十数回かすれるのでボス戦で一気にグレイズが増加してしまいます。

4・ボスのスペカ中にボムを撃つと、ボムが有効の間はスペカ名が表示されません。
  ボム中でも表示されていた方が良いと思います。

5・ボス戦時、弾幕でボスが隠れてしまい見失う事がありました。
  ボスマーキングがないと不便(或いは不親切)に取られるかもしれません。
  可能なら実装しておいた方が良いと思います

6・ゲーム中で使用しているフォントがインストールされていないパソコンでは、
  Dxライブラリのデフォルトのフォントで表示されます。
  結果、文章が枠外に(EDでは画面外にまで)出てしまいますので、
  一行ずつではなく一文字ずつ座標を決めて表示するようにした方が良いと思います。

7・ステージクリア時のリザルト画面で「Point」が「Pojnt」に見えてしまいます。
  一度スペルミスかどうか確認をお願いします。

最後に、個人的に一番違和感を感じた事を・・・
8・弾幕名「双剣エクスカリバー&ラグナロク」の「ラグナロク」は本来剣の名前ではありません。
  ぶっちゃけて説明すると、北欧神話の「神々の黄昏」と訳される「神々の最終戦争」の事で、
  (ちなみに「レーヴァテイン」はこの戦争の最後に世界を焼き滅ぼす剣の名前)
  武器(剣)の名前として採用してるのはスクエニのFFシリーズだけだったと記憶しています。
  「エクスカリバー」は「アーサー王物語」に出てくる剣なので、
  「ラグナロク」を「アーサー王物語」に登場する別の剣にした方がいいと(個人的に)思います。
  (「エクスカリバー」と「(剣としての)ラグナロク」の繋がりがFFシリーズしかないので)

マニアな所為か、こんなところにばかり気が行ってしまう・・・orz


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

Name: a  ..ぴよぴよ(688ポイント)   Date: 2009/06/30(火) 10:32   No:35993     
Title: Re:ゲーム作ってみました    
全cppのソースをアップロードしてもらえませんか?
ここを改善したらもっとよくなると思う箇所が数点、
直接プログラムを指摘したほうが早いかと思ったので


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

Name: すずめ  ..入門者(3,616ポイント)   Date: 2009/06/30(火) 18:50   No:36005     
Title: Re:ゲーム作ってみました    
余計なお世話だと思いますが、
ここでアドバイスをしてくれる方々は、ソースなど見なくても
ゲームをしただけで適切な指摘をされているので、
aさんもそうしたほうがいいのではないでしょうか。

最近の掲示板にちょっと違和感を感じることが2,3ありましたので
余計なことを書いてしまいました。失礼しました。


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

Name: 御津凪 [URL]  ..比類無きプログラマー(97,665ポイント)   Date: 2009/06/30(火) 19:14   No:36006     
Title: Re:ゲーム作ってみました    
> 全cppのソースをアップロードしてもらえませんか?

ZIKO さんの返答を見てからと思って言わないではいましたが、
(全体的にほぼ)完成状態のゲームのソースコードを他人に公開する行為は、
製作者にとって類似の(一部改変しただけなど)ゲームが公開される恐れがあるため、
非常に難しい部分だと思います。
(オープンソースを想定して作っていたのであれば別ですが)

なので、問題の指摘程度でソースコードの提示を求めるのは少々行き過ぎた行為だと私は考えています。
ここでは問題点を指摘するだけで結構です(と思う)し、解決できない点があるならば
別のトピックなどで質問されると思います。


話し変わって、

> ZIKO さん

遅くなりましたが遊ばせていただきましたよ〜。
楽しませてもらいました。

こちらが色々気になった点は他の皆様に言われてしまっているのでその点は省くとして、

道中の難易度のバラつきと、(どのステージか忘れましたが)敵が見切れている箇所がありました。

全体的に配置をつめるなど、難易度調整を行えば、道中でも程よく楽しめるかと思います。


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

Name: Amusement programmer(3315)  ..ぴよぴよ(74ポイント)   Date: 2009/07/01(水) 07:23   No:36039     
Title: Re:ゲーム作ってみました    
>aさん
Releaseによって作られた.exeでしたら.exeを分解、抽出、.cppに変換ツールというものが
ありますのでそちらを使って確認してみたらいかがでしょうか?


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



Name: PIYO  ..ぴよぴよ(210ポイント)   Date: 2009/07/01(水) 00:54   No:36031       
Title: printfの出力形式について教えてください。    
こんにちは。お世話になっております。
また基本的な質問させてください。


#include <stdio.h>
#include <stdlib.h>
#include <locale.h>

int main(void){
// 文字列を配列に入れる
char src[] = "一二三ABCいろは";
char *p = src;
int len;

// ロケートを日本にする
setlocale(LC_ALL, "jpn");
// マルチバイトの文字列分("一二三ABCいろは")ループ
while ((len=mblen(p, MB_CUR_MAX)) > 0) {
printf("%-2.*s : %dバイト\n", len, p, len);
p += len; // 文字のバイト分ずらす
}
return 0;
}


サンプルの抜粋ですが、
printf("%-2.*s : %dバイト\n", len, p, len);
の部分の意味を教えてください。

printf("%s : %dバイト\n", p, len);
とした場合はわかるのですが、
■■■■■■■■■■■■■■■
一二三ABCいろは : 2バイト
二三ABCいろは : 2バイト
三ABCいろは : 2バイト
ABCいろは : 1バイト
BCいろは : 1バイト
Cいろは : 1バイト
いろは : 2バイト
ろは : 2バイト
は : 2バイト
■■■■■■■■■■■■■■■
と出力されるので、%-2.*の部分の意味を知りたいのですが、
%-2.*とgoogleで検索しても、全然関係ないものが出てきてほしい答えにたどりつけませんでした。


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


Name: Korsakov  ..ぴよぴよ(193ポイント)   Date: 2009/07/01(水) 03:24   No:36035     
Title: Re:printfの出力形式について教えてください。    
http://c-production.com/contents/c/sec03.html#08
printf("%-2.*s : %dバイト\n", len, p, len);
lenの値により、出力される文字数を制限できるようです。


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

Name: toyo  ..プログラマー(36,979ポイント)   Date: 2009/07/01(水) 06:45   No:36036     
Title: Re:printfの出力形式について教えてください。    
"printf"で検索したらいいですよ
http://www.linux.or.jp/JM/html/LDP_man-pages/man3/printf.3.html
-は左詰で出力
2は最小フィールド幅
.は精度で文字列の場合は出力文字数を指定できます(.2で2バイト出力)
.*とすることで数を引数で指定できます(質問の場合は len の値が指定されます)
printf("%-2.*s : %dバイト\n", len, p, len);
は文字列 p を左詰で最小2バイト表示
出力文字数はlenバイトなので
一 : 2バイト
のように出力されるはずです



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



Name: さとり  ..ぴよぴよ(165ポイント)   Date: 2009/07/01(水) 00:41   No:36030       
Title: intの位置。 ランダムの値。    
龍神録プログラミングを参考にしていると、

関数(int n){}という場合と
関数(){int n}という場合を見かけます。

下の場合はなんとなくわかりますがどういう場合に上を使用すればいいかわかりません。

また  double rang(double ang){
    return ( -ang + ang*2 * GetRand(10000)/10000.0 );
    }
   
は具体的に何を表しているのでしょうか(数値的な意味?で)
-angというのも正直分かりづらいです。

分かりにくい質問かも知れませんが回答お願いします


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


Name: ねこ  ..上級者(18,072ポイント)   Date: 2009/07/01(水) 01:06   No:36032     
Title: Re:intの位置。 ランダムの値。    
どの章の事を書かれてるのか分からないので
void Func( int n ){}
void Func(){ int n; }の違いというと引数と内部変数宣言・・・?
ちょっと良く分からないです。

後述のrang関数はある範囲の角度をランダムに求めるものだと思います。
実際の値をDegree(度)値で考えて見たらイメージしやすいと思います。
まず「GetRand(10000)/10000.0」は0.0000〜1.0000の範囲の値が入ります。

rang( 30 )
-30 + 60 * 0.0000 ⇒ -30
-30 + 60 * 0.5000 ⇒ 0
-30 + 60 * 1.0000 ⇒ +30
というように-30〜30の角度をランダムに取得する形となります。


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



Name: yskey  ..かけだし(2,249ポイント)   Date: 2009/06/28(日) 23:11   No:35949       
Title: マウス座標が特定の範囲に入ったら一度だけ処理    
こんばんは、yskeyです。
一日中考えているのですが、ドつぼにはまって解決できません。
メニュー画面などでマウス座標が画像の上に乗ったらカーソル音(カチッという)を一度だけ鳴らしたいのですが、
「一度だけ」という処理がなかなかできません。
また、画像上からマウス座標から外れて、もう一度乗るとまたなるようにしたいのですが・・・
下記のような関数でメニューの当たり判定を得ています。

if(マウスが画像上) 再生フラグ=1

else 再生フラグ=0
にしているんですがなぜかこれだとflag=0のままになります・・・
後、flag=1にできたとして一度だけ再生はどうすればいいんでしょうか?

int Grapha(int x,int y,int GraphHandle,int flag){
int size_x,size_y,ff=0;
GetGraphSize(GraphHandle,&size_x,&size_y);
if(x<Mouse.x && Mouse.x<size_x+x && y<Mouse.y && Mouse.y<size_y+y){
flag=1;
   SetDrawBlendMode( DX_BLENDMODE_ALPHA ,128 ) ;
    DrawGraph(x,y,GraphHandle,flag);
    SetDrawBlendMode( DX_BLENDMODE_NOBLEND , 0 ) ;
 if(Mouse.Button[0]==1){
    return 2;
 }
 else {
return 1;
 } 

}
else {
flag=0;
  DrawGraph(x,y,GraphHandle,flag);
return 0;
}
}


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


Name: yu  ..プログラマー(33,880ポイント)   Date: 2009/06/28(日) 23:21   No:35950     
Title: Re:マウス座標が特定の範囲に入ったら一度だけ処理    
flag を 1 にするのではなくて
flag をインクリメント(flag++)して

if(flag == 1)

といった感じにしてみてはどうでしょうか
flagの値はどこかに保存しておかなければなりませんが

#追記
#すみませんちゃんとソース見てませんでした orz


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

Name: クロウ  ..初心者(7,797ポイント)   Date: 2009/06/28(日) 23:30   No:35951     
Title: Re:マウス座標が特定の範囲に入ったら一度だけ処理    
自分がやっているのは

bool flag = false;一回だけ音を鳴らすフラグを宣言(これはグローバル変数になってしまいますが・・・)
if(flag == false && (鳴らす条件)){
flag = true;
}

とおいて、どこか常にループしている場所(main関数など)で常に初期化してあげることです。
このときの初期化の条件は

if((鳴らさない条件)){
flag = false;
}//つまり鳴らす条件の否定

です。
つまり、鳴らす条件を満たせばflagはfalseなので一回だけ鳴り、二回目はflagがtrueのためならない。
そして、特定の位置に乗っている間は鳴らさない条件を満たしていないため、flagは初期化されず、鳴らさない条件を満たしたときには初期化されるので、再度鳴らす条件を満たした時は鳴るとなります。


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

Name: ねこ  ..上級者(17,872ポイント)   Date: 2009/06/29(月) 17:25   No:35963     
Title: Re:マウス座標が特定の範囲に入ったら一度だけ処理    
メニューでの操作管理ということでselect変数を使った手法はどうでしょうか。


// メニュー情報
typedef struct {
int x;
int y;
int GraphHandle;
} MENU_DATA;

int g_iPrevSelect = -1;
int g_iSelect = -1;
int g_iMenuCnt = 10;
MENU_DATA g_ArrMenu[ 10 ];

// マウスがどのメニュー項目上にあるかチェック
int CheckMenuIn() {
for( int ii = 0; ii < g_iMenuCnt; ii++ ) {
int size_x, size_y = 0;
GetGraphSize( g_ArrMenu[ ii ].GraphHandle, &size_x, &size_y );
if( g_ArrMenu[ ii ].x < Mouse.x && Mouse.x < size_x + g_ArrMenu[ ii ].x &&
g_ArrMenu[ ii ].y < Mouse.y && Mouse.y < size_y + g_ArrMenu[ ii ].y ) {
// 配列インデックスを返す
return ii;
}
}

// どこの範囲にも無かったら-1を返す
return -1;
}

int void main() {
// マウスがどのメニュー項目上にあるかチェック
g_iSelect = CheckMenuIn();

if( g_iSelect != -1 ) {
// 前回とは違う選択位置の時
if( g_iSelect != g_iPrevSelect ) {
// 音を鳴らす
}
} else {
// どの項目の上でも無い
}

// 前の選択インデックスを保持
g_iPrevSelect = g_iSelect;
}


このように最初にマウスがどのメニューアイテム上にあるか取得しておくと後からの処理が簡単に作れます。


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

Name: yskey  ..かけだし(2,283ポイント)   Date: 2009/06/30(火) 17:48   No:36003 解決!     
Title: Re:マウス座標が特定の範囲に入ったら一度だけ処理    
回答ありがとうございます。m(_ _)m
参考にしてなんとか解決したいと思います。


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



Name: mari  ..ぴよぴよ(72ポイント)   Date: 2009/06/30(火) 07:18   No:35987       
Title: グラディウスみたいなオプション    
グラディウスみたいなオプションみたいに
ボンボンを自機の周りにくるくる時計回りに回らせたいのですが
どうすればいいでしょうか?ちなみに龍神録50章を参考に改造してます。


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


Name: バグ  ..ハッカー(160,537ポイント)   Date: 2009/06/30(火) 08:13   No:35988     
Title: Re:グラディウスみたいなオプション    
自機の中心座標を求めて、そこを中心とする円の円周上の点へオプション(?)を描画してやればいいかと思います。
ただし、この時に算出される座標はあくまでもグラフィックの中心ですので、場合によっては描画時に補正してやる必要があるかもしれません。


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

Name: mari  ..ぴよぴよ(65ポイント)   Date: 2009/06/30(火) 09:15   No:35989     
Title: Re:グラディウスみたいなオプション    
オプションをその自機の中心座標の円周上に回すにはどうしたら・・?

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

Name: バグ  ..ハッカー(160,601ポイント)   Date: 2009/06/30(火) 09:26   No:35990     
Title: Re:グラディウスみたいなオプション    
三角関数はご存知でしょうか?
三角関数を利用すれば、任意の角度の円周上の座標を求める事ができます。
詳しくは下記URLを参照ください。非常に分かりやすく説明されています(^-^)

http://ab.sinryow.net/lesson/sankaku.html


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

Name: pooka [URL]  ..初心者(8,144ポイント)   Date: 2009/06/30(火) 09:47   No:35992     
Title: Re:グラディウスみたいなオプション    
DXライブラリにDrawRotaGraph2という関数があるようなのでこちらを参考にしてみてはどうでしょうか?
ttp://dixq.net/g/#53

#追記
すみません。よく見たらオプションとしては使えないかもしれないので、バグさんが示された方法でやってみてください。


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

Name: バグ  ..ハッカー(161,001ポイント)   Date: 2009/06/30(火) 10:36   No:35994     
Title: Re:グラディウスみたいなオプション    
こんな感じかな?
プレイヤーの座標を円の中心として、radiusをその円の半径として計算しています。
角度は0度の時にプレイヤーの真横(右側)になり、1度増える毎に時計周りに座標が移動します。
つまり、90度の場合はプレイヤーの真下、180度の場合は左側、270度の場合は真上になります。


#include <cmath> // cos、sin関数を使用するために必要

// float px = プレイヤー画像の中心X座標
// float py = プレイヤー画像の中心Y座標
// float radius = プレイヤーとオプションの距離
// float angle = プレイヤーに対してのオプションの表示位置(角度)
// float* ox = オプション画像の中心X座標の格納先へのポインタ
// float* oy = オプション画像の中心Y座標の格納先へのポインタ
void calcOptPos(float px, float py, float radius, float angle, float* ox, float* oy)
{
// 角度をラジアンに変換する
float rad = angle / 180.0f * 3.1415926535f;

// オプションのXY座標を算出する
*ox = radius * (float)cos(rad) + px;
*oy = radius * (float)sin(rad) + py;
}


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

Name: バグ  ..ハッカー(161,209ポイント)   Date: 2009/06/30(火) 10:38   No:35995     
Title: Re:グラディウスみたいなオプション    
ちょっと修正しますm(__)m

×:角度は0度の時にプレイヤーの真横(右側)になり、1度増える毎に時計周りに座標が移動します。

○:角度は0度の時にプレイヤーの真横(右側)になり、プラス方向へ変化すると時計周りに座標が移動します。


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

Name: mari  ..ぴよぴよ(135ポイント)   Date: 2009/06/30(火) 10:43   No:35996     
Title: Re:グラディウスみたいなオプション    
え〜っと・・というと
自機を中心にオプション画像自体を回転させれば出来るということですか?
それとも、回る部分の座標を指定して回転させたほうがいいということなのですか?



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

Name: バグ  ..ハッカー(161,244ポイント)   Date: 2009/06/30(火) 10:55   No:35997     
Title: Re:グラディウスみたいなオプション    
???
画像を回転させても、表示位置は変わらないのでは?
その場でクルクル回転させるのが望みの動きなのでしょうか?


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

Name: mari  ..ぴよぴよ(145ポイント)   Date: 2009/06/30(火) 10:58   No:35998 解決!     
Title: Re:グラディウスみたいなオプション    
ごめんなさい。更新してなかったのでNo:35994以降を読んでませんでした。
更新してバグさんのプログラムをみたら理解できました。ありがとうございます!


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

Name: バグ  ..ハッカー(161,293ポイント)   Date: 2009/06/30(火) 10:59   No:35999     
Title: Re:グラディウスみたいなオプション    
というか、そもそもグラディウスのオプションって、プレイヤーの後を付いてくるような動きではなかったでしたっけ?(^_^;)

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

Name: バグ  ..ハッカー(161,313ポイント)   Date: 2009/06/30(火) 11:00   No:36000     
Title: Re:グラディウスみたいなオプション    
解決したようでなによりです(^-^)

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



Name: マルチネス  ..ぴよぴよ(873ポイント)   Date: 2009/06/24(水) 19:24   No:35660       
Title: 漢の文字コードについて    
こんばんは、いつもお世話になっています。
私はC言語は初心者でテキストを見ながら進めています。Windowsのvistaを使っていて、コンパイラはBorland C++です。

今回質問をさせていただくのは、漢の文字コードについてです。


#include <stdio.h>

void main()
{
char str[3] = "漢";

printf("str[0] : %x\n", str[0]);
printf("str[1] = %x\n", str[1]);
}


私のパソコンでの実行結果は
str[0] : ffffff8a
str[1] : ffffffbf
となりました。
・1バイトは8ビットですよね。そしたら、16進数での範囲は〜ffまでだと思うのですが、ここではffffff8aと表示されffの範囲を超えているのですが、どうしてでしょうか?


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


Name: ねこ  ..中級者(11,732ポイント)   Date: 2009/06/24(水) 20:02   No:35664     
Title: Re:漢の文字コードについて    
指定値は「( unsigned char )str[0]」じゃないでしょうか
str[0]には負の値が入っているため16進表記だとビットが逆転します。


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

Name: マルチネス  ..ぴよぴよ(990ポイント)   Date: 2009/06/24(水) 20:54   No:35670     
Title: Re:漢の文字コードについて    
ねこ様、解答ありがとうございます。
指摘の通り、unsined char str[3] = "漢";としたら、
str[0] : 8a
str[1] : bf
と実行されました。

>str[0]には負の値が入っているため16進表記だとビットが逆転します。
ここのところが、ちょっと分からないです。


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

Name: non  ..熟練のプログラマー(49,967ポイント)   Date: 2009/06/24(水) 21:19   No:35680     
Title: Re:漢の文字コードについて    
2の補数について調べてみてください。


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

Name: YuO  ..プログラマー(30,578ポイント)   Date: 2009/06/24(水) 21:57   No:35690     
Title: Re:漢の文字コードについて    
>>str[0]には負の値が入っているため16進表記だとビットが逆転します。
> ここのところが、ちょっと分からないです。

反転するのではなくて,整数拡張がおきています。

BCCにおいてcharはデフォルトでは符号付きです。
なので,
char (符号付き) : -118 (8A)
が,printfの可変個引数に渡されることでint型に拡張され,
int : -118 (FFFFFF8A)
となり,それが%xに対応する箇所にあるため,unsigned int型とみなされて,
unsigned int : 4294967178 (FFFFFF8A)
として出力されています。

char => intはコンパイラが知っているところで起きているので,「値」が保存されています。
それに対して,int => unsigned intはコンパイラの知らないところで起きているので,「ビットパターン」が保存されています。
# 本当は後者は未定義動作。ビットパターンが同じ物を出力することが標準によって要求されているわけではない。


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

Name: ねこ  ..中級者(12,189ポイント)   Date: 2009/06/25(木) 14:43   No:35724     
Title: Re:漢の文字コードについて    
失礼しました。よく見ると反転していないし見当違いでした、申し訳ないです。

<反転するのではなくて,整数拡張がおきています。
参考になりました、ご指摘ありがとうございます。


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

Name: マルチネス  ..かけだし(1,007ポイント)   Date: 2009/06/30(火) 09:39   No:35991 解決!     
Title: Re:漢の文字コードについて    
皆様、解答ありがとうございました。


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



Name: JN  ..ぴよぴよ(266ポイント)   Date: 2009/06/28(日) 20:52   No:35927       
Title: C言語 アドレス帳    
こんにちは
C言語でアドレス帳を作ろうとしてるんですが
配列などがあまりよく理解できずにあまり進みません。
本当は二次元配列を使ってやりたかったんですがよく理解できなかったので一次元配列で
できるところまで作りました。
今の状態でも多数エラーがあります><
アドレス帳に必要な機能は
1)データの登録
2)登録番号から各情報の表示
3)アドレスから氏名の検索
の3つです。 
もしお時間がある方いましたらアドバイスなどお願いします<(_ _)>



#include<stdio.h>
#include <stdlib.h>
#include<string.h>
#define DATA_SIZE 100

char IDNUMBER[100],NAME[100],ADDRESS[100];




/*IDの範囲チェック*/
int CheckID(int ID)
{
if(ID < 0 || ID >= DATA_SIZE)
return -1;
return 0;
}
/*ID入力補助関数*/
int InputID()
{
int ID,result=-1;
while(result != 0)/*正しいIDを入力するまで繰り返し*/
{
printf("登録番号は?(0~%d):",DATA_SIZE-1);
scanf("%d",&ID);
/*IDチェック*/
result = CheckID(ID);
if(result != 0)
printf("不正なIDです。\n");
}
return ID;/*習得したIDを返す*/
}






/*登録*/
int Regist(int IDNUMBER[],char NAME[],char ADDRESS[])
{
int ID;
/*ID、名前、アドレスの習得*/
ID = InputID();
printf("名前を入力してください\n");
scanf("%s",NAME);
printf("アドレスを入力してください\n");
scanf("%s",ADDRESS);

}





/*登録番号から情報の表示*/
int Search(int IDNUMBER[DATA_SIZE],char NAME[DATA_SIZE],char ADDRESS[DATA_SIZE])
{
int bangou;
printf("検索したい情報の番号を入力してください");
scanf("%d",bangou);

IDNUMBER = bangou;

printf("%s",ADDRESS[bangou]);

}





/*アドレスから氏名の検索*/
int Search2(int IDNUMBER[DATA_SIZE],char NAME[DATA_SIZE],char ADDRESS[DATA_SIZE])
{
char adoresu[DATA_SIZE];
printf("検索したい情報のアドレスを入力してください");
scanf("%s",adoresu);
ADDRESS = adoresu;

printf("%s",ADDRESS);

}





void main(void)
{
int AddressList[100];
int AddressList2[100];
int MenuID=0;
while(MenuID!=4)
{
printf("アドレス帳\n");
printf("1:データの登録/修正\n");
printf("2:登録番号から各情報の表示\n");
printf("3:アドレスから氏名の検索\n");
printf("4:終了\n");
scanf("%d",&MenuID);

if(MenuID==1) Regist(AddressList,AddressList2);
else if(MenuID==2) Search(AddressList,AddressList2);
else if(MenuID==3) Search2(AddressList,AddressList2);
else if(MenuID==4) system("cls");/*コンソールをクリア*/
}

}

/*登録番号から情報を検索して表示できるようにする*/
/*アドレスから氏名の検索をできるようにする*/


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


Name: box  ..ハッカー(142,138ポイント)   Date: 2009/06/28(日) 21:08   No:35930     
Title: Re:C言語 アドレス帳    
> 今の状態でも多数エラーがあります><

何をしたときに、どんなエラーが出るのですか?


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

Name: non  ..熟練のプログラマー(51,618ポイント)   Date: 2009/06/28(日) 21:11   No:35931     
Title: Re:C言語 アドレス帳    
尋ねたいことが何なのか。的を絞ってもらった方が回答しやすいです。

グローバル変数の
char IDNUMBER[100],NAME[100],ADDRESS[100];
と、
mainで宣言されている、
int AddressList[100];
int AddressList2[100];
は、どういう関係があるのか(使用目的は何か)
また、
関数呼び出し側の
Regist(AddressList,AddressList2);
と関数の
int Regist(int IDNUMBER[],char NAME[],char ADDRESS)
の引数個数は、なぜ違うのかなど、謎がいっぱいです。



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

Name: sizuma [URL]  ..入門者(3,623ポイント)   Date: 2009/06/28(日) 21:23   No:35932     
Title: Re:C言語 アドレス帳    
とりあえず関数の定義を復習した方がいいと思います。
自分で考えたプログラムを実装しようとする心意気はすごくいいと思いますが・・・

まずは登録の機能だけを作りながら、関数定義を確認してみては?
ぱっとみで、すべての関数で引数はいらないように思いますが。

あと名前はもうすこし分かりやすいものを・・・
Search →SearchName
Search2 →SearchData
みたいにすると分かりやすくなると思います


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

Name: JN  ..かけだし(2,103ポイント)   Date: 2009/06/28(日) 21:43   No:35935     
Title: Re:C言語 アドレス帳    
返信に時間がかかってしまってスイマセン<(_ _)>
みなさんが指摘してくださった事を直してたら少し時間がかかってしまいました。

>boxさん

nonさんが指摘してくださった「引数個数」の場所を直したら
エラーはでなくなりました。
そして正しく情報が保存されてるかわかりませんが
番号登録、名前、アドレスの入力はできるようになりアドレス入力が終わると
また最初のメニュー画面に戻るようになりました。

>nonさん
引数個数のところ直しました<(_ _)>
そしてエラーはでなくなりました。ありがとうございます。

(MenuID==2) SearchName(AddressList,AddressList2,AddressList3);
のところを
(MenuID==2) SearchName(IDNUMBER,NAME,ADDRESS);
に変えちゃっても大丈夫なのでしょうか?
ビルドは成功しましたが


>sizumaさん
名前の件了解です。
確かに1,2と名前をつけるより全然わかりやすいですね
次回から名前をつけるときには適当ではなくちゃんとわかりやすいようにつけたいと思います。

------------------------------------------------------------------------------



登録はちゃんと情報が保存されているかわかりませんが入力はちゃんとできるようになったので
次はとりあえず番号を入力すると名前やアドレスの表示をする部分を書きたいと思うのですが
今のソースのままだとメニューの[2]を押して検索したい番号を打ってEnterを押すと

Debug Error!

Program: h:\新しいフォルダ\report 03\Debug\report 03.exe
Module: h:\新しいフォルダ\report 03\Debug\report 03.exe
File:

Run-Time Check Failure #3 - The variable 'bangou" is being used without being initialized.

(Press Retry to debug the application)
と出てきてしまいます。

bangouという部分が何か問題があると言っているのはわかるんですがどこをどういう風に直したらいいのかわかりません><



現在のソース

#include<stdio.h>
#include <stdlib.h>
#include<string.h>
#define DATA_SIZE 100

char IDNUMBER[100],NAME[100],ADDRESS[100];


/*IDの範囲チェック*/
int CheckID(int ID)
{
if(ID < 0 || ID >= DATA_SIZE)
return -1;
return 0;
}
/*ID入力補助関数*/
int InputID()
{
int ID,result=-1;
while(result != 0)/*正しいIDを入力するまで繰り返し*/
{
printf("登録番号は?(0~%d):",DATA_SIZE-1);
scanf("%d",&ID);
/*IDチェック*/
result = CheckID(ID);
if(result != 0)
printf("不正なIDです。\n");
}
return ID;/*習得したIDを返す*/
}



/*登録*/
int Regist(int IDNUMBER[],char NAME[],char ADDRESS[])
{
int ID;
/*ID、名前、アドレスの習得*/
ID = InputID();
printf("名前を入力してください\n");
scanf("%s",NAME);
printf("アドレスを入力してください\n");
scanf("%s",ADDRESS);

}





/*登録番号から情報の表示*/
int SearchName(int IDNUMBER[DATA_SIZE],char NAME[DATA_SIZE],char ADDRESS[DATA_SIZE])
{
int bangou;
printf("検索したい情報の番号を入力してください\n");
scanf("%d",bangou);

IDNUMBER = bangou;

printf("%s",ADDRESS[bangou]);

}



/*アドレスから氏名の検索*/
int SearchData(int IDNUMBER[DATA_SIZE],char NAME[DATA_SIZE],char ADDRESS[DATA_SIZE])
{
char adoresu[DATA_SIZE];
printf("検索したい情報のアドレスを入力してください\n");
scanf("%s",adoresu);
ADDRESS = adoresu;

printf("%s",ADDRESS);

}


void main(void)
{
int AddressList[100];
int AddressList2[100];
int AddressList3[100];
int MenuID=0;
while(MenuID!=4)
{
printf("アドレス帳\n");
printf("1:データの登録/修正\n");
printf("2:登録番号から各情報の表示\n");
printf("3:アドレスから氏名の検索\n");
printf("4:終了\n");
scanf("%d",&MenuID);

if(MenuID==1) Regist(AddressList,AddressList2,AddressList3);
else if(MenuID==2) SearchName(AddressList,AddressList2,AddressList3);
else if(MenuID==3) SearchData(AddressList,AddressList2,AddressList3);
else if(MenuID==4) system("cls");/*コンソールをクリア*/
}

}





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

Name: MNS  ..中級者(12,271ポイント)   Date: 2009/06/28(日) 21:46   No:35937     
Title: Re:C言語 アドレス帳    
Run-Time Check Failure #3 - The variable 'bangou" is being used without being initialized.

このエラーに関しては、
scanf("%d",bangou);
これが原因な気がします。

scanf("%d",&bangou);
に直して試してみてください。


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

Name: box  ..ハッカー(141,850ポイント)   Date: 2009/06/28(日) 22:01   No:35941     
Title: Re:C言語 アドレス帳    
プログラムの設計図をきちんと書いてから、開発に取りかかる方がよいです。

今のコードを拝見すると、何だか行き当たりばったりに作っているように見えます。
例えば、

>if(MenuID==1) Regist(AddressList,AddressList2,AddressList3);



>int Regist(int IDNUMBER[],char NAME[],char ADDRESS[])

とで、引数の型が食い違っています。他の関数も、同様です。

ある関数を作るときには、
 ・その関数で何をさせたいのか
 ・そのためには、どんなデータをやりとりするのか
をじゅうぶんに意識する必要があります。

呼び出す側と呼び出された側とでデータの型が違っているのは、論外です。


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

Name: JN  ..かけだし(2,412ポイント)   Date: 2009/06/28(日) 22:05   No:35942     
Title: Re:C言語 アドレス帳    
MSNさん>
エラーでなくなりました
ありがとうございます<(_ _)>

------------------------------------------

番号を入力してもらい各情報の表示の部分は
登録番号を入力してもらったらその入力してもらった番号を
bangouに入れ、そのbangouに入ってる数字をIDNUMBERと照らし合わせ
同じ数字が合ったらその番号に入ってる名前とアドレスを表示するというものを考えています。

bangouに入った数字とIDNUMBERに入ってる数字の照らし合わせ方がよくわかりません><


↓みたいな感じの実行結果を表示したいと思ってます

検索したい情報の番号を入力してください
1
登録番号:1
名前:abc
アドレス:aiueo



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

Name: sizuma [URL]  ..入門者(4,228ポイント)   Date: 2009/06/28(日) 22:18   No:35944     
Title: Re:C言語 アドレス帳    
とりあえずあんまり変えないで、適当な登録だけ作ってみたです。
30分以上かかった・・・
ちなみにCで書くのは初めてなんで、なんかいろいろ適当です
僕が怒られそうです^^;
配列の範囲のチェックとかしてないし
一応動きましたけど(笑)



#include<stdio.h>
#include <stdlib.h>
#include<string.h>

#define DATA_SIZE 100

char NAME[100][20];
char ADDRESS[100][20];


/*IDの範囲チェック*/
int CheckID(int ID)
{
if(ID < 0 || ID >= DATA_SIZE){
printf("不正なIDです。\n");
return 0;
}
if(strcmp(NAME[ID],""){
printf("すでに登録されてるデータがあります\n");
return 0;
}
return 1;
}

/*ID入力補助関数*/
int InputID()
{

int ID;
int result=0;

while(!result)/*正しいIDを入力するまで繰り返し*/
{
printf("登録番号は?(0~%d):",DATA_SIZE-1);
scanf("%d",&ID);

/*IDチェック*/
result = CheckID(ID);

}
return ID;/*習得したIDを返す*/
}

/*登録*/
void Regist(void)
{
/*ID、名前、アドレスの習得*/
int ID = InputID();
printf("名前を入力してください\n");

scanf("%s",NAME);
strcpy(NAME[ID],NAME);

printf("アドレスを入力してください\n");
scanf("%s",ADDRESS);
strcpy(ADDRESS[ID],ADDRESS)
}

void main(void)
{
int MenuID=0;
while(MenuID!=4)
{
printf("アドレス帳\n");
printf("1:データの登録/修正\n");
scanf("%d",&MenuID);
if(MenuID==1) Regist();
}
/*確認用
printf("確認したいID入力");
scanf("%d",&MenuID);
printf("%s\n%s",NAME[MenuID],ADDRESS[MenuID]);
*/



}


若干恥ずかしいミスを訂正しましたorz
C言語難しい

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

Name: JN  ..入門者(2,745ポイント)   Date: 2009/06/28(日) 22:29   No:35945     
Title: Re:C言語 アドレス帳    
>boxさん
いろいろと初歩的なことを間違えててスイマセン<(_ _)>

これは数日前に学校で出された学校の課題なんですが
まだ学校でもプログラムを勉強し始めて数ヶ月なのでわからないことだらけですorz

これは期限が明後日の昼なので
今日またこれから自分でいろいろと読みなおしてみたりしてみます

ありがとうございます<(_ _)>


>sizumaさん
わざわざ登録の部分作ってくださったんですかΣ(・ω・ノ)ノ!
ありがとうございます><
sizumaさんのソースを見てよくわからなかった二次元配列の使い方も少しわかった気がします。

そしてみなさんの指摘などを受けて
自分には初歩的な事が理解できてなかったりいろいろと問題があることを改めて感じたので
ちょっと一人でいろいろと調べたり読みなおしてみたりしたいと思います。
また数時間後、明日あたりに来るかもしれませんがその時はお時間ありましたら
よろしくお願いします<(_ _)>



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

Name: pooka [URL]  ..初心者(8,029ポイント)   Date: 2009/06/28(日) 22:52   No:35947     
Title: Re:C言語 アドレス帳    
>sizumaさん
ぱっと見これはまずいだろうと思った所です。

Regist関数の
>scanf("%s",NAME);
>NAME[ID][0] = NAME;

ここは新たに
char name[20];
などとして、
scanf("%s",name);
strcpy(NAME[ID],name);
としないときちんと動かないと思いますよ。
ADDRESSに関しても同様です。


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

Name: sizuma [URL]  ..入門者(4,385ポイント)   Date: 2009/06/28(日) 23:02   No:35948     
Title: Re:C言語 アドレス帳    
本当ですね(汗
若干恥ずかしいミスを直したと思ったら、まだ恥ずかしいミスがありました・・・
っていうかじっくり探せばまだまだ出てきそうですorz
Javaとかで書いてるときはインスタンス変数と引数を同じ名前にしてthisで区別してるんで、てっきりローカル変数に
char NAME[20]
があるだろうと勘違いしてました(言い訳)

ここらへんはエラーのチェックもしてないし
もう間違えたままにしておきますんで、JNさん気をつけてくださいー


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

Name: JN  ..入門者(3,952ポイント)   Date: 2009/06/29(月) 11:14   No:35959     
Title: Re:C言語 アドレス帳    
>sizumaさん

了解です<(_ _)>
sizumaさんのおかげでもうすぐプログラミング終わりそうですd(´д`o)
--------------------------------------------------------

みなさんのおかげで残す問題はあと1つになったのですが
この1つがわかりませんorz
アドレスを入力してもらったときにそれは誰のアドレスかを表示するものです。(アドレスから氏名の検索)
ネットなどで調べたらstrstrというものを使って文字列と文字列の照合を行えるみたいなことが
書いてあったのですが今一つ理解できません;


今の↓のソースではエラーは1つも出てきませんし実行した時
登録、登録番号を入力したときに各情報の表示は正常に動いてるように見えます。

お時間ある方いましたらお願いします<(_ _)>




#include<stdio.h>
#include <stdlib.h>
#include<string.h>

#define DATA_SIZE 100

char NAME[100][20];
char ADDRESS[100][20];


/*IDの範囲チェック*/
int CheckID(int ID)
{
if(ID < 0 || ID >= DATA_SIZE){
printf("不正なIDです。\n");
return 0;
}

return 1;
}

/*ID入力補助関数*/
int InputID()
{

int ID;
int result=0;

while(!result)/*正しいIDを入力するまで繰り返し*/
{
printf("登録番号は?(0~%d):",DATA_SIZE-1);
scanf("%d",&ID);

/*IDチェック*/
result = CheckID(ID);

}
return ID;/*習得したIDを返す*/
}

/*登録*/
void Regist(void)
{
/*ID、名前、アドレスの習得*/
int ID = InputID();
char name[20];
char address[20];

printf("名前を入力してください\n");

scanf("%s",name);
strcpy(NAME[ID],name);

printf("アドレスを入力してください\n");
scanf("%s",address);
strcpy(ADDRESS[ID],address);
}

/*登録番号から各情報の表示*/
void SearchNumber(void)
{
int id;
printf("確認したいID入力:");
scanf("%d",&id);
printf("登録番号:%d\n",id);
printf("名前:%s\n",NAME[id]);
printf("アドレス:%s\n\n",ADDRESS[id]);
}

/*アドレスから指名の検索*/
void SearchAddress(void)
{



}

void main(void)
{
int MenuID=0;
while(MenuID!=4)
{
printf("アドレス帳\n");
printf("1:データの登録/修正\n");
printf("2:登録番号から各情報の検索\n");
printf("3:アドレスから氏名の検索\n");
printf("4:終了\n\n");
scanf("%d",&MenuID);
if(MenuID==1) Regist();
else if(MenuID==2) SearchNumber();
else if(MenuID==3) SearchAddress();
else if(MenuID==4) system("cls");/*コンソールをクリア*/


}


}







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

Name: ねこ  ..上級者(17,302ポイント)   Date: 2009/06/29(月) 11:52   No:35960     
Title: Re:C言語 アドレス帳    
文字列を比較するのはstrcmp関数です。
比較したい二つの文字を引数に指定し、戻り値が「0」の時は同じ文字となります。
データをfor文でくるくる回して、検索アドレスと登録されたアドレスを比較して同じだったら
同じ配列インデックスの名前を表示します。

なお現在の処理ではアドレスの重複チェックがないため
同じアドレスがあったら2個以上出すのか最初に検索された1個なのか
はたまたチェックして同じアドレスは格納しないようにするのか等
ちょっと改良の余地があるかも。


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

Name: non  ..熟練のプログラマー(51,693ポイント)   Date: 2009/06/29(月) 12:23   No:35961     
Title: Re:C言語 アドレス帳    
strstrは見つかったらそのアドレスを、見つからないときはNULLを返しますから、
NULLでなかったら、その配列のINDEXの名前を表示すればいいです。

それよりも、登録するときにIDを入れるというのは、先生から与えられた仕様ですか?


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

Name: JN  ..入門者(4,068ポイント)   Date: 2009/06/29(月) 16:28   No:35962     
Title: Re:C言語 アドレス帳    
>ねこさん

for文でまわすんですね!
strcmpで検索してちょっとやってみます。
アドレスの重複チェックはこの課題には与えられてなかったので入れてませんでした。。。

>nonさん
登録するときにID(登録番号)を入れるのは先生からそうするように言われました。


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

Name: non  ..熟練のプログラマー(51,794ポイント)   Date: 2009/06/29(月) 17:31   No:35964     
Title: Re:C言語 アドレス帳    
>登録するときにID(登録番号)を入れるのは先生からそうするように言われました。
了解です。

アドレス検索が完全一致ならstrcmpでいいですが、部分一致OKならstrstrの方がいいですよ。



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

Name: sizuma [URL]  ..入門者(4,543ポイント)   Date: 2009/06/29(月) 18:23   No:35967     
Title: Re:C言語 アドレス帳    
>登録ID
余裕があればすでに登録してあるIDを入力したら上書きするかの確認をしたり、
何も入力しなかったら空いてるIDで一番若い番号を返す、なんて機能があればいいんじゃないですかね

>strstr
部分一致OKにするなら2,3個返ってくる可能性も考慮して書いた方がよさそうですね


scanfで入力
for(全部チェック){
if(アドレスがある && strstrで調べる)printfで出力
}

みたいな感じはどうですか?


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

Name: JN  ..入門者(4,190ポイント)   Date: 2009/06/29(月) 23:24   No:35980     
Title: Re:C言語 アドレス帳    
返事遅れてスイマセン<(_ _)>
バイトとかいろいろあり帰ってくるのが遅くなってしまいました。

>nonさん
そういう違いがあるんですね。
今回は友達とかも使ってるのでstrstrを使ってみようと思ってます。

>sizumaさん
全部チェックというところはどうやってやればいいんでしょうか?><


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

Name: sizuma [URL]  ..入門者(4,567ポイント)   Date: 2009/06/30(火) 06:25   No:35984     
Title: Re:C言語 アドレス帳    
>全部チェック
配列の添字を0からDATA_SIZE - 1までループ
って意味です


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



Name: 研修生  ..中級者(9,254ポイント)   Date: 2009/06/25(木) 12:15   No:35713       
Title: 並び替え    
csvファイルで書かれたファイルのデータを並び替える方法が思いつかないので教えて下さい。
生徒番号 クラス 名前   好きな教科
1 A 山田  国語
2 B 佐藤  数学
3 B 加藤  国語
4 A 渡辺  国語




というファイルがあるとすると
クラスと好きな教科が同じのをグループ分けをしたいです。
この例では
生徒番号の1と4,2と3が同じですので
1
4
2
3の順に並べ替えるてまとめて表示するプログラムをMFCにて今組んでいます。
後半の表示はわかりますが前半の分け方がわかりません。
アドバイスでもいいので教えて下さい。



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


Name: 山崎  ..上級者(15,024ポイント)   Date: 2009/06/25(木) 12:45   No:35714     
Title: Re:並び替え    
こんにちは。

わからないのはどの部分でしょうか。
cvsファイルの開き方と読み込み方でしょうか、
それとも、データをソートするアルゴリズムでしょうかな?
はたまた、何をすればいいのか全くわからない、といった感じでしょうか?

具体的に何がわからないのかと、
とりあえず今まで作ってみたソースコードを見せてくれると助かります。


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

Name: 研修生  ..中級者(9,374ポイント)   Date: 2009/06/25(木) 13:04   No:35715     
Title: Re:並び替え    
まずある程度どういうプログラムにするか理解できていないとプログラムは組めません。
その上データのソート方法がわからないのでまだイメージの段階です。
わからないのは分け方かな。値を保持し、比較しさらにソートする、これがわからないとおもいます。
比較はさすがにわかるので値の保持の仕方とソート方法です。


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

Name: non  ..熟練のプログラマー(50,442ポイント)   Date: 2009/06/25(木) 13:13   No:35716     
Title: Re:並び替え    
それでは、csvファイルからデータを読み込み、構造体または配列に格納し、そのままの状態で
表示するところまでのプログラムを添付してください。
csvファイルも参考までに添付してください。



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

Name: 研修生  ..中級者(9,438ポイント)   Date: 2009/06/25(木) 13:42   No:35717     
Title: Re:並び替え    
プログラムを添付して一緒に考えればプログラムも早くできるとは思いますが自分で組まないと
勉強になりません。私が欲しいのはアイデアです。こうすればどうかなど。


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

Name: YuO  ..プログラマー(30,792ポイント)   Date: 2009/06/25(木) 14:09   No:35720     
Title: Re:並び替え    
> まずある程度どういうプログラムにするか理解できていないとプログラムは組めません。

プログラムを作成する場合,プログラムは理解する物ではなく考える物です。
考え方なので,方法はいくつもあると思いますが。


> わからないのは分け方かな。値を保持し、比較しさらにソートする、これがわからないとおもいます。
> 比較はさすがにわかるので値の保持の仕方とソート方法です。

CSVのデータは,1行を構造体にでもマッピングしてしまえばよいと思います。
あとは,それを配列やCArrayやstd::vectorにして保持するだけです。

ソート方法は,好きな方法を使えばよいです。
クイックソートでもヒープソートでも挿入ソートでもバブルソートでも……。
大小関係でソートするこれらのソートであれば,比較関数が問題になるだけです。


ところで,入力がどうみてもCSV ("Comma" Separated Values) ではないのですが。


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

Name: バグ  ..ハッカー(159,964ポイント)   Date: 2009/06/25(木) 14:09   No:35721     
Title: Re:並び替え    
rowとcolumnが固定長のcsvならば、sscanfを使えば簡単ですよ。
固定長でないならば、ちょっと一捻り必要になりますが、csvってのはデータがカンマで区切られているだけのテキストなのですから、「カンマとカンマの間に存在するものが欲しいデータである」という風に考えればいいのではないでしょうか?

ソートに関しては、データ数にもよるでしょうが、そんなに大量でないのならばバブルソートで充分でしょう。
バブルソートについては、検索してみてください。


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

Name: non  ..熟練のプログラマー(50,606ポイント)   Date: 2009/06/25(木) 14:14   No:35722     
Title: Re:並び替え    
>一緒に考えれば
一緒に考えようとは思っていません。

先に言ったところまで作ってくれれば下のことがわかるからです。

1 データの最大件数は?
2 データ格納は動的に行うのか、静的に行うのか?
3 構造体を使うのか?
4 csvファイルは""で囲まれているのか否か?
5 クラスはどのようなものがあるのか?またその順は?
6 好きな教科はどのようなものがあるのか?またその順は?

さて、アイデアということですから、簡単なのは
データを構造体に読み込み、先に好きな教科で並び替え、その後でクラスで
並び替えるという方法でしょうか。

 


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

Name: やそ  ..比類無きプログラマー(92,879ポイント)   Date: 2009/06/25(木) 15:04   No:35725     
Title: Re:並び替え    
研修生さんの技術レベルはわかりませんが、
csvファイルの扱いって厳密に行おうとすると、
Cを触り始めたばかりの初心者には難しいかもしれません。
エラー処理までを考えると非常にめんどいです。
課題であれば、このcsvファイルの構造もしっかり明記されているか、データそのものがあるはずだと思います。
まずはそれをここに晒すことからはじめるべきかな。csvといいつつカンマが見えないし^^;

で、処理の流れは皆さんが挙げられたとおりソートを用いて組むことになります。
まあ、ソートはとりあえずバブルソートでいいんじゃないかな。

1、”クラス”でソートする。
2、”クラス”が同じもののなかで”教科”でソートする。

2番目のソートの実現に若干の工夫が必要です。
というか課題を出された側はそこをどう表現するかを見たいのかもしれません。

規約に則った上で、質問内容を具体的にし、自分はどこまで考えたかを晒せば有用な回答が得られるでしょう。

がんばれ〜。




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

Name: dic  ..上級者(24,987ポイント)   Date: 2009/06/25(木) 17:30   No:35728     
Title: Re:並び替え    
私でしたら・・・と言わない方がいいのかな
私のやり方のヒントでは ハードコーティングします
汎用性は失われるのでもっといい方法があると思います


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

Name: 研修生  ..中級者(9,493ポイント)   Date: 2009/06/25(木) 19:53   No:35743     
Title: Re:並び替え    
意見ありがとうございました。
カンマの方は思いつきの例で手打ちでしたのでみすってしまいました。
今考えてた方法が却下されて構造体でいつでもアクセスできるようにとかいわれ
構造体配列を使うことを考えました。


struct test{
int student_number;
char classtype[5];
char name[20];
char subject[10];
};


struct test seito2[20] = {
{ 1,"A","山田I", "国語"},
{ 2,"B", "佐藤", "数学" },
{ 3,"B", "加藤", "数学" },
{ 4,"A","渡辺","国語"}
};

としておけばアクセスできそうですが・・
よく皆様が構造体といってる類の使い方ですが
こういうことでしょうか?少し今試せる環境にないので後日試してみます。







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

Name: 研修生  ..初心者(8,982ポイント)   Date: 2009/06/26(金) 10:02   No:35781     
Title: Re:並び替え    
自分で組まなければ勉強にならないと大見得きっといてあれですが・・
構造体の組み方についておしえてください。。
1,"A","山田","国語"
2,"B","佐藤","数学"
3,"B","加藤","数学"
4,"A","渡辺","国語"
  ・
  ・
  ・
  ・
というようなファイルの文字列を構造体に組み込めないんですが
どのようにすればいいでしょうか?

今やってるのは

struct test{
int student_number;
char classtype[5];
char name[20];
char subject[10];
};

int main()
{
FILE *fp;
char buf[1001];
if((fp = fopen("test.csv","r")) == NULL){
return;
}
while(fgets(buf,1000,fp) !=NULL){
//struct test T[1000][i] = buf


でwhileから先がわからないのですがfgetsで一行ずつ代入しようとすると配列の配列にしなくてはいけないが
何行あるかはファイル次第なのでstruxt test T[1000][i]としようとしたが定数式ではないので無理でした。

そもそも変換が合わないのですがこのファイルから読み込んだ文字列を構造体に組み込むのはできるのでしょうか?


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

Name: バグ  ..ハッカー(160,199ポイント)   Date: 2009/06/26(金) 11:51   No:35790     
Title: Re:並び替え    
ファイルのフォーマットは1行1レコードですか?
もし、そうならば、fscanfという関数を使えば楽ですよ(^-^)


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

Name: 研修生  ..中級者(9,384ポイント)   Date: 2009/06/26(金) 13:35   No:35793     
Title: Re:並び替え    
csvの定義にレコードは各行で区切られた各値のことと書いてるので1かな?

type struct{
int number[20];
char class type[20];
char name[8];
char subject[20];
} my;

my data[100];

int main()
{
FILE *fp;
int line = 0;
char buf[1000];
if((fp = fopne("test.csv","r")) == NULL){
printf("ファイルopneerror");
}

while(fgets(buf,1000mfp) != NULL){
sscanf(buf,"%d%s%s%s",&data[line].number,data[line].class_type, data[line].name,data[line].subject);
line++;
}

fclose(fp);
return 0;
}


としてみましたが値がちゃんと入っていません。ファイルは1個上の例の内容をテキストファイルで開いたものです。
どこがおかしいのか教えて下さい。


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

Name: non  ..熟練のプログラマー(50,631ポイント)   Date: 2009/06/26(金) 13:42   No:35794     
Title: Re:並び替え    
なぜ、動かしているプログラムそのままを貼り付けないのですか?


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

Name: 研修生  ..中級者(9,413ポイント)   Date: 2009/06/26(金) 13:47   No:35795     
Title: Re:並び替え    
ネットができるPCとプログラムができるPCが別だからです。
USBなどがあれば移せますが今は手元にないので手打ちです。


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

Name: non  ..熟練のプログラマー(50,729ポイント)   Date: 2009/06/26(金) 13:53   No:35796     
Title: Re:並び替え    
あきらかな打ち間違いが3カ所。
構造体のint number[20];を配列にしている意味がわからない。
>sscanf(buf,"%d%s%s%s",&data[line].number,data[line].class_type, data[line].name,data[line].subject);
これでは、分解できない。


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

Name: 研修生  ..中級者(9,479ポイント)   Date: 2009/06/26(金) 14:25   No:35797     
Title: Re:並び替え    
sscanfは初めて使うんですがどこが間違ってるのでしょうか?
分解ということは"%d%s%s%s"のとこでしょうか
"%d,%s,%s,%s"としても値は入っていないですね


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

Name: ねこ  ..中級者(13,805ポイント)   Date: 2009/06/26(金) 14:35   No:35798     
Title: Re:並び替え    
うろ覚えで自信ないんですがsscanfって半角スペース区切りで取得するんじゃなかったでしたっけ。

答えに近い内容を見ていいのなら最近の質問記事にCSVで1行取得後の質問あったと思いますよ。
参考にしてみては?


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

Name: non  ..熟練のプログラマー(50,601ポイント)   Date: 2009/06/26(金) 14:48   No:35799     
Title: Re:並び替え    
>sscanfは初めて使うんですがどこが間違ってるのでしょうか?

使い方はscanfと同じ。
このままでは、区切りがないので、全部最初の変数に格納されようとするが最初は%dなので、
numberには数字が入るけど、次が%sなので ,"A","山田","国語" 全部がclass_typeに格納される。

,(カンマ)でデータを区切るにはテクニックが必要。
scanfを勉強のこと。



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

Name: 研修生  ..中級者(10,008ポイント)   Date: 2009/06/26(金) 15:17   No:35800     
Title: Re:並び替え    
やっぱそうですか。ねこさんのいうようにファイルの区切りをカンマではなく半角スペースならいけました。
sscanfはカンマにはむいていないのかな。別の方法で模索してみます



type struct{
int number[20];
char class type[20];
char name[8];
char subject[20];
} my;

my data[100];

int main()
{
FILE *fp;
int line = 0;
int field = 0;
int i;
char buf[1000], *str;
char bufG[1000];
if((fp = fopne("test.csv","r")) == NULL){
printf("ファイルopenerror");
}

while(fgets(buf,1000,fp) != NULL){
str = buf;
while(*str != '\0'){
if(*str != ','){
for(i = 0; *str != ',' && *str != '\0'; i++){
bufG[i] = *str;
str++;
}
bufG[i] = '\0';

switch(field){
case 0:
strncpy(data[line].number, bufG , sizeof(data[line.number));
breakk;
case 1:
strncpy(data[line].class_type, bufG , sizeof(data[line.class_type));
breakk;
case 2:
strncpy(data[line].name, bufG , sizeof(data[line.name));
breakk;
case 3:
strncpy(data[line].subject, bufG , sizeof(data[line.subject));
breakk;
}
field++;
}
else{
str++;
}
}
line++;
}
fclose(fp);
return 0;
}



こちらはsscanfを薦められる前に組んでいたプログラムですが
これだと最初の一行だけ値が入っています。
次の行からはstrncpyのところでちゃんとはいっていないようです。
bufGの値はちゃんとなっているのにコピーができていません。
どうしてでしょうか?



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

Name: Mist  ..熟練のプログラマー(65,432ポイント)   Date: 2009/06/26(金) 15:31   No:35801     
Title: Re:並び替え    
> 構造体のint number[20];を配列にしている意味がわからない。

nonさんの指摘のこの指摘は無視?
構造体がCSVデータとマッチしていないよ。

あと、コンマ区切りのデータ読み出しならstrtokとか調べてみればよいかと。








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

Name: non  ..熟練のプログラマー(50,788ポイント)   Date: 2009/06/26(金) 15:46   No:35802     
Title: Re:並び替え    
研修生さんにお尋ねしたいのですが、「研修生」というのはほんとの事ですか。
学生ではないのですよね。

万が一、プログラマやコンピュータ関連の仕事に就くための研修生であるのなら
極力アドバイスを避けたいと思うのですが・・・バグを探すのは自分でやらないと
上達しませんので。「研修生」というのはただの、ハンドルネームで、実際は学生
または仕事に関係がない趣味だというのなら、バグをお教えしたいと思います。
どちらですか。



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

Name: 研修生  ..中級者(10,028ポイント)   Date: 2009/06/26(金) 15:47   No:35803     
Title: Re:並び替え    
あーすいません。そこはコピペったので本プログラムではちゃんとなってます

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

Name: 研修生  ..中級者(10,202ポイント)   Date: 2009/06/26(金) 15:55   No:35804     
Title: Re:並び替え    
学生で研修生というハンドルネームつける理由もないですし、本当に研修生ですよ。
バグは自分で見つけるのが一番いいですがやはり人に聞かなければいけないときもあります。
全部自分でやってたら研修3年ぐらいしなくてはいけません。教える教えないはnonさん次第です。
4月からやってますが覚えれば段々聞くこともへってくるのでいいんじゃないかとおもってます。


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

Name: ねこ  ..中級者(13,905ポイント)   Date: 2009/06/26(金) 15:56   No:35805     
Title: Re:並び替え    
要らぬ一言でバグさんのレスを流す形になってしまった、申し訳ない。
sscanfのカンマ区切りの取得方法はnonさんのおっしゃるようにちょっとしたテクニックでいけました。
フォーマットさえ気を付ければスマートにいけますね。参考になりました。


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

Name: Mist  ..熟練のプログラマー(65,206ポイント)   Date: 2009/06/26(金) 15:57   No:35806     
Title: Re:並び替え    
> あーすいません。そこはコピペったので本プログラムではちゃんとなってます

きちんとしたプログラムを提示しないでバグ教えては虫が良すぎるかと。
だいたい、「ちゃんと」とはどうなっているのですか?
int number;

こう定義しているなら

strncpy(data[line].number, bufG , sizeof(data[line.number));

ここはコンパイルエラーにしかならないですね。(元の定義でも変だけど)
括弧の過不足ぐらいなら何とかなりますけど、こちらは提示されたものの中からしか解析できません。
過去にも手打ちで間違いだらけのプログラムを提示する人がいましたが、問題の解決にずいぶん時間がかかっていました。
まず、打ち間違いのないプログラムを提示することが第一かと。


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

Name: non  ..熟練のプログラマー(50,794ポイント)   Date: 2009/06/26(金) 16:08   No:35807     
Title: Re:並び替え    
了解しました。手を引きます。


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

Name: 研修生  ..中級者(10,326ポイント)   Date: 2009/06/26(金) 16:09   No:35808     
Title: Re:並び替え    
まぁ家忘れてきただけなので常時というわけでもないですが気をつけましょう。

strncpy(data[line].number, bufG , sizeof(data[line].number));
こちらが正しいです。
これだとコンパイルエラーにはなりません。

なんか改行の動作が入っていない気もしますね。


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

Name: 研修生  ..中級者(10,362ポイント)   Date: 2009/06/26(金) 16:52   No:35809 解決!     
Title: Re:並び替え    
まぁなんかこの流れだと解答してくれる人がいなくなりそうなので閉めときます。

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

Name: lbfuvab  ..上級者(21,017ポイント)   Date: 2009/06/26(金) 17:56   No:35811     
Title: Re:並び替え    
自分で調べもせず、ソースも見せない。
これではどうしようもないですよ。
医者に行った時、症状も言わず、診断もさせない事と同じです。
どんな医者でも手の打ち様がないです。


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

Name: 研修生  ..中級者(10,506ポイント)   Date: 2009/06/26(金) 18:38   No:35812     
Title: Re:並び替え    
確かに事情があって手打ちになり打ち間違いをしましたが既に打ち間違いは修正しているので
ソースを見せない 呼ばわりされるのも困りますね。
調べもせずとありますがどれのこといってるのでしょうか?調べたとか調べてないとか本人にしかわからない気もするので指摘内容の意味がわかりません。
sscanfはファイルの中のカンマを半角スペースに置き換えてから行なうとかまぁ色々考えてます

というより私がいったこの流れってのはnonさんの非難するわけじゃありませんが
nonさんの意見で、自分で考えさせようという人が増え解答を書くのを抑える人が増えそうなのでいっただけですよ。


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

Name: Mist  ..熟練のプログラマー(65,211ポイント)   Date: 2009/06/26(金) 18:55   No:35813     
Title: Re:並び替え    
> 確かに事情があって手打ちになり打ち間違いをしましたが既に打ち間違いは修正しているので
> ソースを見せない 呼ばわりされるのも困りますね。

どこでですか?
私はnumberの定義がどうなっているな示してくれないので回答をやめていましたが。

回答者:xx間違っていますよ
質問者:打ち間違いです

という不毛なやりとりは誰もしたくないでしょう。


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

Name: バグ  ..ハッカー(160,220ポイント)   Date: 2009/06/26(金) 20:47   No:35817     
Title: Re:並び替え    
このスレのやり取りにデジャヴを感じるのは私だけではないようですね(^_^;)

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

Name: ねこ  ..中級者(14,534ポイント)   Date: 2009/06/27(土) 10:32   No:35837     
Title: Re:並び替え    
一応突っ込んでおこう。

<strncpy(data[line].number, bufG , sizeof(data[line].number));
<こちらが正しいです。
<これだとコンパイルエラーにはなりません。

strncpyの第一引数にint型配列を渡す事はできません。
Mistさんがおっしゃられてるのは括弧のミスの話じゃなくてそういうことです。

<nonさんの意見で、自分で考えさせようという人が増え解答を書くのを抑える人が増えそうなのでいっただけですよ。
構造体について教えてくださいとはあるけど
「アイディアを下さい」って言ったのは研修生さんなんだから自分で言ってておかしくないですか?
「いや、自分は途中からこういうつもりで聞いてる」と思ってたとしても、
それを明示する文章はレスからは不十分かなと。

<調べもせずとありますがどれのこといってるのでしょうか?調べたとか調べてないとか本人にしかわからない気もするので指摘内容の意味がわかりません。
・strncpyの第一引数にintを渡す
・sscanfをカンマで取得する方法
・strncpyの第三引数が何故かsizeof
これらを見てる限り「十分に調べていない」というのは分かってしまいます。


簡単な質問でも答えてくれる人が居るってのは良い事ですよ。
他所なら「ググれ」「過去ログ読め」で終わる内容だって一杯あります。
今回のだって「C++ CSV 読み込み」これで検索するだけで全部分かります。


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

Name: 研修生  ..中級者(11,016ポイント)   Date: 2009/06/29(月) 10:53   No:35958     
Title: Re:並び替え    
確かにアイデアをくださいといってバグさんからsscanfの助言をもらいました。誤解されているのは
sscanfをカンマで取得する方法ならとっくに調べています。sscanf カンマと検索すればずらりと出てきますしね。向いていないというのはsscanfはあくまで半角スペースで区別するもので別の方法をとらなくてはいけないという軽い言い回しで、無理だから調べず他の方法を探るといったわけでもありません。ただこれ以上は聞かなかったというだけのことです。

そこまでがアイデアについて質問した所の一区切りです。上記のはバグさんから助言をいただくまえに
私が自分でアイデアを出したもの(というか自分で組み立てていたプログラム)に対する質問で、こちらはアイデアをくださいとは関係でございません。まぁ一連の流れで察するのは不可能だと思いますがそういうことです。
変な質問転換になってるので本人以外にはわかりませんね。
strncpyの事に関しては無知もいい所でしたがこちらも私のみすでした

numberの定義は
int numberです。ちゃんと書き直さなかったのが良く無かったですね。まぁこれも間違ってるわけですが。
不毛な言い争いになるのでこの件に関しては他で聞くことにします。
板を汚してしまって申し訳ありませんでした。


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

Name: リリス  ..ぴよぴよ(3ポイント)   Date: 2009/06/29(月) 21:53   No:35974     
Title: Re:並び替え    
なんかスレ主むかつくな・・・

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



Name: ???  ..ぴよぴよ(537ポイント)   Date: 2009/06/26(金) 23:08   No:35821       
Title: エラーの理由がわかりません。    
こんにちは。ファイルを読み込むだけですが、読み込む量が非常に多いです。
そこで以下のようなプログラムを組んだのですが、わけのわからないエラーに陥っています。
解決策はわかったのですが理由がわかりません。

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

#define MAX_SIZE 128
#define MAX_LINE 65536

int main(void){
// test.txtを読み込む
FILE *fp;
fp = fopen("test.txt", "r");
if(fp == NULL){
printf("ファイルの読み込みに失敗しました。\n");
exit(1);
}

// ファイルを最後まで読み込む]
char buff[MAX_LINE][MAX_SIZE];
int len;
int i = 1;
while(1){
if(fgets(buff[i], MAX_SIZE, fp)==NULL)
break;
len = strlen(buff[i]);
if(len == 0 || buff[i][len - 1] != '\n'){
if(feof(fp) == 0){
printf("データが不正です[%s]。\n", buff[i]);
return 0;
}
}
buff[i][len-1] = '\0';
i++;
}
fclose(fp);
return 0;
}


だとエラーが出て処理が強制終了するのに
// ファイルを最後まで読み込む]
char buff[MAX_LINE][MAX_SIZE];

// ファイルを最後まで読み込む]
static char buff[MAX_LINE][MAX_SIZE];
にするとエラーが出ません。
static変数は勉強中あまり使っておらず(理屈としてはわかったような気にはなっていますが)、苦手なのですが、この変化によって正常に動いたり異常が発生したりする理由は何なのでしょうか?

すみませんが、よろしくお願いします。


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


Name: たかぎ [URL]  ..ハッカー(106,838ポイント)   Date: 2009/06/26(金) 23:13   No:35823     
Title: Re:エラーの理由がわかりません。    
スタックオーバーフローが原因かと思います。


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

Name: ???  ..ぴよぴよ(584ポイント)   Date: 2009/06/27(土) 01:39   No:35828     
Title: Re:エラーの理由がわかりません。    
回答有難うございます。
すいません。何故スタックオーバーフローが発生したか、その理由がわからず質問させていただきました。


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

Name: toyo  ..プログラマー(36,807ポイント)   Date: 2009/06/27(土) 02:38   No:35829     
Title: Re:エラーの理由がわかりません。    
変数の宣言方法で変数用のメモリが確保される方法が変わります。
関数内で宣言された変数は普通は自動変数としてスタックという領域に確保されます。
スタックは大きさが限られているので大きな配列を宣言するとスタックの大きさを超えてしまい足りなくなることがあります。
これをスタックオーバーフローといいます。
スタックオーバーフローは大きな配列宣言のほかに再帰関数でも起こる可能性があります。
一方変数にstaticをつけると静的変数となり変数が別の領域に確保されます。スタックには影響しないのでスタックオーバーフローを回避できます。変数を関数の外に出してグローバル変数にしても同様にスタックに影響しないので大丈夫です。
VisualC++のスタックは標準で1Mバイトだったと思います。8Mバイトの配列では明らかに足りませんね。
スタックのサイズはリンカのオプションで変更できますが普通はスタックを増やすよりプログラム設計を見直したほうがいいでしょう。


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

Name: ???  ..ぴよぴよ(668ポイント)   Date: 2009/06/29(月) 01:41   No:35956     
Title: Re:エラーの理由がわかりません。    
>toyo様
有難うございます。
設計を見直すといっても、読み込みもとのファイルがウン十万行を余裕で超えているので、どうしても配列が必要なのです・・・

おっしゃるとおりちょっと考えて見ますね


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

Name: バグ  ..ハッカー(160,413ポイント)   Date: 2009/06/29(月) 08:05   No:35957     
Title: Re:エラーの理由がわかりません。    
その数十万行のデータを一時的に分割保存する事は出来ないのでしょうか?

更に言えば、分割する際に一定のルールを設けてみてはいかがでしょうか?

例えば、なんらかの数値データが保存されているとして、0〜99の場合はファイル1へ、100〜199のファイル2へ…みたいに、元データファイルのデータを1つ読み込む度に別のファイルへ落としていき、必要に応じてそれぞれのファイルから再度データを抜き出す…みたいな感じでどうでしょうか?

無論、全てのデータを保持しておかなければいけない場合はこの方法は使用できませんが…


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




 
[ 1 , ... ]
 
 
管理者画面   RSS   + Powered By 21style +