C言語何でも質問掲示板


Total hit  今日  昨日  

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

 
   複数シルエット画像か ....   
     ・[50748] たいちう 
     ・[50754] ろしなんて 
     ・[50756] たいちう 
     ・[50758] ろしなんて 
   DrawRotaGraphF関数に ....   
     ・[50751] kazuoni 
     ・[50753] ookami 
     ・[50755] つつ 
   拡大縮小用描画関数   
     ・[50746] Dixq (管理人) 
     ・[50747] Ma 
     ・[50749] トト 
   三項演算子のネストに ....   
     ・[50731] ぽこ 
     ・[50733] たかぎ 
     ・[50743] たいちう 
   パネポンの様な消える ....   
     ・[50522] やっくん 
     ・[50523] バグ 
     ・[50529] ookami 
     ・[50533] 猫旅 
     ・[50534] バグ 
     ・[50538] ookami 
     ・[50564] 猫旅 
     ・[50566] バグ 
     ・[50571] ookami 
     ・[50576] 猫旅 
     ・[50581] やっくん 
     ・[50582] 猫旅 
     ・[50586] やっくん 
     ・[50587] やっくん 
     ・[50592] 猫旅 
     ・[50593] conio 
     ・[50596] やっくん 
     ・[50614] 猫旅 
     ・[50615] 猫旅 
     ・[50620] バグ 
     ・[50622] バグ 
     ・[50645] 猫旅 
     ・[50650] バグ 
     ・[50674] 猫旅 
     ・[50682] たいちう 
     ・[50700] 猫旅 
     ・[50702] conio 
     ・[50704] 猫旅 
     ・[50706] conio 
     ・[50735] 猫旅 
   POST送信   
     ・[50660] Justy 
     ・[50661] box 
     ・[50671] TKJ 
     ・[50683] TKJ 
     ・[50686] ookami 
     ・[50734] TKJ 
   C++の質問です   
     ・[50708] box 
     ・[50709] tara 
     ・[50714] たかぎ 
     ・[50721] tara 
     ・[50722] conio 
     ・[50723] tara 
     ・[50725] ぽこ 
     ・[50726] tara 
   管理人様へ   
     ・[50715] Dixq (管理人) 
     ・[50720] ムンバ 
   アイテムの透過処理に ....   
     ・[50654] ookami 
     ・[50665] 胡椒 
     ・[50667] yu 
     ・[50672] 胡椒 
     ・[50673] Ma 
     ・[50685] Dixq (管理人) 
     ・[50705] 胡椒 
   メタルスラッグにおけ ....   
     ・[50691] softya 
     ・[50692] TKOZ 
     ・[50694] Justy 
     ・[50696] softya 
     ・[50699] TKOZ 
     ・[50701] TKOZ 
   ブロックの当たり判定   
     ・[50599] sizuma 
     ・[50608] 李峡 
     ・[50626] sizuma 
     ・[50690] TKOZ 
   メモリ操作   
     ・[50643] Justy 
     ・[50655] ryo 
   途中から自機狙いに変 ....   
     ・[50449] ひよこ 
     ・[50496] 岸 
     ・[50501] ひよこ 
     ・[50505] 岸 
     ・[50507] ひよこ 
     ・[50606] 岸 
     ・[50611] ookami 
     ・[50630] 岸 
     ・[50633] ookami 
     ・[50644] 岸 
     ・[50646] ひよこ 
     ・[50647] ookami 
     ・[50652] 岸 
   C言語でポーカーを作っ ....   
     ・[50233] たいちう 
     ・[50237] box 
     ・[50240] 南瓜 
     ・[50245] たいちう 
     ・[50259] 南瓜 
     ・[50264] たいちう 
     ・[50270] 南瓜 
     ・[50272] バグ 
     ・[50273] たいちう 
     ・[50337] 南瓜 
     ・[50347] たいちう 
     ・[50367] 南瓜 
     ・[50372] box 
     ・[50376] 南瓜 
     ・[50384] たいちう 
     ・[50420] 南瓜 
     ・[50421] たいちう 
     ・[50438] 南瓜 
     ・[50439] たいちう 
     ・[50440] box 
     ・[50441] 南瓜 
     ・[50442] conio 
     ・[50443] Ma 
     ・[50450] たいちう 
     ・[50452] 南瓜 
     ・[50453] たいちう 
     ・[50454] 南瓜 
     ・[50455] Ma 
     ・[50464] 南瓜 
     ・[50466] たいちう 
     ・[50470] 南瓜 
     ・[50484] たいちう 
     ・[50638] 南瓜 
     ・[50642] たいちう 
   CGI(Perl)のログインペ ....   
     ・[50602] ムンバ 
     ・[50636] ムンバ 
   Cのソートについて   
     ・[50471] 組木紙織 
     ・[50612] ookami 
     ・[50628] 組木紙織 
     ・[50632] たいちう 
   printf関数で勝手に改 ....   
     ・[50498] 組木紙織 
     ・[50503] 白 
     ・[50504] 組木紙織 
     ・[50506] 白 
     ・[50508] 組木紙織 
     ・[50509] ぽこ 
     ・[50570] 白 
     ・[50629] 組木紙織 
   ホームページを自動更 ....   
     ・[50358] たかぎ 
     ・[50625] ookami 
   dlsymについて   
     ・[50624] ookami 
   配布したゲームのデー ....   
     ・[50589] たいちう 
     ・[50590] Justy 
     ・[50597] sizuma 
     ・[50605] レッドリ 
     ・[50619] Ma 
   【雑談】VisualStudio ....   
     ・[50554] たいちう 
     ・[50555] softya 
     ・[50556] バグ 
     ・[50557] 御津凪 
     ・[50558] たかぎ 
     ・[50561] dic 
     ・[50562] YuO 
     ・[50595] Justy 
     ・[50607] softya 
     ・[50613] 御津凪 
   DirectDrawがVist ....   
     ・[50584] 御津凪 
     ・[50610] 物 
   当たり判定   
     ・[50513] sleepy-T 
     ・[50527] ookami 
     ・[50565] Dixq (管理人) 
     ・[50578] sleepy-T 
     ・[50580] Dixq (管理人) 
     ・[50583] sleepy-T 
     ・[50600] sleepy-T 
     ・[50604] ookami 
     ・[50609] sleepy-T 
   フルスクリーンモード ....   
     ・[50521] Ma 
     ・[50540] ookami 
     ・[50559] 紅葉 
     ・[50568] no 
     ・[50577] 紅葉 
   こんばんは   
     ・[50572] バグ 
     ・[50573] Dixq (管理人) 
   配列の値をあげる   
     ・[50516] ぽこ 
     ・[50541] ookami 
     ・[50560] 初級者 
   環境取得   
     ・[50539] 翔太 
     ・[50543] softya 
     ・[50545] 翔太 
     ・[50549] softya 
     ・[50550] dic 
     ・[50551] 翔太 
   javaがインストールさ ....   
     ・[50536] ookami 
     ・[50542] dic 
     ・[50544] ookami 
     ・[50546] lbfuvab 
     ・[50547] dic 
     ・[50548] ookami 
   ゲームコーディング・ ....   
     ・[50525] 御津凪 
     ・[50526] Lipton 
   パネポンのようなパズ ....   
     ・[50482] やっくん 
     ・[50500] 猫旅 
     ・[50511] conio 
     ・[50518] 猫旅 
   ソースの分割   
     ・[50447] Justy 
     ・[50456] 冊 
     ・[50458] Justy 
     ・[50514] 冊 
   配列に入れた画像を表 ....   
     ・[50502] minzoo 
   GetHitKeyStateAll関数 ....   
     ・[50493] Ma 
     ・[50494] ookami 
     ・[50495] Ma 
     ・[50499] kuri 
   テトリス 回転の実装 ....   
     ・[50487] バグ 
     ・[50490] 海老天 
     ・[50491] バグ 
   【雑談】人型ロボット ....   
     ・[50389] softya 
     ・[50391] Ma 
     ・[50392] dic 
     ・[50422] ワクワク 
     ・[50427] Ma 
     ・[50430] softya 
     ・[50432] たいちう 
     ・[50433] Ma 
     ・[50434] たかぎ 
     ・[50436] Ma 
     ・[50445] no 
     ・[50451] Ma 
     ・[50469] no 
     ・[50479] Ma 
     ・[50488] Ma 
     ・[50489] Ma 
     ・[503811278050401] こうめいいのち 
     ・[503811278388058] こうめいいのち 
     ・[503811278430650] こうめいいのち 
   学校の宿題のプログラ ....   
     ・[50242] c++初心者 
     ・[50243] Ma 
     ・[50244] c++初心者 
     ・[50246] Ma 
     ・[50247] c++初心者 
     ・[50249] Ma 
     ・[50267] c++初心者 
     ・[50271] たいちう 
     ・[50486] c++初心者 
   フェードイン、アウト ....   
     ・[50483] Justy 
     ・[50485] kai 
   空間が歪んだような描 ....   
     ・[50476] kai 
     ・[50481] HK 
   dxaファイルの生成・展 ....   
     ・[50473] Justy 
     ・[50477] SG 
   不規則な枝の数のグラ ....   
     ・[50382] MNS 
     ・[50383] Ma 
     ・[50390] たいちう 
     ・[50404] yskey 
     ・[50406] たいちう 
     ・[50407] たいちう 
     ・[50408] yskey 
     ・[50457] yskey 
     ・[50467] たいちう 
     ・[50472] yskey 
   ReadMe作成ツールを作 ....   
     ・[50380] Ma 
     ・[50386] たいちう 
     ・[50388] dic 
     ・[50424] 紅葉 
     ・[50428] Ma 
     ・[50459] 紅葉 
     ・[50462] Justy 
     ・[50465] 紅葉 
   無題   
     ・[50369] バグ 
     ・[50370] もぐりん 
     ・[50423] ぽっけ 
     ・[50431] Ma 
     ・[50461] Dixq (管理人) 
   階層図を書いてみまし ....   
     ・[50396] Ma 
     ・[50415] dic 
     ・[50426] Ma 
     ・[50429] Justy 
     ・[50435] dic 
     ・[50437] Justy 

Name: ろしなんて  ..ぴよぴよ(359ポイント)   Date: 2010/04/16(金) 09:24   No:50744       
Title: 複数シルエット画像からの三次元オブジェクト再構築    
コンピュータグラフィックスアルゴリズムの課題で、複数シルエット画像からの三次元オブジェクト再構築にとりかかっています。

8台のカメラで人物を撮影した白黒のシルエット画像が8枚あります。(白:人物 黒:背景)
8台のカメラはキャリブレーションされており、それぞれのカメラの透視投影行列は、与えられています。
この8枚のシルエット画像から、視体積交差法で人物の三次元点群を求め、Paraview等のアプリケーションで点群を可視化するという課題があるのですが、どのように始めたらいいのか、よくわかりません。

現在の自分の考えとしては、world座標に人物より大きな立方体を作り、視体積交差法でその立方体を削っていけばいいのかと思っているのですが、立方体のサイズや、定義の方法など、具体的なやり方がまったくわかりません。

シルエット画像をスキャンし、もし、あるピクセルの色が白ならば、そのxy座標を、透視投影行列とあわせて、
どのように使えばいいのでしょうか? 透視投影行列は3x4の行列で、3次元座標[x, y, z, 1]を
2次元座標[x, y, w]に変換すると聞いたのですが、とすると、この場合、シルエット画像のxy座標は、どちらに代入すればいいのでしょうか? 3次元座標のほうに、z座標を決めて代入すればいいのでしょうか? その場合どのようにz座標を決定すればいいのでしょうか?

また、ボクセル法を使う方法もあると聞いたのですが、それで3次元点群を求められるのでしょうか?
使うならば、どのようにボクセルを定義すればいいのでしょうか?

質問さえも、整理されてなくて、すみません。
うまく質問もできないぐらい混乱しています。

8枚のシルエット画像と、8台のカメラの、それぞれの透視投影行列を添付します。

課題の提出期限は来週22日までです。
よいアドバイスをよろしくお願いします。

言語:C++を使う予定ですが、課題自体に言語の制限はありません。



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


Name: たいちう  ..比類無きプログラマー(73,170ポイント)   Date: 2010/04/16(金) 10:45   No:50748     
Title: Re:複数シルエット画像からの三次元オブジェクト再構築    
かなり難しい課題ですね。授業で十分な説明があったか、
高度な応用力を要求されているのだと思います。
授業で別の説明があったのならば、以下の方針は無視してください。

まずは条件を簡単にして作成し、徐々に仕様を満たしていくのが良いでしょうから、
次の条件で開始してはどうでしょうか?

物体は、-1 <= x, y, z <= 1の立法体内にある。
カメラはA(+∞, 0, 0), B(0, +∞, 0), C(0, 0, +∞)の3台。
カメラAはY座標正の方向を上とする(他の2台も適当に決めてください)。

図形もまずは単純なもので始めます。
3方向の画像が全て円ならば、できあがる立体は球に近いものになるでしょう。
その他、円筒とか三角錐や四角錐等が簡単な立体でしょう。

ここまでできたら残る難問はカメラの位置を自由に選べるようにすることのみですが、
これは後で心配すれば良いでしょう(ここまで辿り着けないなら心配の必要はありません)。


この条件で少しはイメージが固まりますか?
判りにくいところがあれば、その部分を質問してください。


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

Name: ろしなんて  ..ぴよぴよ(879ポイント)   Date: 2010/04/16(金) 12:41   No:50754     
Title: Re:複数シルエット画像からの三次元オブジェクト再構築    
回答ありがとうございます。

イメージはつかめたと思うのですが、いかんせんコーディングのスキルが伴いません。
このクラスで、初めてコンピューターグラフィックスプログラミングに触れました。
この一つ前の課題では、逆マッピング変換を使用した2D画像の変形を行いました。
今回の課題が二回目のコンピュータグラフィックスプログラミングです。
ですので、上の単純化した例ですら、どのようにコーディングしたらよいのか、さっぱりわかりません。
どこかに良い例となるソースコードがないかと探してみたのですが、どこもコンセプトのみであまり役には立ちませんでした。もし、テンプレートとなる様なソースコードがあれば、お教え頂けたら幸いです。


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

Name: たいちう  ..比類無きプログラマー(73,412ポイント)   Date: 2010/04/16(金) 13:05   No:50756     
Title: Re:複数シルエット画像からの三次元オブジェクト再構築    
Web上には多種多様なソースコードがありますので、
うまく見つけて修正することで課題をクリアできていたのでしょう。
自分の役に立つソースコードをうまくみつけることも大切なスキルです。

しかし仕様が高度・専門的になるにつれて、求める仕様に近いソースコードが
みつかりにくくなるのは当然のことですので、その場合は、自分の持つイメージを
ソースコードにするという応用力が必要です。
今までの課題で身に付けられなかったのでしょうか。


> ですので、上の単純化した例ですら、どのようにコーディング
> したらよいのか、さっぱりわかりません。

それでは、もっと単純化しましょう。
2次元にします。

図形は -1 <= x, y <= 1 の範囲。
カメラは(+∞, 0)と(0, +∞)の2台。
カメラの画像は(-1 <= a <= b <= 1)という情報です。
2つのカメラからの画像を基にして、元の図形を再現してください。

プログラム作成の前に、紙の上で考えてみてください。


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

Name: ろしなんて  ..ぴよぴよ(392ポイント)   Date: 2010/04/16(金) 15:07   No:50758     
Title: Re:複数シルエット画像からの三次元オブジェクト再構築    
本当にこんな質問に付き合って頂きありがとうございます。

すみません。2次元で考えたら、更によく分からなくなってしまいました。
というか、2次元で、カメラをあつかうというイメージすらつかめてません。


もう一度、自分が課題で何が分からないのか整理してみました。
課題で自分がよく分からないのは、
-どのようにコード内でworld座標の立方体を定義すればよいのか?
-どのように立方体の大きさを決めればいいのか?
-どのようにシルエット画像の座標を、透視投影行列(projection matrix)を使って変換すればいいのか?
-どのように上で得られる座標を使って、立方体を、視体積交差法で削っていけばいいのか?
です。

とくによく分からないのは、透視投影行列の使い方です。
 w[u, v, 1] = [3x4 projection matrix] * [X, Y, Z, 1]

となると思うのですが、この時、シルエット画像のxy座標はu,vかX,Yのどちらに代入すればいいのかがよく分かりません。もしu,vだったらどのようにwを求めるのか?もしX,YだったらどのようにZを求めるのか?がよく分かりません。
また、X,Yに代入し、適切なZも得てu,vを求めた場合、x = u/w, y = v/wとなると思うのですが、
この2次元座標は、いったい何であり、どのようにこの座標を使って視体積交差法を使えばいいのかがよくわかりません。

すみません、書き出してみたら、分からないことだらけだと言うことに改めて気づきました。


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



Name: つつ  ..かけだし(1,757ポイント)   Date: 2010/04/16(金) 11:40   No:50750       
Title: DrawRotaGraphF関数について....    
確かDrawRotaGraphF関数で画像の左右反転ができたはずですよね??


数日使用していないと忘れてしまって。


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


Name: kazuoni [URL]  ..ハッカー(142,543ポイント)   Date: 2010/04/16(金) 12:30   No:50751     
Title: Re:DrawRotaGraphF関数について....    
できますよ。本家をご覧ください。
ttp://homepage2.nifty.com/natupaji/DxLib/function/dxfunc_graph.html#R3N10


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

Name: ookami  ..入門者(3,645ポイント)   Date: 2010/04/16(金) 12:37   No:50753     
Title: Re:DrawRotaGraphF関数について....    
dxlib.hを開いて、DrawRotaGraphFで検索すると参考になるかもしれません。公開されていない関数でも引数まではここで調べることができますよ。

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

Name: つつ  ..かけだし(1,774ポイント)   Date: 2010/04/16(金) 12:45   No:50755 解決!     
Title: Re:DrawRotaGraphF関数について....    
ありがとうございま〜す。

助かりました〜。


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



Name: トト  ..ぴよぴよ(629ポイント)   Date: 2010/04/16(金) 10:00   No:50745       
Title: 拡大縮小用描画関数    
拡大縮小用描画関数の描画関数を作っております。

オブジェクトが消える用に使う予定でオブジェクトの中心を原点として拡大縮小するようにしたいのですが
縮小をしてしまうと右上?に消えてしまいます。
中心にするということは出来ないのでしょうか?


//元画像
■■■
■■■
■■■

//現在の処理
■□□
□□□
□□□

//こんな感じにしたいです
□□□
□■□
□□□

わかりにくくてすみません。

void DrawAlphaScale(int x,int y,int GrHandle,int Alpha,float Sx,float Sy){

    //  透明度
    int Air = Alpha;
    if(Air <= 0) Air = 0;
    else if(Air >= 255) Air = 255;

    // 読みこんだグラフィックのサイズを得る
    int SizeX,SizeY;
    GetGraphSize( GrHandle , &SizeX , &SizeY );

    // 描画ブレンドモードをαブレンドにする
    SetDrawBlendMode(DX_BLENDMODE_ALPHA,Air);
    // グラフィックの描画
    DrawExtendGraph( x-SizeX/2 , y-SizeY/2 , x + int(SizeX*Sx)-SizeX/2 , y + int(SizeY*Sy)-SizeY/2 , GrHandle , TRUE ) ;
    // 描画ブレンドモードをノーブレンドにする
    SetDrawBlendMode( DX_BLENDMODE_NOBLEND , 0 );
}



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


Name: Dixq (管理人)  ..ウィザード(1,179,102ポイント)   Date: 2010/04/16(金) 10:13   No:50746     
Title: Re:拡大縮小用描画関数    
RotaGraphじゃだめなんでしょうか?

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

Name: Ma  ..比類無きプログラマー(84,204ポイント)   Date: 2010/04/16(金) 10:22   No:50747     
Title: Re:拡大縮小用描画関数    
DrawExtendGraph( x-SizeX/2 , y-SizeY/2 , x + int(SizeX*Sx)-SizeX/2 , y + int(SizeY*Sy)-SizeY/2 , GrHandle , TRUE ) ;

DrawExtendGraph( x-int(SizeX*Sx)/2 , y-int(SizeY*Sx)/2 , x + int(SizeX*Sx)/2 , y + int(SizeY*Sx)/2 , GrHandle , TRUE ) ;


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

Name: トト  ..ぴよぴよ(695ポイント)   Date: 2010/04/16(金) 11:05   No:50749 解決!     
Title: Re:拡大縮小用描画関数    
Dixq (管理人)様
横だけや縦だけの縮小をする可能性があるので個々に設定したいです><

Ma様
ありがとうございます!!出来ました〜。



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



Name: たけ  ..ぴよぴよ(88ポイント)   Date: 2010/04/16(金) 02:14   No:50730       
Title: 三項演算子のネストについて    
経歴6年目のCプログラマです。
三項演算子のネストについて、皆様の認識をお聞かせいただけないでしょうか。

前提として「三項演算子のネストは行ってはいけない」という、規約があります。
個人的な認識は、

    1. a == val ? b : c
    2. a == val ? b : a == val2 ? c : d
    3. a == val ? (a == val2 ? b : c) : d

    1. 通常の三項演算子(ネストではない)
    2. 三項演算子の連結(ネストではない) ※"連結"という表現は微妙ですね・・・
    3. 三項演算子のネスト

と、思っているのですが、違うのでしょうか?

web上で調べても、3をネストと言っても、2をネストと言うところは見当たりません。
3はわかるのですが、2がネストだから規約違反と言われたのですが、
それが正しいのでしょうか。

皆様の認識をお聞かせください。よろしくお願いいたします。

※質問サイトへの書き込みは初めてです。
  皆様に無礼、無作法があれば、申し訳ありません。


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


Name: ぽこ  ..初心者(8,386ポイント)   Date: 2010/04/16(金) 02:27   No:50731     
Title: Re:三項演算子のネストについて    
2もネストに1票です。

正確な定義は覚えてませんが、三項演算子ってのは

式1?式2:式3

という形です。この式1〜3に三項演算子が含まれているなら
ネストというべきだと思います。


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

Name: たかぎ [URL]  ..ハッカー(176,089ポイント)   Date: 2010/04/16(金) 03:59   No:50733     
Title: Re:三項演算子のネストについて    
まず、原則として、掲示板では技術上の正論しか回答することができません。
所属している組織内での、人間関係や、部署間の力関係など、技術以外の特殊な事情までは関知できないことをあらかじめお伝えしておきます。

ここでいう「規約」というのは、コーディング規約のことかと思います。
以下、そのつもりで回答します。

演算子のネスト(=入れ子)というのが何かというと、演算子のオペランドに、同種の演算子を用いた式が含まれているということになります。
その意味では、ぽこさんが書かれたように、2もネストということになります。

重要なことは、そのコーディング規約がなぜ定められているかです。
文法上は、条件演算子を入れ子にしても何の問題もありません。
しかし、それを避けたいのは、著しく可読性が低下するからではないでしょうか?
その観点からすれば、3はまだましであり、2の可読性が最も低いことがわかります。
つまり、規約の趣旨からして、2がダメといわれるのは当然ではないでしょうか?

これを、演算子の優先順位がどうとか、ネストの定義がどうとか、そのような議論で可否を判定するのは正しくないと思います。


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

Name: たいちう  ..比類無きプログラマー(73,088ポイント)   Date: 2010/04/16(金) 09:12   No:50743     
Title: Re:三項演算子のネストについて    
理不尽なコーディング規約はよくありますし、
ネストどころか3項演算子自体を禁止している場合もあります。
まぁ(見た目だけかもしれませんが)みんなが同じようなコードを
生産できるようにすることに意義はありますので、
従うか規約を変えるように働きかけるかでしょうね。

ここまでは一般論ですが、私も2はネストだと考えますし、
それ以上に可読性が低いのが問題です。
3項演算子のネストについての規定がなかったとしても、
規約のどこかに書かれているであろう可読性の箇所を理由として、
書き直しを指示すると思います。


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



Name: 猫旅  ..かけだし(1,087ポイント)   Date: 2010/04/13(火) 05:12   No:50519       
Title: パネポンの様な消える処理について    
http://www.play21.jp/board/formz.cgi?action=res&resno=50474&page=&id=dixq&rln=50511
で質問させて頂いた猫旅です。

現在パズルゲームを作っております。

選択した部分と周囲の3×3マスが反転し
3×3マスが同じパネルだったら消えるという処理までは実装できました。

パネルが消えた時に上にあるパネルが落ちる処理をしたいのですが
どの様に処理すればよいのかが見当がつきません・・・。

どうかご教授願えないでしょうか?

又、マップの出現でもう一つ下の配列を指定したいのですが
修正後にしてしまうと同じパネルしか出なくなり
2個ずれてしまいます。(配列が壊れてしまっている?)

修正前
// マップの出現
void PLAYER::MapBorn(){
    for(int j=0; j<CEL_W; j++){
        if(Map[CEL_H-2][j] == 0 && j != 0 && j != CEL_W-1) Map[CEL_H-2][j] = rand()%2+1;
    }
}

修正後
// マップの出現
void PLAYER::MapBorn(){
    for(int j=0; j<CEL_W; j++){
        if(Map[CEL_H-1][j] == 0 && j != 0 && j != CEL_W-1) Map[CEL_H-1][j] = rand()%2+1;
    }
}


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


Name: やっくん  ..上級者(16,709ポイント)   Date: 2010/04/13(火) 08:10   No:50522     
Title: Re:パネポンの様な消える処理について    
>パネルが消えた時に上にあるパネルが落ちる処理をしたいのですが 
パネルを入れ替えたときに下が空白なら落ちるようにしてますよね?
それと同じような処理で大丈夫かと思います。

>又、マップの出現でもう一つ下の配列を指定したいのですが 
マップの出現とはプレイ中に下から新たに出てくるブロックを指すのでしょうか?
2個ズレるとは具体的にどこがどのようにズレるかわからないので、できれば詳しく教えてもらえませんか?


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

Name: バグ  ..ハッカー(195,079ポイント)   Date: 2010/04/13(火) 10:27   No:50523     
Title: Re:パネポンの様な消える処理について    
以前作ったパズルゲームのずらし処理用の関数を載せます。

// フィールドの幅と高
#define Field_Width    10
#define Field_Height    20

// フィールド管理用の配列変数(0を空白とする)
int map[Field_Width][Field_Height];

// 1箇所でも動いたマスがあった場合はtrueを、そうでない場合はfalseを返す
bool drop_down(void)
{
    // 検査結果の格納用フラグ
    bool res = false;

    for (int x = 0; x < Field_Width; ++x)
    {
        for (int y = Field_Height - 1; y >= 1; --y)
        {
            // 現在検査中の位置が空白で、1つ上が空白ではない場合
            if (map[x][y] == 0 && map[x][y - 1] != 0)
            {
                // 検査中のマスを、1つ上のマスの情報で上書きする
                map[x][y] = map[x][y - 1];

                // 1つ上のマスは空白にする
                map[x][y - 1] = 0;

                // 動いた箇所があったので、検査結果フラグをtrueにする
                res = true;
            }
        }
    }

    return res;
}


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

Name: ookami  ..ぴよぴよ(51ポイント)   Date: 2010/04/13(火) 13:01   No:50529     
Title: Re:パネポンの様な消える処理について    
落ちる処理:
元のソースが分からないので全くの想像です。参考までに。
for(int y=0; y<CEL_H-1;y++){
for(int x=0; x<CEL_W  ;x++){
    if(Map[x][y]==0) swap(Map[x][y],Map[x][y+1]);
}}


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

Name: 猫旅  ..かけだし(1,345ポイント)   Date: 2010/04/13(火) 14:07   No:50533     
Title: Re:パネポンの様な消える処理について    
皆様、回答ありがとうございます。
本当に助かります。

>>やっくん様
その処理がわからない為質問させて頂きました。
説明が下手で申し訳ありません・・・。
又、ずれるのは添付した画像の様になってしまいます。

>>バグ様
為になるソースをありがとうございます。
ソースを見させていただいたのですが
判定は出来ますが落ちるような処理は出来なくないでしょうか?
パッと切り替わるのではなく落下するような処理にしたいです。

>>ookami様
そのような発想はありませんでした。
ありがとうございます。
ただやはり落下するように見せることが出来ない気がします。

やはりこのソースでは落下の様に見せることは出来ないのでしょうか?


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

Name: バグ  ..ハッカー(195,200ポイント)   Date: 2010/04/13(火) 14:56   No:50534     
Title: Re:パネポンの様な消える処理について    
>>為になるソースをありがとうございます。 
>>ソースを見させていただいたのですが 
>>判定は出来ますが落ちるような処理は出来なくないでしょうか? 
>>パッと切り替わるのではなく落下するような処理にしたいです。 

よく読んでください。判定&1段だけ落とす処理を行っていますよ?(^_^;)
落ちているように見せたいならば、呼び出し元で下記のように記述すればOKです。

while (drop_down() == true)
{
    /* グラフィック描画とかWaitとか… */
}



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

Name: ookami  ..ぴよぴよ(629ポイント)   Date: 2010/04/13(火) 16:14   No:50538     
Title: Re:パネポンの様な消える処理について    
落下途中の描画が必要なんですね。想像ですいませんが以下。

struct fallingBlock {
    int celX,celY,dy,type;
};

vector<fallingBlock> fallingBlockList;

---

for(int y=1; y<CEL_H;y++){ 
for(int x=0; x<CEL_W;x++){ 
    if( Map[x][y]!=0 && Map[x][y-1]==0) { // 下が空白なら fallingBlockList に登録
        fallingBlockList.push_back();
        fallingBlock &fb=fallingBlockList[fallingBlockList.size()-1];
        fb.celX=x;
        fb.celY=y;
        fb.dy=0;
        fb.type=Map[x][y];
        Map[x][y]=0;
    }
}}

---

for(i=0;i<fallingBlockList.size();i++) {
    fallingBlock &fb=fallingBlock[i];
    fb.dy+=4;
    if(fb.dy<32) {
        draw(...);
    } else {
        Map[fb.celX][fb.celY-1]=fb.type;
        fallingBlock.erase(i);
        i--;
    }
}
 編集済み


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

Name: 猫旅  ..かけだし(1,815ポイント)   Date: 2010/04/13(火) 19:50   No:50564     
Title: Re:パネポンの様な消える処理について    
何度もご回答ありがとうございます。

>>バグ様
落下するような処理にしたいのですが
drop_down() == trueと書いてどの様に落下させるのでしょうか?
どこのパネルの座標をどのように弄ればよいのかがわかりません・・・。
考えてみたのですが本当にわからないんです・・・。


>>ookami様
ソースを試したのですが
struct fallingBlock { 
    int celX,celY,dy,type; 
}; 

vector<fallingBlock> fallingBlockList; 
と書くとエラーが帰ってきてしまいます。

使っているライブラリはDXライブラリなのですが
vector<fallingBlock>のような書き方はどう意味なのでしょうか・・・。
無知で申し訳ないです。

1>.\game_scene.cpp(231) : error C2143: 構文エラー : ';' が '<' の前にありません。
1>.\game_scene.cpp(231) : error C4430: 型指定子がありません - int と仮定しました。メモ: C++ は int を既定値としてサポートしていません


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

Name: バグ  ..ハッカー(195,667ポイント)   Date: 2010/04/13(火) 20:21   No:50566     
Title: Re:パネポンの様な消える処理について    
>>落下するような処理にしたいのですが 
>>drop_down() == trueと書いてどの様に落下させるのでしょうか? 
>>どこのパネルの座標をどのように弄ればよいのかがわかりません・・・。 
>>考えてみたのですが本当にわからないんです・・・。

ひょっとして、私が記述したものをそのまま使っています?
あれは、以前私が作ったゲーム用の関数なので、猫旅さんのゲーム用に書き換えないと駄目ですよ?

もし、そうでないと仮定して、順番に説明しますね。

drop_down関数はブロックを並び替えて、消去された箇所があった場合に消去処理を行った後に呼び出す関数です。処理内容は、空白の1つ上のマスにブロックが存在する場合に1段落下させ、フィールド上のどこかで落下移動があった場合にtrueを返すというものです。


1:パネルを入れ替えた

2:入れ替えた結果を描画する

3:入れ替えたことによって消える箇所はあるか?無い場合は1に戻る

4:パネルを消去する

5:消去された状態を描画する

6:落下するパネルはあるか?(※ここでdrop_down関数を呼ぶ)無い場合は2へ戻る(連鎖処理の為)

7:落下した状態を描画して6へ戻る


大まかな流れはこんな感じです。これを自分のゲームで動くようにプログラムを書いていけばいいと思いますよ。


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

Name: ookami  ..かけだし(1,247ポイント)   Date: 2010/04/13(火) 21:09   No:50571     
Title: Re:パネポンの様な消える処理について    
すいません、説明不足でした;; そのままコピペではたぶん動かないと思います。(#include<vector> して using namespace std; すればとりあえず進むかもしれませんが...)

>>50538 について補足します。とりあえず考え方だけ...
・下が空白のブロックがあったらMap配列からfallingBlockListへ移す。
・fallingBlockListにあるブロックは、毎フレームごとに 4 ピクセルずつ落下させる。
・(ブロックの大きさが32ピクセルだとして、)32ピクセルに達したら、fallingBlockListからMap配列へ戻す。

(補足)
vectorは...そうですね、可変長の配列と思っていただければ。コンパイラによっては使えないかも。
http://www.kumei.ne.jp/c_lang/cpp/cpp_64.htm


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

Name: 猫旅  ..かけだし(2,004ポイント)   Date: 2010/04/13(火) 21:51   No:50576     
Title: Re:パネポンの様な消える処理について    
皆様、本当に回答ありがとうございます。

>>バグ様
その6〜7がわからないんです・・・。

6についてはどこのセルのパネルが消えたかの判定がわかりません。
提示して頂いたソースを改編するにもどの様に弄ればよいのかがわかりません。
※ソースについては完全に理解しております。

7については落下した状態を描画したいのですが
これが本当にわかりません・・・。

>>ookami様
ご丁寧にありがとうございます。
私のわからないことが出てきましたので少しソースを解析させて下さい。


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

Name: やっくん  ..上級者(16,745ポイント)   Date: 2010/04/13(火) 22:22   No:50581     
Title: Re:パネポンの様な消える処理について    
横からすみません。
バグさんの6、7について私なりに述べさせてもらいます。

まず、どのようなときにパネルが落ちる処理が必要かという点に着目すると
・パネルを入れ替えたときに下が空白である場合
・パネルを入れ替え&パネルのせり上げによってパネルが3個揃って消滅する場合
大体この2通りかと思います。

なのでバグさんが書かれたソースのdrop_down関数を
・パネルを入れ替えた後。
・パネルが消滅した後。
この2つの処理の後に挟みこめばいいのではないでしょうか?

drop_down関数の後は描画処理を当然しますが、drop_down関数では配列を1度しか走査してないので落ちるブロックは1マス分しか落ちてません。
つまり、2マス以上落ちなきゃ行けないブロックはまだ1マスしか落ちて無いので完全に落ちきって無い状況です。
なので、全てのブロックが落ちないという状況(戻値がfalse)になるまでdrop_down関数をループさせれば良いかと思います。


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

Name: 猫旅  ..かけだし(2,335ポイント)   Date: 2010/04/13(火) 22:32   No:50582     
Title: Re:パネポンの様な消える処理について    
皆様、回答ありがとうございます。

私の説明が下手なせいで理解できにくくて申し訳ないです。

drop_down関数については本当に理解しております。
添付させて頂いた画像の様にパネルは一つではないんです。

提示頂いたdrop_down関数を使ってもどこのマップ座標を弄ればよいのか?
y座標をどの様にいじればよいのかがわからないのです。

現在、描画は下記の様に行っております。
    //  マップの表示
    for(int i=0; i<CEL_H; i++){
        for(int j=0; j<CEL_W; j++){
            if(Play01.Map[i][j] == 1) DrawCenter( j*32+16, i*32+24-(int)Play01.UpCount , Handle.Paz01 , 0xff ) ;
            if(Play01.Map[i][j] == 2) DrawCenter( j*32+16, i*32+24-(int)Play01.UpCount , Handle.Paz02 , 0xff ) ;
        }    
    }


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

Name: やっくん  ..上級者(16,947ポイント)   Date: 2010/04/13(火) 23:13   No:50586     
Title: Re:パネポンの様な消える処理について    
drop_down関数では配列の中身を弄っているのでマップの座標を弄る必要は無いと思います。

例えば、猫旅さんのソースコードで言うならば
Play01.Map[0][0] = 1 だったのを Play01.Map[0][0] = 2
に変えたりする処理をdrop_down関数では行っています。

パネルが目では移動しているように見えてもパネルの座標が変わったのでは無く、配列の中身が変わっただけではないでしょうか?
パネルの移動は描画処理であたかもパネルの座標が変わっているように見せかけてるだけだと思います。

間違っていたらすみません(´д・;


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

Name: やっくん  ..上級者(16,973ポイント)   Date: 2010/04/13(火) 23:15   No:50587     
Title: Re:パネポンの様な消える処理について    
↑細かいですが訂正です。
 → で


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

Name: 猫旅  ..入門者(2,989ポイント)   Date: 2010/04/13(火) 23:53   No:50592     
Title: Re:パネポンの様な消える処理について    
本当に何度も解凍して頂いて申し訳ないと思っております。
私が質問させて頂いているのはどのようにして落ちるように見せているのかということです・・・。

例えばなのですがパネルが32×32だとします。
これを下に何もなければ1フレームで4ドット落ちる処理をしたいんです。
drop_down関数はあくまで配列の値を変化させるだけで落ちるというより交換しているだけですよね?
それをdrop_down関数の戻り値を使って描画で行うということなのですが
どの様に行えばよいのかが見当がつかないと質問させて頂いているのです・・・。

>>例えば、猫旅さんのソースコードで言うならば 
>>Play01.Map[0][0] = 1 だったのを Play01.Map[0][0] = 2 
>>に変えたりする処理をdrop_down関数では行っています。 
こんな処理はしていないですよね?
あくまでも配列の下が0なら上の値を落とす処理だけですよね?

>>パネルの移動は描画処理であたかもパネルの座標が変わっているように見せかけてるだけだと思います。 
それは理解していると何度も申しております・・・。
座標が変わっているような処理がわからないと申しているのです。

例えば描画の時に
i*32+24-(int)Play01.UpCount
の値が変えなければなりませんよね?

でもdrop_down関数では何処が落ちるのか・・・。
又、1フレーム(処理が一瞬ですので)しか落ちませんよね?

>>パネルの移動は描画処理であたかもパネルの座標が変わっているように見せかけてるだけだと思います。 
何度もお尋ねさせて頂いているのですがここがわからないのです・・・。

失礼な言い方でしたら本当に申し訳ないです・・・。
ただ本当にわからないので皆様にご教授いただきたいのです。


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

Name: conio [URL]  ..比類無きプログラマー(83,745ポイント)   Date: 2010/04/13(火) 23:53   No:50593     
Title: Re:パネポンの様な消える処理について    
あぁー・・・Y座標に関しては構造体に入れてしまったほうが良さそうですね。
※ただし、クライアント座標ではなく、 「i*32からどれだけズレているか?」の値。


----------------------------------------------------------------------
struct PANEL{
    int PanelType;    //パネルの種類
    int DifY;    //Y座標の差分
};

PANEL Play01.Map[CEL_H][CEL_W];

    //  マップの表示
    for(int i=0; i<CEL_H; i++){
        for(int j=0; j<CEL_W; j++){
            if(Play01.Map[i][j] == 1) DrawCenter( j*32+16, i*32+24-Play01Map[i][j].DifY , Handle.Paz01 , 0xff ) ;
            if(Play01.Map[i][j] == 2) DrawCenter( j*32+16, i*32+24-Play01Map[i][j].DifY, Handle.Paz02 , 0xff ) ;
        }    
    }
----------------------------------------------------------------------

この場合、例えばパネルが1段下がった時は、
(Play01.Map[0][2] → Play01.Map[1][2])

下がる前のDifYを0に戻し、2次元配列の値を書き換える必要があります。
-----------------------------------------------------------------
【1】Play01.Map[0][2].DifY = 0;      //差分を元に戻す
【2】Play01.Map[1][2].PanelType = Play01.Map[0][2].PanelType;      //落ちる前の位置のパネル情報を、落ちた先の配列に入れる
【3】Play01.Map[0][2].PanelType = 0;      //落ちる前の配列の値を空白にする
-----------------------------------------------------------------
※下がった後のパネルの上(Play01.Map[0][2])は空白、空白はPanelType == 0とする。


これなら、どれか1つだけ下げたい場合は
----------------------------
Play01.Map[0][2].DifY -= 1;
----------------------------
みたいにすればよいですし、

全体を上昇させたい場合は、
----------------------------------------
    for(int i=0; i<CEL_H; i++){
        for(int j=0; j<CEL_W; j++){
            Play01Map[i][j].DifY += 1;
        }    
    }
----------------------------------------
とすれば良いと思います。



 編集済み


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

Name: やっくん  ..上級者(17,116ポイント)   Date: 2010/04/14(水) 00:04   No:50596     
Title: Re:パネポンの様な消える処理について    
ごめんなさい(^^;
私の理解力不足のようでした。
ようやく今、理解できました。

>>>例えば、猫旅さんのソースコードで言うならば  
>>>Play01.Map[0][0] = 1 だったのを Play01.Map[0][0] = 2  
>>>に変えたりする処理をdrop_down関数では行っています。  
>こんな処理はしていないですよね? 
>あくまでも配列の下が0なら上の値を落とす処理だけですよね? 
こちらも謝ります。
仰るとおりで配列の中身を変えてると言いたかっただけです。


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

Name: 猫旅  ..入門者(2,795ポイント)   Date: 2010/04/14(水) 02:27   No:50614     
Title: Re:パネポンの様な消える処理について    
本当にありがとうございます。
皆様のお陰で落ちるという動作は出来ました。
但し問題がありまして起動時に必ず落下します。

>>conio様
その方法を実装させて頂きました。
ありがとうございます。

>>やっくん様
こちらこそ強くいってしまい申し訳御座いません。
折角答えて頂いていたのに・・・。
本当に申し訳ないです。

やっくん様の理解力不足ではなく私の質問が理解しにくい文章すぎるのだと思います。




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

Name: 猫旅  ..入門者(2,804ポイント)   Date: 2010/04/14(水) 02:27   No:50615     
Title: Re:パネポンの様な消える処理について    
画像を添付させて頂きます。

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

Name: バグ  ..ハッカー(195,856ポイント)   Date: 2010/04/14(水) 08:03   No:50620     
Title: Re:パネポンの様な消える処理について    
あぁ、なるほど!
ようやく、質問の意図を理解できました(^_^;)
私だったら、パネルをクラス(もしくは構造体)化しますね。色、消去フラグ、フィールド座標(X、Y)、描画用オフセット座標(X、Y)…このくらいのデータをメンバで持っていれば大丈夫かな?
まず、消去箇所のチェックだけを行う関数を作り、その関数内で消去箇所の消去フラグをtrueにします。
それから、オフセット座標を少し下へずらして描画を繰り返し、1マス分動いたら、オフセット座標をクリアして、次のステップへ…といった感じかな?
この方法なら、消去時のエフェクトを掛けたい場合も管理が楽にできると思います。


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

Name: バグ  ..ハッカー(195,935ポイント)   Date: 2010/04/14(水) 08:10   No:50622     
Title: Re:パネポンの様な消える処理について    
うわ、トンチンカンな書き込みをしてしまいましたm(_ _)m

前の書き込みで書いた『消去箇所』というのは『落下箇所』の誤りで、『消去フラグ』というのも『落下フラグ』の誤りです。


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

Name: 猫旅  ..入門者(2,912ポイント)   Date: 2010/04/14(水) 17:30   No:50645     
Title: Re:パネポンの様な消える処理について    
回答ありがとうございます。
最初のソースを見て頂ければおわかりになるかと思うのですが

// パズル
/*
class PAZZULE{
    public:
        bool Flg;
        float Px,Py;    // 位置座標
        float Mx,My;    // 移動速度
        int Cx,Cy;        // セル
        int Status;        // 状態
};

PAZZULE Pazzule01[OBJ_MAX];
*/


そのように書いておりました。
配列にデータをもたないと消去が出来ないのでは?と思い
(実際に質問させて頂きましたが)
配列に変更した次第で御座います。

やはり配列では出来ないのでしょうか?
他の関数(添付したソース以外に)も配列用に作ってしまってあるので
修正が正直しんどいです・・・。
その為、このままで行おうかと思います。


添付させて頂いた画像ではパネルの隙間があいておりますが
起動した時のみそれぞれのパネルが32ドット落ちるだけで
落ち終わったら隙間もなくなります。
この原因を知りたいのですが何故なのでしょうか?


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

Name: バグ  ..ハッカー(195,952ポイント)   Date: 2010/04/14(水) 19:26   No:50650     
Title: Re:パネポンの様な消える処理について    
構造体の配列でいいのでは?

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

Name: 猫旅  ..入門者(3,185ポイント)   Date: 2010/04/15(木) 06:40   No:50674     
Title: Re:パネポンの様な消える処理について    
構造体を使うように修正しました。
但し反転処理が上手く出来ません。

パズルにはそれぞれ1〜ナンバーがあり毎フレームそのナンバーを二次元配列に格納しております。
 ※この二次元配列なのですが反転処理縦横+2ずつ大きめにサイズを取ってあります。

そのナンバーを使って毎フレーム色々な処理をするような仕様に変更しました。


    {0, 1,2,3, 4,5,6, 0},
    {0, 7,8,9, 10,11,12, 0},

反転処理は選んだマスと周囲の3×3マスのナンバーの配列の
パターンが1なら2に2なら1に変更という処理にしようとしております。

しかし変な位置のマスが反転されてしまいます。
色々な部分を弄ってみたのですがやはり上手くいきません・・・。

どうかご教授願えないでしょうか?


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

Name: たいちう  ..比類無きプログラマー(72,406ポイント)   Date: 2010/04/15(木) 13:53   No:50682     
Title: Re:パネポンの様な消える処理について    
傍観していましたが、パズル好きの私としては看過できない点がありすので、
指摘させていただきます。

× : PAZZULE
○ : PUZZLE

以上が看過できない点です。
以下は単なるアドバイスですので、無視してくれても結構です。

難航しているようですが、もっと仕様を簡単にして試しましょうよ。

・パネルは1つのみ。初期表示はこのパネルが宙に浮いている状態。
・パネルをクリックすると落下開始。
・底まで落ちたら止まる。以後は変化なし。

もしもクリック検出の処理が難しければ、起動後1秒経過したら
落下開始という仕様でもよい。
空中で静止 → 落下 → 底で静止 となれば結構です。


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

Name: 猫旅  ..入門者(3,271ポイント)   Date: 2010/04/15(木) 20:02   No:50700     
Title: Re:パネポンの様な消える処理について    
>>たいちう様

落下のみの実装は出来ております。
しかし構造体でデータを持つようにしたため
反転処理がうまくいかないんです・・・。

選択した周囲9マスが反転するようにしたいのですが
現在のソースでは変な所が反転してしまいます。


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

Name: conio  ..比類無きプログラマー(84,573ポイント)   Date: 2010/04/15(木) 20:42   No:50702     
Title: Re:パネポンの様な消える処理について    
上手く把握できてないかもしれませんが、
「カーソルを中心とした3×3の領域を反転させる」というのは
下記の様な感じで良いのではないでしょうか?
----------------------------------------------
for(int i = Cursol.Cy - 1; i < Cursol.Cy+2; i++){
    for(int j = Cursol.Cx - 1; j < Cursol.Cx+2; j++){
        if(Map[i][j] == 1) {
            Map[i][j] = 2;
        }else{
            Map[i][j] = 1;
        }
    }
}
----------------------------------------------


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

Name: 猫旅  ..入門者(3,419ポイント)   Date: 2010/04/15(木) 20:49   No:50704     
Title: Re:パネポンの様な消える処理について    
conio様

回答ありがとうございます。
最初はそれと似たような方法で実装しておりました・・・。
構造体を使わずに二次元配列のみでの反転は成功しております。

しかしパネルのデータを構造体で持った方が良いというアドバイスを頂いたので
そちらの方法でコーディングを組み直してしまいました。



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

Name: conio [URL]  ..比類無きプログラマー(85,012ポイント)   Date: 2010/04/15(木) 21:21   No:50706     
Title: Re:パネポンの様な消える処理について    
------------------------------------------------------------------------------
・パネルの構造体を定義し、 その構造体の2次元配列を作る。
・カーソルの構造体を定義する。
・パネルの構造体と、カーソルの構造体をメンバに持つ PLAYER構造体を定義する。
------------------------------------------------------------------------------

大体 こんな感じで宜しいのでしょうか? (No:50674 から推測)
プレイヤーごとにPanel、Cursorの必要な情報を持つ、みたいな感じです。


で、おおまかなソースコードはこんな感じにしてはどうでしょう。
※何か意図を取り違えてたら指摘してください。
---------------------------------------------------------------
#define    MAP_W   6
#define    MAP_H  12

/*パネルの構造体*/
struct PANEL {
    int type;    //パネルの種類
    int DifX;    //差分X
    int DifY;    //差分Y
};

/*カーソルの構造体*/
struct CURSOR{
    int Cx;    //x座標
    int Cy;    //y座標
    int Graphic;   //カーソルの画像
};

/*プレイヤーの構造体*/
struct PLAYER{
    PANEL Map[MAP_H][MAP_W];
    CURSOR Cursor;
};

PLAYER player;

void Init(void){
  //省略
}

/*PLAYER型を参照渡しで渡す。そしてメンバに持つMapを反転させる。*/
void Reverse(PLAYER& pr){
    for(int i = pr.Cursor.Cy - 1; i < pr.Cursor.Cy+2; i++){ 
        for(int j = pr.Cursor.Cx - 1; j < pr.Cursor.Cx+2; j++){ 
            if(pr.Map[i][j].type == 1) { 
                pr.Map[i][j].type = 2; 
            }else{ 
                pr.Map[i][j].type = 1; 
            } 
        } 
    } 
}

//呼び方: Reverse(player); で呼ぶ。
---------------------------------------------------------------

【追記】
見ての通りコンパイルできる状態ではないので、誤字・脱字があるかもしれません。 編集済み


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

Name: 猫旅  ..入門者(3,466ポイント)   Date: 2010/04/16(金) 05:40   No:50735 解決!     
Title: Re:パネポンの様な消える処理について    
申し訳ありません。
解決しておりませんが締めさせて頂きます。
回答して下さった方々ありがとうございます。


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



Name: TKJ  ..ぴよぴよ(109ポイント)   Date: 2010/04/14(水) 13:24   No:50631       
Title: POST送信    
char para[]="title=test&name=test&mail=a@docomo.ne.jp&comment=test&pass=1234&ses=&cookie=&upfile=&id=test&mode=thread";
/*省略*/
strcpy(buf,"POST /test/test.php HTTP/1.1\r\n");
strcat(buf,"Host: ");
strcat(buf,host);
strcat(buf,"\r\n");
strcat(buf,"Content-Length: ");
strcat(buf,(const char *)strlen(para));
strcat(buf,"r\n");
strcat(buf,"\r\n");
strcat(buf,para);
strcat(buf,"\r\n");
strcat(buf,"\r\n");
/*省略*/

ちゃんと送信できているか自作したPHPに送信したのですが
送信できていないみたいです。
どこか悪いところありますか?


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


Name: Justy  ..伝説なるハッカー(519,314ポイント)   Date: 2010/04/14(水) 22:21   No:50660     
Title: Re:POST送信    
 それだけだと、なかなか推測も難しいんでけど……。
 Content-Typeはどこかで指定していますか?


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

Name: box  ..ハッカー(151,526ポイント)   Date: 2010/04/14(水) 22:49   No:50661     
Title: Re:POST送信    
それはそうと、そんなにstrcatを連発させずとも、
sprintf一個でOKでは?


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

Name: TKJ  ..ぴよぴよ(373ポイント)   Date: 2010/04/15(木) 01:07   No:50671     
Title: Re:POST送信    
boxさんが助言してくださったので

sprintf(buf,"POST /bbs.aqbb.net/bbs.php?guid=ON HTTP/1.1\r\n"
"Host: %s\r\n"
"Content-Length: 96\r\n"
"Cookie: 0\r\n"
"User-Agent: MSIE7.0\r\n"
"REFERER: http://www.yahoo.co.jp\r\n"
"Connection: close\r\n"
"\r\n"
"title=ABFA%s&name=ABFA&mail=&comment=ABFA&pass=&ses=%s&cookie=&upfile=&id=test&mode=thread\r\n"
"\r\n"
,host,ses,ses);

このように編集しました。
この後sendで送信し結果をrecvで受信してます。

send(s,buf,strlen(buf),0);
recN = recv(s,buf,sizeof(buf),0);

PHP側で

if($_POST["mode"] != 'thread')
{
echo'ERROR!!'
}
else
{
/*受信データを全表示*/
}

としています。
このとき正常にsendでPOST送信できていれば
recvのとき、「ERROR!!」は返ってこないはずなのですが
なぜか「ERROR!!」が返ってきます。
これはPOST送信できていないということ
だと思うのですが。。。


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

Name: TKJ  ..ぴよぴよ(827ポイント)   Date: 2010/04/15(木) 15:03   No:50683     
Title: Re:POST送信    
ちなみにrecvで受取った文字列はこうなります。

HTTP/1.1 200 OK
Date: Thu, 15 Apr 2010 05:53:20 GMT
Server: Apache
Cache-Control: no-cache, must-revalidate
Pragma: no-cache
Connection: close
Transfer-Encoding: chunked
Content-Type: text/html

300
<html lang="ja">
<head>
<meta http-equiv="Cache-control" content="no-cache">
<meta http-equiv="Content-Style-Type" content="text/css">
<meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS"><link rel
="stylesheet" href="pc.css" type="text/css"><title>えらー</title>
</head>
<body text="black" bgcolor="white" alink="green" vlink="blue">
<table width="100%"><tr><td bgcolor="skyblue"><div align="center">えらー</div></td></tr>< /table>
ERROR!!

-Aqua Board-

</body>
</html>


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

Name: ookami  ..入門者(3,191ポイント)   Date: 2010/04/15(木) 16:41   No:50686     
Title: Re:POST送信    
逆にブラウザが POST する時のヘッダを見てみて比較してみるというのはいかがでしょうか。
http://www.forest.impress.co.jp/article/2005/02/17/iehttp.html


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

Name: TKJ  ..かけだし(1,220ポイント)   Date: 2010/04/16(金) 04:29   No:50734     
Title: Re:POST送信    
ありがとうございます。
無事に送信することができましたが
どうしても納得のいかないことがあるので
教えてください。

パラメータを
sprintf(param,"title=%s&name=%s&comment=%s&ses=%s&id=test&mode=thread",title,name,comment,ses);
このようにしてchar型配列paramに格納しました。
POST送信するときはContent-Lengthで文字数を指定する必要があるので
strlen(param)
で文字数を取得しました。

sprintf(buf,"POST /bbs?guid=ON HTTP/1.1\r\n"
"REFERER: http://bbs.aqbb.net/form/test?guid=ON\r\n"
"User-Agent: MSIE7.0\r\n"
"Content-Type: application/x-www-form-urlencoded\r\n"
"Host: %s\r\n"
"Content-Length: %d\r\n"
"Cache-Control: no-cache\r\n"
"\r\n"
"%s\r\n"
"\r\n"
,host,strlen(eparam),eparam);

こんな感じです。
これで送信することができませんでした。
文字数というのは大文字と小文字で変わるのでしょうか?
例えば
aだったらContent-Lengthは1で
AだったらContent-Lengthは2
になるのですか?


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



Name: tara  ..ぴよぴよ(16ポイント)   Date: 2010/04/15(木) 21:43   No:50707       
Title: C++の質問です    
半径を入力し、円周、体積、円の表面積、球の表面積を出すC++のプログラムで、半径を2、3回打ったら終了というプログラムを分かる方がおりましたら教えてください。 編集済み

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


Name: box  ..ハッカー(152,141ポイント)   Date: 2010/04/15(木) 21:49   No:50708     
Title: Re:C++の質問です    
>半径を2、3回打ったら終了というプログラムを分かる方がおりましたら教えてください。

1回だけ計算するプログラムを書くことはできますか?
何かの処理を所定の回数だけ繰り返すときに使う構文は何ですか?


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

Name: tara  ..ぴよぴよ(47ポイント)   Date: 2010/04/15(木) 22:06   No:50709     
Title: Re:C++の質問です    
printfを使うんですかね?
講義を受けていない状態から課題を出されたもんで・・・


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

Name: たかぎ [URL]  ..ハッカー(175,662ポイント)   Date: 2010/04/15(木) 23:34   No:50714     
Title: Re:C++の質問です    
> 体積、

何の?

> 円の表面積

表面積というのは立体図形の表面の面積のことです。円は立体図形ではありません。

> 2、3回

こんなあいまいなプログラムは書けません。

> 講義を受けていない状態から課題を出されたもんで・・・

まだ新学期が始まったばかりなので、前年度の復習ということではないのですか?
分からないことがあれば、まずは先生に質問するのが筋です。


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

Name: tara  ..ぴよぴよ(225ポイント)   Date: 2010/04/16(金) 00:11   No:50721     
Title: Re:C++の質問です    
お恥ずかしながら単位を落として再履修しています。

体積は球のでした。円の表面積は勘違いです。
半径を三回打って終了させたい場合、breakをどのように使えばいいかわからないのです。

#include<stdio.h>
int main<void>
{
      int a,b,c,d;
      scanf("半径を入力",&a);

はじめはこれであっていますか?


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

Name: conio  ..比類無きプログラマー(85,081ポイント)   Date: 2010/04/16(金) 00:16   No:50722     
Title: Re:C++の質問です    
間違っています。

修正すべき箇所は、main関数の隣にあるカッコと、scanf関数の使い方です。
--------------------------------------------------------------------
int main<void>  → int main(void)
scanf("半径を入力",&a); → printf("半径を入力:");scanf("%d",&a); 
--------------------------------------------------------------------


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

Name: tara  ..ぴよぴよ(323ポイント)   Date: 2010/04/16(金) 00:32   No:50723     
Title: Re:C++の質問です    
ありがとうございます。
では

#include<stdio.h> 
int main(void)

      int a,b,c,d; 
      printf("半径を入力:");scanf("%d",&a);
となって、それぞれの値を求める式を演算子を使って構成すればいいですか?


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

Name: ぽこ  ..初心者(8,164ポイント)   Date: 2010/04/16(金) 00:36   No:50725     
Title: Re:C++の質問です    
構成すればいいです。

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

Name: tara  ..ぴよぴよ(393ポイント)   Date: 2010/04/16(金) 00:40   No:50726 解決!     
Title: Re:C++の質問です    
答えてくれた皆さん、夜分遅くにありがとうございました。
後は自分で調べながらやってみます。また分からないことがあればお世話になると思います。
本当にありがとうございました。。


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



Name: ムンバ  ..プログラマー(32,080ポイント)   Date: 2010/04/15(木) 23:22   No:50712       
Title: 管理人様へ    
こんばんは!お世話になります。

 龍神録プログラミングの館の1章(プロジェクトと素材を用意しよう)のページ
  http://dixq.net/rp/1.html
 内の、真ん中よりやや下

 「画像の上か順に」→「画像の上から順に」だと思います。
 またまた、私の勘違いでしたら申し訳御座いません。(謝
 おやすみなさい。<(_ _)>


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


Name: Dixq (管理人) [URL]  ..ウィザード(1,178,884ポイント)   Date: 2010/04/15(木) 23:43   No:50715     
Title: Re:管理人様へ    
>ムンバさん

こんばんは。
あぁ本当ですね。
誤字はあっちこっちにあると思うので、教えて頂けるとありがたいです。
もしまだあれば教えてくださいませm(_ _)m


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

Name: ムンバ  ..プログラマー(32,355ポイント)   Date: 2010/04/16(金) 00:04   No:50720 解決!     
Title: Re:管理人様へ    
こんばんはっ!
No:50594 で投稿させて頂いた通りです。

先日メールさせて頂いたのですが、お忙しい様で何よりです。w
自分が管理人だったら、密かに教えて頂いた方が良いかと思い、メールした次第です。
以前に、既読されてないメールが多数あると、こちらの掲示板でおっしゃっていたので
名指しでの書き込み、どうかご勘弁下さい。

今日は本当に駄目です。寝ます。おやすみなさい。(∪。∪)。。。zzzZZ


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



Name: 胡椒  ..ぴよぴよ(65ポイント)   Date: 2010/04/14(水) 20:14   No:50653       
Title: アイテムの透過処理についてです    
龍神録の39章についてなんですが、アイテムの画像を見ると周りが白くなっています。
しかしコンパイルしてビルドすると白い部分が透過処理されています。
これはどうしてでしょうか?
透過処理されるのは(0,0,0)の黒い部分だけなのではないのでしょうか?


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


Name: ookami  ..入門者(2,882ポイント)   Date: 2010/04/14(水) 20:31   No:50654     
Title: Re:アイテムの透過処理についてです    
DXライブラリで黒以外の色を透過する方法としては、SetTransColorか、
http://homepage2.nifty.com/natupaji/DxLib/function/dxfunc_graph.html#R15N7

あるいは、
http://homepage2.nifty.com/natupaji/DxLib/function/dxfunc_graph.html#R3N2
にあるように、
>LoadGraph 等の画像ファイルを扱う関数全般で、 指定のファイル名の末端に『_a』が付く画像ファイルが在った場合、 その画像ファイルを透明情報として読み込みます。
というのがあります。


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

Name: 胡椒  ..ぴよぴよ(81ポイント)   Date: 2010/04/15(木) 00:14   No:50665     
Title: Re:アイテムの透過処理についてです    
見てみたとことどちらも使っていないように思えるのですが・・・

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

Name: yu  ..熟練のプログラマー(42,539ポイント)   Date: 2010/04/15(木) 00:31   No:50667     
Title: Re:アイテムの透過処理についてです    
「白い」ではなくて透過されて背景が見えているのではないでしょうか。
確かに Windowsフォトギャラリー 等だと透過されているのか分かりにくいかもしれませんね。

png はαチャンネルを保存することができ、
png を読み込むとDXライブラリ側が自動で透過処理をしてくれます。
透明度を持たない普通の画像と「_a」の画像とが、一つのファイルで一緒になっている感じです。


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

Name: 胡椒  ..ぴよぴよ(124ポイント)   Date: 2010/04/15(木) 01:51   No:50672     
Title: Re:アイテムの透過処理についてです    
なるほど、そうだったんですか。ありがとうございます。

その透明情報を確認したり、透明情報付き画像と普通の画像をくっつけたりすることは出来るのでしょうか?



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

Name: Ma  ..比類無きプログラマー(84,090ポイント)   Date: 2010/04/15(木) 03:55   No:50673     
Title: Re:アイテムの透過処理についてです    
>透明情報を確認
私の場合透明度があるかどうかの判断は、拡張子で確認。
png や gif などはある。(拡張子が正しいとして)

透明情報の内容を見たいならそこそこ高級な画像編集ソフトか、pngならDXライブラリから透明度情報が引き出せたと思います。

>透明情報付き画像と普通の画像をくっつけたり
フォトショップ、SAI等、画像編集ソフトはそのようにして画像を合成します。
DXライブラリ内でななら、MakeGraph で作った画像ハンドルに両方を描画すれば合成できます。



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

Name: Dixq (管理人)  ..ウィザード(1,178,837ポイント)   Date: 2010/04/15(木) 15:35   No:50685     
Title: Re:アイテムの透過処理についてです    
無料ソフトが欲しいならGIMPというソフトを使うといいですよ^^

私はフォトショ派ですが似たような機能は沢山あります


Name: 胡椒  ..ぴよぴよ(144ポイント)   Date: 2010/04/15(木) 21:06   No:50705     
Title: Re:アイテムの透過処理についてです    
ありがとうございます!
無事、GIMPというソフトでできました!


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



Name: TKOZ  ..熟練のプログラマー(51,053ポイント)   Date: 2010/04/15(木) 17:06   No:50689       
Title: メタルスラッグにおけるヘヴィマシンガン    
現在、メタルスラッグのようなゲームを1人(TKOZ)だけで製作しています。(無謀w)
そこで躓いた(つまずいた)のが、ヘヴィマシンガンの実装の仕方です。

現在、作っているゲームでは、Zキーを押した時に、矢印キーの方向を調べて、角度に変換して
その方向に弾を連続発射させています。

しかし、それでは、0°、45°、90°、135°、180°、225°、270°、315°だけしか、
決まった角度しか弾がばら撒け(ばらまけ)ません。

どうしたら、メタルスラッグのように弾が滑らか(なめらか)にばら撒けるか分かりません。

誰か、どうしたら、メタルスラッグのように弾が滑らかに飛ぶか教えてください。


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


Name: softya [URL]  ..ハッカー(150,091ポイント)   Date: 2010/04/15(木) 17:19   No:50691     
Title: Re:メタルスラッグにおけるヘヴィマシンガン    
それは、間のモーションが無いからでしょう。
メタルスラッグ(プレイしたことは無いんですが)は、例えば横から上にキーを入れたとき間の角度のモーションがあります。0°、22.5°、45°、67.5°、90°とモーションすれば良いと思います。

TKOZさんの技術力を把握しきれておりませんので、とりあえずヒントだけ。


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

Name: TKOZ  ..熟練のプログラマー(53,341ポイント)   Date: 2010/04/15(木) 18:03   No:50692     
Title: Re:メタルスラッグにおけるヘヴィマシンガン    
とりあえず、コーディングしてみたのですが、バグが出来てしまいました。

テーブルを参照する形にしたのですが、上手くいきませんでした。
どう上手くいかなかったかというと、逆に斜め方向が飛ばなくなったばかりか、
上下左右しか弾が飛ばなくなりました。

int smooth(int i,int j,int count)
{
    //up:0 down:1 left:2 right:3

    /*
    00,01,02,03
    10,11,12,13
    20,21,22,23
    30,31,32,33
    */
    float Table[16][4]={
        {90,90,90,90},{90,90-22.5,90-22.5*2,90-22.5*3},{90,120,150,180},{90,60,30,0},
        {270,200,150,90},{270,270,270,270},{270,240,210,180},{270,300,330,0},
        {180,150,120,90},{180,210,240,270},{180,180,180,180},{180,120,60,0},
        {0,30,60,90},{0,330,300,270},{0,60,120,180},{0,0,0,0}
    };

    return Table[i+j*4][count];

}

int SmoothAngle()
{
    static int prevkey[4]={0};
    static int angle=0;
    static int count[4][4]={0};
    static int count2[4][4]={0};
    int up[4]={0};
    
    int i,j;
    
    up[0]=CheckHitKey(KEY_INPUT_UP);
    up[1]=CheckHitKey(KEY_INPUT_DOWN);
    up[2]=CheckHitKey(KEY_INPUT_LEFT);
    up[3]=CheckHitKey(KEY_INPUT_RIGHT);

    
    //前回キーがXXXで、今回キーがXXXだったら
    for(i=0;i<4;i++)
    {
        for(j=0;j<4;j++)
        {
            if(!prevkey[i] && up[j])
            {
                return smooth(i,j,count2[i][j]);
            }else if(!prevkey[i] && !up[j])
            {
                count2[i][j]=0;
            }
            count[i][j]++;
            if(count[i][j]>7)
            {
                count2[i][j]++;
                if(count2[i][j]>3)count2[i][j]=3;
                count[i][j]=0;
            }
        }
    }

    prevkey[0]=CheckHitKey(KEY_INPUT_UP);
    prevkey[1]=CheckHitKey(KEY_INPUT_DOWN);
    prevkey[2]=CheckHitKey(KEY_INPUT_LEFT);
    prevkey[3]=CheckHitKey(KEY_INPUT_RIGHT);
    

    return angle;
}

これらの関数を
メインループで
angle2=SmoothAngle();
        
CreateBullet(Player.x,Player.y+10,0,20,angle2);
として呼び出しています。 編集済み


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

Name: Justy  ..伝説なるハッカー(519,449ポイント)   Date: 2010/04/15(木) 18:12   No:50694     
Title: Re:メタルスラッグにおけるヘヴィマシンガン    
 テーブルじゃなくても実際に発射する角度と目標の角度を分けて、矢印キーによって変更するのは目標の角度にし
実際に発射する角度を目標の角度に近づくよう毎フレーム補完する、でいいような。

 例えば真横(90度)に打っていて、上が押されたら目標角度を 0度にして、
実際に発射する角度も90→0になるよう補完すれば滑らかにばらまけるかと。


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

Name: softya [URL]  ..ハッカー(150,267ポイント)   Date: 2010/04/15(木) 18:30   No:50696     
Title: Re:メタルスラッグにおけるヘヴィマシンガン    
仕組みを簡単に説明します。
まず、キーで決まる発射方向があると思います。
あと、今の銃の向いている方向です。
この2つは、連動しますがタイミングは銃の方向が遅れてついてきます。
キー入力がない場合は、最後のキーで決まる発射方向を維持します。
角度は度で持つと誤差が生じるので方向番号として持ちます。

(1)キーで決まる発射方向を変更する。キー入力がなければそのまま。キーの方向番号を決定。
(2)今の銃の方向番号とキーの方向番号がずれていれば、方向番号を1づつ加算又は減算する。
ただし、方向番号の差が90度を超える場合は瞬間的に振り向いた方が良いでしょう。

プログラムは何故か再帰を使っていたりして追いかけるのが大変そうなので見てません。


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

Name: TKOZ  ..熟練のプログラマー(53,774ポイント)   Date: 2010/04/15(木) 19:43   No:50699     
Title: Re:メタルスラッグにおけるヘヴィマシンガン    
float SmoothAngle(int TargetAngle,int Add)
{
    static float angle=0;
    static float angle2;
    static int count=0;
    static int count2=0;
    static int TargetNumber=0;

    
    switch(TargetAngle)
    {
    case 0:
        TargetNumber=0;
        break;
    case 45:
        TargetNumber=1;
        break;
    case 90:
        TargetNumber=2;
        break;
    case 135:
        TargetNumber=3;
        break;
    case 180:
        TargetNumber=4;
        break;
    case 225:
        TargetNumber=5;
        break;
    case 270:
        TargetNumber=6;
        break;
    case 315:
        TargetNumber=7;
        break;
    }
    
    if(fabs(TargetNumber-angle)>2.0)
        TargetNumber=angle;
    if(TargetNumber>angle)
    {
        angle+=0.1;
    }else if(angle<TargetNumber){
        angle-=0.1;
    }
    
    angle2=angle*45.0;

    
    return angle2;
}

こうなりましたが、バグが出てしまいます。
具体的には、DrawFormatStringで確認したのですが、TargetNumberの値が下がりません。

しかし、処理的には上手くいきましたよ。何がいけなかったのでしょうか? 編集済み


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

Name: TKOZ  ..熟練のプログラマー(54,774ポイント)   Date: 2010/04/15(木) 20:32   No:50701 解決!     
Title: Re:メタルスラッグにおけるヘヴィマシンガン    
結局、Justyさんとsoftyaさんの両方の特徴を使ったアルゴリズムになりました。

softyaさんの
>ただし、方向番号の差が90度を超える場合は瞬間的に振り向いた方が良いでしょう。 

Justyさんの
>テーブルじゃなくても実際に発射する角度と目標の角度を分けて、矢印キーによって変更するのは
>目標の角度にし 
>実際に発射する角度を目標の角度に近づくよう毎フレーム補完する、でいいような。 

>例えば真横(90度)に打っていて、上が押されたら目標角度を 0度にして、 
>実際に発射する角度も90→0になるよう補完すれば滑らかにばらまけるかと。

int SmoothAngle(int TargetAngle,int Add)
{
    static int Angle=0;
    int Angle2;

    if(Angle<TargetAngle)
    {
        if(TargetAngle>Angle)
        {
            Angle+=Add;
        }
        if(TargetAngle-Angle>90)
            Angle=TargetAngle;
    }
    else if(TargetAngle<Angle)
    {
        Angle-=Add;
        if(Angle>TargetAngle)
        {
            Angle-=Add;
        }
        if(Angle-TargetAngle>90)
            Angle=TargetAngle;
    }
    if(Player.muki==LEFT && TargetAngle==-1)
        return 180;


    Angle2=Angle;

    return Angle2;
}

ありがとうございました。解決です。


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



Name: 李峡  ..ぴよぴよ(31ポイント)   Date: 2010/04/13(火) 23:12   No:50585       
Title: ブロックの当たり判定    
2DでMr.ドリラーのような掘りゲーを作っているのですが、

キャラクターとブロックとの当たり判定
ブロック同士の連結(?)

などのプログラムの組み方が分かりません。
C++とDXで作っています。

教えてくださると助かります><


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


Name: sizuma [URL]  ..プログラマー(39,213ポイント)   Date: 2010/04/14(水) 00:21   No:50599     
Title: Re:ブロックの当たり判定    
http://www.youtube.com/watch?v=8VkmfLQLQ48

どんなゲームか知らなかったので動画見てきました。
キャラクターとブロックの当たり判定は普通に四角と四角の当たり判定でいいと思います。
ブロックはどういう条件で消えてるのか分かりませんけど、僕はこういうパズルものだととりあえず再帰でアプローチしますね。

>プログラムの組み方がわかりません
一体どれくらいのレベルでわからないのかわかりません。
全く手付かずの状態なのでしょうか?
ゲームの構造が全くわからないのであれば、参考のソースがあるであろうパズルゲームをまず作ってみることをオススメします。


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

Name: 李峡  ..ぴよぴよ(145ポイント)   Date: 2010/04/14(水) 01:36   No:50608     
Title: Re:ブロックの当たり判定    
回答有難うございます。

プログラミングはまったくの初心者なので
(FKUTを少しかじった程度です)

キャラクターの描画
ブロックの描画

までしか出来ていません・・・。

2Dでの当たり判定が全くわからない状態です。


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

Name: sizuma  ..プログラマー(39,393ポイント)   Date: 2010/04/14(水) 09:23   No:50626     
Title: Re:ブロックの当たり判定    
ならまずはブロックの上にキャラクターをのっけるところからですね。

http://www.c3.club.kyutech.ac.jp/gamewiki/index.php?%C5%F6%A4%BF%A4%EA%C8%BD%C4%EA

検索すればいろんなページがでてくるので、参考にしてみてください。
探せばもっとわかりやすいサイトがあるはずです。


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

Name: TKOZ  ..熟練のプログラマー(51,347ポイント)   Date: 2010/04/15(木) 17:15   No:50690     
Title: Re:ブロックの当たり判定    
Mr.ドリラー…なつかしい…。
昔、もどきを作った覚えがあります。
その時は、まだDXライブラリを知らなかった頃で、2005年辺りでしょうか。
YaneuraoGameScript2000を使って実装しました。
しかし、バグがたくさんあって結局完成はしませんでした。

しかし、アドバイスはできます。
2次元配列で枡(ます)を配置していきます。
そしたら、現在の座標が2次元配列のどこにあるかを調べて、
自分の位置を補正します。(現在座標を枡の大きさで割る作業)
そしたら、任意のキーでドリルを掘る事にして、掘ったところの値を0にします。
そうすれば、自然とドリラーっぽくなります。

こんな感じですかね…。(説明不足でしたら、詳しく説明します)


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



Name: ryo  ..ぴよぴよ(473ポイント)   Date: 2010/04/14(水) 15:30   No:50634       
Title: メモリ操作    
http://hengband.es.land.to/hengband-1.7.0-svn/S/19.html
http://hengband.es.land.to/hengband-1.7.0-svn/S/25.html

今上記ソースを参考に自分用のメモリ操作のツールを作っているのですが、
コンパイラの警告レベルを上げた場合に、
FREEに渡したintが使われていないためにコンパイルエラーになってしまいます。

標準命令のfreeが確保済みsizeを引数に取らないので、FREE(P, T)のTは必要ないのですが、
デバッグの時は、開放した領域をカウントしておきたいんです。

コンパイルエラーにならず、デバッグ時に開放した領域をカウントする方法はないでしょうか?

--- 例 ---

#include "z-virt.h"

int main(void)
{
>___int *a_int_p;
>___
>___a_int_p = RNEW(int);
>___FREE(a_int_p, int);  /* Error: When VERBOSE_RALLOC is not included */
>___
>___return 0;
}


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


Name: Justy  ..伝説なるハッカー(519,280ポイント)   Date: 2010/04/14(水) 16:35   No:50643     
Title: Re:メモリ操作    
>開放した領域をカウントしておきたいんです
 こんなんとかどうですか?

#include <stdlib.h>

typedef struct allocate_info
{
    size_t  size;
} allocate_info;

void *debug_malloc_(size_t size)
{
    allocate_info *ainfo = (allocate_info*)malloc(sizeof(allocate_info) + size);
    if(ainfo)
    {
        ainfo->size = size;
        return (void*)(ainfo + 1);
    }
    return NULL;
}

void debug_free_(void *p)
{
    if(p)
    {
        allocate_info *ainfo = (allocate_info *)p - 1;
        
// ainfo->size : サイズ
        free(ainfo);
    }
}

#define RNEW(T) (T*)(debug_malloc_(sizeof(T)))
#define FREE(P) debug_free_(P)

int main(void)
{
    int *p = RNEW(int);
    FREE(p);
    return 0 ;
}


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

Name: ryo  ..ぴよぴよ(493ポイント)   Date: 2010/04/14(水) 20:35   No:50655     
Title: Re:メモリ操作    
これならFREEした領域が分かりますし、
参考URLのFREE(P, T)の用に型のサイズを渡さなくていいので、手間が省けていいですね。

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


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



Name:  ..ぴよぴよ(386ポイント)   Date: 2010/04/11(日) 05:05   No:50448       
Title: 途中から自機狙いに変化するプログラムについてです    
龍神録のプログラムについて質問なんですが、途中から自機狙いに変化するプログラムが分かりません。
shot.cppに
double shotatan3(int n){
        return atan2(ch.y-enemy[shot[bullet[n].y].num].y,ch.x-enemy[shot[bullet[n].x].num].x);
}
というものを追加してshotH.cppに
void shot_bullet_H017(int n){
    int t=shot[n].cnt;
    int k;
    
    if(t>0 && t<=100 && t%50==0){
          for(int i=0;i<=60;i++){
              if(shot[n].flag!=2 && (k=shot_search(n))!=-1){
                    shot[n].bullet[k].knd    =3;//2番の弾
                    shot[n].bullet[k].angle  =PI2/60*i;//円形60個
                    shot[n].bullet[k].flag   =1;
                    shot[n].bullet[k].x      =enemy[shot[n].num].x;
                    shot[n].bullet[k].y      =enemy[shot[n].num].y;
                    shot[n].bullet[k].col    =4;//4番の色
                    shot[n].bullet[k].cnt    =0;
                    shot[n].bullet[k].state  =1;
                    shot[n].bullet[k].spd    =1;
                    se_flag[0]=1;//発射音鳴らす
                    }
          }
    }
    for(int i=0;i<SHOT_BULLET_MAX;i++){//全弾分
        if(shot[n].bullet[i].flag>0 && shot[n].bullet[i].state==1){//登録されている弾があれば
            int cnt=shot[n].bullet[i].cnt;
            if(cnt==100){
                shot[n].bullet[i].spd =2;
                shot[n].bullet[i].angle = shotatan3(n);
                }
            }
    }
と作ったのですが、コンパイルしてみると

'bullet' : 定義されていない識別子です。
'.y' の左側はクラス、構造体、共用体でなければなりません
'.num' の左側はクラス、構造体、共用体でなければなりません

といったエラーが出てしまいます。
初歩的な質問かもしれませんが、分かるかたがいましたら教えていただけませんでしょうか?


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


Name: ひよこ  ..比類無きプログラマー(80,848ポイント)   Date: 2010/04/11(日) 07:05   No:50449     
Title: Re:途中から自機狙いに変化するプログラムについてです    
enemy[shot[bullet[n].y].num].yをenemy[shot[n].num].yにすれば動くと思います。

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

Name:  ..ぴよぴよ(448ポイント)   Date: 2010/04/12(月) 18:36   No:50496     
Title: Re:途中から自機狙いに変化するプログラムについてです    
返答ありがとうございます。
しかし、ひよこさんのように書き換えると、敵が自機にショットを撃った瞬間の角度でしか動きません。
敵の撃ったショットのカウントhot[n].bullet[i].cntが100になった瞬間に自機と弾との角度を返すにはどうしたらよいでしょうか?


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

Name: ひよこ  ..比類無きプログラマー(81,396ポイント)   Date: 2010/04/12(月) 19:36   No:50501     
Title: Re:途中から自機狙いに変化するプログラムについてです    
私の環境ではちゃんと自機のほうへ行きましたよ。
一応上手くいったソースを載せておきます。
double shotatan3(int n){ 
        return atan2(ch.y-enemy[shot[n].num].y,ch.x-enemy[shot[n].num].x); 

//1発だけ、自機に向かって直線発射
void shot_bullet_H000(int n){
    int t=shot[n].cnt; 
    int k; 
     
    if(t>0 && t<=100 && t%50==0){ 
          for(int i=0;i<=60;i++){ 
              if(shot[n].flag!=2 && (k=shot_search(n))!=-1){ 
                    shot[n].bullet[k].knd    =3;//2番の弾 
                    shot[n].bullet[k].angle  =PI2/60*i;//円形60個 
                    shot[n].bullet[k].flag   =1; 
                    shot[n].bullet[k].x      =enemy[shot[n].num].x; 
                    shot[n].bullet[k].y      =enemy[shot[n].num].y; 
                    shot[n].bullet[k].col    =4;//4番の色 
                    shot[n].bullet[k].cnt    =0; 
                    shot[n].bullet[k].state  =1; 
                    shot[n].bullet[k].spd    =1; 
                    se_flag[0]=1;//発射音鳴らす 
                    } 
          } 
    } 
    for(int i=0;i<SHOT_BULLET_MAX;i++){//全弾分 
        if(shot[n].bullet[i].flag>0 && shot[n].bullet[i].state==1){//登録されている弾があれば 
            int cnt=shot[n].bullet[i].cnt; 
            if(cnt==100){ 
                shot[n].bullet[i].spd =2; 
                shot[n].bullet[i].angle = shotatan3(n); 
                } 
            } 
    }
}


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

Name:  ..ぴよぴよ(740ポイント)   Date: 2010/04/12(月) 21:08   No:50505     
Title: Re:途中から自機狙いに変化するプログラムについてです    
何度もすみません、自分の説明が足りませんでした。

ひよこさんのように書き換えたところ、敵が動かない場合は上手くいくのですが、敵が動いている場合が上手くいきません。

例えば、敵が自機のななめ左上にいる場合にショットを撃つとします。このまま敵も自機も動かなかった場合はショットカウントが100になったときにショットが右下に動きますよね。

しかし敵がショットを撃ったあとにショットのカウントが100になる前に敵が動き、自機のななめ右上に来てしまったときにショットのカウントが100になってしまった場合、ショット自体はななめ右上に残されたままなのに、ななめ右上に存在する敵と、自機との角度を返してしまって、ショットが左下に動いてしまうんです。

説明が複雑になっていしまって申し訳ありませんが、これを解決することは出来るでしょうか?


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

Name: ひよこ  ..比類無きプログラマー(81,374ポイント)   Date: 2010/04/12(月) 21:32   No:50507     
Title: Re:途中から自機狙いに変化するプログラムについてです    
簡単に言うと、ショットと自機との角度を求めればいいのではないでしょうか?

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

Name:  ..ぴよぴよ(849ポイント)   Date: 2010/04/14(水) 01:10   No:50606     
Title: Re:途中から自機狙いに変化するプログラムについてです    
はい。そういう風にしようとしたんですが、最初のようにエラーが出てしまって・・・
enemy[shot[bullet[n].y].num].yの部分がおかしいとは思うんですが具体的にどこがおかしいのかが分からないです。

回りくどいせつめいになってしまってすみません。


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

Name: ookami  ..かけだし(1,584ポイント)   Date: 2010/04/14(水) 01:40   No:50611     
Title: Re:途中から自機狙いに変化するプログラムについてです    
横からすみません。
shot[n].bullet[i].angle = shotatan3(n); 
を、
shot[n].bullet[i].angle = atan2(ch.y-shot[n].bullet[i].y,ch.x-shot[n].bullet[i].x);
にしてみてはいかがでしょうか。


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

Name:  ..ぴよぴよ(923ポイント)   Date: 2010/04/14(水) 13:08   No:50630     
Title: Re:途中から自機狙いに変化するプログラムについてです    
なりました!ありがとうございます!shotH.cppのほうを変えればよかったんですね。

ひよこさんもookamiさんも私のつたない説明に回答ありがとうございました!
すごくうれしかったです!


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

Name: ookami  ..かけだし(2,423ポイント)   Date: 2010/04/14(水) 14:47   No:50633     
Title: Re:途中から自機狙いに変化するプログラムについてです    
喜んでいただけてよかったです。

理解のために、最初のエラーについて説明します。

(1) 'bullet' : 定義されていない識別子です。 
(2) '.y' の左側はクラス、構造体、共用体でなければなりません 
(3) '.num' の左側はクラス、構造体、共用体でなければなりません 

の、(2)(3)は(1)に引っ張られて出ているものと思いますので、(1)について説明します。



元の定義が分からないのですが、例えば

struct BULLET {
    double x; // y以降は省略します。
};

struct SHOT {
    BULLET bullet[8]; // 8は適当です。最大値です。
};

SHOT shot[8]; // 8は適当です。最大値です。

...と宣言されていた場合、

直接アクセスできる変数は
shot[0].bullet[0].x
shot[0].bullet[1].x
:
shot[0].bullet[7].x

shot[1].bullet[0].x
shot[1].bullet[1].x
:
shot[1].bullet[7].x

:
:
:

shot[7].bullet[0].x
shot[7].bullet[1].x
:
shot[7].bullet[7].x


となります。ここまではよろしいでしょうか。bulletがSHOTのメンバであることに注意です。


問題の、
    return atan2(ch.y-enemy[shot[bullet[n].y].num].y,ch.x-enemy[shot[bullet[n].x].num].x);
の中で、
    bullet[n]
という部分。bulletはSHOTのメンバなので、(限定的な言い方ですが)「どのSHOTのbulletか分からない」、よって「bulletは定義されていない」というわけです。


>shotH.cppのほうを変えればよかったんですね。 
とのことですが、shot.cpp 側を変えて対応することもできます。

-- shot.cpp
double shotatan3(int n,int i){ 
    return atan2(ch.y-shot[n].bullet[i].y,ch.x-shot[n].bullet[i].x); 
}

-- shotH.cpp
shot[n].bullet[i].angle = shotatan3(n,i);

理解のしやすいように組むのがいいと思います。


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

Name:  ..かけだし(1,202ポイント)   Date: 2010/04/14(水) 17:02   No:50644     
Title: Re:途中から自機狙いに変化するプログラムについてです    
丁寧にありがとうございます。

すみませんけど、もう一つ質問いいでしょうか?

double shotatan3(int n,int i){  
    return atan2(ch.y-shot[n].bullet[i].y,ch.x-shot[n].bullet[i].x);  

とは自機とn番目のショットで出された、弾iと自機との角度を返す、ということですよね。

ものすごく初歩的な質問で申し訳ありませんが、

double shotatan3(int n,int i){  
    return atan2(ch.y-shot[n].bullet[i].y,ch.x-shot[n].bullet[i].x);  

の(int n,int i)の意味は何なのでしょうか?

double shotatan3{
  int n,i;  
    return atan2(ch.y-shot[n].bullet[i].y,ch.x-shot[n].bullet[i].x);  
}

とは違うのでしょうか? 


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

Name: ひよこ  ..比類無きプログラマー(81,428ポイント)   Date: 2010/04/14(水) 17:31   No:50646     
Title: Re:途中から自機狙いに変化するプログラムについてです    
引数として内部で宣言しているの違いです。
内部で宣言しただけだとすごい値が勝手に入ります。
引数を使うことで外部から値を設定しているのです。


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

Name: ookami  ..入門者(2,641ポイント)   Date: 2010/04/14(水) 18:43   No:50647     
Title: Re:途中から自機狙いに変化するプログラムについてです    
携帯からいけるかなっと。例を示します。

■例1

int func(int n){
    return n+1;
}

i=func(3); // i に 4 が代入される

■例2

int func(){
    int n;
    return n+1;
}

i=func(); // i に 何が代入されるかわからない。0かもしれないし、123456789かもしれない。ひよこさんのいう「すごい値」のこと
i=func(3); // また、これは実行できない。funcが引数をとらない関数として実装されているため。3 の代入先がないということです。 編集済み


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

Name:  ..かけだし(1,227ポイント)   Date: 2010/04/14(水) 20:09   No:50652     
Title: Re:途中から自機狙いに変化するプログラムについてです    
なるほど!よくわかりました!
本当に丁寧にありがとうございました!


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



Name: 南瓜  ..入門者(2,658ポイント)   Date: 2010/04/06(火) 17:46   No:50232       
Title: C言語でポーカーを作っているんですが    
いつもお世話になってます。今、C言語でポーカーもどき(ディーラーや対戦相手、ベッドなし)を作っているんですが
#include <stdio.h>
#include <time.h>
#include <stdlib.h>

int card[4][13];
char *number[13] = {"A","2","3","4","5","6","7","8","9","10","J","Q","K"};
char *mark[4] = {"♥","♦","♠","♣"};

int main (void) {
    int i;
    int draw_number;/*引いたカードの数*/
    int draw_mark;/*引いたカードのマーク*/
    char y_n;/*カードを引くか引かないかを判断*/
    int hand[5];/*自分の手札*/
    
    
    srand(time(NULL));
    printf("[ポーカー]\n");
    printf("プレイヤーのカードは\n");
    for(i = 0; i < 5; i++) {
        int draw_number, draw_mark;
        
        draw_mark = rand() % 4 + 1;
        draw_number = rand() % 13 + 1;
        
        printf("%s %s ", mark[draw_mark-1], number[draw_number-1]);
    }
    printf("\n");
    while(1) {
        printf("カードを交換しますか? > y/n \n");
        scanf("%c", &y_n);
        //    printf("交換するカードを選んで下さい >(1~5) \n");
        while (getchar() != '\n') { }
        if (y_n == 'y') {
            for(i = 0; i < 5; i++) {
                int draw_number, draw_mark;
                draw_mark = rand() % 4 + 1;
                draw_number = rand() % 13 + 1;
                
                printf("%s %s ", mark[draw_mark-1], number[draw_number-1]);
            }
            printf("\n");
        } else if (y_n == 'n') { break; }
        
    }
    switch (draw_number) {
      case 1: printf("ワンペア\n");
        break;
      case 2: printf("ツーペア\n");
        break;
      case 3: printf("スリーペア\n");
        break;
      case 4: printf("フォーペア\n");
        break;
      default: printf("他の役\n");
        break;
    }
    
    return 0;
}


上のコードの(30行目くらい)「//printf("交換するカードを選んで下さい >(1~5) \n");」
の交換するカードが1〜5枚ある場合交換するには、どのように書けばいいの
(int hand[5]を利用するんじゃないかと考えているんですが)と
役を判定するやり方(swithよりifやelse、int draw_number, draw_markを利用すると思うんですが)がわかりません
特に役を判定するやり方の考え方が聞きたいです
グローバル変数、構造体やヘッダー?を使えばより見やすく、わかりやすいソースができると
思うんですが、まだ良く判らないため、今はなるべく使わずに作りたいと思っています
OS:Mac OS X  コンパイル:gcc バージョン4.0.1


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


Name: たいちう  ..熟練のプログラマー(67,459ポイント)   Date: 2010/04/06(火) 18:06   No:50233     
Title: Re:C言語でポーカーを作っているんですが    
なかなか面白そうな課題(?)ですね。

> の交換するカードが1〜5枚ある場合交換するには、どのように書けばいいの 

例えば次の様な入力方法はいかがですか?

0 : 交換なし
4 : 4枚目を交換
135 : 1枚目・3枚目・5枚目を交換
12345 : 全部交換


> 役を判定するやり方(swithより ifやelse、int draw_number,
> draw_markを利用すると思うんですが)がわかりません

少しずつ作りましょう。
フラッシュかどうかは判定できますか?


> グローバル変数、構造体やヘッダー?を使えばより見やすく、わかりやすいソースができると
> 思うんですが、まだ良く判らないため、今はなるべく使わずに作りたいと思っています

グローバル変数は、見にくくわかりにくいソースができやすいとされています。
↓この部分がグローバル変数です。

> int card[4][13];
> char *number[13] = {"A","2","3","4","5","6","7","8","9","10","J","Q","K"};
> char *mark[4] = {"e&","f&","`&","c&"};


細かい指摘も沢山ありますが、とりあえずここまで。
頑張って下さい。


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

Name: box  ..ハッカー(151,515ポイント)   Date: 2010/04/06(火) 21:53   No:50237     
Title: Re:C言語でポーカーを作っているんですが    
ポーカーで

>       case 3: printf("スリーペア\n");
>         break;
>       case 4: printf("フォーペア\n");
>         break;

こういう状況ってあるんでしょうか?
カードは5枚しかないのに…。


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

Name: 南瓜  ..入門者(3,390ポイント)   Date: 2010/04/07(水) 00:06   No:50240     
Title: Re:C言語でポーカーを作っているんですが    
ご指摘ありがとうございます
とりあえず
#include <stdio.h>
#include <time.h>
#include <stdlib.h>

int card[4][13];
char *number[13] = {"A","2","3","4","5","6","7","8","9","10","J","Q","K"};
char *mark[4] = {"♥","♦","♠","♣"};

int main (void) {
    int i;
    int r;/*カードを引く時の選ぶ番号を入れる*/
    int draw_number;/*引いたカードの数*/
    int draw_mark;/*引いたカードのマーク*/
    int array_mark[4];
    char y_n;/*カードを引くか引かないかを判断*/
    char change;/*選んだ枚数分カードを替える*/
    int hand[5];/*自分の手札*/
    
    int flash;/*役のフラッシュを確認する*/
    
    srand(time(NULL));
    printf("[ポーカー]\n");
    printf("プレイヤーのカードは\n");
    for(i = 0; i < 5; i++) {
        int draw_number, draw_mark;
        r = 0;
        draw_mark = rand() % 4 + 1;
        draw_number = rand() % 13 + 1;
        
        printf("%s %s ", mark[draw_mark-1], number[draw_number-1]);
    }
    printf("\n");
    while(1) {
        printf("カードを交換しますか? > y/n (control + c で強制終了)\n");
        scanf("%c", &y_n);
        if (y_n == 'y') {
            printf("交換するカードを選んで下さい >(1~5) \n");
            scanf("%c", &change);
            while (getchar() != '\n') { }
            for(i = 0; i < 5 - change; i++) {
                int draw_number, draw_mark;
                draw_mark = rand() % 4 + 1;
                draw_number = rand() % 13 + 1;
                
                printf("%s %s ", mark[draw_mark-1], number[draw_number-1]);
            }
            printf("\n");
        } else if (y_n == 'n') { break; }
        
    }
    
    flash = 0;
    switch(array_mark[4]) {
    for(i = 0; i < 4; i++) {
    if (array_mark[i] == 5) {
                flash = 1;
                    printf("フラッシュ");
    } break; {
            }
        }
    }
    
    

return 0;
}


上記のソースに交換する回数をscanfで入力して、for文で繰り返す回数を引けば
交換だけはされるんじゃないかなと思ったんですが、うまくいかずorz
フラッシュの役の確認に関しては、
”マーク”を確認する配列と”フラッシュ”の変数を作り、"フラッシュ"を初期化して
”マーク”を確認する作業をfor文で行って、それが5個あるなら”フラッシュ”は”真”である
(正しいのかこの説明?)でループを脱出して”フラッシュ”が表示されるはずなんですが
表示されません。現時点では、これ以上案が出てきませんorz


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

Name: たいちう  ..熟練のプログラマー(67,631ポイント)   Date: 2010/04/07(水) 09:33   No:50245     
Title: Re:C言語でポーカーを作っているんですが    
フラッシュの判定が一番簡単だと思ったのですが、
役の評価よりも先にやることがありますね。
ちょっとルールを簡単にして試作しませんか?

【変更点】
1.手の変更はしない
2.役の評価はしない

【新しい仕様】
1.forループでカードを配ります(randで数字とスートを決定するということ)。
2.5枚のカードを配り終えてから、その5枚のカードを表示します。

まずはこれを作ってみてください。その後でだんだんと発展させましょう。


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

Name: 南瓜  ..入門者(3,954ポイント)   Date: 2010/04/07(水) 19:09   No:50259     
Title: Re:C言語でポーカーを作っているんですが    
新しく作り直しました
#include <stdio.h>
#include <time.h>

int main (void) {
    int card_total[4][13];/*全カードの枚数*/
    char *number[13] = {"A","2","3","4","5","6","7","8","9","10","J","Q","K"};/*カードの番号*/
    char *mark[4] = {"♥","♦","♠","♣"};/*カードのマーク*/
    int i;
    int draw_number;
    int draw_mark;
    
    srand(time(NULL));
    printf("[ポーカー]\n");
    printf("あなたの手札は\n");
    for(i = 0; i < 5; i++) {
        int draw_number, draw_mark;
            draw_number = rand() % 13 + 1;/*数字を出す*/
            draw_mark = rand() % 4 + 1;/*マークを出す*/
    printf("%s %s",draw_mark[mark-1], draw_number[number-1]);
    }
    printf("\n");

    return 0;
}

ただ、言われた仕様とズレてる気がします・・・


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

Name: たいちう  ..熟練のプログラマー(67,912ポイント)   Date: 2010/04/07(水) 23:58   No:50264     
Title: Re:C言語でポーカーを作っているんですが    
> ただ、言われた仕様とズレてる気がします・・・

はい。肝心な点でずれています。
配り終えてから表示です。

/* 五枚のカードをrandで決定 */
...

printf("決定しました。手札はこうです。\n");

/* 五枚のカードを表示 */
...

printf("念のため、もう一度同じ5枚をお見せします。\n");

/* さっきと同じ五枚のカードを表示 */
...

ということです。


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

Name: 南瓜  ..入門者(4,456ポイント)   Date: 2010/04/08(木) 08:29   No:50270     
Title: Re:C言語でポーカーを作っているんですが    
やっぱりズレてましたか・・・
#include <stdio.h>
#include <time.h>

int main (void) {
    int card_total[4][13];/*全カードの枚数*/
    char *number[13] = {"A","2","3","4","5","6","7","8","9","10","J","Q","K"};/*カードの番号*/
    char *mark[4] = {"♥","♦","♠","♣"};/*カードのマーク*/
    int i;
    int draw_number;
    int draw_mark;
    int n_hand[5];/*手札の数字を入れる配列*/
    int m_hand[5];/*手札のマークを入れる配列*/
    int display;/*手札を再表示する*/
    
    srand(time(NULL));
    printf("[ポーカー]\n");
    printf("あなたの手札は\n");
    /* 五枚のカードをrandで決定 */ 
    for(i = 0; i < 5; i++) {
        int draw_number, draw_mark;
            draw_number = rand() % 13 + 1;/*数字を出す*/
            draw_mark = rand() % 4 + 1;/*マークを出す*/
    printf("%s %s",draw_mark[mark-1], draw_number[number-1]);/* 五枚のカードを表示 */ 
    }
    printf("\n");
    printf("念のため、もう一度5枚をお見せます。\n");
    n_hand[5] = draw_number;
    m_hand[5] = draw_mark;
    printf("%s %s\n", n_hand[i], m_hand[i]);/* さっきと同じ五枚のカードを表示 */ 
        printf("\n");

    return 0;
}


これがうまくいけば、仕様通りに成るはず?ですが、コンパイルして実行すると
(null)(null)と表示されてしまいうまく行きません
何がいけないんでしょうか?


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

Name: バグ  ..ハッカー(194,430ポイント)   Date: 2010/04/08(木) 08:57   No:50272     
Title: Re:C言語でポーカーを作っているんですが    
n_hand[5] = draw_number;
m_hand[5] = draw_mark;


この部分おかしくないですか?
n_handとm_handは要素数が5の配列ですよね?
ならば、範囲は0〜4ですから…


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

Name: たいちう  ..熟練のプログラマー(68,491ポイント)   Date: 2010/04/08(木) 08:59   No:50273     
Title: Re:C言語でポーカーを作っているんですが    
まず前半ですが、私の書いた仕様では、「5枚決定」→「5枚表示」です。
南瓜さんのソースでは、(「1枚決定」→「1枚表示」)を5回繰り返しています。
これを解決すれば後半も多分わかるでしょう。

> int n_hand[5];/*手札の数字を入れる配列*/
...
> n_hand[5] = draw_number;

あと↑も致命的です。
n_handで使用してよいインデックスは0〜4です。


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

Name: 南瓜  ..入門者(4,873ポイント)   Date: 2010/04/08(木) 22:33   No:50337     
Title: Re:C言語でポーカーを作っているんですが    
#include <stdio.h>
#include <time.h>

int main (void) {
    int card_total[4][13];/*全カードの枚数*/
    char *number[13] = {"A","2","3","4","5","6","7","8","9","10","J","Q","K"};/*カードの番号*/
    char *mark[4] = {"♥","♦","♠","♣"};/*カードのマーク*/
    int i;
    int draw_number;
    int draw_mark;
    int hand[5];/*5枚の手札*/
    int display;/*手札を再表示する*/
    
    srand(time(NULL));
    printf("[ポーカー]\n");
    printf("あなたの手札は\n");
    /* 五枚のカードをrandで決定 */ 
    for(i = 0; i < 5; i++) {
        hand[i] = draw_number, draw_mark;
            draw_number = rand() % 13 + 1;/*数字を出す*/
            draw_mark = rand() % 4 + 1;/*マークを出す*/
    printf("%s %s",draw_mark[mark-1], draw_number[number-1]);/* 五枚のカードを表示 */ 
    }
    printf("\n");
    printf("念のため、もう一度5枚をお見せます。\n");
    for(i = 0; i < 5; i++) {
        hand[i] = draw_number, draw_mark;
        printf("%s %s",draw_mark[mark-1], draw_number[number-1]);/* 五枚のカードを再表示 */ 
    }
    printf("\n");

    return 0;
}

書き直しました。これで5枚決定→5枚表示の仕様になったはず・・・
ただ、再表示のほうは、最期のカードのマークと数字の5回繰り返しになってしまいましたが


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

Name: たいちう  ..熟練のプログラマー(68,998ポイント)   Date: 2010/04/09(金) 01:01   No:50347     
Title: Re:C言語でポーカーを作っているんですが    
> 書き直しました。これで5枚決定→5 枚表示の仕様になったはず・・・

なってないです。
インデントを正しくすると、次のように書かれています。
for(i = 0; i < 5; i++) {
    hand[i] = draw_number, draw_mark;
    draw_number = rand() % 13 + 1;/*数字を出す*/
    draw_mark = rand() % 4 + 1;/*マークを出す*/
    printf("%s %s",draw_mark[mark-1], draw_number[number-1]);/* 五枚のカードを表示 */ 
}
つまり、次の形です。
for(5回繰り返す) {
    1枚のカードを決定する
    1枚のカードを表示する
}
私の言う「5枚決定→5枚表示」は、次の形です。
for(5回繰り返す) {(このループでprintfは使わない)
    1枚のカードを決定する
}

for(5回繰り返す) {(このループでrandは使わない)
    1枚のカードを表示する
}

これができていないことに気付いてもらうために、
再表示も仕様に含めたのです。


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

Name: 南瓜  ..初心者(5,206ポイント)   Date: 2010/04/09(金) 18:30   No:50367     
Title: Re:C言語でポーカーを作っているんですが    
#include <stdio.h>
#include <time.h>

int main (void) {
    int card_total[4][13];/*全カードの枚数*/
    char *number[13] = {"A","2","3","4","5","6","7","8","9","10","J","Q","K"};/*カードの番号*/
    char *mark[4] = {"♥","♦","♠","♣"};/*カードのマーク*/
    int i;
    int draw_number;
    int draw_mark;
    int hand[5];/*5枚の手札*/
    int display;/*手札を再表示する*/
    
    srand(time(NULL));
    printf("[ポーカー]\n");
    printf("あなたの手札は\n");
    /* 五枚のカードをrandで決定 */ 
    for(i = 0; i < 5; i++) {
        hand[i] = draw_number, draw_mark;
            draw_number = rand() % 13 + 1;/*数字を出す*/
            draw_mark = rand() % 4 + 1;/*マークを出す*/
    }
        for(i = 0; i < 5; i++) {
        printf("%s %s",draw_mark[mark-1], draw_number[number-1]);/* 五枚のカードを表示 */ 
    }
    
    printf("\n");
    printf("念のため、もう一度5枚をお見せます。\n");
    for(i = 0; i < 5; i++) {
        printf("%s %s",draw_mark[mark-1], draw_number[number-1]);/* 五枚のカードを再表示 */ 
    }
    printf("\n");

    return 0;
}

なるほど、しかし気づかなかったorz
書き直しましたが、同じ5枚が表示されるだけで
5回分カードを選ぶためには、あとどこをどう書き足せばいいですか?


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

Name: box  ..ハッカー(151,482ポイント)   Date: 2010/04/09(金) 22:06   No:50372     
Title: Re:C言語でポーカーを作っているんですが    
>         hand[i] = draw_number, draw_mark;

これは何がしたいのですか?
日本語の文章で説明してみてください。


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

Name: 南瓜  ..初心者(5,287ポイント)   Date: 2010/04/10(土) 00:56   No:50376     
Title: Re:C言語でポーカーを作っているんですが    
それは、5枚の手札を入れる配列hand[5]に、for文で5枚分用意して数字とマークをrandで決定してから
printfで5枚分表示してもらってると思ったんですが違いますか?
hand[i]なのは、多めに配列を用意しておけば表示されないことは無いだろうと思ってです


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

Name: たいちう  ..熟練のプログラマー(69,284ポイント)   Date: 2010/04/10(土) 09:06   No:50384     
Title: Re:C言語でポーカーを作っているんですが    
> それは、5枚の手札を入れる配列 hand[5]に、
> for文で5枚分用意して数字とマークをrandで決定してから
> printfで5枚分表示してもらってると思ったんですが違いますか?

違うのです。
もしも手札が「スペードのストレートフラッシュ」だった場合、
配列 hand[5] には、具体的に何の値が入ると思いますか?


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

Name: 南瓜  ..初心者(5,362ポイント)   Date: 2010/04/10(土) 16:57   No:50420     
Title: Re:C言語でポーカーを作っているんですが    
hand[5]には♠が五つ(フラッシュ)と1,2,3,4,5みたいなストレートになる値が入っていていると思います。
hand[5] ={♠ 1, ♠  2, ♠ 3, ♠ 4, ♠ 5}みたいな感じだと思います


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

Name: たいちう  ..比類無きプログラマー(70,069ポイント)   Date: 2010/04/10(土) 17:17   No:50421     
Title: Re:C言語でポーカーを作っているんですが    
int hand[5]; と宣言されています。
hand[0]に入るのは1つの整数値なので、1とか、12とか、100とか、-1とかが入りうるわけです。
スペードの1は、どんな数値として入りますか?
hand[1]〜hand[4]は?


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

Name: 南瓜  ..初心者(5,527ポイント)   Date: 2010/04/10(土) 23:30   No:50438     
Title: Re:C言語でポーカーを作っているんですが    
まず、rand関数で選ばれた数をマークの数4で割るので0,1,2,3が出て、これに1を足して
1,2,3,4となり、♠は3つ目に設定したのでdraw_mark = rand() % 4 + 1の結果が3になった時に
♠が選ばれて、
数字も同じように13で割って0~12が出て、1を足して1~13になり、draw_number = rand() % 13 + 1
で1が選ばれた時に1になると思います。
だから、hand[0] = マークの"1"と数字の"1"が数値として入っていて、
for文でhand[1]~hand[4]が決定されていくと思います



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

Name: たいちう  ..比類無きプログラマー(70,263ポイント)   Date: 2010/04/11(日) 00:13   No:50439     
Title: Re:C言語でポーカーを作っているんですが    
> だから、hand[0] = マークの"1"と数字の"1"が数値として入っていて、
> for文でhand[1]~hand[4]が決定されていくと思います

そこを間違えているからプログラムが思う通りに動かないのです。

int x;
x = 5;

と書いた場合、xに入っているのは数値の5です。

int y;
y = 2, 3;

と書いた場合、yに2と3が入っているわけではありません。
次のプログラムを結果を予想してから実行してください。

#include <stdio.h>
int main() {
    int y;
    y = 2, 3;
    printf("x = %d\n", x);
    return 0;
}


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

Name: box  ..ハッカー(151,497ポイント)   Date: 2010/04/11(日) 00:38   No:50440     
Title: Re:C言語でポーカーを作っているんですが    
>     printf("x = %d\n", x);

コンパイルエラーが出ます。


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

Name: 南瓜  ..初心者(5,589ポイント)   Date: 2010/04/11(日) 00:45   No:50441     
Title: Re:C言語でポーカーを作っているんですが    
y = 2, 3;
printf("x = %d\n", x);

なので、実行できないと思い、コンパイルしたら
やはり実行できませんでした


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

Name: conio [URL]  ..比類無きプログラマー(81,372ポイント)   Date: 2010/04/11(日) 01:08   No:50442     
Title: Re:C言語でポーカーを作っているんですが    
printf("x = %d\n", x);


この部分は、
---------------------------
printf("y = %d\n", y);
---------------------------
の誤植であると思われます。

まぁ、それはともかく、コードを修正して
「1、2」と表示されるのかどうか?
を調べてみてはどうでしょう。

ついでに、結果を見た後に『コンマ演算子』で調べてみるのもいいかな と思います。
 編集済み


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

Name: Ma  ..比類無きプログラマー(82,459ポイント)   Date: 2010/04/11(日) 01:09   No:50443     
Title: Re:C言語でポーカーを作っているんですが    
>なので、実行できないと思い、コンパイルしたら 
>やはり実行できませんでした 
x と y をうちまちがえているだけ。
そこは自分で修正して、実行してください。

*追記
C言語かC++言語入門の配列を読み直してらいかがでしょうか? 編集済み


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

Name: たいちう  ..比類無きプログラマー(70,284ポイント)   Date: 2010/04/11(日) 10:04   No:50450     
Title: Re:C言語でポーカーを作っているんですが    
とほほ。つまらんミスで混乱させてしまいましたね。
失礼しました。


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

Name: 南瓜  ..初心者(5,599ポイント)   Date: 2010/04/11(日) 11:18   No:50452     
Title: Re:C言語でポーカーを作っているんですが    
こういうことでしょうか?
#include <stdio.h>
int main() {
    int x, y;
    x = 2;
    y = 3;
    printf("y = %d,%d\n",x,  y);
    return 0;
}


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

Name: たいちう  ..比類無きプログラマー(70,302ポイント)   Date: 2010/04/11(日) 11:33   No:50453     
Title: Re:C言語でポーカーを作っているんですが    
> こういうことでしょうか?

そうです。これを踏まえて、↓が間違いなのは判りますか?

> hand[i] = draw_number, draw_mark;
...
> だから、 hand[0] = マークの"1"と数字の"1"が数値として入っていて、
> for文でhand[1]~hand[4]が決定されていくと思います


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

Name: 南瓜  ..初心者(5,635ポイント)   Date: 2010/04/11(日) 11:41   No:50454     
Title: Re:C言語でポーカーを作っているんですが    
hand[i]の[i]の部分と
hand[i] = draw_number, draw_mark; に
変数が2つあるのが間違い
でいいでしょうか?


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

Name: Ma  ..比類無きプログラマー(82,561ポイント)   Date: 2010/04/11(日) 12:10   No:50455     
Title: Re:C言語でポーカーを作っているんですが    
結論
マーク用と数値用の変数を別々に用意するか、変換式をつくる などの対処が必要。

変換式なら
100*マークの値+数字の値
など。

混乱しにくい点で前者推奨。 編集済み


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

Name: 南瓜  ..初心者(5,091ポイント)   Date: 2010/04/11(日) 19:53   No:50464     
Title: Re:C言語でポーカーを作っているんですが    
    int i;
    int draw_number;
    int draw_mark;
    int n_hand[5];/*5枚の数字の手札*/
    int m_hand[5];/*5枚のマークの手札*/
    int display;/*手札を再表示する*/
    
    srand(time(NULL));
    printf("[ポーカー]\n");
    printf("あなたの手札は\n");
    /* 五枚のカードをrandで決定 */ 
    for(i = 0; i < 5; i++) {
        n_hand[5] = draw_number;
        m_hand[5] = draw_mark;
            draw_number = rand() % 13 + 1;/*数字を出す*/
        draw_mark = rand() % 4 + 1;/*マークを出す*/
//        printf("%s %s", m_hand[5], n_hand[5]);
        printf("%s %s", mark[draw_mark-1], number[draw_number-1]);/* 五枚のカードを表示 */ 
    }
    
    printf("\n");
    printf("念のため、もう一度5枚をお見せます。\n");
//    for(i = 0; i < 5; i++) {
//        printf("%s %s",draw_mark[mark-1], draw_number[number-1]);/* 五枚のカードを再表示 */ 
//    }
    printf("\n");

    return 0;
}

数字用とマーク用に変数を新たに書き足したんですが(同じ部分は省略しました)上記の様にコメントしないと
うまく作動しません。
特にprintf("%s %s", m_hand[5], n_hand[5]);を書けば、printf("%s %s", mark[draw_mark-1], number[draw_number-1]);は
いらないと思ったんですが、printf("%s %s", m_hand[5], n_hand[5]);のみにするとBus Errorとやらが
出てしまい、うまく行きません
どこがいけないんでしょうか?


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

Name: たいちう  ..比類無きプログラマー(70,498ポイント)   Date: 2010/04/11(日) 20:18   No:50466     
Title: Re:C言語でポーカーを作っているんですが    
> for(i = 0; i < 5; i++) {
>     n_hand[5] = draw_number;
>     m_hand[5] = draw_mark;
>     draw_number = rand() % 13 + 1;/*数字を出す*/
>     draw_mark = rand() % 4 + 1;/*マークを出す*/
> }
1つ目のループについて説明します。 まず、int n_hand[5]; と定義したいるので、 n_hand[0] から n_hand[4]が使用できます。 n_hand[5]というのは宣言した配列の範囲を超えているので不正アクセスです。 またループで5回繰り返しますが、計算結果を配列に順番に代入するためには、
for (i = 0; i < 5; i++) {
    n_hand[i] = ...;
}

と書きます。

最後に、draw_number[5]をn_handに代入したいようですが、
ループの1回目では、draw_numberは初期化すらされていません。
ループの5回目で計算したdraw_numberの値は、配列に代入されません。

配列の基本を全く理解できていないようです。
この問題を一時中断して、配列の復習をすることをお勧めします。


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

Name: 南瓜  ..初心者(5,173ポイント)   Date: 2010/04/11(日) 21:18   No:50470 解決!     
Title: Re:C言語でポーカーを作っているんですが    
わかりました。ご指摘ありがとうございますm(_ _)m
復習をし直して、もう少しマトモなポーカープログラムが
書けてからまた質問します
ありがとうございました。


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

Name: たいちう  ..比類無きプログラマー(70,617ポイント)   Date: 2010/04/12(月) 00:53   No:50484     
Title: Re:C言語でポーカーを作っているんですが    
配列の例題として、1〜5の2乗を計算して表示しましょうか。
for(5回繰り返す) {(このループでprintfは使わない)
    2乗の計算をする
}

for(5回繰り返す) {(このループで2乗の計算は行わない)
    計算結果を表示
}

実行結果を次のようにしましょう。

1
4
9
16
25


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

Name: 南瓜  ..初心者(5,367ポイント)   Date: 2010/04/14(水) 15:45   No:50638     
Title: Re:C言語でポーカーを作っているんですが    
#include <stdio.h>

int main (void) {
    int i;
    int hako[5];
    
    for(i = 0; i < 5; i++) {
        hako[i] = (i+1) *(i+1);
    }
    
    for(i = 0; i < 5; i++) {
        printf("%d\n", hako[i]);
    }
    return 0;
}

わざわざ例題までありがとうございます。
ただ、解決!を押してしまったのでここに載せていいのか
迷いました^^;


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

Name: たいちう  ..比類無きプログラマー(71,515ポイント)   Date: 2010/04/14(水) 16:13   No:50642     
Title: Re:C言語でポーカーを作っているんですが    
OKです。
これを踏まえて、No. 50464を直せますか?
難しければスートをなくして数字だけでも結構です。


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



Name: ムンバ  ..プログラマー(31,713ポイント)   Date: 2010/04/13(火) 23:56   No:50594       
Title: CGI(Perl)のログインページ(認証)につきまして    
こんばんは。お世話になります。
相変わらず、聞くだけのプログラマーになってしまっていて恐縮です。(涙

こちらの掲示板の「規約と注意事項」に

「ここはC言語を中心に、何でも質問出来る掲示板です。
 質問はC言語に限りません。何でも気軽に質問して下さい♪
 ただし、円滑に情報交換が出来るよう、規約を守ってご利用下さい☆」 
(以上、以下略で、すいません。)

と、ありましたので再度、甘えさせて頂きます。<(_ _)>

今、CGI(Perl)でweb上にログイン画面を表示し、フォームから
名前と暗証番号を入力し、送信して認証するスクリプト(ソース)を通して
名前と暗証番号の各々が一致すれば、HTMLで表示できるページを表示する。
(実際には、CGIスクリプト内でHTML表示命令?しますので、index.htmlの様なファイルは存在しません。)
の様な、添付させて頂いたプログラムを作っています。

このスクリプトは

 「入力画面でフォームを表示」
→「入力画面のフォームから入力された名前と暗証番号を記述し、ボタンを押して認証するスクリプトに送信」
→「認証するスクリプトが送信された値を受け取り、予め登録されている名前と暗証番号を認証」
→「名前と暗証番号が、それぞれ一致すれば新しいページを表示」
 「一致しなければ、新しいページは表示しないで別のメッセージHTML画面を表示する」
と言う様なスクリプトです。

そこで質問と言いますか、ご意見等お伺いしたいのですが
添付ファイルのソースでは、現在
このCGIにアクセスした時に、最初に表示されるログイン画面 sub GO で
フォームの、名前に「ムンバ」暗証番号に「123」と入力されると
新しいページ sub HTML を表示できる様にしてあります。

if($name eq "ムンバ" && $pass eq "123"){&HTML;

↑これ以外では、新しいページは表示されず
他に用意したメッセージ画面(sub message)に飛ぶ様にしてます。

そこで、質問です。

添付ファイルですと、名前に「ムンバ」、暗証番号に「123」として、一人だけ認証できる様にしていますが
今後、登録人数を例えば3人に限定したとします。

1<>ムンバ<>123
2<>munba<>123
3<>ムンボケ<>12321
(今の所、「配列:@」または「連想配列:%」を使って呼び出そうと思ってます。
 行頭の番号はID番号みたいなものです。)

この3人の「ID番号と名前と暗証番号」を、予め登録しておく場所なのですが
(添付ファイルの)メインcgiファイル内に登録すれば良いものか
別ファイルを作成して、そこに3人の「ID番号と名前と暗証番号」を記述しておいて
別ファイルをメインcgiファイルで呼び出し、認証したら良いのか迷ってます。

メインcgiファイル内に「ID番号と名前と暗証番号」を記述して認証する場合と
別ファイルを作成して、そこに「ID番号と名前と暗証番号」を記述し
メインcgiファイルから呼び出して認証する場合の
メリット・デメリットなど、ご存知の方がいらっしゃれば
ご意見ご指導の程、宜しくお願い致します。

(ini.cgiのソースが必要でしたら、アップさせて頂きます。)

誤字・脱字、または読みにくいスクリプト等御座いましたら
ご指摘頂けます様、宜しくお願い致します。

==========================================================================
もしもお目につきましたら・・・PSは勝手ながら、レス無しでお願いします!^^

 PS:
  >>softyaさんへ
   Perlの環境変数 ASL.LOG の事で、先日は大変お世話になりました。
   自鯖では、全ての環境変数が表示されてました。
   ですが、有償で(←言葉が悪いかもです。)
   運営されておりますプロバイダー等でのサーバーでは
   環境変数 ASL.LOG は、表示されない様になっているみたいです。
   ご指導ありがとう御座いました。<(_ _)>

  >>Dixqさんへ
   メールさせて頂きましたが、やっぱりレスは不要なので。w
   龍神録プログラミングの館で、脱字と思われる箇所がありました。
   またまた余計な事で、すみません。^^;

   さらにPS:
    千歳空港〜札幌市の間(札幌に向かって左)に、おいらのじぃ〜ちゃんの墓地があるので
    代わりに、お墓参りお願いしま〜す♪
     (お墓があるのは本当で、お願いは冗談です。すみません。w)
   体調、崩されない様にっ!^^
==========================================================================


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


Name: ムンバ  ..プログラマー(31,720ポイント)   Date: 2010/04/14(水) 00:44   No:50602     
Title: Re:CGI(Perl)のログインページ(認証)につきまして    
相変わらず、勝手ですみません。
今日は、寝てしまいます。
ご意見あれば、宜しくお願い致します。
おやすみなさい。(∪。∪)。。。zzzZZ


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

Name: ムンバ  ..プログラマー(31,836ポイント)   Date: 2010/04/14(水) 15:37   No:50636 解決!     
Title: Re:CGI(Perl)のログインページ(認証)につきまして    
こんにちは。

最終的に、ログファイルに残す事自体が危険だという結論になり
なおかつ、読み込みにも多少の時間がかかるので
今回は、CGI本態に入れる事にしました。
自己解決とさせて頂きます。
お騒がせしました。


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



Name: hide  ..かけだし(1,006ポイント)   Date: 2010/04/11(日) 20:32   No:50468       
Title: Cのソートについて    
Cのソートについて質問です。

struct Data
{
int code; // 社員コード
char name[32]; // 氏名
int birth; // 誕生日
struct Data *next // 次のデータを指すポインタ
}

上のような構造体を宣言したとします。

*nextの部分にstruct Data分の領域をmallocし、次のデータとして、データを増やしていきます。
この時、社員コード,又は指名の昇順にソートしたいのですが、データを入れ替えるのではなく、*nextの値だけを書き換えて昇順に参照できるようにしたいのですが、どうしてもやり方がわかりません・・

struct Data shain
{
{3,"murata",19830215,社員コード = 2のデータが格納されている構造体の先頭アドレス}, // 先頭アドレス
{2,"nakata",19870421,社員コード = 1のデータが格納されている構造体の先頭アドレス},
{1,"kubota",19790615,NULL},
};

上のようにデータが入っているとして、"murata"のデータがshainの先頭アドレスとします。

それを以下のようにソートしたいのです。

struct Data shain
{
{3,"murata",19830215,NULL},
{2,"nakata",19870421,社員コード = 3のデータが格納されている構造体の先頭アドレス},
{1,"kubota",19790615,社員コード = 2のデータが格納されている構造体の先頭アドレス}, // 先頭アドレス
};

そして、shainの先頭アドレスを"kubota"に設定したいのです。

このやり方をどなたか、教えてもらえないでしょうか?

よろしくお願いします。



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


Name: 組木紙織  ..比類無きプログラマー(78,884ポイント)   Date: 2010/04/11(日) 21:24   No:50471     
Title: Re:Cのソートについて    
双方向リストじゃなくて単方向リストですか?
単方向ならマージソートするのがやりやすいんじゃないでしょうか?





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

Name: ookami  ..かけだし(1,739ポイント)   Date: 2010/04/14(水) 02:14   No:50612     
Title: Re:Cのソートについて    
曲解かもしれませんが
struct Data *next // 次のデータを指すポインタ 
の代わりに
struct Data *codenext // 次の社員コードのデータを指すポインタ
struct Data *namenext // 次の名前のデータを指すポインタ 
を持たせて二重管理するのはどうでしょうか。挿入・削除の時だけ気をつければソートの必要そのものがなくなるのではと考えたので。


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

Name: 組木紙織  ..比類無きプログラマー(79,226ポイント)   Date: 2010/04/14(水) 12:53   No:50628     
Title: Re:Cのソートについて    
>ookamiさん
二重管理は手法としてはありだと思いますが、今回の場合どうなんでしょうか。
実際に使うためだとしたら、いいですが、
課題に使うのだとしたら、だめですよね。


リンクリストのマージソートの方法です。
http://www.geocities.jp/ky_webid/algorithm/021.html


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

Name: たいちう  ..比類無きプログラマー(71,468ポイント)   Date: 2010/04/14(水) 13:30   No:50632     
Title: Re:Cのソートについて    
私が実装するとしたら、(struct Data *)の配列を用意します。

1) リストの各要素へのポインタを配列に代入。
2) ポインタの先を参照しながら配列をソート。
3) 配列を見ながら、リストのnextを順に設定。


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



Name:  ..入門者(3,723ポイント)   Date: 2010/04/12(月) 18:42   No:50497       
Title: printf関数で勝手に改行される    
data[0].name = AAAa
data[1].name = aaaA(どちらもchar型)
としてある状態で

for(i = 0;i < 2;i++){
    printf("%d|%d|%s\n",i,hantei(int型で0が入ってます),data[i].name);
}
出力: 0|0|AAAa 1|0| aaaA と表示されてしまいます。なぜか勝手に改行が入ってしまいます。
    printf("%d|%d|%s\n",i,hantei,data[0].name);
    printf("%d|%d|%s\n",i,hantei,data[1].name);

としてみても同じ結果になりました。
解決方法を調べてみようにも検索キーワードを
どう設定すればよいのかわからず、どうにもなりませんでした。
解決策を教えてください。お願いします。


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


Name: 組木紙織  ..比類無きプログラマー(78,907ポイント)   Date: 2010/04/12(月) 18:46   No:50498     
Title: Re:printf関数で勝手に改行される    
"\n"は改行を意味します。
これを省いて下さい。

[追記]
バックスラッシュを円マークと読み替えてください。

 編集済み


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

Name:  ..入門者(3,836ポイント)   Date: 2010/04/12(月) 20:16   No:50503     
Title: Re:printf関数で勝手に改行される    
出力: 0|0|AAAa 1|0| aaaA
ではなく
出力:
0|0|AAAa
1|0|
aaaA
となっているのを
出力:
0|0|AAAa
1|0|aaaA
こうしたかったのです。

すみません、間違えて改行をし忘れていたようです。
本当にすみません、再度でありますが、よろしくお願いします。


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

Name: 組木紙織  ..比類無きプログラマー(78,953ポイント)   Date: 2010/04/12(月) 20:29   No:50504     
Title: Re:printf関数で勝手に改行される    
実行可能な最小規模のコードをあげてください。
提示された状況では出力結果の再現できません。


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

Name:  ..入門者(4,546ポイント)   Date: 2010/04/12(月) 21:15   No:50506     
Title: Re:printf関数で勝手に改行される    
#include <windows.h>
#include <stdio.h>

int read_url_file(void);
int display();

struct checkdata{
    char name[256];
    char url[256];
    int size;
    int day;
    int month;
    int year;
    int hour;
    int minute;
    int second;
};

int gyo = 0;
struct checkdata data[256];

int main(void){

    read_url_file();

    display();

    return 0;
}

int display()
{
    int i,hantei;
    
    hantei = 0;

    for(i = 0;i < 2;i++){
        printf("%d|%d|%s\n",i,hantei,data[i].name);
    }

    return 0;
}

int read_url_file(void){
    int i = 0;
    int ret;
    FILE *Udata;

    Udata = fopen("url1.fs","r");

    while((ret = fscanf(Udata,"%[^,],%[^,],%d,%d,%d,%d,%d,%d,%d",data[gyo].name,data[gyo].url,&data[gyo].size,&data[gyo].day,&data[gyo].month,
        &data[gyo].year,&data[gyo].hour,&data[gyo].minute,&data[gyo].second))!= EOF){
            gyo++;
    }

    fclose(Udata);
    return 0;
}



ファイルurl1の内容は
AAAa,http://ath.cx/bbs/sst/sst.php?act=dump&cate=tiraura&all=14104&nfa=11#kiji,41598,2,2009,11,15,23,0
aaaA,http://cx/bbs/sst/sst.php?act=dump&cate=tiraura&all=14104&n=11#fakiji,41598,2,2009,11,15,23,0

こんなかんじです。何度も手間をおかけし申し訳ありません
こんなかんじでどうでしょうか?


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

Name: 組木紙織  ..比類無きプログラマー(79,040ポイント)   Date: 2010/04/12(月) 21:46   No:50508     
Title: Re:printf関数で勝手に改行される    
現象を再現できる"最小規模"のコードをあげて欲しかったです。


"%[^,],%[^,],%d,%d,%d,%d,%d,%d,%d"

" %[^,],%[^,],%d,%d,%d,%d,%d,%d,%d"


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

Name: ぽこ  ..初心者(8,059ポイント)   Date: 2010/04/12(月) 22:00   No:50509     
Title: Re:printf関数で勝手に改行される    
前の行の改行コードがメンバnameの中に入っているためにそのような現象が起きています。
書式指定の先頭に空白を入れてください。
"%[^,],%[^,],%d,%d,%d,%d,%d,%d,%d"
→" %[^,],%[^,],%d,%d,%d,%d,%d,%d,%d"

参考URL
http://www9.plala.or.jp/sgwr-t/c/sec05.html#s5-4

被っちゃったorz 編集済み


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

Name:  ..入門者(4,716ポイント)   Date: 2010/04/13(火) 20:53   No:50570 解決!     
Title: Re:printf関数で勝手に改行される    
 解説ありがとうございます。参考URLまでも
出していただき、またCに対する理解が一歩深まりました。

 実行できる最小規模のソースでこのレベルです。
もっともっと小さくなるのでしょうが、
今の私のレベルではこれよりも小さくしようとすると
伝えたいことを伝えられなくなりそうで、長々としたもの
はりつけてしまいました。本当にすみません。
 質問の方法が悪かったにも関わらず、ご協力
本当に感謝してます。ありがとうございます。
また質問させていただくこともあると思いますが、
その時も、ご助力いただければ幸いです。


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

Name: 組木紙織  ..比類無きプログラマー(79,241ポイント)   Date: 2010/04/14(水) 13:02   No:50629     
Title: Re:printf関数で勝手に改行される    
規模を小さくしてprintf()が原因でないことに気づいてほしい意図がありました。
表現がきつかったとおもいます。
(そこは反省点ですね)

もう少し小さく書くためには
配列を使わない
fscanf()の書式指定を減らすとともに入力ファイルの内容も出来るだけ減らす
ことが出来ると思います。


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



Name: やっぽ  ..ぴよぴよ(297ポイント)   Date: 2010/04/09(金) 12:34   No:50357       
Title: ホームページを自動更新する方法    
こんにちは、以下の3点について、有意識の方、教えてください。

質問1.
5秒おきに自動更新されるhtmlファイルがあったとします。
これをホームページ上に、更新が確認されたらもしくは一定間隔ごとにアップロードする方法を
模索しています。手作業ではなく、プログラミングで実装です。
個人的な考えとしては、マウスやクリックを自動化し、FFFTPを用いてあげる方法を考えました。
しかしながら、やや無理やりというか、理論的ではないというか、応用性が乏しいな、と感じます。
なので、マウスやクリックを自動操作してではない方法で実装するにはどうすればいいでしょうか。
案をお待ちしています。

質問2.
5秒おきに自動更新されるcsvファイルがあったとします。
して、このcsvファイルの内部数値を吸い取り、画面に表示する実行ファイルを
Dxライブラリで作成しました。
csvファイルが5秒おきに更新されるため、実行ファイルも5秒おきに更新されます。
このDxライブラリで作成した実行ファイルで表示されている画像を、
一定間隔でホームページ上にアップロードする方法はありませんか?
アドバイスをお待ちしています。


質問3.
 htmlファイルをインターネットにアップロードし、用意してあるホームページ上に表示させるには
どのような方法がありますか。
 手作業ではなく、C言語での実装で、です。


では、アドバイスなどありましたら、お願いします。


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


Name: たかぎ [URL]  ..ハッカー(174,605ポイント)   Date: 2010/04/09(金) 12:41   No:50358     
Title: Re:ホームページを自動更新する方法    
サーバー側で直接更新するのではなく、アップロードするということでしょうか?
ファイルサイズや回線速度等の情報が不明なので、負荷的なことは何ともいえませんが、FFFTPではなく、直接FTPで送信するほうがよいと思います。
FTPの実装が面倒なら、内部でftpコマンドやwputコマンド(Windows版もあります)を呼び出すなどすれば、比較的簡単に実現できるはずです。


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

Name: ookami  ..かけだし(1,858ポイント)   Date: 2010/04/14(水) 09:21   No:50625     
Title: Re:ホームページを自動更新する方法    
バッチファイルで実装する提案ですが、以下のサイトはいかがでしょうか。「C言語での実装で、です。」とのことなので曲解なんですが...自動化はできます。
http://www.ponko2.com/ftp_bat.html


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



Name: 美沙  ..ぴよぴよ(124ポイント)   Date: 2010/04/12(月) 22:19   No:50510       
Title: dlsymについて    
教えてください。

dlsym で ライブラリのシンボルの中身を知りたいです。

const char *aaa = "aaaa"; シンボルとした際、

void *handle;

handle = dlopen( "ライブラリパス", RTLD_LAZY );

void *n = dlsym( handle, "aaa" );

といった感じで const char の文字列を取ってこれるのでしょうか?


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


Name: ookami  ..かけだし(1,801ポイント)   Date: 2010/04/14(水) 09:01   No:50624     
Title: Re:dlsymについて    
呼び水として。以下のサイトなどはいかがでしょうか。
http://docs.hp.com/ja/B2355-60104-06/dlsym.3C.html

あと、何がどういうふうに分からないのか...というか...例えば、「〜といった感じ」ではなく、実際に書かれたソースコードと、出たエラーを載せるなどすれば、回答も集まりやすいかもしれません。


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



Name: レッドリ  ..入門者(2,859ポイント)   Date: 2010/04/13(火) 20:28   No:50567       
Title: 配布したゲームのデータを盗まれないようにする方法    
こんにちは、レッドリです。
配布したゲームを解析されない方法について質問します。
私はVC++2008EEとDXライブラリでゲームを制作しているのですが
配布を考えています。

その場合、データを解析されないようにしたいです。
自分が今やっていることは

@デバッグ情報を生成しないをチェックする
Aアーカイブにパスをかける
Bアーカイブの形式をdatにする

です。
これらだけでは不十分でしょうか?

exe解析やアーカイブ解析をできるツールがあるらしいので
少々恐いです。
ゲームを配布したことがある人など詳しい方
どうか教えて頂けないでしょうか?
 編集済み


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


Name: たいちう  ..比類無きプログラマー(71,164ポイント)   Date: 2010/04/13(火) 23:34   No:50589     
Title: Re:配布したゲームのデータを盗まれないようにする方法    
> その場合、データを解析されないようにしたいです。

データとは?画像とか音声とかパスワードとか?

原理的に解析は可能と思ってください。
凄腕のハッカーがその気になったら、
生半可なプロテクトなど何の役にも立ちません。

あなたのゲームが信じられないほど魅力的ならば話は別ですが、
凄腕のハッカーがその気になる確率は低いでしょう。
付け焼刃で「画像を抜いてやれ」とかいう人のハードルを少々高くすることは、
比較的ですが、難しくはありません。

クラッキングやクラッキング対策の本を読んでみると良いでしょう。
結局のところ、費用対効果の話です。

私のお世話になったふざけた入門書を紹介しますが、
表紙に抵抗があるなら買わない方が良いでしょう。
表紙よりも中身の方がふざけています。

http://www.amazon.co.jp/dp/4798008532


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

Name: Justy  ..伝説なるハッカー(518,814ポイント)   Date: 2010/04/13(火) 23:46   No:50590     
Title: Re:配布したゲームのデータを盗まれないようにする方法    
 データを解析、というのはゲーム内で使われるファイルの中身の方の話で、
メモリ内のデータについては問わない、ということでいいでしょうか?


 基本的にやればやるほど解析を困難にすることはできますが、100%解析されないということは
根本的には無理です。

 解析されたくない場合は配布しないのが一番で、配布するにしても契約で縛るとか、
信頼できる人に配布先を限るなどプログラム以外の方法も検討が必要だと思います。


>これらだけでは不十分でしょうか
 1はほとんど意味がありません。VisualStudioのデバッグ情報は元から exeとは別のファイルにあります。
 3は意味がよくわかりません。拡張子を変えるという意味ですか?
 
 2はパスのかけかたとかにも依るのでしょうが機密性の高い情報、或いは流出すると
非常に問題のあるデータが含まれているなら不十分かもしれません。
 しかし、ただのゲームの素材などのデータなら十分でしょう。
 
 
>exe解析やアーカイブ解析をできるツールがあるらしいので 少々恐いです
 解析者のターゲットになりそうなほどの、解析されると致命的なゲーム(オンライン対戦とか)を作っている、
ということでしょうか?

 本格的にやりはじめると結構手間暇がかかります。
 しかし、気休め程度でよければ強固にするなら幾つかシンプルな手はいくつかあります。

・ ライセンス条項で禁止する
・ パスをソース内に直打ちしない
・ DXライブラリのアーカイブのパスは簡単に解析される可能性が高いので使わない。
 もし使うのであれば、その中に入れたファイルも別の形式、別のキーで暗号化する。
・ 各ファイルのハッシュリストを隠しておいて、読み込み時に改変チェックをする

とか。


 そういえば思い出しました。こんな製品がありました。

オンラインゲーム保護ソフト CrackProofゲームエディション
http://www.crackproofge.biz/

 ちょっと高いですが、検討する価値はあるかもしれません。


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

Name: sizuma [URL]  ..プログラマー(39,054ポイント)   Date: 2010/04/14(水) 00:06   No:50597     
Title: Re:配布したゲームのデータを盗まれないようにする方法    
>たいちうさん
欲しいものリストに登録しました。
この分野、よさそうな本って大体5000円以上するから手が出しにくいんですよね。
「ハッキング非公式ガイド」、「ハッカーの教科書」など。
ふざけた表紙の本は、買ったら授業中に読んでやろうと思います!

>レッドリさん
たいちうさんのおっしゃるとおりだと思います。
著作権を無視してシステムを流用するような人のゲームが流行るとも思えませんしね。
ていうか素人が作るゲームなんて全部オーブンソースでいいと思うんですけどね。
最新技術を使わない素人が、ゲームという分野で独創性のあるプログラムを作れるとは思えないですから。

クラック対策を勉強するのはすごくいいことだと思います。


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

Name: レッドリ  ..入門者(3,140ポイント)   Date: 2010/04/14(水) 01:00   No:50605 解決!     
Title: Re:配布したゲームのデータを盗まれないようにする方法    
みなさんありがとうございます。
自分の目的はたいちうさんのおっしゃった
付け焼刃で「画像を抜いてやれ」とかいう人のハードルを少々高くすること
でした。
説明不足で大変失礼いたしました。

素人のプログラムなんて確かに解析してもあんまり、意味なさそうですね…。
オンラインゲームではないですので、そんなにかたく考えなくてよかったんですね。
1は意味ないのですか〜…なるほど、
わかりました。教えて頂いてありがとうございます。
パスをかけているのはゲームの素材が入ったフォルダですので、ではこのままでいきます。
3は拡張子をdatに変更するということです。

著作権を無視したらゲームとしてはよくないですしね〜。
なんだかみなさんの回答で安心しました。

御紹介いただいた本やソフトも検討してみます。

暗号化とライセンスで禁止というのも使用させて頂きます!

本当にありがとうございました! 編集済み


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

Name: Ma  ..比類無きプログラマー(83,899ポイント)   Date: 2010/04/14(水) 05:17   No:50619     
Title: Re:配布したゲームのデータを盗まれないようにする方法    
>私のお世話になったふざけた入門書を紹介しますが、 
>表紙に抵抗があるなら買わない方が良いでしょう。 
>表紙よりも中身の方がふざけています。 
http://www.amazon.co.jp/dp/4798008532

予想外すぎたwwwwwwwwwwwwwwwwwww
買おうかな。

*駄レスで上げてすいません。 編集済み


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



Name: softya [URL]  ..ハッカー(149,603ポイント)   Date: 2010/04/13(火) 18:53   No:50553       
Title: 【雑談】VisualStudio2010が発売    
記事の元は、
http://www.microsoft.com/japan/presspass/detail.aspx?newsid=3840
マイクロソフト株式会社(本社:東京都渋谷区)は、最新の統合開発環境である 「Microsoft(R)Visual Studio(R)2010 日本語版」の提供を、4月20日(火)より順次開始することを発表します。

 マイクロソフトは、本日、「Visual Studio 2010 英語版」の開発を完了し、MSDN(R)Subscription 会員向けに「Visual Studio 2010 英語版」の提供を開始しました。「Visual Studio 2010 日本語版」につきましては、MSDN Subscription 会員向けには4月20日(火)に、企業向けのボリュームライセンスを5月1日 (土) に、パッケージ製品を6月18日 (金)にそれぞれ提供開始します。また、無償版である、「Visual Studio 2010 Express 日本語版」は、4月27日(火)より弊社Webサイトでのダウンロード提供を開始します。

うーん。高い(T T)
[Visual Studio 2010 Professional - Standard Edition 乗り換え優待パッケージ] 参考価格 39,800 円
http://www.microsoft.com/japan/msdn/vstudio/2010/product/price/default.aspx#prostd

みなさん、どうされます?
私はMFCを使っているので買うしか無いかも。
さっさとMFCを見捨てることも考えようかと思案中。

[追記]昔のVC++単体売り復活してくれないなぁ。 編集済み


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


Name: たいちう  ..比類無きプログラマー(70,887ポイント)   Date: 2010/04/13(火) 19:03   No:50554     
Title: Re:【雑談】VisualStudio2010が発売    
私は3年ほど前にMFCを見捨てました。
MFCなんて使っては、せっかくExpress Editionを出してくれるMSに申し訳ないから。
仕事でもまともにMFCを使ってから2年程たってしまいました。

「Visual Studio 2010 Express 日本語版」に関しても、
あわてて入手する予定もありません。
「この機能がすごいッ」と評判になったら導入します。


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

Name: softya [URL]  ..ハッカー(149,627ポイント)   Date: 2010/04/13(火) 19:11   No:50555     
Title: Re:【雑談】VisualStudio2010が発売    
実のところWindows7用の新しいMFCが必要ないなら不要なんですよね。
しかし、一般の人にはますます縁遠くなってしまったMFC。
学生ならアカデミックを買えるけど、社会人になったときに買い換えられない値段ですね。


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

Name: バグ  ..ハッカー(195,243ポイント)   Date: 2010/04/13(火) 19:19   No:50556     
Title: Re:【雑談】VisualStudio2010が発売    
個人的には欲しいけど、仕事ではいまだにVS2005がメインですし、急いで購入する必要はないかな?(^_^;)


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

Name: 御津凪 [URL]  ..ハッカー(141,440ポイント)   Date: 2010/04/13(火) 19:23   No:50557     
Title: Re:【雑談】VisualStudio2010が発売    
いくつかの記事にも載っている、新しい機能「IntelliTrace」はぜひとも使いたい機能でしたが、
最上位版「Ultimate」にしか搭載されないようですね。

それでも私は Professional 版を買うつもりです。


そういえばネタになりますが「痛IDE」が VS2010 で出来るそうで。


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

Name: たかぎ [URL]  ..ハッカー(174,735ポイント)   Date: 2010/04/13(火) 19:24   No:50558     
Title: Re:【雑談】VisualStudio2010が発売    
> 学生ならアカデミックを買えるけど、社会人になったときに買い換えられない値段ですね。 

社会人ですがアカデミック版を買える立場です。
まあ、これだけバージョンアップすると、その都度買い換えるのが大変です。
私の場合は、アカデミック版とExpress Editionでも十分なことが多いので、結構悩むところです。


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

Name: dic  ..熟練のプログラマー(60,978ポイント)   Date: 2010/04/13(火) 19:40   No:50561     
Title: Re:【雑談】VisualStudio2010が発売    
Beta使ってましたが
私のパソコンのスペック不足で
とてもではないですが
動かないので、VC++6 を維持するでしょうね

MFC使ってないというか、なかなか理解に苦しむので
やめました
階層図は参考程度にしてます

というか、地方のパソコンショップに置かれるかどうかも未定・・・


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

Name: YuO  ..熟練のプログラマー(43,806ポイント)   Date: 2010/04/13(火) 19:42   No:50562     
Title: Re:【雑談】VisualStudio2010が発売    
英語版Express Editionはダウンロード可能になっていますね。
http://www.microsoft.com/express/Downloads/

MVP認定されるような発信はしていないので,上位エディションはMVP経由でのMSDN配布に期待,という感じです。
# 配布があると,各種勉強会で景品として出されたりするので。

> そういえばネタになりますが「痛IDE」が VS2010 で出来るそうで。
初音玲さんのものですね。
β2/RCの時にすでに登録されているはずです。
今のところ,背景画像の追加とスタートページの変更だったはずです。

始まりはcsharp-users.jpの飲み会だった模様
http://ufcpp.spaces.live.com/blog/cns!5C622397E11C979D!388.entry


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

Name: Justy  ..伝説なるハッカー(518,869ポイント)   Date: 2010/04/13(火) 23:56   No:50595     
Title: Re:【雑談】VisualStudio2010が発売    
 とりあえず最低 SP1まで見送りです。
 2008の時に買ったはいいものの、痛いバグに遭遇、SP1が出るまで英語版のパッチを
無理矢理当てて使っていたということがあったもので……。


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

Name: softya [URL]  ..ハッカー(149,939ポイント)   Date: 2010/04/14(水) 01:33   No:50607     
Title: Re:【雑談】VisualStudio2010が発売    
みなさんも、色々大変そうですね。
[Visual Studio 2010 Professional - Standard Edition 乗り換え優待パッケージ] 参考価格 39,800 円 
がたしか期間限定なんですよね。そこが悩みどころ・・・。

あとは、Qt(キュート)とか
http://ja.wikipedia.org/wiki/Qt
wxWidgetsとか
http://ja.wikipedia.org/wiki/WxWidgets
WideStudioとか
http://www.vector.co.jp/soft/win95/prog/se168682.html
ウィジェット・ツール自体の乗り換えも検討中です。
MFCなどに振り回されたくない!


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

Name: 御津凪 [URL]  ..ハッカー(141,725ポイント)   Date: 2010/04/14(水) 02:16   No:50613     
Title: Re:【雑談】VisualStudio2010が発売    
先ほど VC++ EE 2010 を入れて触ってみました。(英語版です)

特別大きな問題はなかったのですが、

・ EE 版に CRT ソースコードが入っていた(ただしデバッグソースパスが違う)
・ Release 版で若干サイズが小さくなった
・ (実行ファイルなどの)出力パスの指定が厳格的になっている
・ インクルードしたファイルの一覧がソリューションエクスプローラに表示される

こんな感じでした。



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



Name:  ..ぴよぴよ(129ポイント)   Date: 2010/04/13(火) 21:30   No:50574       
Title: DirectDrawがVista以降で使えるかどうか    
ゲームを作ろうとしている物です。
さっき知ったばかりでよく分からず、あまり詳しく書いているところがないので質問させていただきます。

DirectXのDirectDraw関連ってXPまでしか使えないんでしょうか?
XPしかないので分からないのですが、DXLibを使うときに気をつけるべきこと(うっかりこの命令を使うと落エラーになるなど)とかあるんでしょうか?

XPで作っていってVista以降でまったく使えない、では悲しいのでどなたか教えてください。または詳しいサイトなど紹介してもらえれば見に行きます。


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


Name: 御津凪 [URL]  ..ハッカー(141,529ポイント)   Date: 2010/04/13(火) 22:40   No:50584     
Title: Re:DirectDrawがVista以降で使えるかどうか    
特に問題ありませんよ。
Vista や Windows 7 でも問題なく使えます。

逆に DirectDraw の代わりとなる Media Foundation は Vista 以降、使用する API によっては Windows 7 でないと動作しません。


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

Name:  ..ぴよぴよ(185ポイント)   Date: 2010/04/14(水) 01:39   No:50610     
Title: Re:DirectDrawがVista以降で使えるかどうか    
ありがとうございます。
7で制作する人は注意が必要だけど、XPの人は気にしなくて良い。ということですね。DirectXの10以降はDirectDrawがないとか統合されたとか、意味不明になってました。重ねてありがとうございました。


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



Name: srepy-T  ..ぴよぴよ(32ポイント)   Date: 2010/04/12(月) 23:26   No:50512       
Title: 当たり判定    
このサイトで紹介されている環境でゲームを作ろうと思っているものです。
剣を振りまわすような感じで正確な当たり判定をつけたいんですけど、

      |
   \ _  |  _ /
   \ _|_ /
       \ | /
     \|/   こんな感じです

1ドットごとに手打ちにしてすべてに当たり判定をつけようと思っているんですが、いい方法はないでしょうか?
回答よろしくお願いします。


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


Name: sleepy-T  ..ぴよぴよ(10ポイント)   Date: 2010/04/12(月) 23:45   No:50513     
Title: Re:当たり判定    
名前と図間違いました・・・
図は上のような感じです。


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

Name: ookami  ..ぴよぴよ(105ポイント)   Date: 2010/04/13(火) 12:45   No:50527     
Title: Re:当たり判定    
ちょw 図wwww
もし「剣」がある程度小さければ、わざわざドット単位にしないで四角形など簡単な当たり判定にしても、それなりに見えると思いますが、大きいと正確にやりたくなってきますよね。

atanで敵と自分の角度を求めて、剣の角度と比較するなどはどうでしょう。


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

Name: Dixq (管理人) [URL]  ..ウィザード(1,176,158ポイント)   Date: 2010/04/13(火) 19:57   No:50565     
Title: Re:当たり判定    
必ずドット単位で判定をする必要がありますか?
ものすごく複雑な形なのでしょうか?

速い動作なら若干いい加減な辺り判定でも案外わからないものですよ。
長方形や円、三角形の組み合わせじゃだめなんですかね?
意外とどうにでもなるものですよ。
例えば
○△□が右に飛んでるとしましょう。

三三三三三三三 ○

三三三三三三三 △

三三三三三三三 □

軌跡に対してはこの3つは全て同じ辺り判定で問題ないですよね。

もう少し詳しい剣の図があれば良いかもしれません。

ドット単位で全て計算することは出来ますが、そうすると計算量がとんでもないことになります・・。


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

Name: sleepy-T  ..ぴよぴよ(260ポイント)   Date: 2010/04/13(火) 21:55   No:50578     
Title: Re:当たり判定    
>atanで敵と自分の角度を求めて、剣の角度と比較するなどはどうでしょう。
この方法で正確にやるのは難しそうなんですけど大丈夫でしょうか?

>必ずドット単位で判定をする必要がありますか? 
こだわりがあるわけではないのですが、できるだけ正確にやりたいと考えています。

>ものすごく複雑な形なのでしょうか? 
2Dで直線だけで先端がとがっている一般的なものです。

ドット単位といっても安定して動作する大きさにしようと思っています。
あと剣のリーチなどもかえるつもりなので汎用性のあるものにしたいです。

いまの自分の実力ではドット単位が一番あっていると思うのですが、やはり実践的ではないのでしょうか?


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

Name: Dixq (管理人) [URL]  ..ウィザード(1,176,819ポイント)   Date: 2010/04/13(火) 22:19   No:50580     
Title: Re:当たり判定    
どれ位の大きさか解りませんが、当たる対象物もドット単位なのでしょうか?
100x100だとすると(全ドット計算する必要はないと思いますが)
最高1万回の計算が必要です(1万回計算する必要がある時は四角形なのであてはまりませんが)。

100x100の画像と100x100の画像のあたり判定を計算すると計算量は1億になってしまいますね。
たった一つと一つを計算するだけでとんでもない計算量になりそうです。

こうなると全ての計算をドット単位でやるなら、あたり判定を書いた白黒画像を用意して、実際に描画して描画先の色を調べた方が早いかもしれません。

しかし、円形に振り回すんですよね。
そうなるとマイフレームごとに綿密にドット単位で計算してもほとんどすり抜けてしまうと思いますよ。
例えば今●が右方向に4[マス/フレーム]で飛んでいるとしましょう。
 
 □□□三●□□□三●□□□三●□□□三●□□□三●□□□三●

こんな感じですね。フレームごとにきちんと計算してもその間を計算しないとすり抜けます。
□の部分に障害物があってもあたったことになりませんよね。
円形に振り回す場合は円の外側は、先がとがってるなら特に問題になるでしょう。

その場合剣の軌跡を計算しないといけないので、むしろドット単位の方が難しいんじゃないでしょうか。
単純に四角形と三角形の組み合わせで計算した方が良いように思います。


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

Name: sleepy-T  ..ぴよぴよ(353ポイント)   Date: 2010/04/13(火) 22:32   No:50583     
Title: Re:当たり判定    
あたる物体は丸、四角などの基本的なかたちにしようと思っています。

なるほどすり抜けてしまうこともあるんですね・・・

基本的なことなんですが、三角形の当たり判定っていうのはどのように計算するのでしょうか?


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

Name: sleepy-T  ..ぴよぴよ(355ポイント)   Date: 2010/04/14(水) 00:33   No:50600     
Title: Re:当たり判定    
簡単な骨組みができましたので、添付します。
こんな感じのスピード、形にしたいと思っています。
「Z」で剣を振ります
http://firestorage.jp/download/3da94b5df0e5d69b5ca4b87db6f8e74471aaf080 編集済み


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

Name: ookami  ..かけだし(1,496ポイント)   Date: 2010/04/14(水) 00:56   No:50604     
Title: Re:当たり判定    
> 簡単な骨組みができましたので
すごいですね...!

予想通りの動きだったので、atan の話をもう少し説明させていただきます。

double meX,meY; // 自分の座標
double enX,enY; // 敵の座標


meX=...
meY=...
enX=...
enY=...

double dx,dy; // 自分から見た敵の相対座標
dx=enX-meX;
dy=enY-meY;

double ang = atan2(dy,dx); // 自分から見た敵の角度。Angle。
double dist= sqrt(dy*dy+dx*dx); // 敵までの距離。
double PI=acos(-1.0); // 3.14...

if(ang>PI && ang<PI*2.0 && dist<20.0) {
    // 当たった処理
}

// NOTE 剣の動きが数フレームなので、扇形全体に当たり判定があるものとしています。


sleepy-Tさんのおっしゃる ドット単位 とは違う方向ですが、違和感が出ないことを期待します。
Dixq (管理人)さんのおっしゃるとおり、ドット単位ではすり抜けたりしますし、
剣もこれくらいの大きさなら、四角形など基本的な図形でやるのがいいかもしれません。


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

Name: sleepy-T  ..ぴよぴよ(438ポイント)   Date: 2010/04/14(水) 01:36   No:50609 解決!     
Title: Re:当たり判定    
実際に作ってみてこの場合だったらookamiさんがおっしゃっているように扇状に計算したほうが堅実ですね・・・・。
今回はookamiさんが提案された方式でいきたいと思います。
たくさんの回答本当にありがとうございました。


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



Name: no  ..中級者(11,032ポイント)   Date: 2010/04/11(日) 23:16   No:50478       
Title: フルスクリーンモードの描写について    
以下のプログラムについて疑問があります。
実行すると、ウィンドウモードなら問題なく動作しますが、
フルスクリーンモードだと何も描写されません。

見た感じ描写されないというより、表裏画面の操作がうまくいっていないように感じられます。
なお、Escキーを押すと一瞬だけ描写がなされます。

原因、解決法のほど、よろしくお願いします。

#include "DxLib.h"
#include <math.h>
#define PI 3.1415


void message_box(){
        int flag;
        flag=MessageBox(
                NULL ,
                TEXT("フルスクリーンモードで起動しますか?") ,
                TEXT("スクリーン設定") , 
                MB_YESNO | MB_ICONQUESTION );
        if(flag==IDNO)
                ChangeWindowMode( TRUE );
}


int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow )
{
    SetMainWindowText( "サンプル" );//ウィンドウの名前
    message_box();//フルスクリーンにするかどうかの関数

    char KeyBuf[256];
    int sample_img[10];
    int e_x;
    int e_y;
    int counter=0;

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

    sample_img[0]=LoadGraph("img/icon.png");
    sample_img[1]=LoadGraph("img/moya.png");
    e_x=640/2;
    e_y=480/2;


    while(!ProcessMessage() && !GetHitKeyStateAll( KeyBuf ) && !KeyBuf[KEY_INPUT_ESCAPE]){
        ClearDrawScreen();

        double enemydy=sin(PI*2/130*(counter%130))*5;

        DrawGraph(e_x-55,e_y-55+enemydy,sample_img[0],TRUE);
        DrawRotaGraph(e_x-70   ,e_y,1 ,    PI*((double)counter*0.1) , sample_img[1] ,TRUE); 
        DrawRotaGraph(e_x+70   ,e_y,1 ,   -PI*((double)counter*0.1) , sample_img[1] ,TRUE); 


        
        counter++;
        ScreenFlip();
    }
    

    DxLib_End() ;                // DXライブラリ使用の終了処理

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

 


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


Name: Ma  ..比類無きプログラマー(83,793ポイント)   Date: 2010/04/13(火) 07:41   No:50521     
Title: Re:フルスクリーンモードの描写について    
テストしていないので、正確ではありませんが
 
ClearDrawScreen()
ScreenFlip()
ProcessMessage()

の呼び出し順番次第で、たまにおかしな挙動があることがありました。
(別に描画後にScreenFlip() をせずにClearしたというわけでもなくです。)


ClearDrawScreen()
を、ScreenFlip()
の直後においても同じ挙動が再現しますか?

それでも駄目なら他の人の意見を待つか、公式掲示板で質問をしてみるといいですよ。


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

Name: ookami  ..ぴよぴよ(701ポイント)   Date: 2010/04/13(火) 16:27   No:50540     
Title: Re:フルスクリーンモードの描写について    
ClearDrawScreen() では画面クリア以外にも何か初期化された気がします。
なんだかんだで、私は DrawBox(0,0,640,480,GetColor(0,0,0),true) を使っています。アナクロですが。見当違いならすみません。 編集済み


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

Name: 紅葉  ..中級者(14,176ポイント)   Date: 2010/04/13(火) 19:34   No:50559     
Title: Re:フルスクリーンモードの描写について    
試していませんがソースは問題ない気がします。
私もvistaのノートパソコンで似たようなことになりました。

int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow )
のすぐ後に
SetUse3DFlag(FALSE);
を書いても駄目でしょうか?


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

Name: no  ..中級者(10,770ポイント)   Date: 2010/04/13(火) 20:36   No:50568 解決!     
Title: Re:フルスクリーンモードの描写について    
Maさん>
その方法でも解決には至りませんでした。
薄々感じていますが、どちらかというと環境が原因なのではないかと思っています。

ookamiさん>
なるほど、それもありですね。得たい結果を導くことができるので、その方法も一つの手段だと思います。
ですが、結果よりも原因が知りたいので、その方法は最終手段に取っておきたいと思います。

紅葉さん>
その方法でうまくいきました。

http://homepage2.nifty.com/natupaji/DxLib/function/dxfunc_other.html#R15N1

こちらですね。
なるほど。読んでみるとやはり、環境の問題のようですね。グラボが悪さをしていたようです。
仮に配布など、多種類の環境で動作させる場合を考慮すると、このような処置も必然的に必要になってきますね。

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


これで解決とさせていただきます。
 





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

Name: 紅葉  ..中級者(14,265ポイント)   Date: 2010/04/13(火) 21:54   No:50577     
Title: Re:フルスクリーンモードの描写について    
解決して良かったですww

ただそれをすると一部の3D関連の機能が
使えなくなる可能性がありますので注意して下さい。

多分なのですがそのPCではここの管理人様のエアロビート?がプレイ出来ない気がします。

グラボの更新等で直ることもありますが余り期待しないで下さいww



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



Name: ぶた  ..ぴよぴよ(46ポイント)   Date: 2010/04/13(火) 20:48   No:50569       
Title: こんばんは    
大学3年生です。
C言語を使ってタイピングゲームみたいのを作りたいのですが、
難易度ってプログラム的にどのくらいですか?


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


Name: バグ  ..ハッカー(195,698ポイント)   Date: 2010/04/13(火) 21:10   No:50572     
Title: Re:こんばんは    
どこまで凝ったものを作るかにもよりますね。市販レベルの物になると大変でしょうし…

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

Name: Dixq (管理人) [URL]  ..ウィザード(1,176,303ポイント)   Date: 2010/04/13(火) 21:16   No:50573     
Title: Re:こんばんは    
どれ位のクオリティにするかによるでしょうけど、見た目も簡単でよくて慣れていれば1時間位で出来る位の難易度だと思います。

UIを快適にしたり(「っ」をxtuでもltuでも受け付けるようにしたり)見た目のエフェクトを気にし始めるといくらでも複雑になりえると思います。

ぶたさんがどれ位のプログラミングスキルをお持ちなのかわからないですし、何で作るかもわからないので、検討が付きませんが、
入力すべきキーを表示してそれをうつだけなら、簡単です。

とりあえず、何で作るのですか?DirectXとかOpenGLとかDXライブラリとか・・


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



Name: 山口  ..かけだし(1,590ポイント)   Date: 2010/04/13(火) 00:22   No:50515       
Title: 配列の値をあげる    
{0,0,0},
{1,1,1},
{1,2,1}

このような配列を
1回目
{1,1,1},
{1,2,1}
{0,0,0},

2回目
{1,2,1}
{0,0,0},
{0,0,0},

このようにプッシュ?したいのですが
やり方がわかりません・・・。

どのようにすればよいのでしょうか?


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


Name: ぽこ  ..初心者(8,157ポイント)   Date: 2010/04/13(火) 00:42   No:50516     
Title: Re:配列の値をあげる    
対象とする配列をA、配列内の要素数(行数)をNとしたとき、
i回目のプッシュ?操作では、

A[0]にA[1]を代入。

A[N-1-i]にA[N-i]を代入。
A[N-i]に{0,0,…,0}を代入。

とすれば宜しいかと。


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

Name: ookami  ..ぴよぴよ(790ポイント)   Date: 2010/04/13(火) 16:32   No:50541     
Title: Re:配列の値をあげる    
ぽこさんと同じですが、こんな感じでいかがでしょう。
int iMax=3,jMax=3;
for(int i=0;i<iMax  ;i++) {
for(int j=0;j<jMax-1;j++) {
    arr[i][j]=arr[i][j+1];
}}

j=jMax-1;
for(int i=0;i<iMax;i++) {
    arr[i][j]=0;
}


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

Name: 初級者  ..初心者(7,673ポイント)   Date: 2010/04/13(火) 19:36   No:50560     
Title: Re:配列の値をあげる    
ていうか、手で実行するときは
どういう手順を踏むかを考えて、
その手順をソースコードに落とし込む過程こそが、
プログラミングの楽しさじゃないんでしょうか。
その楽しさを味わわないで、どうするの?


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



Name: 翔太  ..ぴよぴよ(231ポイント)   Date: 2010/04/13(火) 16:08   No:50537       
Title: 環境取得    
OSやユーザーネーム、HOST、IPなど
PCの環境情報を取得し、
ソケットでHTTPサーバー(自分で作ったPHPアプリ)に送信し
データベースでユーザーを管理したいのですが
情報取得ができません。

この場合どのような関数を用いるのでしょうか?

開発環境は
Windows XP
VC++ 2008



それからこれはアドバイス程度で結構なのですが、
HOSTやIPというのはルータで変更することが出来ると思うのですが、
それをやられてしまうとデータベースに書き込んだ情報と
別のものになってしまい比較できなくなります。
PCの情報とデータベースに登録してある情報を比較する場合
どのような方法を用いればいいと思いますか?


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


Name: 翔太  ..ぴよぴよ(279ポイント)   Date: 2010/04/13(火) 16:16   No:50539     
Title: Re:環境取得    
※補足です。

HOSTやIP、OSなどPHPで取得できますが、
Cの勉強、今後のことを考えてCで取得したいです。


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

Name: softya [URL]  ..ハッカー(148,758ポイント)   Date: 2010/04/13(火) 16:41   No:50543     
Title: Re:環境取得    
個人情報保護法の問題もあるので、個人名かもしれないユーザーネームをサーバに転送するのは関心できません。
IPアドレスも可変するので、個人特定には使えません。
※ 送信する場合は、ユーザーに送信するものを提示して確認しなくてはいけませんし、送信不可なら送信してはいけません。極端な話、断りも無く行った場合には損害賠償請求も有り得ます。

そもそも、個人管理を何のために行うのでしょうか?
そこが分ければ、アドバイス出来ると思います。


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

Name: 翔太  ..ぴよぴよ(338ポイント)   Date: 2010/04/13(火) 16:52   No:50545     
Title: Re:環境取得    
たとえば正規品のソフトなどシリアル番号の登録がありますよね?
それに似た感じで1つ登録されたら削除されるパスを作成し
私が作成したツールを勝手に再配布されたりするのを防止したいのです。


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

Name: softya [URL]  ..ハッカー(149,133ポイント)   Date: 2010/04/13(火) 17:07   No:50549     
Title: Re:環境取得    
>私が作成したツールを勝手に再配布されたりするのを防止したいのです。 

それなら、マイクロソフトと同様な手段をとる必要があります。
まずユーザー一人一人に、ユニークなユーザーコードを発行してください(Vector等なら可能)。
で、起動したソフトにユーザーコードを入力してもらい、サーバーとアクティベーション認証を行います。
アクティベーション認証コードは、ユーザーコードのハッシュと機械の識別情報から作るハッシュコードの2つをサーバに登録して、もしユーザーコードと機械の識別情報のハッシュコードがずれたら起動できなくなる仕組みです。もし何らかの問題でユーザー認証出来ない時のサポート方法も考える必要があるでしょう。
※機械の識別情報は、CPUの識別コードやLANカードのMACアドレスなど世界に一つしかない情報やマザーボード名などの情報からハッシュを作ります。ハッシュ化するのは個人情報として再現出来なくするけど、個人識別は出来る情報を創りだすためです。
まぁ、これだけの手間をかける必要があるかは良く考えてくださいね。


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

Name: dic  ..熟練のプログラマー(60,744ポイント)   Date: 2010/04/13(火) 17:08   No:50550     
Title: Re:環境取得    
>シリアル番号の登録
それでいいのでは?


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

Name: 翔太  ..ぴよぴよ(393ポイント)   Date: 2010/04/13(火) 17:16   No:50551 解決!     
Title: Re:環境取得    
そこまでしなければならないのですか・・・

考え方が安易でした。
べつに商品化するものでもないし
大した物でもないので
諦めます。


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



Name: dic  ..熟練のプログラマー(60,636ポイント)   Date: 2010/04/13(火) 15:50   No:50535       
Title: javaがインストールされているか?    
アプリケーションを開発しています
そこで、一定の処理はC言語ですませて
テキストに結果を出力し
その出力結果をもとにjavaアプリケーションを起動させたいと
考えています
しかし、そのパソコンにjavaがインストールされているか
不明な状態なので、C言語にてjavaがインストール
されているかチェックする方法はないでしょうか?

また、インストールされていない場合
javaをインストールするようにする処理は
どうやって実現できるのでしょうか?

java系の質問掲示板で聞こうかとしたんですが
処理はC/C++なのでここで聞こうかと思いました


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


Name: ookami  ..ぴよぴよ(153ポイント)   Date: 2010/04/13(火) 15:57   No:50536     
Title: Re:javaがインストールされているか?    
java -version コマンドで応答があるかどうか確認するか、

環境変数 JAVA_HOME をチェックしてみるのはどうでしょう。
http://oshiete1.goo.ne.jp/qa3275123.html

javaがインストールされていれば JAVA_HOME に何かしらの値がセットされているはず。


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

Name: dic  ..熟練のプログラマー(60,712ポイント)   Date: 2010/04/13(火) 16:34   No:50542     
Title: Re:javaがインストールされているか?    
アプリケーションといってもユーザー側がプログラムやパソコンの知識をまったく持たない
状態ですので
「java -version で確認してください」って言っても無理だと思いますすいません

私のパソコンにはjavaが入ってますが JAVA_HOME は環境変数にないですね
OSはXPです


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

Name: ookami  ..ぴよぴよ(986ポイント)   Date: 2010/04/13(火) 16:43   No:50544     
Title: Re:javaがインストールされているか?    
すいませんw 説明不足でしたね。こんな感じでいかがでしょうか。

    char* command="java -version";

    const int BUFSIZE=1024*2;
    char buf[BUFSIZE];

    int i;
    FILE *fp;
    *buf=0;
    fp=_popen(command,"r");
    for(i=0;i<=BUFSIZE-2;i++){
        int c;
        if((c=fgetc(fp))==EOF) break;
        buf[i]=c;
    }
    buf[i]=0;
    _pclose(fp);

    printf(buf);


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

Name: lbfuvab  ..プログラマー(25,415ポイント)   Date: 2010/04/13(火) 16:55   No:50546     
Title: Re:javaがインストールされているか?    
環境変数PATH調べて何とかなりませんか?

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

Name: dic  ..熟練のプログラマー(60,729ポイント)   Date: 2010/04/13(火) 16:56   No:50547 解決!     
Title: Re:javaがインストールされているか?    
なるほど、そういうやり方ですね
ありがとうございました


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

Name: ookami  ..ぴよぴよ(961ポイント)   Date: 2010/04/13(火) 16:57   No:50548     
Title: Re:javaがインストールされているか?    
追記すいません。JDKならJAVA_HOME、JREならJRE_HOMEかも。

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



Name: Lipton  ..ぴよぴよ(153ポイント)   Date: 2010/04/13(火) 11:09   No:50524       
Title: ゲームコーディング・コンプリートという本のサンプルに関して    
ゲームコーディング・コンプリートという本のサンプルに関して。
http://www.amazon.co.jp/gp/product/4797358432/ref=ox_ya_os_product

書籍のサポートページに書いてあるように進めてみたのですが
http://www.sbcr.jp/books/download/art.asp?newsid=2448

ビルドを行っても

GameCodeStd.cpp
c:\gamecode3\source\GameCodeStd.h(63) : fatal error C1083: include ファイルを開けません。'atltypes.h': No such file or directory
GameCode3 - エラー 1、警告 1

と出るので、上記をコメントアウトしたら

GameCodeStd.cpp
c:\gamecode3\source\interfaces.h(186) : error C4430: 型指定子がありません - int と仮定しました。メモ: C++ は int を既定値としてサポートしていません
c:\gamecode3\source\interfaces.h(186) : error C2143: 構文エラー : ',' が '&' の前にありません。



というのが10個ほど出てビルドが通りませんでした。

また、使用環境がVC++もVC#もExpressEditionなので、プロジェクトを開く時にC++とC#
のプロジェクトが両方入っている状態で開けなかったり、どうも、うまくいきません。
ExpressEditionではダメなんでしょうか。

入門者向けではない書籍なのでしょうが、こちらの書籍のサンプルを正常に扱えた方
がいましたらアドバイスをお願いできませんでしょうか。


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


Name: 御津凪 [URL]  ..ハッカー(140,941ポイント)   Date: 2010/04/13(火) 11:16   No:50525     
Title: Re:ゲームコーディング・コンプリートという本のサンプルに関して    
> ExpressEditionではダメなんでしょうか。

ExpressEditionではダメですね。

少なくとも有償版の方でないと、複数言語が入っているプロジェクトを開けませんし、
atltypes.h が含まれているライブラリの ATL は無償版の方には存在しません。


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

Name: Lipton  ..ぴよぴよ(319ポイント)   Date: 2010/04/13(火) 12:06   No:50526 解決!     
Title: ソフトバンクのアプリ開発に関して    
御津凪さん
レスありがとうございます。

有料版じゃないとダメなんですかぁ。最近の書籍のサンプルは
ExpressEditionで扱えることが殆どなので少し驚きましたが、
しょうがないので諦めます。書籍の内容だけ学習したいと思います。

素早いご回答を頂きありがとうございました。


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



Name: 猫旅  ..ぴよぴよ(528ポイント)   Date: 2010/04/11(日) 22:21   No:50474       
Title: パネポンのようなパズルゲーム    
パネポンのようなパズルゲームの消える判定ってどのように取っているのでしょうか?
思いつく限りだと

・位置情報をセルを取得し2次元配列に格納後処理
・直接位置情報から直接処理

この様な事が思いつくのですがイマイチしっくりきません。




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


Name: やっくん  ..上級者(16,387ポイント)   Date: 2010/04/12(月) 00:33   No:50482     
Title: Re:パネポンのようなパズルゲーム    
消える判定というのはパネルを入れ替えた後の処理ですか?
パズルゲームはオセロくらいしか扱った事無いので詳しくわかりませんが、思いついたことを書いてみます。

とりあえず、
・パネル1:1
・パネル2:2
・パネル3:3
・パネル無:0
・パネポンのルールのように縦、横同じ物が3つ並べば消える
として話を進めます。

↓画面と思ってください。(初期画面とします)
0000
1023
2021
2213
1211

では実際にどうやって消えるかの例を・・・。

@:パネルを入れ替える(配列の中身を入れ替える)
0000
1203
2021
2213
1211

A:入れ替えてまずは入れ替えた場所の下にパネル無(0)が無いか判定してもしあれば入れ替える。
0000
1003
2221
2213
1211

B:@で入れ替えた2つのパネルの縦、横を判定。
(判定するだけで消さない、消す位置を記憶させておく)
0000
1003
2221
2213
1211

C:消す位置の配列の値を0(パネル無し)に。
0000
1003
0001
2013
1011

D:消した位置の1つ上の配列の値を調べて0で無いならば入れ替える。
もし入れ替えて更にその上が0で無いならば入れ替えるを繰り返す。
これを値を0に変えた場所全てについて行う。(しなくて良い場所もありますが)
0000
0003
1001
2013
1011

こんな感じでどうでしょうか?
落ち物ゲームは作ったこと無いので参考程度にお願いします(^^;


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

Name: 猫旅  ..ぴよぴよ(598ポイント)   Date: 2010/04/12(月) 19:10   No:50500     
Title: Re:パネポンのようなパズルゲーム    
回答ありがとうございます。
決まった位置にパネルがあれば配列に入れて処理出来るかと思うのですが
あれって下から浮いてきて常にY座標が変わりますよね?
それをどのように配列に入れればよいのかがわからなくて・・・。


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

Name: conio [URL]  ..比類無きプログラマー(81,945ポイント)   Date: 2010/04/12(月) 22:47   No:50511     
Title: Re:パネポンのようなパズルゲーム    
配列は普通に2次元のデータで良いと思います。
↓こんな感じです。
--------------------
int panel[12][6];
--------------------

で、Y座標がドット単位でずり上がってくるのは描画の方でやってると思います。
(配列の中には、何色のパネルか?という情報だけ入れる)

例えば、パネルを単純に描画する関数を下記の様にします。
--------------------------------------------------
for(int i = 0; i < 12; i++){
    for(int j = 0; j < 6; j++){
            DrawGraph( j*32 , i*32 , Handle, TRUE ) ;
    }
}
--------------------------------------------------

このままだと固定的な表示しか出来ないので、表示位置を変えるために
適当な変数を用意して、その変数を変えていきます。
(パネル一個は32×32ドットとします)
--------------------------------------------------
for(int i = 0; i < 12; i++){
    for(int j = 0; j < 6; j++){
            DrawGraph( j*32, i*32 + DifY, Handle, TRUE ) ;
    }
}
--------------------------------------------------
DifYを 0 → -1 → -2 //中略// → -32 と言う風に変化させてやれば、
下からずり上がっているように見えると思います。

で、DifYが パネル一個分(32ドット)上昇したら、
その時に内部の2次元配列の値も1つずつ上にずらせばよいかな、と思います。 編集済み


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

Name: 猫旅  ..ぴよぴよ(652ポイント)   Date: 2010/04/13(火) 05:11   No:50518 解決!     
Title: Re:パネポンのようなパズルゲーム    
ご回答ありがとうございます。
ご教授いただいたように実装してみました。

これで別の問題が出てきてしまったので一度質問を締めさせて頂きます。


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



Name:  ..ぴよぴよ(933ポイント)   Date: 2010/04/11(日) 01:28   No:50446       
Title: ソースの分割    
こんばんわ、またお世話になります。
現在はVisualC++2008EEのWin32アプリケーションのテンプレートを使って作成しています。
先ず表示したウィンドウを二分割して左側にツリー、右側にテキスト入力という形にしました。
そしてソースも分割しようと、ツリーを表示している場所を別の場所に移したのですが、ツリーが表示されません。
何か、ちゃんと機能させる手立てはないでしょうか?

分かりにくいと思いますので、そのまま貼り付けておきます。
tree.cppが移した部分です。DxLib.hなどのあるフォルダは含まれてません。


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


Name: Justy  ..伝説なるハッカー(518,467ポイント)   Date: 2010/04/11(日) 01:56   No:50447     
Title: Re:ソースの分割    
 多分 tree関数で使われているグローバル変数 hWndハンドルが空なのでしょう。
 この変数に正しいハンドルをセットしていますか?
 デバッガなどで確認して下さい。

 あと、hTreeが staticなのも変ですね。


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

Name:  ..かけだし(1,223ポイント)   Date: 2010/04/11(日) 12:35   No:50456     
Title: Re:ソースの分割    
CreateWindowExのhWndには親窓のハンドルが入るとのことなので、
HWND GetParent(HWND hWnd);
をtree.cppに入れてハンドルを取得しようとしたのですが、再定義されていますとエラーになりました。
色々と順番を変えてみます。

staticの方については、今調べています。
取りあえずexternにしたら「外部シンボル ""struct HWND__ * hTree" (?hTree@@3PAUHWND__@@A)" は未解決です。」
と出ました。
------
HWND extern hTree;  // ツリービューのハンドル
HWND static hTree;
------
としたら実行できたのですが、これでいいのかと疑問に思います。(上が未解決なので表示はされませんが)

参考にしたURL
http://gurigumi.s349.xrea.com/programming/visualcpp/sdk_split1.html
http://gurigumi.s349.xrea.com/programming/visualcpp/sdk_treeview1.html


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

Name: Justy  ..伝説なるハッカー(518,350ポイント)   Date: 2010/04/11(日) 16:55   No:50458     
Title: Re:ソースの分割    
>CreateWindowExのhWndには親窓のハンドルが入るとのことなので
 ツリービューを作るのに必要なその親窓のハンドルは main.cpp側で生成された
ウインドウハンドルです。

 tree関数は親窓のプロシージャである WndProc関数の WM_CREATEののところで
処理されていますよね?
 WndProc関数では自分(親窓)のウインドウハンドルの情報を持っていますので、そのまま
tree関数の引数にハンドルを入れるようにすれば、態々グローバル変数に頼らなくても
tree関数内でウインドウハンドルを取得できます。

 あと、グローバル変数とローカル変数で名前を同じにするのは止めましょう。


>取りあえずexternにしたら
 何の為に GLOBALというマクロが存在しているのか考えてみて下さい。


>static hTree
 そこで staticをつけるとインクルードしたソース毎に異なる静的変数になります。
 tree.cppで使われる hTreeと main.cppでツリーに内容を書き込む際に使う hTreeが
別物の変数になってしまいますよ。


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

Name:  ..かけだし(1,461ポイント)   Date: 2010/04/13(火) 00:10   No:50514 解決!     
Title: Re:ソースの分割    
時間掛かりましたが、一応できました。
ありがとうございます!

>tree関数
仮引数にhWndを入れたら巧く行きました。
>GLOBAL
完全に頭から抜けてました…真上にあったんですけどね……済みません。
>static
なるほど、staticの静的変数とはそういう効果(?)があるのですね、勉強になりました。

拙い質問だったとは思いますが、御丁寧にお答えいただき有難うございました。


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



Name: minzoo  ..ぴよぴよ(252ポイント)   Date: 2010/04/11(日) 22:44   No:50475       
Title: 配列に入れた画像を表示できない    
はじめましてminzooと申します。

ゲームをつくろうとしていていて試しに画像を描画しようと思い、
LoadDivGraphで配列に画像を読み込ませたのですが、
何故か配列の番号が[1]の画像しか描画されません。
文章だけでは分かりずらいので、コードを載せます。


void load(){
LoadDivGraph("EDGE1.bmp",2,2,1,64,64,img_player);    

}


void PlayerControl(){


    DrawGraph((int)Player.x,(int)Player.y,img_player[0],TRUE);
}                                                    //↑1にすると表示され、0だと画面が暗いまま


分かりずらいかもしれませんがよろしくお願いします。


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


Name: minzoo  ..ぴよぴよ(271ポイント)   Date: 2010/04/12(月) 20:05   No:50502 解決!     
Title: Re:配列に入れた画像を表示できない    

もう一度やってみたらうまくいきました。
お騒がせしました。


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



Name: kuri  ..かけだし(1,189ポイント)   Date: 2010/04/12(月) 14:08   No:50492       
Title: GetHitKeyStateAll関数を使った処理が上手くいきません    
windowsXP
vusual C++ 2008
DXライブラリを使用しています。

はじめまして、プログラミング初心者のkuriです。
以下のプログラムを実行してみた結果、予想していた動きをせず色々と考えてみたのですが
解らなかったため質問させて頂きました。
プログラム内容はEnter入力があった場合、乱数を取得して
その乱数に対した文字を表示するという単純なものです。

質問@"Enterを押してください"と表示されている状態で、
      Enterを2回押下しないと32行目からの表示をしてくれません。
      (私の予想していた結果では一度の押下でOKのはず・・・)
質問AWaitKey();でEnter以外を押下した場合は"Enterを押してください"と再表示されるのですが、
      Enterを押下した場合、すぐに32行目からの表示をしてしまいます。
      ためしにデバッグで変数Key[28]に値を1入れてステップインして行った場合、ループ処理の
      GetHitKeyStateAll( Key )でKey[28]の値は0にしっかりと戻っていました。
      (私の予想していた結果ではEnter押下でも"Enterを押してください"と再表示されるはず・・・)

以上が私の疑問と質問です。初歩的な質問かと思いますがよろしくお願いいたします。

/************************************************************************************************

#include "DxLib.h"
 
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow ){

    /*変数宣言*/
    char Key[256];    //キー入力取得
    int  rand;    //乱数取得

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

        /*変数初期化*/
        rand = 0;
        memset( Key,'\0',sizeof(Key) );

        SetDrawScreen( DX_SCREEN_BACK ) ;    //描画先を裏画面に設定

    while( !ProcessMessage() && !ClearDrawScreen()
                                 && !GetHitKeyStateAll( Key ) && !Key[KEY_INPUT_ESCAPE] ) {

        if( Key[KEY_INPUT_RETURN ] == 0 ) {    //エンターが入力されていない場合

           DrawString( 640/3,480/2,"Enterを押してください",GetColor( 255 , 255 , 255 ) );//表示

        } else if( Key[KEY_INPUT_RETURN ] == 1 ) {    //エンターが入力された場合

            ClearDrawScreen();   //画面をクリア 

       rand=GetRand(2);     //乱数取得

       if( rand == 0 ) {    //取得した乱数か0の場合
           DrawString( 640/2,480/2,"赤",GetColor( 255 , 0 , 0 ) );//画面に表示
       } else if( rand==1 ) {    //取得した乱数か1の場合
                DrawString( 640/2,480/2,"青",GetColor( 0 , 0 , 255 ) );//画面に表示
       } else if( rand==2 ) {    //取得した乱数か2の場合
                DrawString( 640/2,480/2,"緑",GetColor( 0 , 255 , 0 ) );//画面に表示
            }
                WaitKey();    //キー入力待ち
        }
    ScreenFlip();//裏画面を表画面に反映
    }
 
    DxLib_End();

    return 0;
}

************************************************************************************************/


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


Name: Ma  ..比類無きプログラマー(82,846ポイント)   Date: 2010/04/12(月) 15:18   No:50493     
Title: Re:GetHitKeyStateAll関数を使った処理が上手くいきません    
追記
*このプログラムは質問を読まずに書いてましたのでスルー推奨w
*質問読んだ後に書いたのは次の私のレスにあります。

    while( !ProcessMessage() && !ClearDrawScreen() && !GetHitKeyStateAll_2( Key ) && !Key[KEY_INPUT_ESCAPE] ) {
        if( Key[KEY_INPUT_RETURN ] == 0 ) {    //エンターが入力されていない場合 
            DrawString( 640/3,480/2,"Enterを押してください",GetColor( 255 , 255 , 255 ) );//表示 
        } else if( Key[KEY_INPUT_RETURN ] == 1 ) {    //エンターが入力された場合 
            rand=GetRand(2);     //乱数取得 
        }
        if( Key[KEY_INPUT_RETURN ] >= 1 ) {
            if( rand == 0 ) {    //取得した乱数か0の場合 
                DrawString( 640/2,480/2,"赤",GetColor( 255 , 0 , 0 ) );//画面に表示 
            } else if( rand==1 ) {    //取得した乱数か1の場合 
                 DrawString( 640/2,480/2,"青",GetColor( 0 , 0 , 255 ) );//画面に表示 
            } else if( rand==2 ) {    //取得した乱数か2の場合 
                DrawString( 640/2,480/2,"緑",GetColor( 0 , 255 , 0 ) );//画面に表示 
            } 
        }
        ScreenFlip();//裏画面を表画面に反映 
    } 



*あと、読みにくかったのでインデントは正しくおこないましょう。

追記
GetHitKeyStateAll_2 関数については
http://dixq.net/g/41.html
こちらを参照してみてください。 編集済み


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

Name: ookami  ..ぴよぴよ(16ポイント)   Date: 2010/04/12(月) 15:29   No:50494     
Title: Re:GetHitKeyStateAll関数を使った処理が上手くいきません    
ScreenFlip() する前に WaitKey() しているからでは?

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

Name: Ma  ..比類無きプログラマー(83,350ポイント)   Date: 2010/04/12(月) 15:33   No:50495     
Title: Re:GetHitKeyStateAll関数を使った処理が上手くいきません    
失礼、ちゃんと質問読んでいませんでした。
質問に忠実に答えるとこんなプログラムになるとおもいます。

    while( !ProcessMessage() && !ClearDrawScreen() && !GetHitKeyStateAll( Key ) && !Key[KEY_INPUT_ESCAPE] ) { 
        if( Key[KEY_INPUT_RETURN ] == 0 ) {    //エンターが入力されていない場合  
            DrawString( 640/3,480/2,"Enterを押してください",GetColor( 255 , 255 , 255 ) );//表示  
        } else if( Key[KEY_INPUT_RETURN ] == 1 ) {    //エンターが入力された場合  
            rand=GetRand(2);     //乱数取得 

            if( rand == 0 ) {    //取得した乱数か0の場合  
                DrawString( 640/2,480/2,"赤",GetColor( 255 , 0 , 0 ) );//画面に表示  
            } else if( rand==1 ) {    //取得した乱数か1の場合  
                 DrawString( 640/2,480/2,"青",GetColor( 0 , 0 , 255 ) );//画面に表示  
            } else if( rand==2 ) {    //取得した乱数か2の場合  
                DrawString( 640/2,480/2,"緑",GetColor( 0 , 255 , 0 ) );//画面に表示  
            }  
            ScreenFlip();//質問@の原因
            WaitKey();
            do{
                GetHitKeyStateAll( Key );
            }while(Key[KEY_INPUT_RETURN ] == 1);//質問Aの回避方法
        } 

        ScreenFlip();//裏画面を表画面に反映  
    }  


*追記
質問Aの回避方法
とありましたが、これは非推奨です。
ProcessMessage() がEnterキーを押している間、ずっと呼ばれないためです。
それを回避するために、do while ループ内で、この関数を呼ぶのも非推奨です。
これはプログラムを複雑化し、メインループ一周にかかる時間を大きく変動してしまうためです。
バグにつながる時もあります。


ともかく、推奨な解決方法は、私の一番最初のレスのサンプルにあった、 GetHitKeyStateAll_2 関数の使用です。
この関数は、キーをどれだけの間押していたか記録してくれます。
(*注:この関数はソースコードに書き込む必要があります。) 編集済み


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

Name: kuri  ..かけだし(1,217ポイント)   Date: 2010/04/12(月) 19:07   No:50499 解決!     
Title: Re:GetHitKeyStateAll関数を使った処理が上手くいきません    
Maさんookamiさん返信ありがとうございました。
疑問が解決出来てスッキリしました。


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



Name: 海老天  ..入門者(3,361ポイント)   Date: 2010/04/11(日) 01:10   No:50444       
Title: テトリス 回転の実装ができません    
windows vista
vusual C++
DXライブラリを使用しています

現在自力でテトリスを組もうとしているのですが回転で躓いてしまいました
Zを押すと回転するようにしているのですがエラーは出ず処理そのものが行われません
Zを押したことは認識されているようなのですが……
ごちゃごちゃしたプログラムですがミスを指摘してくださる方お願いします


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


Name: バグ  ..ハッカー(194,539ポイント)   Date: 2010/04/12(月) 09:34   No:50487     
Title: Re:テトリス 回転の実装ができません    
コメント文が少ないのと、ファイルを細かく分けすぎていて、全部読む気になれなかったのですが…
Zが押されたのを認識するところまでは確認できているようですので、それ以降の処理をざっと読んでみました。

turn_calc関数内でなんらかの処理を行って、turn_move関数で完結させてるって感じでしょうか?
で、turn_switchとturn_stateという変数が共に1である場合にturn_move関数の中身が実際に実行される…
turn_switchはturn_calc関数内でZが押された場合に問答無用で1になっているので、これは大丈夫かな?
となると、turn_stateが怪しいぞと。

turn_stateが変更される条件は、bblock[][]のメンバであるstateが1の場合に、同メンバのkind_stateの数値で上書きされると…

多分、ここが問題かな?前後の流れから察するにturn_state変数はkind_stateが1箇所でも1であったら0に戻ってはいけないっぽいけど0で上書きされている可能性が大きいですね…


下記のような感じでいかがでしょうか?
今、動作できる環境がないので未確認ですが…



void turn_calc()
{
    if (CheckStateKey(KEY_INPUT_Z) == 1)
    {
        turn_state = 0;        // ※ここでturn_stateを0クリアしておく
        turn_switch = 1;

        for (int i = 0; i < 10; i++)
        {
            for (int n = 0; n < 22; n++)
            {
                if (bblock[i][n].state == 1)
                {
                    turn_number = bblock[i][n].kind;
                    turn_state |= bblock[i][n].kind_state;        // ※1度でも1になったturn_stateが0にならないようにkind_stateとの論理和を求めるように変更

                    if ((ablock[i + 2][n].state == 1) || (ablock[i + 1][n + 2].state == 1))
                    {
                        turn_switch = 0;
                    }
                }
            }
        }
    }
}


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

Name: 海老天  ..入門者(3,405ポイント)   Date: 2010/04/12(月) 12:22   No:50490 解決!     
Title: Re:テトリス 回転の実装ができません    
すみません
根本的にプログラムがまずかったようです
一から組み直したいと思います


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

Name: バグ  ..ハッカー(194,622ポイント)   Date: 2010/04/12(月) 12:42   No:50491     
Title: Re:テトリス 回転の実装ができません    
以前作ったテトリスをアップしてますんで、よかったらダウンロードしてみてください。
開発言語がC#なので全てが参考になるか分かりませんが、大まかな流れとかは使える箇所があるかもしれませんので(^_^;)

http://park.geocities.jp/bugbugbugbug2001/


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



Name: Ma  ..比類無きプログラマー(80,785ポイント)   Date: 2010/04/10(土) 04:14   No:50381       
Title: 【雑談】人型ロボットの未来    
ロボットが急成長している近年ですが、皆様はこの業界の将来にわくわくしているでしょうか?
アシモ等、人間型のロボットが成長するなかで、この業界がいつまでに、どのくらいまで成長するのか
ちょっとわくわくしているMaです。

アシモは、走る、飲み物を運ぶ、アシモ同士のネットワーク、自力充電 等の機能が最近ではあるみたいです。
最近では美女ロボット?だったかな、リアルな動きをするものや、日本語認識プログラムをつんだものや、目の前の人の動きのモーションを解析するものもあるようです。

よくゲームやアニメ等のサブカルチャーで、よくできた人間型ロボットが登場しますが、
個人的には、近い将来、人間との会話と比べて違和感がないほどのコミュニケーションができる技術が実現しそうな気がします。
いわゆる模擬的に心を育てるって技術ができたらすごいなぁと。

皆さんは、この業界が今、どのくらいまで進んでいるかご存知でしょうか?
(特に、模擬的な心を持たせる技術が気になります。)

または、皆さんがこの技術の進歩によって気になる問題点や、わくわくして期待している点などについても
聞いてみたいなと思って、このスレを立ち上げました。

無知の人でも、プロの人でも、返信歓迎です。
(ただ、私は無知の部類なので、あまり難しい言葉を使われると分からないかもしれません。) 編集済み


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


Name: softya [URL]  ..ハッカー(147,143ポイント)   Date: 2010/04/10(土) 09:42   No:50389     
Title: Re:【雑談】人型ロボットの未来    
>皆さんは、この業界が今、どのくらいまで進んでいるかご存知でしょうか?
>(特に、模擬的な心を持たせる技術が気になります。) 

ずいぶん前から人工知能には興味津々のsoftyaです。
人工知能の問題は、知能の発生原理が解明出来ていないからだと言われています。
で、この記事が参考になるかなと。
http://www.itmedia.co.jp/news/articles/0906/12/news068.html
特に、第4章が重要だと思います。
じっくり読んでみてください。


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

Name: Ma  ..比類無きプログラマー(81,111ポイント)   Date: 2010/04/10(土) 10:02   No:50391     
Title: Re:【雑談】人型ロボットの未来    
とても面白い記事の紹介ありがとうございます。
先ほど読み始めて、すごく読みいってしましました。
まだ4章を読みきっていませんが、これからよんでいきます。
そのときには感想でも書いてみます。


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

Name: dic  ..熟練のプログラマー(59,831ポイント)   Date: 2010/04/10(土) 10:05   No:50392     
Title: Re:【雑談】人型ロボットの未来    
人工知能、ロボット
素人ながら興味あります

名前は忘れましたが、最近のFPSで戦争ものなんですが
屋外に無人の狙撃装置があったので「マジか」と衝撃を受けました
人間(体温)をセンサーで監視してて、射程内に入ったら
自動で狙撃するというものです

映画ターミネーターでもでてくるように
殺人兵器としてのロボットがつくられる(映画上)など
とても使い方次第でおそろしいものになると思ってます

ゲーム「ガンダム」でもパイロットのいない兵器(ガンダム)
MDシステムという、文字どおり意志を持った鉄の塊が大量に生産され
次々と攻めてくるなどちょっと怖い未来を想像してます


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

Name: ワクワク  ..ぴよぴよ(645ポイント)   Date: 2010/04/10(土) 17:31   No:50422     
Title: Re:【雑談】人型ロボットの未来    
人型ロボットですか。
映画で言うと「アイ,ロボット」とか「ターミネーター」の世界ですよね。
僕もすごく興味があります。

ただ、実現には程遠いでしょうね。
僕の浅薄な知識でさえ、その問題点は山積みです。

コミュニケーション能力の基幹となる、画像処理、音声情報処理、自然言語処理そのどれをとっても、まだまだ発展途上です。
というよりも人間と比べると玩具に過ぎません。
こんなこといっちゃうと研究者に怒られちゃうかな。
でも、賢明な研究者ほど、このことをよく理解しているのもまた事実なんですよね。
ですので、Maさんのせっかくの夢や期待に冷や水を浴びせるような物言いで悪いのですが、僕は今のままで行けば、近い将来ではまだまだ無理のような気がします。

模擬的に心を育てるっていうのは、いわゆる人工知能のことですよね。
ここではゲームプログラミングということで、AIというとゲームAIのことを主に指しているようですが、本来的な人工知能とは人間のように意識を持ち、自己組織的に推論、学習するようなシステムのことをいいます。
この人工知能ですが、Maさんの仰るような「心を持たせる」という点に於いてはまだまだ全然目処が立っていません。
いくつか研究論文は発表されているようですが、はっきりいってまったく使い物にならないレベルです。

また、人間の脳を工学的に模倣するためには、基盤となる知識や情報が膨大に必要となりますよね。
工学に始まり、神経科学、生物学、心理学。
そして悪いことに、そのどれもが他の学問分野に対していくらか懐疑的ときています。

もしかしたら、ずっと遠い未来においてでさえも、人工知能の実現はありえないのかもしれないですね。


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

Name: Ma  ..比類無きプログラマー(81,551ポイント)   Date: 2010/04/10(土) 19:32   No:50427     
Title: Re:【雑談】人型ロボットの未来    
>softyaさん
読みました。
ボトムアップの考え方、すごくなるほどーって思いました。
面白いですね。

>dicさん
たしかに、どんな先端技術もまずは軍事目的にされてしまうのが自然ですよね。
もしできたら軍事使用禁止条約的なものを・・・

>ワクワクさん
結局は、脳の働き、知性がどうして生まれたかが分からなければ、どうにもならないのかもしれないですね。
あと数十年で、って想像してましたが、甘かったですかね(笑

でも、まだまだこの分野は始まって間もないのにココまでできているので、期待の予知はあるとおもうんです。


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

Name: softya [URL]  ..ハッカー(147,671ポイント)   Date: 2010/04/10(土) 19:54   No:50430     
Title: Re:【雑談】人型ロボットの未来    
>たしかに、どんな先端技術もまずは軍事目的にされてしまうのが自然ですよね。 
人工知能は出来てなくても、自律的行動型のロボットは研究されていますし色々と話題に出てきます。

2007年には、ロボットカーがテスト的に用意された市街を走行する事に成功していますね。
http://www.afpbb.com/article/environment-science-it/science-technology/2307521/2311361
http://japan.cnet.com/news/media/story/0,2000056023,20088623,00.htm
昔、公開されていた映像で高度な画像認識をリアルタイムでやったいた事を覚えています。
やがて無人の軍事車両がイラクあたりで走りまわるようになるんでしょうか?

優勝車の動画。(注)最初にcmあり。
http://www.wired.com/video/darpas-champion-robot-car/1813573893
技術的には面白いんだけど、兵器として考えると素直に喜べない。
福祉とか、障害者などのために使われる日は遠いのだろうか・・・。 編集済み


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

Name: たいちう  ..比類無きプログラマー(70,117ポイント)   Date: 2010/04/10(土) 20:09   No:50432     
Title: Re:【雑談】人型ロボットの未来    
せっかくの真面目なスレにネタを投下。

【等身大】初音ミク作ってみた【01_balladePV】
http://www.nicovideo.jp/watch/sm9020236


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

Name: Ma  ..比類無きプログラマー(82,315ポイント)   Date: 2010/04/10(土) 20:19   No:50433     
Title: Re:【雑談】人型ロボットの未来    
>softya さん
ですねー。
でも、ある意味ではこの車も人工知能的な機能をもっているようです。
1TBの容量で、過去の失敗を見つけてそれを学び、間違いを繰り返さないようにする。
といっていましたが、人工知能にはかかせない一面ですよね。

それにしても、Dual Processorが10個ぐらいついてましたよね・・・。すごいCPUの数だw

ただ、残念ながら軍事目的の使用は回避できなさそうですね…。 編集済み


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

Name: たかぎ [URL]  ..ハッカー(174,711ポイント)   Date: 2010/04/10(土) 20:44   No:50434     
Title: Re:【雑談】人型ロボットの未来    
新しい技術が飛躍的に進歩するのは、軍事目的かアダルト目的のどちらかが絡む場合が大多数です。

軍事目的についても、それまで有人でやっていたことが無人でできるようになれば、それだけ犠牲が少なくても済むわけです。
それだけを考えても、そんなに毛嫌いする必要もないでしょう。
ただ、軍事目的で日本が最先端をいくには、最低限、武器輸出三原則の見直しが必要ですし、本腰をいれるのは憲法改正も必要になるでしょうが。



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

Name: Ma  ..比類無きプログラマー(82,351ポイント)   Date: 2010/04/10(土) 21:02   No:50436     
Title: Re:【雑談】人型ロボットの未来    
>等身大ミク
初見でした。
というか、本当に30分みいってしまったw
万能ですごい人ですね!w

>たかぎさん
たしかに、今の日本の法律だと軍事目的での技術発展は難しいですよね。。。 編集済み


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

Name: no  ..中級者(9,819ポイント)   Date: 2010/04/11(日) 01:13   No:50445     
Title: Re:【雑談】人型ロボットの未来    
こちらは情報系の人間が多いためか、人工知能の話がちらほら出ていますね。

せっかくなので外部制御のことを少し。

工学系の学部時代、ロボティクスの単位を取りましたが3自由度以上の関節を再現しようとすると、吐き気がするぐらい複雑な微分方程式が立った気がします。

自由度ってのは関節の数です。なので手なんかを再現しようとすると、肩、肘、手首……これだけでもえぐいですが、さらに指の第一関節、第二関節*指の本数でとんでもないことに><
この時点で既に、手計算は不可能なレベルです。

1995年くらいは、こんな計算はスパコンでもない限り無理といわれてましたが、いまや家庭用のパソコンでもできるようになってしまったらしいです。情報工学の発展とは恐ろしいものですね。

興味のある方はキネマティクス、逆キネマティクス、リカッチ方程式、現代制御らへんで調べてみるといいかもしれません。私は単位を稼ぐために受けたのであって、あまり興味がなく、ようするによくわかりません。



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

Name: Ma  ..比類無きプログラマー(82,523ポイント)   Date: 2010/04/11(日) 10:50   No:50451     
Title: Re:【雑談】人型ロボットの未来    
>no さん
IKだけではなく、Kも勉強するんですね・・・。
まだ私には未知の世界ですが、大学はいったらぜひ学習してみたいです。

私にとっては面白そうな授業なのでぜひとりたいですね!
専門性がない高校の授業はあまり面白くない・・・。


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

Name: no  ..中級者(10,619ポイント)   Date: 2010/04/11(日) 20:51   No:50469     
Title: Re:【雑談】人型ロボットの未来    
>Maさん

もし将来ロボットを作りたいというならば、やはり大学は工学系であったほうがよいでしょうね。
日本で一番ロボットに力を注いでいる大学は大阪大学です。

ロボット系の学会の論文が大阪大学関係者のものばかりで、とても驚いた記憶があります。

まあそれはともかく、工学系といってもMaさんが望む「人のように流暢に動き、感情を持つロボット」という物を作るには、情報系の深い知識と、制御系の深い知識が必要です。

しかしながら、情報系の学科なら情報系の知識しか学べず、制御系の学科なら制御系の知識しか学べません。

情報系の学科でも、上辺だけの制御系はやりますが、へぇそんなのあるんだなぁ程度の知識しか付きません。
制御系の学科でも、上辺だけの情報系はやりますが、(略)。

かくいう私は、どちらかというと制御系の国立大学にいました。
山ほど制御の単位を取りました。して、とりあえず人工知能や強化学習、アルゴリズムなどもやりました。が、まぁ、やはりよくわかりませんでしたね。

最終的にもっとも興味が持てたのが数学であったため、数学科の大学院、解析学(微分積分・関数中心の数学)の研究室にいますが、やはりやりたいことをやっている今が一番楽しいです。
勉強も勉強と感じません。自分の好きなことをただ好きなようにやっているという感じですね。

話がそれました。

何が言いたかったかというと、そういうロボットを作る研究をしたいなら、制御系の専門家になるか、情報系の専門家になるか、二つの道がありますよ、ということです。
つまり、情報か制御っぽい大学にはいるべき、ということですね。

それを選択する第一段階が、大学入試で、もうそろそろではないですか?

よく考えないと最悪、4年間を無駄にします。よく調べて考えるとよいのではないでしょうか。

あと、ロボット関係はとてもお金がかかるので、多くの研究費を国から獲得している国立大学でないと、ろくなことができません。


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

Name: Ma  ..比類無きプログラマー(82,611ポイント)   Date: 2010/04/11(日) 23:18   No:50479     
Title: Re:【雑談】人型ロボットの未来    
返信ありがとうございます。
情報系に進むつもりでいます。
願わくば、大阪、東京工業、筑波等を検討しています。
勉強しないと。。。あと一年しかない・・・。

なるほど、ロボット系は大阪大学が強いんですね。
いい情報ありがとうございます。 編集済み


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

Name: Ma  ..比類無きプログラマー(82,595ポイント)   Date: 2010/04/12(月) 11:00   No:50488 解決!     
Title: Re:【雑談】人型ロボットの未来    
雑談目的だったので解決にしておきます。

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

Name: Ma  ..比類無きプログラマー(82,597ポイント)   Date: 2010/04/12(月) 11:04   No:50489     
Title: Re:【雑談】人型ロボットの未来    
>名前は忘れましたが、最近のFPSで戦争ものなんですが 
>屋外に無人の狙撃装置があったので「マジか」と衝撃を受けました 
>人間(体温)をセンサーで監視してて、射程内に入ったら 

いまさら思い出しましたが、バージョンは違えど Call Of Duty Modern Warfare  かな。


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

Name: こうめいいのち   Date: 2010/07/02(金) 15:00   No:503811278050401     
Title: Re:【雑談】人型ロボットの未来    
質問掲示板に心のしくみを書いています。見てください。意見聞かせてください。

Name: こうめいいのち   Date: 2010/07/06(火) 12:47   No:503811278388058     
Title: Re:【雑談】人型ロボットの未来    
心のしくみ(質問箱で書いてしまいました)の続き〜 相から報により心は顕れる。心は命の中の1つの機能。見ているものの、最初から最後まで一貫して見ている。報まで。(これを本末究キョウ等という)相から報、本末究キョウ等を加えて十如是という。毎日起きて1日起きている間じゅう見ているこの世界は全て十如是。それも心で強く感じ受けた時は、瞬間に見ているものの、十如是を見て、瞬間に心として顕れる。強く感じる心は十如是を見ている。(強く心が認識「感じている」する)それを活用して人は環境順応、現実変革している。生命が受け継がれていく中で、生存するために鍛えられた機能(能力)。とくに、生存、生きるか死ぬかに反応しやすくできている。十如是をはっきりとらえようとする。そのもの、世界の時間の流れに起きる現象を一瞬で見た時、その認識度合い、対処度合いで、苦しいとか、怖いとか、楽しいとか、対応できるか、できないか、決断をせまられる危機的状況、絶体絶命になればなるほど、十如是は、はっきり見え、強烈に心の生命状態として顕れる。つまり十如是により心は、顕現する。瞬間の命に、心の中に2つの生命状態が存在する。前にも、言った、認識と対処で、それぞれ生命状態が違うが同時に持っている。心の生命状態いろいろを10種類に分け、表現したのを十界と言う。2つの認識と対処、同時に瞬間に持っている生命状態を十界互具という。〜心のしくみを解き明かすのにもう少し仏教用語が出てきます〜ややこしいですが、理論的に、まとめます。十如是にも3つあります。相如是(悟りの諸法実相身)からの十、是相如(智恵の報身)からの十、如是相(慈悲の応身)からの十。十というのは、相から報、相如是の十は、相如是、性如是、体如是と続いて本末究キョウ等まで。あと2つもその流れ。認識が知恵の報身で、空諦の是相如からの十、十界。対処が慈悲の応身で、仮諦の如是相からの十、十界。悟りの諸法実相身は、中諦の相如是からの十、十界。智恵報身(空諦の十如、十界)認識+慈悲応身(仮諦の十如、十界)対処、この2つの生命状態を具えた(十界互具)諸法実相を悟る、悟りそのものの身を法身という。空仮中について(例)自動車のエンジンで見ると、仕組み、機能は空、電源を入れ動くは、仮、エンジンそのものが中。中は、中心即全体。空仮(十界互具)を持った中諦(エンジン)ということになる。この場合エンジンに心がないので、空仮互具を持った中諦。

Name: こうめいいのち   Date: 2010/07/07(水) 00:37   No:503811278430650     
Title: Re:【雑談】人型ロボットの未来    
邦楽きみにしか聞こえない、KIDが好き乙一さんの作品。蛇に立ち向かう心を蛙はどう出せばいいが。勇気という言うものを説明する。



Name: c++初心者  ..かけだし(1,993ポイント)   Date: 2010/04/07(水) 07:24   No:50241       
Title: 学校の宿題のプログラムがうまくいかなくて困っています。    
初めまして。大学でC++を習い始めたばかりです。

課題で、exams.datというファイルの中にある以下のデータを読み取り。
abcdefabcdefabcdefab
1234567
abcdefabcdefabcdefab
9876543
abddefbbbdefcbcdefac
5554446
abcdefabcdefabcdef
4445556
abcdefabcdefabcdefabcd
3332221
abcdefghijklmnopqrst

一番上の列を模範解答として読み込み。
残りは生徒のIDナンバーと生徒の解答として読み込みます。生徒の数はわからないことになってます。

abcdefabcdefabcdefab ←模範解答
1234567 ←IDナンバー
abcdefabcdefabcdefab ←1234567の解答
9876543 ←IDナンバー
abddefbbbdefcbcdefac ←9876543の解答
5554446 ←IDナンバー
abcdefabcdefabcdef ←5554446の解答
4445556 ←IDナンバー
abcdefabcdefabcdefabcd ←3332221の解答
3332221 ←IDナンバー
abcdefghijklmnopqrst ←3332221の解答

その後、scores.datというファイルの中に。
生徒の解答と模範解答を照合して
もし正解ならスコアを一点ずつ加算し、最終的にはIDとスコアを表示。
もし生徒の解答数が少なすぎる(20個に満たない)場合、IDとTwo few answersと表示。
もし生徒の解答数が多すぎる(20個より多い)場合、IDとToo many answersと表示。
もし生徒の解答にa,b,c,d,e,f以外のものがひとつでも含まれる場合。IDとInvalid answersと表示。

結果的にはこのように表示されます。
1234567   20
9876543   15
5554446   Too few answers
4445556   Too many answers
3332221   Invalid answer

さて僕のプログラムなのですが、ファイルの中身の結果がこのようになってしまいます。
1234567   20
9876543   15
5554446   Too few answers
4445556   Too many answers
3332221   Invalid answer
3332221   5

僕が思うに、データの読み込みの部分のループがうまく行われていないのだと思うのですが……

以下が僕のプログラムです。

#include<fstream>
#include<string>
#include<iostream>
#include<iomanip>

using namespace std;

void readInput(string&, int [], string [], int&); // read keys, ids,
                                                  //and
                                                // answers
void gradeExam(string, int [], string [], int);    // grade each
                                                 // student's
                                                // answer

int main()
{
    string key;            // the key of the exam
    string answers[20];    // answers from students
    int id[20];            // ids of students
    ofstream outFile;      // keeps the exam result
    int stc;

    readInput(key, id, answers, stc);
    gradeExam(key, id, answers, stc);

    return 0;
}

// read data from file
void readInput( /* out */ string& key,
                /* out */ int id[],
                /* out */ string ans[], int& stc)
{
    ifstream inFile;       // contains the exam data to be processed
    // Ask for the input file name
    // Open input file and read input data into key, id, and ans
    inFile.open("exams.dat");

    int loopcount = 0;
    inFile >> key;
    inFile >> id[loopcount];
    while(inFile)
    {
        inFile >> ans[loopcount];
        loopcount++;
        inFile >> id[loopcount];
    }
    stc = loopcount;
    
    inFile.close();
}

// Process each student's answer and write the grade to a file
//   Check if the length of student's answer is the same as the key length
//   Check if each answer lies between 'a' and 'f'
void gradeExam( /* in */ string key,
                /* in */ int id[],
                /* in */ string ans[], int stc)
{
    ofstream outFile;       // output file to contain the grade report
    int posit = 1;
    int score = 0;
    int count = 0;

    // Ask for the output file name and open output file
    outFile.open("scores.dat");
    outFile << left;
    // grade each answer and write the result to the file
    while(count < stc)
    {
        if(ans[count].length() < 20)
            outFile << fixed << setw(10) << id[count]
                    << setw(10) << "Too few answers" << endl;
        else if(ans[count].length() > 20)
            outFile << fixed << setw(10) << id[count]
                    << setw(10) << "Too many answers" << endl;
        else
        {
            posit = 1;
            score = 0;
            while(posit < 21)
            {
                if(key.substr(posit, 1) == ans[count].substr(posit, 1))
                    score += 1;
                else if(ans[count].substr(posit, 1) != "a"
                     && ans[count].substr(posit, 1) != "b"
                     && ans[count].substr(posit, 1) != "c"
                     && ans[count].substr(posit, 1) != "d"
                     && ans[count].substr(posit, 1) != "e"
                     && ans[count].substr(posit, 1) != "f")
                {
                    outFile << fixed << setw(10) << id[count]
                            << setw(10) << "Invalid answer" << endl;
                    break;
                }
                posit++;
            }
            outFile << fixed << setw(10) << id[count]
                    << setw(10) << score << endl;
        }
        count++;
    }

    outFile.close();
}

mainの部分は最初から先生が書いてありました。
どう直せばよろしいのでしょうか?
よろしくお願いします。


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


Name: c++初心者  ..かけだし(2,198ポイント)   Date: 2010/04/07(水) 07:35   No:50242     
Title: Re:学校の宿題のプログラムがうまくいかなくて困っています。    
訂正です
例の部分
abcdefabcdefabcdefab ←模範解答 
1234567 ←IDナンバー 
abcdefabcdefabcdefab ←1234567の解答 
9876543 ←IDナンバー 
abddefbbbdefcbcdefac ←9876543の解答 
5554446 ←IDナンバー 
abcdefabcdefabcdef ←5554446の解答 
4445556 ←IDナンバー 
abcdefabcdefabcdefabcd ←3332221の解答(4445556の解答でした。) 
3332221 ←IDナンバー 
abcdefghijklmnopqrst ←3332221の解答 


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

Name: Ma  ..比類無きプログラマー(78,379ポイント)   Date: 2010/04/07(水) 08:44   No:50243     
Title: Re:学校の宿題のプログラムがうまくいかなくて困っています。    
    int loopcount = 0; 
    inFile >> key; 
    inFile >> id[loopcount]; 
    while(inFile) 
    { 
        inFile >> ans[loopcount]; 
        loopcount++; 
         inFile >> id[loopcount]; 
    } 



    inFile >> key;
    int loopcount = 0;
    while(inFile){
        inFile >> id[loopcount];
        inFile >> ans[loopcount];
        loopcount++
    }


これでどうですか?

あと、気になる点といえば、loopcount が19を超えた場合の例外処理をしなくていいのか。
*生徒の数がわからないのではなかったのか?なのに、先生は main で 20 と限定してしまっている・・・・。
今回の質問のエラーはたぶんこれでなるとおもうので、他の部分(ファイル名入力など)はスルーしますね。 編集済み


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

Name: c++初心者  ..かけだし(2,381ポイント)   Date: 2010/04/07(水) 09:07   No:50244     
Title: Re:学校の宿題のプログラムがうまくいかなくて困っています。    
Ma さん返信ありがとうございます。

試してみた結果、
1234567   20
9876543   15
5554446   Too few answers
4445556   Too many answers
3332221   Invalid answer
3332221   5
32767     Too few answers
というアウトプットになりました。

補足:
先生が生徒の数は多くても20人くらい、ということでid[20]というのはすでに用意されていました。

もう少し考えてみます。
ありがとうございました。


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

Name: Ma  ..比類無きプログラマー(78,802ポイント)   Date: 2010/04/07(水) 10:54   No:50246     
Title: Re:学校の宿題のプログラムがうまくいかなくて困っています。    
先ほどの修正に以下の修正を加えてください。
(すいません、さきほどは動作チェックしませんでしたが、今回はチェックしましたので確実です。)

修正1(if が増えた)
    inFile >> key; 
    int loopcount = 0; 
    while(inFile){ 
        inFile >> id[loopcount]; 
        inFile >> ans[loopcount];
        if(inFile)
            loopcount++;
    } 

修正2(Invalid 判定)
           posit = 1; 
            score = 0; 
            bool invalidFlag = false;
            while(posit < 21) 
            { 
                if(key.substr(posit, 1) == ans[count].substr(posit, 1)) 
                    score += 1; 
                else if(ans[count].substr(posit, 1) != "a" 
                     && ans[count].substr(posit, 1) != "b" 
                     && ans[count].substr(posit, 1) != "c" 
                     && ans[count].substr(posit, 1) != "d" 
                     && ans[count].substr(posit, 1) != "e" 
                     && ans[count].substr(posit, 1) != "f") 
                { 
                    outFile << fixed << setw(10) << id[count] 
                            << setw(10) << "Invalid answer" << endl; 
                    invalidFlag = true;
                    break; 
                } 
                posit++; 
            }
            if(!invalidFlag)
                outFile << fixed << setw(10) << id[count] 
                    << setw(10) << score << endl;  編集済み


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

Name: c++初心者  ..かけだし(2,274ポイント)   Date: 2010/04/07(水) 11:52   No:50247     
Title: Re:学校の宿題のプログラムがうまくいかなくて困っています。    
Maさん

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

インプット時のループだけに問題があったと思ったんですけれど、アウトプットの方にもあったのですか?
できれば詳しく教えていただけないでしょうか?


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

Name: Ma  ..比類無きプログラマー(79,154ポイント)   Date: 2010/04/07(水) 13:14   No:50249     
Title: Re:学校の宿題のプログラムがうまくいかなくて困っています。    
・インプット側の問題
実は、インプット側には問題がありませんでした。
最初、見たときは、IDの読み込み回数と解答の読み込み回数があっていなかったのでおかしいと思いこんでいたんですが、
そうではなく、最初の状態でも正常に動作します。

私の方法では、生徒単位(IDと解答)でよみこんで、(どちらかで)失敗か最後まで読み込めばカウンターをまわさず、終了。
あなたの最初の方法では、IDを先に読み込み、ループ内で解答→IDの順で読み込む事によって、
while文はID読み込み時にエラーが起きたかどうかを条件にしています。

どちらかというと、最初のままのほうが理想的だったかもしれません。



・アウトプット側の問題
本来、else{}スコープ内では、(これまで文字数が多すぎる/少なすぎるをifで判別したので)取り扱えない文字が入っていた場合と、正常な場合のみがあるんですよね?

そこで、取り扱えない文字があれば、エラーの表示、そうでなければ正常の表示をしなければなりません。
ただ、修正前のコードは、「そうでなければ」 の判定がありませんでした。

取り扱えない文字があればエラー表示、次に正常の表示 となっていたのです。



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

Name: c++初心者  ..かけだし(2,288ポイント)   Date: 2010/04/08(木) 01:02   No:50267 解決!     
Title: Re:学校の宿題のプログラムがうまくいかなくて困っています。    
丁寧に教えていただき、本当にありがとうございました。

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

Name: たいちう  ..熟練のプログラマー(68,574ポイント)   Date: 2010/04/08(木) 08:46   No:50271     
Title: Re:学校の宿題のプログラムがうまくいかなくて困っています。    
冗長な所が多かったので作ってみました。ご参考までに。
(ファイル出力は省略)
#include <iostream>
#include <fstream>
#include <sstream>
#include <string>

using namespace std;

string check(const string &answer, const string &str) {
    if (answer.size() > str.size())
        return "Too few answers";
    else if (answer.size() < str.size())
        return "Too many answers";

    int score = 0;
    for (size_t i = 0; i < answer.size(); i++) {
        if (str[i] < 'a' || 'f' < str[i])
            return "Invalid answers";
        score += (str[i] == answer[i]);
    }
    stringstream ss;
    ss << score;
    return ss.str();
}

int main() {
    ifstream ifs("exams.dat");
    string answer;
    ifs >> answer;
    for (;;) {
        int id;
        string buf;
        ifs >> id;
        if (ifs.eof()) break;
        ifs >> buf;
        if (ifs.eof()) break;
        cout << id << " " << check(answer, buf) << endl;
    }
    return 0;
}


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

Name: c++初心者  ..かけだし(2,315ポイント)   Date: 2010/04/12(月) 08:04   No:50486     
Title: Re:学校の宿題のプログラムがうまくいかなくて困っています。    
たいちうさん

もっと簡単にできるんですね。
ありがとうございました。


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



Name: kai  ..中級者(14,025ポイント)   Date: 2010/04/11(日) 23:45   No:50480       
Title: フェードイン、アウトの2通りのやり方について    
龍神録を改造して遊ばせて貰ってます。
フェードインとフェードアウトのやり方について
お聞きしたいのですが、こちらでは

ステージタイトルを表示させてみよう
http://dixq.net/rp/38.html

ブレンドを使ってフェードイン、アウトを行ってます。
こちらでは

9.フェードイン、フェードアウト
http://homepage2.nifty.com/natupaji/DxLib/dxprogram.html#N9

輝度を使ってフェードイン、アウトを行ってます。
ブレンドと輝度を使った二通りの方法があるのですが
実際のところ見た目は同じだと思いますが、
プログラム的にはどちらを使ってフェードイン、アウトを行ったほうが
よろしいのでしょうか?
また、それぞれの利点や欠点があれば詳しく教えてほしいです。
よろしくお願いします。


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


Name: Justy  ..伝説なるハッカー(518,490ポイント)   Date: 2010/04/12(月) 00:43   No:50483     
Title: Re:フェードイン、アウトの2通りのやり方について    
>どちらを使って
 何のフェードイン・フェードアウトなのかに寄ります。

 例えば特定オブジェクトの登場・退場時にフェードイン・フェードアウトしたいのであれば
通常αブレンドで行うのが妥当です。
 輝度で行うと、例えば [R, G, B] = [0, 0, 0]で表示すると消えるわけではなく、
その絵は輝度0の黒い絵が表示されてしまいますので、意図とは異なる表示になります。

 ただ、敵を倒した時など輝度を [R, G, B] = [255, 0, 0]と色をつけた状態にしてから
αブレンドで消していくといった手法もありますので、どちらも使う可能性はあります。


 画面全体のフェードイン・フェードアウトの場合であれば、その 38章のように白や黒などの色の板を
前面に配置してαブレンドを使えばその色への或いはその色からの画面全体のフェードができます。
 輝度でも全てのオブジェクトの描画前に変更しておくことで画面全体のフェードイン・アウトは
できなくはないですが、(フェードという意味では)主に黒に対してしか有効に使えないので
汎用性に欠けます。

 とそんなところでしょうか。


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

Name: kai  ..中級者(14,146ポイント)   Date: 2010/04/12(月) 01:29   No:50485 解決!     
Title: Re:フェードイン、アウトの2通りのやり方について    
なるほど。ブレンドと輝度は同じようなものだと考えていたのですが
よく考えてみたら全然違いますね・・
38章を輝度でフェードイン、アウトしていったら、
単に真っ黒から段々表示していき、時間が経ったら真っ黒になり消える
という全然違う表示の仕方になってしまいますし。
勉強不足でした。

>Justyさん
非常に分かりやすく参考になり、理解できました。
ありがとうございました!


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



Name: HK  ..ぴよぴよ(624ポイント)   Date: 2010/04/11(日) 17:26   No:50460       
Title: 空間が歪んだような描画  歪絵    
こんにちは。

龍神録の仕様を受け継いだまま本家東方になるべく近いゲームを作成しています。

質問者のレベルは龍神録のプログラムを一通り勉強し80〜90%程理解しています。
加えて、曲線レーザーや本家東方の色々な弾幕をトレースすることはできます。

今、詰まっていることは、本家ボスの演出の1つである歪絵です。
(こう呼んでいいのかはわかりませんが、他の言い方を知らないもので歪絵と呼んでいます)
添付画像を見ていただいたほうが簡単ですね。

ボスの周りを良く見てみると空間(背景)が歪んだように見えます。

このような描画をするにあたっての第一手が見当つかずになってコマっています。

また、想像するに結構思い処理になりませんか?? その点も不安です。

Visual C++ 2008


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


Name: kai  ..中級者(13,814ポイント)   Date: 2010/04/11(日) 22:59   No:50476     
Title: Re:空間が歪んだような描画  歪絵    
同じ質問をした方が多数います。
こちらを参考にしてみてはいかがでしょうか?

http://www.play21.jp/board/formz.cgi?action=res&resno=37401&page=&lognum=114&id=dixq&rln=37407


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

Name: HK  ..ぴよぴよ(640ポイント)   Date: 2010/04/12(月) 00:12   No:50481 解決!     
Title: Re:空間が歪んだような描画  歪絵    
ありがとうございました。

参考にしてみます。


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



Name: SG  ..ぴよぴよ(63ポイント)   Date: 2010/04/11(日) 19:13   No:50463       
Title: dxaファイルの生成・展開について    
はじめまして。
皆様のご意見にはいつも大変お世話になっております。

件名について
dxaファイルの生成および展開で、パスワードを設定する(されている)場合には
dxadecode.exeないしdxaencode.exeをコマンドプロンプトから
起動しなさい、ということでしたがこの方法が分かりません。

コマンドプロンプトにどういうコマンドを打てばよいのか分からない、ということです。
お手数ですがご教授お願いいたします。


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


Name: Justy  ..伝説なるハッカー(518,949ポイント)   Date: 2010/04/11(日) 21:55   No:50473     
Title: Re:dxaファイルの生成・展開について    
 コマンドプロンプトの起動は出来ている、ということでいいでしょうか。
 DxaEncode.exe / DxaDecode.exeツールでパスワードがある場合、入力フォーマットは
 
実行ファイル名 -K:パスワード 対象のディレクトリ・ファイル

 となっています。
 最後のところは DxaEncode.exeの場合は対象のディレクトリで DxaEncodeの場合対象のファイルを
指定することになります。


 簡単に入力する方法としてはまず DxaEncode.exe(或いは DxaDecode.exe)を
コマンドプロンプトにドラッグします。
 するとフルパスが入力されます。

 続いて、スペースを入力し、更に続けて -K:XXXXXと打ちます(XXXXXにパスワードを入れる)。
 更に続けてスペースを入力し、対象のディレクトリ(或いはファイル)をコマンドプロンプトに
ドラッグします。

 後はエンターを押せば実行されるはずです。
 


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

Name: SG  ..ぴよぴよ(182ポイント)   Date: 2010/04/11(日) 23:13   No:50477 解決!     
Title: Re:dxaファイルの生成・展開について    
Justyさん

クイックレスポンスありがとうございました。
無事解決しました。今夜はよく眠れそうです。
プログラミングはじめてまだ2週間くらいですが、面白いですねぇ
今の職種選んだのは間違いだったかなぁ……

ともあれ、とても助かりました。
(厚かましいようですが)今後とも仲良くしていただけますと幸いです。
では〜


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



Name: yskey  ..初心者(5,195ポイント)   Date: 2010/04/10(土) 00:44   No:50375       
Title: 不規則な枝の数のグラフ構造について    
どうもyskeyです。お世話になっています。
現在DxLibで戦略ゲームを製作中です。

ノードからの枝の数が異なるグラフ構造を実装しようと思うのですが、通常はどのような方法で実装されるのですか?
http://ja.wikipedia.org/wiki/%E3%83%80%E3%82%A4%E3%82%AF%E3%82%B9%E3%83%88%E3%83%A9%E6%B3%95
Wikipediaの「ダイクストラ法」のページにある画像が丁度実装したいものです。

調べても中々具体例が探し出せないので困っています。

通常、二分木やリスト構造なら構造体内にある自身を示すポインタの数は大体1,2個で十分ですが、
今考えているような構造だと、枝の数が1本だったり、3本、5本だったりして少し工夫しなければなりません。

そこで、一応多めにポインタを宣言しておくような方法が考えれたのですが、この方法はどうなんでしょうか?

また、もう一つ疑問があります。
この複雑なデータ構造をどのように保存すべきなのでしょうか?
(実際のデータは切り離して、それぞれのノードから参照する…とか?)



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


Name: MNS  ..プログラマー(34,255ポイント)   Date: 2010/04/10(土) 07:36   No:50382     
Title: Re:不規則な枝の数のグラフ構造について    
動的配列を使うのはどうでしょうか?

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

Name: Ma  ..比類無きプログラマー(80,961ポイント)   Date: 2010/04/10(土) 08:49   No:50383     
Title: Re:不規則な枝の数のグラフ構造について    
私ならノードの構造体内に、枝分かれする(型という意味で)同じ構造体へのポインタの配列を用意しますね。
結局、簡単に言えば動的配列です。
あとデータの持たせ方についてですが、私ならデータへのポインタをノードに持たせます。
とはいっても、メリット、ディメリットがぱっと思いつかないんで、このへんは他の方の意見も聞いてみてください。

一応、ぱっと思いついたメリット
・あるクラスが登録しておきたいデータだったとします。そのあるクラスを継承させて登録したい場合、親クラス名のポインタで両方のクラスに対応できる。 編集済み


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

Name: たいちう  ..熟練のプログラマー(69,536ポイント)   Date: 2010/04/10(土) 09:54   No:50390     
Title: Re:不規則な枝の数のグラフ構造について    
> そこで、一応多めにポインタを宣言しておくような方法が考えれたのですが、
> この方法はどうなんでしょうか?

あらかじめ最大を決めておく必要があること、
メモリ使用量に無駄が発生すること、という欠点がありますが、
これに目をつぶれるならば大丈夫でしょう。

とりあえずは簡単なこの方法で作成し、後で必要になったら動的配列に
変更することも可能です。


> この複雑なデータ構造をどのように保存すべきなのでしょうか?

すべきかどうかはともかく、例えばこのようにできます。
(Wikipediaのダイクストラ法の動作のアニメーションのグラフ)

1, 2, 3, 6
2, 1, 3, 4
3, 1, 2, 4, 6
4, 2, 3, 5
5, 4, 6
6, 1, 3, 5


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

Name: yskey  ..初心者(5,294ポイント)   Date: 2010/04/10(土) 12:47   No:50404     
Title: Re:不規則な枝の数のグラフ構造について    
>>MNSさん、Maさん、たいちろうさん、ご返信ありがとうございます。
動的配列というとmalloc関数などで確保する変数の配列ですよね…?(vectorコンテナも?
それはわかるのですが、構造体を一度宣言した後に構造体内の変数を動的に変化させることができるのですか?


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

Name: たいちう  ..熟練のプログラマー(69,762ポイント)   Date: 2010/04/10(土) 13:01   No:50406     
Title: Re:不規則な枝の数のグラフ構造について    
動的に変化させるのはあくまでもデータです。こんな感じ。
struct Hoge {
    int id;
    vector<Hoge> link;
};


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

Name: たいちう  ..熟練のプログラマー(69,783ポイント)   Date: 2010/04/10(土) 13:03   No:50407     
Title: Re:不規則な枝の数のグラフ構造について    
ポインタにしないと無駄が多すぎでした。失礼。
vector<Hoge*> link;


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

Name: yskey  ..初心者(5,350ポイント)   Date: 2010/04/10(土) 13:20   No:50408     
Title: Re:不規則な枝の数のグラフ構造について    
>>たいちろうさん、返信有難うございます。
やはりvectorコンテナですか。イメージがつかめました。有難うございます。
早速、書いてみたいと思います。

 編集済み


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

Name: yskey  ..初心者(5,501ポイント)   Date: 2010/04/11(日) 15:43   No:50457     
Title: Re:不規則な枝の数のグラフ構造について    
すいません、わからない所がまた一つ、、、
Wikipediaの「ダイクストラ法」のページにある画像のグラフ構造には枝に数字(距離の情報)がありますが、あれはどのように実装しているんでしょうか?
単純に他の構造体を参照するだけでは上手く行きません…
間に
struct node{
  int data;
  vector<node*> link;
};
struct branch{
  int data;
  int* link;
};

などとブランチ(枝)を別の構造体にする手を思いつきましたが、あまり最善策ではないような気がします。
何かよい方法はありますか?



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

Name: たいちう  ..比類無きプログラマー(70,486ポイント)   Date: 2010/04/11(日) 20:28   No:50467     
Title: Re:不規則な枝の数のグラフ構造について    
一例です。
struct Hoge {
    int id;
    vector<Hoge*> link;
    vector<int> distance;
};



> などとブランチ(枝)を別の構造体にする手を思いつきましたが、
> あまり最善策ではないような気がします。

提示された条件のみでは何が最善策かなど判断できません。
思いついた方法で実装し、何か問題があれば改善すれば良いのではないですか?


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

Name: yskey  ..初心者(5,674ポイント)   Date: 2010/04/11(日) 21:55   No:50472 解決!     
Title: Re:不規則な枝の数のグラフ構造について    
>>たいちろうさん、ご返信有難うございます。
実践あるのみということでしょうか?
よく考えたら、たいちろうさんが示された一例で十分実装できますね。
ありがとうございます。

戦略シミュレーションゲームは、土地、ユニット、国、、、
データ構造が複雑そうですが一つずつ消化していけばなんとかやっていけそうです。





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



Name: 紅葉  ..中級者(13,336ポイント)   Date: 2010/04/10(土) 02:33   No:50379       
Title: ReadMe作成ツールを作りました    
ReadMeを作る際に役に立ちそうなフリーソフトを作ってみました。
日頃、こちらの掲示板の方々にはお世話になっているので宜しければお使い下さい。

また質問になってしまって大変申し訳ないのですが
このフリーソフトの設定ファイル(ユーザー名等)をあらかじめ登録させておいて
次回作る際に簡略化出来るような仕様にしようとしております。

// 設定ファイル名 config.ini
ソフト名 = テスト
作者名 = 紅葉
E-mail = momiji@momiji

このように記述し(ユーザが使い易ければ別の方式でもOK)
起動時に自動的に入力されているようにしたいです。
ファイルの読み込みなどはわかるのですが
どの様に分ければよいのかがわかりません。

もし宜しければで構いませんのでご教授願えないでしょうか?



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


Name: Ma  ..比類無きプログラマー(80,374ポイント)   Date: 2010/04/10(土) 03:53   No:50380     
Title: Re:ReadMe作成ツールを作りました    
>どの様に分ければよいのかがわかりません。 

質問の意図がよくわかりません。
行ごとで読み込んでいって、=の左辺が規定の文字列と一致すれば
右辺の文字列を起動時に左辺に合う規定のテキストボックスにいれればいいのではないでしょうか?


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

Name: たいちう  ..熟練のプログラマー(69,302ポイント)   Date: 2010/04/10(土) 09:09   No:50386     
Title: Re:ReadMe作成ツールを作りました    
そのような場合は、GetPrivateProfileStringを使うのが一般的です。

http://msdn.microsoft.com/ja-jp/library/cc429779.aspx


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

Name: dic  ..熟練のプログラマー(59,673ポイント)   Date: 2010/04/10(土) 09:42   No:50388     
Title: Re:ReadMe作成ツールを作りました    
似たようなソフト作ってるのでありがたく使わせていただきます

そこで、使っててちょっとアレ?っとおもったのですが
作成される内容が
≪著作権および免責事項≫
本ソフトはフリーソフトです。自由にご使用ください。
なお,著作権は作者である "ソフト名" が保有しています。

だったんで 著作者名がきてほしいところにソフト名が
きてたんで、報告しておきます


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

Name: 紅葉  ..中級者(13,548ポイント)   Date: 2010/04/10(土) 18:14   No:50424     
Title: Re:ReadMe作成ツールを作りました    
皆様ご回答ありがとうございます。

>>Ma様

行ごとで読み込むことは可能なのですが
どの様に比較?といいますか文字列を切りだせばいいかが
理解できません。
ご教授願えないでしょうか?

>>たいちう様
GetPrivateProfileStringについて調べてみたのですが
構成ファイルは

softname = テスト 
usename = 紅葉 

の様に英字で書くのが一般的なのでしょうか?
この関数の使い方などを調べてみたのですがイマイチわかりません・・・。

>>dic様
ご指摘ありがとうございます。
単純なミスをしておりました。
修正したものを添付させて頂きます。


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

Name: Ma  ..比類無きプログラマー(81,735ポイント)   Date: 2010/04/10(土) 19:39   No:50428     
Title: Re:ReadMe作成ツールを作りました    
GetPrivateProfileString
を使うなら
http://okwave.jp/qa/q207935.html
など、参考に。

私が言っていた方法は、= の位置を見つけ出して、substr で=から左側の文字列のみをすいだし、
その文字列と規定の指示文(ソフト名等)と比較し、一致すれば右辺の文字列を使います。
右辺の文字列も同様にsubstr 等で、=の文字位置よりも右側を(=含まないで)すいだせばいいわけです。


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

Name: 紅葉  ..中級者(13,706ポイント)   Date: 2010/04/11(日) 17:00   No:50459     
Title: Re:ReadMe作成ツールを作りました    
ご回答ありがとうございます。
確かに
this->textBox1->Text = this->textBox1->Text->Substring(2,2);
のようにすれば文字列を取得できるかもしれませんが

>>= の位置を見つけ出して、substr で=から左側の文字列のみをすいだし、 
ここの処理の書き方がわかりません・・・。
他の言語ですとStrPosなどがあるみたいなのですが
今回使っているVC++ではそれらしい関数がみあたりません・・・。


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

Name: Justy  ..伝説なるハッカー(518,578ポイント)   Date: 2010/04/11(日) 18:03   No:50462     
Title: Re:ReadMe作成ツールを作りました    
>ここの処理の書き方がわかりません・・・。 
>ではそれらしい関数がみあたりません・
 Stringクラスには IndexOfがありますが、これでは不足でしょうか?

String.IndexOf メソッド (Char) (System)
ttp://msdn.microsoft.com/ja-jp/library/kwb0bwyd(v=VS.80).aspx

String.IndexOf メソッド (String) (System)
ttp://msdn.microsoft.com/ja-jp/library/k8b1470s(v=VS.80).aspx


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

Name: 紅葉  ..中級者(14,084ポイント)   Date: 2010/04/11(日) 20:03   No:50465     
Title: Re:ReadMe作成ツールを作りました    
皆様のお陰で実装が出来ました。
無理やり感が否めなくて申し訳ないのですが
使って頂ければ幸いです。

またアイコンも見やすいものに変更しました。
添付させて頂きます。
    try{
                System::IO::StreamReader^ sr = 
                gcnew System::IO::StreamReader("config.ini",System::Text::Encoding::GetEncoding(932));
                sr->ReadLine();
                String^ Item;
                while((Item = sr->ReadLine()) != nullptr){
                    int Num = Item->IndexOf("=");    // 文字列検索 
                    if(Item->IndexOf("none") == -1){
                        if(Item->IndexOf("SoftName") != -1) this->textBoxSoftName->Text = Item->Substring((Num+1));
                        if(Item->IndexOf("SoftName") != -1) this->textBoxSoftName->Text = Item->Substring((Num+1));
                        if(Item->IndexOf("UserName") != -1) this->textBoxUserName->Text = Item->Substring((Num+1));
                        if(Item->IndexOf("Mail") != -1)        this->textBoxMail->Text = Item->Substring((Num+1));
                        if(Item->IndexOf("URL") != -1)        this->textBoxURL->Text = Item->Substring((Num+1));
                        if(Item->IndexOf("Move") != -1)        this->textBoxMove->Text = Item->Substring((Num+1));                        
                        if(Item->IndexOf("Note") != -1)        this->textBoxNote->Text = Item->Substring((Num+1));
                    }
                }
                sr->Close();
            }catch(Exception^){
                //MessageBox::Show("初期設定ファイルを作成します。", "メッセージ");
            }



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



Name: rajan  ..ぴよぴよ(301ポイント)   Date: 2010/04/09(金) 18:50   No:50368       
Title: 無題    
i am sorry for everybody , i am goinf to request you please give me any idea to be a perfect programmer , i can speak japanese but i dont understand kanji so please which is the highest way to be a programmer , i like c language programming but i dont understand it but i have to do it.

Rajan


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


Name: バグ  ..ハッカー(194,454ポイント)   Date: 2010/04/09(金) 19:26   No:50369     
Title: Re:無題    
Please make an effort desperately.

Bug


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

Name: もぐりん  ..ぴよぴよ(919ポイント)   Date: 2010/04/09(金) 19:54   No:50370     
Title: Re:無題    
Follow the rules, please ask your questions in Japanese.
If you do not understand Japanese, in your native language, thank you the question that we can understand.
Try a Google search on the boards What countries other than Japan do?


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

Name: ぽっけ  ..ぴよぴよ(735ポイント)   Date: 2010/04/10(土) 17:33   No:50423     
Title: Re:無題    
Nice to meet you,rajan.After reading a bunch of articles you have posted, I also feel something along those lines...Although I'm learning several programming language in school,if this goes on,
It can hardly be said that I'll be able to handle working-level programming.
So, I'm teaching myself C/C++ with several study books I bought.The reason why I chose C/C++ for my target is because I think C/C++ is the best for game programminglanguage.
 Actually, development language of the platform which we can sell our original game is C-related language.(such a Xbox360, iPhone, and android..)
I want to make my original game and market it for consumer at some future date... 
OK, let's get back to the subject.You want to be a perfect programmer, and I also...As noted before I'm studying my own self with C introductory guide, C++ introductory guide,C++efficient technique guide, and structured approachfor for game programming(with C/C++) guide.(To tell the truth, I cant go with last 2 guides yet..)You cant understand kanji and difficult Japanese?That's OK.I can explain them with simple Japanese or English.I know My English proficiency is not so good yet. However, I wish It will improve little by little by work together amicably with you(if you agree..).
My second goal is make a friend of English speaker and improve my English skills.Though we may not devote sufficient time to debating this issue because each has their own reasons, why don't we try it together?If you're interested in, please send me message to 
[learning.cpro@gmail.com]
see ya.


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

Name: Ma  ..比類無きプログラマー(82,213ポイント)   Date: 2010/04/10(土) 20:01   No:50431     
Title: Re:無題    
規約違反、英語での指摘後もまったく反省なし。
まとめる前のスレ数で数えると、いまのところ計3つのスレを放置しています。
そろそろIP禁止等の措置をするべきと考えます。

以下規約違反している部分です。
>4  義務行為
>●解決したら何も言わずに去らず、回答してくださった方にお礼を言う。
>●質問した人は、必ず最後に解決したかどうかの旨を明記し、トピックを解決状態にする。

以前英語で注意しても反応がないので、以下に英語で警告をしました。

Hi rajan.

I think you are not listening to me at all.
You are violating the rule of this forum!

>* Abandoning the past posted thread without any reply to the answers is considered very rude and immoral in this forum.  
>(At least I believe so.)  

>Just post a message to thank for reply or push the "解決" button and post to represent that the question has been resolved. 


Also, this is in the official rule page, which states

>Mandatory Obligation
>・If the question has been resolved, do not leave without saying anything and thank the people who answered the question.
>・The person who asked question must note that if it has been resolved or not and change the topic's state to "resolved".

Just to let you know, I am suggesting people to ban your IP because you seems that you are learning nothing.

If you don't want that to happen, do something about this immediately.


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

Name: Dixq (管理人) [URL]  ..ウィザード(1,174,664ポイント)   Date: 2010/04/11(日) 17:28   No:50461     
Title: Re:無題    
Maさんの仰ることは尤もだと思いますが、まぁあまり厳しい決まりも居心地が悪くなると思いますし^^;
以前かなり悪質な荒らしがありましたが、その時もIP禁止はしませんでしたし、
IP禁止は余程の事が無いとしたくはないので・・。
それにIP変えたらアクセス出来るわけなので、そうなると意味もなくなってしまいますしね。

今回の場合、悪質というより、意味がわからずこっちのコメントの内容が伝わっていないだけだと思います。
尤も意味が理解出来ないのに質問トピを立てる理由はよくわかりませんが・・。

解らないなら解らないと言ってくれるか、何かコミュニケーションを取ろうとしてくれないとこっちも対応のしようがないですねぇ;


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



Name: dic  ..熟練のプログラマー(60,006ポイント)   Date: 2010/04/10(土) 10:17   No:50393       
Title: 階層図を書いてみました    
なかなかプログラムを把握できず
仕事もやってるので、数日後にはまた最初から
プログラムを読んで理解しないといけないという立場でして

図だったら比較的理解しやすい(修正しやすい)と思い
UML図とフローチャートを組み合わせて
図を作ってみました

シューティングとしては4面までのものです

なにか欠落してたり、ここはこうしたほうがいいんでは?
などあったら、指摘してくれるとありがたいです


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


Name: Ma  ..比類無きプログラマー(81,222ポイント)   Date: 2010/04/10(土) 11:02   No:50396     
Title: Re:階層図を書いてみました    
このような図を簡単に生成してくれるプログラムとかあるとちょっぴり便利そうですね。

気になった点

ステージの処理の分岐後、ゲームクリアかゲームオーバー画面にいくようですが、
両方当てはまらない場合、つまりプレイ中の場合はステージの処理のノードから分岐にいかずに、メインループにもどる って感じで正しいのでしょうか?

いまのままだと、初見では必ず分岐にいくと思ってしまうのですが、しかたないんでしょうか。
分岐をもうひとつ作って、メインループに戻る と特殊なノードを作るぐらいしか思いつかない…。
同様のことがステージ初期化の分岐でも起きてます。

*追記
UML図については知らないので、無知なこといってるかもしれません(汗 編集済み


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

Name: dic  ..熟練のプログラマー(60,327ポイント)   Date: 2010/04/10(土) 15:24   No:50415     
Title: Re:階層図を書いてみました    
う〜ん、たしかにUMLとフローチャートをごちゃまぜにしたら
わけがわからないですね

>メインループに戻る
関数の呼び出し順番だけ表現してるだけで
メインループには全部戻ってくるようになってます

ステージ初期化の分岐では
敵や弾の画像など、同じ変数を使うので
あとはそのステージ特有の変数の初期化だけですむのです
それに初期化だけなので一回呼び出すだけでいいんで
ここもswitchで分けました

このUMLはクラス図と呼ばれるもので
アクティビティ図という表記方法もあるんで
アクティビティ図にしてみたらスッキリしました

UMLの知識はあるんですが、支払がクレジットカードのみなんで
UMLの資格が取れないんです・・・orz


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

Name: Ma  ..比類無きプログラマー(81,227ポイント)   Date: 2010/04/10(土) 19:23   No:50426     
Title: Re:階層図を書いてみました    
あ、なるほど。
いいんじゃないですか?


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

Name: Justy  ..伝説なるハッカー(518,223ポイント)   Date: 2010/04/10(土) 19:54   No:50429     
Title: Re:階層図を書いてみました    
 これは UMLっぽい感じで作ったメインループ内の実装時のコールツリー的な図、
でしょうか。


 ゲームの仕様が出ていないので欠落については判りません。
 おかしなところ……も仕様がわからないので本当におかしいのかどうか
判別が難しいのですが、気になるところ・不明点などを少し挙げてみます。


・ システムの初期化と解放
 メインループの中にあるようですが、ループ内でシステムの初期化と解放を
何度も繰り返す意図がある、ということでしょうか?


・ ロード画面
 何のロード画面か明記されていないので汎用のロード画面だと思いますが、
だとすると裏で何の処理が走るかは不定(例えばステージ初期化中だとか)に
なりますので、この図の中に現れるのは不自然な気がします。


・ サブシステム関連
 メインループにサウンドとかファイルシステムとかペリフェラル関連とかの定型処理が
含まれていませんが、これは既定なので省略されているということなのでしょうか?


>UMLの資格が取れないんです・
 OMGとか UMTPのとかはクレジット以外(コンビニとか)も受け付けてたはずですよ。
 それ以外の資格でしょうか?


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

Name: dic  ..熟練のプログラマー(60,453ポイント)   Date: 2010/04/10(土) 20:56   No:50435 解決!     
Title: Re:階層図を書いてみました    
ご指摘ありがとうございます

>・ システムの初期化と解放
実際は一回しか呼ばれませんが何回でも呼べる構造ですね
改良しました

>・ ロード画面 
シングルスレッドなので、同期の問題はないです
ロードって、セーブデータの読み込みのことです
色々関連付けできますね、すいません

>・ サブシステム関連 
そうですね、省略しました

>UMLの資格が取れないんです
う、そうなんですか?
ホームページで調べてみましたがわからなかったので
メールで問い合わせてみました
返答待ちです
 編集済み


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

Name: Justy  ..伝説なるハッカー(518,399ポイント)   Date: 2010/04/10(土) 23:25   No:50437     
Title: Re:階層図を書いてみました    
>実際は一回しか呼ばれませんが何回でも呼べる構造ですね
 デバッグ目的とかゲーム上の仕様によってはそういうことがあってもいいとは
思いますけどね。


>ロードって、セーブデータの読み込みのことです 
 あー、なるほど。セーブ・ロードのロード画面でしたか。
 失礼しました。

 新しい図の方も拝見しました。
 後は特に問題はないと思います。


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




 
[ 1 , ... ]
 
 
管理者画面   RSS   + Powered By 21style +