C言語何でも質問掲示板


Total hit  今日  昨日  

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

 
   『物理:質問雑談?』  ....   
     ・[50031] たいちう 
     ・[50032] Dixq (管理人) 
     ・[50033] Ma 
     ・[50050] 組木紙織 
     ・[50058] ぽこ 
     ・[50061] たいちう 
     ・[50063] Ma 
     ・[50067] lbfuvab 
     ・[50068] Ma 
     ・[50069] ぽこ 
     ・[50089] Ma 
     ・[50107] lbfuvab 
   absについて   
     ・[50075] Ma 
     ・[50076] wing 
     ・[50077] たかぎ 
     ・[50078] たかぎ 
     ・[50079] wing 
     ・[50081] Ma 
     ・[50082] たかぎ 
     ・[50083] たいちう 
     ・[50084] wing 
     ・[50085] imoinu 
     ・[50086] wing 
     ・[50087] wing 
     ・[50088] たかぎ 
     ・[50090] wing 
     ・[50092] たいちう 
     ・[50093] たかぎ 
     ・[50102] wing 
   グーグルマップのよう ....   
     ・[50016] Ma 
     ・[50036] yskey 
     ・[50037] Ma 
     ・[50038] yskey 
     ・[50040] Ma 
     ・[50054] yskey 
     ・[50065] Ma 
     ・[50094] yskey 
   Aerobeat PlusのFPSni   
     ・[50056] Dixq (管理人) 
     ・[50060] kai 
     ・[50072] Dixq (管理人) 
     ・[50074] kai 
   DXライブラリの設定に ....   
     ・[50064] Ma 
   住所録について   
     ・[50052] たいちう 
   プログラムを打つため ....   
     ・[49993] softya 
     ・[50011] jay 
     ・[50046] てってけ 
   構造体について   
     ・[50022] 紅葉 
     ・[50023] 紅葉 
     ・[50025] Dixq (管理人) 
   ブロック崩し   
     ・[50024] Dixq (管理人) 
   サブフォルダ・再帰的 ....   
     ・[49948] たいちう 
     ・[49954] dic 
     ・[49963] Ma 
     ・[49968] Justy 
     ・[49986] Ma 
     ・[49987] Ma 
     ・[49988] Justy 
     ・[49989] Ma 
     ・[49995] たいちう 
     ・[49996] Justy 
     ・[49997] Ma 
     ・[50018] Justy 
     ・[50019] Ma 
   文字列のインデクスを ....   
     ・[50003] softya 
     ・[50005] たいちう 
     ・[50007] たかぎ 
     ・[50010] nicma 
   「includeファイル開け ....   
     ・[50009] Konno Toshio 
   すべてのカウンターを ....   
     ・[49978] kazuoni 
     ・[49980] y 
     ・[49982] no 
     ・[49999] 舞桜 
   C言語初心者です。おし ....   
     ・[49970] TKOZ 
     ・[49972] xaion 
     ・[49973] box 
     ・[49976] no 
     ・[49983] てってけ 
     ・[49994] たかぎ 
   画像のサイズについて ....   
     ・[49974] no 
     ・[49979] kazuoni 
     ・[49981] no 
     ・[49985] kazuoni 
     ・[49990] xaion 
     ・[49992] Dixq (管理人) 
   初心者です   
     ・[49935] kazuoni 
     ・[49937] ideyan 
     ・[49951] mitunari 
     ・[49952] mitunari 
     ・[49958] wing 
     ・[49961] たいちう 
     ・[49962] Dixq (管理人) 
     ・[49975] mitunari 
     ・[49991] Dixq (管理人) 
   system()について   
     ・[49929] ぽこ 
     ・[49930] あいくん 
     ・[49931] ぽこ 
     ・[49933] あいくん 
     ・[49934] lbfuvab 
     ・[49942] あいくん 
     ・[49944] no 
     ・[49945] no 
     ・[49946] あいくん 
     ・[49953] dic 
     ・[49955] たかぎ 
     ・[49956] あいくん 
     ・[49964] Ma 
     ・[49965] Ma 
     ・[49966] あいくん 
     ・[49967] Ma 
   STG作りました。   
     ・[49710] TKOZ 
     ・[49717] Tororo 
     ・[49720] situmon 
     ・[49721] Tororo 
     ・[49748] situmon 
     ・[49756] Tororo 
     ・[49769] situmon 
     ・[49771] Tororo 
     ・[49776] Tororo 
     ・[49793] Tororo 
     ・[49794] らぁ 
     ・[49795] らぁ 
     ・[49796] Tororo 
     ・[49825] Tororo 
     ・[49862] Tororo 
     ・[49959] Tororo 
     ・[49960] Tororo 
   fatal error LNK1000   
     ・[49917] たかぎ 
     ・[49918] たかぎ 
     ・[49919] softya 
     ・[49949] kai 
     ・[49950] softya 
     ・[49957] kai 
   龍神録プログラミング ....   
     ・[49909] たいちう 
     ・[49943] nayuta 
   ダンジョンゲームプロ ....   
     ・[49940] たいちう 
     ・[49941] ogaoga 
   wavの再生で再生されな ....   
     ・[49829] Ma 
     ・[49858] kazuoni 
     ・[49892] ryu 
     ・[49895] ru-pu 
     ・[49904] lbfuvab 
     ・[49905] Ma 
     ・[49921] no 
     ・[49922] ryu 
     ・[49926] Ma 
     ・[49939] ryu 
   コンパイルできない   
     ・[49908] softya 
     ・[49920] dic 
     ・[49923] softya 
     ・[49936] dic 
   各プレイヤー画面の描 ....   
     ・[49925] Ma 
     ・[49927] いわし 
   LoadDivGraphのエラー   
     ・[49915] Ma 
   例外が発生しました。   
     ・[49900] MNS 
     ・[49902] Dixq (管理人) 
     ・[49903] Ma 
     ・[49910] トトロ 
     ・[49911] MNS 
     ・[49912] トトロ 
     ・[49913] Ma 
   シューティングゲーム ....   
     ・[49890] Dixq (管理人) 
     ・[49891] 光冠 
     ・[49893] Dixq (管理人) 
     ・[49896] 光冠 
     ・[49897] 光冠 
     ・[49898] Dixq (管理人) 
     ・[49901] 光冠 
   sin(),cos()の値の ....   
     ・[49808] 紅葉 
     ・[49809] 紅葉 
     ・[49838] たいちう 
     ・[49841] Dixq (管理人) 
     ・[49894] サンタクロース 
   超初歩的なのですが・ ....   
     ・[49844] Ma 
     ・[49845] Dixq (管理人) 
     ・[49853] softya 
     ・[49888] リペリオン 
   無題   
     ・[49875] セレン 
     ・[49878] softya 
     ・[49886] セレン 
     ・[49887] softya 
   入門編の初めの実行画 ....   
     ・[49871] たいちう 
     ・[49885] Konno Toshio 
   c++のクラスメンバのオ ....   
     ・[49877] softya 
     ・[49879] shin 
     ・[49880] たかぎ 
     ・[49881] たいちう 
     ・[49884] dic 
   DXライブラリって…   
     ・[49872] softya 
     ・[49882] dic 
     ・[49883] softya 
   DXライブラリで更新が ....   
     ・[49801] Dixq (管理人) 
     ・[49807] セレン 
     ・[49812] tkmakwins15 
     ・[49814] Dixq (管理人) 
     ・[49849] セレン 
     ・[49852] セレン 
     ・[49873] セレン 
   C言語って   
     ・[49866] ひよこ 
     ・[49867] softya 
     ・[49869] 青い鳥 
   物理メモリの使用率を ....   
     ・[49861] tk 
     ・[49863] Ma 
     ・[49864] Ma 
   入力画面について質問 ....   
     ・[49857] kazuoni 
     ・[49860] Ma 
   名前の入力欄   
     ・[49856] kazuoni 
   sizeof演算子について   
     ・[49822] dic 
     ・[49824] box 
     ・[49846] あきら 
     ・[49848] tk 
     ・[49855] あきら 
   DXライブラリでモノク ....   
     ・[49854] kazuoni 
   初投稿です。   
     ・[49823] cry 
     ・[49842] nayuta 
   リスト構造について   
     ・[49832] box 
     ・[49833] softya 
     ・[49834] 通りすがり 
     ・[49835] えあ 
     ・[49836] えあ 
     ・[49837] たいちう 
     ・[49839] Dixq (管理人) 
     ・[49840] えあ 
   ランチャー   
     ・[49811] Ma 
     ・[49813] yamataka 
     ・[49815] Dixq (管理人) 
     ・[49816] yamataka 
     ・[49817] Ma 
     ・[49818] yamataka 
     ・[49819] バグ 
     ・[49826] y 
     ・[49828] Dixq (管理人) 
     ・[49830] バグ 
   GetHitKeyStateAllをル ....   
     ・[49806] lbfuvab 
     ・[49810] Ma 
   初歩の初歩です   
     ・[49799] もぐりん 
     ・[49802] Dixq (管理人) 
   アクションプログラム ....   
     ・[49797] ideyan 
   お久しぶりです。。【 ....   
     ・[49779] Dixq (管理人) 
     ・[49783] softya 
     ・[49784] J 
     ・[49785] Dixq (管理人) 
     ・[49787] J 
     ・[49788] バグ 
     ・[49789] Dixq (管理人) 
     ・[49790] softya 
     ・[49791] Dixq (管理人) 
   大手ゲーム会社の筆記 ....   
     ・[49660] たかぎ 
     ・[49661] Dixq (管理人) 
     ・[49662] たかぎ 
     ・[49663] たかぎ 
     ・[49664] Dixq (管理人) 
     ・[49665] たかぎ 
     ・[49666] たかぎ 
     ・[49667] たかぎ 
     ・[49670] sizuma 
     ・[49671] sizuma 
     ・[49673] sizuma 
     ・[49674] たかぎ 
     ・[49677] sizuma 
     ・[49680] たかぎ 
     ・[49683] sizuma 
     ・[49703] Mikan 
     ・[49713] sizuma 
     ・[49762] ちゃお 
     ・[49764] dic 
     ・[49765] sizuma 
     ・[49766] sizuma 
     ・[49780] Dixq (管理人) 
     ・[49786] sizuma 
   2dと3dの両方が一度に ....   
     ・[49774] Ma 
     ・[49777] 凛 
     ・[49782] Ma 
   キャラクターが向いて ....   
     ・[49647] SHIM  
     ・[49655] softya 
     ・[49686] SHIM  
     ・[49687] ideyan 
     ・[49729] SHIM  
     ・[49730] Ma 
     ・[49734] SHIM 
     ・[49752] Ma 
     ・[49759] SHIM 
     ・[49781] Ma 
   DXライブラリで3Dゲー ....   
     ・[49689] Ma 
     ・[49726] アキト 
     ・[49732] たいちう 
     ・[49739] アキト 
     ・[49740] たいちう 
     ・[49749] アキト 
     ・[49750] たいちう 
     ・[49751] Ma 
     ・[49754] たいちう 
     ・[49755] Ma 
     ・[49761] たいちう 
     ・[49775] Ma 

Name: Ma  ..比類無きプログラマー(70,566ポイント)   Date: 2010/04/02(金) 09:44   No:50029       
Title: 『物理:質問雑談?』 分子ひとつの運動エネルギー    
高校物理の熱エネルギーのあたりからの質問です。

(物理専門掲示板より反応がはやいので、こちらで質問させていただきます。なんでも掲示板みたいに頼って利用しちゃってすいません(汗))

塾で講師がプリントを見ながら分子ひとつの運動エネルギーと気体温度の関係を導く式をホワイトボードに
書きながら解説していたところ、腑に落ちないところがあったので質問したところ
講師が疑問に答えらなかったので、こちらでお聞きしたいと思っております。


ノートを添付しました。

一応流れを簡単に説明すると、最初に風船を考えます。
風船の中の分子が風船内部の壁(B地点)に衝突し、その後C地点に衝突するシチュエーションです。

風船内部の壁との垂直成分の速度から運動量の変化を取得、その後に力積のアイディアを元にかかっていた力を求めて、圧力を算出。あとは、PV=nRTに代入。
のような流れです。


添付画像の赤い枠のところが納得いきません。

これは、力積から運動量の変化を求める式
F*冲 = m*况
を元にしてかかれているのはわかるのですが、
冲 が、なぜBC間の移動にかかった時間であるかが納得いきません。
力積ならば、B地点で風船と分子とが接触している時間を指定するべきだとおもうのに、それにもかかわらず、なぜBC間の移動時間なのかが納得いきませんでした。

(一応、講師は書物から印刷されたと思われるプリントを見ながら書いていたので、間違いではないとおもうのですが。。。)


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


Name: たいちう  ..熟練のプログラマー(64,802ポイント)   Date: 2010/04/02(金) 11:16   No:50031     
Title: Re:『物理:質問雑談?』 分子ひとつの運動エネルギー    
早くレスが欲しいのならば、もっと丁寧にノートを書き直してはいかがかと。
手書きの式に参照番号を振って、コメントで物理的な意味を説明するとか。

プログラムの質問も同じだけど、うまく相手に伝わるように
自分の問題を整理することが大事です。
その過程で自分自身の理解も深まり、自己解決できることもままあります。


# 件の計算は学生の頃に何度もやった記憶がありますが、
# それから何百年もたってしまったので片手間では回答できません。
# 今夜にでも時間が取れたら取り組んでみます。


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

Name: Dixq (管理人)  ..ウィザード(1,168,184ポイント)   Date: 2010/04/02(金) 11:26   No:50032     
Title: Re:『物理:質問雑談?』 分子ひとつの運動エネルギー    
私も物理は好きだったのに改めてこうして聞かれるとすっかり忘れてしまっているのが解ります…。
それ専門の学科に行かない人は大学受験が終わったら、全く問題を解く機会が無いですもんね…。
ゲームプログラムで利用するのはせいぜい力学位だし。
今となっては受験時代大事にしてた参考書すら手元にありません^_^;
私も家に帰ったら思い出してみようと思いますが力になれるかどうかは…


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

Name: Ma  ..比類無きプログラマー(71,147ポイント)   Date: 2010/04/02(金) 11:42   No:50033     
Title: Re:『物理:質問雑談?』 分子ひとつの運動エネルギー    
>早くレスが欲しいのならば、もっと丁寧にノートを書き直してはいかがかと。 
失礼しました。
そこまで急ぎではないですが、たしかにもっと丁寧に説明を加えるべきでしたね。

添付ファイルで青文字で番号をふりました。
(今回の質問は、Cが納得いかないというものです)


@
Vx は、風船内部の壁に対して垂直な成分の速さです。
θは、分子の入射角です。(ここでは、入射角=反射角がなりたちます。)
vベクトルの長さに、cos(θ)をかけて得たのが、Vxです。

A
運動量は、mv ですが、運動量の変化を儕=m况 と表記しています。
跳ね返るとき、壁と平行成分の速度には変化はなく、垂直成分は反転するので、運動量の変化は、
儕 = 2*(m况)
です。

B
BC間の距離は、三角形を作るとわかるように 2*(R*cos(θ))です。
時間=距離/速度
より、冲 = (2*R*cos(θ))/|v|

C
力積の公式。
F冲 = 儕
より、AとBを代入する。


D
F= にCを整理しただけ。

E
風船の中に n molだけ分子がある場合、分子の総数は
n*N0 です。
ただし、 N0 をアボカドロ数(6.02*10^23)とする。

F
P = F/S
圧力は、力[N]を面積[m^2]で割った値。

G
Fの式に、Dで得たFと、S = 4πR^2 を代入。


H
PV を求めます。
Pは、Fから移入。V= 4/3*πR^3


I
気体の状態方程式の公式
PV = nRT
より、H = nRT とできる。
式をまとめなおすと、分子ひとつと運動エネルギーと温度との関係がわかる。



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

Name: 組木紙織  ..比類無きプログラマー(78,828ポイント)   Date: 2010/04/02(金) 16:06   No:50050     
Title: Re:『物理:質問雑談?』 分子ひとつの運動エネルギー    
回答がないようなので少しだけ書きます。

なぜに衝突している間の時間をdtにとらないか?という疑問ですが、
衝突していない間の時間を考えてみてください。
衝突している間は圧力が存在して、衝突していない間は圧力は存在しないことになるのでしょうか?



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

Name: ぽこ  ..初心者(7,647ポイント)   Date: 2010/04/02(金) 20:30   No:50058     
Title: Re:『物理:質問雑談?』 分子ひとつの運動エネルギー    
何を解こうとしているのか明確になっていない気が。。
「分子ひとつと運動エネルギーと温度との関係を導き出す」で良いですか?

後2つほど確認したいことが。
・圧力のPと運動量の変化のPは別物ですよね?
・球の半径のRと気体定数(だっけ?)のRは別物ですよね?

#私の頭の中ではしばらくコンパイルエラーでした。。。
#講師がこういう例出しちゃいかんだろ

力積に関して勘違いしているのが原因かなと思います。
運動量の変化冪と力積の関係は確かに冪=F冲です。
で・す・が、
誰も(教科書も)冲が短い時間とは言っていないはずです。
冲が小さければFは撃力というってだけだったはずです。
だから1Nの力で10秒かけて物体を押した場合と、10Nの力で1秒かけて物体を押した場合で
運動量の変化は同じはずです。

ではなぜ、BC間の時間を取っているのか?
BC間は衝突から衝突までの時間ですよね?
この時間で割って算出したFは「衝突から衝突までにかかる平均の力」と
捉えることが出来ますよね?
つまり、

#すみません、子供寝かしつけてから続き書きます。
#まあ、私もここからどう説明するか悩んでいるのですが。。 編集済み


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

Name: たいちう  ..熟練のプログラマー(65,155ポイント)   Date: 2010/04/02(金) 21:59   No:50061     
Title: Re:『物理:質問雑談?』 分子ひとつの運動エネルギー    
自分で説明するのが面倒なので、リンクを貼ってみる。

http://www4.osk.3web.ne.jp/~moroko/
http://www4.osk.3web.ne.jp/~moroko/physics%28gasmol%29/gasmol2/gasmol2.html

# ボタンで工夫しているサイトだけど、成功しているかどうかは微妙。


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

Name: Ma  ..比類無きプログラマー(72,440ポイント)   Date: 2010/04/03(土) 00:57   No:50063 解決!     
Title: Re:『物理:質問雑談?』 分子ひとつの運動エネルギー    
>・圧力のPと運動量の変化のPは別物ですよね? 
>・球の半径のRと気体定数(だっけ?)のRは別物ですよね? 

です、ややこしくてすいません><


>リンクを貼ってみる。 

ふたつめのリンク、すごくわかりやすかったです。ありがとうございます。
つまり、先生はFは1回の衝突についての力だと思っていたようですが、それは間違いで
Fは、衝突が持続するものとして考えた場合の平均の力だったわけですね。

(説明が難しいな。。。)

つまり、添付画像のようにFもtも平均の話だったというわけですね。
tは、グラフ全体(すべての時間)を平均化できるようにするための値であって、衝突中の力を平均化するための時間範囲ではなかった、というわけですね。

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


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

Name: lbfuvab  ..プログラマー(25,182ポイント)   Date: 2010/04/03(土) 05:13   No:50067     
Title: Re:『物理:質問雑談?』 分子ひとつの運動エネルギー    
え〜と、こういうのは立方体を使った方がやりやすいので、立方体で行きます。
立方体なら画像の様になります(風船を使う事に意味があるのかもですが・・・



追記:もう解決してましたね^^; 多少端折った箇所があるので注意してください。
 編集済み


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

Name: Ma  ..比類無きプログラマー(72,789ポイント)   Date: 2010/04/03(土) 08:41   No:50068     
Title: Re:『物理:質問雑談?』 分子ひとつの運動エネルギー    
>lbfuvabさん

わざわざありがとうございます。
おかげで再確認できました。

風船でもできるってのが、なかなかすごいですよね。


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

Name: ぽこ  ..初心者(7,920ポイント)   Date: 2010/04/03(土) 09:23   No:50069     
Title: Re:『物理:質問雑談?』 分子ひとつの運動エネルギー    
朝起きたら解決しているorz

>Fは、衝突が持続するものとして考えた場合の平均の力だったわけですね。 
>(説明が難しいな。。。) 

そもそもC→D→Eという順序に導出するのが(教え方の)間違いなのかなと思います。
C→E→Dと考えると、ごく自然に納得できるのではないでしょうか?

C分子一個あたりの運動量の変化
E風船の中の分子全部の運動量の変化(総和)F冲×n(mol)
D単位時間あたりの風船の壁にかかる力nF/冲
 (すべての分子が同じ時刻に壁にぶつかるのではなく、どの時刻でも同じ数の分子がぶつかっていると仮定して。期待値的な値)


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

Name: Ma  ..比類無きプログラマー(73,559ポイント)   Date: 2010/04/03(土) 14:06   No:50089     
Title: Re:『物理:質問雑談?』 分子ひとつの運動エネルギー    
>C→E→D

たしかに、そのとおりですね。
ひとつの分子から全体へ考えるタイミングをミスった解説だったようです。


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

Name: lbfuvab  ..プログラマー(25,239ポイント)   Date: 2010/04/03(土) 22:07   No:50107     
Title: Re:『物理:質問雑談?』 分子ひとつの運動エネルギー    
ミスがあります。

「全体の一秒間での力」
 ↓
「全体の一秒間での力積」

ですね。
後、分かるとは思いますが「全体の一秒間での力積」と「全体の力」は同じ値になります。


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



Name: wing  ..初心者(6,951ポイント)   Date: 2010/04/03(土) 09:39   No:50071       
Title: absについて    
ネットで当たり判定を検索していたら、if文の中に
abs(ch.y > *Y - CHIP_SIZE/2 - 16.0f)
というのがありました。
ch.h, *Y, CHIP_SIZEは自分のゲームにあわせてあります。

absは初めてだったのでネットで調べました。
分からないのは、ch.y > *Yです。 足し算や引き算なら分かるのですが、
ch.y > *Y のような不等号が入っていることです。

そのまま使っているんですが、うまく動いています。

どなたか解説をお願いします。
VC2008EEを使っています。


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


Name: Ma  ..比類無きプログラマー(73,218ポイント)   Date: 2010/04/03(土) 10:23   No:50075     
Title: Re:absについて    
私の結論から言うと、absを使う理由が分からないです・・・。
私よりもっと詳しい人の見解がほしいですね。

あと、Yの型がなにかおしえてください。
もしくは、そのサイトへのリンクがほしいところです。


以下、私の分析。

比較演算子のほうが加法演算子より優先度が低いので、
abs 関数の中身は

ch.y > (*Y - CHIP_SIZE/2 - 16.0f)

こうなるかと思います。

で、Y は、なんらかの値のポインタだとすれば、
比較演算子の結果は、0 か 1 になるはずです。


それを、
abs関数の引数に渡しても
0 か 1 になるだけなので、何もかわりません。

最後にif文に渡して、条件分岐。


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

Name: wing  ..初心者(7,350ポイント)   Date: 2010/04/03(土) 11:41   No:50076     
Title: Re:absについて    
>Maさん、ありがとうございます。

元のコードですが、掲示板が閉鎖されているので許可は取ってありませんが、
もともとオープンにされているのでたぶん大丈夫だと思いますので。
  lift3=($Mychar.y>y && $Mychar.vy<0 &&
  abs($Mychar.x-x)<blockwidth-7 && abs($Mychar.y-y)<blockheight);
  
  lift4=(abs($Mychar.x-x)<blockwidth-7 && $Mychar.y<y &&
  abs($Mychar.y>y-blockheight/2-16) && $Mychar.vy>=0);

..........
  if(lift3==TRUE){   //自機の上にリフトがある場合
    $Mychar.vy=0;
    $Mychar.y=y+blockheight;
  }  
  
  if(lift4==TRUE){   //自機の下にリフトがある場合
    $Mychar.y=y-blockheight/2-16;
    $Mychar.jmp=0;
    $Mychar.vy =0;

キャラとリフトの当たり判定です。*YはリフトのY座標です。
どちらも画像の中心の座標です。
プログラムが思ったとおりに動いているので疑っていなかったんですが、
lift3とlift4をよく見比べていたら、もしかしたら間違っているんじゃないかと思って、

abs(ch.y > *Y - CHIP_SIZE/2 - 16.0f)を
abs(ch.y - *Y) < CHIP_SIZE としたところ、やはり同じようにうまく動きました。

absを良く知らないので、さっきまでは、不等号があってもいいのかなと思っていたんですが、
絶対値を求めているわけですから、やはり間違いなのでしょうか。
(今までは、作者の高度なテクニックだと思っていたんですが)


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

Name: たかぎ [URL]  ..ハッカー(172,513ポイント)   Date: 2010/04/03(土) 11:46   No:50077     
Title: Re:absについて    
言語不明なので何ともいえません。

C++であれば、ch.y、Y、CHIP_SIZEのそれぞれの型によって、どう振る舞うかは変わってきます。
absも各演算子も多重定義されているかもしれず、これだけの情報では何もわかりません。


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

Name: たかぎ [URL]  ..ハッカー(172,525ポイント)   Date: 2010/04/03(土) 11:49   No:50078     
Title: Re:absについて    
> もともとオープンにされているのでたぶん大丈夫だと思いますので。 

それはとんでもない誤解です。
まあ、今回は引用の範囲なので大丈夫だとは思います。


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

Name: wing  ..初心者(7,502ポイント)   Date: 2010/04/03(土) 12:24   No:50079     
Title: Re:absについて    
>たかぎ様、ありがとうございます。
著作権のことは考えたんですが、商用でもないし、ごく一部なので
作者様もおおめに見てもらえるかと思いました。
今後は気をつけます。

たかぎさんのニュアンスでは、absに不等号が含まれることもある、と
解釈させていただきます。

正しいコードであることが分かればいいのです。
あとは解釈できないだけですから、じっくり考えてみたいと思います。

元のコードはPythonだと思われます。
私は、独学で、龍神録の館でプログラムを勉強し、それが分かる程度です。
VC2008EE, DXライブラリで趣味でゲームを作っています。


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

Name: Ma  ..比類無きプログラマー(73,524ポイント)   Date: 2010/04/03(土) 12:32   No:50081     
Title: Re:absについて    
$ってことは、、、たぶんPerlの話だったんですね…。
Perl についてはあまり詳しくないので、間違った発言するかもしれません。

>*YはリフトのY座標です。 

最初にかいたように
(>あと、Yの型がなにかおしえてください。 )
それが何を意味するのか聞いたのではなく、『型』を聞いいていたんです。
ソース見てみるとYにあたるblockheightはint型の数値かな?


ソースを見たところ、最初の質問内容と類似しているのは
abs($Mychar.y>y-blockheight/2-16) 
ここでしょうかね。
ここのことを聞いていると解釈しますが、正しいでしょうか?


とりあえず、absはずして本来の動作をするかどうかチェックしてもらえますか?
なんとなくですけど、それでも動作しそうな気がする…。


それでも大丈夫だったなら、そのページの著者のミスの可能性もありますね。


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

Name: たかぎ [URL]  ..ハッカー(172,554ポイント)   Date: 2010/04/03(土) 12:44   No:50082     
Title: Re:absについて    
> たかぎさんのニュアンスでは、absに不等号が含まれることもある、と 
> 解釈させていただきます。 

そういうことではありません。

> 元のコードはPythonだと思われます。 

多分違いますね。

> $ってことは、、、たぶんPerlの話だったんですね…。 

私はパッと見、PHPかと思いました。


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

Name: たいちう  ..熟練のプログラマー(65,291ポイント)   Date: 2010/04/03(土) 13:05   No:50083     
Title: Re:absについて    
ググって見たところ、言語は「Tonyu System」というものではないかと思われる。
http://ja.wikipedia.org/wiki/Tonyu_System

で、ここからダウンロードできるEvent.tonyuというファイルのようだ。
http://www.tonyu-arpg.com/tonyu_sample/8-1.html

この言語のことは全く知らないけれど、間違いでしょう。
サイトの管理者に問い合わせてはどうでしょうか。
2年ほど更新のないサイトみたいですが。


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

Name: wing  ..初心者(7,689ポイント)   Date: 2010/04/03(土) 13:11   No:50084     
Title: Re:absについて    
>Maさん、どうもありがとうございます。
Perlでしたか。Pythonなどといい加減なこと書いてすいませんでした。

*X,*Yは222とか198とかの値が入っているので、たぶんint型だと思います。

abs($Mychar.y>y-blockheight/2-16) このコードのことです。
if(abs(ch.x-*X) < CHIP_SIZE - 7.0f && ch.y < *Y &&
  /*abs*/(ch.y > *Y - CHIP_SIZE/2 - 16.0f) && ch.vy >= 0.0f){
  ch.y = *Y - CHIP_SIZE/2 - 16.0f;

自分なりに使えるようにしたコードですが、absをコメントアウトしても
同じに動きます。
私は、ch.y も *Yも floatを使っています。
(画像の中心を座標にするためDrawRotaGraphFを使っているので)


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

Name: imoinu  ..ぴよぴよ(61ポイント)   Date: 2010/04/03(土) 13:17   No:50085     
Title: Re:absについて    
こんにちは、いつもは見ているだけなのですが、気になったので、書き込みします。

>abs($Mychar.y>y-blockheight/2-16)
これが書いてあるサンプルをダウンロードしていました。
これ、TonyuSystemという、ゲーム作成ツールで使用できる、リフトの移動を記述したスクリプトです。
下のサイトの、サンプルプログラムのその他のリフトの項目にありました。

http://www.tonyu-arpg.com/






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

Name: wing  ..初心者(7,944ポイント)   Date: 2010/04/03(土) 13:33   No:50086     
Title: Re:absについて    
>たいちう様、ありがとうございます。
サイトはそのとうりです。

マリオ風ゲームを作っていて、そのサイトを参考にリフトを
実装できたんですが、このことだけがずっと気になっていました。

ネットでプログラムを勉強しているので、書いてあることはすべて
疑うことはありませんでした。
エラーもでなかったので、
あのコードになにか特別な意味があるのかと思ってそのまま使っていました。

でもよく考えると、キャラとリフトの上下左右の当たり判定ですから、
そっくりそのまま引用しなくてもそれほど難しいものではありませんね。

私もあそこは間違っていると判断し、自分なりに書き直してみます。



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

Name: wing  ..初心者(8,172ポイント)   Date: 2010/04/03(土) 13:53   No:50087     
Title: Re:absについて    
>imoinuさん、ありがとうございます。
imoinuさんも見ていましたか。
サイトは、おっしゃるとおり
アクションゲーム・アクションRPG ゲームプログラム制作解説、です。

C,C++だけではサンプルがほとんど見つからないので他の言語も
参考にしました。(意外と読めました)

参考にしたファイルは、Tonyu Systemをダウンロードして
リフト1のページでサンプルをダウンロードして、
Tonyuを起動してサンプルを読み込まなければならないので、
たいへんなのであえてリンクを書きませんでした。

それでもずばりサイトを当てるとはおそれいりました。



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

Name: たかぎ [URL]  ..ハッカー(172,646ポイント)   Date: 2010/04/03(土) 13:53   No:50088     
Title: Re:absについて    
> 私もあそこは間違っていると判断し、自分なりに書き直してみます。 

多分間違いでしょうね。

私は最初、ベクトルや複素数の計算であれば、absが意味を成す可能性もあるので、型や多重定義の状況がわからないと判断がつかないと指摘したわけです。
当たり判定とのことなので、複素数はないと思いますが、ベクトルなら十分考えられますので。


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

Name: wing  ..初心者(8,226ポイント)   Date: 2010/04/03(土) 14:23   No:50090     
Title: Re:absについて    
>たかぎ様

>多分間違いでしょうね。

たかぎさんにそう言っていただけるとありがたいです。
ありがとうございました。


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

Name: たいちう  ..熟練のプログラマー(65,370ポイント)   Date: 2010/04/03(土) 15:43   No:50092     
Title: Re:absについて    
> >たいちう様、ありがとうございます。
> サイトはそのとうりです。

最初から書きましょうよ。その方が話が早いし。


> ネットでプログラムを勉強しているので、書いてあることはすべて
> 疑うことはありませんでした。 

その言葉どおりだとすると、ネットを使う姿勢として非常に問題があります。
書いてあることに真実が含まれることもある、程度に思ってください。


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

Name: たかぎ [URL]  ..ハッカー(172,818ポイント)   Date: 2010/04/03(土) 16:07   No:50093     
Title: Re:absについて    
> > ネットでプログラムを勉強しているので、書いてあることはすべて
> > 疑うことはありませんでした。 

> その言葉どおりだとすると、ネットを使う姿勢として非常に問題があります。
> 書いてあることに真実が含まれることもある、程度に思ってください。

ネットに限らず、世の中のあらゆる情報は必ずしも真実とは限りません。
特にテレビは嘘だらけですので要注意です。新聞も然りです。
必ず複数の情報をまったく別のルートから入手し、比較検証する姿勢が大切であるとともに、可能な限り一次情報を調べることが大切です。

今回の場合は、その一次情報にあたっているわけですが、それ自体が間違っていることもあるわけです。
物事の真贋を見分ける目を養う必要があるでしょうね。


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

Name: wing  ..初心者(8,249ポイント)   Date: 2010/04/03(土) 21:25   No:50102 解決!     
Title: Re:absについて    
皆さん、ありがとうございました。
ずっと気になっていたことが解決しました。


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



Name: yskey  ..入門者(4,451ポイント)   Date: 2010/04/01(木) 21:21   No:50013       
Title: グーグルマップのようなマウス画像操作    
どうもyskeyです。
現在DXLIBにて戦略ゲームを制作しています。
表示した世界地図をマウスで動かす、「グーグルマップ」的な操作を目指していて一応出来ました。
しかし、
・マウスポインタがマップの描画領域を超えるような位置に来たとき、ポインタを引き戻してもすぐにマップがその方向に動かない…
・ソースコードがなんだかスッキリしない…

まだまだ初心者なのでなかなか思うように行きません。どうかお助けください。

また、ウインドウのサイズは800×600、表示する画像は1600×1200を使用しています。
申し訳ありませんがプログラム全体は省かせていただきます。
Mouse.Button[0]やMouse.xとかは「ゲームプログラミングの館」でのものと同じです、
mapxy.xとmapxy.yは
DrawGraph(mapxy.x,mapxy.x,マップのハンドル,FALSE);
としてマップを描画するためのXY座標のint型変数です。

int MapControl(){
    static int nowX,nowY,nowMAPX,nowMAPY,OutFlag;
    if(Mouse.Button[0] == 1){
        nowX = Mouse.x;
        nowY = Mouse.y;
        nowMAPX = mapxy.x;
        nowMAPY = mapxy.y;
    }
    if(Mouse.Button[0] > 1){
                if(mapxy.x<-800 || mapxy.x>0 || mapxy.y<-600 || mapxy.y>0){
                nowX = Mouse.x;
                nowY = Mouse.y;
            }
            mapxy.x = (Mouse.x - nowX) + nowMAPX;
            mapxy.y = (Mouse.y - nowY) + nowMAPY;
    }
    if(mapxy.x<-800){mapxy.x= -800;}
    if(mapxy.x>0){mapxy.x= 0;}
    if(mapxy.y<-600){mapxy.y= -600;}
    if(mapxy.y>0){mapxy.y= 0;}
    return 0;
}




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


Name: Ma  ..熟練のプログラマー(69,770ポイント)   Date: 2010/04/01(木) 23:34   No:50016     
Title: Re:グーグルマップのようなマウス画像操作    
               if(mapxy.x<-800 || mapxy.x>0 || mapxy.y<-600 || mapxy.y>0){
                nowX = Mouse.x;
                nowY = Mouse.y;
            }

↑これをやる意味は、なんでしょうか?
不必要に見えるのですが・・・・。


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

Name: yskey  ..入門者(4,509ポイント)   Date: 2010/04/02(金) 12:05   No:50036     
Title: Re:グーグルマップのようなマウス画像操作    
すいません。消すの忘れていました。
一応それは
・マウスポインタがマップの描画領域を超えるような位置に来たとき、ポインタを引き戻してもすぐにマップがその方向に動かない… 
のバグを直そうとして入れたものです。


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

Name: Ma  ..比類無きプログラマー(71,745ポイント)   Date: 2010/04/02(金) 12:20   No:50037     
Title: Re:グーグルマップのようなマウス画像操作    
>すいません。消すの忘れていました。 
それを消せば、私が想像する上ではgoogle map のように動作するとおもうのですがね。。。


>・マウスポインタがマップの描画領域を超えるような位置に来たとき、ポインタを引き戻してもすぐにマップがその方向に動かない…

もしかして、
   if(mapxy.x<-800){mapxy.x= -800;}
    if(mapxy.x>0){mapxy.x= 0;}
    if(mapxy.y<-600){mapxy.y= -600;}
    if(mapxy.y>0){mapxy.y= 0;}
これで値を修正したあとに、本来なら、修正直前の場所までいかないとマップが動き始めないところだけれど
値の修正後はポインタを少しでも移動し始めたら、また動き始めるようにしたいってことかな?

もし、それなら
    bool change = false;
    if(mapxy.x<-800){mapxy.x= -800;change = true;}
    if(mapxy.x>0){mapxy.x= 0;change = true;}
    if(mapxy.y<-600){mapxy.y= -600;change = true;}
    if(mapxy.y>0){mapxy.y= 0;change = true;}
    if(change){           
         nowX = Mouse.x;
         nowY = Mouse.y;
    }

こうとか、どうだろうか?


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

Name: yskey  ..入門者(4,526ポイント)   Date: 2010/04/02(金) 12:31   No:50038     
Title: Re:グーグルマップのようなマウス画像操作    
すいません、プログラムを切り離して作りました。

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

Name: Ma  ..比類無きプログラマー(71,995ポイント)   Date: 2010/04/02(金) 13:02   No:50040     
Title: Re:グーグルマップのようなマウス画像操作    
    
次のコードを

    if(MAPX<-800){MAPX= -800;}
    if(MAPX>0){MAPX= 0;}
    if(MAPY<-600){MAPY= -600;}
    if(MAPY>0){MAPY= 0;}
    
次のように書き換えてみてください。

    bool change = false; 
    if(MAPX<-800){MAPX= -800;change = true;} 
    if(MAPX>0){MAPX= 0;change = true;} 
    if(MAPY<-600){MAPY= -600;change = true;} 
    if(MAPY>0){MAPY= 0;change = true;} 
    if(change){        
        nowMAPX = MAPX;
        nowMAPY = MAPY;
        nowX = Mouse.x; 
        nowY = Mouse.y; 
    } 


これで、期待どおりに動きますか?


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

Name: yskey  ..入門者(4,571ポイント)   Date: 2010/04/02(金) 18:32   No:50054 解決!     
Title: Re:グーグルマップのようなマウス画像操作    
上手くいきました。
boolを動的変数にするのがミソだったんですね…

こういうことに気づくには、やはり日ごろの鍛練が必要なんでしょうか?
 編集済み


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

Name: Ma  ..比類無きプログラマー(72,746ポイント)   Date: 2010/04/03(土) 01:17   No:50065     
Title: Re:グーグルマップのようなマウス画像操作    
>こういうことに気づくには、やはり日ごろの鍛練が必要なんでしょうか?
うーん。

修正がどれかでもあてはまるなら状態を再指定しないといけないと気づくかどうかは
直感ですかね・・・?しいていうなら、1度経験があれば思いつくかも。
(そこでもう一度クリックした場合を想像して思いつきました。)

次に、すべての判定をOR で判断するかもしくはフラグを作っておかないといけないと気づくのも
一度、似たようなプログラミングの経験があれば自然に気づくと思います。

私は熟練とはいえませんが、実験/経験つむとやはり思いつきがよくなりますよ。 編集済み


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

Name: yskey  ..入門者(4,596ポイント)   Date: 2010/04/03(土) 18:48   No:50094 解決!     
Title: Re:グーグルマップのようなマウス画像操作    
>>Maさんありがとうございました。
これからがんばっていきたいと思います。


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



Name: kai  ..中級者(13,601ポイント)   Date: 2010/04/02(金) 18:01   No:50053       
Title: Aerobeat PlusのFPSni    
Aerobeat Plusで使われてるFPSの表示について
管理人さんにお聞きしたいのですが
非常に見やすく分かりやすくていいなと思い、
よろしければ、大きさとフォントは何を指定したのか
教えていただけないでしょうか?
よろしくお願いします。


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


Name: Dixq (管理人) [URL]  ..ウィザード(1,168,536ポイント)   Date: 2010/04/02(金) 19:39   No:50056     
Title: Re:Aerobeat PlusのFPSni    
あれは画像ですよ。
少しでもこったフォント使おうとするとどうしても画像になりますねぇ。

エアロビートの実行ファイルがあるフォルダに「dat.dxa」ってファイルありますよね。
これDXライブラリのアーカイブなんで展開して中身ご覧ください。

展開用のツールはDXライブラリを展開したフォルダに入っている「DxLib_VC\Tool\DXArchive\DxaDecode.exe」です。
こいつの上にdat.dxaをドロップしてあげて下さい。フォルダに変わります。
Imgフォルダ内のMainに入ってます。

・・げ!明らかに使ってないファイルが入ってる・・。まぁその辺はスルーで^^;
「HitBox03 - コピー (2).png」とか酷いな・・。次回修正します;


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

Name: kai  ..中級者(13,725ポイント)   Date: 2010/04/02(金) 21:09   No:50060     
Title: Re:Aerobeat PlusのFPSni    
その画像をフォトショか何かで作成した時に
なんのフォントを指定したか分かりますでしょうか?
覚えていたら是非教えてください><


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

Name: Dixq (管理人) [URL]  ..ウィザード(1,169,813ポイント)   Date: 2010/04/03(土) 09:43   No:50072     
Title: Re:Aerobeat PlusのFPSni    
う〜ん、覚えてないなぁ^^;

いつかJustyさんが、画像を投げると何のフォントか調べてくれるサイトがあると仰っていました。
これ使えませんかね?
http://www.play21.jp/board/formz.cgi?action=res&resno=43752&page=&lognum=134&id=dixq&rln=43885#43780

別に全く一緒じゃなくてもフォトショでザーッとみていって気に入ったフォント使ったらいいのではないでしょうか?
FPSの文字は作ったんだったかフリー素材だったのかちょっと忘れてしまいました・・。
影はペイントで一ピクセルずつ書いたような記憶が・・。

素材はこんな感じで見つけるといいですよ。
http://www.google.co.jp/search?hl=ja&q=%E6%95%B0%E5%AD%97%E3%80%80%E7%B4%A0%E6%9D%90&lr=lang_ja


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

Name: kai  ..中級者(13,746ポイント)   Date: 2010/04/03(土) 10:20   No:50074 解決!     
Title: Re:Aerobeat PlusのFPSni    
なるほど。そうすることにします。
お忙しいところ
ありがとうございました。


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



Name: NK  ..ぴよぴよ(56ポイント)   Date: 2010/04/02(金) 20:56   No:50059       
Title: DXライブラリの設定について・・・    
ゲームプログラミングの館の0章に
DXライブラリの設定という項目がありますが、
『プロジェクトに追加すべきファイル_VC用』フォルダのパスを追加するのがうまくいきません。
どうすれば良いのでしょうか・・・
VisualC++ 2008 Express Edition を使用しています。


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


Name: Ma  ..比類無きプログラマー(72,555ポイント)   Date: 2010/04/03(土) 01:01   No:50064     
Title: Re:DXライブラリの設定について・・・    
>うまくいきません。 
どのような意味でうまくいかないのでしょうか?
DXライブラリの設定ページをすでにごらんになっているようですし。
説明が分からないわけではなく、うまくいかないとは、そのようなメニューが見つからないとかってことですか?


公式ページの使い方のページから転載



2.VisualStudio2008 でDXライブラリを使うための設定を行う

 必要なアイテムが揃ったところで、今度は VisualStudio2008 の設定を少し変更して、DXライブラリのファイルにPC上の何処にあるプロジェクトからもアクセスできるようにします。

 @ VisualStudio2008 のメニューの『ツール』→『オプション』を選びます。

 A オプションウインドウの左側から『プロジェクトおよびソリューション』→
                            『VC++ ディレクトリ』を選びます。

 B 右側の『ディレクトリを表示するプロジェクト』から『インクルードファイル』を選びます。

 C ディレクトリリストにDXライブラリのパッケージ内に入っている
        『プロジェクトに追加すべきファイル_VC用』フォルダのパスを追加します。

 D 『ディレクトリを表示するプロジェクト』を今度は『ライブラリファイル』にします。

 E ディレクトリリストにCと同じく
        『プロジェクトに追加すべきファイル_VC用』フォルダのパスを追加します。

 F 『OK』ボタンを押して設定完了です。 編集済み


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



Name:  ..かけだし(1,287ポイント)   Date: 2010/04/02(金) 16:19   No:50051       
Title: 住所録について    
住所録のプログラムを作りました。何かおかしいところがあれば教えてください。

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

#define BUFSIZE 128
#define DATASIZE 1000

typedef struct address {
  char szAdd[51];  /* 住所 */
  char szName[21]; /* 氏名 */
  char szAge[20];  /* 年齢 */
  char szTel[20];  /* 電話番号*/
} Address;

int search(Address *ap, int cnt);
int add(Address *ap, int cnt);
int amend(Address *ap, int cnt);
int del(Address *ap, int cnt);
int printall(Address *ap, int cnt);

int (*func[])(Address *, int) = {search, add, amend, del, printall};

Address ad[DATASIZE];

int main(void)
{
  char dummy[BUFSIZE];
  int i, cnt = 0;

  while (1) {
    puts("●メニューを入力して下さい");
    puts("1.検索\n2.追加\n3.修正\n4.削除\n5.全体表示\n6.終了");
    scanf("%d", &i); gets(dummy);
    if (1 <= i && i <= 5) cnt = func[i - 1](ad, cnt);
    else if (i == 6) break;
  }

  return 0;
}

int search(Address *ap, int cnt)
{
  char buf[BUFSIZE], dummy[BUFSIZE];
  char *target[] = {"住所", "氏名", "電話番号"};
  int i, j = 0, count = 0;
  Address *t = ap;

  while (1) {
    puts("何で探しますか?\n1.住所 2.氏名 3.電話番号");
    scanf("%d", &i); gets(dummy);
    if (1 <= i && i <= 3) break;
  }
  printf("%sを入力して下さい:", target[--i]);
  gets(buf);

  while (j++ < cnt) {
    switch (i) {
    case 0: /* 住所 */
      if (!strcmp(t->szAdd, buf)) goto print;
      break;
    case 1: /* 氏名 */
      if (!strcmp(t->szName, buf)) goto print;
      break;
    case 2: /* 電話番号 */
      if (!strcmp(t->szTel, buf)) goto print;
      break;
    default:
      break;
    }
    t++;
    continue;
print:;
        printf("%d: 住所:%s 氏名:%s 年齢:%s 電話番号:%s\n", j, t->szAdd, t->szName,
 t->szAge, t->szTel);
    t++;
    count++;
  }
  printf("%d件見つかりました\n", count);

  return cnt;
}

int add(Address *ap, int cnt)
{
  Address *t = ap + cnt;

  printf("住所:"); /* 住所 */
  gets(t->szAdd);
  printf("氏名:"); /* 氏名 */
  gets(t->szName);
  printf("年齢:"); /* 年齢 */
  gets(t->szAge);
  printf("電話番号:"); /* 電話番号 */
  gets(t->szTel);

  return cnt + 1;
}

int amend(Address *ap, int cnt)
{
  Address *t = ap;
  char buf[BUFSIZE];
  int i, j = 0;

  puts("何番を修正しますか?");
  scanf("%d", &i); gets(buf);

  while (j++ < cnt) {
    if (j == i) {
      puts("変更しない場合は単に[return]を押して下さい");
      printf("住所: %s -> ", t->szAdd);
      gets(buf);
      if (strlen(buf)) strcpy(t->szAdd, buf);
      printf("氏名: %s -> ", t->szName);
      gets(buf);
      if (strlen(buf)) strcpy(t->szName, buf);
      printf("年齢: %s -> ", t->szAge);
      gets(buf);
      if (strlen(buf)) strcpy(t->szAge, buf);
      printf("電話番号: %s -> ", t->szTel);
      gets(buf);
      if (strlen(buf)) strcpy(t->szTel, buf);
      return cnt;
    } else t++;
  }
  puts("番号が大きすぎます");
  return cnt;
}

int del(Address *ap, int cnt)
{
  char buf[BUFSIZE];
  int i, j;

  puts("何番を削除しますか?");
  scanf("%d", &i); gets(buf);

  if (i > 0 && i < cnt) {
    for (j = i - 1; j < cnt - 1; j++)
      ap[j]= ap[j + 1];
    return cnt - 1;
  } else if (i == cnt) return cnt - 1;
  else {
    puts("番号が大きすぎます");
    return cnt;
  }
}

int printall(Address *ap, int cnt)
{
  int i = 0;

  while (i < cnt) {
          printf("%d: 住所:%s 氏名:%s 年齢:%s 電話番号:%s\n", ++i, ap->szAdd, ap->s
zName, ap->szAge, ap->szTel);
    ap++;
  }

  return cnt;
}



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


Name: たいちう  ..熟練のプログラマー(65,110ポイント)   Date: 2010/04/02(金) 16:24   No:50052     
Title: Re:住所録について    
char szAge[20];  /* 年齢 */

int型でよくない?
char型配列だとしても19桁も必要ですか?宇宙よりも長生き?


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



Name: てってけ  ..ぴよぴよ(91ポイント)   Date: 2010/04/01(木) 01:03   No:49984       
Title: プログラムを打つために    
みなさんは
どのようにしてプログラムに慣れていきましたか?
ガンガン無理に覚えたほうがよいのですか?


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


Name: softya [URL]  ..ハッカー(142,524ポイント)   Date: 2010/04/01(木) 13:14   No:49993     
Title: Re:プログラムを打つために    
無理に覚えるよりは、自然と覚える方が良いと思います。

1.とりあえず参考書やサイトをよく眺める。なんども読む。
記憶するためではなく、プログラムの流れや、一行一行の意味を理解するために読みます。
2.よく分からないところがあれば、実際にプログラムを動かして試してみます。
  ・printfで値を出力して値の変化を確認。
 ・デバッガで値を見る。
 ・パラメータを変えてみる。
 ・その関数をコメントアウトしてみる。
3.大体わかった気分になったら、オモムロに小さなプログラムをZEROから組み始めます。
分からないところや動かなかったら2.の手法で調べて、サイトや本を参考にプログラムを組んでいきます。
4.小さいなプログラムが組めるようになったら、少しづつプログラムの規模をステップアップします。全体像の分かる少し上を目指し続けると挫折しないで済むと思います。いきなり大物は高確率で挫折します。


関数やパラメータなんて、リファレンスをそのたび調べれば良いので暗記なんて積極的にはしません。使っている間によく使う関数はパラメータを自然に覚えますよ。


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

Name: jay  ..上級者(16,971ポイント)   Date: 2010/04/01(木) 21:06   No:50011     
Title: Re:プログラムを打つために    
僕の場合は少しずつ勉強しながらゆくっりと慣れて行きましたよ。
何も焦って勉強する必要はないと思いますよ。


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

Name: てってけ  ..ぴよぴよ(98ポイント)   Date: 2010/04/02(金) 13:58   No:50046 解決!     
Title: Re:プログラムを打つために    
みなさん親切におしえていただきありがとうございました。
がんばりたいと思います


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



Name: mitunari  ..かけだし(1,291ポイント)   Date: 2010/04/01(木) 21:19   No:50012       
Title: 構造体について    
こういうことは質問して良いのかわかりませんが
調べてもわからないので教えてください
1. キャラを4方向に歩かせる。
にあるtypedefとはなんですか?
2.int main(void)とはどういう意味ですか?
3.1のものを

struct kyara{
        int x,y,img,muki,walking_flag;
};
struct kyara ch;
としまったく同じ文にすると成功しますか?
4.ゲームプログラムの館のシューティングの基本とキャラを4方向に歩かせるをあわせてキャラからtamaを発射するプログラムを(キャラは上しか向けない)作ろうとしたときの構造体の宣言?のやり方を教えていただけませんか?
完全に純粋に合体させようとしたら
typedef struct{
        int x,y,img,muki,walking_flag;
};
struct shot{
        int x,y,img,muki,walking_flag;
};
(略)
int image[16];
char Key[256];
struct shot tama[10];
などとやっていたらわけわからなくなってしまいましたw


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


Name: 紅葉  ..中級者(12,854ポイント)   Date: 2010/04/02(金) 05:51   No:50022     
Title: Re:構造体について    
1について

構造体とは変数をパッケージしたものです。

プレイヤーキャラと敵キャラの位置情報を保持する為に変数を用意するとしましょう。
その場合、構造体を使わないと

float PlayPx,PlayPy;
float EnmPx,EnmPy;

といったコードを書かなければなりません。
ここで注目して頂きたいのがPxとEx等が両方にあることです。

これを構造体にすることでソースがすっきりし
わかりやすいものにすることが可能でなります。

typedef struct{
  float Px,Py;
}CHR;
CHR Play;
CHR Enm;

こう書くことでPlay.Px等と変数にアクセスできるようになります。



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

Name: 紅葉  ..中級者(13,048ポイント)   Date: 2010/04/02(金) 05:55   No:50023     
Title: Re:構造体について    
2について

関数については理解しているでしょうか?
プログラムは必ずmain関数と呼ばれる部分から始まります。
int main(void)というのは
戻り値にint型をもって引数を持たないmainの関数ということになります。

質問からして関数を理解していないように思えますので
Cの基本的な解説が載っているサイトを閲覧して下さい。

3について

これは自分で試してみて下さい・・・。

4について
このプログラムはそもそも動いているのでしょうか?
char Key[256]; 等の配列は理解しておりますか?


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

Name: Dixq (管理人) [URL]  ..ウィザード(1,168,084ポイント)   Date: 2010/04/02(金) 07:55   No:50025     
Title: Re:構造体について    
まずは構造体について勉強した方がよさそうですね。

http://www.google.co.jp/search?hl=ja&q=C%E8%A8%80%E8%AA%9E%E3%80%80%E6%A7%8B%E9%80%A0%E4%BD%93&lr=lang_ja

> typedef

typedefって何かな?と思ったらまずはgoogleで検索してみましょう。
http://www.google.co.jp/search?hl=ja&q=typedef&lr=lang_ja

答えは沢山見つかると思います。


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



Name: さっちー  ..ぴよぴよ(738ポイント)   Date: 2010/04/02(金) 04:43   No:50021       
Title: ブロック崩し    
プログラム習ってるんですが、全然できないのでこのままじゃまずいと思って勉強がてらゲームを作ってみる事にしました。ブロック崩しを作ろうとしたのですが、球を動かす機能を関数化する所とブロックの配置をどうすればいいかで悩んでます。どうすればよろしいでしょうか。

#include "DxLib.h"

typedef struct _racket{
int g_racket;
int g_x;
int g_y;
}racket;

typedef struct _block{
int stone;
int x;
int y;
}block;

typedef struct _tama{
int ball;
int x;
int y;
int vx;
int vy;
}tama;

int Key;
tama ta;

void ball_attack()
{
ta.x = 300;
ta.y = 450;
ta.vx = 4;
ta.vy = 4;

ta.ball = LoadGraph("ball.bmp");


DrawGraph(ta.x, ta.y, ta.ball, TRUE);

ta.x += ta.vx;
ta.y += ta.vy;
if(ta.x < 5 || ta.x > 635) 
ta.vx = -ta.vx;
if(ta.y < 5 || ta.y > 475)
ta.vy = -ta.vy;


}

int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,
LPSTR lpCmdLine, int nCmdShow )
{
//tama ta;
racket ra;

//ta.x = 300;
//ta.y = 450;
//ta.vx = 4;
//ta.vy = 4;

ra.g_x = 300;
ra.g_y = 420;

ChangeWindowMode( TRUE ) ;

if( DxLib_Init() == -1 ) return -1;

SetDrawScreen( DX_SCREEN_BACK );

// 透過色を変更
SetTransColor( 255 , 255 , 255 ) ;

ra.g_racket = LoadGraph("ziki.bmp");
//ta.ball = LoadGraph("ball.bmp");

while( ProcessMessage() == 0 && CheckHitKey( KEY_INPUT_ESCAPE ) == 0)
{
// メッセージループに代わる処理をする
if( ProcessMessage() == -1 )
{
break ; // エラーが起きたらループを抜ける

}


ClearDrawScreen();

ball_attack();

/* DrawGraph(ta.x, ta.y, ta.ball, TRUE);

ta.x += ta.vx;
ta.y += ta.vy;
if(ta.x < 5 || ta.x > 635) 
ta.vx = -ta.vx;
if(ta.y < 5 || ta.y > 475)
ta.vy = -ta.vy*/;

// キー入力取得
Key = GetJoypadInputState( DX_INPUT_KEY_PAD1 ) ;

// 右を押していたら右に進む
if( Key & PAD_INPUT_RIGHT ) ra.g_x += 3 ;

// 左を押していたら左に進む
if( Key & PAD_INPUT_LEFT ) ra.g_x -= 3 ;

// 読みこんだグラフィックを画面左上に描画
DrawGraph( ra.g_x , ra.g_y , ra.g_racket , TRUE ) ;

ScreenFlip();


}

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


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


Name: Dixq (管理人) [URL]  ..ウィザード(1,167,933ポイント)   Date: 2010/04/02(金) 07:51   No:50024     
Title: Re:ブロック崩し    
>さっちーさん

こんにちは。
DXライブラリを用いたプログラムの骨格はゲームプログラミングの館の41章を参考にされてはいかがでしょう?

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

また、ソースコードが字下げされていないようですが、元々字下げしていないのでしょうか?
字下げした方が見やすいですよ。

そして、関数化の構成ですが、まずは解り易く以下のようにしてみてはいかがですか?



バー移動計算部(){
    if(左右キーが押されていたら){
        バーを移動
    }
}

弾計算部(){
    .x += cos( 角度 ) * speed;
    .y += sin( 角度 ) * speed;
    if( 壁にぶつかっていたら ){
        方向転換;
    }
}

描画部(){
    バー描画;
    弾描画;
}

int WINAPI WinMain(...){
    ...
    while(...){

        バー移動計算部();
        弾計算部();
        描画部();

    }
}


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



Name: Ma  ..熟練のプログラマー(66,881ポイント)   Date: 2010/03/31(水) 13:09   No:49947       
Title: サブフォルダ・再帰的検索    
いつもおせわになってます。

今、あるフォルダ内のすべての音楽ファイル(特定の拡張子)を検索しリストを得ようとしています。
再帰的方法で、次々とサブフォルダから音楽ファイルを検索し、リストするプログラムを作ってみました。

しかし、 deque<string> 的なものを、再帰的にスタックしていく方法でやってみると、あっというまにオーバーフローしてしまいました。
(bad_alloc ??)
サイズがといよりも、deque<std::string>を作りすぎた・・・?

理想としては、ウィンドウズメディアプレイヤーのフォルダ登録的なものを想像しています。


失敗したやり方は単純で、再帰的検索の王道って感じです。
最初に、関数を作成。
その引数にフォルダパスを指定。戻り値はdeque<std::string>。
この関数の役目は、まず指定フォルダ中のすべてのwavファイルとサブフォルダをリスト化、そのサブフォルダパスを同じ関数に引数として渡す。戻ってきたdeque<std::string> と、wavファイルパスをリスト化したdeque<std::string>のふたつを融合、そしてreturn。
サブフォルダがない場合は、もっとも深いところとなり、wavファイルのリストのみがreturnする。

これで、フォルダ以下のすべてのwavファイルの検索ができる。(はずだと思ってた)


結果、上層を指定するとみごとにオーバーフローしました。
だいたい3階層ぐらいまではテストして成功したんですが、限度があるようで^^;

ユーザーが選んだフォルダ内の音声ファイル(特定の拡張子)を、すべてリスト化するのに、もう少し安全な方法はないでしょうか? 編集済み


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


Name: たいちう  ..熟練のプログラマー(64,030ポイント)   Date: 2010/03/31(水) 13:59   No:49948     
Title: Re:サブフォルダ・再帰的検索    
> 失敗したやり方は単純で、再帰的検索の王道って感じです。

王道は失敗しません。王道から外れてしまったのでしょう。
どこで外れたかは、もっと詳しい説明を聞かないとわかりません。


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

Name: dic  ..熟練のプログラマー(59,132ポイント)   Date: 2010/03/31(水) 15:57   No:49954     
Title: Re:サブフォルダ・再帰的検索    
私も作って失敗した経験があります
階層が深くなると失敗するようで
string に格納する前のchar配列の大きさは大丈夫でしょうか?
フルパス入りますので、私の場合だと、このサイズが足りなくてて
エラーを起こしてました


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

Name: Ma  ..熟練のプログラマー(67,333ポイント)   Date: 2010/03/31(水) 19:46   No:49963     
Title: Re:サブフォルダ・再帰的検索    
再帰法を使っている部分のソースを記載します。
char 配列とか、一切使わずに作ってしまいました。。。

あと、適当に王道とかいってすいません。(汗

さきほどは、たとえとして
deque<std::string>
といいましたが、
実際は、
deque<musicFIle>

struct musicFile{
    std::string filePath;
    std::string title;
    int soundHandle;
};
このようになってます。



deque<musicFile> searchFolder(string folderName,bool subFol){

    deque<musicFile> tempReturnList;

    //初期化
    HANDLE hFind;
    WIN32_FIND_DATA FileData;

    //見つかったファイル名をいれる。
    deque<string> foundThese;
    deque<string> subFolders;

    
    string folderFindPath = folderName;
    folderFindPath += "/*";

    hFind = FindFirstFile((LPCTSTR)folderFindPath.c_str(), &FileData);
    if(hFind == INVALID_HANDLE_VALUE) {
        FindClose(hFind);
        MessageBeep(MB_ICONHAND);
        printfDx("No file found");
    }
    do{
        if(strcmp((const char *)FileData.cFileName,".") != 0 &&
        strcmp((const char *)FileData.cFileName,"..") != 0 ){
            string toAdd = (string)(const char *)FileData.cFileName;
            if(toAdd.length() > 4 && toAdd.find(".wav") == toAdd.length() - 4)
                foundThese.push_back(toAdd);
            else if(subFol && toAdd.find(".") == string.npos)
                subFolders.push_back(toAdd);
        }        
    }while(FindNextFile(hFind, &FileData));
    
    FindClose(hFind);

    for each(string temp in foundThese){
        musicFile tempSong;
        tempSong.filePath = (folderName + "\\") + temp;
        tempSong.soundHandle = 0;
        tempSong.title = temp;
        tempReturnList.push_back(tempSong);
    }

    if(subFol){
        for each(string tempSubFolder in subFolders){
            string subFolPath = (folderName + "\\") + tempSubFolder;
            deque<musicFile> bigList = searchFolder(subFolPath,true);
            for each(musicFile tempMusicFile in bigList){
                tempReturnList.push_back(tempMusicFile);
            }
        }
    }

    return tempReturnList;
}


あと、エラーが発生する(アクセス違反が発生する)のは
xmemoryファイルの

_STD_BEGIN
        // TEMPLATE FUNCTION _Allocate
template<class _Ty> inline
    _Ty _FARQ *_Allocate(_SIZT _Count, _Ty _FARQ *)
    {    // check for integer overflow
    if (_Count <= 0)
        _Count = 0;
    else if (((_SIZT)(-1) / _Count) < sizeof (_Ty))
        _THROW_NCEE(std::bad_alloc, NULL);

        // allocate storage for _Count elements of type _Ty
    return ((_Ty _FARQ *)::operator new(_Count * sizeof (_Ty)));
    }


と記載されている部分の、return の部分で緑矢印が表示されて止まる感じです。
(_Count = 304 でした。)

自分で思うところといえば、欲張って構造体で再帰法しないほうがよかったかな。。。ってぐらいです。
具体的なエラー内容が正確に把握できていないので、そちらの把握も手伝っていただけると幸いです。 編集済み


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

Name: Justy  ..伝説なるハッカー(514,487ポイント)   Date: 2010/03/31(水) 21:20   No:49968     
Title: Re:サブフォルダ・再帰的検索    
 おかしなところや無駄がいろいろありますね。
 とりあえずおかしなところは直して、スタックの消費量を抑えるように直していきましょう。

 エラーになる可能性としては今のところ二種類考えられます。
・ 文字セットが Unicode環境な為、char型で扱おうとして失敗している
・ FindFirstFileに失敗した場合でも処理を続行しようとしている為、
cFileNameなどの文字列の処理に失敗する

あたりではないかと。


 あとフォルダかどうかの判定がおかしいです。 編集済み


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

Name: Ma  ..熟練のプログラマー(67,732ポイント)   Date: 2010/04/01(木) 01:40   No:49986     
Title: Re:サブフォルダ・再帰的検索    
おぉー、Justy さんの指示にしたがったら、エラーがなくなりました。
ありがとうございまいた。

あとは、スタックの消費量減らしていって改良していきますね。
完成次第、確認のためポストさせていただきます。


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

Name: Ma  ..熟練のプログラマー(68,461ポイント)   Date: 2010/04/01(木) 02:04   No:49987 解決!     
Title: Re:サブフォルダ・再帰的検索    
できましたー。


//指定ディレクトリから、拡張子 wav のファイルをリスト化
deque<string> searchFolder(string folderName,bool subFol){
    deque<string> tempReturnList;

    //見つかったファイル名をいれる。
    deque<string> subFolders;

    //フォルダ名から、検索フォルダ名を作成
    string folderFindPath = folderName;
    folderFindPath += "/*";
    
    //検索の前準備。
    HANDLE hFind;
    WIN32_FIND_DATA FileData;

    //検索開始
    hFind = FindFirstFile((LPCTSTR)folderFindPath.c_str(), &FileData);
    //エラーなら
    if(hFind == INVALID_HANDLE_VALUE) {
        //エラー報告
        MessageBeep(MB_ICONHAND);
        printfDx("No file found");
        //ハンドル閉じる
        FindClose(hFind);
        //エラーなので、空で戻す。
        return tempReturnList;
    }

    do{
        //ディレクトリエントリの場合は、無視。
        if ( FileData.cFileName[0] != '.' ){
            size_t length = strlen(FileData.cFileName);

            //拡張子が、.wavの場合。(ファイル名から、.wav が探知され、かつその拡張子がファイル終端にあるならば)
            if(FileData.cFileName+(length-4) == strstr(FileData.cFileName,".wav")){
                string filePath = folderName + '\\' + FileData.cFileName;
                tempReturnList.push_back(filePath);

            }

            //サブフォルダー検索フラグON かつ、発見したファイルがディレクトリだったならば、サブフォルダとしてdequeへ登録。
            else if(subFol && FileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
                subFolders.push_back(FileData.cFileName);
        }        
    //次のファイル
    }while(FindNextFile(hFind, &FileData));
    
    //ハンドルを閉じる。
    FindClose(hFind);

    //サブフォルダ検索フラグがONなら
    if(subFol){
        for each(string tempSubFolder in subFolders){
            string subFolPath = (folderName + "\\") + tempSubFolder;
            deque<string> bigList = searchFolder(subFolPath,true);
            for each(string tempMusicFile in bigList){
                tempReturnList.push_back(tempMusicFile);
            }
        }
    }
    //完成したリストを戻す。
    return tempReturnList;
}



マイドキュメントのフォルダでテストしてみたところ、数秒で1000曲ヒットしました。
は、はやいw


ソースコードに、まだ問題がありそうならご指摘お願いします。


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

Name: Justy  ..伝説なるハッカー(514,846ポイント)   Date: 2010/04/01(木) 02:42   No:49988     
Title: Re:サブフォルダ・再帰的検索    
 んーと、問題と改善項目をざくっと洗い出してみました。
 好みな部分もあるので、気にならなければ無視してしまっても構いません。

・ 戻り値で deque<string>を返すのは著しい無駄(大量のオブジェクトコピー)が発生する可能性が高いので、
 大元の呼び出し元から引数に参照として渡して、その参照に対してフォルダの探索をすると同時に
 どんどん追加していきましょう(戻り先で追加しなくて済みます)。
・ 引数の folderName / tempSubFolderなど可能な限り const参照にして無駄なコンストラクタや
 デストラクタの呼び出しを抑制した方がいいでしょう。
・ folderFindPath変数は FindFirstFileAに渡すとき (folderName + "/*").c_str()とすれば要らなくなりますし
 生存期間も短くなります。
・ FindFirstFileに失敗したハンドルはクローズする必要はありません。
・ WIN32_FIND_DATAは環境によって変わるので、std::stringに渡すなら、WIN32_FIND_DATAAを使いましょう。
・ WIN32_FIND_DATAAを使うなら FindFirstFileA/FindNextFileAを使いましょう。
・ ディレクトリエントリの場合は無視の処理が普通のファイル・フォルダを弾く可能性があります。ex) .a.wav
・ 拡張子が wavかどうかの判定で頭から検索して調べのはちょっと効率が悪いです。
 std::strncmpで最後の4文字文だけをピンポイントで比較するといいかと。


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

Name: Ma  ..熟練のプログラマー(68,936ポイント)   Date: 2010/04/01(木) 03:27   No:49989     
Title: Re:サブフォルダ・再帰的検索    
なるほど、勉強になります。
改良させていただきました。


//指定ディレクトリから、拡張子 wav のファイルを検索し、foundListに追加する。
void searchFolder(deque<string>& foundList,const string folderName,const bool subFol){

    //見つかったサブディレクトリ名をいれる。
    deque<string> subFolders;
    
    //検索の前準備。
    HANDLE hFind;
    WIN32_FIND_DATAA FileData;

    //検索開始
    hFind = FindFirstFileA((LPCTSTR)(folderName+"/*").c_str(), &FileData);
    //エラーなら
    if(hFind == INVALID_HANDLE_VALUE) {
        //エラーなので、空で戻す。
        return;
    }

    do{
        //ディレクトリエントリの場合は、無視。
        if ( FileData.cFileName[0] != '.' || 2 < strlen(FileData.cFileName)){
            size_t length = strlen(FileData.cFileName);

            //拡張子が、.wavの場合。(ファイル名から、.wav が探知され、かつその拡張子がファイル終端にあるならば)
            if(0 == strncmp(FileData.cFileName+length-4,".wav",4)){
                string filePath = folderName + '\\' + FileData.cFileName;
                foundList.push_back(filePath);

            }

            //サブフォルダー検索フラグON かつ、発見したファイルがディレクトリだったならば、サブフォルダとしてdequeへ登録。
            else if(subFol && FileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
                subFolders.push_back(FileData.cFileName);
        }        
    //次のファイル
    }while(FindNextFileA(hFind, &FileData));
    
    //ハンドルを閉じる。
    FindClose(hFind);

    //サブフォルダ検索フラグがONなら
    if(subFol){
        for each(const string tempSubFolder in subFolders){
            searchFolder(foundList,(folderName + "\\") + tempSubFolder,true);
        }
    }
    //完了。
    return;
編集済み


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

Name: たいちう  ..熟練のプログラマー(64,476ポイント)   Date: 2010/04/01(木) 14:27   No:49995     
Title: Re:サブフォルダ・再帰的検索    
"TEST.WAV"が対象外なのは仕様ですか?
そうでない場合、私ならこのように書くかな。

#include <string>    // string
#include <algorithm> // transform
#include <cctype>    // toupper

bool check(const string &fileName) {
    size_t len = fileName.length();
    if (len <= 4) return false;
    string buf = fileName.substr(len - 4);
    transform(buf.begin(), buf.end(), buf.begin(), toupper);
    return buf == ".WAV";
}


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

Name: Justy  ..伝説なるハッカー(515,240ポイント)   Date: 2010/04/01(木) 14:37   No:49996     
Title: Re:サブフォルダ・再帰的検索    
 かなりよくなったと思います。
 あと少しです。

 以下の点は修正が必要だと思います。
 
・ FindFirstFileAの第一引数はLPCSTR(const char *)なので、LPCTSTR(const TCHAR*)でキャストすると
 環境によってエラーになります。std::stringから渡していますので、キャストそのものが不要です。
・ cFileNameが4文字未満だった場合不正なメモリにアクセスすることになります。


 以下の点は仕様によっては修正が必要だと思います。
・ 「ディレクトリエントリの場合は、無視」が ".a"というフォルダを無視してしまいます。
・ 拡張子が .WAVなど大文字が混ざる場合ヒットしない。


 以下は推奨です。

・ 内容が変化しない文字列に対して2回 strlenを呼び出しています。
・ 変数 filePath / tempSubFolderは const std::string&にしておくといいかと。
 今回のケースではあまり変わらないと思いますが、オブジェクトによっては余計な処理が発生しますので
 付けておいた方がいいですね。


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

Name: Ma  ..熟練のプログラマー(69,760ポイント)   Date: 2010/04/01(木) 15:25   No:49997     
Title: Re:サブフォルダ・再帰的検索    
思っていたよりもたくさんの指摘をいただけたのですこし驚いています。
このぐらいの長さのコードでも、正確さとスマートさを追求すれば改良の余地ってのは計り知れないなぁと、痛感です。

また、お二人の意見を取り入れて自分なりに改良してみました。どうでしょうか。


//指定ディレクトリから、拡張子 wav のファイルを検索し、foundListに追加する。
void searchFolder(deque<string>& foundList,const string folderName,const bool subFol){

    //見つかったサブディレクトリ名をいれる。
    deque<string> subFolders;
    
    //検索の前準備。
    HANDLE hFind;
    WIN32_FIND_DATAA FileData;

    //検索開始
    hFind = FindFirstFileA((folderName+"/*").c_str(), &FileData);
    //エラーなら
    if(hFind == INVALID_HANDLE_VALUE) {
        //エラーなので、空で戻す。
        return;
    }

    do{
        //ディレクトリエントリの場合は、無視。
        if ( strcmp(".",FileData.cFileName) != 0 && strcmp("..",FileData.cFileName) != 0){
            //長さ
            size_t length = strlen(FileData.cFileName);

            //XXX.wav なら、四文字より文字数は大きい。大文字、小文字の区別なしで、ファイル名終端に.wavがあるかどうか。
            if(length > 4 && 0 == _strnicmp(FileData.cFileName+length-4,".wav",4)){
                foundList.push_back(folderName + '\\' + FileData.cFileName);
            }

            //サブフォルダー検索フラグON かつ、発見したファイルがディレクトリだったならば、サブフォルダとしてdequeへ登録。
            else if(subFol && (FileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY))
                subFolders.push_back(FileData.cFileName);
        }        
    //次のファイル
    }while(FindNextFileA(hFind, &FileData));
    
    //ハンドルを閉じる。
    FindClose(hFind);

    //サブフォルダ検索フラグがONなら
    if(subFol){
        for each(const string &tempSubFolder in subFolders){
            searchFolder(foundList,(folderName + "\\") + tempSubFolder,true);
        }
    }
    //完了。
    return;
}
 編集済み


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

Name: Justy  ..伝説なるハッカー(515,407ポイント)   Date: 2010/04/02(金) 01:43   No:50018     
Title: Re:サブフォルダ・再帰的検索    
 おー、もう大きな問題はないですね。

 細かいところを言えば

・ No:49988でも触れましたが引数の folderNameを参照にすると無駄なコピーが無くなります。
・ ?(そんなファイルがある方がおかしいといえばおかしいんですが)".wav"ファイルは
 弾いてしまってもいいのでしょうか?
・ ファイル名の収拾順が少し変わるので仕様的にどうかは検討が必要ですが、
 subFolders変数にディレクトリ名を集めているところで push_backの代わりに searchFolderを
そのまま呼び出せば subFolders変数が不要になりフォルダがたくさんあったときの効率があがります。

 てところです。


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

Name: Ma  ..熟練のプログラマー(69,976ポイント)   Date: 2010/04/02(金) 03:22   No:50019 解決!     
Title: Re:サブフォルダ・再帰的検索    
> No:49988でも触れましたが引数の folderNameを参照にすると無駄なコピーが無くなります。
あ、そうでしたね。

>・ ?(そんなファイルがある方がおかしいといえばおかしいんですが)".wav"ファイルは 
 弾いてしまってもいいのでしょうか? 
拡張子のみですか。想像してなかったですねw
length > 4

length >= 4
にします。

>subFolders変数
いわれてみると、確かにそのとおりですね。
これで、コードがさらにシンプルになりますねw



Justyさんも、たいちうさんもご協力ありがとうございました。
思っていた以上に、勉強になりました。感謝です。


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



Name: kei  ..ぴよぴよ(701ポイント)   Date: 2010/04/01(木) 17:59   No:50001       
Title: 文字列のインデクスを指定しただけ    
プログラムでどうしても気になることがあったので質問させていただきます。

既存のプログラムを見て勉強していたのですが、文字列でインデックスの値を
指定しただけのものがありました。

c_buff[sizeof(*)];

*には宣言された変数が入るので[]の中は数値になります。

char c_buff[128];
で宣言されており、文字列のある場所を指定したのだろうと推測できるのですが
文字を代入するわけでもなく";"で終わっています。


まったく意味のないコードではないかと思っているのですが、何か意味があるのではないかと気になっています。
PGを長くしていると、文字列のインデックスを指定しただけのコードに何か意味を持たせたりするのでしょうか?


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


Name: softya [URL]  ..ハッカー(142,624ポイント)   Date: 2010/04/01(木) 18:31   No:50003     
Title: Re:文字列のインデクスを指定しただけ    
どこの部分のソースコードでしょうか?
みんながみんなソースコードを暗記しているわけではないので、サイトのどの部分か書いてもらわないと応えられないんですよ。サイトへのリンクを書いてもらうのが一番ですね。

char c_buff[128];
だけの情報では、128文字分のc_buff配列が宣言されているとしか分かりません。


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

Name: たいちう  ..熟練のプログラマー(64,923ポイント)   Date: 2010/04/01(木) 18:56   No:50005     
Title: Re:文字列のインデクスを指定しただけ    
解釈1 keiさんの勘違い

宣言と同時に代入をしなくてはならないと勘違いされているわけではないですよね?
c_buffがどこかで使われていませんか?


解釈2 おまじない

char dummy[1024];  /* この変数を削除すると異常動作するので、絶対に削除しないこと! */

幸い私は遭遇したことがありませんが、このようなコメントが存在するらしいです。
全く使っていない変数の有無が動作に影響を及ぼすことがあります。
一般にはこのような場合は、たまたま正常に動いているだけと評価され
デバッグされるべきですが、何らかの事情によってごまかしているわけです。


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

Name: たかぎ [URL]  ..ハッカー(172,468ポイント)   Date: 2010/04/01(木) 19:45   No:50007     
Title: Re:文字列のインデクスを指定しただけ    
> 幸い私は遭遇したことがありませんが、このようなコメントが存在するらしいです。 

よくある話です。
ほかには、printfデバッグのために入れていたprintfを取り除くとRelease版で誤動作するので削除不可とか。
(printfがOutputDebugStringとか、他の関数の場合もあり)

そんなコードを書いた連中は、「だから最適化は怖い」とか、わかったようなことを自信満々で主張し、挙句、その間違った解釈をもとにコーディング規約を作ってみたりします。


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

Name: nicma  ..ぴよぴよ(49ポイント)   Date: 2010/04/01(木) 20:48   No:50010     
Title: Re:文字列のインデクスを指定しただけ    
配列のサイズが想定内であるかわざと配列の要素を参照していて、
もし想定外ならばメモリの不正参照となってアプリケーションエラーとなることを
期待しているのではないでしょうか。
要するに保険です。
当然、不正参照でもエラーにならない可能性はありますが。


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



Name: Konno Toshio  ..ぴよぴよ(473ポイント)   Date: 2010/04/01(木) 15:37   No:49998       
Title: 「includeファイル開けません」のエラーがでます。    
初心者です。
DXライブラリの画像を表示しようとすると、「C:\users\owner\documents\visual studio2008\projects\renshuu-2\
renshuu-2.cpp(1):fatal error C1083:include ファイル開けません。'DxLib.h':No such file or directory」
 上記のようなエラーが出ます。

 include ファイルが開けないとは、なにを意味するのでしょうか? また、project
またはファイル設定上どこに問題があるのでしょうか? 御教示願えれば幸いです。
                               以上


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


Name: Konno Toshio  ..ぴよぴよ(533ポイント)   Date: 2010/04/01(木) 20:41   No:50009 解決!     
Title: Re:「includeファイル開けません」のエラーがでます。    
プロジェクトを作り直したところ、エラーは出なくなりました。もう少し勉強して原因をつきとめたいと思っています。ご迷惑をおかけしました。

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



Name: no  ..中級者(9,112ポイント)   Date: 2010/03/31(水) 23:53   No:49977       
Title: すべてのカウンターを止めるには    
現在、シューティングゲームを動作するうえで、いくつものカウンターを使用しています。
そこでQキーを押すことで、黒い画面を描写し、すべてのカウンターを停止させようとしましたが、予想通りの結果が得られません。個人的にWaitKey();関数を用いればいいと思ったんですが。

void teki_state(){
    if(KeyBuf[KEY_INPUT_Q]==1){
        DrawGraph(0,0,enemy_data.blackimg,FALSE);
        WaitKey();
    }
}
//enemy_data.blackimgにはすべてを覆うサイズの黒い画像を格納しています。


上記の関数を通すことで、

「Qキーを押す→黒い画面が描写→キーが押されるまで動作停止」

という動きを期待したんですが、動作はとまるものの、黒い画面が描写されません。
で、停止中にもう一度Qキーを押すと黒い画面が描写され、動きも停止します。

二回押さなければ予想通りの動きがしない理由がいまいちわかりません。
予想通りの動きとは、6行上に書いたカッコ内部の動作です。

環境はwindowsXP,コンパイラはVC2008です。


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


Name: kazuoni [URL]  ..ハッカー(141,507ポイント)   Date: 2010/04/01(木) 00:19   No:49978     
Title: Re:すべてのカウンターを止めるには    
関数ScreenFlipを通っていないからです。
キーを押せば、恐らくその後に描写しているのかと。
なので、関数WaitKeyではなく、キーが押されるまで空ループするなりで
対処してみてください。


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

Name: y  ..初心者(5,185ポイント)   Date: 2010/04/01(木) 00:35   No:49980     
Title: Re:すべてのカウンターを止めるには    
WaitKey関数は、元々メインループも作らないような、ちょっとしたテストの為の関数です。
使うと、その時点でメインループ自体が止まります。
つまり、カウンタ変数どころか、プログラムの処理自体が止まります。

画面に実際に表示されるのは、ScreenFlip(ScreenCopy)が呼び出されてからなので、WaitKeyの時点では画面に表示されることは無い、ということです。

解決策ですが、全ての構造体のカウンタは、止めたいというからには恐らくどこかで更新してるはずです。
その更新を止めればいいだけです。


あまり詳しく言っても勉強にならないのでここまでです。すみません。
あとは、入力の判定を工夫するとうまくいくと思います。


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

Name: no  ..中級者(9,157ポイント)   Date: 2010/04/01(木) 00:51   No:49982     
Title: Re:すべてのカウンターを止めるには    
なるほど、当然の話ですね。
完全に失念していました、ありがとうございます。


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

Name: 舞桜  ..ぴよぴよ(4ポイント)   Date: 2010/04/01(木) 15:43   No:49999     
Title: Re:すべてのカウンターを止めるには    
ScreenFlip()関数は厳密には、表裏描画するときにはじめて使えます。

描画先をBACK_SCREENにしていれば、画像は画面に描画されるので、
その画像を可視できる状態にするためにはScreenFlip()で、
表と裏の画面を切り替える必要があります。
描画先が前面である場合は、画像が前面に描画されるので、
ScreenFlip()を呼ぶ必要はありません。



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



Name: てってけ  ..ぴよぴよ(35ポイント)   Date: 2010/03/31(水) 21:24   No:49969       
Title: C言語初心者です。おしえてほしいことがあります    
プログラムをうったとき、例えば、Tとtではプログラムをうったときに支障は出るのですか?

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


Name: TKOZ  ..熟練のプログラマー(50,866ポイント)   Date: 2010/03/31(水) 21:31   No:49970     
Title: Re:C言語初心者です。おしえてほしいことがあります    
C言語では、変数の大文字と小文字は区別されます。
ですから、Tとtでは変数名だとして、それは区別されます。


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

Name: xaion  ..ぴよぴよ(198ポイント)   Date: 2010/03/31(水) 22:31   No:49972     
Title: Re:C言語初心者です。おしえてほしいことがあります    
C/C++では区別します。
言語によって区別するのと区別しないのとが存在します。


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

Name: box  ..ハッカー(151,484ポイント)   Date: 2010/03/31(水) 22:39   No:49973     
Title: Re:C言語初心者です。おしえてほしいことがあります    
変数でない局面、例えば、
#include <stdio.h>

#include <sTdio.h>
とを同一視する場合があります。


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

Name: no  ..初心者(8,648ポイント)   Date: 2010/03/31(水) 22:43   No:49976     
Title: Re:C言語初心者です。おしえてほしいことがあります    
わからないことは聞くことも大事ですが、実際に自分で試してみてはいかがでしょう。
この件に関していえば、ほんの数十秒で結果がわかると思いますよ。

今現在、プログラミングを行う環境にあればの話ですが。


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

Name: てってけ  ..ぴよぴよ(58ポイント)   Date: 2010/04/01(木) 01:01   No:49983     
Title: Re:C言語初心者です。おしえてほしいことがあります    
ありがとうございました。
考え直せば自分でも試せるので今後はいろいろと試して生きたいです


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

Name: たかぎ [URL]  ..ハッカー(172,466ポイント)   Date: 2010/04/01(木) 13:28   No:49994     
Title: Re:C言語初心者です。おしえてほしいことがあります    
どのレベルの話なのかがわかりませんが...

基本的には、大文字と小文字は区別されます。
ただし、必ず区別されることを期待すべきではありません。

というのも、外部識別子の大文字・小文字が区別されるかどうかは処理系定義だらかです。
また、ヘッダ名の大文字・小文字が区別されるかどうかも処理系定義です。


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



Name: xaion  ..ぴよぴよ(174ポイント)   Date: 2010/03/31(水) 22:30   No:49971       
Title: 画像のサイズについて。DXライブラリ初心者    
png画像のサイズが384x384なので、それにあわせてコーディングしてみたんですがうまくいきません。

#include "DxLib.h"

typedef struct{
    int x; //x座標にいる位置
    int y; //y座標にいる位置
    int img; //イメージ
    int muki; //向き
    int walking_flag; //歩けるかどうか
}ch_t;

int hantei[10][20] = {
    {1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1},
    {1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1},
    {1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,1},
    {1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,1},
    {1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,1},
    {1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1},
    {1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1},
    {1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1},
    {1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1},
    {1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1},
};

int can_or_cannot(int x,int y,int muki){
    //上向き
    if(muki == 0){
        if(hantei[y / 48 - 1][x / 32] == 1){
            return 1;
        }
    }
    //左向き
    if(muki == 1){
        if(hantei[y / 48][x / 32 - 1] == 1){
            return 1;
        }
    }
    //下向き
    if(muki == 2){
        if(hantei[y / 48 + 1][x / 32] == 1){
            return 1;
        }
    }
    //右向き
    if(muki == 3){
        if(hantei[y / 48][x / 32 + 1] == 1){
            return 1;
        }
    }

    return 0;
}

int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nCmdShow){
    int i,j;
    int image[12];
    char key[256];
    ch_t ch;

    if(ChangeWindowMode(TRUE) != DX_CHANGESCREEN_OK || DxLib_Init() == -1){
        return -1;    
    }
    
    ch.x = 320;
    ch.y = 240;
    ch.walking_flag = 0;
    ch.muki = 3;

    SetDrawScreen(DX_SCREEN_BACK);
    LoadDivGraph("char.png",12, 3, 4, 32, 48,image);

    while(!ProcessMessage() && !ClearDrawScreen() && !GetHitKeyStateAll(key) && !key[KEY_INPUT_ESCAPE]){
        for(i = 0;i < 10; i++){
            for(j = 0;j < 20; j++){
                DrawBox(j * 32, i * 48,(j + 1) * 32,(i + 1) * 48,GetColor(255,255,255),TRUE);
            }
        }
        
        if(ch.x % 32 == 0 && ch.y % 48 == 0){
            ch.walking_flag = 1;
            if(key[KEY_INPUT_UP] == 1){
                ch.muki = 0;
            }else if(key[KEY_INPUT_LEFT] == 1){
                ch.muki = 1;
            }else if(key[KEY_INPUT_DOWN] == 1){
                ch.muki = 2;
            }else if(key[KEY_INPUT_RIGHT] == 1){
                ch.muki = 3;
            }else{
                ch.walking_flag = 0;
            }

            if(ch.walking_flag == 1){
                if(can_or_cannot(ch.x,ch.y,ch.muki) == 1){
                    ch.walking_flag = 0;
                }
            }
        }
        
        if(ch.walking_flag == 1){
            if(ch.muki == 0){
                ch.y--; //上向き
            }else if(ch.muki == 1){
                ch.x--; //左向き
            }else if(ch.muki == 2){
                ch.y++; //下向き
            }else if(ch.muki == 3){
                ch.x++; //右向き
            }
        }

        ch.img = image[(ch.x % 32 + ch.y % 48) / 12 + ch.muki * 3];
        DrawGraph(ch.x,ch.y,ch.img,TRUE);
        ScreenFlip();
    }

    DxLib_End();
    return 0
}

指南のほどよろしくお願いします。


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


Name: no  ..初心者(8,556ポイント)   Date: 2010/03/31(水) 22:41   No:49974     
Title: Re:画像のサイズについて。DXライブラリ初心者    
以下の二点を修正するといいと思います。

int image[12];

int image[96];

LoadDivGraph("char.png",12, 3 , 4, 32, 48,image); 

LoadDivGraph("char.png",96, 12 , 8 , 32, 48,image); 

>png画像のサイズが384x384なので、それにあわせてコーディングしてみたんですがうまくいきません
と仰ってますが、合わせていないような気がします。

もしも配列など基本的なことをやっていない・曖昧ならばC言語の基礎本を一冊終わらせることをおすすめします。

何分私も素人なもので、間違っていたら申し訳ないです。



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

Name: kazuoni [URL]  ..ハッカー(141,553ポイント)   Date: 2010/04/01(木) 00:24   No:49979     
Title: Re:画像のサイズについて。DXライブラリ初心者    
うーん、noさんの様にやってしまうと、
> ch.img = image[(ch.x % 32 + ch.y % 48) / 12 + ch.muki * 3]; 
は無意味になってしまいますね。

管理するには、二次元配列のほうがよいでしょう。
image[キャラ番号][キャラチップ番号]
のようにですね。


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

Name: no  ..中級者(9,129ポイント)   Date: 2010/04/01(木) 00:50   No:49981     
Title: Re:画像のサイズについて。DXライブラリ初心者    
ああ、なるほど、やろうとしていることがわかりました。
左上の金髪っぽい人物のみ抽出しているという意味ですね。
コレは大変失礼を……orz


どのようにうまくいかないか教えてもらえます?


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

Name: kazuoni [URL]  ..ハッカー(142,060ポイント)   Date: 2010/04/01(木) 01:19   No:49985     
Title: Re:画像のサイズについて。DXライブラリ初心者    
とりあえずはこんな感じでいけるかと。

        if(ch.x % 32 == 0 && ch.y % 48 == 0){ 
            ch.walking_flag = 1; 
            if(key[KEY_INPUT_DOWN] == 1){ 
                ch.muki = 0; 
            }else if(key[KEY_INPUT_LEFT] == 1){ 
                ch.muki = 1; 
            }else if(key[KEY_INPUT_RIGHT] == 1){ 
                ch.muki = 2; 
            }else if(key[KEY_INPUT_UP] == 1){ 
                ch.muki = 3; 
            }else{ 
                ch.walking_flag = 0; 
            } 

            if(ch.walking_flag == 1){ 
                if(can_or_cannot(ch.x,ch.y,ch.muki) == 1){ 
                    ch.walking_flag = 0; 
                } 
            } 
        } 
         
        if(ch.walking_flag == 1){ 
            if(ch.muki == 0){ 
                ch.y++; //下向き 
            }else if(ch.muki == 1){ 
                ch.x--; //左向き 
            }else if(ch.muki == 2){ 
                ch.x++; //右向き 
            }else if(ch.muki == 3){ 
                ch.y--; //上向き 
            } 
        } 

        
        ch.img = image[(ch.x%32)/11 + (ch.y % 48)/16 + ch.muki * 3]; 


デバッグしていないのであしからず・・・。
あと、歩き方はちょっとおかしくなるかと思います。
理由は、x方向の一区間が32であるのに対し、歩くアニメーションは3つですので、
3で割りきれず、どうしても不格好な歩き方になってしまいます。
これを根本的には解決することはできません。
が、なんとなくは頑張れば補正できます。
各モーションの歩くピクセルは
11→11→10と移っていきますが、
これを
→11→11→10
→11→10→11
→10→11→11→
とすれば、微妙にうまく歩けてるように見えるかも・・・しれないです。

あとはなんでこうなるかは、管理人さんのプログラムとにらめっこしながら考えてみてください。 編集済み


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

Name: xaion  ..ぴよぴよ(242ポイント)   Date: 2010/04/01(木) 06:03   No:49990 解決!     
Title: Re:画像のサイズについて。DXライブラリ初心者    
たくさんのご回答ありがとうございます。
やってみたところ、向きは変ですけど動くようになりました。
ありがとうございました。


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

Name: Dixq (管理人) [URL]  ..ウィザード(1,167,529ポイント)   Date: 2010/04/01(木) 08:11   No:49992     
Title: Re:画像のサイズについて。DXライブラリ初心者    
歩くモーションが3枚の時は配列を使ってループさせるといいですよ。

1->0->1->2-> 1->0->1->2-> 1->0->1->2-> 

を繰り返したいなら

int Loop[4] = {1,0,1,2};

としておいて

Loop[ Counter % 4 ];

みたいにかけば1,0,1,2,をループさせる事が出来ます。


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



Name: mitunari  ..ぴよぴよ(481ポイント)   Date: 2010/03/31(水) 02:43   No:49932       
Title: 初心者です    
C言語ゲームプログラミングの館で勉強しているのですが、
キャラを四方向に‥の場所を覚えたので自分で考えて打ったのですが(int WINAPI WinMa‥はコピペ
画面の左に永遠と歩き画面の一番左で上を向きます
どうすれば直せますか?
#include "DxLib.h"
 
typedef struct{
    int x,y,muki,img,aruku_flag;
}ch_t;
 
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow ){
        if( ChangeWindowMode(TRUE) != DX_CHANGESCREEN_OK || DxLib_Init() == -1 ) return -1; //初期化処理
 
        int image[16];
        char Key[256];
ch_t ch;
        ch.x=320;
            ch.y=0;
            ch.muki=1;
            ch.aruku_flag=0;
        while(!ProcessMessage() && !ClearDrawScreen() && !GetHitKeyStateAll( Key ) && !Key[KEY_INPUT_ESCAPE]){
              //↑メッセージ処理     ↑画面をクリア           ↑キーボード入力状態取得      ↑ESCが押されていな
            if(ch.y%32==0 && ch.x==0){
            ch.aruku_flag=1;     
                if(Key[KEY_INPUT_UP]==1)
                    ch.muki=0;
                else if(Key[KEY_INPUT_LEFT]==1)
                    ch.muki=4;
                else if(Key[KEY_INPUT_DOWN]==1)
                    ch.muki=8;
                else if(Key[KEY_INPUT_RIGHT]==1)
                    ch.muki=12;
                else
                    ch.aruku_flag=0;
            }            
            if(ch.aruku_flag=1){
            if(ch.muki=4)
ch.x--;

                else if(ch.muki=0)
                    ch.y--;

else if(ch.muki=8)
                    ch.y++;


else if(ch.muki=12)
ch.x++;}

                
                    LoadDivGraph("char.png",16,4,4,32,32,image);
ch.img=image[(ch.x%32)/8+ch.muki];
DrawGraph(ch.x,ch.y,ch.img,TRUE);
               ScreenFlip();
        }
 
        DxLib_End();
        return 0;
}


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


Name: kazuoni [URL]  ..ハッカー(141,455ポイント)   Date: 2010/03/31(水) 04:33   No:49935     
Title: Re:初心者です    
C言語ゲームプログラミングの館をそのままコピぺすれば動くようになります。

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

Name: ideyan  ..入門者(3,219ポイント)   Date: 2010/03/31(水) 08:18   No:49937     
Title: Re:初心者です    
if(ch.aruku_flag=1)
ではなく
if(ch.aruku_flag==1)
ではないでしょうか。
今のままでは代入されて毎回実行されます。

同様のミスが何カ所かあるみたいなので
全て直してみてください。


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

Name: mitunari  ..ぴよぴよ(496ポイント)   Date: 2010/03/31(水) 15:33   No:49951     
Title: >kazuoniさん    
そうなんですが自分だけで書くことも大切だと思ったので‥


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

Name: mitunari  ..ぴよぴよ(532ポイント)   Date: 2010/03/31(水) 15:35   No:49952 解決!     
Title: :>ideyanさん    
ありがとうございました!
そことif(ch.y%32==0 && ch.x==0){ 
とch.img=image[(ch.x%32)/8+ch.muki]; 
これをなをして成功しました!


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

Name: wing  ..初心者(6,801ポイント)   Date: 2010/03/31(水) 17:18   No:49958     
Title: Re::>ideyanさん    
うまく動いているように見えますが、
 LoadDivGraph("char.png",16,4,4,32,32,image);
これを初期化処理のところに書かないのは
たいへん大きなミスです。

kazuoniさんも言っていますが、サンプルのプログラムは
よくできているので、改造することなく、そのままのコードで
使用するのが一番いいです。


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

Name: たいちう  ..熟練のプログラマー(64,327ポイント)   Date: 2010/03/31(水) 17:56   No:49961     
Title: Re::>ideyanさん    
あくまでも、ご参考までに...


私の場合は手打ちします。特に新しい言語を覚えようという場合など。
何故かというと、その環境でのデバッグを体験するために、
少々のバグが混入させることを期待しているわけです。

習得後に必要になるであろう実際のデバッグと比べると、
正しいとされているソースコードもあるデバッグは格段に簡単だからです。

また、元のサンプルの出来の良し悪しは別として、
別のスタイルへの変更もしたい時があります。
ちょっとこの機能を追加したいとか、この機能を使うことは当面無さそうだから、
定数にしちゃえとかも。

# デバッグして行き詰ったときに、元のソースをコピペで試すことが
# 有効なのは勿論です。


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

Name: Dixq (管理人)  ..ウィザード(1,167,307ポイント)   Date: 2010/03/31(水) 18:09   No:49962     
Title: Re:初心者です    
サンプルの良し悪しは…悪しですね(笑)

ところで、コードの意味を理解する事が最重要だと思います。
画像の番号の計算式はなかなか特殊に思えますよね。
あの計算式の意味はわかりますか?

わかれば、割った数を一度変数に入れた方が自分はわかりやすいだとか、変更する意味も見出だせ、理解が深まるでしょう。

手打ちも理解しようとしてうつか、ただ丸写ししてうつかではかなり違います。何も考えない丸写しはコピーとかわりません。うってて解らなければ一度手をとめてみましょう。


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

Name: mitunari  ..ぴよぴよ(882ポイント)   Date: 2010/03/31(水) 22:43   No:49975     
Title: Re::>ideyanさん    
そうなんですか‥教えていただきありがとうございます!
ただ実際に作るときは自分で全てやるという変なこだわりがあってw
>たいちうさん
書くとかきましたが今私がのせていたものはコピのところ以外見ないで手打ちしています 
>Dixqさん
覚えて(単語などを)から自分で考えてうっています
サンプルは‥良いですよw
理解するのにかなり時間をつかいました(ch.x%32←これ
念のために‥
x座標の数÷32=YあまりZ
Z÷8=表示する画像 あまりは切捨て
ですよね?




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

Name: Dixq (管理人) [URL]  ..ウィザード(1,167,411ポイント)   Date: 2010/04/01(木) 08:07   No:49991     
Title: Re::>ideyanさん    
そうですね。
%はあまりを求める演算子です。ですから0-31を繰り返します。
それを8で割るので、同じ周期で0-3を繰り返します。
「割った余り」はループを多用するゲームプログラムではすごく良く使えますので覚えておくと便利ですよ。


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



Name: あいくん  ..ぴよぴよ(63ポイント)   Date: 2010/03/31(水) 01:09   No:49928       
Title: system()について    
#include <stdlib.h>の
ststem関数を使って以前作成した
ツールを起動したいのですが

system("C:\\Program Files\\Microsoft Visual Studio 9.0\\VC\\tool.exe");

としたところ

'C:\Program' は、内部コマンドまたは外部コマンド、
操作可能なプログラムまたはバッチ ファイルとして認識されていません。

となってしまい
tool.exeを起動することができません。
どうすればよろしいですか?


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


Name: ぽこ  ..初心者(7,558ポイント)   Date: 2010/03/31(水) 01:25   No:49929     
Title: Re:system()について    
system("\"C:\\Program Files\\Microsoft Visual Studio 9.0\\VC\\tool.exe\""); 
とすると、どうですか?


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

Name: あいくん  ..ぴよぴよ(120ポイント)   Date: 2010/03/31(水) 01:33   No:49930     
Title: Re:system()について    
>ぽこさん
早速のご回答ありがとうございます。

編集してみましたが
やはり同じようになってしまいました。


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

Name: ぽこ  ..初心者(7,582ポイント)   Date: 2010/03/31(水) 02:13   No:49931     
Title: Re:system()について    
C:\Program Files\Microsoft Visual Studio 9.0\VC\tool.exe
が本当に存在するか確認してください。


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

Name: あいくん  ..ぴよぴよ(159ポイント)   Date: 2010/03/31(水) 02:43   No:49933     
Title: Re:system()について    
>ぽこさん
ディレクトリは存在するのは間違いありません。

なんか空白で区切られてしまってるようです。


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

Name: lbfuvab  ..プログラマー(25,137ポイント)   Date: 2010/03/31(水) 04:05   No:49934     
Title: Re:system()について    
ShellExecとかじゃダメですか?

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

Name: あいくん  ..ぴよぴよ(197ポイント)   Date: 2010/03/31(水) 11:45   No:49942     
Title: Re:system()について    
>lbfuvabさん
ShellExecという関数を知らなかったのでググってみたのですが
わかりませんでした。

どのように使えばよろしいのでしょうか?


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

Name: no  ..初心者(8,365ポイント)   Date: 2010/03/31(水) 12:36   No:49944     
Title: Re:system()について    
斜線が二本というのがきになるんですが、\が二つはいってません?

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

Name: no  ..初心者(8,375ポイント)   Date: 2010/03/31(水) 12:39   No:49945     
Title: Re:system()について    
おっと失礼、「¥」←これです。

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

Name: あいくん  ..ぴよぴよ(221ポイント)   Date: 2010/03/31(水) 12:59   No:49946     
Title: Re:system()について    
>noさん
エスケープしてます。


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

Name: dic  ..熟練のプログラマー(59,027ポイント)   Date: 2010/03/31(水) 15:54   No:49953     
Title: Re:system()について    
system("C:\\Program Files\\Microsoft Visual Studio 9.0\\VC\\tool.exe"); 
で / スラッシュでなく ¥¥ でフォルダ指定してみてはいかがですか?

(\\)文字化けしますね


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

Name: たかぎ [URL]  ..ハッカー(172,362ポイント)   Date: 2010/03/31(水) 16:00   No:49955     
Title: Re:system()について    
> (\\)文字化けしますね 

それをいうなら、本来なら¥に見えるのが文字化けでしょう。
 編集済み


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

Name: あいくん  ..ぴよぴよ(252ポイント)   Date: 2010/03/31(水) 16:03   No:49956     
Title: Re:system()について    
>dicさん
どういう意味でしょうか?
スラッシュにはしていません。


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

Name: Ma  ..熟練のプログラマー(67,392ポイント)   Date: 2010/03/31(水) 20:03   No:49964     
Title: Re:system()について    
>/ スラッシュ
たしかに、スラッシュは使われていないかと。。。。

ところで、ShellExecute はどうなったの??
http://msdn.microsoft.com/ja-jp/library/cc422072.aspx
http://www11.plala.or.jp/studyhall/cpp/system.html


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

Name: Ma  ..熟練のプログラマー(67,460ポイント)   Date: 2010/03/31(水) 20:17   No:49965     
Title: Re:system()について    
あと、コマンドプロンプト 起動
でぐぐってみると、ヒントになるようなのがいろいろありましたよー。


はい。

つsystem("start \"\"  \"C:\\Program Files\\Microsoft Visual Studio 9.0\\VC\\tool.exe\"");


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

Name: あいくん  ..ぴよぴよ(194ポイント)   Date: 2010/03/31(水) 21:01   No:49966 解決!     
Title: Re:system()について    
>Maさん
system("start \"\"  \"C:\\Program Files\\Microsoft Visual Studio 9.0\\VC\\tool.exe\"");
これでできました。

ホントにありがとうございます。

ただなぜこうなるのかが理解できません。


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

Name: Ma  ..熟練のプログラマー(67,631ポイント)   Date: 2010/03/31(水) 21:16   No:49967     
Title: Re:system()について    
コマンドプロンプトを開いて、
help start

とうってみてください。
start の使い方がかかれています。

いろいろなオプションがありますが、今回は最初のふたつの[] のみ使いました。
エスケープを除くと、例の上のコマンドは以下のようになります。

start "" "C:\Program Files\Microsoft Visual Studio 9.0\VC\tool.exe"

これと、コマンドプロンプトのヘルプから表示される start の文法を比べていただければ、title の部分があって、次にパスが指定されているのがわかるのではないでしょうか?

私はあまりMS-DOSには詳しくないので、これぐらいしかいえません(汗


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



Name: Tororo  ..初心者(5,593ポイント)   Date: 2010/03/24(水) 13:19   No:49636       
Title: STG作りました。    
間違えて無題でスレを立ててしまったので新しく投稿させていただきました。

シューティングゲーム 20面です。
http://www1.axfc.net/uploader/Li/so/62343
pass tororo
いまだに少し謎の判定がありますが、かなりおさまっています。

簡単な弾幕シュミレータです。
http://www1.axfc.net/uploader/Sc/so/94322 
pass tororo 
編集可能な場所は少ないですが、いじってみてください^^;

プレイした感想をください^^;

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


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


Name: TKOZ  ..熟練のプログラマー(50,829ポイント)   Date: 2010/03/25(木) 13:57   No:49710     
Title: Re:STG作りました。    
Tororoさんへ

プレイしました。まあ、少しなんですが…。
シューティングゲームが苦手な僕には、1面も難しかったです。
でも、弾幕は綺麗でしたね。
ゲーム完成おめでとうございます。


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

Name: Tororo  ..初心者(5,661ポイント)   Date: 2010/03/25(木) 16:40   No:49717     
Title: Re:STG作りました。    
>>TKOZさん
プレイありがとうございます^^
今は、ほとんどボスの .h しか作っていないのでw
プレイヤーは成長しそうにないですw


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

Name: situmon  ..熟練のプログラマー(48,734ポイント)   Date: 2010/03/25(木) 21:20   No:49720     
Title: Re:STG作りました。    
やらせていただきました。
少しのステージしかやっていないのですが、
最後のステージは恐ろしい耐久ステージですね・・・(笑
もう少しHPを減らしてみたらいかがでしょう。

また音楽は自分で作られたのですか?
だとしたら、雰囲気があってますね!!

がんばってください!!
弾幕はすばらしいですね。


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

Name: Tororo  ..初心者(5,803ポイント)   Date: 2010/03/25(木) 21:32   No:49721     
Title: Re:STG作りました。    
>>situmonさん

無駄に高く設定されてますw
そのほうが「最初より腕が上がったな」 的な感覚になると思ったので^^;
ただ高すぎますね。

>>また音楽は自分で作られたのですか? 
>>だとしたら、雰囲気があってますね!!

dominoを使って.mid作って。
変換ソフトで.wavに変えています。
ただなかなかウマク作れなくて、苦労しています^^;

画像はあるソフトを使って、適当?に書いたものを、
ぼかし、アンチエイリス、反転等で それっぽくしています(ステージ16〜20)
それ以外はそのソフトを手に入れる前なのでw 変です。


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

Name: situmon  ..熟練のプログラマー(48,964ポイント)   Date: 2010/03/26(金) 14:13   No:49748     
Title: Re:STG作りました。    
dominoですか・・・
質問をいくつか・・・
音源は何を使っていますか?
それと変換ソフトは何を使いましたか?
どのくらい作曲してますか?

自分が中1のころはそもそも作曲などあまり知らず、できませんでした・・・(Tororoさんすごいですね・・・
>>
あると便利なセット・・・
MIDIキーボード、MIDIケーブル、音源(無料ならばTimidity++(無料ですが素晴らしい価値があります),有料ならばオークションや中古店でRolandのSCシリーズ(下位機種で、5000円くらいでオークションで買えるはずです。))

あるソフトとは・・・?

あるソフトがそれなのかもしれませんが、
GIMPはおすすめします。

>>
あると便利なセット・・・

ペンタブレット(有料)、GIMP、Pixia、SAI(有料)、


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

Name: Tororo  ..初心者(5,958ポイント)   Date: 2010/03/26(金) 15:56   No:49756     
Title: Re:STG作りました。    
>>situmonさん
>>dominoですか・・・ 
>>質問をいくつか・・・ 
>>音源は何を使っていますか? 
もともとdomino付属の物です。


>>それと変換ソフトは何を使いましたか? 
Timidi95です
>>どのくらい作曲してますか? 
時間ですか? 曲数ですか?
時間なら一曲20〜30分です。
曲数は3ですww



>>あるソフトとは・・・? 
EDGE と JTrimです。
EDGEは有名ですw
JTrimは画像にいろいろな効果を与えるソフトです。
ttp://www.woodybells.com/




 編集済み


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

Name: situmon  ..熟練のプログラマー(49,248ポイント)   Date: 2010/03/27(土) 00:25   No:49769     
Title: Re:STG作りました。    
1.
まちがってたらすいません。
そもそもDominoに音源は「付属していません」。
たぶんMicrosoftの最初からある音源です。

それで満足しているならともかく、Timidity++を導入(無料だと思います)することをおすすめします。
メリット1・音質がよい
メリット2・Timidi95を使わなくても付属のソフトでwav変換。たしかTimidi95を使うと、
作曲したときの音と違う音でwav出力されてしまうはずです。しかしそれがだいたい解消されます。
メリット3・気に入らない音は好きな音に変えられる。(これは自分はやったことがありませんが調べてみるとわかるかもしれません。)

2.Jtrimは知りませんでしたがEDGEは知ってたのですが使ったことがありませんね・・・
使いようによれば素晴らしい絵になるやつですね・・・(自分はドット絵、苦手なので、変な絵になりそう・・・)しかし前にも書いたようにGIMPの導入をおすすめします。
すばらしいですよ!!

3.ステージ22ができたら公開されますか?
しかしがんばってください!!Tororoさんの弾幕は難しくて模様がきれいですごいと思います。


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

Name: Tororo  ..初心者(6,001ポイント)   Date: 2010/03/27(土) 09:36   No:49771     
Title: Re:STG作りました。    
>>situmonさん
公開は5ステージ事なので、次は25まで作り終わったらです。


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

Name: Tororo  ..初心者(6,068ポイント)   Date: 2010/03/27(土) 10:08   No:49776     
Title: Re:STG作りました。    
あ〜う〜
音源はマイクロソフトの物でした^^;
音楽に関しては余り分かんないのでw

GIMPについては入れようかなと思います。
Timidity++は・・・・・わかりませんw


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

Name: Tororo  ..初心者(6,176ポイント)   Date: 2010/03/27(土) 17:22   No:49793     
Title: Re:STG作りました。    
気がついたんですが、自分は画像ソフト、画像をメモリースティックに入れています。
なのでGIMPみたいに専用dllを毎回インストールするわけには行かないので、
やめとこうかと思います。
それにEDGE,JTRIMが使いやすいので^^;


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

Name: らぁ  ..かけだし(1,056ポイント)   Date: 2010/03/27(土) 17:43   No:49794     
Title: Re:STG作りました。    
プレイさせていただきました。STGは苦手なんですが、楽しかったです。
20面をプレイしている時に弾が表示されていないときに自機が死亡する事が何度か有りました。
多分バグだと思います。死んだ原因も分かりませんが一応報告させて頂きます。


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

Name: らぁ  ..かけだし(1,105ポイント)   Date: 2010/03/27(土) 17:51   No:49795     
Title: Re:STG作りました。    
原因が分かりました。
初期座標でずっとZを押していると数秒後に死んでいました。
これは敵の攻撃に関係なく起こる現象でした。
確認よろしくお願いします。


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

Name: Tororo  ..初心者(6,106ポイント)   Date: 2010/03/27(土) 18:02   No:49796     
Title: Re:STG作りました。    
>>らぁさん
それは作成当初からあるバグです。
在る程度動いていれば少ないです。
直らないんですww
ただ、かなりおさまりました。
今は我慢してください^^;


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

Name: Tororo  ..初心者(6,176ポイント)   Date: 2010/03/28(日) 14:54   No:49825     
Title: Re:STG作りました。    
http://www1.axfc.net/uploader/Li/so/62707
pass tororo
25面になりました^^
ここまでくると疲れたww
なのに、謎の当たり判定が消えない・・・・困りますw。
後、少しで中学校入学式!!


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

Name: Tororo  ..初心者(6,258ポイント)   Date: 2010/03/29(月) 12:25   No:49862     
Title: Re:STG作りました。    
追記

敵によってプレイヤーの攻撃力が違うので前より倒しやすくなっています。
後、全敵キャラきれいになっていますww
それに敵の玉の当たり判定が小さくなっています。
多少死ににくくなっています。


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

Name: Tororo  ..初心者(6,261ポイント)   Date: 2010/03/31(水) 17:53   No:49959     
Title: Re:STG作りました。    
連レス失礼しますm(_ _)m

このSTGの更新はこれまでとさせていただきます。
新しいゲームや、STLを覚えようかと思うからです。
でも、もしかしたら、新しくなるかもしれません。
そのときはヨロシクお願いします^^


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

Name: Tororo  ..初心者(6,270ポイント)   Date: 2010/03/31(水) 17:53   No:49960 解決!     
Title: Re:STG作りました。    
これにて解決とさせていただきます。

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



Name: kai  ..中級者(13,459ポイント)   Date: 2010/03/30(火) 18:52   No:49916       
Title: fatal error LNK1000    
久しぶりに質問します。

たまになんですが、デバックすると
LINK : fatal error LNK1000: Internal error during IncrBuildImage
というエラーが発生するのですが、このエラーを100%回避する方法はないでしょうか?
もう一度デバックすると回避できるのですが、たびたび起こると
作業効率が遅くなりそうなので困ってます。
ググってもいまいちよく分からなかったので
知ってる方がいましたら教えてください。


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


Name: たかぎ [URL]  ..ハッカー(172,335ポイント)   Date: 2010/03/30(火) 19:33   No:49917     
Title: Re:fatal error LNK1000    
> このエラーを100%回避する方法はないでしょうか? 

一番確実なのは何もしないことですが...

何の話なのかを明確にしないと正確なことは誰も答えられません。
せめて、どんな環境で、何をしたときに、そのエラーが発生したのかぐらいは明らかにしてください。
あと、

> デバックすると 

ビルド時ではなく、デバッグ中に発生したということで間違いありませんね。


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

Name: たかぎ [URL]  ..ハッカー(172,346ポイント)   Date: 2010/03/30(火) 19:37   No:49918     
Title: Re:fatal error LNK1000    
ちょっと書き方が悪かったので補足します。

> ビルド時ではなく、デバッグ中

バグを取り除くという意味ではビルド時のデバッグもあるわけですが、それを言い出せば脳内デバッグや机上デバッグもあるわけで、そのエラーメッセージは誰が(または何が)どのような方法で伝えたものなのかを明らかにしてください。
 編集済み


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

Name: softya [URL]  ..ハッカー(142,059ポイント)   Date: 2010/03/30(火) 19:37   No:49919     
Title: Re:fatal error LNK1000    
SP1にしてますか?
前のバージョンはバグが有ります。
http://support.microsoft.com/kb/950264/ja

たかぎさんもおっしゃっていますが、トラブルの情報は正確に書いてもらわないと正確な回答ができません。 編集済み


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

Name: kai  ..中級者(13,473ポイント)   Date: 2010/03/31(水) 14:08   No:49949     
Title: Re:fatal error LNK1000    
VC++ 2008EE
"龍神録を改造してたら"
いつの間にか、このようなエラーが度々発生するようになりました。


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

Name: softya [URL]  ..ハッカー(142,200ポイント)   Date: 2010/03/31(水) 14:17   No:49950     
Title: Re:fatal error LNK1000    
書いた通りバグが有ります。
VC++ 2008EESP1にしてください。


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

Name: kai  ..中級者(13,489ポイント)   Date: 2010/03/31(水) 17:12   No:49957 解決!     
Title: Re:fatal error LNK1000    
分かりました。
ありがとうございます。


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



Name: nayuta  ..ぴよぴよ(532ポイント)   Date: 2010/03/30(火) 14:10   No:49907       
Title: 龍神録プログラミングの館のプロジェクトファイルについて    
今龍神録プログラミングでシューティングを作る勉強をしているのですが、

そのプロジェクトファイルをダウンロードしてRyuJin.slnをVisual C++ 2008で開こうとすると
変換ウィザードが出て変換しようとするのですが、最終的に以下のメッセージがでます。


ソリューション ファイル
'C:\Users\juwensong\AppData\Local\Temp\Temp1_project.zip
\project\1章\Ryujin.sln'は変換できないため、このファイルを変換
できません。このソリューションを変換するためには、ソリューション
ファイルのアクセス許可を変更して、ファイルを変更したり開いたりで
きるようにしてください。

とでてきて変更できません。

C:\Users以下のフォルダにプロジェクトファイルを保存してないのにC:\Users....
とでるのはなぜですか?

それと、アクセスを許可してもすぐに元の状態にもどり、結局アクセスできなくなって
しまいます。自分で新しくプロジェクトを作らないといけないのでしょうか。。。


よろしくおねがいします。


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


Name: たいちう  ..熟練のプログラマー(63,976ポイント)   Date: 2010/03/30(火) 14:21   No:49909     
Title: Re:龍神録プログラミングの館のプロジェクトファイルについて    
> 'C:\Users\juwensong\AppData\Local\Temp\Temp1_project.zip
> \project\1章\Ryujin.sln'は変換できないため、このファイルを変換

パスの途中に"Temp1_project.zip"とあるでしょ。
zipファイルを覗き見ているようなものでして、
実は解凍できてないのですよ。

明示的に解凍してから試してください。


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

Name: nayuta  ..ぴよぴよ(552ポイント)   Date: 2010/03/31(水) 12:32   No:49943 解決!     
Title: Re:龍神録プログラミングの館のプロジェクトファイルについて    
ありがとうございました。

解決しました!!


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



Name: ogaoga  ..ぴよぴよ(175ポイント)   Date: 2010/03/31(水) 09:00   No:49938       
Title: ダンジョンゲームプログラミングについて    
付属のCDのファイルを実行しようとしたら、
「現在開いているソリューションまたはプロジェクトは旧バージョンのVisual Studioで作成されたものです。このバージョンで使用される形式に変換してください。」 
となったので、「次へ」のボタンを押し「変換準備完了」と表示されたのですが、「完了」のボタンを押すと、さらに以下のメッセージが表示され、結局実行できませんでした。 

「ソリューションファイル'E:\chapter02\md002_dos.slh'は変更できないため、このファイルを変換できません。このソリューションを変換するためには、ソリューションファイルのアクセス許可を変更して、ファイルを変更したり開いたりできるようにしてください。」 

自分なりにいろいろ調べてみましたがわかりませんでした。
どうすれば実行できるようになるでしょうか?
わかる方、どうか回答よろしくお願いします。
       
環境   
OS : Windows vista
コンパイラ名 : VC++ 2008Express Edition 


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


Name: たいちう  ..熟練のプログラマー(63,990ポイント)   Date: 2010/03/31(水) 09:24   No:49940     
Title: Re:ダンジョンゲームプログラミングについて    
ハードディスクにコピーしてください。

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

Name: ogaoga  ..ぴよぴよ(198ポイント)   Date: 2010/03/31(水) 09:39   No:49941     
Title: Re:ダンジョンゲームプログラミングについて    
これはお恥ずかしい(笑)
どうもありがとうございました!


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



Name: ryu  ..ぴよぴよ(685ポイント)   Date: 2010/03/28(日) 15:14   No:49827       
Title: wavの再生で再生されないのですが。    
初投稿です、よろしくお願いします。
DX ライブラリのPlaySoundを使用しwavを再生しようとしています。
Aのファイルは普通に再生できるのですが、Bのファイルは再生できません。
ファイルの位置はABどちらも同じ階層においてあり
名前もコピーしているので大丈夫だと思います。
ただ再生できないBファイルが再生時間30分あり、長いからだめなのかな?
と考えているのですが・・・、あとどこをチェックすれば良いでしょうか?
よろしくお願いします。



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


Name: Ma  ..熟練のプログラマー(63,734ポイント)   Date: 2010/03/28(日) 16:01   No:49829     
Title: Re:wavの再生で再生されないのですが。    
extern    int            PlaySoundFile( const char *FileName, int PlayType ) ;                                                    // WAVEファイルを再生する
extern    int            PlaySound( const char *FileName, int PlayType ) ;                                                        // PlaySoundFile の旧名称

一応念のため、PlaySoundFile を使ってみてはいかがでしょうか?
もしかしたら、ですができるかも。

でも、どちらにせよ、30分もあるようなwavファイルが必要な仕様を見直したほうが良いでしょうが・・w


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

Name: kazuoni [URL]  ..ハッカー(141,436ポイント)   Date: 2010/03/29(月) 10:54   No:49858     
Title: Re:wavの再生で再生されないのですが。    
もしくは拡張子がwav形式ではないからかもしれないですね。
(フリーソフト「極窓」とかで調べてみるのも手かと)


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

Name: ryu  ..ぴよぴよ(767ポイント)   Date: 2010/03/30(火) 00:02   No:49892     
Title: Re:wavの再生で再生されないのですが。    
レスありがとうございます!
PlaySoundFile関数もだめでした、今回やりたいのが30分の音楽を再生するのが
目的なのでこれを外すわけにはいかず(汗
自分で関数作るしかないかもですね・・・む、難しそう。

>ファイル形式
極窓でチェックしてみました、一応Wavで間違いないようです
・・・はてさて(汗


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

Name: ru-pu  ..かけだし(1,036ポイント)   Date: 2010/03/30(火) 00:22   No:49895     
Title: Re:wavの再生で再生されないのですが。    
SetCreateSoundDataType(DX_SOUNDDATATYPE_FILE);
int snd=LoadSoundMem("wavファイル");
PlaySoundMem(snd,DX_PLAYTYPE_BACK);

これで長いwavもいけると思います
SetCreateSoundDataType(DX_SOUNDDATATYPE_FILE);
で再生形式をストリームタイプにしています
あ、sndはサウンドハンドルなので不必要になったらDeleteSoundMem(snd);で
削除するのをお忘れなく、そうしないと曲を再生する度にメモリ使用量が増えることに・・・ 編集済み


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

Name: lbfuvab  ..プログラマー(25,120ポイント)   Date: 2010/03/30(火) 12:44   No:49904     
Title: Re:wavの再生で再生されないのですが。    
OGGに圧縮してストリーム再生にしてもダメですか?

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

Name: Ma  ..熟練のプログラマー(65,607ポイント)   Date: 2010/03/30(火) 12:52   No:49905     
Title: Re:wavの再生で再生されないのですが。    
こちらの質問が参考になるかもしれません。

http://hpcgi2.nifty.com/natupaji/bbs/patio.cgi?mode=view&no=1694


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

Name: no  ..初心者(8,355ポイント)   Date: 2010/03/30(火) 21:13   No:49921     
Title: Re:wavの再生で再生されないのですが。    
ちょっと確認ですが、毎ループごとに再生していませんか?

再生されているかいないかを判定し、再生されていないのなら再生、という記述をしなければ再生されません。
再生部分の記述を見せていただきたいところです。


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

Name: ryu  ..かけだし(1,192ポイント)   Date: 2010/03/30(火) 22:34   No:49922     
Title: Re:wavの再生で再生されないのですが。    
みなさんありがとうございます。
SetCreateSoundDataTypeで無事再生されました!
ストリーム再生って詳しくわからないですが
今度は1時間越えもチャレンジしてみます(笑

URLも見せてもらいました、ライブラリ製作者さんが修正してくれたんですね、ありがとうございます。
3/29にも同じようなスレがあったのですね。
管理人様、過去ログを検索するときのチェックボックスをONにするやつですが
ボタン一発で全てONにできるようにしてほしいです・・・


あと再生とはまた違った質問なのですが、同じスレッドで質問して宜しいでしょうか?
早送りをしてみたく
GetFrequencySoundMem();で 周波数を取得
SetSoundCurrentPosition();で周波数x10 をし10秒の位置を指定し
PlaySoundMem(Sound,DX_PLAYTYPE_BACK,FALSE);で再生したのですが
なぜか再生された音楽は10秒ではなく5秒先の位置で再生されます。
周波数をそのまま設定すると1秒先に設定される、と書いてあったので
単純に掛け算で設定したのですが、またやり方ちがうのでしょうか?





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

Name: Ma  ..熟練のプログラマー(66,358ポイント)   Date: 2010/03/30(火) 23:50   No:49926     
Title: Re:wavの再生で再生されないのですが。    
>SetSoundCurrentPosition();で周波数x10 をし10秒の位置を指定し 


公式掲示板の管理人の書き込みより抜粋。

>引数 Byte で指定する値はバイトですので、例えば秒間 44.1KHz サンプルの2チャンネル、
>精度が16bitのサウンドファイルで、丁度1秒経過した箇所に再生位置を移動したい場合は

>// 44100 = サンプリングレート   2 = チャンネル数   2 = 精度16bitは2byte(8bit=1byteなので)
>SetSoundCurrentPosition( 44100 * 2 * 2, SoundHandle ) ;

この方法で計算しましたか? 編集済み


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

Name: ryu  ..かけだし(1,241ポイント)   Date: 2010/03/31(水) 09:01   No:49939 解決!     
Title: Re:wavの再生で再生されないのですが。    
チャンネル数まで考えていませんでした!奥が深いですね。
単純に掛け算してました・・・・
ありがとうございました!


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



Name: dic  ..熟練のプログラマー(58,855ポイント)   Date: 2010/03/30(火) 13:13   No:49906       
Title: コンパイルできない    
Visual Studio 2010 Beta を使ってますが
VC++6 でコンパイルできていたのですが
コンパイルするとエラーがでます
リンク関連になるかも・・・と予想はしてますが
どこをいじればいいか わかりません

インクルード手順とかも関連あるのでしょうか?
以下がコンパイルエラー文です

ClCompile:
  DxInput8.cpp
C:\Program Files\Microsoft SDKs\Windows\v7.0A\include\winnt.h(290): error C2146: 構文エラー : ';' が、識別子 'PVOID64' の前に必要です。
C:\Program Files\Microsoft SDKs\Windows\v7.0A\include\winnt.h(290): error C4430: 型指定子がありません - int と仮定しました。メモ: C++ は int を既定値としてサポートしていません
C:\Program Files\Microsoft SDKs\Windows\v7.0A\include\winnt.h(8992): error C2146: 構文エラー : ';' が、識別子 'Buffer' の前に必要です。
C:\Program Files\Microsoft SDKs\Windows\v7.0A\include\winnt.h(8992): error C4430: 型指定子がありません - int と仮定しました。メモ: C++ は int を既定値としてサポートしていません
C:\Program Files\Microsoft SDKs\Windows\v7.0A\include\winnt.h(8992): error C4430: 型指定子がありません - int と仮定しました。メモ: C++ は int を既定値としてサポートしていません
  ログファイルを出力しません。
  
..\..\..\..\DXSDK\Include\dsound.h(230): error C4430: 型指定子がありません - int と仮定しました。メモ: C++ は int を既定値としてサポートしていません
..\..\..\..\DXSDK\Include\dsound.h(230): error C2143: 構文エラー : ';' が '*' の前にありません。
..\..\..\..\DXSDK\Include\dsound.h(230): error C4430: 型指定子がありません - int と仮定しました。メモ: C++ は int を既定値としてサポートしていません
..\..\..\


情報不足があったらご指摘お願いします


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


Name: softya [URL]  ..ハッカー(142,040ポイント)   Date: 2010/03/30(火) 14:20   No:49908     
Title: Re:コンパイルできない    
stdafx.hを見せてもらえますか、バージョンなどの設定がまずい気がします。

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

Name: dic  ..熟練のプログラマー(58,921ポイント)   Date: 2010/03/30(火) 20:02   No:49920     
Title: Re:コンパイルできない    
stdafx.hから必要な部分だけコピーして、追加した状態です
どこまでが必要かわからないので全部のせてみます

VS10の内部で#defineなど行ってるかもしれないですね


#undef    UNICODE
#define    _GLOBAL_INSTANCE_
#pragma warning ( disable: 4018 )    //    int < unsinged int の比較
#pragma warning ( disable: 4996 )    //    sprintf のセキュリティ関連

//    ===== VS 10 stdafx.h の追加
#define WIN32_LEAN_AND_MEAN             // Windows ヘッダーから使用されていない部分を除外します。
// Windows ヘッダー ファイル:
#include <windows.h>

// C ランタイム ヘッダー ファイル
#include <stdlib.h>
#include <malloc.h>
#include <memory.h>
#include <tchar.h>

//    ===== VS 10 stdafx.h の追加 ここまで


#include    "dxdraw3.h"
#include    "CDicLog.h"
#include    "DxInput8.h"
#include    "dxsound.h"
#include    "game.h"


#pragma comment( lib, "dxguid.lib" )


#define    APP_NAME    "アプリケーション"
#define    APP_CLASS    "クラス"
#define    DEF_WIDTH    800
#define    DEF_HEIGHT    600


#ifdef    _MAIN_
#define    GLOBAL
#else
#define    GLOBAL    extern
#endif    _MAIN_


GLOBAL    HWND    hwndApp;
GLOBAL    HINSTANCE    hInstApp;
GLOBAL    CDicLog        gLog;

LRESULT    CALLBACK    WindowProc(HWND,UINT,WPARAM,LPARAM);
BOOL    InitApp(int);

void    GameMain();

//---------------------------------------------------------------------
//    共通して使う変数
GLOBAL    IMAGE    g_iKitaiDraw;    //    描画用
GLOBAL    IMAGE    g_iKitai01;
GLOBAL    IMAGE    g_iKitai02;
GLOBAL    IMAGE    g_iKitai03;
GLOBAL    int        g_iSelectKitai;    //    現在稼動する機体
GLOBAL    vector<tBlock>    g_vBlock;
GLOBAL    vector<tBullet>    g_vPlayerBullet;
GLOBAL    vector<tBullet>    g_vBlockBullet;
GLOBAL    IMAGE    g_iImgBlock;
GLOBAL    IMAGE    g_iImgBullet;
GLOBAL    IMAGE    g_iImgBlockChip;
GLOBAL    int        g_iAt;
GLOBAL    IMAGE    g_iSelect;



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

Name: softya [URL]  ..ハッカー(142,173ポイント)   Date: 2010/03/30(火) 22:57   No:49923     
Title: Re:コンパイルできない    
私の所だとコンパイル通りますね。
後は、プリプロセッサの定義とか違うんでしょうかね?

標準だとこれですが。
WIN32;_DEBUG;_WINDOWS


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

Name: dic  ..熟練のプログラマー(58,944ポイント)   Date: 2010/03/31(水) 07:40   No:49936 解決!     
Title: Re:コンパイルできない    
時間が取れ次第調べます
ありがとうございました


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



Name: いわし  ..ぴよぴよ(65ポイント)   Date: 2010/03/30(火) 23:28   No:49924       
Title: 各プレイヤー画面の描写について    
はじめまして、いわしといいます。

今自分はレースゲームのようなものを作ろうとしていますが

ゲームの画面を4分割にして
各プレイヤーが今どの位置にいるのかを描写することで悩んでいます

ゲームのイメージはマリオカートのようなものではなく
640×480より大きな一枚絵の上を俯瞰しているというものを考えています

今プレイヤーが1人なら現在の座標からそこを中心にして一枚絵を動かすという方法
なら実現できましたが、これが複数人の描写となると
プレイヤー1の描写の後、プレイヤー2の描写でプレイヤー1に被ってしまいます

ゲームの画面を分割して描写するにはどうすればいいでしょうか

初投稿なので至らないところがあれば指摘してください


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


Name: Ma  ..熟練のプログラマー(66,263ポイント)   Date: 2010/03/30(火) 23:45   No:49925     
Title: Re:各プレイヤー画面の描写について    
http://hpcgi2.nifty.com/natupaji/bbs/patio.cgi?mode=view&no=1417
http://hpcgi2.nifty.com/natupaji/bbs/patio.cgi?mode=view&no=1522&p=2


過去ログ検索を有効活用するといいですよ。

ただし、この方法、結構fps落ちます。


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

Name: いわし  ..ぴよぴよ(88ポイント)   Date: 2010/03/31(水) 00:16   No:49927 解決!     
Title: Re:各プレイヤー画面の描写について    
ありがとうございます

次からは過去ログ検索を活用していきたいと思います


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



Name: yussanstar  ..かけだし(1,989ポイント)   Date: 2010/03/30(火) 17:58   No:49914       
Title: LoadDivGraphのエラー    
Visual C++ 2008 Express Editionを使って、
DXライブラリのLoadDivGraph関数を使用した時のことなんですが、
一つのプロジェクトこの関数を何回も(30〜40回くらい)
使っていると、

『グラフィックの数が許容量を越えました終了します』

というエラーが出て、デバッグが強制終了されます。
この対処法は何でしょうか。


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


Name: Ma  ..熟練のプログラマー(66,158ポイント)   Date: 2010/03/30(火) 18:31   No:49915     
Title: Re:LoadDivGraphのエラー    
DXライブラリの管理人さんに質問するべきだと私は思います。
ただの推測ですが、その許容数はライブラリによって設定されているものではないかと。
管理人さんの意見次第で、許容数が変更できる、増加するなどの対処をしてくださるのではないでしょうか。

あと、もうひとつの対処法は、仕様を改めることだと思います。(こちらのほうがおすすめかも)
たとえば、いらなくなったものは開放するのが一番いいかと。
メモリの使用量的にも、こちらをお勧めします。
(以前私が作成したゲームでは150前後のグラフィックハンドルを使いましたが、
一時的に不必要になったものを開放していなかったら1GB以上のメモリが必要になってたでしょうね。)



あと、LoadDivGraph の引数にミスがないかも注意してください。
(生成されるグラフィックハンドル数は、引数次第で左右するので。) 編集済み


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



Name: トトロ  ..ぴよぴよ(23ポイント)   Date: 2010/03/30(火) 09:34   No:49899       
Title: 例外が発生しました。    
今龍神録プログラミングの館の4章のコードを丸写しして実行してみたのですが、
画像が描画出来てない上に画面全体にちらつきが生じます。
また、ディスプレイドライバの応答が停止して、次のような例外が発生しました。

RyuJin.exe の 0x766b9b2b でハンドルされていない例外が発生しました: 
0xC0000005: 場所 0x048b8000 に書き込み中にアクセス違反が発生しました。

OS:Vista
ライブラリ:VisualC++用(Ver3.02)
VisualC++2008 Express Edition
を使用してます。

ディスプレイドライバと相性が悪いというのはあるのでしょうか?
グラフィックボードはnVIDIAのGeForce GTS250を使用してます。


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


Name: MNS  ..プログラマー(34,114ポイント)   Date: 2010/03/30(火) 10:16   No:49900     
Title: Re:例外が発生しました。    
グラフィックボードのドライバは最新のものですか?

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

Name: Dixq (管理人)  ..ウィザード(1,167,213ポイント)   Date: 2010/03/30(火) 11:08   No:49902     
Title: Re:例外が発生しました。    
DXライブラリを最新にしてみてください

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

Name: Ma  ..熟練のプログラマー(65,651ポイント)   Date: 2010/03/30(火) 12:35   No:49903     
Title: Re:例外が発生しました。    
横から失礼。
ちょっときになることがあったので。

>DXライブラリを最新にしてみてください

管理人様
>ライブラリ:VisualC++用(Ver3.02) 
とありましたが、3.02b に更新ということでしょうか?



追記:
っと、公式掲示板チェックしてみたらこんなのが・・・
http://hpcgi2.nifty.com/natupaji/bbs/patio.cgi?mode=view&no=1685
もしかして類似…? 編集済み


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

Name: トトロ  ..ぴよぴよ(221ポイント)   Date: 2010/03/30(火) 15:16   No:49910     
Title: Re:例外が発生しました。    
皆様の回答を参考にグラフィックドライバを最新版にしたところ、
画像は表示されるようになり例外もなくなったのですが、
画面のちらつきは修正されず強制終了されます。
また、DXライブラリは調べてみたところ自分が使用しているのは最新版のようです。
少しVer3.02bは気になるとこですが。

あとディスプレイドライバnvlddmkmが応答しなくなることについて
いろいろ調べてみたのですが、けっこうこの問題で悩んでいる方が多いようです。
もしかしたらグラボ自体が死んでるかもしれないと思ったので、
適当な3Dゲームをしてみたところ特に問題なかったのでやはりドライバに問題がありそうです。

もう少し調べてみます。



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

Name: MNS  ..プログラマー(34,246ポイント)   Date: 2010/03/30(火) 15:30   No:49911     
Title: Re:例外が発生しました。    
どうやらVistaとNVIDIA製グラフィックボードを使用している場合に起こる、
特有の問題みたいですね。

一番の解決方法はOSを変えることであるそうですが、
WindowsVista自体のアップデートは全て行っているか、
その他のハードウェア(例えばマザーボード)のドライバは最新か、
ということを確かめてみて、もしそうでないのであれば、
アップデートなりをしてみると解決するかもしれません。


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

Name: トトロ  ..ぴよぴよ(337ポイント)   Date: 2010/03/30(火) 16:23   No:49912     
Title: Re:例外が発生しました。    
>>MNSさん
迅速な回答ありがとうございます。

ハードウェアのアップデートをしてみます。
もしそれで無理なようなら思い切ってWindows7にアップグレードします。
そろそろOSを変えようと思っていたので良い機会かもしれません。

その前にWindows7での不具合情報とか調べてみることにします。


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

Name: Ma  ..熟練のプログラマー(65,913ポイント)   Date: 2010/03/30(火) 16:54   No:49913     
Title: Re:例外が発生しました。    
>少しVer3.02bは気になるとこですが。 
公式の質問掲示板で適当なスレを選ぶと、管理人さんがポストしたレスの中に最新版へのリンクがあります。
そこからDLできますが、今回の場合、これが原因ではなさそうですね。

>もしそれで無理なようなら思い切ってWindows7にアップグレードします。 
OSを更新したところでなおるとは思えませんけどね…。
でも、個人的にはVistaよりは7のほうが好きなので、どちらにせよアップデートいいとおもいますよw

>その前にWindows7での不具合情報とか調べてみることにします。
ちなみに、私は半年前ほどに Vistaからアップデートして、Windows7 にしたところです。(64bit)。
DXライブラリについては、(Vistaでも7でも)特にOSのせいによる不具合はありませんでした。
(あるといえばありましたが、管理人さんが修正してくださりました。) 編集済み


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



Name: 光冠  ..ぴよぴよ(211ポイント)   Date: 2010/03/29(月) 23:11   No:49889       
Title: シューティングゲームの企画    
はじめまして。光冠といいます。

大学の課題でシューティングゲームを作ろうと思うのですが、
まず企画を出さないといけないらしいのです。
そこで一週間毎の予定を書かないといけないのですが
まだゲームを作った経験が無いので一週間でどのぐらいできるのかがわかりません。

全部で4週間の予定なのであまり難しいものを作るつもりはありませんが、
4週間でとりあえず仮完成できるように予定を立てたいと思っております。

一週間の作業量の目安として添付ファイルつけておきます。

一週間毎にこのぐらいまでできるんじゃないかなーとか書いてくれると嬉しいです。
よろしくお願いします。


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


Name: Dixq (管理人) [URL]  ..ウィザード(1,166,527ポイント)   Date: 2010/03/29(月) 23:21   No:49890     
Title: Re:シューティングゲームの企画    
> 光冠さん

こんにちは。
課題面白そうですね。私もそんな授業があればどんなに打ち込んだことだろうか・・。

---

まず一週間に何時間やるのか家でもやるのかなどが解らないと答えられないんじゃないでしょうか。

私は昔学校で半年の期間で何か作れと言われた時、半年もあったのに大したものは作れませんでした。
授業で解る範囲で、授業中しかしませんでしたし。

一方http://dixq.net/sakuhin.html#s1これ作る時は2週間強でしたけど、寝ても覚めても夢の中でも作る位作りました。
作るのが大好きなので、やらされるのとは作業効率が全く違っていました。
なので

・大学の授業中のみでやるつもりなのか、その場合週に何時間あるのか
・設計などもしなければならないのか、コーディングだけでよいのか
・家に持ち帰ってもいいのか、持ち帰ってやるなら家でどれ位やるつもりなのか
・自分はその作品に対してどれ位の制作意欲があるのか(提出したらもういい、というレベルなのか、提出し終わっても満足いくまで制作を続けたい位なのか)
・自分はどれ位プログラムを理解していて、どれ位経験があるのか

この辺を明確にしてもらわないと
私たちには光冠さんがどういう人なのか全く分からないので、答えられないと思います。

後、添付ファイルは、過去に一週間で作ったコードの例ということでしょうか?


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

Name: 光冠  ..ぴよぴよ(646ポイント)   Date: 2010/03/29(月) 23:43   No:49891     
Title: Re:シューティングゲームの企画    
Dixq (管理人)さん


>一方http://dixq.net/sakuhin.html#s1これ作る時は2週間強でしたけど、寝ても覚めても夢の中でも作る位作りました。 
>作るのが大好きなので、やらされるのとは作業効率が全く違っていました。
これを二週間強ですか・・すごいですね。

>まず一週間に何時間やるのか家でもやるのかなどが解らないと答えられないんじゃないでしょうか。 
そうですね。大体一週間に6〜10時間ぐらいだと思います。
授業の時間はなにをやったか、なぜそうしたか等発表する時間なのでコードは書きません

>設計などもしなければならないのか、コーディングだけでよいのか
設計というとどういうことでしょう・・・?
自分でなんでもやりたい事を選んで4週間でとりあえず完成させる課題なので
コーディングだけでいいと思います。

>自分はその作品に対してどれ位の制作意欲があるのか(提出したらもういい、というレベルなのか、提出し終わっても満足いくまで制作を続けたい位なのか) 
最近ゲーム作りたい意欲が結構出てきたので終わってからも制作したいですね。
ただし時間があれば、ですが(笑

>自分はどれ位プログラムを理解していて、どれ位経験があるのか
どれ位プログラムを理解していてってちょっと難しいですね・・・。
わからないところは調べればなんとなく分かるぐらいのレベル(?)です。
経験は大学に入ってからプログラミングを始めたので大体2年ぐらいですね。
C/C++/java辺りは普通に使えると思います。

添付ファイルは過去にこの授業で出た一週間の宿題の例です。 編集済み


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

Name: Dixq (管理人) [URL]  ..ウィザード(1,167,046ポイント)   Date: 2010/03/30(火) 00:11   No:49893     
Title: Re:シューティングゲームの企画    
なるほど、では24〜40時間位と言うことですね。
う〜ん、今まで一度もゲームを作ったことが無いとなると、半分以上の時間は学ぶか、試行錯誤の時間になりそうです。
また、ゲームを製作する時間の半分は素材作りになってしまうので、
コーディング時間はトータル時間の1/4といったところでしょうか。
実質コーディングに使える時間が7~8時間程度となると本当に小さな物をまずは設定した方がいいかもしれませんね。
もしくはネットのフリー素材を駆使してもいいかもしれませんが、シューティングの素材って意外に無いんですよね・・。

もうひとつ聞くのを忘れていました。何で作るのでしょうか?
学校独自のライブラリなのか、OpenGLなのかDirectXなのかWINAPIなのかDXライブライなのか・・etc

DXライブラリ程度ならうちに書いてある内容をザッと読んでもらえたら最初の一週間で使い方が解るんじゃないかと思います。
また、うちの龍神録プログラミングの館http://dixq.net/rp/はまさにシューティングの作り方を解説していてソースコードも配布しているのでよければご覧ください。

今ある情報だけで提案するなら
1面だけ作り、ボスはなく、メニューもなく、通常雑魚だけが出てくるようなシューティングでしょうか。
初めてのゲーム制作で、コーディング時間が7〜8時間ならそれでも大丈夫かな?と思うくらいかもしれません。
しかしこれは制作意欲がものすごく左右するので、光冠さんがどの程度やる気があるかで色付けさせてもいいかもしれませんね。




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

Name: 光冠  ..かけだし(1,072ポイント)   Date: 2010/03/30(火) 00:51   No:49896     
Title: Re:シューティングゲームの企画    
Dixq (管理人)さん

素材はフリーの使うか適当に作るのでそんなに時間はかかりません。
とりあえず最初は丸とか三角とかでもいいと思いますし。
試行錯誤と学ぶ時間に半分ぐらいとられる可能性はありますね。
コーディングの時間は実質25時間ぐらいにはなるとおもいます。

DXライブラリでやろうと思ってます。
このサイトなら情報沢山ありますからね^^
ゲームプログラミングの館のほうはとりあえず一通り読みましたし、
龍神録のほうも15ぐらいまでなら読みました。・・といっても去年ぐらいの話ですけどね。
実際に作る時間がなくて今に至ります。

>1面だけ作り、ボスはなく、メニューもなく、通常雑魚だけが出てくるようなシューティングでしょうか。 
それだけになりますか、少々物足りないですねー。
メニューはなくてもいいと思います。
1面つくれれば他の面もそれなりに楽に作れるんじゃないでしょうか?
後ボスも出来たらつけたいですね。ボスがないと終わった気になりませんし。
・・と、書いててやる気出てきました(笑


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

Name: 光冠  ..かけだし(1,133ポイント)   Date: 2010/03/30(火) 01:14   No:49897     
Title: Re:シューティングゲームの企画    
ちょっと素材探してみましたがこのサイトの使えそうですね

http://homepage2.nifty.com/hamcorossam/
お知らせ >>> STG用画像素材【MATERIALS】(試験公開中)から。


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

Name: Dixq (管理人) [URL]  ..ウィザード(1,167,224ポイント)   Date: 2010/03/30(火) 07:57   No:49898     
Title: Re:シューティングゲームの企画    
館をご覧になっているのでしたら、うちの素材を使って頂いても結構ですよ。
時間が無いようでしたら、素材作りには時間を割きたくないですよね。

> ゲームプログラミングの館のほうはとりあえず一通り読みましたし、 
> 龍神録のほうも15ぐらいまでなら読みました。・・といっても去年ぐらいの話ですけどね。 

完全に初めてというわけではないようですね。
それならもう少しよくばれるかも知れませんね。

企画までに時間は無いのでしょうか?
ちょろっと作りかけてみて、どれ位のペースで作れそうか判断してみるのも良いと思います。
仕事でも初めてトライする分野の納期を見積もる時は実際に手を付けてみたり実現可能性検討を行ったりしますから、
企画をする前に少しでもいいから手を付けてみるのも良いのではないかと思います。

例えば
http://dixq.net/g/29.html
これが理解できるなら、敵を作ってみて敵からも弾を出したり、敵の弾のあたり判定を計算したりしてみて(それこそ○や△で)どれ位試行錯誤しそうか判断してみてください。

> 後ボスも出来たらつけたいですね。ボスがないと終わった気になりませんし。 
> ・・と、書いててやる気出てきました(笑

その勢いがあるなら、作れると思いますよ。
モチベーションはものすごく作業効率を左右しますから。
試行錯誤で躓いたとしてもうちの館をご覧いただければおわかりになると思いますし、
二進も三進も行かなくなる危険性が少ない事を考えると欲張った企画でもよさそうです。

自機弾発射、敵とのあたり判定、敵の消滅。
敵の弾発射、敵の弾とのあたり判定、自機の消滅。
これが出来たらボスですかね。
「弾幕」なるものをお好きかどうかわかりませんが、弾幕は凝り始めるとどこまでも凝れますよ。
背景はなんならうちの素材をペタっと張れば5分で出来ると思います。

もし基本システムが全て出来てさらによくばれるならエフェクト関連にも手を出してみるとよいと思います。
一つ一つのモーションや切り替わり画面にエフェクトがあるかないかですごく見栄えや作り込み感が変わってきます。
ファミコンの画面に対してPS3の画面の決定的な違いは何か、それはボタンを押した時に、一瞬で何のエフェクトもなく次の画面に切り替わらないことだと思います。

ボタンを押した瞬間何か綺麗なエフェクトが流れるかもしれませんし、フェードアウトするかも知れませんし、何かしらの反応やエフェクトがあると思います。

STGでも敵の出現時、敵を倒した時など、突然出現したり、突然消えたりするのではなく、何かアクションがあると見栄えもよくなります。
ただし、エフェクト関連は凝り始めるとドンドンコードが複雑になり、時間もかかります。

例えばうちのサイトで公開しているAerobetaPlus
http://www.nicovideo.jp/watch/sm8808750
のメニュー画面、
実は音ゲーシステムより多くのコーディング時間がかかっています。

そしてメニューの骨格となるプログラムに対してエフェクトにかけた時間は8割位ではないかと・・。
なのであのゲームの制作時間の大半はエフェクトであったといっても過言ではないです。
ですので、もしエフェクトに手を出す時は、エフェクト関連の見積もりは少し余分に取ってはいかがでしょうか。

それ位ですかね。
ちなみにもし私なら弾幕に愛を捧げているので、弾幕にコーディング時間の1/3はかけるかもしれません(笑


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

Name: 光冠  ..かけだし(1,502ポイント)   Date: 2010/03/30(火) 10:51   No:49901 解決!     
Title: Re:シューティングゲームの企画    
なんとなくイメージできてきたので解決にします。

本当ならDixqさんの言うように少し手をつけておきたいんですが、
何故か企画を出してからでないと始めてはいけないらしいのでそれは出来ないんです。

>自機弾発射、敵とのあたり判定、敵の消滅。 
>敵の弾発射、敵の弾とのあたり判定、自機の消滅。 
>これが出来たらボスですかね。 
>「弾幕」なるものをお好きかどうかわかりませんが、弾幕は凝り始めるとどこまでも凝れますよ。 
>背景はなんならうちの素材をペタっと張れば5分で出来ると思います。 

この辺りのを分配したり、色々追加してみたりしてなんとか企画書いてみたいと思います。
エフェクトは程々にしておきます(笑
AerobetaPlusのメニュー画面見ましたがかなり手間がかかってるとわかります。
その分、すごく綺麗ですけどね^^
出来れば最後の一週間は弾幕にチャレンジしてみたいですね。

Dixqさん、ありがとうございました!


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



Name: サンタクロース  ..初心者(6,485ポイント)   Date: 2010/03/28(日) 01:35   No:49803       
Title: sin(),cos()の値の上限値    
こんばんわ。新しく作った弾幕が変な挙動を見せたので質問します。
この弾幕はボスを中心に弾が円運動をし、かつそれが拡大していくというものです。
しかし、円の半径が160を越えたあたりから弾が消えてしまうのです。
三角関数には、あまり大きな値を掛けてはいけないのでしょうか



void boss_shot_bulletH012(){
#define TM012 600
    int i,k,t=boss_shot.cnt%TM012,t2=boss_shot.cnt;
    double angle;
    
    if(t%200==0){
        angle=bossatan2();//自機とボスとの成す角
        for(i=0;i<60;i++){
            if((k=search_boss_shot())!=-1){
                boss_shot.bullet[k].col   = 4;//弾の色
                boss_shot.bullet[k].x     = 0;//座標
                boss_shot.bullet[k].y     = 0;
                boss_shot.bullet[k].knd   = 3;//弾の種類
                boss_shot.bullet[k].angle = 0;//角度
                boss_shot.bullet[k].flag  = 1;
                boss_shot.bullet[k].cnt   = 0;
                boss_shot.bullet[k].spd   = 0;//スピード
                se_flag[0]=1;
            }
        }
    }
    for(i=0;i<BOSS_BULLET_MAX;i++){
        if(boss_shot.bullet[i].flag>0){
                boss_shot.bullet[i].x     = boss.x+cos(PI2/60*i+boss_shot.bullet[i].cnt)*boss_shot.bullet[i].cnt;
                boss_shot.bullet[i].y     = boss.y+sin(PI2/60*i+boss_shot.bullet[i].cnt)*boss_shot.bullet[i].cnt;
                boss_shot.bullet[i].angle = bossatan3(i,boss.x,boss.y)+PI;
                    }
    }
}
 編集済み


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


Name: 紅葉  ..中級者(12,456ポイント)   Date: 2010/03/28(日) 05:01   No:49808     
Title: Re:sin(),cos()の値の上限値    
ソースを詳しく見ていないので間違えておりましたらすみません。

座標から角度を求めているようなのですがこれで意図したこととあっておりますか?
角度を増やしてcosやsinを使って位置を求めるのでしたらわかるのですが・・・。

また60で割っているのですが180ではないのでしょうか?
その他にもboss_shot.bullet[i].cntが0な気がするのですが・・・。


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

Name: 紅葉  ..中級者(12,688ポイント)   Date: 2010/03/28(日) 05:09   No:49809     
Title: Re:sin(),cos()の値の上限値    
以前、同じようなことを行ったソースを一部改編したものです。
動かなかったらすみません。

このソースではどっちの方向にどのよう半径(Play.speed)で動くかというものです。

1、0〜360度増えていく
2、Play.speedが一定なら円運動をする。
  今回は増えているので表示位置からどんどん離れて円運動をする。

// 開始時に1度だけ処理
void    Init(){
    Play.rot = 0;
    Play.speed = 0;
}

// 毎フレーム処理 
void    Loop(){

    Play.rot++;
    if(Play.rot > 360) Play.rot -= 360;

    float rot = float(Play.rot/180.0f*M_PI);    // 0〜360です。 

    Play.speed += 0.01f;

    Pos.x = cos(rot) * Play.speed; 
    Pos.y = sin(rot) * Play.speed; 
}


宜しければ参考にして下さい。


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

Name: たいちう  ..熟練のプログラマー(63,865ポイント)   Date: 2010/03/28(日) 21:25   No:49838     
Title: Re:sin(),cos()の値の上限値    
> しかし、円の半径が160を越えたあたりから弾が消えてしまうのです。
> 三角関数には、あまり大きな値を掛けてはいけないのでしょうか

憶測はやめましょう。

「弾が消えてしまう」

その時の弾の座標は何だろうか?

どの計算で、そのような意図しない座標になったのか?

計算のどの要素(三角関数の種類とか、角度とか、半径とか)が
おかしかったから、そのような値になったのか?

(半径がおかしかったとして)
どの計算で、そのような意図しない半径になったのか?

と、1つずつ確認し、原因を追及していきます。
ソースコードを確認するのも良いですが、慣れないうちは勘違いも多いので、
OutputDebugStringやprintfDxで、デバッグ出力に数値を表示させる方が確実です。


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

Name: Dixq (管理人) [URL]  ..ウィザード(1,166,148ポイント)   Date: 2010/03/28(日) 22:08   No:49841     
Title: Re:sin(),cos()の値の上限値    
> boss.x+cos(PI2/60*i+boss_shot.bullet[i].cnt)*boss_shot.bullet[i].cnt

cosに渡す値に何故ラジアンではない物を渡すのでしょうか?
boss_shot.bullet[i].cntはただ1ずつ加算している整数です。

また、iをかける理由は何ですか?
弾はあいている番号を探してフラグを立て、計算するものなので、
iが連続するとは限りません。

適当な計算式で何かいい弾幕になるか考えるのではなく、事前に自分が作りたい弾幕を思い描き、
それが実現出来る計算式を考えだし、実装する方が良いと思います。

試行錯誤する事はよくありますが、「適当に計算式を作る」と言うのとは少し違うかなと。

で、何故消えているかですが、この弾幕は綺麗に少しずつ回転しているのではなく、
ものすごい勢いで回転しているのです。
回転している幅が1ラジアンずつである為、視覚的に少しずつ回転しているように見えますが。
1ラジアンは57.29578...°の事です。
ですから、大体1秒に10回転してます。

よって、弾がボスの上を通った時に「画面外」に一度出るので消えているのだと思います。

試しに弾幕の軌道計算関数内(boss_shot_calc関数)の「画面外に出るとフラグを落とす」部分のy範囲を広げてみてください。
弾は消え無くなると思います。


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

Name: サンタクロース  ..初心者(6,787ポイント)   Date: 2010/03/30(火) 00:11   No:49894 解決!     
Title: Re:sin(),cos()の値の上限値    
回答ありがとうございます。
結果は無事にうまくいきました
> しかし、円の半径が160を越えたあたりから弾が消えてしまうのです。 
> 三角関数には、あまり大きな値を掛けてはいけないのでしょうか 

プログラミングをするためにこの腐った考えを排除出来るよう努力していきたいと思います。

> boss.x+cos(PI2/60*i+boss_shot.bullet[i].cnt)*boss_shot.bullet[i].cnt 
>cosに渡す値に何故ラジアンではない物を渡すのでしょうか? 
>boss_shot.bullet[i].cntはただ1ずつ加算している整数です。 
>また、iをかける理由は何ですか? 
>弾はあいている番号を探してフラグを立て、計算するものなので、 
>iが連続するとは限りません。

こんな基礎にも気づけないとは自分は龍神録から何も学べていませんね

>適当な計算式で何かいい弾幕になるか考えるのではなく、事前に自分が作りたい弾幕を思い描き、 
>それが実現出来る計算式を考えだし、実装する方が良いと思います。 

ただこれだけは違います。自分は一日中弾幕のことを考えているような変人で弾幕を頭でまとめた上でやっております。
でもその結果がこれなら自分はプログラマにはなれないのでしょうかね。


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



Name: リペリオン  ..ぴよぴよ(344ポイント)   Date: 2010/03/29(月) 01:00   No:49843       
Title: 超初歩的なのですが・・・    
初めまして。

今、卒業するにあたっての課題研究でRPGを作ろうと思って、こちらのサイトで勉強させていただいています。

テスト的なプログラムで練習し、自信が付いてきたので本格的にRPGを作ろうと思ったのですが
ビルドすると

------ ビルド開始: プロジェクト: RPG, 構成: Debug Win32 ------
リンクしています...
LINK : fatal error LNK1104: ファイル 'DxLib_d.lib' を開くことができません。
ビルドログは "file://c:\Users\---\Desktop\RPG\RPG\Debug\BuildLog.htm" に保存されました。
RPG - エラー 1、警告 0
========== ビルド: 0 正常終了、1 失敗、0 更新不要、0 スキップ ==========

と出てエラーになってしまいます。
本当に初歩的で申し訳無いのですが、ご回答よろしくお願いします。


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


Name: Ma  ..熟練のプログラマー(63,852ポイント)   Date: 2010/03/29(月) 01:37   No:49844     
Title: Re:超初歩的なのですが・・・    
もう一度公式のページにしかがって、プロジェクトをもう一度セットアップしてください。
そのまんまですが、エラーメッセージはライブラリへのリンクができていないとあります。

特にオプションからリンクをちゃんとしたか確認してください。 編集済み


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

Name: Dixq (管理人) [URL]  ..ウィザード(1,166,214ポイント)   Date: 2010/03/29(月) 07:41   No:49845     
Title: Re:超初歩的なのですが・・・    
DXライブラリの設定がきちんとできていればそのメッセージはでなくなります。
もう一度よく読んで設定を見直して下さい。
http://homepage2.nifty.com/natupaji/DxLib/dxuse.html


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

Name: softya [URL]  ..ハッカー(141,061ポイント)   Date: 2010/03/29(月) 10:32   No:49853     
Title: Re:超初歩的なのですが・・・    
老婆心ながら、RPGを作る時に必要なものの検討が本当に出来ているか不安を感じたので書き込ませてもらいます。

[プログラム作業]ざっと考えただけでも次のものが必要です。
・フィールド処理(移動・エンカウント・街人表示・イベント処理など)
→マップを作成するツールも必要。自分で作った方が後々都合が良いので自分で作るのをお薦め。
・バトル処理(バトル突入エフェクト、メニュー、攻撃処理、魔法処理、敵の思考ルーチン、経験値処理、アイテム処理)。
・成長システムの処理。
・買い物のお店処理。
・シナリオを実行するスクリプト処理。
・メニュー(アイテムや装備)やセーブロードなど。
・サウンド処理

[プログラミング以外の作業]
・シナリオ。
・シナリオを実行するスクリプトコード。
・フィールド背景データ。
・主人公・仲間や町人などのフィールド・キャラクタデータ
・戦闘背景データ。
・戦闘キャラクタデータ。
・音楽や効果音データ。
・アイテムや主人公、仲間、敵キャラなどのデータ、パラメータ。 

DXライブラリでRPGとして参考になるのは、
Dixq (管理人)さんの「RPGのサンプル」
http://dixq.net/sm/d10.html
DRAGMENTS LOARのソースコード
http://rpg.nengu.jp/game/dl/
が参考になると思います。
あとWin32APIですが、こちらもシンプルでRPGのプログラムの構成要素の参考になるでしょう。
http://www.sm.rim.or.jp/~shishido/rpgp.html

分からないことがあったら聞いてください。


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

Name: リペリオン  ..ぴよぴよ(382ポイント)   Date: 2010/03/29(月) 21:26   No:49888 解決!     
Title: Re:超初歩的なのですが・・・    
見直して順番にやっていったらできました。

もっとよく見直すべきでしたね。
ご指導ありがとうございます。


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



Name: serenn  ..ぴよぴよ(115ポイント)   Date: 2010/03/29(月) 15:34   No:49874       
Title: 無題    
すみません。 
一応は出来るようになったのですがCtrl+F5をしてからの 
実行にかかる時間が20秒くらいになってしまいました。 
リビルドしても駄目でした。 

プロジェクトと同じフォルダにソースがあると一瞬なのですが 
これは何故なのでしょうか?


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


Name: セレン  ..ぴよぴよ(938ポイント)   Date: 2010/03/29(月) 15:36   No:49875     
Title: Re:無題    
間違えて無題で投稿してしまいました。
タイトルはDXライブラリで更新があった場合です。

先日こちらで質問させて頂いたものです。
http://www.play21.jp/board/formz.cgi?action=res&resno=49800&page=&id=dixq&rln=49873

解決と出させて頂いたのですが問題が発生してしまった為
再度質問させて頂きました。


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

Name: softya [URL]  ..ハッカー(141,847ポイント)   Date: 2010/03/29(月) 17:31   No:49878     
Title: Re:無題    
時間がかかっているのは、どの部分でしょうか?
出力ウィンドウの表示される情報を見ていればだいたい分かるはずですので。
(1)毎回直してもいないコードがコンパイルされている。
(2)リンクが大半の時間である。
(3)それ以外で時間がかかっている(かかっているものの名称)


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

Name: セレン  ..かけだし(1,018ポイント)   Date: 2010/03/29(月) 19:48   No:49886     
Title: Re:無題    
softya様

コンパイルは直ぐ終わりますが
画面が表示された後、描画にものすごい時間がかかっております。
3Dを使っているからでしょうか?
※但しライブラリが同じフォルダにある時はすぐ表示されます。


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

Name: softya [URL]  ..ハッカー(142,021ポイント)   Date: 2010/03/29(月) 20:40   No:49887     
Title: Re:無題    
DXLIBのバージョンによって動作が異なることがあります。
同じフォルダと別フォルダのDXLIBのバージョンは同じですか?


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



Name: Konno Toshio  ..ぴよぴよ(207ポイント)   Date: 2010/03/29(月) 13:47   No:49870       
Title: 入門編の初めの実行画面が表示されません。    
 
DXライブラリを手に入れ、(全てはココから)の記述に従って、各種の設定、サンプルプログラムの貼り付けを行い、「DxLib」を実行しましたが、下記のようなエラーメッセージが出て画面が表示されません。

 エラーメッセージ 「C:\users\owner\desktop\dxlib_VC\サンプルプログラム実行用フォルダ\dxlib.h(1):インクルードファイル多すぎます:深さ = 1024  」

 使用機器:NEC VALUESTAR ,メモリ4G
  O  S : Vista
  DXライブラリ:VisualC++用(Ver3.02)
  VisualC++2008 Express Edition(マイクロソフトからDownload)

   どこに問題があるか御教示ねがいます。

 


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


Name: たいちう  ..熟練のプログラマー(63,901ポイント)   Date: 2010/03/29(月) 14:01   No:49871     
Title: Re:入門編の初めの実行画面が表示されません。    
エラーメッセージからすると、ファイル「dxlib.h」に、#include "dxlib.h"と
書いてしまったのでしょう。
あなたが編集すべきだったのはtest.cppです。


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

Name: Konno Toshio  ..ぴよぴよ(249ポイント)   Date: 2010/03/29(月) 19:35   No:49885 解決!     
Title: Re:入門編の初めの実行画面が表示されません。    
たいちう様
 早速のご回答ありがとうございました。
 test.cppにソースを貼り付けすることにより画面が表示されました。


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



Name: shin  ..かけだし(1,240ポイント)   Date: 2010/03/29(月) 17:22   No:49876       
Title: c++のクラスメンバのオブジェクトについて    
VC++2008で、boostの乱数を使いやすくするクラスを作成しています。
作成したクラスのメンバは乱数発生に必要なオブジェクトのポインタを持ち、初期化の際に領域を
確保するようになっています。
領域の確保と乱数発生に必要なオブジェクトの初期化まではうまくいくのですが、乱数を取得するメソッドに
エラーが発生します。

error C2064: 0 引数を取り込む関数には評価されません。

というメッセージです。
同じ名前の関数や変数が存在するときに発生する事が多いようですが、確認した限りでは大丈夫でした。

unsigned long int mt_rand(){ return *mt_int_rand(); }

の部分でエラーとなります。
お手数をおかけしますが、分かる方、お願いいたします。

#include<boost/random.hpp>

using namespace std;

namespace My_Function{

    namespace My_Random{
        /////////////////////////// My_Random 乱数に関する関数およびクラス ////////////////////////////
        class my_rand{

            unsigned long int seed;

            boost::mt19937 *gen;
            boost::uniform_int<> *dst;
            boost::variate_generator< boost::mt19937&, boost::uniform_int<> > *mt_int_rand;
            
        public:        

            my_rand( unsigned long s=0 ){ seed=s; gen=NULL; dst=NULL; mt_int_rand=NULL; }
            //コンストラクタ。seedを設定する。seedはデフォルトで0に設定される。また、ポインタにNULLをセットする。

            ~my_rand(){ delete gen; delete dst; delete mt_int_rand; }
            //デストラクタ。領域を解放する。

            void seed_config( unsigned long int s = 0 ){ seed = s; }
            //乱数のseedを設定する

            unsigned long seed_return(){ return seed; }
            //seedを返す

        /////////////////////////// C言語の標準ライブラリを使用した乱数発生 ///////////////////
            void seed_set_c(){ srand( seed ); }
            //c言語のrand()関数のseedをセットする

            long int rand_signed_c(){ return rand(); }    
            //c言語の標準ライブラリの乱数を返す

            double rand_0_1_c(){ return rand()/(RAND_MAX+1.0); }
            //c言語の標準ライブラリを使用して0-1のdouble型小数を返す

        /////////////////////////// boostのメルセンヌ・ツイスタを使用した乱数発生 ////////////////////
            void mt_int_initialize( unsigned long min_number, unsigned long max_number );
            //メルセンヌ・ツイスタの領域確保を含む初期化

            unsigned long int mt_rand(){ return *mt_int_rand(); }
            //乱数を返す
        };


    }
}





////////////////////////////////// My_Randomの実装内容 //////////////////////////////

void My_Function::My_Random::my_rand::mt_int_initialize( unsigned long min_number, unsigned long max_number )
{
    //メルセンヌ・ツイスタの領域確保を含む初期化。seedと最小値、最大値を設定する。

    gen = new boost::mt19937( seed );
    dst = new boost::uniform_int<>( min_number, max_number );
    mt_int_rand = new boost::variate_generator< boost::mt19937&, boost::uniform_int<> >( *gen, *dst );

}


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


Name: softya [URL]  ..ハッカー(141,776ポイント)   Date: 2010/03/29(月) 17:28   No:49877     
Title: Re:c++のクラスメンバのオブジェクトについて    
マルチポストですよね?
http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1338719778
まず、規約と注意事項をよくお読みください。→ http://dixq.net/board/board.html
その上で適切な対処をお願いします。


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

Name: shin  ..かけだし(1,273ポイント)   Date: 2010/03/29(月) 17:33   No:49879     
Title: Re:c++のクラスメンバのオブジェクトについて    
大変失礼しました。
リンク先の質問は削除しております。
引き続き、よろしくお願いいたします。


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

Name: たかぎ [URL]  ..ハッカー(172,181ポイント)   Date: 2010/03/29(月) 17:43   No:49880     
Title: Re:c++のクラスメンバのオブジェクトについて    
> リンク先の質問は削除しております。 

そういう問題ではないのでは?


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

Name: たいちう  ..熟練のプログラマー(63,932ポイント)   Date: 2010/03/29(月) 17:44   No:49881     
Title: Re:c++のクラスメンバのオブジェクトについて    
> 大変失礼しました。
> リンク先の質問は削除しております。

リンク先のルールは知りませんが、
あなたの質問を見た人が30分かけて回答を書いたとして、
さぁ投稿しようとすると質問が削除されているわけですよね。

このような行為も失礼だと思いますが。


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

Name: dic  ..熟練のプログラマー(58,429ポイント)   Date: 2010/03/29(月) 18:12   No:49884     
Title: Re:c++のクラスメンバのオブジェクトについて    
根本的に無理では?


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



Name: K.MURAKAMI  ..かけだし(1,480ポイント)   Date: 2010/03/29(月) 13:23   No:49868       
Title: DXライブラリって…    
DXライブラリって、Win32APIと同じなんですか?
もしそうなら、Win32APIってC言語でできているんですか?

プログラミングには関係ありませんが、
知識として知っておきたいので質問します。


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


Name: softya [URL]  ..ハッカー(141,685ポイント)   Date: 2010/03/29(月) 14:13   No:49872     
Title: Re:DXライブラリって…    
>DXライブラリって、 Win32APIと同じなんですか?

Win32APIは、マイクロソフト側から提供されているライブラリで中身はOSと密接に関係していて、アプリとWindowsOSとの間を取り持つ役割を持ちます。
それに対して、DXライブラリはWin32APIとDirectXの2つのAPIを直接扱わない緩衝材の役割をするライブラリです。2つのAPIの難しいところを隠蔽して扱い易くしてくれているんですね。
それとDirectXはゲームや表現力のあるグラフィックなどに特化した特殊なAPIでWin32APIとは独立して存在します。WindowsVistaや7のGUIであるAEROはDirectXを使って作られていますね。


>もしそうなら、Win32APIってC言語でできているんですか? 

Win32APIは、インターフェイス上はC言語ですね。作られている言語がCなのかアセンブラなのかは公表されていませんし、色々と混じっていると思います。大半はC言語だと思うんですけどね。ちなみにDirectXは、C++でインターフェイスが提供されていますよ。


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

Name: dic  ..熟練のプログラマー(58,417ポイント)   Date: 2010/03/29(月) 17:56   No:49882     
Title: Re:DXライブラリって…    
COM関係の知識もあるといいかもしれないですね

COM
http://e-words.jp/w/COM.html


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

Name: softya [URL]  ..ハッカー(141,970ポイント)   Date: 2010/03/29(月) 18:12   No:49883     
Title: Re:DXライブラリって…    
dicさん、そのリンクでは分かり辛いかと。
wikipediaを参照してください。
http://ja.wikipedia.org/wiki/Component_Object_Model
こっちは、こっちで説明が難しいんですけどね。

WindowsAPIの中にもCOM実装されているコンポーネントが幾つか存在ます。
http://ja.wikipedia.org/wiki/Windows_API

あっ、COMコンポーネントを含めるとC++で作る必要がありますね。と言う事でC++の知識がないと扱えないWindowsAPIもあります。 編集済み


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



Name: セレン  ..ぴよぴよ(684ポイント)   Date: 2010/03/27(土) 23:03   No:49800       
Title: DXライブラリで更新があった場合    
DXライブラリを使ってゲームを作っているのですが
ライブラリが古いらしく新しいVerにしたいです。

但し新しいVerにするということはVisualStadio等でソースを読み込み直さなければならないですよね?
簡単に最新Verに修整する方法はないでしょうか?

またDXライブラリを回答するとLibファイルなどが大量にあるのですが
これだけを特定のフォルダに移動したり(.slnとは違う場所に置く)まとめたりすることは出来ないのでしょうか?


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


Name: Dixq (管理人) [URL]  ..ウィザード(1,164,493ポイント)   Date: 2010/03/27(土) 23:12   No:49801     
Title: Re:DXライブラリで更新があった場合    
基本的にDXライブラリは下位互換性があるので、古いコードもそのまま利用できるはずです。
非推奨の関数になったりすることはありますが、コンパイルエラーになるような事はありません。

ところで、

> これだけを特定のフォルダに移動したり(.slnとは違う場所に置く)まとめたりすることは出来ないのでしょうか?

普通libファイルはプロジェクトと同じ所に置かないです。

#include "○○"

#include <○○>
と2種類書き方がありますよね。
現在は上の状態でしょうか?
下で呼び出せばどこからでも呼び出せますよね。
DXライブラリの初期設定については本家に詳しく書いてあるのでそちらご覧ください。

http://homepage2.nifty.com/natupaji/DxLib/dxuse.html


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

Name: セレン  ..ぴよぴよ(830ポイント)   Date: 2010/03/28(日) 04:55   No:49807     
Title: Re:DXライブラリで更新があった場合    
Dixq様

回答ありがとうございます。
#include "DxLib.h" を #include <DxLib.h> に変えた所
fatal error C1083: include ファイルを開けません。'DxLib.h': No such file or directory
とエラーが帰ってきてしまいます。

DxLib.hの
#pragma comment( lib, "DxLib.lib"        )            //  DXライブラリ使用指定
と書いてあるところを全て修正しないといけないのでしょうか?        


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

Name: tkmakwins15  ..比類無きプログラマー(99,609ポイント)   Date: 2010/03/28(日) 08:18   No:49812     
Title: Re:DXライブラリで更新があった場合    
メニュー: ツール → オプション から、プロジェクト及びソリューション → VC++ ディレクトリを選択し、
インクルードファイルとライブラリファイルのところにDXライブラリのあるフォルダを追加します。

これで、

#include<DxLib.h>
      or
#include"DxLib.h"

と読み込めるはずです。


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

Name: Dixq (管理人) [URL]  ..ウィザード(1,164,689ポイント)   Date: 2010/03/28(日) 09:53   No:49814     
Title: Re:DXライブラリで更新があった場合    
「DXライブラリの初期設定については本家に詳しく書いてあるのでそちらご覧ください」
と書いたリンク先ご覧になりましたでしょうか?
そこに詳しく書いてあります。


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

Name: セレン  ..ぴよぴよ(850ポイント)   Date: 2010/03/29(月) 10:11   No:49849 解決!     
Title: Re:DXライブラリで更新があった場合    
回答ありがとうございます。
すみません・・・見たのですが理解できなくて・・・。
少し挑戦してみますね。

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


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

Name: セレン  ..ぴよぴよ(771ポイント)   Date: 2010/03/29(月) 10:27   No:49852     
Title: Re:DXライブラリで更新があった場合    
すみません。
一応は出来るようになったのですがCtrl+F5をしてからの
実行にかかる時間が20秒くらいになってしまいました。
リビルドしても駄目でした。

プロジェクトと同じフォルダにソースがあると一瞬なのですが
これは何故なのでしょうか?


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

Name: セレン  ..ぴよぴよ(789ポイント)   Date: 2010/03/29(月) 15:34   No:49873     
Title: Re:DXライブラリで更新があった場合    
すみません。新しく質問させて頂きます。

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



Name: bluebirdX  ..ぴよぴよ(111ポイント)   Date: 2010/03/29(月) 13:07   No:49865       
Title: C言語って    
はじめまして、青い鳥です。
僕は、C言語っていうか、ネットすら初心者なのですが、プログラムを作るのに興味があったので、C言語を始めたいと思ったのですが、どうして良いかわかりません。
どうか、1から教えるつもりでC言語を伝授していただけませんか?
ちなみに、Microsoft Visual C++ 2008 Express Editionはもっています。


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


Name: ひよこ  ..比類無きプログラマー(80,870ポイント)   Date: 2010/03/29(月) 13:11   No:49866     
Title: Re:C言語って    
入門サイトへ行ったほうがいいと思います。
「C言語 入門」とyahooとかで検索すればいいと思います。


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

Name: softya [URL]  ..ハッカー(141,337ポイント)   Date: 2010/03/29(月) 13:22   No:49867     
Title: Re:C言語って    
幾つかサイトを紹介しますので、自分にあったモノを見つけてください。

「猫でもわかるC言語プログラミングのサイト」
http://homepage2.nifty.com/c_lang/
「苦しんで覚えるC言語(苦C)」
http://homepage3.nifty.com/mmgames/c_guide/
「C言語入門」
http://www5c.biglobe.ne.jp/~ecb/c/c00.html
「C言語編」
http://www.geocities.jp/ky_webid/c/index.html

幾つかサイトをじっくり読んだり試したりしても分からないことがあれば質問してくださいね。



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

Name: 青い鳥  ..ぴよぴよ(17ポイント)   Date: 2010/03/29(月) 13:35   No:49869     
Title: Re:C言語って    
ありがとうございます。
いろんなサイトを訪問してみます。
これからもよろしくお願いします。


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



Name: Ma  ..熟練のプログラマー(64,652ポイント)   Date: 2010/03/29(月) 11:01   No:49859       
Title: 物理メモリの使用率を取得    
いつもおせわになってます。
環境:Visual C++ 2008 Express です。
(DXライブラリ使っています。)

http://blog.goo.ne.jp/masaki_goo_2006/e/7a33fc63935919da2fd3f3bec37f8695

CPUと物理メモリの使用率を取得しようとおもっていたのですが、CPUはできたものの物理メモリがよくわかりません。

自分なりに「メモリ 使用率 取得 C++」のようなキーワードで見つけたのが↑のURLなんですが、
取得できた値は以下のとおりでした。

(1)ページ・フォールト数(ページ フォルト)
(2)現在ワーキングセット(メモリ使用量)
(3)最大ワーキングセット(最大メモリ使用量)
(4)現在ページプールの使用サイズ(ページ プール)
(5)最大ページプールの使用サイズ
(6)現在非ページプールの使用サイズ(非ページ プール)
(7)最大非ページプールの使用サイズ
(8)現在ページングファイルの使用サイズ(仮想メモリ サイズ)
(9)最大ページングファイルの使用サイズ


これって、結局この方法では物理メモリの使用率は算出できないということなんでしょか・・・?
ほしい値は、タスクマネージャーで表示されるグラフに使われるような物理メモリの使用率です。

つまり、質問内容は
物理メモリの使用率の取得の仕方を教えてください。
です。

よろしくお願いします。


//以下、私が考え見た推測なんですが、失敗したので蛇足です。


XPのタスクマネージャーでは、7で物理メモリの使用量とかかれている場所と同じところに「ページファイルの使用量」と書いてあったので、
ページファイルの使用率 = 物理メモリの使用率
なのかな。と勝手に想像してみて
物理メモリの使用率 = (4)現在ページプールの使用サイズ(ページ プール) / (5)最大ページプールの使用サイズ
・・・?
とおもって、チェックしてみたらタスクマネージャーとぜんぜん違う値が出ました。 編集済み


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


Name: tk  ..入門者(3,722ポイント)   Date: 2010/03/29(月) 12:04   No:49861     
Title: Re:物理メモリの使用率を取得    
APIにGlobalMemoryStatusという関数があったと思います。

使い方はうろ覚えなんで申し訳ないんですが、
GlobalMemoryStatusにLPMEMORYSTATUS構造体を渡すと各情報が構造体に得られますので、
その中の「dwTotalXXXXXX」から「dwAvailXXXXXX」を引けば、使用量が求められます。
(「XXXXXX」はスペルが思い出せません・・・)

間違っていたらすいません。


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

Name: Ma  ..熟練のプログラマー(65,369ポイント)   Date: 2010/03/29(月) 12:35   No:49863     
Title: Re:物理メモリの使用率を取得    
**
この問題は自己解決しました。
このレスは読まないで、次のレスを読んでください。
**


MSDNで
>4GB を超えるメインメモリを実装したコンピュータでは、GlobalMemoryStatus 関数は誤った情報を返す可能性があります
とあったので、
GlobalMemoryStatusEx
を使おうと思うのですが、

対応情報
  Windows NT/2000:Windows 2000
  Windows 95/98:対応していません
  Windows CE:対応していません
  ヘッダーファイル:winbase.h 内で宣言
  インポートライブラリ:kernel32.lib を使用


とあって、XP、Vista,7 についてはわからず。。。。


ともかく試してみると間違った値がかえってきました。

    MEMORYSTATUSEX memBuf;
    GlobalMemoryStatusEx(&memBuf);
    #define CHANGE_TO_MEG(VAL) (VAL/(DWORDLONG)1024/(DWORDLONG)1024)
    printfDx("MEM %d  %d\n",CHANGE_TO_MEG(memBuf.ullAvailPhys),CHANGE_TO_MEG(memBuf.ullTotalPhys));
    printfDx("TOTAL AVAI %d\n",memBuf.ullAvailPhys);

memBuf.ullTotalPhys は、6GB前後、memBuf.ullAvailPhys3GB前後
になる予定だったんですが。。。(タスクマネージャーより。)

オーバーフローなのか、、、正常な値が帰ってきませんでした。

-858993460 3276
TOTAL AVAI -858993460


↑結果こんなかんじでした。 編集済み


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

Name: Ma  ..熟練のプログラマー(65,570ポイント)   Date: 2010/03/29(月) 12:46   No:49864 解決!     
Title: Re:物理メモリの使用率を取得    
>tkさん
ありがとうございます。
なんで、これがヒットしなかったのかなぞです。。。。
単にメモリと検索せずに、物理メモリと検索すればよかったのでしょかねw


ともかく、
    MEMORYSTATUSEX memBuf = { sizeof(MEMORYSTATUSEX) };
    GlobalMemoryStatusEx( &memBuf );

    #define CHANGE_TO_MEG(VAL) (VAL/1024/1024)
    printfDx("MEM:%d  %d  %d\n",memoryFree,(int)CHANGE_TO_MEG(memBuf.ullAvailPhys),(int)CHANGE_TO_MEG(memBuf.ullTotalPhys));

上記の方法でうまく成功できました。
ありがとうございました。 編集済み


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



Name: K.MURAKAMI  ..かけだし(1,428ポイント)   Date: 2010/03/29(月) 10:21   No:49851       
Title: 入力画面について質問です    
DXライブラリでは、画像のように、クリックした部分に書き込むことはできますか?
もしできるのなら、やりかたを教えてください。


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


Name: kazuoni [URL]  ..ハッカー(141,395ポイント)   Date: 2010/03/29(月) 10:51   No:49857     
Title: Re:入力画面について質問です    
現行スレをお読みください。

名前の入力欄
http://www.play21.jp/board/formz.cgi?action=res&resno=49850&page=&id=dixq&rln=49856


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

Name: Ma  ..熟練のプログラマー(64,711ポイント)   Date: 2010/03/29(月) 11:05   No:49860     
Title: Re:入力画面について質問です    
当たり判定やら、ボックスの描画やら、いろいろやらないといけないので
PHPなどのフォーム製作と比べると多少面倒ではあるものの、作れます。


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



Name: かなで  ..ぴよぴよ(718ポイント)   Date: 2010/03/29(月) 10:15   No:49850       
Title: 名前の入力欄    
DXライブラリを使って名前の入力欄を作りたいです。
イメージとしてはネットでアカウントを取る時に自分の名前を入力するような画面です。
※|が点滅しているような感じです。

こういうのを作る場合、全てのキー情報について書かなければならないのでしょうか?
例えばSキーが押されたらSと表示など・・・

ただこの場合感じは使えないですしひらがなの場合も50通り書かないと駄目ですよね?
こういった機能の実装は難しいのでしょうか?


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


Name: kazuoni [URL]  ..ハッカー(141,358ポイント)   Date: 2010/03/29(月) 10:47   No:49856     
Title: Re:名前の入力欄    
DXライブラリ関数で実現するなら本家の「日本語入力関連関数」
の項目がそれに当たるかと思います。
ttp://homepage2.nifty.com/natupaji/DxLib/index.html


WINAPIで実現する方法もあります。
「WINAPI エディットボックスコントロール」
と検索をかければすぐ出てきます。
が、DXライブラリとの相性は余り良くないので、
考えて使わなければいけませんが・・・。

もしくは、完全に自作かですね。
 編集済み


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



Name: あきら  ..初心者(7,922ポイント)   Date: 2010/03/28(日) 13:15   No:49821       
Title: sizeof演算子について    
はじめまして。どうしてもよくわからないので教えてください。
sizeof演算子は変数のサイズを調べるとありますが、なぜ4や8になるのかわかりません。

#include <stdio.h>
int    main(void)
{
    int i1 = 1, i2 = 1000000000;         // 0が9個
    double d1 = 1, d2 = 999999.999999;   // 9が6+6個
    printf("i1のサイズ %d, i2のサイズ %d \n",
        sizeof(i1), sizeof(i2));
    printf("d1のサイズ %d, d2のサイズ %d \n",
        sizeof(d1), sizeof(d2));
    return 0;
}

上を実行すると
i1のサイズが4、i2が4、
d1のサイズが8、d2が8
になるのですが、なぜそうなるのかわかりません。文字数のサイズかと思ったのですが違うようですし、変数のサイズとはどういうものなんでしょうか?



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


Name: dic  ..熟練のプログラマー(58,372ポイント)   Date: 2010/03/28(日) 13:28   No:49822     
Title: Re:sizeof演算子について    
使用するメモリの容量です
単位はバイトです


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

Name: box  ..ハッカー(151,291ポイント)   Date: 2010/03/28(日) 14:17   No:49824     
Title: Re:sizeof演算子について    
数値の桁数とは、全く無関係です。

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

Name: あきら  ..初心者(7,994ポイント)   Date: 2010/03/29(月) 09:25   No:49846     
Title: Re:sizeof演算子について    
ありがとうございます。
使用するメモリの容量ということは、型によって事前に決まっているのでしょうか?


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

Name: tk  ..入門者(3,582ポイント)   Date: 2010/03/29(月) 10:10   No:49848     
Title: Re:sizeof演算子について    
> 使用するメモリの容量ということは、型によって事前に決まっているのでしょうか?
型による、メモリ使用量というのは決まっています。

http://www.geocities.jp/ky_webid/c/010.html
ここをみて少し勉強してみてください。

勉強した上で、あらためてsizeofでサイズをはかると理解できるはずです。


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

Name: あきら  ..初心者(8,075ポイント)   Date: 2010/03/29(月) 10:44   No:49855 解決!     
Title: Re:sizeof演算子について    
ありがとうございます!
初めて見る内容だったので(省かれていたようです)、これなら理解できそうです。助かりました。
また何かあったらよろしくお願いします。


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



Name:  ..ぴよぴよ(870ポイント)   Date: 2010/03/29(月) 10:10   No:49847       
Title: DXライブラリでモノクロ表示    
DXライブラリで読み込んだ画像(bmpやpng、jpeg等)モノクロ表示(白か黒)をしたいのですがこの様な事は可能なのでしょうか?
又、ENTERキーを押したらそのモノクロ画像を640*480でbmpやjpeg等に保存したいのですが
この様なことも可能なのでしょうか?

又、可能な場合どの様に行えばよいのでしょうか?




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


Name: kazuoni [URL]  ..ハッカー(141,204ポイント)   Date: 2010/03/29(月) 10:37   No:49854     
Title: Re:DXライブラリでモノクロ表示    
> モノクロ表示
過去ログにあるので、以下を参考に。(前半部分)
http://www.play21.jp/board/nextz.cgi?id=dixq&lognum=151&dispnum=49293

> 画像をbmpやjpeg等に保存
DXライブラリでは.bmpで保存できる関数SaveDrawScreenが
用意されています。
http://homepage2.nifty.com/natupaji/DxLib/function/dxfunc_other.html#R15N11



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



Name: nayuta  ..ぴよぴよ(138ポイント)   Date: 2010/03/28(日) 13:10   No:49820       
Title: 初投稿です。    
今こちらのサイトで勉強させてもらってます。

シューティングの基本という部分で
以下のような部分があります。

        else if( Key[ KEY_INPUT_RETURN ]  == 1 ){//5カウント以上たっていたら
                        counter=0;                       //カウンターを戻す
                        for(i=0;i<10;i++){             
                                if(tama[i].flag==0){     //発射していない玉を探し、
                                        tama[i].flag=1;  //発射フラグを立てる
                                        break;
                                }
                        }
                }

この部分で、自分はどうしても1回リターンを押すとすべての玉が発射フラグが立ち、
発射されるように感じてしまうのですが、実行すると違いますよね?

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


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


Name: cry  ..ぴよぴよ(71ポイント)   Date: 2010/03/28(日) 14:03   No:49823     
Title: Re:初投稿です。    
発射していない玉を探し、その玉の発射フラグを立てたあと
break文でforループを抜けているので
結果的に発射フラグを立てるのは1つ又は0(どの玉も発射されている場合)になります。


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

Name: nayuta  ..ぴよぴよ(110ポイント)   Date: 2010/03/28(日) 23:55   No:49842 解決!     
Title: Re:初投稿です。    
勘違いしてました。。。
解決しました。ありがとうございました!


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



Name: えあ  ..ぴよぴよ(504ポイント)   Date: 2010/03/28(日) 17:50   No:49831       
Title: リスト構造について    
みなさんはじめまして。
私はシューティングゲームの製作を行っております。

敵や弾の管理は配列で行っているのですが、それらを出現させる際に、配列を最初から検索していては膨大な時間がかかることがわかりました。
もちろん、検索方向を交互に変更し検索時間を減らしたり、検索の必要がない場合は検索をしないような仕組みも組み込んだのですが、やはり数万回とループを行うと時間がかかってしまうようです。
私のパソコンでは動作速度に問題はないのですが、たくさんの人にも遊んでもらえるよう、少しでも時間を短くしたいと考えています。

調べてみると、リスト構造というもので構造体同士のアドレスを繋げておくと出現時や処理時のループの時間が短縮できることがわかりました。

○弾などの高速な管理方法(リスト構造)
http://orangeknowledge.jpn.org/tips/game001.html(VALGUS - Orange Knowledge様 - http://orangeknowledge.jpn.org)

こちらのページを参考にプログラムを組んでみたのですが、画面外に出た弾を消去する際に出ていない弾も消去されてしまいます。
おそらく消去する際に、ループに使用するリストポインタ(g_pBulletUse)の位置が変更されてしまう為、それより後の(配列の)弾がスキップされているのだと思いますが、解決方法が見つからないため質問させて頂きました。

ソースを書き込もうとしたのですが、長すぎるということで添付させて頂きます。(サイトのサンプルと変数名が違います。すみません。)

解決の為のヒントを教えていただければ幸いです。
どうぞよろしくお願い致します。


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


Name: box  ..ハッカー(151,436ポイント)   Date: 2010/03/28(日) 19:28   No:49832     
Title: Re:リスト構造について    
データの持ち方によっては、リスト構造の方がかえって遅くなることがあります。

もし、配列中の検索キーが昇順または降順に並んでいるのであれば、
二分探索を用いると、今なさっている逐次探索よりも格段に速くなります。

どうしてもリスト構造を使いたいのであれば、
まず、シューティングゲームと切り離して、
書籍やサイトなどでリスト構造そのものを
じゅうぶんに理解してからシューティングゲームに応用する、
という手順を踏んでみてはいかがでしょうか。


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

Name: softya [URL]  ..ハッカー(139,859ポイント)   Date: 2010/03/28(日) 19:41   No:49833     
Title: Re:リスト構造について    
長いので簡単にしか見てませんが、例えば
    if (p->pBack){                    // 後方ポインタがあるなら
        p->pBack = p->pNext;    // 繋ぎ替える
    }
なんかは、
    if (p->pBack){                    // 後方ポインタがあるなら
        p->pBack->pNext = p->pNext;    // 繋ぎ替える
    }
じゃないかなと思ったり。
そもそもデバッガで変数の変化などステップトレースしましたか?
まず、デバッガで追いかけてみてください。
そうすれば分かると思います。
あとは、リスト処理だけテストするプログラムを作ってみるのも良い手段です。

それとboxさんが言うとおり単純にリスト構造を使うと遅くなると思います。今のリストは空き弾の管理の高速化だけが目的でしょうか?


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

Name: 通りすがり  ..上級者(21,115ポイント)   Date: 2010/03/28(日) 19:58   No:49834     
Title: Re:リスト構造について    
>敵や弾の管理は配列で行っているのですが、それらを出現させる際に、配列を最初から検索していては膨大な時間がかかることがわかりました。 
>もちろん、検索方向を交互に変更し検索時間を減らしたり、検索の必要がない場合は検索をしないような仕組みも組み込んだのですが、やはり数万回とループを行うと時間がかかってしまうようです。 

本当にボトルネックはそこなの?
何故数万回もループする必要があるのかわからないけど、数万回のループがあったとして、
それは全体にどれ位足を引っ張っているの?
通常数万回のループ位では重くはならないでしょう。


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

Name: えあ  ..ぴよぴよ(818ポイント)   Date: 2010/03/28(日) 19:59   No:49835     
Title: Re:リスト構造について    
>>box さん
>>softya さん
お返事ありがとうございます。
リスト構造は遅いのですか。

私の配列の方法では
生成時にはその配列のデータが使用されているかどうか、というものを検索していき
使用していない要素にデータを入れるという方法をとっていました。
また、弾の移動などの処理時には
for文で配列全てを回し、使用していない要素はcontinueするという方法をとっています。

この方法を使えば、使用している配列の要素だけを順番に処理することができるので
ループ回数が減ると思ったのですが、、、そうではないのですね。
私がしたいことはsoftyaさんの仰る通り
使用されていない弾の管理の高速化だけが目的ですので、管理以外の部分で高速化できる所がないか調べてみます。


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

Name: えあ  ..かけだし(1,088ポイント)   Date: 2010/03/28(日) 20:08   No:49836     
Title: Re:リスト構造について    
>>通りすがり さん
ありがとうございます。

>>本当にボトルネックはそこなの? 
特にその部分でゲームが遅くなるというわけではないのですが、
使用していないものも条件分岐を行うのは無駄かな、と思ったので他の方法を調べ
それについて質問させて頂きました。

正確な時間については計っていないのですが、弾の移動処理の部分が最もif文の量やループ回数が多かったので
時間がかかるものだと勝手に推測していました。

こんな無駄な方法をとっているのは自分だけだと思ったのでリスト構造を使用してみようと思った次第です。
もう少し調べてから導入できるかどうか検討してみようと思います。


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

Name: たいちう  ..熟練のプログラマー(63,714ポイント)   Date: 2010/03/28(日) 21:09   No:49837     
Title: Re:リスト構造について    
> 正確な時間については計っていないのですが、
> 弾の移動処理の部分が最もif文の量やループ回数が多かったので
> 時間がかかるものだと勝手に推測していました。

処理時間の計測が第一です。
経験を積んでいても推測はしばしば外れますから。

配列の大きさにもよりますが、シューティングゲームということならば、
せいぜい数千程度だと思います。弾の構造体の配列だとして、
移動処理や描画が必要かどうかのフラグをチェックするだけならば、
描画処理と比較すれば無視できるはず。

第一、弾の移動処理がボトルネックだったとしても、
それが必要な処理ならば、リスト構造にしても軽くなりませんよ。


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

Name: Dixq (管理人) [URL]  ..ウィザード(1,165,727ポイント)   Date: 2010/03/28(日) 21:44   No:49839     
Title: Re:リスト構造について    
私の経験上の話ですが、弾幕を普通にSTLのlistにしたり、線形リスト使ってすごい勢いでmalloc、freeを繰り返すと配列とは比べ物にならない位逆に遅くなります。
ある程度の領域を予め確保し、効率よくポインタを繋ぎ換えるなど工夫が必要かと思います。

一時期こだわってましたけど、色々試して結局私は配列で計算する方法に戻しました。
館で紹介しているコードとは少し違いますが、基本的に同じです。
配列でザックリ領域確保して、フラグの立っている弾を描画する方法です。

弾が千個あったとして、千回フラグチェックしたとしても、
10億回の比較が1秒位だとしたら、千回の比較は100万分の一秒ですよね。
これは仮の数値だし、実際はもっと色んな要素が絡んだり計算が絡んだりするかもしれないので、
これより時間はかかるかもしれませんが、こう考えると「本当にそこがボトルネック?」と思ってしまいます。

確かにプログラマーとしては「無駄は省く」をどこまでも求めるのは基本なので、効率化を図るのは大変良い事だと思いますが、
的確にボトルネックを見つける事がもっと重要なことです。
たいちうさんも仰るようにそのためにはまず時間を測定してみましょう。


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

Name: えあ  ..かけだし(1,296ポイント)   Date: 2010/03/28(日) 21:56   No:49840 解決!     
Title: Re:リスト構造について    
>>たいちう さん
>>Dixq さん
ありがとうございます。

時間を計測したところ、全体の処理が最大でも12ms程度なので間に合うようです。
弾の移動や描画よりも弾の生成時の空いている要素を検索するのに1.2msも使用しているようです。
敵の発射パターンを設定しやすくする為、同一フレームの間に数十フレーム先の弾の情報まで
設定している為だと思います。

一度のたくさんの弾を設定させないことや、その検索のあたりの効率を良くさせることで
時間を短くしようと思います。

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


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



Name: yamataka  ..ぴよぴよ(18ポイント)   Date: 2010/03/28(日) 03:28   No:49805       
Title: ランチャー    
DXライブラリだけでランチャーを作成することは可能なのでしょうか?
あと、memset関数の良い点はどこですか?

質問ばかりですいません。


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


Name: Ma  ..熟練のプログラマー(63,275ポイント)   Date: 2010/03/28(日) 06:11   No:49811     
Title: Re:ランチャー    
>DXライブラリだけでランチャーを作成することは可能なのでしょうか? 
アプリランチャーとか、そのことでしょうか?
そのような機能はDXライブラリにございません。
ですから、DXライブラリで製作する理由はなくなります。

>あと、memset関数の良い点はどこですか?
何と比べてでしょうか?
比較対象の関数がないと。。。


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

Name: yamataka  ..ぴよぴよ(219ポイント)   Date: 2010/03/28(日) 09:18   No:49813     
Title: Re:ランチャー    
ランチャー作成の機能はないのですか。
わかりました、ありがとうございました。


それと、説明が下手ですみません。
「memset関数の良い点はどこですか?」とは、
「龍神録のソースコード内にはmemsetが書かれていて、それをそのままコンパイルするとRAMがとても使用されるのですが(例えば49%が80%になる)、memsetを消すとRAMが1%くらいしか上がりません。でも、龍神録で使われているということはmemsetは使った方が良いのでしょうか?」ということです。


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

Name: Dixq (管理人) [URL]  ..ウィザード(1,164,812ポイント)   Date: 2010/03/28(日) 10:01   No:49815     
Title: Re:ランチャー    
> memset関数の良い点はどこですか?

簡単に構造体の中身が0クリア出来る事

> 悪い点

例えば構造体の中に浮動小数点(doubleなど)が含まれていると0クリアが保証されない。
ビットが全部0でも0.0にならない処理系がある。(NULLポインタも同様)

と言う感じでしょうか。
現在は初期化についてのみ言及するということで良いのでしょうか?



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

Name: yamataka  ..ぴよぴよ(319ポイント)   Date: 2010/03/28(日) 10:12   No:49816 解決!     
Title: Re:ランチャー    
>現在は初期化についてのみ言及するということで良いのでしょうか?
はい、初期化についてのみです。

memsetを使うと構造体の中身を一気に0にできるのですか!
回答ありがとうございました。勉強になりました。


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

Name: Ma  ..熟練のプログラマー(63,599ポイント)   Date: 2010/03/28(日) 10:18   No:49817     
Title: Re:ランチャー    
>「龍神録のソースコード内にはmemsetが書かれていて、それをそのままコンパイルするとRAMがとても使用されるのですが(例えば49%が80%になる)、memsetを消すとRAMが1%くらいしか上がりません。でも、龍神録で使われているということはmemsetは使った方が良いのでしょうか?」ということです。


RAM使用率が変わるのが、私にとってはちょっとだけ珍現象に感じます。
(enemy とかは、構造体enemy_t実態の配列だからmemsetしてもしなくてもRAM使用率は変わらない気がしたんですがね。)
まぁ、このへんはおそらく私の勉強不足だとおもうので、他の方の指摘を待つとしておいて。


龍神録のソースコードは、全部見てないので推測しかできませんが、
それがないとデータが初期化されないとおもうので、ゲーム再スタートの時などに不具合が発生しそうです。

memset の役目は、ぐぐってもわかるとおり、指定された領域に指定されたバイト分だけ指定された値を指定します。
(指定指定うるさくてすいませんw)

データの初期化なしに再スタートすれば、ゲームオーバー時にいた敵が最初っからまた出現するわけでして・・・。

そういう理由でinit関数内の、memset とか結構大事だと思います。

さらに詳しいお話は、もっと詳しい方か管理人さん、お願いします。


//追記
>memsetを使うと構造体の中身を一気に0にできるのですか!
先に関数のことを軽く調べてから聞きに来てください。。。 編集済み


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

Name: yamataka  ..ぴよぴよ(377ポイント)   Date: 2010/03/28(日) 10:34   No:49818     
Title: Re:ランチャー    
Maさん、わかりやすい回答ありがとうございました。
memsetは結構大事なのですね。

>先に関数のことを軽く調べてから聞きに来てください。。。
わかりました。次からは調べてから質問します。


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

Name: バグ  ..ハッカー(194,250ポイント)   Date: 2010/03/28(日) 11:03   No:49819     
Title: Re:ランチャー    
>memsetを使うと構造体の中身を一気に0にできるのですか!

これって、環境や変数の型によっては、100%確実とは言えないんじゃなかったかな(^_^;)


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

Name: y  ..入門者(4,946ポイント)   Date: 2010/03/28(日) 15:12   No:49826     
Title: Re:ランチャー    
構造体の中身を全部0にする場面は、意外と少ないです。というか、出来ない場面があります。
memsetは、せいぜいポインタ型の配列、整数型の配列くらいに使うと思えばいいのではないでしょうか。
構造体を初期化をしたい場合は、初期化関数を作ってあげるのが一番都合が良いです。


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

Name: Dixq (管理人) [URL]  ..ウィザード(1,164,839ポイント)   Date: 2010/03/28(日) 15:48   No:49828     
Title: Re:ランチャー    
>バグさん

それって49815で言っていること以外にもあるんですか?


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

Name: バグ  ..ハッカー(194,285ポイント)   Date: 2010/03/28(日) 17:06   No:49830     
Title: Re:ランチャー    
>>管理人さん
おっと、その書き込みを読んでませんでした。失礼しましたm(_ _)m


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



Name: かりんとう  ..ぴよぴよ(35ポイント)   Date: 2010/03/28(日) 01:50   No:49804       
Title: GetHitKeyStateAllをループ外で書くとうまく動作しない理由    
こんばんは。

複数キーを同時押しするとプログラムを終了するプログラムの例題で、GetHitKeyStateAllの使い方がありました。
このGetHitKeyStateAllをプログラムのループの外に書くとプログラムが※うまく動作しなかったのですがなぜなのでしょうか?

また、例題では、whileループ内にif文で複数キーを同時押ししたらループを抜ける処理をしていたのですが、while文のループする条件で書き換えてみたら※うまく動作しませんでした。
上記の質問に関係するのでしょうか?

何方かご回答よろしくお願い致します。

※:複数キーを同時押ししてもプログラムが終了しない


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


Name: lbfuvab  ..プログラマー(25,103ポイント)   Date: 2010/03/28(日) 03:34   No:49806     
Title: Re:GetHitKeyStateAllをループ外で書くとうまく動作しない理由    
せめて環境とソースはお願いしますね。

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

Name: Ma  ..熟練のプログラマー(62,997ポイント)   Date: 2010/03/28(日) 06:05   No:49810     
Title: Re:GetHitKeyStateAllをループ外で書くとうまく動作しない理由    
>GetHitKeyStateAll
キー入力は毎フレームやる必要があるから。
とか、そんな単純なことじゃなくて・・・?


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



Name: もえ  ..ぴよぴよ(42ポイント)   Date: 2010/03/27(土) 20:12   No:49798       
Title: 初歩の初歩です    
なぜゲームをプログラミングするときにvisual C++を使用しないのですか?
visual C++はいつ使用するんですか?


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


Name: もぐりん  ..ぴよぴよ(911ポイント)   Date: 2010/03/27(土) 20:22   No:49799     
Title: Re:初歩の初歩です    
> なぜゲームをプログラミングするときにvisual C++を使用しないのですか?
> visual C++はいつ使用するんですか?

使っていないという根拠は?


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

Name: Dixq (管理人) [URL]  ..ウィザード(1,164,623ポイント)   Date: 2010/03/27(土) 23:15   No:49802     
Title: Re:初歩の初歩です    
「何故使用するのですか?」じゃなく「しないのですか?」とは・・?^^;

「VC++を使用すると聞いていたが、やってみたらVC++など無くてもゲームが作れちゃった」(いやそんなはずは・・)

みたいな感じに受け取れますが・・。
Borlandなど他のコンパイラを使えばVC++を使わなくても出来ますが、
うちではVC++を推奨しています。

コンパイラって何?と思われましたら、この辺にちょろっと書いていますので参考にして下さい。
http://dixq.net/vcpp.html


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



Name: らぁ  ..ぴよぴよ(955ポイント)   Date: 2010/03/27(土) 17:10   No:49792       
Title: アクションプログラムでのマップチップの読み込みについて    
DXライブラリを用いてアクションゲームを作成してます。C言語は一応3年位触ってます。
色々なサイトを参考にマップチップを読み込むソースを書いてみましたが、上手くロード出来てないようです。
みなさんの意見をお聞かせ下さい。

以下ソース
void LoadMap( _MapData *Mapdata )
{
    int fp;                            //ファイルポインタ
    const int maxstrnum = 700 ;            //読み込む最大行内文字数
    char inputstr[maxstrnum] ;            //読みとった文字列を格納する変数
    char inputc;                            //読みとった文字が改行やEOFか判定する変数
    int i = 0 , j = 0 , num ;
    fp = FileRead_open( "maptest.csv" );
    if( ( fp = FileRead_open( "maptest.csv" ) ) == NULL )    
    {
        printfDx( "ファイルのオープンに失敗しました。\nデータファイルの位置やファイル名を確認しましょう。" ) ;
        WaitTimer( 3000 ) ;
        DxLib_End();    //終了処理
    }
    while(1)
    {
        for( num = 0 ; num < maxstrnum ; num++ )
        {
            inputstr[num] = inputc = FileRead_getc( fp ) ;        //1文字取得する
            
            //スラッシュがデータにあるとき
            if( inputc == '/' )
            {
                while( FileRead_getc( fp ) != '\n' ) ;            //改行までループ
                num = -1 ;
                continue;
            }
            //カンマか改行なら
            if( inputc == ',' || inputc == '\n' )
            {
                inputc = '\0' ; //そこまでを文字列とする
                break;
            }
            //ファイルの終わり
            if( inputc == EOF )
            {
                goto EXFILE ;        //終了
            }
        }

        //int型の数値を読み取る場合
        Mapdata->mapdata[i][j] = strtol( inputstr , NULL , 10 ) ;  //読みとった文字を数字に変換(3番目の引数は10進数を使用するため10)
        j++;

        if( j == MAP_WIDTH )
        {
            j = 0 ;
            i++;
        }
    }
    EXFILE:
    FileRead_close( fp ) ;
}

環境はVS2008Proです。 よろしくお願いします。
添付ファイルはマップのCSVです 編集済み


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


Name: ideyan  ..入門者(3,129ポイント)   Date: 2010/03/27(土) 19:14   No:49797     
Title: Re:アクションプログラムでのマップチップの読み込みについて    
試してないのでわかりませんが
inputstrの最後にNULLを入れてみてはどうでしょうか?
inputcに代入されてますがこれでは意味がないような気が。。。


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



Name: J  ..上級者(18,051ポイント)   Date: 2010/03/27(土) 10:27   No:49778       
Title: お久しぶりです。。【雑談】    
どうも約2年ぶりのJです。もう知ってる&覚えている人はいないと思いますが・・・(というか名前にランクが残っててビックリです!
http://www.nicovideo.jp/watch/sm4687447
この動画の要望投稿したのが私です。(懐かしい
http://www.play21.jp/board/formz.cgi?action=res&resno=21427&page=&lognum=68&id=dixq&rln=21527

私がここに来なくなってから早二年が経ちます。
サークルでプログラムを作らなくなったのが原因かな・・・
その間は学校の後輩にこのサイト・この掲示板を紹介してプログラミング講座なんてものをしていました。
といっても簡単なC言語でしたけどねポインタぐらいまで教えたかな
でも私自身プログラミングへの意欲が失われたわけではありません!
去年にはWin32APIに挑戦しようかなと考えましたが挫折しましたw
解説書が悪かったんだ!ということにしておきます(ぇ
今でも何かできればプログラミングをしたいなと考えています(簡単であればね。。

・・・で今はといいますと間もなく大学生活が始まろうとしているという所ですね。
大学は4月5日から始まるのでそれまで暇を持て余している訳ですが・・・
そこで質問です、C言語と似た感じの何か簡単なプログラミングがありますでしょうか?
あと、約2年もブランクがあったのでDXライブラリの発展具合も気になります。
2年前と比べてどう変わっているのでしょうか・・・?


あとまた動画ネタですが
http://www.nicovideo.jp/watch/sm9262633
これなんかいかがでしょう?
長いですが前回みたいに端折ればいけると思います!
まぁ私のどうでもいい要望なので完全にスルーしてしまっても構いませんw 編集済み


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


Name: Dixq (管理人) [URL]  ..ウィザード(1,163,205ポイント)   Date: 2010/03/27(土) 11:40   No:49779     
Title: Re:お久しぶりです。。【雑談】    
> Jさん

お〜お久しぶりです^^
Jさんに教えてもらった曲は気にいって、あれからiPodや車のHDDに入れました。
良い曲を教えて頂いてありがとうございます☆

> C言語と似た感じの何か簡単なプログラミングがありますでしょうか? 

これはC言語と似たプログラミング言語があるかと言うことでいいでしょうか?
Cと似ていて役立つ言語と言ったらJAVAではないでしょうか?
何を求めるか、どんな分野を目指すかによりますが、Cの次によく使われている言語だと思います。
また、オブジェクト指向を知らないなら、JAVAを勉強することで、良いオブジェクト指向の勉強になると思います。
C++でもオブジェクト指向の勉強になりますが、基本的にCも網羅するので、
オブジェクト指向じゃなくてもコンパイル出来てしまうことから、なんちゃってオブジェクト指向から抜け出せないなんてことにもなる可能性があるので、
一度オブジェクト指向ではないとコンパイル出来ない環境で勉強するのもいいかも知れませんね。

後C#も良いと思います。これもオブジェクト指向です。
C#も割と使われることが多いと思います。
C#はCでWin32APIを使った経験があれば、「なんだこの便利な言語は!」と思うかもしれません。

うちの掲示板のアンケート回答結果にいい感じに言語の有名度合いが確認出来ますのでよければご覧ください
http://dixq.net/board/ank/enq.cgi?mode=kekka

「基本的な一通りの処理がかけるレベル以上の言語(の類)は何ですか?」
の回答結果欄はこの順番が目ぼしい順だと思っていいと思います。

> 約2年もブランクがあったのでDXライブラリの発展具合も気になります。 
> 2年前と比べてどう変わっているのでしょうか・・・? 

これはめちゃくちゃ進化しましたよ^^;
完全に3D対応になり、追加された3Dのリファレンスだけで
http://homepage2.nifty.com/natupaji/DxLib/function/dxfunc_3d.html
こんなにあります。
私はまだちょろっと使った程度ですが、とても便利そうです。

去年の4月にプログラマーとして配属され、配属先でプログラム大好きな友達にも恵まれ、サークルのような勉強会のようなチームを作ることが出来たので、
私もチームで何か作ろうと思っています。
Jさんも大学生になれば色んな友達が増えると思います。頑張ってください☆


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

Name: softya [URL]  ..ハッカー(139,236ポイント)   Date: 2010/03/27(土) 12:42   No:49783     
Title: Re:お久しぶりです。。【雑談】    
初めまして。
わたしにも管理人さんと同じくJavaとC#をおすすめします。
ゲームを作ることを考えるなら、C#とXNAが作りやすくて良い感じです。
DXライブラリに勝るとは言いませんが、同等レベルで構築可能だと思います。
シェーダーまで考えるとXNAが一歩先を行きます。
http://sorceryforce.com/xna/

私が龍神録の19章をC#+XNAに移植したのがあるのでよろしかったら見てください。
http://softyasu.net/game/gametop.html


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

Name: J  ..上級者(18,064ポイント)   Date: 2010/03/27(土) 12:54   No:49784     
Title: Re:お久しぶりです。。【雑談】    
管理人さんへ
し、進化しすぎです・・・DXライブラリの3D。
3D使ったこと無いので(使える自信すらない
もう雲の上の話ですね。。

管理人さんとsoftyaさんへ
Javaは面白そうですね〜
私の印象だとCGIの拡張版といった感じなのですが
実際の所どうなんでしょうか?
あと開発に必要な有名な環境って何がありますか?できればフリーでw


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

Name: Dixq (管理人) [URL]  ..ウィザード(1,163,899ポイント)   Date: 2010/03/27(土) 12:57   No:49785     
Title: Re:お久しぶりです。。【雑談】    
JAVAならEclips、C#ならVisualStudioでしょうね。
どちらもフリーで使えます。(VCは有償版ありますが)

JAVAをCGIのように感じているということは、JAVAScriptと勘違いされているのではないでしょうか?
JAVAは本当にCに似ている高級言語ですよ。

「JAVA 入門」などでググってみるとよく解ると思います。


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

Name: J  ..上級者(18,145ポイント)   Date: 2010/03/27(土) 13:46   No:49787 解決!     
Title: Re:お久しぶりです。。【雑談】    
あ、そうかもしれません。。
そういえばJAVAで組まれたソフトがあったなぁ。。
JavaとJavaScriptは別物ですね

Javaを頑張ってみようかなと思います
回答ありがとうございました!

あ、あとJavaって具体的にプログラムを組めますか?
Windowsアプリケーションみたいなものは簡単には作れませんかね?
ゲーム向けでしょうか 編集済み


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

Name: バグ  ..ハッカー(194,196ポイント)   Date: 2010/03/27(土) 14:09   No:49788     
Title: Re:お久しぶりです。。【雑談】    
JavaならSwingを使えば、比較的楽にGUIアプリを作成できると思いますよ(^-^)

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

Name: Dixq (管理人)  ..ウィザード(1,164,127ポイント)   Date: 2010/03/27(土) 14:26   No:49789     
Title: Re:お久しぶりです。。【雑談】    
否定的な意見ですみませんが特に目的無く学ぼうとすると捗らない可能性があると思います。
今自分が何をしたくて、その言語を学ぶのでしょう?
「何がしたいか」を先に考えてそれにあった言語を選択されるのがよいかと思います。
まぁ大学生ということなので色んな言語を勉強するのはよいと思いますが、目的意識を持つとより効率的だと思いますよ。

で、ゲームならやっぱC/C++ですねぇ。
softyaさんのおっしゃるC#も面白いでしょう。XNAを勉強するとXBOXで動くゲームが作れるようですよ。


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

Name: softya [URL]  ..ハッカー(139,607ポイント)   Date: 2010/03/27(土) 14:31   No:49790     
Title: Re:お久しぶりです。。【雑談】    
Javaの概要です。
http://ja.wikipedia.org/wiki/Java
Java入門のサイトです。
http://www5c.biglobe.ne.jp/~ecb/java/java00.html
http://www.tohoho-web.com/java/index.htm
Eclipceではじめるプログラミング
http://www.atmarkit.co.jp/fjava/index/index_java5eclipse.html

Javaには、
(1)デスクトップで動く(アプリケーション)
(2)ブラウザで動く(アプレット)
(3)サーバで動く(サーブレット/JSP)
(4)携帯で動く(モバイル)
など様々な形態があります。

>あ、あとJavaって具体的にプログラムを組めますか? 
最初はコンソール、AWTでウィンドウアプリが作れます。

それとDixq (管理人)さんも書いてますが、なぜ興味が続かなかったのか考え直してみる必要があるでしょうね。Win32APIで挫折している以上は、そこまで作りたい欲求が無いんじゃないでしょうか?


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

Name: Dixq (管理人) [URL]  ..ウィザード(1,164,365ポイント)   Date: 2010/03/27(土) 15:31   No:49791     
Title: Re:お久しぶりです。。【雑談】    
まぁCを習い始めた段階で、WINAPIを見ると「なんじゃこりゃ!」って思ってしまう事はあると思います^^;
ウィンドウ作るだけでなんでこんなめんどくさいんだと・・。

もしWINAPIを使ったような何かツール作りをするような場合はC#が良いと思いますよ。
とりあえず何を自分が作りたいのかを明確にしてみてはどうでしょう。

「学生のうちは何でもいいからとにかく広く浅く学ぶ」っていう姿勢でもいいかもしれませんけどね。
一通り色んな言語を学んでみてまたCに帰ってきたとしても、
そのは視野が広がっていると思います。


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



Name: sizuma [URL]  ..プログラマー(36,834ポイント)   Date: 2010/03/24(水) 22:21   No:49658       
Title: 大手ゲーム会社の筆記試験に向けた勉強法【雑談】    
いつもお世話になっております。
就職活動中の専門学校生です。

近々ゲーム会社の筆記試験があるのですが、受験するときはどんなことを勉強しておくべきなのでしょうか?
受験された方でこんな勉強をして、通過した、という方がいらっしゃったら教えて欲しいです。

個人的には物理や数学を復習したほうがいいのかな、と考えてます。

自分の現在の筆記スキルは
情報処理:ソフ開レベルなら解ける。最近の技術動向には詳しくない
数学:中学までならほぼ100%解ける。高校の範囲は忘れた。
物理:あんまり覚えてないけど、力学ならそれなりに解ける、と思う。不安。
という感じです。

よろしくお願いします!


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


Name: たかぎ [URL]  ..ハッカー(171,735ポイント)   Date: 2010/03/24(水) 22:37   No:49660     
Title: Re:大手ゲーム会社の筆記試験に向けた勉強法【雑談】    
本当かどうかは知りませんが、↓のような話も聞いています。
http://www.kijineko.co.jp/node/557


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

Name: Dixq (管理人) [URL]  ..ウィザード(1,161,497ポイント)   Date: 2010/03/24(水) 22:40   No:49661     
Title: Re:大手ゲーム会社の筆記試験に向けた勉強法【雑談】    
> sizumaさん

おぉ、ついに就職試験なのですね、頑張ってください^^
N天堂なら受けましたよ。
ネットでたまたま見かけた情報によるとたかぎさんが詳しいのではないかと・・。

私が受けた時に出た問題は、とにかくどれだけ豊かな発想をするかみたいな問題でしたね〜。
後は論理立てて考えられるか、説得力ある文章が書けるかみたいな感じでした。

私が思うにあの会社は試験からアイディアをパk・・参考にしている感じがします・・。

で、出た問題のメモを残してあるので貼り付けますね。


**専門科目** 

1   (都合により削除)

2-1 (都合により削除)
2-2 (都合により削除)
2-3 (都合により削除)
2-4 (都合により削除)

3   説明不可能・・。C言語の問題で若干ややこしい問題。 
  同じ数字を使わない4つの数字を使って、4桁と2桁の値を作る。 
  その2つで色々な比較を行う時、 
  下のif文を通る回数の合計の最大値と最小値を答えよ 
  if文は2重ループ内の2箇所にあり、ドンドンかわる状況の中各if文を 
  通った回数の合計数が最大となる数字の組み合わせパターンと 
  最小になるパターンを答える問題で、この値は3桁になったり 
  色んなパターンで問題が出された。

4  子ウサギは生まれて2ヶ月すると親になる。 
  1つがいの兎は、親になると毎月1つがいずつの子兎を産む。 
  今1つがいの親うさぎがいる時、12ヵ月後にはつがいは
  何匹になるか?C言語でライブラリ関数を使わずに記述せよ。 
(コウサギとプログラムって事で「あ、フィボナッチか」とピンとくるかどうかが勝負の分かれ目?)

**共通科目** 

5 (都合により削除)
6 今年何が流行るか予想しなさい。その根拠をかきなさい。 

**アンケート** 

7 技術者にとって何が大事か答えなさい 
8 TVゲームに使える最先端技術を答えなさい 


過去問とかこんな所に書いていいのかな・・?
もし必要ならメモっといて下さい^^;
まぁ同じ問題は出るわけないと思いますが・・。

sizumaさん数学強そうに思いましたけど、大学数学とか苦手ですか?
大手メーカーとかだと大学レベルの微分積分とかよく見かけました。線形代数とかも。
物理が科目にあったところは見たこと無いです。
その点英語はよくありますね。英語苦手だから苦労しました・・。

ちなみに上の4番「フィボナッチじゃ〜ん」つって調子に乗ってフィボナッチで計算した答えを書いたんですが
「何匹」になるか(フィボナッチで出る答えはつがいの数)だったので間違いました・・。
ミスをしない注意力も見ているんでしょうね。


では幸運を祈ります^^


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

Name: たかぎ [URL]  ..ハッカー(171,762ポイント)   Date: 2010/03/24(水) 22:48   No:49662     
Title: Re:大手ゲーム会社の筆記試験に向けた勉強法【雑談】    
> まぁ同じ問題は出るわけないと思いますが・・。 

具体的なことはいえませんが、「20年以上前から変わっていないな」という問題もありました。


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

Name: たかぎ [URL]  ..ハッカー(171,834ポイント)   Date: 2010/03/24(水) 22:51   No:49663     
Title: Re:大手ゲーム会社の筆記試験に向けた勉強法【雑談】    
細切れの回答ですみません。

> 物理が科目にあったところは見たこと無いです。 

これも具体的なことはいえませんが、大手ゲーム会社の今春の採用試験で物理の問題(ただし、高校生レベル)が出ていました。


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

Name: Dixq (管理人) [URL]  ..ウィザード(1,161,595ポイント)   Date: 2010/03/24(水) 22:53   No:49664     
Title: Re:大手ゲーム会社の筆記試験に向けた勉強法【雑談】    
本当ですか、じゃ特徴的な部分は消した方がよさそうですね^^;

> 物理

あ〜・・ゲームメーカーはN天堂以外受けなかったので、私には解りません。
すみません、物理の出題は見たこと無いというのは撤回します。
ゲームには物理計算必要な場合が多いですもんね。ゲーム会社の試験には確かにありそうです。

私も物理が大好きだったので、是非試験には物理が出てほしかったのですが・・・。
残念


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

Name: たかぎ [URL]  ..ハッカー(171,922ポイント)   Date: 2010/03/24(水) 22:59   No:49665     
Title: Re:大手ゲーム会社の筆記試験に向けた勉強法【雑談】    
> 本当ですか、じゃ特徴的な部分は消した方がよさそうですね^^; 

まあ、いいんじゃないですか。

物理は、斜方投射のような重力加速度が関係する問題や、角速度、角加速度等の回転運動、あとはバネ関係でしょうか。
その辺ぐらいは確実に押さえておいた方がよいでしょうね。
逆に、ハードウェアを扱っていないような会社だと、電気力学(オームの法則やクーロンの法則など)は出題されない気がします。


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

Name: たかぎ [URL]  ..ハッカー(171,947ポイント)   Date: 2010/03/24(水) 23:04   No:49666     
Title: Re:大手ゲーム会社の筆記試験に向けた勉強法【雑談】    
20年前から出題されている問題にかぎって、(都合により削除)になっていないような...

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

Name: たかぎ [URL]  ..ハッカー(172,010ポイント)   Date: 2010/03/24(水) 23:09   No:49667     
Title: Re:大手ゲーム会社の筆記試験に向けた勉強法【雑談】    
ところで子ウサギの問題ですが、これだけ近親交配が進むと、生まれてすぐに死ぬ子や、重い障害を持った子が多発しそうです。
単純な計算はできそうにありませんね。


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

Name: sizuma [URL]  ..プログラマー(37,228ポイント)   Date: 2010/03/24(水) 23:21   No:49670     
Title: Re:大手ゲーム会社の筆記試験に向けた勉強法【雑談】    
たかぎさん、管理人さん回答ありがとうございます!

>たかぎさん
>本当かどうかは知りませんが、↓のような話も聞いています。
参考にします。
基底クラスと派生クラスの初期化の順序はSJCPでよくやったので、Javaで書かれたらすぐわかるんですが、言語が変わるとどう派生してるのか全然分からないですね。C++のテキストも一回さらっと見直しておきます。

>電気力学
苦手な分野なんで、電磁気学のテキストをちょっと見ていたところなんですが、後回しにすることにします。
回転運動は一番苦手な分野だったので、ここを復習しようかな・・・またfとかωと格闘するのか・・・


>管理人さん
>N天堂なら受けましたよ。
僕もゲーム会社はN社オンリーです。
しかもゲーム会社なのに、志望ジャンルはOS・ライブラリ・ドライバ開発。
ハードウェアアーキテクチャってドキドキします(笑

普通にアルゴリズムを考えるような問題が出るんですね。
穴埋めでしょうか?
穴埋めじゃない方が試験中は楽しいと思うんですが・・・・
とりあえずフェボナッチになるのは、パターンを書き出せば分かるかなーと思います。
今からちょっとやってみますね!


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

Name: sizuma [URL]  ..プログラマー(37,138ポイント)   Date: 2010/03/24(水) 23:29   No:49671     
Title: Re:大手ゲーム会社の筆記試験に向けた勉強法【雑談】    
>たかぎさん
>子うさぎの問題
僕はつがいになるためのコストを考えてしまいます(
僕なら告白するのに一週間、手をつなぐのに2週間・・・・などなど(笑

遺伝子は全然分からないんですけど、疾患が発症するのが特定できないと思うので、遺伝のアルゴリズムから考えないといけなそうですね。まぁムリですけど(笑


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

Name: sizuma [URL]  ..プログラマー(37,459ポイント)   Date: 2010/03/24(水) 23:50   No:49673     
Title: Re:大手ゲーム会社の筆記試験に向けた勉強法【雑談】    
とりあえず書いてみたら、パソコン使っても15分ぐらいかかった・・・・
合ってるかわからないけど。
僕もつがいで出すのを間違えそうです(笑


#include <stdio.h>

int sum(int parents,int children,int count);

int main(void){
    int parents = 2;
    int children = 0;

    puts("親の総数は");
    printf("%d",sum(parents,children,12));

    return 0;
}


int sum(int parents,int children,int count){
    int temp = children;
    count -=2;

    if(count < 0)return parents;
    children = parents/2;
    parents += temp;
    return sum(parents,children,count);
    
}

再帰末尾をなんとかしたい。
というか、フェボナッチかの意味が分からなかったのですが・・・・


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

Name: たかぎ [URL]  ..ハッカー(172,131ポイント)   Date: 2010/03/24(水) 23:51   No:49674     
Title: Re:大手ゲーム会社の筆記試験に向けた勉強法【雑談】    
> 僕はつがいになるためのコストを考えてしまいます( 
> 僕なら告白するのに一週間、手をつなぐのに2週間・・・・などなど(笑 

ウサギではなく象が対象なら、これは深刻な問題ですね。
象は雌雄の相性が影響することが多く、日本の動物園では、姫路セントラルパークのような群れで飼育しているところを除いて、繁殖に成功していないといいますので。

> 遺伝子は全然分からないんですけど、疾患が発症するのが特定できないと思うので、遺伝のアルゴリズムから考えないといけなそうですね。まぁムリですけど(笑

劣性遺伝子をどれだけ保因しているかによります。
近親交配を繰り返すと、どんどん劣性遺伝子による形質が顕在化してきます。
白ウサギも、アルビノが定着したもののはずですが、その割には虚弱にならずによく生き延びていますね。


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

Name: sizuma [URL]  ..プログラマー(37,567ポイント)   Date: 2010/03/24(水) 23:56   No:49677     
Title: Re:大手ゲーム会社の筆記試験に向けた勉強法【雑談】    
>劣性遺伝
面白いですね。優れた遺伝子を残すための有性生殖なのに(だと思ってる)、劣った遺伝子が引き合うなんて。

>象の繁殖
関係ないけど、僕も相性のいいつがいがほs、いや、悲しくなるからやめておこう・・・・


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

Name: たかぎ [URL]  ..ハッカー(171,967ポイント)   Date: 2010/03/25(木) 00:05   No:49680     
Title: Re:大手ゲーム会社の筆記試験に向けた勉強法【雑談】    
> 優れた遺伝子を残すための有性生殖なのに(だと思ってる)、

そうですよ。

> 劣った遺伝子が引き合うなんて。 

というか、閉鎖環境で近親交配しかできなければ、そうならざるを得ないということです。
劣性遺伝子は、両親から同種の遺伝子を受け継いだ場合だけ形質が顕在化します。
近親交配を繰り返せば、同種の劣性遺伝子を持つ個体の比率が増えますから、当然のことです。

> 僕も相性のいいつがいがほs

就活は学校の先生や就職担当があれこれ手助けしてくれますが、婚活は自力でやらないといけませんからね。
自然界では、子孫を残せたものが勝ち組で、子孫を残せなかったものは負け組になります。
どんなに理屈を並べても、血が絶えればそこまでですからね。
まあ、そんなに焦らないことです。


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

Name: sizuma [URL]  ..プログラマー(37,723ポイント)   Date: 2010/03/25(木) 00:21   No:49683 解決!     
Title: Re:大手ゲーム会社の筆記試験に向けた勉強法【雑談】    
自然界の負け組みにならないように、とりあえずは経済力ですね。
とりあえずは就職活動がんばります!(うまくまとめたつもり


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

Name: Mikan [URL]  ..中級者(11,548ポイント)   Date: 2010/03/25(木) 12:38   No:49703     
Title: Re:大手ゲーム会社の筆記試験に向けた勉強法【雑談】    
解決後で申し訳ないのですが、フィボナッチを知らなかったので
ググってみたら、Wikipediaにウサギの問題が・・・^^;

リンク貼っておきます。
http://ja.wikipedia.org/wiki/%E3%83%95%E3%82%A3%E3%83%9C%E3%83%8A%E3%83%83%E3%83%81%E6%95%B0#.E5.85.8E.E3.81.AE.E5.95.8F.E9.A1.8C


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

Name: sizuma [URL]  ..プログラマー(37,905ポイント)   Date: 2010/03/25(木) 14:35   No:49713     
Title: Re:大手ゲーム会社の筆記試験に向けた勉強法【雑談】    
>Mikanさん
おぉ、本当ですね。
問題をよく読んだら、毎月1つがい産むって書いてました^^;
僕は毎月一つがいが一匹のうさぎを産むのかと思って計算してましたね。

情報ありがとうございます!


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

Name: ちゃお  ..初心者(5,593ポイント)   Date: 2010/03/26(金) 17:36   No:49762     
Title: Re:大手ゲーム会社の筆記試験に向けた勉強法【雑談】    
この手の回答は以前も誰かにしましたので、過去ログ参照してください。
去年度の受験をしました。

この時期の質問ということならば、○ンナムや○プコン当たりは、すでに筆記試験は終わってると思いますので、N天堂についてだけ回答します。



以下、「N天堂」の問題について

まず、管理人さんのメモの7番目の問題は、ほぼ毎年出ています。学部のときもでたし、院で受けた時も出た。
・技術者にとって大事なこと
ちなみにアンケートという名の試験なんで、適当に書くと落ちます。他の問題がほとんど解けいていなくても、ここだけしっかりとかけた場合に筆記試験に通過する人はいました。
配属先に関わってくるのかな?
プログラマーじゃなくて、企画側に回そうとかね。

他に出た問題では、

鉄板問題では(N天堂がよく出す、試験の順番ではありません)
@CとC++のプログラミングの問題が3問程度でました。
プログラムの穴埋めや実行結果を記述する問題でした。
Aコンパイラ、リンク、オブジェクトファイル、実行ファイル、ライブラリといった言葉を使って、コンパイルについての説明をしてくださいという問題。
Bしっかりと覚えてないんですが、DNSサーバ、IPアドレス等の言葉を使ってネットワーク系の説明をさせられる問題
C管理人さんのメモでもあった共通科目とアンケートという、あるテーマに対する論述問題も出ました。これは毎年テーマ違うとおもいますが、過去問題を使いまわししてるみたいなんで、問題が4年単位ぐらいでループしているのかな?と思います。

年度によって、たまに採用される問題ですが、去年度は出ました
Cゲームの内容に関わるマニアックな問題では、○リオとル○ージでは、○○○の方がお兄さんですか?といった問題で、はいorいいえの2択で問われる問題が50問程度でました。この手の問題は、出る年と出ない年があります。



物理、数学は出題されませんでした。



面接についてですが、
1次、2次、3次(最終)でした。
1次と2次では、技術面接と、どこにでもある面接(自己PR等で、思考特性を見てくる)になっていました。
最終面接では、意欲だと思います。

ちなみに内定者は院生が多かったと思います。 編集済み


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

Name: dic  ..熟練のプログラマー(58,356ポイント)   Date: 2010/03/26(金) 19:48   No:49764     
Title: Re:大手ゲーム会社の筆記試験に向けた勉強法【雑談】    
考え方が重視されるのでしょうか
おもしろそうですね
と ひとりごと


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

Name: sizuma [URL]  ..プログラマー(38,246ポイント)   Date: 2010/03/26(金) 20:32   No:49765     
Title: Re:大手ゲーム会社の筆記試験に向けた勉強法【雑談】    
>ちゃおさん
回答ありがとうございます。

使いまわしが多いとのことで、調べればある程度わかるのですけど、小論形式の問題やアンケートはその場で考えようと思っています。
企業から課題が出て、考えてきなさい、という形式のものだったら考えてくるべきなのでしょうが、企業側はその時の考えが知りたいのだと思うので。だから、エントリーシートは10回ぐらい書き直しました。
清書で写しミスすると落ち込みます。下書きしないので。
下書きするなら二枚書け!一枚で済んだら儲けもの!という考えです(笑

ピンポイントに任天堂の話になっているので、任天堂の問題がどんなものか知りたい、という質問に思えたのかもしれません。その点は申し訳ないです。
自身の基礎力を上げるための対策はしますが、その試験をとくための勉強をするつもりはないです。
(・・・といいつつ、Webテストは一応1時間ぐらい勉強しました)

>dicさん
結局は両思いになれるかどうかですかね。
会社が欲しい人材が自分であれば。
僕たちが出来ることは、自分がその会社に向いているところをアピールすることだと思います。
またはその人材に少しでも近づくよう努力すること。
自分を偽るのはその人の自由だと思いますけど、欲しがられてないのに入ってそれからどうするんだと思います。

試験も楽しみです。
自分のスキルや人格の会社への適正を審査してもらえるわけですからね。


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

Name: sizuma [URL]  ..プログラマー(38,299ポイント)   Date: 2010/03/26(金) 20:35   No:49766     
Title: Re:大手ゲーム会社の筆記試験に向けた勉強法【雑談】    
読み直したら、どこの面接官だ?ってぐらい偉そうな文章を書いてますね、僕。

苦情が着たら消すことにします^^;


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

Name: Dixq (管理人) [URL]  ..ウィザード(1,163,683ポイント)   Date: 2010/03/27(土) 11:57   No:49780     
Title: Re:大手ゲーム会社の筆記試験に向けた勉強法【雑談】    
フィボナッチって初めて聞いた時は「なんだこの意味不明な計算は・・。こんなこと知ってて意味あるのか」と思いましたが、
これ結構神秘的な計算式なんですよ。
(・・まぁ大学ってきっかけを与えてくれるだけで興味を持つような入口を示してはくれないものですよね・・)

「フィボナッチ 黄金比」でググると色々面白い記事が出てきます。
黄金比は最も美しいと言われる比で、私はレオナルドダビンチが発見したと思っていましたが、
wikiを見ると「古代ギリシアの彫刻家ペイディアス (Φειδίας) が初めて使ったと言われる」と書いてありますね。
まぁちゃんとした計算式で残したのはダビンチかな?

フィボナッチ数列の黄金比はおもしろくて、
wikiにヒマワリのことが載っていたと思いますが、
他にもバラの花びらの配置や松ぼっくりの模様なんかも黄金比になっています。
オウムガイの螺旋も黄金比です。

(参考)
http://www.google.co.jp/search?hl=ja&lr=lang_ja&ei=-XCtS6ObM8uTkAWm4aCTDQ&sa=X&oi=spell&resnum=0&ct=result&cd=1&ved=0CBQQBSgA&q=%E3%83%95%E3%82%A3%E3%83%9C%E3%83%8A%E3%83%83%E3%83%81+%E9%BB%84%E9%87%91%E6%AF%94&spell=1

ギリシャ時代に作られた美術的な肖像、建造物などは黄金比で計算したわけではないだろうに、黄金比になっているという話もあります。

パルテノン神殿やミロのビーナスも黄金比になっています。

・・と言う感じで神秘的な計算式なんですよね、フィボナッチ数列は。

学校で何かの計算式を習ったなら、それには「重要な意味」があるはずです。
授業中は意味不明で使いどころの解らないものであったとしても、
自分で家に帰ってその計算式に何の意味があるのか調べてみることで非常に自分の為になり、
興味も持つ機会が出来ると思います。
是非そういう機会があれば積極的に調べてみてください☆

大学時代を色々と無駄に過ごしてしまった管理人から、今から大学生になる人(大学生の人)へのお願いですっ!


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

Name: sizuma  ..プログラマー(38,593ポイント)   Date: 2010/03/27(土) 13:05   No:49786     
Title: Re:大手ゲーム会社の筆記試験に向けた勉強法【雑談】    
>オウムガイの螺旋も黄金比
大学一年の時に巻貝の成長比の統計を調べたことがあります。
大したことはしてませんけどね。専用の機械で真っ二つにして、ノギスで間隔を測るだけです。
誤差もありますが、いろんな箇所で黄金比が見られましたよ。

僕も大学時代は中退するほど部活しかしていなかったので(部活自体の後悔はしてませんが)、時間を見つけて色々な研究もちゃんと自発的にしておくべきだったと思います。
ちなみに確か管理人さんと同じでテニス部です(^^)

「やっておけばよかった」と思ったら、今からすべきだと僕は思うので、今したいこと満載です。
きっといくらか年をとったら、同じことを思うんじゃないかなぁと思います。
「あぁ、やっておけばよかった、と後悔したあの時、やっておけばよかった」、ってね。

ちなみに僕が今年中にやってしまおう!と思ってることは
・空手、剣道とか武道を習ってみたい
・英語が話せるようになりたいから、外国人の友達がほしい
・情報処理の研究をいろいろと。卒研につなげるために、今はコンパイラの勉強中
・大学入試レベルの数学問題が解けるようになる
・読書。今年中に全ジャンル含めて300冊を目標に

よくばるくらいが時間を大切にするようになっていいと思います。
いくらか年をとったときに
「あの時の努力があるから、今がある」
と思えることが増えたら最高じゃないですか?

というわけで、自己PRがチャレンジャーな僕は、フレッシャーズと人生の目標を見失ってる人たちに、チャレンジを推奨します!


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



Name:  ..ぴよぴよ(482ポイント)   Date: 2010/03/27(土) 02:32   No:49770       
Title: 2dと3dの両方が一度に使えない    
DXライブラリで3Dの表示をしてしまうと
SetUse3DFlag(FALSE);としないと2Dの画像を表示できなくなってしまいます。
なぜなのでしょうか?

カメラの位置を動かしているのですがこれが関係あるのでしょうか?


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


Name: Ma  ..熟練のプログラマー(62,648ポイント)   Date: 2010/03/27(土) 09:55   No:49774     
Title: Re:2dと3dの両方が一度に使えない    
私の場合、問題なく使用できます。
たとえば、DrawGraph と MV1DrawModel (だったかな?) の両立が可能です。

環境、ライブラリバージョン、初期化のコード 等、のせるといいかもしれませんよ。


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

Name:  ..ぴよぴよ(760ポイント)   Date: 2010/03/27(土) 10:15   No:49777     
Title: Re:2dと3dの両方が一度に使えない    
原因がわかりました。

素材のロード時に
Map = LoadGraph("DATA/BMP/test.png");
MapModelH = MV1LoadModel( "DATA/X/map_01.x" );
と書くと表示されるのですが

MapModelH = MV1LoadModel( "DATA/X/map_01.x" );
Map = LoadGraph("DATA/BMP/test.png");
と書いてしまうと表示されなくなっておりました。
読み込みの時は2Dが先という決まりがあるのでしょうか?


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

Name: Ma  ..熟練のプログラマー(62,946ポイント)   Date: 2010/03/27(土) 12:23   No:49782     
Title: Re:2dと3dの両方が一度に使えない    
>読み込みの時は2Dが先という決まりがあるのでしょうか?
それは初耳ですね。

ライブラリのバージョンが最新ならば、公式の掲示板で質問することをおすすめします。
もしかしたらライブラリ側の問題である可能性もありますので。


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



Name: SHIM  ..ぴよぴよ(774ポイント)   Date: 2010/03/24(水) 03:08   No:49612       
Title: キャラクターが向いている方向に移動    
キャラクターが向いている方向に移動するようにPGを書いているのですが値が変わりません。
Player.rotが0~360度の回転の値が入っております。
どのようにすればよいのでしょうか?

またCameraMoveという関数を作って
キャラクターが向いている方向を自動的に見るような仕様にしたいのですが
キャラクターの向いている方向に注視点を作りだすこと及びカメラの位置の移動についてがよくわかりません。
http://homepage2.nifty.com/natupaji/DxLib/program/dxprogram_3DAction.html
↑等も見て参考にしてみたのですがよくわかりませんでした・・・。


    // 初期化
    Player.Move.x = 0;
    //Player.Move.y = 0;
    Player.Move.z = 0;
    
    float rot = float(Player.rot/180*M_PI);

    // 移動処理
    if( Key[KEY_INPUT_UP].Flg == 1 ){
        Player.Move.x = cos(rot) * Player.MoveSpeed;
        Player.Move.z = sin(rot) * Player.MoveSpeed;
    }
    if( Key[KEY_INPUT_DOWN].Flg == 1 ){
        Player.Move.x = cos(rot) * Player.MoveSpeed * -1;
        Player.Move.z = sin(rot) * Player.MoveSpeed * -1;    
    }

    //  ジャンプ処理
    if( Key[KEY_INPUT_SPACE].trgKey == 1 ){
        if(Player.Move.y == 0)    Player.Move.y = 4;
    }

    if(Player.Move.y != 0){
        Player.Move.y -= 0.2f;
    }

    // 移動値加算
    Player.Pos.x += Player.Move.x;
    Player.Pos.y += Player.Move.y;
    Player.Pos.z += Player.Move.z;

    // Yは0より下がらない
    if(Player.Pos.y <= 0){
        Player.Pos.y = 0;
        Player.Move.y = 0;
    }



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


Name: SHIM  ..ぴよぴよ(12ポイント)   Date: 2010/03/24(水) 15:55   No:49647     
Title: Re:キャラクターが向いている方向に移動    
すみません。DXライブラリを使っております。

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

Name: softya [URL]  ..ハッカー(137,805ポイント)   Date: 2010/03/24(水) 18:28   No:49655     
Title: Re:キャラクターが向いている方向に移動    
部分的だと分からないことも多いので全てのソースコードを添付してもらえますか。
プロジェクトは、ここの添付制限120KBを超えるので不要です。 編集済み


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

Name: SHIM  ..ぴよぴよ(61ポイント)   Date: 2010/03/25(木) 01:03   No:49686     
Title: Re:キャラクターが向いている方向に移動    
回答ありがとうございます。
ソースを添付させて頂きます。

関係ある部分だけ切り取らさせて頂きました。
もしかしたら実行するとエラーが出るかもしれません。


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

Name: ideyan  ..入門者(3,080ポイント)   Date: 2010/03/25(木) 01:36   No:49687     
Title: Re:キャラクターが向いている方向に移動    
見てて思ったんですが

float rot = float(Player.rot/180*M_PI);

Player.rotはintっぽいので

Player.rot / 180
この部分がintで計算されて、
2〜0×M_PIをfloatにキャストするってなってないですか?
(float)Player.rot/180*M_PI
とか
Player.rot/180.0f*M_PI
でなんか変わりそうな気がするんですが。


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

Name: SHIM  ..ぴよぴよ(106ポイント)   Date: 2010/03/26(金) 04:37   No:49729     
Title: Re:キャラクターが向いている方向に移動    
 ideyan様
rotをfloat型に修整した所、少し近づきましたありがとうございます。
ただやはり上手くは動いてくれません・・・。
キャラクターが旋回?するようにしてカメラもそれを追うような形にしたいのですが
カメラの位置がおかしな値になってしまいます。


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

Name: Ma  ..熟練のプログラマー(61,958ポイント)   Date: 2010/03/26(金) 07:42   No:49730     
Title: Re:キャラクターが向いている方向に移動    
>カメラの位置がおかしな値になってしまいます。
ソース見ました。
Camera.Pos, Camera.EyePos
の計算部分が見当たりません。(初期化しか見当たりませんでした。)
そもそも、計算をしようとすらしていないので、うまく動かないというよりは
計算の仕方を教えてほしいということでいいですか?


私が実装するなら、
カメラの注視点はプレイヤーの位置でOKです。
カメラの位置は、プレイヤーの向きベクトルに、負の値をかけれたベクトルをプレイヤーの位置ベクトルに加算するといいと思います。

こうすると、プレイヤーの向きの反対側、つまり後ろからプレイヤーを見ることになります。


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

Name: SHIM  ..ぴよぴよ(965ポイント)   Date: 2010/03/26(金) 10:24   No:49734     
Title: Re:キャラクターが向いている方向に移動    
Ma様

回答ありがとうございます。

カメラは自分なりに実装してみました。
とりあえず全てPlayMove関数で行ってしまっておりますが気にしないで下さい。

ただキャラクターが移動してしまいますと問題が発生します。

上下キーを押すとキャラクターは動き
カメラの位置がおかしい為どんどん遠ざかってしまいます。

これをCamera.Length分、後ろに下がった場所からみたいのですが
どの様に値を取得すればよいのかがわかりません。

又、3Dの場合X軸がSINでZ軸がCOSであっているでしょうか?

その他ソースにておかしい部分がありましたら指摘頂けますと助かります。
お手数ですがご教授願えないでしょうか?


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

Name: Ma  ..熟練のプログラマー(62,043ポイント)   Date: 2010/03/26(金) 14:41   No:49752     
Title: Re:キャラクターが向いている方向に移動    
んー。
どうやら、難しく考えすぎているようです。


>カメラの位置は、プレイヤーの向きベクトルに、負の値をかけれたベクトルをプレイヤーの位置ベクトルに加算するといいと思います。 

おそらく、ここを誤解していますよ。

プレイヤーの向きベクトルに、負の値をかけれたベクトル = VScale(Player.Move,-1)
//ただし、-1でなくても、-2でもOK。この値の絶対値が距離に比例する。


プレイヤーの位置ベクトル = Player.pos


プレイヤーの向きベクトルに、負の値をかけれたベクトルをプレイヤーの位置ベクトルに加算 = VAdd(VScale(Player.Move,-1),Player.pos)

これが、カメラの位置です。
ちなみに、こぴぺではなく理解してくださいね。

意外と簡単なことです。
まずプレイヤーの位置から、プレイヤーが移動しようとしている方向の逆方向に移動させたベクトルなんです。


(0,0) にプレイヤー 、(0,1)方向にむいているなら、
カメラの位置は、
<0,0> + (-1)*<0,1>です。
すなわち、<0,-1> になるんです。

そのてんから、プレイヤーがいる位置<0,0>に注視したと想像してください。

見事にプレイやーがカメラにおさまって、しかも進行方向を見ていると思いませんか?


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

Name: SHIM  ..かけだし(1,068ポイント)   Date: 2010/03/26(金) 16:15   No:49759     
Title: Re:キャラクターが向いている方向に移動    
Ma様
丁寧な説明で何となく理解しました。

もしキャラクターが回転して常にキャラの後ろにカメラを設定したい場合は

Camera.Pos = VAdd(VScale(Player.Move,-1),Player.Pos);
Camera.Pos.x += sin(rot) * Camera.Length;
Camera.Pos.z += cos(rot) * Camera.Length;

と書けばよいということですよね?
試してみた所、問題なく動いているようです。

非常に助かりました><


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

Name: Ma  ..熟練のプログラマー(62,847ポイント)   Date: 2010/03/27(土) 12:21   No:49781     
Title: Re:キャラクターが向いている方向に移動    
>と書けばよいということですよね? 

いや、
Camera.Pos.x += sin(rot) * Camera.Length; 
Camera.Pos.z += cos(rot) * Camera.Length; 
これは不要だと思いますよ。
もしかしたら私が理解していないだけかもしれません。
これはどのような意図でかかれたのでしょうか?


Camera.Pos = VAdd(VScale(Player.Move,-Camera.Length),Player.Pos);

Camera.Length が、カメラからキャラクターまでの距離ならば、
この1行だけでいいとおもうのですが、、、 


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



Name: アキト  ..ぴよぴよ(59ポイント)   Date: 2010/03/25(木) 02:42   No:49688       
Title: DXライブラリで3Dゲームを作ろうと思います。    
2Dのゲームがある程度作れるようになってきたので3Dに挑戦しようかと思っております。
しかし3Dは基礎中の基礎しか理解しておりません。
カメラがあったりライトを設定しなければならないということ程度です。

3Dゲームを作る際に参考になるURLを教えては頂けないでしょうか?
又、作ろうとしているゲームはアクションゲームです。


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


Name: Ma  ..熟練のプログラマー(61,218ポイント)   Date: 2010/03/25(木) 04:00   No:49689     
Title: Re:DXライブラリで3Dゲームを作ろうと思います。    
あまり、お力にはなれないとおもいますが、ぱっと思いついたこと。
公式のサンプルにアクションゲームサンプルがあります。

まずはサンプルの理解からとか。

正直、私にはモーションとか綺麗なモデルを自作できないので、これ以上はあまり参考にならないと思います><

あといえることは、Blender (モデリング/アニメーション作成)とか、 メタセコイア (モデリング)は結構使える無料ツールだったりするらしいので、その講座サイト等をグーぐるで検索すると、役立つかも。

でも、これ始める前に、まずはサンプルから始めたほうがいいかも。

プログラミング面については、、、、行列とかベクトルとか数学です。
サイトの紹介はバトンタッチw 編集済み


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

Name: アキト  ..ぴよぴよ(152ポイント)   Date: 2010/03/26(金) 02:05   No:49726     
Title: Re:DXライブラリで3Dゲームを作ろうと思います。    
Ma様
ご回答ありがとうございます。
サイトのサンプルプログラムを見せて頂きました。

ただやはり少々理解できない点が御座いまして・・・
どこか宜しいサイトはないでしょうか?


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

Name: たいちう  ..熟練のプログラマー(62,931ポイント)   Date: 2010/03/26(金) 09:12   No:49732     
Title: Re:DXライブラリで3Dゲームを作ろうと思います。    
> ただやはり少々理解できない点が御座いまして・・・
> どこか宜しいサイトはないでしょうか?

どこが理解できないかを具体的に書かないと。
理解する気があるならば、ここで聞くこともできるんだし。
サンプルプログラムを上から順に全部作っていくだけでも
ずいぶん勉強になると思いますが。


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

Name: アキト  ..ぴよぴよ(303ポイント)   Date: 2010/03/26(金) 11:28   No:49739     
Title: Re:DXライブラリで3Dゲームを作ろうと思います。    
回答ありがとうございます。

例えばなのですが点Aから点Bに移動する時はどうすればよいのでしょうか?

(0,0,0)から(10,10,10)に向かって速度Cで移動する場合など

2Dの場合はそれぞれの点の角度を求めて
X軸はcos、Y軸はsinをかければ出たのですが3Dになるとこれだけでは出来ない気がします。

こういった場合はどうすればよいのでしょうか?

Playが点Aで初期化されているものとします。

それぞれの値はどの様に変化するのでしょうか?
Play.x = 
Play.y = 
Play.z = 


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

Name: たいちう  ..熟練のプログラマー(63,212ポイント)   Date: 2010/03/26(金) 11:40   No:49740     
Title: Re:DXライブラリで3Dゲームを作ろうと思います。    
A(0,0,0)からB(10,20,30)に向かって速度Cで移動する場合とします。

ABの単位ベクトルは、AB(u, 2*u, 3*u)。
但し、u = 1 / sqrt(1*1 + 2*2 + 3*3)。

単位時間当たりの移動量をd(dx, dy, dz)とすると、
dx =     u * C
dy = 2 * u * C
dz = 3 * u * C

単位時間ごとの移動の処理は
Play.x +=     u * C
Play.y += 2 * u * C
Play.z += 3 * u * C

t時間後の座標を直接求めるならば、
Play.x =     u * C * t
Play.y = 2 * u * C * t
Play.z = 3 * u * C * t

こんな感じで理解できます?


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

Name: アキト  ..ぴよぴよ(455ポイント)   Date: 2010/03/26(金) 14:16   No:49749     
Title: Re:DXライブラリで3Dゲームを作ろうと思います。    
たいちう様
回答ありがとうございます。
すみません。理解できませんでした。
その単位ベクトルはどの様に求めるのでしょうか?

出来ればDXライブラリを使った場合の
A(0,0,0)からB(10,20,30)に向かって速度Cで移動する場合とします。 
を書いては頂けないでしょうか?

お手数おかけして大変申し訳ないのですがどうかお願いします。


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

Name: たいちう  ..熟練のプログラマー(63,476ポイント)   Date: 2010/03/26(金) 14:26   No:49750     
Title: Re:DXライブラリで3Dゲームを作ろうと思います。    
> すみません。理解できませんでした。
> その単位ベクトルはどの様に求めるのでしょうか?

ベクトルについての基本的な知識はお持ちですか?
それを1から教えるのはここでは無理なので、
高校の数学の教科書でも参考にしてください。

A(0, 0, 0)、B(10, 20, 30)としたときの、
ベクトルABは判りますか?
また、その長さは?


> 出来ればDXライブラリを使った場合の
> A(0,0,0)からB(10,20,30)に向かって速度Cで移動する場合とします。 
> を書いては頂けないでしょうか?

当面DXライブラリを使うつもりはありませんので書けません。


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

Name: Ma  ..熟練のプログラマー(62,002ポイント)   Date: 2010/03/26(金) 14:30   No:49751     
Title: Re:DXライブラリで3Dゲームを作ろうと思います。    
模擬コードです。


VECTOR velocity = VGet(1,2,3);
VECTOR position = VGet(0,0,0);

while(/*メインループ条件*/){
    position = VAdd(position,velocity);
    //10フレーム後には、10,20,30にいる。
}


2Dでも3Dでの世界でも、物理が重要になってきます。
加速度ベクトルが積み重なっていくことで、移動ベクトルができ、
移動ベクトルが積み重なることで、位置ベクトルができる。

これが、理解できていないようならば、難しいです。
とはいっても、難しいことはいっていません。速度と位置の関係を理解すればいいだけのことです。
(もし分からないならば、質問してください。)

ちなみに、ベクトルを理解できていないならば、ちょっと3Dゲームプログラミングは難しいと思います。
できなくはないですがね。。。

手元の数学IIの教科書か参考書で、ベクトルの基礎を理解しておくといいかも。


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

Name: たいちう  ..熟練のプログラマー(63,656ポイント)   Date: 2010/03/26(金) 14:58   No:49754     
Title: Re:DXライブラリで3Dゲームを作ろうと思います。    
> 加速度ベクトルが積み重なっていくことで、移動ベクトルができ、
> 移動ベクトルが積み重なることで、位置ベクトルができる。

一応物理専攻の私としては、加速度→速度→位置であり、
「移動ベクトル」という言葉には馴染みがないですね。
速度ベクトルに単位時間をかけることで、
単位時間当たりの移動ベクトルというものが計算できます。

物理的な意味を忘れないように必ず単位も意識します。
速度(m/s)×単位時間(s)→単位時間当たりの移動量(m)というように。
単位時間は秒ではなくフレームでも良いでしょうし、
長さの単位はピクセルかもしれませんが。

プログラムを作る上では移動ベクトルが重要かもしれませんが、
物理的に重要なのは加速度・速度・位置の方なので、
こっちを理解していた方が色々応用が利くでしょう。

# 他の人はこのようなアプローチをしてないのだろうか?


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

Name: Ma  ..熟練のプログラマー(62,176ポイント)   Date: 2010/03/26(金) 15:44   No:49755     
Title: Re:DXライブラリで3Dゲームを作ろうと思います。    
>移動ベクトル

すいません、正しい言葉を使っていませんでした。

ベロシティ(Velocity)ベクトル といいたかったんですが、日本では使わないですよね、、、。
速度 といってしまうと、スカラー量になってしまうため、避けた結果 移動(moving)ベクトルのような表現になってしまいました。

考えてみると速度ベクトルといえば、OKでしたね。


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

Name: たいちう  ..熟練のプログラマー(63,696ポイント)   Date: 2010/03/26(金) 16:26   No:49761     
Title: Re:DXライブラリで3Dゲームを作ろうと思います。    
> 速度 といってしまうと、スカラー量になってしまうため

これも違います。スカラー量は速さです。
速さ = |速度| です。あくまでも物理用語としてはですけど。
英語だと、speed = 速さ、velocity = 速度、ですね。


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

Name: Ma  ..熟練のプログラマー(62,697ポイント)   Date: 2010/03/27(土) 10:00   No:49775     
Title: Re:DXライブラリで3Dゲームを作ろうと思います。    
おぉ、そうでしたね。
変に覚えていたみたいです。お恥ずかしい><

speed = 速度、velocity = 速度

↑いままでの自分の頭の中。表記してみるとすごいおかしい事に気づきましたw

たいちうさん、ご指摘ありがとうございました。 ^^

これにて解決にさせて ∵(´ε(○=(・∀・*)
私じゃなかった。


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




 
[ 1 , ... ]
 
 
管理者画面   RSS   + Powered By 21style +