C言語何でも質問掲示板


Total hit  今日  昨日  

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

 
   無題   
     ・[55908] シエル 
     ・[55912] north 
   エフェクトと背景の描 ....   
     ・[55872] Justy 
     ・[55884] やっくん 
     ・[55890] Justy 
     ・[55891] Justy 
     ・[55904] やっくん 
     ・[55905] やっくん 
   Visual C++について   
     ・[55817] たかぎ 
     ・[55821] s-rush 
     ・[55822] たかぎ 
     ・[55824] s-rush 
     ・[55856] ISLe 
     ・[55857] fr 
     ・[55868] ISLe 
   サービスプログラムに ....   
     ・[55845] Justy 
     ・[55862] ISLe 
   【DirectXプログラミン ....   
     ・[55815] Justy 
     ・[55818] シエル 
     ・[55819] シエル 
     ・[55834] シエル 
     ・[55844] Justy 
     ・[55848] シエル 
     ・[55853] Justy 
     ・[55855] シエル 
   シューティングゲーム ....   
     ・[55389] Tatu 
     ・[55411] wing 
     ・[55415] Dixq (管理人) 
     ・[55507] Tatu 
     ・[55520] パコネコ 
     ・[55542] ぽこ 
     ・[55557] パコネコ 
     ・[55631] situmon 
     ・[55771] Tatu 
     ・[55772] パコネコ 
     ・[55784] ぽこ 
     ・[55798] パコネコ 
     ・[55806] Tatu 
     ・[55828] パコネコ 
   ゲームパッドクラスの ....   
     ・[55804] へろり 
     ・[55805] toyo 
     ・[55809] わふー 
   C言語でポーカーを作っ ....   
     ・[53827] たかぎ 
     ・[53957] 南瓜 
     ・[53976] たいちう 
     ・[54139] 南瓜 
     ・[54144] たいちう 
     ・[54195] 南瓜 
     ・[54200] たいちう 
     ・[54206] 南瓜 
     ・[54375] 南瓜 
     ・[54388] たいちう 
     ・[54418] 南瓜 
     ・[54420] たいちう 
     ・[54423] 南瓜 
     ・[54427] たいちう 
     ・[54504] 南瓜 
     ・[54507] たいちう 
     ・[54634] 南瓜 
     ・[54644] たいちう 
     ・[54757] 南瓜 
     ・[54760] たいちう 
     ・[54789] 南瓜 
     ・[54797] たいちう 
     ・[55022] 南瓜 
     ・[55026] ぽこ 
     ・[55088] 南瓜 
     ・[55095] たいちう 
     ・[55121] 白い時空 
     ・[55240] 南瓜 
     ・[55243] たいちう 
     ・[55257] 白い時空 
     ・[55275] 南瓜 
     ・[55288] ドラ 
     ・[55300] たいちう 
     ・[55358] 南瓜 
     ・[55359] ぽこ 
     ・[55366] たいちう 
     ・[55416] 南瓜 
     ・[55525] 南瓜 
     ・[55526] 組木紙織 
     ・[55552] たいちう 
     ・[55603] 白い時空 
     ・[55785] 南瓜 
   ファイル読み込み   
     ・[55775] シエル 
     ・[55776] ふがふが 
     ・[55780] シエル 
   ピラミットアート   
     ・[55134] ookami 
     ・[55135] ほかる 
     ・[55137] ookami 
     ・[55140] ほかる 
     ・[55144] ookami 
     ・[55156] 通りすがり 
     ・[55163] 白い時空 
     ・[55165] Dixq (管理人) 
     ・[55170] 通りすがり 
     ・[55176] Dixq (管理人) 
     ・[55178] TKOZ 
     ・[55180] パコネコ 
     ・[55182] パコネコ 
     ・[55185] バグ 
     ・[55186] パコネコ 
     ・[55191] Dixq (管理人) 
     ・[55194] ムンバ 
     ・[55237] パコネコ 
     ・[55246] Dixq (管理人) 
     ・[55251] 組木紙織 
     ・[55271] KEV 
     ・[55272] KEV 
     ・[55273] ココナ 
     ・[55277] KEV 
     ・[55281] Dixq (管理人) 
     ・[55487] H L 
     ・[55522] パコネコ 
     ・[55523] パコネコ 
     ・[55537] パコネコ 
     ・[55539] パコネコ 
     ・[55540] パコネコ 
     ・[55541] パコネコ 
     ・[55562] パコネコ 
     ・[55564] パコネコ 
     ・[55565] パコネコ 
     ・[55569] パコネコ 
     ・[55580] パコネコ 
     ・[55581] シエル 
     ・[55583] パコネコ 
     ・[55599] dic 
     ・[55604] パコネコ 
     ・[55609] ookami 
     ・[55619] パコネコ 
     ・[55644] ookami 
     ・[55651] パコネコ 
     ・[55690] パコネコ 
     ・[55694] パコネコ 
     ・[55695] パコネコ 
     ・[55696] パコネコ 
     ・[55697] 組木紙織 
     ・[55766] パコネコ 
   キャラ(画像)の移動 ....   
     ・[55600] めるぽん 
     ・[55607] パコネコ 
     ・[55758] すなはら そら 
     ・[55760] ROM 
   VisualC++   
     ・[55613] シエル 
     ・[55614] かける 
     ・[55618] dic 
     ・[55620] シエル 
     ・[55622] かける 
     ・[55643] dic 
     ・[55645] かける 
     ・[55646] toyo 
     ・[55647] toyo 
     ・[55754] dic 
     ・[55756] たかぎ 
   無題   
     ・[55726] ookami 
     ・[55727] S 
     ・[55729] シエル 
     ・[55731] S 
     ・[55735] 組木紙織 
     ・[55736] ookami 
     ・[55744] toyo 
     ・[55750] Dixq (管理人) 
   ウインドウモード時、 ....   
     ・[55723] へろり 
     ・[55725] ookami 
     ・[55737] ぬるぽ 
     ・[55739] toyo 
     ・[55740] ookami 
     ・[55741] ぬるぽ 
   ログファイルについて   
     ・[55701] Justy 
     ・[55702] めるぽん 
     ・[55704] フリオ 
     ・[55705] ちょん 
     ・[55706] ちょん 
     ・[55707] めるぽん 
     ・[55708] めるぽん 
     ・[55709] ちょん 
     ・[55710] ちょん 
     ・[55711] めるぽん 
     ・[55713] toyo 
     ・[55716] ちょん 
     ・[55717] ちょん 
     ・[55718] ちょん 
     ・[55719] へろり 
     ・[55720] ちょん 
     ・[55724] ちょん 
     ・[55732] toyo 
     ・[55734] ちょん 
   画面を消えなくする方 ....   
     ・[55640] たろう 
     ・[55692] たろう 
     ・[55703] たろう 
     ・[55714] シエル 
     ・[55715] シエル 
   動く画像によって発生 ....   
     ・[55656] ookami 
     ・[55658] ぬるぽ 
     ・[55662] wing 
     ・[55663] wing 
     ・[55678] toyo 
     ・[55688] wing 
     ・[55693] Justy 
     ・[55712] ぬるぽ 
   異なる構造体を引数に ....   
     ・[55684] MNS 
     ・[55685] バグ 
     ・[55686] fatens 
     ・[55699] 蛙 
   std::stringで CStrin ....   
     ・[55419] たかぎ 
     ・[55426] けえぼお 
     ・[55435] たかぎ 
     ・[55478] けえぼお 
     ・[55482] たかぎ 
     ・[55484] YuO 
     ・[55488] めるぽん 
     ・[55689] けえぼお 
     ・[55698] めるぽん 
     ・[554141278506084] けえぼお 
   DxLibを使用して作成し ....   
     ・[55655] toyo 
     ・[55687] けんたろうちゃん 
   すいません。タグのテ ....   
     ・[55667] シエル 
     ・[55668] シエル 
     ・[55670] シエル 
     ・[55671] シエル 
     ・[55673] シエル 
     ・[55674] シエル 
     ・[55675] シエル 
     ・[55676] シエル 
     ・[55677] たいちう 
     ・[55679] Dixq (管理人) 
     ・[55680] シエル 
     ・[55681] toyo 
     ・[55682] シエル 
     ・[55683] シエル 
   【龍神録】レーザーの ....   
     ・[55664] Dixq (管理人) 
     ・[55672] T.J 
   妄想力募集中 (小論 ....   
     ・[55515] たかぎ 
     ・[55516] Ma 
     ・[55527] sizuma 
     ・[55529] ムンバ 
     ・[55532] たかぎ 
     ・[55536] Ma 
     ・[55538] たかぎ 
     ・[55548] Ma 
     ・[55550] たかぎ 
     ・[55556] sizuma 
     ・[55561] たかぎ 
     ・[55636] Ma 
     ・[55638] ムンバ 
     ・[55650] sizuma 
     ・[55653] Ma 
     ・[55657] 三郎 
     ・[55659] たかぎ 
     ・[55661] 三郎 
   シューティングゲーム ....   
     ・[55641] ookami 
     ・[55642] ookami 
   残機をある地点で増や ....   
     ・[55546] y 
     ・[55547] toyo 
     ・[55551] シエル 
     ・[55558] パコネコ 
     ・[55559] パコネコ 
     ・[55637] gdu 
   【DirectXプログラミン ....   
     ・[55632] Justy 
     ・[55633] シエル 
     ・[55634] Justy 
     ・[55635] シエル 
   選択画面   
     ・[55476] シエル 
     ・[55483] X 
     ・[55492] Ma 
     ・[55493] シエル 
     ・[55509] X 
     ・[55512] シエル 
     ・[55610] X 
     ・[55611] シエル 
     ・[55616] X 
     ・[55617] シエル 
     ・[55621] MNS 
     ・[55623] X 
     ・[55624] シエル 
     ・[55626] X 
     ・[55627] MNS 
     ・[55628] X 
   再描画(WM_PAINT)が ....   
     ・[55496] シエル 
     ・[55499] 爺プログラマー 
     ・[55500] 爺プログラマー 
     ・[55511] シエル 
     ・[55517] 爺プログラマー 
     ・[55518] シエル 
     ・[55519] 爺プログラマー 
     ・[55521] シエル 
     ・[55524] 爺プログラマー 
     ・[55528] シエル 
     ・[55530] Justy 
     ・[55533] 爺プログラマー 
     ・[55534] 爺プログラマー 
     ・[55535] シエル 
     ・[55544] ISLe 
     ・[55554] 爺プログラマー 
     ・[55596] dic 
     ・[55608] 爺プログラマー 
     ・[55615] dic 
     ・[55625] 爺プログラマー 
   はじめまして。   
     ・[55502] しろ 
     ・[55503] 初級者 
     ・[55504] 初心者 
     ・[55505] TKOZ 
     ・[55506] だいちゃん 
     ・[55513] シエル 
     ・[55590] 初心者 
     ・[55591] シエル 
     ・[55595] だいちゃん 
     ・[55598] Dixq (管理人) 
     ・[55606] パコネコ 
     ・[555011278390074] 初心者 
   Sleep関数について   
   ファイルの読み書き   
     ・[55582] シエル 
     ・[55584] トマト 
     ・[55585] toyo 
     ・[55586] シエル 
     ・[55587] トマト 
     ・[55588] シエル 
     ・[55589] トマト 
     ・[55592] シエル 
     ・[55593] toyo 
     ・[55594] トマト 
     ・[55601] トマト 
     ・[55602] トマト 
   初歩的な質問ですが・ ....   
     ・[55566] シエル 
     ・[55567] toni 
     ・[55568] シエル 
     ・[55570] toni 
     ・[55571] シエル 
     ・[55572] toni 
     ・[55573] toni 
     ・[55574] toni 
     ・[55575] シエル 
     ・[55576] toni 
     ・[55577] シエル 
     ・[55579] toni 
   このプログラムのmax_ ....   
     ・[55560] パコネコ 
   ポインタへのポインタ ....   
     ・[55393] たいちう 
     ・[55394] たいちう 
     ・[55402] ISLe 
     ・[55409] たいちう 
     ・[55437] RAKI 
     ・[55440] RAKI 
     ・[55553] たいちう 
   DirectXプログラミング ....   
     ・[55461] ISLe 
     ・[55462] ideyan 
     ・[55463] シエル 
     ・[55465] ISLe 
     ・[55494] シエル 
     ・[55508] ISLe 
     ・[55510] シエル 
     ・[55543] ISLe 
     ・[55549] シエル 
   C++で○×ゲーム   
     ・[55489] Ma 
     ・[55531] sattch 
   ゲームパッド対応のゲ ....   
     ・[55497] 迷彩吹雪 
     ・[55498] toyo 
   a   
     ・[55444] fatens 
     ・[55446] fatens 
     ・[55464] TKOZ 
     ・[55466] 初心者高校生 
     ・[55467] シエル 
     ・[55468] 初心者高校生 
     ・[55472] シエル 
     ・[55474] 初心者高校生 
     ・[55475] シエル 
     ・[55490] Dixq (管理人) 
   ゲームパッドのクラス ....   
     ・[55303] わふー 
     ・[55304] わふー 
     ・[55306] MNS 
     ・[55308] ぽこ 
     ・[55309] Justy 
     ・[55312] わふー 
     ・[55317] ぽこ 
     ・[55325] Justy 
     ・[55378] わふー 
     ・[55400] Justy 
     ・[55421] わふー 
     ・[55427] dic 
     ・[55434] ぽこ 
     ・[55438] わふー 
     ・[55439] ぽこ 
     ・[55485] わふー 
   型変換について   
     ・[55471] ドラ 
     ・[55481] 蒼 
   GetWindowRectの使い方 ....   
     ・[55473] シエル 
     ・[55477] スキマ妖怪 
     ・[55479] シエル 
     ・[55480] shiro4ao 

Name: north  ..ぴよぴよ(59ポイント)   Date: 2010/07/04(日) 15:24   No:55906       
Title: 無題    
初投稿になります

#include<stdio.h>
long keisan(long m);

void main(void)
{
    int        n;
    long    wam;
    
    
    printf("n => ");
    scanf("%d", &n);
    wam = keisan(n);
    printf("wa = %1d\n", wam);
}

long keisan(long m)
{
    int        i;
    long    wa;
    wa = 0;
    for(i=m; i>=1; i--){
        wa += i;
        return wa;
        
        }

}




「値を返さないコントールパスがあります」と出て、計算をしてくれません
アドバイスもらえれば幸いです


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


Name: シエル  ..上級者(22,446ポイント)   Date: 2010/07/04(日) 15:26   No:55908     
Title: Re:無題    
long keisan(long m) 

    int        i; 
    long    wa; 
    wa = 0; 
    for(i=m; i>=1; i--){ 
        wa += i; 
        return wa; 
         
        } 



↑この関数内ではfor文の中でしかreturnで値を返してないので、
下記のように値を返す必要があります。

long keisan(long m) 

    int        i; 
    long    wa; 
    wa = 0; 
    for(i=m; i>=1; i--){ 
        wa += i; 
        return wa; //式から判断するに←のリターンは不要かな
         
        }
  return 何とか;

}  編集済み


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

Name: north  ..ぴよぴよ(405ポイント)   Date: 2010/07/04(日) 16:15   No:55912 解決!     
Title: 無題    
#include<stdio.h>
long keisan(long m);

void main(void)
{
    int        n;
    long    wam;
    
    
    printf("n => ");
    scanf("%d", &n);
    wam = keisan(n);
    printf("wa = %1d\n", wam);
}

long keisan(long m)
{
    int        i;
    long    wa;
    wa = 0;
    for(i=m; i>=1; i--){
        wa += i;
        
        
        }
    return(wa);
}




このようにしたら解決しました。

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

とても分かりやすかったです。


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



Name: やっくん  ..プログラマー(28,407ポイント)   Date: 2010/07/04(日) 01:36   No:55870       
Title: エフェクトと背景の描画    
前に2Dエフェクトツール作成で質問をし、完成させることができました。

限度はありますが、自分で好きなように作ったエフェクトデータをテキストファイルに出力し、プログラム側ではそのデータを読み込むだけでエフェクトが描画されるというものです。

使用言語はCとC++(便利な部分を)、コンパイラはVC++です。
ライブラリとしてDXライブラリを使用しています。

『エフェクトをテキストを読み込めば描画してくれる』という処理をクラスを用い3手順で使えるようにしました。

@インスタンス宣言
A各種データをセットのメソッドを使用
Bエフェクト呼び出しのメソッドを使用

以上の3手順なんですが、Bのエフェクト呼び出しを行うと、画面をクリアしながらの描画するので、背景などを描画することができません。

しかし、汎用性を持たせたいためメソッドの中に直接、背景の描画処理を書きたくはありません。

あいまいな質問ですが何かすっきりするような処理の書き方は無いでしょうか。

現在、考えている物としてエフェクト描画の際に関数を1つ引数から受け取り、その中での背景やキャラの描画をエフェクト描画をするときに一緒に描画してしまう、というものです。こちらも汎用性があまり無いような気がして悩んでおります。
もう一つとして単純にメソッドの引数に背景画像のハンドルとキャラ画像のハンドルを渡し、それを一緒に描画すると言う方法です。

ですが、出来る限りメソッドはあくまでもエフェクトを描画するだけ!としたいのですがこれは無理でしょうか?


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


Name: Justy  ..伝説なるハッカー(553,419ポイント)   Date: 2010/07/04(日) 01:45   No:55872     
Title: Re:エフェクトと背景の描画    
>何かすっきりするような処理の書き方は無いでしょうか
 画面のクリアはメインループの定型処理に任せ、背景は背景のクラス(?)に任せ、
エフェクトクラスはエフェクトの処理・描画だけに専念すればいいと思います。


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

Name: やっくん  ..プログラマー(28,886ポイント)   Date: 2010/07/04(日) 07:59   No:55884     
Title: Re:エフェクトと背景の描画    
Justyさん、返信ありがとうございます。

書き忘れていましたがエフェクトの描画データ部分は
{座標,画像No,拡大率,角度,反転,透過}
などが書かれており、これを1行ずつ読み込み描写していくことでエフェクトを作っています。

>エフェクトクラスはエフェクトの処理・描画だけに専念すればいいと思います。
手法としてファイルオープンをエフェクトメソッドを呼び出す前に行い、メソッドに引数としてファイルポインタを与えるというものを考えました。この処理を行うためのイメージを下記にCで作ってみました。良ければ批評をお願いします。

#include <stdio.h>

int f(FILE *fp)// 描画メソッドにあたる関数。
{
  char buff[256];

  if(fgets(buff, 256, fp) == NULL) return -1;;

  printf("%s", b);

  return 1;
}


int main(void)
{
  FILE *fp;

  fp = fopen("test.txt", "r");
  if(fp == NULL){
    // エラー処理
  }

  while(1){  // メインループ
 
   /* 
      背景描画
    */

    if(f(fp) == -1){// もし、何も読み込めなかったら描画終わり。
      fclose(fp);
      break;
    }
  }
  return 0;

}


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

Name: Justy  ..伝説なるハッカー(553,951ポイント)   Date: 2010/07/04(日) 11:21   No:55890     
Title: Re:エフェクトと背景の描画    
>メソッドに引数としてファイルポインタを与えるというものを考えました
 つまりこのエフェクトシステムは挙動を記述したファイルを毎ループ1行ずつ読み込みながら描画を行う
わけですね。


 んー、問題がいろいろありそうです。

・ 同時に使えるエフェクト数
 Visual C++の同時に fopenできる数は決まっています。そうなるとこのエフェクトが
同時に使用できる数に限られてしまいます。

_setmaxstdio (CRT)
http://msdn.microsoft.com/ja-jp/library/6e3b887c(VS.80).aspx

 上記ページによると 512もあるので大抵の場合大丈夫だろうとは思いますが、
このエフェクトがこの数に縛られるというのは何か違う感じがしませんか?


・ ディスクアクセス
 描画する度にディスクアクセスが発生するということはアクセスの遅いメディア(CD/フロッピーとか)上に
ファイルがあった場合その都度処理が止まる可能性があります。
 複数同時にエフェクトが発生していた場合さらに酷いことになりそうです。

 実際にはハード・OS側で読み込みを高速化する仕組みがあるので考えている以上に酷いことに
ならないかもしれませんが、初回のアクセスは止まってしまうかもしれません。


・ ループ・再利用
 エフェクトをループしたり、後から再利用したい場合、再度ファイルアクセスが必要になります。
 1フレーム前に戻りたいとか逆再生したい場合、ちょっと面倒な処理が必要になりそうです。


・ メモリからの読み込み
 既にあったらこれは無視してください。
 fopenでは開けない何らかのアーカイバからの読み込みとかソースコードにエフェクト情報を
記述する場合とかも考えて、メモリからの読み込み対応もあった方がよくないでしょうか?


 ざっと思いつくのはこんなところです。


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

Name: Justy  ..伝説なるハッカー(555,658ポイント)   Date: 2010/07/04(日) 11:26   No:55891     
Title: Re:エフェクトと背景の描画    
 私は普通のこんな感じのをイメージしていました(C++)。

    Effect eff1("test1.eff");               // 一つ目のエフェクト、エフェクトファイル読み込み
    Effect eff2;                            // 二つ目のエフェクト
    
    eff2.Load("test2.eff");                 // 後からエフェクトファイル読み込み
    eff2.SetLoop(true);                     // ループ指定をつける
    
    if(eff1.IsFailed() || eff2.IsFailed())  // 読み込みが正常に行われたかどうかのチェック
        return -1;
    
    while(1)
    {
        ...;                                // ループのプロローグ処理、背景などいろいろ描画
        
        if(!eff1.IsEnd())                   // 1つ目は全フレーム再生するまで表示する
        {
            eff1.Update(1);                 // 1つ目のエフェクト、1フレーム進める
            eff1.Draw();                    // 1つ目のエフェクト描画
        }
        
        eff2.Update(1);                     // 2つ目のエフェクト、1フレーム進める
                                                // 最後まで再生したら自動で頭から再生)
        eff2.Draw();                        // 2つ目のエフェクト描画
        
        ...;                                // いろいろ描画、ループエンディング処理
        
    }


 Effectクラスのコンストラクタ、ないしは Loadメソッドでファイルを読み込みます
(メモリからの読み込みメソッドも作っておけば尚良しです)。
 このメソッドでそのエフェクトの全フレーム分のデータ読み込み、データをクラス内で保持します。

 あとはメインループ内で Updateメソッドで1フレーム進め(位置など描画に必要な情報を更新)、
Drawメソッドで表示を行います。

 これなら、画面のクリアや背景描画はエフェクトの外に記述できますし、シンプルにエフェクトを
使えるのではないでしょうか。


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

Name: やっくん  ..プログラマー(29,149ポイント)   Date: 2010/07/04(日) 15:17   No:55904     
Title: Re:エフェクトと背景の描画    
ソースコードまで示していただきありがとうございます><

>同時に使えるエフェクト数
そういう縛りがあったのですね・・・
これも記述してなかったのですが、エフェクトを使う用途はRPGの戦闘部分です。(演出でも少し使います)
エフェクトの同時描画はツールの方で出来るような仕様ですので、あくまでもfopenしているファイルは1つ(多くても2桁は行かない)です。

>ディスクアクセス
私が↑で書いたのソースはやはりここら辺で引っ掛かるんですね(^^;

>メモリからの読み込み
この対応は作ってないので考察してみます。


>このメソッドでそのエフェクトの全フレーム分のデータ読み込み、データをクラス内で保持します。 
メモリをあまり使いたくないという理由で現在の手法(1行ずつ読み込んで出力)という形を取っていましたが、総合的に見たらこちらの方が良さそうですね。Justyさんが示してくださった手法で進めて行こうと思いますm(__)m

Justyさん、ありがとうございました!


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

Name: やっくん  ..プログラマー(29,157ポイント)   Date: 2010/07/04(日) 15:17   No:55905 解決!     
Title: Re:エフェクトと背景の描画    
解決押し忘れました。

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



Name: C++練習中  ..ぴよぴよ(13ポイント)   Date: 2010/07/03(土) 14:22   No:55816       
Title: Visual C++について    
Visual C++ 2010[無料版]でもゲームを作成できますか?
お早めに回答をお願いします。


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


Name: たかぎ [URL]  ..ハッカー(213,627ポイント)   Date: 2010/07/03(土) 14:32   No:55817     
Title: Re:Visual C++について    
できます。


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

Name: s-rush  ..熟練のプログラマー(59,434ポイント)   Date: 2010/07/03(土) 14:48   No:55821     
Title: Re:Visual C++について    
結論から言うとたかぎさんもおっしゃっているようにゲームを作ることはできます。

ただし、プログラムの知識がなければ作ることはできません。

道具があってもその道具の使い方を知らなければ意味ないですよね?
それと同じです。


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

Name: たかぎ [URL]  ..ハッカー(213,725ポイント)   Date: 2010/07/03(土) 15:02   No:55822     
Title: Re:Visual C++について    
> 道具があってもその道具の使い方を知らなければ意味ないですよね? 

より具体的にいえば、「必ずお読み下さい」と書いている「規約と注意事項」を読んでいない、読んでも理解できない、あるいは理解できても無視しているのいずれかのようですが、必要なドキュメントや文献を読み、理解し、それを実践する意思と能力がなければ無理だということです。


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

Name: s-rush  ..熟練のプログラマー(59,816ポイント)   Date: 2010/07/03(土) 15:06   No:55824     
Title: Re:Visual C++について    
>>たかぎさん
補足説明ありがとうございます。


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

Name: ISLe  ..かけだし(1,189ポイント)   Date: 2010/07/03(土) 23:38   No:55856     
Title: Re:Visual C++について    
道具の使い方とはズレますが…
使用許諾契約書(EULA)をきちんと読んでいるユーザーは少数派なんでしょうかね。

Debug構成でビルドした実行ファイルをネットで公開するという違反行為を良く見かけます。

再頒布する権利を与えられているのはリリース版ライブラリだけです。
相手が同じ開発環境(SDKとか)をインストールしていれば渡して良いというのも間違い。

どこかのゲーム専門学校講師(とかいうサイト)がやってるのを見たときは唖然としましたけど。


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

Name: fr  ..ぴよぴよ(106ポイント)   Date: 2010/07/03(土) 23:47   No:55857     
Title: Re:Visual C++について    
>どこかのゲーム専門学校講師(とかいうサイト)
そのサイト見てみたいです!


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

Name: ISLe  ..かけだし(1,649ポイント)   Date: 2010/07/04(日) 00:59   No:55868     
Title: Re:Visual C++について    
> >どこかのゲーム専門学校講師(とかいうサイト)
> そのサイト見てみたいです!

本人の名誉のために直接的にはお教えできませんが、"専門学校講師 ゲーム入門"あたりでググッてみてください。
何年も前のことなので変わっているかもしれません。

ゲーム専門学校のサイトで生徒作品をダウンロードできるようにしているところがあって、デバッグ版ランタイムをいっしょに配ってしまっていることもあります。
指摘して直してもらったことがあるので減っているかもしれません。


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



Name: oillio  ..ぴよぴよ(95ポイント)   Date: 2010/07/03(土) 19:51   No:55843       
Title: サービスプログラムについて    
Windowsで、サービスで常駐プログラムを起動させておいて、
ユーザがログインしたタイミングでその常駐プロセスに通知をして、
通知を受け取ったらある処理を実行したいのですが、
サービスプログラムで、ユーザのログインを検知する方法ってありますか?
C言語で組もうとしています。


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


Name: Justy  ..伝説なるハッカー(552,959ポイント)   Date: 2010/07/03(土) 21:35   No:55845     
Title: Re:サービスプログラムについて    
 XP以降という前提になりますが、参考になりそうなページがありました。

ハンドラ関数
http://eternalwindows.jp/windevelop/service/service03.html

 ハンドラ関数を使って SERVICE_CONTROL_SESSIONCHANGEを監視する、という方法のようです。


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

Name: ISLe  ..かけだし(1,462ポイント)   Date: 2010/07/04(日) 00:10   No:55862     
Title: Re:サービスプログラムについて    
ある処理を実行するプログラムをタスクスケジューラにユーザーのログオンをトリガにして登録するというのはいかがでしょう?
常駐プログラム要らないですよ。


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



Name: シエル  ..上級者(20,833ポイント)   Date: 2010/07/03(土) 13:27   No:55811       
Title: 【DirectXプログラミング】描画について    
いつもお世話になっております。

DirectXのスプライト描画とDIRECT3Dデバイスの描画について質問があります。
最近DirectX関連の質問が多くて申し訳ありません。。。

現在ゲーム作成中で、ID3DXSprite インターフェイスでの描画とDIRECT3DデバイスのDrawPrimitiveUpメソッド
を使って描画をしております。

DrawPrimitiveUpメソッドの描画の際に、アルファブレンドやテクスチャブレンドの設定を変えて描画するのですが、その変更内容が、同じデバイスを使用しているスプライトの描画にも影響が出てしまいました。
対応方法として、DrawPrimitiveUpメソッドでの描画が終わってから、ブレンドの設定を全て戻す
ことによって、スプライトでの描画には影響が出ないようにしています。

ですが、描画するたびにブレンドの設定を何度も変更したり戻したりするので、
速度にも影響が出るし、効率が悪いかな〜と思いました。

そこで考えたのが、

・スプライト
・DrawPrimitiveUp(通常用)
・DrawPrimitiveUp(加算合成用)
・DrawPrimitiveUp(減算合成用)

という、それぞれ専用のデバイスを作成しようと考えました。
これなら、一番最初にそれぞれのデバイスでブレンドの設定をしてしまえば、途中でブレンドの設定を変更
する必要が無いし、描画する際はデバイスを使い分けて描画すればいいと考えました。

皆さんにはどちらの方法が効率が良いのかお聞きしたいのですが、
デバイスを一つだけ作成して、ブレンド設定を都度変更しながら描画する方法と、
デバイスを複数作成して、ブレンド設定は最初だけ行い、デバイスを使い分けて描画する方法と
どちらが良いと思われますでしょうか?

DirectXを始めてからまだ日が浅いので、言葉じりがおかしかったりするところも
あると思いますが、ご回答よろしくお願い致します。


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


Name: Justy  ..伝説なるハッカー(552,658ポイント)   Date: 2010/07/03(土) 14:15   No:55815     
Title: Re:【DirectXプログラミング】描画について    
>専用のデバイスを作成
 これは Direct3DDeviceですか?
 普通は Direct3DDeviceの生成は1アプリに1つです。
 少なくともレンダーステートが異なるからという理由だけで増やすことはないです。


>ブレンド設定を都度変更しながら描画する方法
 こちらの方法でいいと思います。

 効率が気になるなら同じレンダーステートのオブジェクトを一纏めにして描画するとか
これから描画するオブジェクトのレンダーステートを個々に調べ、異なるステートのものだけを
設定するようにするとか、ステート管理をシステム化すればいいかと。


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

Name: シエル  ..上級者(20,997ポイント)   Date: 2010/07/03(土) 14:33   No:55818     
Title: Re:【DirectXプログラミング】描画について    
Justyさん!いつもありがとうございます!

>これは Direct3DDeviceですか? 
>普通は Direct3DDeviceの生成は1アプリに1つです。 
>少なくともレンダーステートが異なるからという理由だけで増やすことはないです。
Direct3DDeviceのことです。
普通は一つなんですね。。。

>効率が気になるなら同じレンダーステートのオブジェクトを一纏めにして描画するとか 
>これから描画するオブジェクトのレンダーステートを個々に調べ、異なるステートのものだけを 
>設定するようにするとか、ステート管理をシステム化すればいいかと。
ステート管理をシステム化ですか…うぅ…頑張ってみます…


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

Name: シエル  ..上級者(21,006ポイント)   Date: 2010/07/03(土) 14:34   No:55819 解決!     
Title: Re:【DirectXプログラミング】描画について    
一応解決にしときます。

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

Name: シエル  ..上級者(21,511ポイント)   Date: 2010/07/03(土) 17:51   No:55834     
Title: Re:【DirectXプログラミング】描画について    
すみません。追加で質問させてください。。。

テクスチャの読み込みは下記のように、黒を「透明色」と指定して読み込んで、
画像の黒色部分を透過させて、描画していました。

hr = D3DXCreateTextureFromFileEx(lp3ddev,filename,imageinfo.Width,imageinfo.Height,1,0,
D3DFMT_UNKNOWN,D3DPOOL_MANAGED,D3DX_FILTER_TRIANGLE,D3DX_FILTER_TRIANGLE,D3DCOLOR_ARGB(255,0,0,0),NULL,NULL,&Imageinfo[texturepoint].lptexture);

ですが、以下のようにテクスチャステージ「透明度」の設定をディフューズ色の透明度のみ、
と設定すると、なぜか透明色で透明だった画像の背景が真っ黒になって描画されてしまいました。

lp3ddev->SetTextureStageState(0,D3DTSS_COLORARG1,D3DTA_TEXTURE);
lp3ddev->SetTextureStageState(0,D3DTSS_COLOROP,D3DTOP_MODULATE);
lp3ddev->SetTextureStageState(0,D3DTSS_COLORARG2,D3DTA_DIFFUSE);
lp3ddev->SetTextureStageState(0,D3DTSS_ALPHAARG1,D3DTA_DIFFUSE);
lp3ddev->SetTextureStageState(0,D3DTSS_ALPHAOP,D3DTOP_SELECTARG1);

ちなみに、透明度をテクスチャの透明度のみとして設定してしまうと、スプライトで描画した際に
背景は透過されましたが、画像の半透明描画が出来なくなってしまいました。

このテクスチャステージの設定は、「透明度」の設定を行っているはずなのに、
なぜ「透明色」の設定にまで影響が出てしまうのでしょうか?

考え方が破綻していたら、申し訳ありません。。。


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

Name: Justy  ..伝説なるハッカー(552,836ポイント)   Date: 2010/07/03(土) 21:20   No:55844     
Title: Re:【DirectXプログラミング】描画について    
>透明色で透明だった画像の背景が真っ黒になって描画されてしまいました
 状況をまとめると、

・ カラーキーを使って透明にしたテクスチャがある
・ 透明度をディフューズカラーのみにした

 結果、カラーキーで指定した部分が黒くなった、ということですね。
 それはそうです。テクスチャのアルファ値を無効にしたわけですから。


>このテクスチャステージの設定は、「透明度」の設定を行っているはずなのに、 
>なぜ「透明色」の設定にまで影響が出てしまうのでしょうか? 
 カラーキー(透明色)は DirectXのテクスチャを生成する段階で判定が行われ 
A8R8G8B8や A1R5G5B5などのアルファ付きテクスチャに変換されます。

 このテクスチャを表示しようとするわけですから、テクスチャの透明度を加味しないと
元々抜き色だった部分は透過されないことになります。


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

Name: シエル  ..上級者(21,927ポイント)   Date: 2010/07/03(土) 22:27   No:55848     
Title: Re:【DirectXプログラミング】描画について    
おお!イメージどおりに透過できました!三日ぐらい悩んでたので…本当に助かりました…!

すごく分かりやすい説明がありがとうございます!

すいません。最後にもう一つだけ…

Justyさんは、テクスチャの透明色を指定する方法として、D3DXCreateTextureFromFileEx関数を使って、
カラーキーを指定する方法にしてますか?
それとも、グラフィックソフトで直接透明色を指定する方法にしてますか?


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

Name: Justy  ..伝説なるハッカー(553,374ポイント)   Date: 2010/07/03(土) 23:13   No:55853     
Title: Re:【DirectXプログラミング】描画について    
>グラフィックソフトで直接透明色を指定する方法にしてますか?
 こっちです。
 カラーキーはほとんど、というか全く使わないです。


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

Name: シエル  ..上級者(21,991ポイント)   Date: 2010/07/03(土) 23:31   No:55855     
Title: Re:【DirectXプログラミング】描画について    
何度もありがとうございました!

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



Name: Tatu  ..熟練のプログラマー(41,671ポイント)   Date: 2010/06/27(日) 12:22   No:55388       
Title: シューティングゲーム公開    
シューティングゲーム「目玉の野望」ができたので公開します。
ステージ数は4つです。

アップローダー http://www1.axfc.net/uploader/C/so/113189

パス MeYabou

追伸 Dixqさん、900万アクセスおめでとうございます。
 編集済み


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


Name: Tatu  ..熟練のプログラマー(41,685ポイント)   Date: 2010/06/27(日) 12:24   No:55389     
Title: Re:シューティングゲーム公開    
スクリーンショットです。

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

Name: wing  ..中級者(11,301ポイント)   Date: 2010/06/27(日) 18:43   No:55411     
Title: Re:シューティングゲーム公開    
遊ばさせていただきました。
もともとゲームは苦手なんですが、3面を突破することはできません。

気になった点は、ゲームはよくできているんですが、
それに比べて背景の描き方が雑だと思いました。
かえってそれが味わい深いと感じる人もいるかもしれません。

もしかしてWindowsのペイントで描いたんですか?
私は無料のGIMP2を使っています。
背景がきっちり書かれていたら、また別のゲームになるかもしれません。

絵が苦手な私が偉そうに言ってしまいました。あまり気にしないでください。


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

Name: Dixq (管理人) [URL]  ..ウィザード(1,229,496ポイント)   Date: 2010/06/27(日) 19:30   No:55415     
Title: Re:シューティングゲーム公開    
信長の野望・・じゃなくて目玉の野望なんですねw
プレイしました。
私も3面どまりです;
被弾したらある程度無敵時間を作ってみてはいかがでしょう?
連続弾などが連続であたってHPが途端に削られてしまいました^^;

素材の方は全て自作なんですか?
私は作曲したいと思いながらもいまだに手を付けられていません;
実家から電子ピアノ送る準備は出来ているのですが、送料をみるとなかなか決断出来ず・・。

私はよく音楽素材とかは煉獄庭園さん
http://www.rengoku-teien.com/
の素材とかよく利用させてもらいました。


アクセスの件ありがとうございます^^


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

Name: Tatu  ..熟練のプログラマー(42,525ポイント)   Date: 2010/06/29(火) 17:34   No:55507     
Title: Re:シューティングゲーム公開    
「どうせなら店とかアイテムとか魔法とかほしいなあ。メッセージウィンドウがRPGっぽいし。」などの意見が
出るかと予想していましたが今のところないようですね。


>>wing さん

>3面を突破することはできません。

レベルアップシステムを搭載しており、1,2回挑戦してだめでも
何回かやってレベルアップすればクリアできるというのがわかるように
3面は難しめ(やり直さなくてもクリアができることは確認)、
4面は一回でクリアするのはまず無理。(本当に無理かと思ったらそうでもなかった。乱数の出が良ければできるでしょう)
という難易度設定をしています。

セーブ機能も付いているのでたっぷり経験値を稼ぐといいでしょう。

>ゲームはよくできている
おほめの言葉ありがとうございます。

>背景

きっちり書けたらより多くの人にとって好ましいものになるだろうということはわかってはいるのですが
うーん、書けません。

>味わい深いと感じる人もいるかも

この程度ならば「こんなのでもゲームが面白ければ(自分が作ったものを公開しても)いいのかー」と
感じる人の方がまだいそうです。

ソフトは「DPixed」という256色ペイントソフトを使っています。
Windowsのペイントでもきっちりした絵を書くこと自体は可能だと思いますよ。
いずれにせよマウスを使って書いているのでやりにくいですが。


>>Dixq さん

>無敵時間
これをつけると、無敵時間(削り系の攻撃は短く、強力なものは長く、など)、
一発あたりのダメージ量(今は一律10)などの情報の追加、
弾幕関数の調整が必要になるので今回はなしです。
今の仕様で無敵時間だけつけてもさらにごり押し推奨ゲームになってしまうだけですし。

>素材
仰る通りすべて自作です。

ソフトは
絵は「DPixed」
音は「Domino」、「効果音エディタ_D」をつかっています。

>信長の野望・・じゃなくて

戦略シミュレーションがつくれて、
コンピューターによる複雑なキャラクターの操作(AIと呼ばれているもの)がわかり、
キャラクターやマップなどが大量かつ短期間に用意できる。
などの条件を満たせるならば
弾幕飛び交う戦が魅力の群雄割拠なシミュレーション!
をだすこともできたのでしょうが...
無理ですねこれは。


シューティング(龍神録)ではないらしい新作(当然Aerobeatのことでもない)、
1000万アクセスのイベント期待しています。

龍神録プログラミングの館のプロジェクトか
それを元に誰かが用意したプロジェクトを使った
掲示板利用者による弾幕祭を開いたらどうなるんだろうか。

○○な弾幕を作りたいというスレッドはあったけれども
弾幕コンテスト的なスレッドは見たことがありません。



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

Name: パコネコ  ..入門者(3,277ポイント)   Date: 2010/06/29(火) 20:41   No:55520     
Title: Re:シューティングゲーム公開    
さっきやってみました
まだやってる最中でレベルはまだ8ですが…3つ目で止まってますね。
弾幕ゲームあまりやったことないんですが…すごく面白いですね。
回復アイテムが経験値に混ざってないかな〜ってきたいしたりもしましたがなかったのが残念です。
絵的にはワイは好きですね。軽い気持ちでやってみようと思える感じがします。(勝手な意見
レベルを上げたりするんですね。シューティングでレベルを上げていくのは思いつきませんでした。
レベルを上げるだけなら見たことあるんですがセーブ機能付きでというのは初めてでいい勉強になりました。
後ワイが下手なだけかもしれませんが星と弾幕が混ざってよくわからなくなってしまいます(ちゃんと色分けされてるのに…)その辺が苦手です。(でも☆が寄ってきてくれるのが感謝)
勝手な意見すいません
でも面白いです。ありがたく遊ばせてもらいますね。
===============
関係ないですが
ポイント落して行ったって…そんなこともあるんですね(-_-;) 編集済み


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

Name: ぽこ  ..上級者(18,965ポイント)   Date: 2010/06/30(水) 02:00   No:55542     
Title: Re:シューティングゲーム公開    
やってみました。
下から出てくる敵と弾のスピードが同じなので、倒せません。。
そこだけは何とかして欲しいです。

#とりあえず、チートな手を使ってクリアしました。
#自力では3面が限界です。


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

Name: パコネコ  ..入門者(3,513ポイント)   Date: 2010/06/30(水) 12:04   No:55557     
Title: Re:シューティングゲーム公開    
敵にあたり判定ないからブーメランみたいなやつなら倒せましたけど…

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

Name: situmon  ..熟練のプログラマー(49,731ポイント)   Date: 2010/06/30(水) 23:18   No:55631     
Title: Re:シューティングゲーム公開    
やらせていただきました。
キャラクターがひとつひとつかわいかったのとRPG形式で楽しかったです。
しかし皆さんのおっしゃるとおり、3面で終わりました。
しかし経験値など、やりこみプレイ、RPGとシューティングの融合がおもしろいので、新作があればやりたいです。

素材についてですが、
ドット絵は好きですのでとてもかわいく思えました。
音楽と効果音の音の大きさの釣り合いが取れていなかったこと、
ベロシティの設定がしっかりできていなかったこと、
ピアノパートだけだったことは少し悲しかったですが、
新作が楽しみです。

いろいろいってしまいすいません。


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

Name: Tatu  ..熟練のプログラマー(42,727ポイント)   Date: 2010/07/02(金) 20:59   No:55771     
Title: Re:シューティングゲーム公開    
三面で止まるという方が多い。
どこでダメージが多いのだろう?
(三面クリア時のレベルは10ぐらいを想定)

>>パコネコ さん

>回復アイテム
次があったら中ボスなどが落とすようにします。

>>ぽこ さん

>チートな手

その前に何回くらい挑戦しましたか?

>>situmon さん

>経験値など、やりこみプレイ、RPGとシューティングの融合がおもしろいので、新作があればやりたいです。
今は別のを作っているのでそれができたら作ってみようかと思っています。


そういえば「妖精島の探検」の後編は公開されましたか?


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

Name: パコネコ  ..初心者(5,540ポイント)   Date: 2010/07/02(金) 21:06   No:55772     
Title: Re:シューティングゲーム公開    
ワイ10代後半ぐらいレベル上げなきゃだめだった…ワイが下手なだけか…
>次があったら
あるといいですね。
楽しみにしてます。


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

Name: ぽこ  ..上級者(19,055ポイント)   Date: 2010/07/02(金) 22:09   No:55784     
Title: Re:シューティングゲーム公開    
> >>ぽこ さん

> >チートな手

> その前に何回くらい挑戦しましたか?

レベル8くらいだったと記憶しています。
そこからレベル500にして一気にクリアしちゃいました。


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

Name: パコネコ  ..初心者(6,266ポイント)   Date: 2010/07/03(土) 01:17   No:55798     
Title: Re:シューティングゲーム公開    
あ〜
経験値いじっちゃったんですか?
ってか
100までじゃないのか…


Name: Tatu  ..熟練のプログラマー(42,877ポイント)   Date: 2010/07/03(土) 10:27   No:55806     
Title: Re:シューティングゲーム公開    
難しいという意見が多いので
難易度調整、ついでに回復アイテムを実装しました。

実行ファイルと回復アイテム画像データのみなので他のデータを持ってない方は
先に上のリンクからダウンロードしてから上書きしてください。

http://www1.axfc.net/uploader/Sc/so/130023&key=MeYabou

最初に公開した状態でのプレイ動画

http://www1.axfc.net/uploader/Al/so/39554&key=MeYabou 編集済み


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

Name: パコネコ  ..初心者(6,299ポイント)   Date: 2010/07/03(土) 17:18   No:55828     
Title: Re:シューティングゲーム公開    
おお、回復アイテム出てきた…回復量は100かな?1割かな?
ちなみに今21れべデス。


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



Name: わふー  ..入門者(3,943ポイント)   Date: 2010/07/02(金) 23:36   No:55791       
Title: ゲームパッドクラスの実装について    
こんにちは。
以前、ゲームパッドクラスをどう扱うかということについてお世話になりました。
その節はありがとうございました。

そのときのことなのですが、ゲームパッドクラスの実装自体について突っ込まれてしまいまして。
作り直して参りましたので、どこかまずい点があればご指摘いただけませんでしょうか。
一応、動作確認はしております。(私はパッドを複数持っておりませんので、2つ以上のコントローラでちゃんと動くかは試してないです……というか大体一発で上手くいくことないですので、動かない気がします 汗)
ですので、動くか動かないかという話ではなく、実装の仕方に問題がある・下手・汚い・コメントが悪い――などなどのご指摘をいただけたらと思っております。
DxLibでの実装ですが、なるべく他のライブラリに移植しやすい用にも気を付けたつもりです……が、これも自信がありません。



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


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


Name: へろり  ..上級者(16,141ポイント)   Date: 2010/07/03(土) 07:14   No:55804     
Title: Re:ゲームパッドクラスの実装について    
DxLibとかC++はさっっっぱり解りませんので、ちょっと気になったとこだけ一つ。

getTargetButtonFromButtonNum() の中身でcase がずらーーーと並んでますが。

PAD_INPUT_UP とかの定義が解らないので勝手に int としますが

static const int PadButton[] = {PAD_INPUT_UP, PAD_INPUT_LEFT, PAD_INPUT_DOWN...... とでもしておいて

if(0 <= button_num && button_num <= 12) button = PadButton[button_num];
else error("invalid button_num");

とした方が楽でいいんじゃないですか。

button_num と PAD_INPUT_UP とかの対応に変更がある場合でも、PadButton[]の中身を変えるだけですみますし、バグの入り込む余地も少なくなります。


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

Name: toyo  ..熟練のプログラマー(52,311ポイント)   Date: 2010/07/03(土) 08:37   No:55805     
Title: Re:ゲームパッドクラスの実装について    
その部分に関してなら私なら
int button = 1 << button_num;
で済ませるかな(32ボタンまで対応できます)
どのボタンがどの操作になるかはこのクラスの呼び出し元が扱うのでしょう
将来パッドを買い換えたときのためにPOVにも対応したいですね(十字キーがPOVに割り当てられているパッドは多いです)

// パッド入力定義
#define PAD_INPUT_DOWN                                (0x00000001)    // ↓チェックマスク
#define PAD_INPUT_LEFT                                (0x00000002)    // ←チェックマスク
#define PAD_INPUT_RIGHT                                (0x00000004)    // →チェックマスク
#define PAD_INPUT_UP                                (0x00000008)    // ↑チェックマスク
#define PAD_INPUT_A                                    (0x00000010)    // Aボタンチェックマスク
#define PAD_INPUT_B                                    (0x00000020)    // Bボタンチェックマスク
#define PAD_INPUT_C                                    (0x00000040)    // Cボタンチェックマスク
#define PAD_INPUT_X                                    (0x00000080)    // Xボタンチェックマスク
#define PAD_INPUT_Y                                    (0x00000100)    // Yボタンチェックマスク
#define PAD_INPUT_Z                                    (0x00000200)    // Zボタンチェックマスク
#define PAD_INPUT_L                                    (0x00000400)    // Lボタンチェックマスク
#define PAD_INPUT_R                                    (0x00000800)    // Rボタンチェックマスク
#define PAD_INPUT_START                                (0x00001000)    // STARTボタンチェックマスク
#define PAD_INPUT_M                                    (0x00002000)    // Mボタンチェックマスク
#define PAD_INPUT_D                                    (0x00004000)
#define PAD_INPUT_F                                    (0x00008000)
#define PAD_INPUT_G                                    (0x00010000)
#define PAD_INPUT_H                                    (0x00020000)
#define PAD_INPUT_I                                    (0x00040000)
#define PAD_INPUT_J                                    (0x00080000)
#define PAD_INPUT_K                                    (0x00100000)
#define PAD_INPUT_LL                                (0x00200000)
#define PAD_INPUT_N                                    (0x00400000)
#define PAD_INPUT_O                                    (0x00800000)
#define PAD_INPUT_P                                    (0x01000000)
#define PAD_INPUT_RR                                (0x02000000)
#define PAD_INPUT_S                                    (0x04000000)
#define PAD_INPUT_T                                    (0x08000000)
#define PAD_INPUT_U                                    (0x10000000)
#define PAD_INPUT_V                                    (0x20000000)
#define PAD_INPUT_W                                    (0x40000000)
#define PAD_INPUT_XX                                (0x80000000)


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

Name: わふー  ..入門者(4,182ポイント)   Date: 2010/07/03(土) 12:44   No:55809     
Title: Re:ゲームパッドクラスの実装について    
>へろりさん

おおふ、それはgoodですね。
ありがとうございます。



>toyoさん

最初はそうしていたのです。
もし万が一、他のライブラリでパッド情報の保持の仕方が違ったら困るなぁと思って、あんな面倒なことにしてます。
まぁ何にしても汎用的に扱えなさそうな気がしますので、そんなに意味はないんですけどね(´`;
ありがとうございます。


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



Name: 南瓜  ..中級者(13,149ポイント)   Date: 2010/06/09(水) 22:16   No:53826       
Title: C言語でポーカーを作っているんですが その2    
関数を使ってある程度形になってから投稿しようとしたら流れてしまいました…
しかも、まだ関数に対する理解が中途半端なままです。
ですが、ストレートの判定はやり方を変えて、残す役判定は
ロイヤルストレートフラッシュだけです。
複数のフラグが立った時に該当する役全てが表示されるなど
まだ改善する点がありますが、少しずつ直していきます


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


Name: たかぎ [URL]  ..ハッカー(201,946ポイント)   Date: 2010/06/09(水) 22:23   No:53827     
Title: Re:C言語でポーカーを作っているんですが その2    
ざっと見ただけなので勘違いがあるかもしれませんが...

ジョーカー(ワイルドカード)が含まれていないように思います。
結果として、ファイブカード(five of a kind)の役に対応していませんね。


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

Name: 南瓜  ..中級者(13,649ポイント)   Date: 2010/06/10(木) 22:34   No:53957     
Title: Re:C言語でポーカーを作っているんですが その2    
ワイルドカードは考えてなかったですね
実装したいですが、結構複雑な気がします^^;

あと、一応ロイヤルストレートフラッシュの判定が出来ました。
出来れば、Aの位置をずらしたくなかったですが…

次は、関数を使って見やすくするかAの位置をずらさないで
ロイヤルストレートフラッシュの判定を作るか、
どちらがやり易いでしょうか?

今、10日でわかるC言語入門教室と苦しんで覚えるC言語で
関数の勉強をしているんですが、現段階ではどちらも
このプログラムにどう利用しればいいのかよく判りません。
(何を関数にすればいいのか、何処を見易くすればいいのかが)


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

Name: たいちう  ..比類無きプログラマー(93,823ポイント)   Date: 2010/06/11(金) 00:25   No:53976     
Title: Re:C言語でポーカーを作っているんですが その2    
お久しぶりです。頑張りましたね。

ワイルドカードの使用はどちらかというとマイナールールなので、
後回しで良いのではないでしょうか。
http://ja.wikipedia.org/wiki/%E3%83%9D%E3%83%BC%E3%82%AB%E3%83%BC#.E3.83.AF.E3.82.A4.E3.83.AB.E3.83.89.E3.83.9D.E3.83.BC.E3.82.AB.E3.83.BC


> 次は、関数を使って見やすくするかA の位置をずらさないで
> ロイヤルストレートフラッシュの判定を作るか、
> どちらがやり易いでしょうか?

私の定石としては、プログラムの構造を良くしてから機能追加(or 改善)ですが、
今更、、、という感じがします。

Aの位置を元に戻せば、A2345をストレートと判定することができますので、
現状の判定が一通り終わり、ストレートでなかった場合に、A10JQKかどうかを
判定するだけで完成だと思います。


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

Name: 南瓜  ..中級者(13,670ポイント)   Date: 2010/06/12(土) 21:46   No:54139     
Title: Re:C言語でポーカーを作っているんですが その2    
やり方が異なるかもしれませんが、判定が出来ました。

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

Name: たいちう  ..比類無きプログラマー(94,502ポイント)   Date: 2010/06/12(土) 21:57   No:54144     
Title: Re:C言語でポーカーを作っているんですが その2    
次のデータが役なしになってしまうようです。

int n_hand[5] = {0,9,10,11,12};/*5枚の数字の手札*/
int m_hand[5] = {0,3,3,3,3};/*5枚のマークの手札*/


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

Name: 南瓜  ..中級者(13,737ポイント)   Date: 2010/06/13(日) 11:47   No:54195     
Title: Re:C言語でポーカーを作っているんですが その2    
>int n_hand[5] = {0,9,10,11,12};/*5枚の数字の手札*/ 
>int m_hand[5] = {0,3,3,3,3};/*5枚のマークの手札*/
でストレートの役が出るように直しました


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

Name: たいちう  ..比類無きプログラマー(94,730ポイント)   Date: 2010/06/13(日) 13:25   No:54200     
Title: Re:C言語でポーカーを作っているんですが その2    
フルハウスの時にスリーオブカインドとも表示されてしまいます。
私は丁寧にテストしたわけではないですが、
それ以外は大体できたのではないでしょうか。

まだ続けますか?
続けるならばまずは役判定を関数にするのが良いと思いますが。


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

Name: 南瓜  ..中級者(13,816ポイント)   Date: 2010/06/13(日) 14:05   No:54206     
Title: Re:C言語でポーカーを作っているんですが その2    
昨日、ワンペアから役がうまく判定されるかやっていって
(全部確認出来た訳じゃありませんが)
指摘された所を直しても別の所でまた指摘されるんじゃないかと
うすうす感じてました。

関数にして判り易くしようと思います


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

Name: 南瓜  ..中級者(13,873ポイント)   Date: 2010/06/14(月) 21:15   No:54375     
Title: Re:C言語でポーカーを作っているんですが その2    
関数を利用するのが初めてなので
何もかもグダグダで、どこをどう直せばいいのか
わかりません
助言をお願いします


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

Name: たいちう  ..比類無きプログラマー(95,553ポイント)   Date: 2010/06/14(月) 22:43   No:54388     
Title: Re:C言語でポーカーを作っているんですが その2    
C言語の入門書を持っていないのですか?
関数に配列を引数として渡す方法が必ず載っているはずですが。


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

Name: 南瓜  ..中級者(13,940ポイント)   Date: 2010/06/15(火) 16:09   No:54418     
Title: Re:C言語でポーカーを作っているんですが その2    
C言語の本で探しながら修正していってだいぶエラーが出なくなりましたが
まだまだわからない所だらけです
13行目のエラーは、ストレート系の判定に必要だし
149行目のエラーは、関数についてよく判ってないから
どのように直せばいいのか判りません


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

Name: たいちう  ..比類無きプログラマー(96,083ポイント)   Date: 2010/06/15(火) 16:32   No:54420     
Title: Re:C言語でポーカーを作っているんですが その2    
変数を全部グローバルにしてしまったのですね。
エラーが減ったとしても、No. 54375のプログラムと比較して、
改悪されたという印象を受けます。

「役判定」を関数化する前に、もっと簡単な「カードの表示」について
関数にしてみると良いのではないでしょうか。
No. 54195か、その直後のフルハウスを正しく表示できるプログラムに戻るか、
一旦役判定に関する部分を削除してしまっても良いです。

一応制約として、グローバル変数を使ってはいけない、としておきますが、
どうしても無理ならば使っても良いです。後で改善すればよいので。


何行目のエラーと言われても判りません。
今後はエラーメッセージを貼り付けてください。


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

Name: 南瓜  ..中級者(14,042ポイント)   Date: 2010/06/15(火) 17:56   No:54423     
Title: Re:C言語でポーカーを作っているんですが その2    
グローバル変数のままですが、表示→役判定ができました
>printf("%s ", hands[judgment(number)]);
の部分がhands[judgment(mark)]でも役が表示されたんですが
どのように記述するのが正しいのでしょうか?


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

Name: たいちう  ..比類無きプログラマー(96,099ポイント)   Date: 2010/06/15(火) 20:02   No:54427     
Title: Re:C言語でポーカーを作っているんですが その2    
先にグローバル変数を使わずに表示を完成させましょう。

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

Name: 南瓜  ..中級者(14,061ポイント)   Date: 2010/06/16(水) 22:41   No:54504     
Title: Re:C言語でポーカーを作っているんですが その2    
ちょっと見にくいですが、ローカル変数に変更しました

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

Name: たいちう  ..比類無きプログラマー(96,550ポイント)   Date: 2010/06/16(水) 23:50   No:54507     
Title: Re:C言語でポーカーを作っているんですが その2    
n_handとm_handが最重要のデータです。
mainの中で管理し、少なくともこれらはshowに渡すようにしましょう。
また、showの中ではソートをしてはいけません。
どこでソートすべきだと思いますか?


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

Name: 南瓜  ..中級者(14,138ポイント)   Date: 2010/06/18(金) 19:52   No:54634     
Title: Re:C言語でポーカーを作っているんですが その2    
ソートは、main関数か新しい関数で管理するのかなと思い
新しい関数を作りました
ただ、引数の書き方がわからず、number[n_hand[i]を(char *number[], int n_hand[]])と
書くとtoo few arguments to functionとエラーが出てしまうので
n_hand, m_handの変数を
mainで管理し切れてないです


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

Name: たいちう  ..比類無きプログラマー(96,880ポイント)   Date: 2010/06/18(金) 20:51   No:54644     
Title: Re:C言語でポーカーを作っているんですが その2    
できないならば最低限のことだけ実装しましょう。
今はソートは必要ありません。ついでにm_handも忘れましょう。

main関数で代入した配列n_handを、show関数の中で表示しましょう。
numberは表示の為だけに必要なので、main関数に持つ必要はありません。

これでも難しいならば、配列の受け渡しについて十分練習してください。


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

Name: 南瓜  ..中級者(14,205ポイント)   Date: 2010/06/19(土) 18:52   No:54757     
Title: Re:C言語でポーカーを作っているんですが その2    
とりあえず表示が出来たので、次に役の表示をやろうとしたんですが
表示が「U??WS?Ā?」とバグってしまいます。
これも配列の受け渡しですか?



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

Name: たいちう  ..比類無きプログラマー(97,383ポイント)   Date: 2010/06/19(土) 19:07   No:54760     
Title: Re:C言語でポーカーを作っているんですが その2    
> printf("%s\n", judgment);

これがだめですね。
配列の受け渡しも何も、judgmentに引数を渡していません。

int sum(int a, int b) {
    return a + b;
}

...

int a = 3, b = 5;
print("sum = %d\n", sum(a, b));


このようなサンプルと比較して考えて下さい。
printfの書式指定も確認してください。


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

Name: 南瓜  ..中級者(14,320ポイント)   Date: 2010/06/19(土) 22:17   No:54789     
Title: Re:C言語でポーカーを作っているんですが その2    
No:54634でhands[judgment(number)]の形でうまくいってたので
引数が増えているにhands[judgment(n_hand)]にしてたから
エラーが出てしまったんだと理解しました
(しかしNo:54757はひどいな…)

printfは文字列なので%sにしました

次は、m_handやsort関数を加える事でしょうか?


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

Name: たいちう  ..比類無きプログラマー(97,742ポイント)   Date: 2010/06/19(土) 23:09   No:54797     
Title: Re:C言語でポーカーを作っているんですが その2    
> (しかしNo:54757はひどいな…)

落ち着いて良く考えたら自分で分かる事ですよね。
まず落ち着きましょう。

その上で考えても分からないことを掲示板で質問し、
私や他の方の回答で分かったとしたら、
自分に何が足りなかったのかを良く考えましょう。
成長のチャンスです。


> 次は、m_handやsort関数を加える事でしょうか?

私が決めることじゃないでしょ?
壁にぶつかった場合に、こういう順番で取り組んだら?という、
提案をしているだけです。

どこかで行き詰ったら、また質問してください。


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

Name: 南瓜  ..中級者(14,226ポイント)   Date: 2010/06/21(月) 22:18   No:55022     
Title: Re:C言語でポーカーを作っているんですが その2    
役判定で一通り確認したんですが、フラッシュが関わると役の表示がうまくいきません

・フラッシュならば上位の役であろうと問答無用でフラッシュになってしまう点
・ロイヤルストレートとストレートフラッシュでもフラッシュになってしまう点

この問題を解決するために&&や!=を使って判定すると
またゴチャゴチャになりそうなので出来れば使わずに解決したいです


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

Name: ぽこ  ..上級者(16,903ポイント)   Date: 2010/06/21(月) 22:33   No:55026     
Title: Re:C言語でポーカーを作っているんですが その2    
役判定用のif文の順番を変えれば良いのでは?
現状
・先にフラッシュの判定
・次にストレートフラッシュの判定

修正版
上記の順序を変更。


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

Name: 南瓜  ..中級者(14,239ポイント)   Date: 2010/06/22(火) 22:31   No:55088     
Title: Re:C言語でポーカーを作っているんですが その2    
うまくいきました!ありがとうございます

あと直したい所はchange関数のchar *number、char *markのローカル変数を
書かないで引数として渡すにはどう書けばいいのかと

最期にカードの引ける回数を3回にして、0を押したらまだ引けても
ゲームを終了させるという仕様にしたいです
(カウントダウンがうまくいかないかカウントダウンはうまくいっても
交換したカードが表示されず、0になってもループしてしまう)
(上のソースは、カウントダウンがうまくいかないやつです)



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

Name: たいちう  ..比類無きプログラマー(99,275ポイント)   Date: 2010/06/22(火) 23:22   No:55095     
Title: Re:C言語でポーカーを作っているんですが その2    
void show_a_card(int m_hand, int n_hand); という関数を作りましょうか。
numberやmarkの配列はこの関数だけが持ちます。

show()からは、この関数を5回連続で呼び出し、
change()からは、交換の前後にこの関数を2回呼び出します。


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

Name: 白い時空  ..ぴよぴよ(913ポイント)   Date: 2010/06/23(水) 02:28   No:55121     
Title: Re:C言語でポーカーを作っているんですが その2    
こんにちは。
自分も気になったところがあるので、アドバイスを。

change関数の中身が見づらかったので、見やすくしてみました。

これを見るとわかりますが、i が重複しています。
そのせいで、おかしなことになっていますね。
カウントダウンを付ける以前に見直しが必要です。

カードを引く処理(下側のfor文の中)は多分問題ないと思います。
他の部分を見直してみてください。

大変ですが頑張ってください。

char *number[13] = {"A","2","3","4","5","6","7","8","9","10","J","Q","K"};
char *mark[4] = {"♥","♦","♠","♣"};
char change[10];/*カードを交換する*/

int i;
int limit = 3;

printf("カードを交換する場合1~5を入力して下さい (0は交換しない) > ");
scanf("%s", change);

while (getchar() != '\n') { }

for(i = 0; i < strlen(change); i++) {
    int n = change[i] - '0';
    while ((n < 0) || (5 < n)) {
        printf("3回まで交換できます\n");
        printf("0または1~5を入力して下さい (0は交換しない) > ");
        scanf("%s", change);
        int n = change[i] - '0';
        if((1 <= n) && (n <= 5) || (n == 0)) 
        break;
    }

    limit--;

    for(i = 0; i < strlen(change); i++) {
        int n = change[i] - '0';
        if ((1 <= n) && (n <= 5)) {
            printf("%d枚目のカードを交換します。%s - %s\n", n, mark[m_hand[n-1]], number[n_hand[n-1]]);
            int index = n -1;
            do {
                n_hand[index]= rand() % 13;
                m_hand[index] = rand() % 4;
            } while (card[m_hand[index]][n_hand[index]] == 1);
            card[m_hand[index]][n_hand[index]] = 1;
            printf("%d枚目のカードを交換しました。%s - %s\n",n,mark[m_hand[n-1]],number[n_hand[n-1]]);
        } else if (n == 0) {
            printf("0なので交換しません。\n");
        }
    }
    
    printf("0または1~5を入力して下さい (0は交換しない)\n");
    if (limit != 0) {
        printf("あと%d回交換できます ", limit);
    } else {
        printf("もうカードは交換できません\n");
    }
}



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

Name: 南瓜  ..中級者(14,418ポイント)   Date: 2010/06/24(木) 23:03   No:55240     
Title: Re:C言語でポーカーを作っているんですが その2    
iが重複しているというのが判りませんでしたが、
(何回もi = 0で初期化はよくないのかな?)
白い時空さんのように見やすくしたら
3回云々の処理がすんなりうまくいきました

void show_a_card(int m_hand, int n_hand);を作りましたが
change関数の所がshow_a_card (m_hand[n-1], n_hand[n-1]);
と書くと passing argument 1 of ‘show_a_card’ makes pointer from integer without a cast
と出てしまうため、仕様通りに出来ませんでした


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

Name: たいちう  ..比類無きプログラマー(99,377ポイント)   Date: 2010/06/25(金) 00:17   No:55243     
Title: Re:C言語でポーカーを作っているんですが その2    
> iが重複しているというのが判りませんでしたが、 

インデントがずれているので分かりにくいですが、
iをループ変数にしたforが二重になってしまっています。


> void show_a_card(int m_hand, int n_hand); を作りましたが
> change関数の所がshow_a_card (m_hand[n-1], n_hand[n-1]);
> と書くと passing argument 1 of ‘show_a_card’ makes pointer from integer without a cast
> と出てしまうため、仕様通りに出来ませんでした

これではアドバイスできません。
コンパイルエラーを引き起こした部分を載せて下さい。
最低でも関数宣言と関数を呼び出している部分を。


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

Name: 白い時空  ..ぴよぴよ(874ポイント)   Date: 2010/06/25(金) 02:59   No:55257     
Title: Re:C言語でポーカーを作っているんですが その2    
show_a_card関数の所、おしいですね。
問題点としては、

・show_a_card関数では1枚のカードを表示するので、for文を使う必要はなく、配列をわたす必要もありません。
・show関数では5枚のカードを表示するので、show_a_card関数を5回行えばいいはずです。


change関数の所ですが、
for文について簡単に言えば、上側のfor文は必要ありません。無くても問題ないはずです。
他にも問題点があります。

・scanfが2つある。(1つで十分なはずです。どちらか無駄な可能性があります)
・scanfの入力が正しいかの判定をchange[ i ]の1文字しかしていない。(1文字だけ判定すれば十分ですか?)
・int n;の宣言が複数ある。(ややこしくなるので、宣言は最初にしておくべき)

問題点多いですが頑張ってください。


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

Name: 南瓜  ..上級者(15,360ポイント)   Date: 2010/06/25(金) 13:32   No:55275     
Title: Re:C言語でポーカーを作っているんですが その2    
先にたいちうさんの方から
void show_a_card (int m_hand[], int n_hand[]) {
    
    char *number[13] = {"A","2","3","4","5","6","7","8","9","10","J","Q","K"};/*カードの番号*/
    char *mark[4] = {"♥","♦","♠","♣"};/*カードのマーク*/
    
    int i; 
    
    for(i = 0; i < 5;  i++) {
        printf("%s - %s ",  mark[m_hand[i]], number[n_hand[i]]);/* 五枚のカードを表示 */ 
    }
    printf("\n");
}

void show (int m_hand[], int n_hand[]) {
    
    show_a_card (m_hand, n_hand);/* 五枚のカードを表示 */ 
}

void change (int card[][13], int m_hand[], int n_hand[]) {
for(i = 0; i < strlen(change); i++) {
                int n = change[i] - '0';
                if ((1 <= n) && (n <= 5)) {
                    printf("%d枚目のカードを交換します。%s  \n", n, show_a_card (m_hand[n-1], n_hand[n-1]));
                    show_a_card (m_hand, n_hand);
                    int index = n -1;
                    do {
                        n_hand[index]= rand() % 13;
                        m_hand[index] = rand() % 4;
                    } while (card[m_hand[index]][n_hand[index]] == 1);
                    card[m_hand[index]][n_hand[index]] = 1;
                    printf("%d枚目のカードを交換しました。%s  \n", n, show_a_card (m_hand[n-1], n_hand[n-1]));
                    show_a_card (m_hand, n_hand);
                } else if (n == 0) {
                    printf("0なので交換しません。\n");
                    limit = 0;
                }
            }


kansu.c:117: warning: passing argument 1 of ‘show_a_card’ makes pointer from integer without a cast
kansu.c:117: warning: passing argument 2 of ‘show_a_card’ makes pointer from integer without a cast
kansu.c:117: error: invalid use of void expression
kansu.c:125: warning: passing argument 1 of ‘show_a_card’ makes pointer from integer without a cast
kansu.c:125: warning: passing argument 2 of ‘show_a_card’ makes pointer from integer without a cast
と表示されます


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

Name: ドラ  ..初心者(6,031ポイント)   Date: 2010/06/25(金) 17:48   No:55288     
Title: Re:C言語でポーカーを作っているんですが その2    
>printf("%d枚目のカードを交換します。%s  \n", n, show_a_card (m_hand[n-1], n_hand[n-1]));
%s は対応する引数に char*型を要求しますが、show_a_card関数の返却値の型は何ですか?

show_a_card関数に渡された実引数、m_hand[n-1]とn_hand[n-1]の型は何ですか?
それに対して、show_a_card関数の仮引数の型は何ですか?

・・・と言うか、それ以前に
show_a_card関数の役割は何ですか?
show関数の役割は何ですか?


実装詳細に意識をとらわれすぎていて、大雑把なレベルでの処理の流れを整理できないまま
なんとなくコードを書いてしまっているような気がします。


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

Name: たいちう  ..比類無きプログラマー(99,466ポイント)   Date: 2010/06/25(金) 23:26   No:55300     
Title: Re:C言語でポーカーを作っているんですが その2    
> ・・・と言うか、それ以前に
> show_a_card関数の役割は何ですか?
> show関数の役割は何ですか?

私も同じ意見です。
私は↓のような仕様を書いていたはずです。

> show()からは、この関数を5回連続で呼び出し、
> change()からは、交換の前後にこの関数を2回呼び出します。

なぜ、私はこのような仕様を書いたのでしょうか?
何となく言われるままにプログラムを作ろうとして、
作りきれずに適当な妥協をしていませんか?

以前に比べると確実に前進しています。
焦らず、南瓜さんのペースで進めればよいので、
掲示板に書くべきことが十分まとまってから書いてください。


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

Name: 南瓜  ..上級者(15,480ポイント)   Date: 2010/06/26(土) 22:44   No:55358     
Title: Re:C言語でポーカーを作っているんですが その2    
質問したいことがいくつかありますが、まず表示のことで
今までprintf("%s - %s ",  mark[m_hand[i]], number[n_hand[i]]);
で表示がうまくいきましたが、これだとSegmentation faultと出てしまいます
markやnumberは表示に必要だし、m_hand[i]などもrandで選んだ数を
代入してるから必要だし、どちらか片方だけだと表示がバグるし…
根本的な所が間違ってるんでしょうか?


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

Name: ぽこ  ..上級者(18,237ポイント)   Date: 2010/06/26(土) 22:52   No:55359     
Title: Re:C言語でポーカーを作っているんですが その2    
> 質問したいことがいくつかありますが、まず表示のことで
> 今までprintf("%s - %s ",  mark[m_hand[i]], number[n_hand[i]]);
> で表示がうまくいきましたが、これだとSegmentation faultと出てしまいます

関数show_a_card()の中の変数iの値が不定です。
show_a_card()にshow()のiを渡さないといけないんじゃないですか?

void show_a_card (int m_hand[], int n_hand[]) {
    
    char *number[13] = {"A","2","3","4","5","6","7","8","9","10","J","Q","K"};/*カードの番号*/
    char *mark[4] = {"♥","♦","♠","♣"};/*カードのマーク*/
    
    int i;/*ここの値はなんじゃらほい?*/ 
    
        printf("%s - %s ",  mark[m_hand[i]], number[n_hand[i]]);/* 一枚のカードを表示 */
}


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

Name: たいちう  ..比類無きプログラマー(99,612ポイント)   Date: 2010/06/26(土) 23:59   No:55366     
Title: Re:C言語でポーカーを作っているんですが その2    
No:55095を良く読んでください。

void show_a_card (int m_hand[], int n_hand[]); ではなく、
void show_a_card (int m_hand, int n_hand); です。

↓のように呼び出します。

for (i = 0; i < 5; i++) {
    show_a_card (m_hand[i], n_hand[i]);
}


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

Name: 南瓜  ..上級者(15,571ポイント)   Date: 2010/06/27(日) 19:31   No:55416     
Title: Re:C言語でポーカーを作っているんですが その2    
引数の書き方が間違っていたのか…
ひとまず完成したのかな?(修正点はまだあるでしょうが)

int n = change[i] - '0';とint index = n - 1;は
下手に移動すると交換がうまくいかなくなるので
そのままにしてあります


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

Name: 南瓜  ..上級者(15,854ポイント)   Date: 2010/06/29(火) 21:24   No:55525     
Title: Re:C言語でポーカーを作っているんですが その2    
レスがないから平気だったのかな?(遊んだ感じでは平気でした)
もしプログラムに問題ないようならいくつか質問させて下さい

自分は、最終的にRPGやら公開されている龍神録などのゲームを
作れるようになりたいです。

が!配列(というより全体的なC言語)の知識が足りない事を痛感しました
あと、国語力不足も…
授業でC言語を習った時は、あまり興味が無かったんですが
ここで公開されているゲームや「10日で覚えるC言語教室」をみて
C言語でこんなことが出来るのかと感動しました
そして、C言語教室も一通り勉強したので、ポーカーを作ってみよう
と思い、つまずいたのでここで質問させてもらいました。

で、いきなりRPGを作り出したら絶対挫折するのが目に見えているので
徐々にステップアップしていきたいのですが
(ぷよぷよ→テトリス→…みたいに)順番にやっていくなら
次は何がいいでしょうか?


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

Name: 組木紙織  ..比類無きプログラマー(87,905ポイント)   Date: 2010/06/29(火) 21:26   No:55526     
Title: Re:C言語でポーカーを作っているんですが その2    
オセロはどうでしょうか

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

Name: たいちう  ..ハッカー(100,092ポイント)   Date: 2010/06/30(水) 09:27   No:55552     
Title: Re:C言語でポーカーを作っているんですが その2    
> レスがないから平気だったのかな?(遊んだ感じでは平気でした)
> もしプログラムに問題ないようならいくつか質問させて下さい

私がレスをしなかったのは、具体的な質問が無かったからです。
忙しかったのもあるけど。
役判定の部分が未完成です。次のデータはフラッシュのはずですよね?

int n_hand[5] = { 1, 8, 10, 11, 12 }; /*5枚の数字の手札*/
int m_hand[5] = { 0, 0, 0, 0, 0 }; /*5枚のマークの手札*/


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

Name: 白い時空  ..ぴよぴよ(909ポイント)   Date: 2010/06/30(水) 19:50   No:55603     
Title: Re:C言語でポーカーを作っているんですが その2    
問題はまだ少しありますね。

たいちうさんの言う通り
int n_hand[5] = { 1, 8, 10, 11, 12 };
int m_hand[5] = { 0, 0, 0, 0, 0 };
これだと、sum==42 でロイヤルストレートフラッシュ扱いになってますね。

他には
・main関数で宣言されたlimitは使われていない。
・judgment関数にhandsを渡す必要はない。
くらいですかね。

あとjudgment関数での役の判定ですが、役の強いものから順に判定するべきだと思います。


次のステップですか。
配列の理解がまだなら、理解してから次に進んでくださいね。
C言語を一通り覚えたら、後は実践あるのみだと思います。
ゲームを作りたいなら、このサイトの「ゲームプログラミングの館」をやってみてはどうでしょうか?


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

Name: 南瓜  ..上級者(15,930ポイント)   Date: 2010/07/02(金) 22:15   No:55785     
Title: Re:C言語でポーカーを作っているんですが その2    
返信遅れました
ロイヤルストレートフラッシュの修正と他の細かい修正をしました

オセロですか、C言語をより理解したら作ってみます

MacでもDXライブラリは使えますか?


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



Name: ふがふが  ..ぴよぴよ(279ポイント)   Date: 2010/07/02(金) 21:06   No:55773       
Title: ファイル読み込み    
fp = fopen("ディレクトリ\ファイル名.txt","r");
fgets(fp,text,1024);
fclose(fp);

適当なディレクトリにある拡張子(.txt)のテキストファイルを
全て読み込むにはどのようにしたらよろしいでしょうか?

ファイル名を予め配列に入れておくなどはNGな方向で。。。
どんなファイル名が存在しても全てちゃんと読み込みたいです。

こんなことはできるでしょうか?


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


Name: シエル  ..上級者(19,925ポイント)   Date: 2010/07/02(金) 21:11   No:55775     
Title: Re:ファイル読み込み    
findfirstfileで今すぐ検索。

http://msdn.microsoft.com/ja-jp/library/cc429233.aspx


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

Name: ふがふが  ..ぴよぴよ(450ポイント)   Date: 2010/07/02(金) 21:14   No:55776     
Title: Re:ファイル読み込み    
ありがとうございます。
URLを拝見しましたが

>指定されたファイル名に一致するファイルを、ディレクトリ内で検索します。ファイル名だけでなく、サブディレクトリ名も検索の対象となります。

このように書いてありました。
ファイル名に一致するファイルというより
.txtという拡張子の付いてるファイルを全て検索したいのですが・・・


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

Name: シエル  ..上級者(20,035ポイント)   Date: 2010/07/02(金) 21:17   No:55780     
Title: Re:ファイル読み込み    
検索文字列はワイルドカードでの指定が可能です。

hFind = FindFirstFile("\\my documents\\*.txt", &fd)

下記をごらん下さい。
http://nienie.com/~masapico/api_FindFirstFile.html


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



Name: ほかる  ..ぴよぴよ(47ポイント)   Date: 2010/06/23(水) 11:11   No:55133       
Title: ピラミットアート    
ピラミットアートの数値を一つ入力し、その個数分の'*'を1辺とする
正方形、三角形、逆三角形、三角旗、ダイヤ型、六角形、星形、などの描画どう作るかわからないので教えてくれませんか。


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


Name: ookami  ..プログラマー(28,315ポイント)   Date: 2010/06/23(水) 11:20   No:55134     
Title: Re:ピラミットアート    
ピラミットアートとは何ですか?
環境なども回答の参考になりますので書いてください。

あと、投稿に際しては、利用規約も参考にしてください。
http://dixq.net/board/board.html


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

Name: ほかる  ..ぴよぴよ(107ポイント)   Date: 2010/06/23(水) 11:32   No:55135     
Title: Re:ピラミットアート    
C言語で
****
****
****
****
このようになるプログラムを入力したいのでがよくわからないので誰か教えてくれませんか。


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

Name: ookami  ..プログラマー(28,589ポイント)   Date: 2010/06/23(水) 11:35   No:55137     
Title: Re:ピラミットアート    
その説明ではピラミットアートが何なのか分かりかねます。
上記の例では、「正方形、三角形、逆三角形、三角旗、ダイヤ型、六角形、星形」についても不明確です。

繰り返しますが、環境と利用規約、お願いします。


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

Name: ほかる  ..ぴよぴよ(171ポイント)   Date: 2010/06/23(水) 11:56   No:55140     
Title: C言語    
プログラムで実行画面が
数字(2〜9)を入力してください
****
****
****
****
このように正方形に出てくるプログラムをうちたいのですがどのようにうったらいいのが
全くわからないのでこれだげで誰かわかる人いますか。



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

Name: ookami  ..プログラマー(28,494ポイント)   Date: 2010/06/23(水) 12:14   No:55144     
Title: Re:C言語    
C言語といってもいろいろあります。
OSも示されていません。
ご自分でどこまでやってみたのかも分かりません。

> プログラムで実行画面が 
> 数字(2〜9)を入力してください 
> **** 
> **** 
> **** 
> **** 
> このように正方形に出てくるプログラムをうちたい

これだけなら、 

printf("数字(2〜9)を入力してください \n");
printf("****\n");
printf("****\n");
printf("****\n");
printf("****\n");

でもそのようには出ますが、それでよいのでしょうか?


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

Name: 通りすがり  ..上級者(21,544ポイント)   Date: 2010/06/23(水) 13:16   No:55156     
Title: Re:ピラミットアート    
荒らしているのはスレ主ですか?

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

Name: 白い時空  ..ぴよぴよ(721ポイント)   Date: 2010/06/23(水) 16:52   No:55163     
Title: Re:ピラミットアート    
例えば、辺が4の四角形ならfor文を使って、
int i,j;

for(i=0;i<4;i++){
    for(j=0;j<4;j++){
        
        printf("*");
        
    }
    printf("\n");
}

このように書けます。
三角形なら、これを応用すればできます。
他の図形はよくわからないです。


ほかるさん、
初歩的な質問なら、特に環境を書く必要はないと思いますが、
自分がどれだけC言語の知識を持っているかは、書いておくべきです。


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

Name: Dixq (管理人) [URL]  ..ウィザード(1,225,985ポイント)   Date: 2010/06/23(水) 17:53   No:55165     
Title: Re:ピラミットアート    
> ほかるさん

> 教えろ教えろ教え教えろ教えろ教えろ教えろ教えろ教えろ教えろ教えろ教えろ教えろしねしねしねしねしねしねしねしね

このような書き込みは規約違反ですので削除致しました。
この場は答えを得る場ではなく、学び方自体を学び、スキルアップする事を目的とした場ですので、
答えのみを求める質問も厳密にいえば規約違反となってしまいます。

規約を守った利用をお願いします。

回答者の皆様が規約やほかるさんの知識量を問われているのは、質問に正確に答えようとして下さっているからです。
「すぐに答えを教えてくれないのは意地悪だ」と感じられたのかもしれませんが、むしろその逆です。

規約は円滑に情報交換が出来るようにする為に作った物なので、これに沿って頂くのがお互いの為に最善の方法なのです。

ということで・・、
ほかるさんはどの程度C言語を理解されていますか?
例えばfor文で自分の期待する結果を得るための処理を書く事は出来ますか?

> 正方形、三角形、逆三角形、三角旗、ダイヤ型、六角形、星形

これ全部ですか?
星とかは難易度がかなり高いと思いますよ・・。


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

Name: 通りすがり  ..上級者(21,570ポイント)   Date: 2010/06/23(水) 18:16   No:55170     
Title: Re:ピラミットアート    
アンケートのコメントにまで同じ質問がありますね。

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

Name: Dixq (管理人) [URL]  ..ウィザード(1,226,228ポイント)   Date: 2010/06/23(水) 19:16   No:55176     
Title: Re:ピラミットアート    
う、アンケートの選択肢が酷い事になってますね・・。
使ってるコンパイラyoujo studyとか、来た経路がハイハイとかブランコとか・・。
修正しますm(_ _;)m


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

Name: TKOZ  ..熟練のプログラマー(65,279ポイント)   Date: 2010/06/23(水) 19:35   No:55178     
Title: Re:ピラミットアート    
スレ主さん、落ち着いてください。

僕も今でこそ、ゲームを作れるように(なったかな?)なりましたが、
C言語のCの字も知らなかった頃、1+1の計算もC言語で出来ませんでした。

高校の頃覚えたてのC言語(YaneuraoGameScript2000)でシューティングゲームらしいゲームを
初めて作って、とても(ゲーム)プログラミングって楽しいなあと思うようになりました。

そのゲームは、スコア計算がおかしくて、ボムを撃つと敵を蹴散らせて
スコアが天文学的に跳ね上がるのですが、
スコアの表示部分にキャラクターが描画されるという面白いバグがありました。

このように、プログラミングって、自分で考えて作っていくから本来面白いと思うんですよ。

しかし、学校のテストや宿題のように、強制された環境で勉強するからいけないと思うんです。

え〜っと、何がいいたいのかよく分からなくなってきましたが、
結論として、プログラミングは、本来面白いものです。自分で考えられなかったら、そこまでの
途中までの考えをこのC言語何でも掲示板に書き込んでみたら良いと思います。

あと、とりあえず、ヒントを言います。
全角の空白(□←これじゃないけど、これとする)が先に表示して、その空白は段が下になるほど
小さくなっていきます。下の図だと、3,2,1,0の順です。
□□□■
□□■■■
□■■■■■
■■■■■■■
そして、ピラミッドは1,3,5,7の順で増えていきます。
高校の頃、BASICを教えてもらったアドバイスがあります。
「プログラミング環境がなくてもプログラムを考える事が出来る。
家にパソコンがないから、家で考えてきて、学校のパソコンに打ち込む」
です。つまり、紙に書いてみて、法則を計算で導きだしてください。
電卓も使ってみてください。(関数電卓のほうが便利です)

まあ、恥ずかしながら、僕もこの問題は最近出来るようになったのですが、
参考になりそうなリンクがあります。
http://okwave.jp/qa/q4035902.html
それでは、頑張ってください。


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

Name: パコネコ  ..入門者(3,489ポイント)   Date: 2010/06/23(水) 20:08   No:55180     
Title: Re:ピラミットアート    
>正方形、三角形、逆三角形、三角旗、ダイヤ型、六角形、星形
これって三角形だけなら(逆含む)学校の勉強で作ったことがあるのですが…
具体的にどんな形かわかりますか?
たとえば
■□□
■■□
■■■
とか
>ピラミットアートの数値を一つ入力し、その個数分の'*'を1辺とする 
□□■□□
□■■■□
■■■■■
辺は3と3と5なので
条件に合いませんね
でも
■■■■■
□■■■□
□□■□□
これを合わせると

□□■□□
□■■■□
■■■■■
□■■■□
□□■□□
1辺が3のダイヤですね
マークを書いてみてもらえませんか?
プログラムを考えるには何を作ろうとしているのか自分でわからなければなりませんから。





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

Name: パコネコ  ..入門者(3,542ポイント)   Date: 2010/06/23(水) 20:14   No:55182     
Title: Re:ピラミットアート    
★星?☆
☆☆☆☆★☆☆☆☆
☆☆★★★★★☆☆
☆☆☆★★★☆☆☆
☆☆★★☆★★☆☆
うまく書けない…


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

Name: バグ  ..ハッカー(198,185ポイント)   Date: 2010/06/23(水) 20:38   No:55185     
Title: Re:ピラミットアート    
星は…

☆☆☆☆☆★☆☆☆☆☆
☆☆☆☆★★★☆☆☆☆
★★★★★★★★★★★
☆★★★★★★★★★☆
☆★★★★★★★★★☆
★★★★★★★★★★★
☆☆☆☆★★★☆☆☆☆
☆☆☆☆☆★☆☆☆☆☆

こんなんじゃないかな?
この手の課題で出されるのは、いわゆる六芒星が多いですし…。


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

Name: パコネコ  ..入門者(3,632ポイント)   Date: 2010/06/23(水) 20:49   No:55186     
Title: Re:ピラミットアート    
あ〜六芒星でしたか…自分からやっといてなんですが☆★で書くと見ずらいですね。
次からは□■にします
これならfor文で作れそうですね
三角形と逆三角形を同時に書くだけですから
if文いるね。


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

Name: Dixq (管理人) [URL]  ..ウィザード(1,226,320ポイント)   Date: 2010/06/23(水) 23:03   No:55191     
Title: Re:ピラミットアート    
>次からは□■にします 

"□"は" "の方が見やすいのでは?

     ★      
    ★★★     
★★★★★★★★★★★ 
 ★★★★★★★★★  
 ★★★★★★★★★  
★★★★★★★★★★★ 
    ★★★     
     ★     
 


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

Name: ムンバ  ..初心者(5,607ポイント)   Date: 2010/06/24(木) 00:19   No:55194     
Title: Re:ピラミットアート    
こんばんはっ!

盛り上がってる?所、この様な事を言うのは大変恐縮なのですが・・・

ピラミット → ピラミッド

の間違いだと思うのですが、今更すみません。^^;
おやすみなさい〜♪(∪。∪)。。。zzzZZ

---編集・追記---

↓参照ページ
http://dic.yahoo.co.jp/search?stype=0&ei=UTF-8&dtype=2&p=%E3%83%94%E3%83%A9%E3%83%9F%E3%83%83%E3%83%88
発音の仕方で、意味が違ってくるのかもしれませんし
もしかしたら、ピラミットアートというのが存在するのかもしれません。
勘違いでしたら、ごめんなさい。(謝

---さらに追記<(_ _)>---
ミット → 手袋
と言う意味でした。
「ピラ」を調べてみましたが、該当無しでした。^^ 編集済み


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

Name: パコネコ  ..入門者(3,658ポイント)   Date: 2010/06/24(木) 22:29   No:55237     
Title: Re:ピラミットアート    
管理人さんの☆きれいにかけてますね。
ただ1辺の長さを整えないといけないんですよね。
だれかどういう形になるか書いてみてもらえませんか?
学校でも考えてたけど思いつきませんですた。
明日は検定試験なのに勉強に身が入りませんよ…


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

Name: Dixq (管理人) [URL]  ..ウィザード(1,226,798ポイント)   Date: 2010/06/25(金) 00:38   No:55246     
Title: Re:ピラミットアート    
円に内接する三角形を60度ずらせば六芒星になると思います。

scanf("%d",&n);

for( y=-n/2; y<=n/2; y++ ){
    for( x=-n/2; x<=n/2; x++ ){
        if( 領域の内側 ){
            printf("★");
        } else {
            printf(" ");
        }
    }
}

どれもこんな感じで出来そうですね。
領域判定式を変えてやればいいだけで。

五芒星であれば円の孤上、360/5°ずつ点を打ってやり、各2点を結ぶ直線の上か下かで領域を決めてやればよさそうですが、こちらはちょっとややこしそうですね。
考えれば何か簡単に領域を判定する式が見つかるのかもしれませんが。


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

Name: 組木紙織  ..比類無きプログラマー(87,311ポイント)   Date: 2010/06/25(金) 01:37   No:55251     
Title: Re:ピラミットアート    
Dixqさんの考え方に従ってコード書いてみました。
範囲の計算は回転が扱いやすいので複素数をつかっています。
全然上手にかけていませんが、眠いのでこれくらいで我慢してください。

#C99なら複素数計算も出来たはずですが、私の環境が対応してないのでパスします。

#include <iostream>
#include <complex>
#include <cmath>
const double pai =acos(0.0)*2;
bool check1(int i,int j)
{
    std::complex<double> c(i,j);
    bool retFlag = true;
    
    if(retFlag)
    {
        retFlag =real(c)<5*(1.0/2);
    }
    if(retFlag)
    {
        std::complex<double> d=std::polar(cos(2*pai/3), sin(2*pai/3))*c;
        retFlag =real(d)<5*(1.0/2);
    }

    if(retFlag)
    {
        std::complex<double >d=std::polar(cos(-2*pai/3), sin(-2*pai/3))*c;
        retFlag =real(d)<5*(1.0/2);
    }

    return retFlag;
}
bool check2(int i,int j)
{
    std::complex<double> c(i,j);
    bool retFlag = true;
    
    c =c*std::polar(cos(pai),sin(pai));
    if(retFlag)
    {
        retFlag =real(c)<5*(1.0/2);
    }
    if(retFlag)
    {
        std::complex<double> d=std::polar(cos(2*pai/3), sin(2*pai/3))*c;
        retFlag =real(d)<5*(1.0/2);
    }

    if(retFlag)
    {
        std::complex<double >d=std::polar(cos(-2*pai/3), sin(-2*pai/3))*c;
        retFlag =real(d)<5*(1.0/2);
    }

    return retFlag;
}
int main()
{
    for(int i=-10;i<=10;i++)
    {
        for(int j=-10;j<=10;j++){
            char ch = check2(i,j)||check1(i,j)?'*':' _';
            std::cout << ch;
        }
        std::cout << std::endl;
    }

}


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

Name: KEV  ..初心者(6,817ポイント)   Date: 2010/06/25(金) 12:27   No:55271     
Title: Re:ピラミットアート    
パコネコさんもおっしゃっているような、
三角形と逆三角形をずらして描画する、というスタンスで書いてみました。
関数 triangle() と triangle_reverse() に
書きたい三角形のサイズと上からの距離を入れてやれば指定部にフラグが立ちます。
後はまとめて出力するといった感じ。
if文の中身がえらいややこしくなってしまった…。

この方法だと「1辺の長さ」の定義によっては正解じゃないかもしれません。
まぁ参考までにってことで。

以下コード
----------------


#include "stdafx.h"

const int CanvasSize = 17;
int setFlag[CanvasSize][CanvasSize] = {0};  // size*sizeがキャンバスの大きさ

void triangle(int size, int height)
{
    if(size <= 0){
        return;
    }
    if((size/2)+height > CanvasSize){
        return;
    }

    int top = height;

    for(int i = top; i < size; ++i){
        for(int j = 0; j < size; ++j){
            if(j >= (i-top) && j < (size-i+top)){
                setFlag[i][j] = 1;
            }
            else{
                //setFlag[i][j] = 0;        // 塗りつぶすため0は入れない
            }
        }
    }

    return;
}

void triangle_reverse(int size, int height)
{
    if(size <= 0){
        return;
    }
    if((size/2)+height > CanvasSize){
        return;
    }

    int bottom = (size/2) - height;

    for(int i = (size-1-bottom); i >= 0; --i){
        for(int j = 0; j < size; ++j){
            if(j >= (size-i-1-bottom) && j <= (i+bottom)){
                setFlag[i][j] = 1;
            }
            else{
                //setFlag[i][j] = 0;        // 塗りつぶすため0は入れない
            }
        }
    }

    return;
}

int _tmain(int argc, _TCHAR* argv[])
{
    const int size = CanvasSize;

    // 1辺がsizeの三角形フラグを上から3の位置にセット
    triangle(size, 3);
    // 1辺がsizeの反転した三角形フラグを上から0の位置にセット
    triangle_reverse(size, 0);     //

    for(int i = 0; i < CanvasSize; ++i){
        for(int j = 0; j < CanvasSize; ++j){
            if(setFlag[i][j] == 1){
                printf("*");
            }
            else{
                printf("_");
            }
        }
        printf("\n");
    }

    getchar();

    return 0;
}






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

Name: KEV  ..初心者(6,906ポイント)   Date: 2010/06/25(金) 12:31   No:55272     
Title: Re:ピラミットアート    
ちなみに出力結果はこんな感じです。
テキストで見ないと綺麗に見えないかも。


________*________
_______***_______
______*****______
*****************
_***************_
__*************__
__*************__
_***************_
*****************
______*****______
_______***_______
________*________
_________________
_________________
_________________
_________________
_________________



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

Name: ココナ  ..ぴよぴよ(66ポイント)   Date: 2010/06/25(金) 13:08   No:55273     
Title: Re:ピラミットアート    
答えが教えてもらえなかったら死ねとか書き込みするような質問に答え教えてしまうと拍車がかかりませんかね。

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

Name: KEV  ..初心者(6,744ポイント)   Date: 2010/06/25(金) 15:24   No:55277     
Title: Re:ピラミットアート    
最初から答えを教えようという気があったわけではなく、
スレッドの流れを見て気分転換に作ってみたいな、と思ったから書いてみました。
スレ主さんがまだここに来てくれるとはあまり思えないですし。

こういう問題は実装をあれこれ考えている時間が楽しいし有意義かなと思います。
何かの課題なのでしょうが、課題には向いていないんじゃないかなぁ。


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

Name: Dixq (管理人)  ..ウィザード(1,226,798ポイント)   Date: 2010/06/25(金) 16:02   No:55281     
Title: Re:ピラミットアート    
おぅKEV!元気でやってますかいの。

等間隔で表示したいときはHTMLのpreタグで囲むと良いよb


Name: H L  ..ぴよぴよ(55ポイント)   Date: 2010/06/29(火) 01:26   No:55487     
Title: Re:ピラミットアート    
ねぇ君、どうしてこんなところで学校の課題を質問してるのかな?

(不適切な表現が含まれていたので管理人が一部記事を削除致しました。
規約を守った利用をお願いいたします。)



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

Name: パコネコ  ..入門者(3,041ポイント)   Date: 2010/06/29(火) 20:55   No:55522     
Title: Re:ピラミットアート    
KEVさんきれいにできてますね。
________*________
_______***_______
______*****______
*****************
_***************_
__*************__
__*************__
_***************_
*****************
______*****______
_______***_______
________*________
後はこれの横幅を3にすれば1辺が3の☆になりますね。
…ちょっと無理そうですね。
ここの主さんは宿題できたのでしょうか?
すごく難しいのできっと困っていたでしょうにのぞいているといいんですが…
=============
なんか崩れてる? 編集済み


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

Name: パコネコ  ..入門者(3,125ポイント)   Date: 2010/06/29(火) 21:02   No:55523     
Title: Re:ピラミットアート    
改良してみました
______*______
_____***_____
____*****____
_***********_
__*********__
___*******___
___*******___
__*********__
_***********_
____*****____
_____***_____
______*______
微妙ですね
横4マスになってるかな?
でもこれ以上は…
===========
こっちもずれちゃう… 編集済み


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

Name: パコネコ  ..入門者(3,232ポイント)   Date: 2010/06/30(水) 00:09   No:55537     
Title: Re:ピラミットアート    
再チャレンジ
ずれないように今度は自分で書く
     ■
    ■■■
   ■■■■■
■■■■■■■■■■■
 ■■■■■■■■■
  ■■■■■■■
  ■■■■■■■
 ■■■■■■■■■
■■■■■■■■■■■
   ■■■■■
    ■■■
     ■
完璧!(^_-)-☆
全部3マス!!!!


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

Name: パコネコ  ..入門者(3,236ポイント)   Date: 2010/06/30(水) 00:21   No:55539     
Title: Re:ピラミットアート    
連続すいません
     ■ 
    ■■■ 
   ■■■■■ 
■■■■■■■■■■■ 
 ■■■■■■■■■ 
  ■■■■■■■ 
  ■■■■■■■ 
 ■■■■■■■■■ 
■■■■■■■■■■■ 
   ■■■■■ 
    ■■■ 
     ■ 
これを見本にするなら
行数 空欄 黒
1行目 5 1
2行目 4 3
3行目 3 5
4行目 0 11
5行目 1 9
6行目 2 7
7行目 2 7
8行目 1 9
9行目 0 11
10行目 3 5
11行目 4 3
12行目 5 1
という感じですね
見ての通り1〜6行目までと12〜7行目は同じです(さかさまだけど…
というわけでとりあえず1〜6行目を作る必要があります
これだけでは規則性を導きズらいので4マスバージョンを書いてみます。


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

Name: パコネコ  ..入門者(3,751ポイント)   Date: 2010/06/30(水) 00:49   No:55540     
Title: Re:ピラミットアート    
       ■  
      ■■■  
     ■■■■■
    ■■■■■■■
■■■■■■■■■■■■■■■ 
 ■■■■■■■■■■■■■
  ■■■■■■■■■■■
   ■■■■■■■■■
  ■■■■■■■■■■■
 ■■■■■■■■■■■■■
■■■■■■■■■■■■■■■
    ■■■■■■■
     ■■■■■
      ■■■  
       ■ 
こんな感じですか?
真中は1つに変更しました
行数 空欄 黒
1  7  1
2  6  3
3  5  5
4  4  7
5  0  15
6  1  13
7  2  11
8  3  9
9  2  11
10 1  13
11 0  15
12 4  7
13 5  5
14 6  3
15 7  1
今回の場合8で反転してますね少し変更もあったので前のものも一緒に書きたいと思います。
行数 空欄 黒 空欄 黒
1  7  1 |5 1
2  6  3 |4 3
3  5  5 |3 5
4  4  7 |

5  0  15|0 11
6  1  13|1 9
7  2  11|

8  3  9 |2 7

9  2  11|
10 1  13|1 9
11 0  15|0 11

12 4  7 |
13 5  5 |3 5
14 6  3 |4 3
15 7  1 |5 1
線の右側は3マスのときです
3マスのときは縦に3行書いた後に空欄が0になりますね
そして4マスのときは4行の後0になります。
少しわかってきましたね。おそらく1行目の空欄の数もマスの2倍ー1だと思われます
これにより1辺の長さがNのとき
for(a=0;a<N;a++){
 for(b=0;b<N*2-1;b++)
  printf(" ");//空欄の描写
 for(c=0;c<a*2+1;c++)
  printf("*");//マークの描写
 printf("\n");//次の行へ
}
これで1つ目です
書きズらいので一旦区切ります
 


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

Name: パコネコ  ..入門者(3,493ポイント)   Date: 2010/06/30(水) 01:12   No:55541     
Title: Re:ピラミットアート    
次はさっきの後から真中までです。
5  0  15|0 11 
6  1  13|1 9 
7  2  11| 
8  3  9 |2 7 

0から始ってN回繰り返しているのがわかります
つまり空欄の数の式は0〜N-1まで行うということになります
黒の数はN*4-1〜(-2づつ減って)〜N*4-1-2*(N-1)となり最後のを整理すると4N-2N-1+2=2N+1となります。
これで条件がそろいました
書いてみると…
for(a=0;a<N;a++){
 for(b=0;b<a;b++)//空欄
  printf(" ");
 for(c=0;c<N*4-1-2*a;c++)
  printf("*");
 printf("\n");
}
aを使ったので最後の式は使いませんでした。残念ですがNを使うと値が変わってしまいますしね〜
これで折り返しまでは書けるはずです…試してないですが…眠いので今日はこれで
============
間違えたので訂正 編集済み


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

Name: パコネコ  ..入門者(3,868ポイント)   Date: 2010/06/30(水) 12:59   No:55562     
Title: Re:ピラミットアート    
きのう書いたものをプログラムで書いてみますね
#include<stado.h>
void main(void){
 int a,b,c;
 int n;

 scanf("%d",&n);
//一つ目
 for(a=0;a<n;a++){ 
  for(b=0;b<n*2-1;b++) 
   printf(" ");//空欄の描写 
  for(c=0;c<a*2+1;c++) 
   printf("*");//マークの描写 
  printf("\n");//次の行へ 
 }
//2つ目
 for(a=0;a<n;a++){ 
  for(b=0;b<a;b++)//空欄 
   printf(" "); 
  for(c=0;c<n*4-1-2*a;c++) 
   printf("*"); 
  printf("\n"); 
 }
//ここまでで半分


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

Name: パコネコ  ..入門者(3,890ポイント)   Date: 2010/06/30(水) 13:06   No:55564     
Title: Re:ピラミットアート    
なんかいっぱい書いてますが間違えてたみたいです
後で修復したのを書きます


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

Name: パコネコ  ..入門者(4,122ポイント)   Date: 2010/06/30(水) 13:11   No:55565     
Title: Re:ピラミットアート    
#include<stdio.h> 
void main(void){
    int a,b,c; 
    int n; 

    scanf("%d",&n);
//一つ目
    for(a=0;a<n;a++){
        for(b=0;b<n*2-1-a;b++)
            printf(" ");//空欄の描写
        for(c=0;c<a*2+1;c++)
            printf("*");//マークの描写
        printf("\n");//次の行へ
    }
//2つ目
    for(a=0;a<n;a++){
        for(b=0;b<a;b++)//空欄
            printf(" ");
        for(c=0;c<n*4-1-2*a;c++)
            printf("*");
        printf("\n");
    }
}
ここで半分できました。
bのループの中に‐aを書き忘れていました。


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

Name: パコネコ  ..入門者(4,384ポイント)   Date: 2010/06/30(水) 13:24   No:55569     
Title: Re:ピラミットアート    
出来上がりです
#include<stdio.h> 
void main(void){
    int a,b,c; 
    int n; 

    scanf("%d",&n);
//一つ目
    for(a=0;a<n;a++){
        for(b=0;b<n*2-1-a;b++)
            printf(" ");//空欄の描写
        for(c=0;c<a*2+1;c++)
            printf("*");//マークの描写
        printf("\n");//次の行へ
    }
//2つ目
    for(a=0;a<n;a++){
        for(b=0;b<a;b++)//空欄
            printf(" ");
        for(c=0;c<n*4-1-2*a;c++)
            printf("*");
        printf("\n");
    }
//3つ目
    for(a=n-2;0<=a;a--){
        for(b=a;0<b;b--)
            printf(" ");
        for(c=n*4-1-2*a;0<c;c--)
            printf("*");
        printf("\n");
    }
//4つ目
    for(a=n-1;0<=a;a--){
        for(b=n*2-1-a;0<b;b--)
            printf(" ");//空欄の描写
        for(c=a*2+1;0<c;c--)
            printf("*");//マークの描写
        printf("\n");//次の行へ
    }
}
いくつか試しましたが3や4や5はちゃんと1辺の長さが同じになりました。
1週間もかかってしまいましたがはかるさんできましたよー


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

Name: パコネコ  ..入門者(4,255ポイント)   Date: 2010/06/30(水) 13:58   No:55580     
Title: Re:ピラミットアート    
少し改良です
do{
    scanf("%d",&n);
}while(n<2);
初めの入力のときに上の状態にしないと変な形になることがあるので…
たとえば1や0なんて打ち込まれても困ります。1辺が1の☆なんて無理です。
マイナスとかもです。
まあ、1はともかく0以下は描写されないと思いますが…


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

Name: シエル  ..上級者(18,116ポイント)   Date: 2010/06/30(水) 14:02   No:55581     
Title: Re:ピラミットアート    
このスレ立てた主さんは何処へ…

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

Name: パコネコ  ..入門者(4,267ポイント)   Date: 2010/06/30(水) 14:09   No:55583     
Title: Re:ピラミットアート    
1週間ぐらい見かけてないな〜

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

Name: dic  ..比類無きプログラマー(81,501ポイント)   Date: 2010/06/30(水) 16:56   No:55599     
Title: Re:ピラミットアート    
この人か
匿名許すとこうなるのよね


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

Name: パコネコ  ..入門者(4,285ポイント)   Date: 2010/06/30(水) 19:58   No:55604     
Title: Re:ピラミットアート    
だれか匿名で書いてましたっけ?

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

Name: ookami  ..プログラマー(30,386ポイント)   Date: 2010/06/30(水) 20:47   No:55609     
Title: Re:ピラミットアート    
すごい… 完成してる。

スレを見て分かる通り、私がほかるさんをキレさせてしまった張本人です。なんというか、すいませんでした。


それにしても、まさに「リーダー不在の開発」ですねw 私はこういうのをゲーム制作に応用できないかと… まぁ規模も違いますしね。


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

Name: パコネコ  ..入門者(4,435ポイント)   Date: 2010/06/30(水) 22:17   No:55619     
Title: Re:ピラミットアート    
☆一つで大仕事な、きもしますけど…
一番時間かかったのって星の形の把握ですしね。
>こういうのをゲーム制作に応用…
こういうのとはみんなで考えることですか?
それともプログラム自体ですか?

こういうプログラムって楽しいですよね…考えるの


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

Name: ookami  ..プログラマー(30,443ポイント)   Date: 2010/07/01(木) 07:41   No:55644     
Title: Re:ピラミットアート    
> みんなで考えることですか?それともプログラム自体ですか?

両方ですね。なんというか、言い出しっぺさえ居なくなっているのに、仕様が決まり、実装、コードレビューまで、何の取り決めもなく皆でできちゃうっていう。

そのノリで、不特定多数でゲームを作る…いやいやさすがに規模が違いすぎるから難しいか…など、その辺でモヨモヨしておりまして。

オープンソースでゲーム作れるのかっていう事ですね。

また煮詰まったらスレ立てさせてもらいますので、ご意見いただければと思っています。


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

Name: パコネコ  ..入門者(4,483ポイント)   Date: 2010/07/01(木) 12:41   No:55651     
Title: Re:ピラミットアート    
楽しそうですね
オープンソースってなんだっけ?とか思っちゃうワイですが、
わかるものがあれば書き込みしますね。


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

Name: パコネコ  ..入門者(4,278ポイント)   Date: 2010/07/01(木) 22:53   No:55690     
Title: Re:ピラミットアート    
> 正方形、三角形、逆三角形、三角旗、ダイヤ型、六角形、星形 
まだ六角形と三角旗ができてなかったので考えようと思います。・・・実は暇なだけですけど…
まずは六角形から…
   ■■■
  ■■■■■
 ■■■■■■■
 ■■■■■■■
 ■■■■■■■
  ■■■■■
   ■■■
あれ?八角形?
もう一度
  ■
 ■■■
■■■■■
■■■■■
■■■■■
 ■■■
  ■
これなら六角形。(^^♪
また表にまとめたいと思います。
行 空 黒
1 2 1
2 1 3
3 0 5
4 0 5
5 0 5
6 1 3
7 2 1
結構簡単そう…


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

Name: パコネコ  ..入門者(4,676ポイント)   Date: 2010/07/01(木) 23:15   No:55694     
Title: Re:ピラミットアート    
念のため4のときも…(さっきのは3のとき)
         空 黒
   ■     3 1
  ■■■    2 3
 ■■■■■   1 5
■■■■■■■  0 7
■■■■■■■  0 7
■■■■■■■  0 7
■■■■■■■  0 7
 ■■■■■   1 5
  ■■■    2 3
   ■     3 1

表を合わせると

行  空    黒
      |3    |1
1 2|2 1|3 
2 1|1 3|5 
3 0|0 5|7 
4 0|0 5|7 
5 0|0 5|7
      |0    |7
6 1|1 3|5 
7 2|2 1|3
      |3    |1
こんな感じです
空欄の一つ目は「n-1」のようです。
その後「n-1」回のループの後空欄が0になるのが、n回あります。
そして「n-1」回数値が増えていくループが行われて空欄はできます。多分
次に黒ですが最初は「1」で固定でしょう。
改行ごとに2づつ増えてますね。
これを「n-1」回行います。
次に空欄が「0」のとき「n*2-1」でいいと思います。
後は反対の作業なので…次でプログラム書きます


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

Name: パコネコ  ..入門者(4,950ポイント)   Date: 2010/07/01(木) 23:34   No:55695     
Title: Re:ピラミットアート    
なんか怒られそうな気もしてきた…(横の名前のところがパコネコばっかりになってるし)
#include<stdio.h>
void main(void){
    int a,b,c,n;
    do{
        scanf("%d",&n);
    }while(n<2);
    for(a=0;a<n-1;a++){
        for(b=0;b<n-1-a;b++)
            printf(" ");
        for(c=0;c<1+a*2;c++)
            printf("*");
        printf("\n");
    }
    for(a=0;a<n;a++){
        for(b=0;b<n*2-1;b++)
            printf("*");
        printf("\n");
    }
    for(a=1;a<n;a++){
        for(b=0;b<a;b++)
            printf(" ");
        for(c=0;c<n*2-1-2*a;c++)
            printf("*");
        printf("\n");
    }
}
これで3と4は確認しました。
後は三角旗で終わりですね。


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

Name: パコネコ  ..初心者(5,042ポイント)   Date: 2010/07/01(木) 23:39   No:55696     
Title: Re:ピラミットアート    
ところで三角旗ってなんですか?

■■
■■■
■■■■
これですか?
それとも

■■
■■■
■■■■
■■■
■■

こんなの?
よくわかりませんだれかわかりますか?


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

Name: 組木紙織  ..比類無きプログラマー(87,914ポイント)   Date: 2010/07/01(木) 23:51   No:55697     
Title: Re:ピラミットアート    
下だと思います。

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

Name: パコネコ  ..初心者(5,082ポイント)   Date: 2010/07/02(金) 19:49   No:55766     
Title: Re:ピラミットアート    
考えてみたら、下は1辺の大きさが変わらないの条件から外れてますね…
形状がわからないんじゃ作れない…だれかわかりますか?


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



Name: すなはら そら  ..ぴよぴよ(263ポイント)   Date: 2010/06/30(水) 16:35   No:55597       
Title: キャラ(画像)の移動速度について    
今、C言語のゲーム編を見ながら”C++”でやっています。
見本を見ながら少しアレンジ(少しいじってみる程度)してみながらしています。
キャラを移動させるのがゆっくりすぎでそれを変えようとしたのですが、できません。
速さのタグみたいなのもわからないので、どうしたらいいものかと迷っています。
そのままですが、貼り付けさせていただきました。
教えてください。おねがいします。

#include "DxLib.h"
 
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow ){
        ChangeWindowMode( TRUE ) ;          //ウィンドウモードに変更
        if( DxLib_Init() == -1 ) return -1; // DXライブラリ初期化処理 エラーが起きたら終了 
 
        int i ;
        for(i=0;i<300;i++){
                 LoadGraphScreen( i , 0 , "char.png" , TRUE ); //画像を描画
                 Sleep(10);                                     //10ミリ秒待つ
        }
 
        WaitKey();              // 何かキー入力があるまで待つ
        DxLib_End() ;           // DXライブラリ使用の終了処理
        return 0 ;              // ソフトの終了
編集済み


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


Name: めるぽん  ..ぴよぴよ(893ポイント)   Date: 2010/06/30(水) 17:19   No:55600     
Title: Re:キャラ(画像)の移動速度について    
LoadGraphScreen内のiをi*2にすれば、2倍の速度で2倍の距離だけ動きそうですね

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

Name: パコネコ  ..入門者(4,345ポイント)   Date: 2010/06/30(水) 20:23   No:55607     
Title: Re:キャラ(画像)の移動速度について    
/*
        int i ; 
        for(i=0;i<300;i++){ 
                 LoadGraphScreen( i , 0 , "char.png" , TRUE ); //画像を描画 
                 Sleep(10);                                     //10ミリ秒待つ 
        }
*/
細かいままですばやくするなら待ち時間( sleep(ここ) )を小さくすると行けそうです。
単純に早くしたいなら(少し雑になるけど大きさの半分くらいまでなら…)for(i=0;i<300;ここ)を大きくするんです。たとえばi+=2とかi+=5とかですね〜
どうですか?


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

Name: すなはら そら  ..ぴよぴよ(298ポイント)   Date: 2010/07/02(金) 18:13   No:55758 解決!     
Title: Re:キャラ(画像)の移動速度について    
いけました。
ありがとうございます。(少し遅くなってすいません。
これから、いろいろ試行錯誤していきます。


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

Name: ROM  ..入門者(2,708ポイント)   Date: 2010/07/02(金) 18:39   No:55760     
Title: Re:キャラ(画像)の移動速度について    
基本的にSleepで制御してはいけません

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



Name: かける  ..ぴよぴよ(406ポイント)   Date: 2010/06/30(水) 21:58   No:55612       
Title: VisualC++    
今日2010年版をインストールしたのですが、
ファイル読み込みをしたいのですが、読み込みたいファイルはどこに保存したらよいのですか?

また、C++の文法でCと違う所ってどんなところですか?


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


Name: シエル  ..上級者(18,623ポイント)   Date: 2010/06/30(水) 22:02   No:55613     
Title: Re:VisualC++    
画像とかのファイルのことですか?
どこに保存しても、読み込み時のファイルパスさえ間違っていなかったら、どこで保存してもいいです。

>また、C++の文法でCと違う所ってどんなところですか?
→文法自体は大きく変わってないかと。色々な機能が追加された感じです。
→すいません。あまりC++は詳しくありません。


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

Name: かける  ..ぴよぴよ(448ポイント)   Date: 2010/06/30(水) 22:08   No:55614     
Title: Re:VisualC++    
ファイルポインタで読み込みたいのですが・・・
パスとは??


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

Name: dic  ..比類無きプログラマー(81,802ポイント)   Date: 2010/06/30(水) 22:15   No:55618     
Title: Re:VisualC++    
パスとは
C:\\hoge.txt
のように、ファイルの位置を記述したものです
C:\\program files\microsfot\visualc2010\common\hoge.avi
C:\\windows\system\hoge.ico

画像の赤の部分のことです


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

Name: シエル  ..上級者(18,654ポイント)   Date: 2010/06/30(水) 22:19   No:55620     
Title: Re:VisualC++    
デバッグから実行する場合は、プロジェクトファイルと同じ場所に保存すればいいです。
その場合、fopen("test.txt","r")のようになります。

プロジェクトファイルと同じ階層にあるフォルダ「ABC」という名前の中のtest.txtに
アクセスする場合は、fopen("./ABC/test.txt","r")でいいです。


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

Name: かける  ..ぴよぴよ(541ポイント)   Date: 2010/06/30(水) 22:22   No:55622     
Title: Re:VisualC++    
パスはわかりました!!


ちなみにこのファイルを
fopenで読み込みたいのですがどのようにしたらよいですか?

FILE * fp;
fp = fopen("station_japan1.txt", "r");

としたいのですが


どこに保存したら良いですか?
 編集済み


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

Name: dic  ..比類無きプログラマー(82,057ポイント)   Date: 2010/07/01(木) 07:29   No:55643     
Title: Re:VisualC++    
// load.cpp : コンソール アプリケーションのエントリ ポイントを定義します。
//

#include "stdafx.h"


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

    //    ファイルのオープン
    fp = fopen( "station_japan1.txt", "rt" );

    //    ファイルから1行読み込む
    char    buf[80];
    fgets( buf, 80, fp );

    //    読み込んだ内容を出力する
    printf( "%s", buf );

    //    ファイルをクローズする
    fclose(fp);

    return 0;
}


テキストを保存する場所は
たとえば画像のように load ソリューションだったら
load\\load\\station_japan1.txt
となります


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

Name: かける  ..ぴよぴよ(562ポイント)   Date: 2010/07/01(木) 10:27   No:55645     
Title: Re:VisualC++    
それはC++の文法ですか?

Cの文法では表現できますか?


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

Name: toyo  ..熟練のプログラマー(50,484ポイント)   Date: 2010/07/01(木) 11:04   No:55646     
Title: Re:VisualC++    
エントリポイントの関数名はVisual C++独自の物ですが文法的にはCで書かれていますね


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

Name: toyo  ..熟練のプログラマー(50,540ポイント)   Date: 2010/07/01(木) 11:07   No:55647     
Title: Re:VisualC++    
間違えました
    char    buf[80];
の宣言位置がCではありませんね
これを
    FILE    *fp;
の前か後に移動したらいいです


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

Name: dic  ..比類無きプログラマー(82,095ポイント)   Date: 2010/07/02(金) 17:17   No:55754     
Title: Re:VisualC++    
>それはC++の文法ですか? 
わかりません

>Cの文法では表現できますか? 
わかりません


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

Name: たかぎ [URL]  ..ハッカー(213,262ポイント)   Date: 2010/07/02(金) 17:25   No:55756     
Title: Re:VisualC++    
> それはC++の文法ですか? 

load.cppとのことですし、//で始まるコメントやブロック途中での宣言など、C++の文法ですね。

> Cの文法では表現できますか? 

できます。


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



Name: S  ..ぴよぴよ(106ポイント)   Date: 2010/07/02(金) 12:03   No:55722       
Title: 無題    
サイコロコロコロを作っているのですが、includeファイルが開けません。"hmm.as"no such for all directoryというエラーが出てきます。

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


Name: ookami  ..プログラマー(30,698ポイント)   Date: 2010/07/02(金) 12:13   No:55726     
Title: Re:無題    
わかりませんが、

そのファイルはありますか?
フォルダは合っていますか?

asファイルというとHSPですか...?

また、質問に際して利用規約も参考にされるとよいでしょう。
http://dixq.net/board/board.html


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

Name:  ..ぴよぴよ(141ポイント)   Date: 2010/07/02(金) 12:18   No:55727     
Title: Re:無題    
ファイルは一応ありますね。

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

Name: シエル  ..上級者(19,773ポイント)   Date: 2010/07/02(金) 12:21   No:55729     
Title: Re:無題    
利用規約を読み直して、具体的に質問しなおしてください。

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

Name: S  ..ぴよぴよ(214ポイント)   Date: 2010/07/02(金) 12:26   No:55731     
Title: Re:無題    
プログラムを実行したいのですが、includeファイルを開けるようにしたいのですが、あと、HSPってなんですか?Cの知識は入門くらいですかね。

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

Name: 組木紙織  ..比類無きプログラマー(87,931ポイント)   Date: 2010/07/02(金) 13:17   No:55735     
Title: Re:無題    
>Cの知識は入門くらいですかね。
入門ぐらいだとどのくらいか分からないのですが、、、

少なくとも添付されたプログラムはC/C++ではありません。


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

Name: ookami  ..プログラマー(30,792ポイント)   Date: 2010/07/02(金) 13:22   No:55736     
Title: Re:無題    
「hmm.as」で検索すると「HSPプラグイン」とか出てくるので、やっぱりHSPだと思うのですが。

このあたりは参考になりますでしょうか?
http://hsp.tv/play/pforum.php?mode=pastwch&num=3058


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

Name: toyo  ..熟練のプログラマー(51,154ポイント)   Date: 2010/07/02(金) 14:23   No:55744     
Title: Re:無題    
http://hsp.tv/make/downlist.html
から
Hot Soup Processor ver2.61 (フルセット・インストーラー版)
hsp261inst.exe
をダウンロード、インストール
http://hsp.tv/make/tool3.html
から
HSP MULTIMEDIA( hmm.dll ) 1.42
をダウンロード、dllを先ほどインストールしたフォルダにコピー
でエラーなくコンパイルできました
実行は出来ませんでした

Ver3以上だとコンパイルエラーになります


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

Name: Dixq (管理人)  ..ウィザード(1,229,256ポイント)   Date: 2010/07/02(金) 15:47   No:55750     
Title: Re:無題    
サイコロコロコロって、うちのサイトのゲーム紹介で書いているビシバシチャンプを真似たゲームの事ですか?

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



Name: ぬるぽ  ..ぴよぴよ(959ポイント)   Date: 2010/07/02(金) 11:20   No:55721       
Title: ウインドウモード時、右上の拡大ボタンを有効にする方法    
龍神録を改造して遊ばさせて貰ってます。
単発な質問なのですが、DXライブラリでウインドウモード時、
ウインドウのシステムバー右上の拡大ボタンはデフォルトで使えないのですが
これを有効にする関数、またはプログラムがあれば知りたいのですが
ご存知の方がいましたら教えてください。
よろしくお願いします。


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


Name: へろり  ..上級者(16,078ポイント)   Date: 2010/07/02(金) 12:05   No:55723     
Title: Re:ウインドウモード時、右上の拡大ボタンを有効にする方法    
DXライブラリはさっっぱりわかりませんが。

とりあえず、ウィンドウにWS_SYSMENU と WS_MAXIMIZEBOX の2つのスタイルを追加すればいいんじゃないですか?

調べてみたら、GetMainWindowHandle()関数でウィンドウのハンドルを取れるみたいです。


HWND hwnd = GetMainWindowHandle();
DWORD style = GetWindowLong(hwnd, GWL_STYLE);
SetWindowLong(hwnd, GWL_STYLE, style | WS_SYSMENU | WS_MAXIMIZEBOX);

とでもすればいけそうです。


DXライブラリは持ってませんから試してはいませんが。


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

Name: ookami  ..プログラマー(30,636ポイント)   Date: 2010/07/02(金) 12:11   No:55725     
Title: Re:ウインドウモード時、右上の拡大ボタンを有効にする方法    
こんなんありました。Alt+Enterとセットですが、専用の関数が用意されているようです。
http://hpcgi2.nifty.com/natupaji/bbs/patio.cgi?mode=view&no=1096
参考になりますでしょうか。


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

Name: ぬるぽ  ..かけだし(1,483ポイント)   Date: 2010/07/02(金) 13:23   No:55737     
Title: Re:ウインドウモード時、右上の拡大ボタンを有効にする方法    
返答ありがとうございます。
ookamiさんのURLより、参考にして調べてみると
SetUseASyncChangeWindowModeFunctionを使えば良いことが分かり、助かりました。

本当に出来るかどうか龍神録50章を利用して
簡単に追加して実装してみたのですが、

main.cpp内に以下を追加

//画面モード変更時に呼ばれるコールバック関数
void ChangeCallback( void *Data ){    //←追加
    load();            //←追加
}

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

    // 最大化ボタンを有効にする
    SetUseASyncChangeWindowModeFunction( TRUE, ChangeCallback, NULL );    //←追加

    if(DxLib_Init() == -1 || SetDrawScreen( DX_SCREEN_BACK )!=0) return -1;//初期化と裏画面化

ウインドウモード時にAlt+Enter又は、拡大ボタンを押す、
フルスクリーン時にAlt+Enterを押すと、描画はされることはされるのですが、
画面がちらつくようになる+処理がやや遅くなる
という現象が起こるのですが、これは何が原因で、どうすれば直るのでしょうか?
分かる方がいましたら教えてください。よろしくお願いします。
念のため50章+追加分のプログラムを含んだものをうpします。

http://www.dotup.org/uploda/www.dotup.org1000782.rar.html
パス:sage

追記:誤字修正 編集済み


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

Name: toyo  ..熟練のプログラマー(50,997ポイント)   Date: 2010/07/02(金) 13:44   No:55739     
Title: Re:ウインドウモード時、右上の拡大ボタンを有効にする方法    
私のVistaでは画面真っ黒になって動きませんでした
DXライブラリが古いバージョンなのが原因のようです
最新のライブラリに変更してビルドしなおしたら動作しましたが私の環境ではちらつきや遅くなる現象は確認できませんでした


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

Name: ookami  ..プログラマー(30,950ポイント)   Date: 2010/07/02(金) 13:44   No:55740     
Title: Re:ウインドウモード時、右上の拡大ボタンを有効にする方法    
初期化時だけでなく、
ChangeCallback関数の中にも、
SetDrawScreen( DX_SCREEN_BACK )
を追加するとどうでしょうか?


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

Name: ぬるぽ  ..かけだし(1,825ポイント)   Date: 2010/07/02(金) 13:55   No:55741 解決!     
Title: Re:ウインドウモード時、右上の拡大ボタンを有効にする方法    
返答ありがとうございます。
ookamiさんのおっしゃる通りに試してみたところ
正常な動作が確認できました。ありがとうございます。
原因は何だろうと調べてみたところ
以下、引用
http://hpcgi2.nifty.com/natupaji/bbs/patio.cgi?mode=view&no=1577

>以下の設定系関数は画面の最大化<最小化を切り替えると再設定を行う必要があります
 >SetDrawArea, SetDrawScreen, SetDrawMode, SetDrawBlendMode, SetDrawBright
>うさぎさんの事象の場合、画面モードの変更をしたためSetDrawScreenの設定が
>DX_SCREEN_BACKからDX_SCREEN_FRONTに戻り、ScreenFlip関数による描画が
>2フレームに1回になってしまったため、画面が点滅しているように見えたのだと思います。

ということらしいです。非常に助かりました。
アドバイスをくれた方々、ありがとうございました。


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



Name: ちょん  ..ぴよぴよ(80ポイント)   Date: 2010/07/02(金) 00:41   No:55700       
Title: ログファイルについて    
初めまして。ちょんと申します。
現在ログ出力関数を作成しているのですが、一つ難点がありまして皆さんにお聞きしたいと思います。

環境はXP, bcc5.5になります。
int WriteLog(const char *format, ...)
{
    FILE         *fp;
    va_list     list;
    char        formatStr[32];

    if ((fp = fopen("Log.txt", "a")) == NULL) {
        return -1;
    }
    
      va_start(list, format);
      
    SetDateTimeFormat(formatStr);
    fprintf(fp, formatStr);
      vfprintf(fp, format, list);
      
      va_end(list);
      fclose(fp);

      return 0;
}


exeを実行するとプログラムに沿ってログを出力するのですが、一度実行が終わりログが溜まった後、
もう一度実行すると、そのまま続けて次の実行したプログラムのログが出力されてしまうので大変見づらいので
改行を出力したいのですが、なかなかいいアイディアが思いつきません。。。
グローバル変数で回数を記憶することも考えたのですが、どうもごり押しな気がします。。。
何か良い方法はないでしょうか?

<例>分かりにくくてすみません。
最初のログ
最初のログ
最初のログ
次のログ
次のログ
次のログ
今現在は上記のようになってしまいます。それを
最初のログ
最初のログ
最初のログ

次のログ
次のログ
次のログ
こんな感じにしたいです。

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


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


Name: Justy  ..伝説なるハッカー(552,413ポイント)   Date: 2010/07/02(金) 00:51   No:55701     
Title: Re:ログファイルについて    
 もう一度実行する際にログファイルが既にあったら(既に書き込まれていたら)改行を出力、でいいのでは?

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

Name: めるぽん  ..入門者(2,535ポイント)   Date: 2010/07/02(金) 00:58   No:55702     
Title: Re:ログファイルについて    
int WriteLog(const char *format, ...)
{
    static bool written = false;
    ...
    if (!wrriten)
    {
        // ここら辺に改行とかを書き込む
        wrriten = true;
    }
    ...
}

とすれば、アプリケーション実行のたびに最初の WriteLog 呼び出しだけ特有の操作ができそうです。


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

Name: フリオ  ..プログラマー(33,434ポイント)   Date: 2010/07/02(金) 01:23   No:55704     
Title: Re:ログファイルについて    
 
 プログラムを終了するときに、改行のみの行をログとして出力する
と言うのは、だめでしょうか。
 


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

Name: ちょん  ..ぴよぴよ(405ポイント)   Date: 2010/07/02(金) 01:52   No:55705     
Title: Re:ログファイルについて    
皆さんありがとうございます。
>Justyさん
>既に書き込まれていたら
今回、ログ出力の度にクローズしているので、既に書きこまれていたらという条件ですと、
いつの書き込みが最後の書き込みか把握できず、出来ないような気がします。。。
私の考え違いでしたらすみません。

>ぬるぽんさん
サンプルありがとうございます。
上手く動作したのですが、何故か余計な部分で改行が入ってしまいます。
実は自分がグローバルでフラグを立ててやっていた時もそのような状況になりまして、
今だ原因がわからないままです。

>フリオさん
申し遅れてすみません。、このプログラムは終了のタイミングが決まっていないため、
その方法ですと出来ないです。提示を忘れましてすみません。

やはり他の部分のバグなのでしょうか。。。
プログラムをアップしてみたいと思いますのでよろしければ見ていただけないでしょうか?


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

Name: ちょん  ..ぴよぴよ(567ポイント)   Date: 2010/07/02(金) 02:05   No:55706     
Title: Re:ログファイルについて    
http://www1.axfc.net/uploader/Sc/so/129629.zip&key=tyon
アップしてみました。
キーワードはtyonになります。

使い方としましてはInteg.batを叩くとコンパイルされますので、
binフォルダにあるexeを起動して下さい。

コマンドとしましてはsever.exe client.exeを起動した後にclientで7を入力して接続した後、
どのコマンドでもいいので計算を行って下さい。
その状態でログを見ると何故かserver.c   [143] SRV:select() Startの次の行が改行になってしまっています。
これは何故なんでしょうか?

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


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

Name: めるぽん  ..入門者(2,824ポイント)   Date: 2010/07/02(金) 02:46   No:55707     
Title: Re:ログファイルについて    
>server.c   [143] SRV:select() Start の次の行が改行になってしまっています。 
改行されないのが問題じゃなかったんですか?
> 上手く動作したのですが、何故か余計な部分で改行が入ってしまいます。 
という部分は入っていないみたいですし。


コンパイルと実行はしていないので予想ですけど、もしかして
>server.c   [143] SRV:select() Start
の後ろに表示されるのは client.c のログだったりしませんか?
そうだとすれば、server と client は別のアプリケーションだから
グローバル変数が共有されないために起こっているんじゃないかなと思います。


その場合はserverとclientで別のファイルにログを出すか、
serverやclientの起動と終了のログを確実に書き出すようにすればよさそうです。


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

Name: めるぽん  ..入門者(2,839ポイント)   Date: 2010/07/02(金) 03:04   No:55708     
Title: Re:ログファイルについて    
あ、client.c じゃなくて(client.c から呼び出された)socketLib.cのログですかね。

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

Name: ちょん  ..ぴよぴよ(640ポイント)   Date: 2010/07/02(金) 03:17   No:55709     
Title: Re:ログファイルについて    
 >server.c   [143] SRV:select() Start の次の行が改行になってしまっています。 
改行されないのが問題じゃなかったんですか?
> 上手く動作したのですが、何故か余計な部分で改行が入ってしまいます。 
という部分は入っていないみたいですし。 

すみません。ぬるぽんさんのコード反映させたものと違うものをアップしてしまいました。。。orz

clientにはログ出力の部分はないはずなんですが。。。う〜ん。。。
ちなみに今回はログを別ファイルに分けるのではなく統一して出したいと思っています。

今日は寝ます。
遅くまで付き合っていただきありがとうございました。


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

Name: ちょん  ..ぴよぴよ(853ポイント)   Date: 2010/07/02(金) 03:23   No:55710     
Title: Re:ログファイルについて    
あっ!
socketLib.cのほうでしたか。
ちょっとまだわからないですね。

ちなみにグローバル変数を使っていたときはexternで宣言してログファイルに定義して
いまして、その時はグローバル変数の値が保持されているのを確認しました。

にもかかわらず、ログのserver.c   [143] SRV:select() Start 
この部分の次の行が改行されてしまっていまして、何処に問題があるか検討がつかない状態です。

また明日に聞きに来たいと思います。
ありがとうございました。


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

Name: めるぽん  ..入門者(3,729ポイント)   Date: 2010/07/02(金) 03:48   No:55711     
Title: Re:ログファイルについて    
・サーバ側で使用しているグローバル変数
・クライアント側で使用しているグローバル変数
というのは別の扱いになります。
グローバル変数で共有されるのは、同じアプリケーションの異なる翻訳単位(.cpp)間のみです。
アプリケーション間で共有されたりはしません。

>グローバル変数の値が保持されている
というのは、サーバ側で使用しているグローバル変数を調べただけではないのでしょうか。
クライアント側で使用しているグローバル変数は書き換わっていない可能性が高そうです。

順番を追っていくとこんな感じですかね。
1.サーバ側でログファイルを出力する
  →サーバ側のグローバル変数 written が false なので、改行を出力して written を true にする
2.クライアント側で ConnectServer 等を呼び出し、その中でログファイルを出力する
  →クライアント側のグローバル変数 written が false なので、改行を出力して written を true にする


で、統一して書き出したい場合、そもそもサーバとクライアントの生存期間は同じではないでしょうから、
単に改行を出力するだけだと、それがサーバの起動なのかクライアントの起動なのか分からないと思うのですけれども・・・。

>最初のログ
>最初のログ
>最初のログ
>            // ここはサーバの起動?サーバの終了?クライアントの起動?クライアントの終了?
>次のログ
>次のログ
>次のログ 

なのでクライアントやサーバの起動と終了をちゃんと書いてやるのがいいのかなと思います。
main関数があるのですから、フリオさんのおっしゃるように
> プログラムを終了するときに、改行のみの行をログとして出力する
というのを起動時や終了時に行うのはできるのではないでしょうか。



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

Name: toyo  ..熟練のプログラマー(50,831ポイント)   Date: 2010/07/02(金) 07:42   No:55713     
Title: Re:ログファイルについて    
必ずサーバ側から起動すれば
    // winSockの初期化
    WriteLog("%s   [%d]  SRV:WSAStartup() Start\n", FILE, LINE);

    // winSockの初期化
    WriteLog("\n%s   [%d]  SRV:WSAStartup() Start\n", FILE, LINE);
にするだけですみそうですが


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

Name: ちょん  ..かけだし(1,302ポイント)   Date: 2010/07/02(金) 09:25   No:55716     
Title: Re:ログファイルについて    
おはようございます。

>ぬるぽんさん
>グローバル変数の値が保持されている
>というのは、サーバ側で使用しているグローバル変数を調べただけではないのでしょうか。
>クライアント側で使用しているグローバル変数は書き換わっていない可能性が高そうです。 
その通りでした。すみません勘違いしていました。
おっしゃる通りです。

>で、統一して書き出したい場合、そもそもサーバとクライアントの生存期間は同じではないでしょうから、
>単に改行を出力するだけだと、それがサーバの起動なのかクライアントの起動なのか分からないと思うのですけれども・・・。
そうですよね。。。

>プログラムを終了するときに、改行のみの行をログとして出力する
>というのを起動時や終了時に行うのはできるのではないでしょうか。 
フリオさんのこの考えでやってみます!

>toyoさん
それですと。ログは日付と時間も表していて、それをWriteLog関数の中でやっているので、
2010 07/02 Fri 09:15:17 
server.c   [36]  SRV:WSAStartup() Start
このようにファイル名より後ろだけ改行される形になってしまいます。



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

Name: ちょん  ..かけだし(1,385ポイント)   Date: 2010/07/02(金) 10:09   No:55717     
Title: Re:ログファイルについて    
アホな質問で申し訳ありません。
サーバー側のmainにfpを宣言したのですが、
何故かfpが未定義と怒られます。。。orz
int main(void)
{
    int     sockValue;
    FILE    *fp;

    if (InitSockServer(&sockValue)) {
        return -1;
    }
    
    GetRequestClient(sockValue);
    
    WriteLog(fp, "\n");

    return 0;
}

これって何が悪いのでしょうか?


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

Name: ちょん  ..かけだし(1,442ポイント)   Date: 2010/07/02(金) 10:27   No:55718     
Title: Re:ログファイルについて    
WriteLog関数の引数は違いますが、fpの宣言で怒られるのは違うような気が。。。
あと、この方法だと、サーバーをctr + cで終了したときに終了位置がわからないと思います。
この場合どうすればよいのでしょうか?


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

Name: へろり  ..上級者(15,937ポイント)   Date: 2010/07/02(金) 10:50   No:55719     
Title: Re:ログファイルについて    
>これって何が悪いのでしょうか?

stdio.h あたりがインクルードされてないからじゃないですか?

その翻訳単位からFILE 構造体の定義が見えてないからじゃないかと。


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

Name: ちょん  ..かけだし(1,486ポイント)   Date: 2010/07/02(金) 10:57   No:55720     
Title: Re:ログファイルについて    
stdio.hはmain関数のあるファイル上部にインクルードしているのに駄目なのです。。。orz

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

Name: ちょん  ..かけだし(1,566ポイント)   Date: 2010/07/02(金) 12:11   No:55724     
Title: Re:ログファイルについて    
fpが未定義と出るのはもしかしたらmakeが悪いのでしょうか。。。

普通に別ファイルでの宣言なら上手くいきますが、server.c client.cで
mainにfpを宣言すると未定義のエラーが出てしまいます。


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

Name: toyo  ..熟練のプログラマー(50,922ポイント)   Date: 2010/07/02(金) 12:31   No:55732     
Title: Re:ログファイルについて    
改行の仕様を確認したいのですが
サーバ起動
クライアント起動
クライアント終了
クライアント起動
サーバ終了
クライアント終了
この場合改行はどこに入れたいですか
最後だけ改行であれば他のプロセスが起動中か確認する必要があるのでちょっと面倒ですよね
プロセス起動時にファイル作成、終了時に削除とかして別のプロセスからはファイルの有無を確認するとか


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

Name: ちょん  ..かけだし(1,681ポイント)   Date: 2010/07/02(金) 12:53   No:55734     
Title: Re:ログファイルについて    
やはり最後だけいれたいですね。

>最後だけ改行であれば他のプロセスが起動中か確認する必要があるのでちょっと面倒ですよね
>プロセス起動時にファイル作成、終了時に削除とかして別のプロセスからはファイルの有無を確認するとか
そうなってくるとちょっと面倒ですよね。
でも最後だけ入れたいのでやりたいですね!
ただファイルポインタがシンボルエラーになる問題が解決しておらずまだ進めない状況です^^;


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



Name: たろう  ..プログラマー(30,084ポイント)   Date: 2010/07/01(木) 03:02   No:55639       
Title: 画面を消えなくする方法    
DirectXについて聞きたいのですが、ウィンドウを移動して画面の外側に出した後画面内に戻すと消えていて表示されなくなってしまうのですが(ウィンドウをはなすと元に戻ります。)、どうしたら画面の外に移動しても消えないようにするにはどうしたらよいでしょうか?よろしくお願いします。

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


Name: たろう  ..プログラマー(30,107ポイント)   Date: 2010/07/01(木) 03:03   No:55640     
Title: Re:画面を消えなくする方法    
環境はVC++2005です。よろしくお願いします。


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

Name: たろう  ..プログラマー(30,221ポイント)   Date: 2010/07/01(木) 23:07   No:55692     
Title: Re:画面を消えなくする方法    
どういう状態かと言いますとこういう状態になってしまします。
ウィンドウを掴んで外に出して内側に戻すとこういう状態になってしまいます。
後、サイズを変えようとすると画面が一旦消えてしまします。離すと画面は元に戻るのですが。どうしたらいいでしょうか?よろしくお願いします。


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

Name: たろう  ..プログラマー(30,228ポイント)   Date: 2010/07/02(金) 01:06   No:55703 解決!     
Title: Re:画面を消えなくする方法    
解決しました。

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

Name: シエル  ..上級者(19,710ポイント)   Date: 2010/07/02(金) 08:48   No:55714     
Title: Re:画面を消えなくする方法    
すいません。私も同じことが起こりました。

解決法を教えていただけますでしょうか? 編集済み


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

Name: シエル  ..上級者(19,725ポイント)   Date: 2010/07/02(金) 08:59   No:55715     
Title: Re:画面を消えなくする方法    
すいません。解決しましたw

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



Name: ぬるぽ  ..ぴよぴよ(490ポイント)   Date: 2010/07/01(木) 16:20   No:55654       
Title: 動く画像によって発生するギザギザ部分を綺麗に描画する方法    
こんにちは。名前を統一したいと思うのでこれからはこの名前で質問したいと思います。
龍神録を改造して遊ばさせて貰ってます。
困ったことがあったのですが、縦長の長方形の画像を
下記のプログラムで左右にぐらぐら動かすようにしてるのですが
左右に動くとき、画像にギザギザが発生して、綺麗に描画されません。

int DrawRotaGraphFdF( double xd, double yd, double ExRate, double Angle, int GrHandle, int TransFlag, int TurnFlag = FALSE  ) {
    return DrawRotaGraphF((float)xd+FX+dn.x,(float)yd+FY+dn.y,ExRate,Angle,GrHandle,TransFlag,TurnFlag);
}

        DrawRotaGraphFdF(X,Y,
                        1,
                        sin(PI2*(control.pause_cnt%240)/240)*0.2,    //240の値=降り速度、0.2の値=降り幅
                        img, TRUE);

念のため、バイリニア法を使ってみて描画もしてみたのですが
        SetDrawMode( DX_DRAWMODE_BILINEAR );
        DrawRotaGraphFdF(X,Y,
                        1,
                        sin(PI2*(control.pause_cnt%240)/240)*0.2,    //240の値=降り速度、0.2の値=降り幅
                        img, TRUE);
        SetDrawMode(DX_DRAWMODE_NEAREST);

変化はありませんでした。
ギザギザが消えて綺麗に描画する方法があれば知りたいのですが、
分かる方がいましたら教えてください。よろしくお願いします。


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


Name: ookami  ..プログラマー(30,546ポイント)   Date: 2010/07/01(木) 17:46   No:55656     
Title: Re:動く画像によって発生するギザギザ部分を綺麗に描画する方法    
ガッ。

ギザギザになるという画像を添付していただいた方がいいかもしれません。

あと、環境(グラボなど?)依存の可能性もありますから、
一式をアップしてもらって、いろいろな人に試してもらうというのも
よいかもしれません。

あと、「画像にギザギザ DXライブラリ」でググったところ、一番上のページがこちら...
http://hpcgi2.nifty.com/natupaji/bbs/patio.cgi?mode=past&no=899
(このdixqって...アッー)
話題が近そうかなと思ったのですが、参考になりますでしょうか?


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

Name: ぬるぽ  ..ぴよぴよ(830ポイント)   Date: 2010/07/01(木) 18:34   No:55658     
Title: Re:動く画像によって発生するギザギザ部分を綺麗に描画する方法    
返答ありがとうございます。
URLに関しては、あまり関係ないようでした。
画像は添付しました。
一式に関しては龍神録50章から即興で作ったのでうpろだにうpします。

※約一日で流れて消えますので注意
http://www.dotup.org/uploda/www.dotup.org999219.rar.html
パス:sage

画面中央にそのギザギザになる画像を配置して動かしてるので
調べて貰えないでしょうか?
プログラム部分はgraph.cppの一番下に書いてます。
よろしくお願いします。


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

Name: wing  ..中級者(12,151ポイント)   Date: 2010/07/01(木) 20:04   No:55662     
Title: Re:動く画像によって発生するギザギザ部分を綺麗に描画する方法    
グラデーションのことですね。

Dxライブラリーは初期設定が16ヒットなのでフルスクリーンでは
そのようになります。
Dxlib_Init()の前にSetGraphModeで32ビットにしてあげれば、うまくいくと思います。

SetGraphMode( 640 , 480 , 32 ) ;
if(DxLib_Init() == -1 || SetDrawScreen( DX_SCREEN_BACK )!=0) return -1;//初期化と裏画面化



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

Name: wing  ..中級者(12,168ポイント)   Date: 2010/07/01(木) 20:07   No:55663     
Title: Re:動く画像によって発生するギザギザ部分を綺麗に描画する方法    
16ヒット→16ビット。訂正します。

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

Name: toyo  ..熟練のプログラマー(50,733ポイント)   Date: 2010/07/01(木) 21:29   No:55678     
Title: Re:動く画像によって発生するギザギザ部分を綺麗に描画する方法    
グラデーションじゃなくてジャギーのことです
斜めの線が画像一番上のように階段状になる現象です
周りを中間色でぼやかさないといけないのですがその方法が知りたいということです


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

Name: wing  ..中級者(12,221ポイント)   Date: 2010/07/01(木) 22:27   No:55688     
Title: Re:動く画像によって発生するギザギザ部分を綺麗に描画する方法    
ぴよぴよだったからこういうことかもしれないと思って回答しました。
熟練のプログラマーだったら絶対回答しません。

余計な回答をして申し訳ありませんでした。


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

Name: Justy  ..伝説なるハッカー(552,443ポイント)   Date: 2010/07/01(木) 23:09   No:55693     
Title: Re:動く画像によって発生するギザギザ部分を綺麗に描画する方法    
 こんな感じでエッジ周辺にアンチエイリアスを入れてあげれば大夫マシになるのでは?


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

Name: ぬるぽ  ..ぴよぴよ(872ポイント)   Date: 2010/07/02(金) 06:54   No:55712 解決!     
Title: Re:動く画像によって発生するギザギザ部分を綺麗に描画する方法    
なるほど。画像に問題があったのですね。
Justyさんのおかげでなんとか綺麗に描画することができました。
他の方々もアドバイスありがとうございました。


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



Name:  ..ぴよぴよ(62ポイント)   Date: 2010/07/01(木) 20:59   No:55669       
Title: 異なる構造体を引数に使う方法    
こんばんは。初めて投稿させていただきます。
龍神録プログラミングの館を参考にして、STGを作っているのですが、
キャラクタの当り判定や、接触時の処理の部分が非常にごちゃごちゃした感じになってしまいました。
今のままでもあまり問題は無いのですが、後学のために質問させてください。

typedef struct{
double x,y,r;//座標と当り範囲
int a,b,c;
}ch_t;//自機

typedef struct{
double x,y,r;
int s,t;
}enemy_t;//敵

typedef struct{
double x,y,r;
int q,w,e;
}boss_t;

ch_t ch;
enemy_t enemy[20];
boss_t boss;

のように、構造体の型は異なるけど、同じ変数を持つ構造体変数が色々あるとき、
int hit_check(引数1,引数2){
  double x=(引数1のx)-(引数2のx);
  double y=(引数1のy)-(引数2のy);
  double r=(引数1のy)+(引数2のy);
  
  if (x*x+y*y<r*r) return 1;
  return 0;
}
のような関数を作り、
hit_check(&ch,&enemy[i])や、hit_check(&ch,&boss)
のように使いたいのですが、
このとき、引数のところはどのようにすればいいのでしょうか?
引数を、enemy[i].x,enemy[i].yのようにするのではなく、enemy[i]ならenemy[i]だけの指定ですむようにしたいと考えています。

また、構造体の中に構造体変数を入れて、shot[n].bullet[i].x,shot[n].bullet[i].y…
のようなとき、引数はどのようになるのでしょうか?


構造体のポインタを使えばいいと思ったのですが、様々な形の構造体が入る時の処理の仕方がよくわかりませんでした。
C/C++はまだ勉強し始めてから1,2ヶ月程度で、まったくの素人です。

VC2010、DXライブラリを使っています


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


Name: MNS  ..プログラマー(37,919ポイント)   Date: 2010/07/01(木) 21:37   No:55684     
Title: Re:異なる構造体を引数に使う方法    
C++にテンプレートという機能があります。

#include <stdio.h>

typedef struct{ 
    double x,y,r;
    int a,b,c; 
}A;

typedef struct{ 
    double x,y,r; 
    int s,t; 
}B;


template <typename S, typename T>
int hit_check(S s, T t){ 
    double x=s.x - t.x;
    double y=s.y - t.y; 
    double r=s.y + t.y; 
    if (x*x+y*y<r*r)
        return 1; 
    return 0; 


int main(){
    A a = {1, 1, 3, 0, 0, 0};
    B b = {2, 2, 3, 0, 0};
    printf("%d", hit_check(a, b));
    return 0;
}

※変数名や構造体名などは多少変わっています。
このようなコードになります。
私もテンプレートは使いこなせる域に達していないので、詳しく説明することはできませんが、
興味が有るようなら調べてみると良いと思います。使いこなせれば非常に強力な機能です。


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

Name: バグ  ..ハッカー(198,217ポイント)   Date: 2010/07/01(木) 21:46   No:55685     
Title: Re:異なる構造体を引数に使う方法    
構造体のメンバを構造体にするのはどうでしょうか?

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

Name: fatens  ..中級者(14,976ポイント)   Date: 2010/07/01(木) 21:53   No:55686     
Title: Re:異なる構造体を引数に使う方法    
>また、構造体の中に構造体変数を入れて、shot[n].bullet[i].x,shot[n].bullet[i].y…のようなとき、引数はどのようになるのでしょうか?
>構造体のポインタを使えばいいと思ったのですが、様々な形の構造体が入る時の処理の仕方がよくわかりませんでした。 

構造体の中に構造体変数を入れて、ポインタも使ってみました。

typedef struct {
    double x, y, r;
} xyr_t;

typedef struct {
    xyr_t xyr;
    ...
} ch_t;

typedef struct {
    xyr_t xyr;
    ...
} enemy_t;

ch_t ch;
enemy_t enemy[20];

int hit_check(xyr_t *obj1, xyr_t *obj2)
{
    double x = obj1->x - obj2->x;
    ...
}

などとして、

hit_check(&ch.xyr, &enemy[i].xyr);

のように呼び出します。



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

Name:  ..ぴよぴよ(186ポイント)   Date: 2010/07/02(金) 00:41   No:55699 解決!     
Title: Re:異なる構造体を引数に使う方法    
>>MNSさん
ちょっとぐぐっただけですがかなり便利な機能みたいですね
くわしく調べてみたいと思います

>>バグさん
>>fatensさん
構造体の中に構造体を入れる方法だと、上層(?)の構造体の型を考えなくてもいい、ってことですね。

参考になりました。ありがとうございます


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



Name: けえぼお  ..ぴよぴよ(303ポイント)   Date: 2010/06/27(日) 19:25   No:55414       
Title: std::stringで CString::GetBufferみたいなメソッドを使いたい…    
初めて質問させていただきます。どうぞよろしくおねがいします。

自分は最近STLを学び始めたばかりの初心者ですので、ごく簡単な質問かもしれませんが回答いただけると嬉しいです。

よくMFCのCString::GetBufferを使って下記のようにWindowsAPIの関数から文字列を取得するコードがありますが、
調べてもそれに当たるstd::stringのメソッドは見つかりませんでした。
どうして提供されていないのかすごく気になります。
    CString cStr;
    int iLength = ::GetWindowTextLength( GetSafeHwnd() );
    ::GetWindowText( GetSafeHwnd(), cStr.GetBuffer( iLength ), iLength + 1 );
    cStr.ReleaseBuffer();


Googleで調べてみたところ英語のサイト(http://bytes.com/topic/c/answers/805854-does-std-string-have-something-like-cstring-getbuffer)が出てきましたが、英語力の乏しい私にはどうも無理らしいということを理解するので精いっぱいでした。
どなたか教えていただけないでしょうか?


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


Name: たかぎ [URL]  ..ハッカー(211,763ポイント)   Date: 2010/06/27(日) 19:52   No:55419     
Title: Re:std::stringで CString::GetBufferみたいなメソッドを使いたい…    
> どうして提供されていないのかすごく気になります。 

CString::GetBufferのようなメンバ関数はカプセル化を破壊してしまうからです。


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

Name: けえぼお  ..ぴよぴよ(545ポイント)   Date: 2010/06/27(日) 21:37   No:55426     
Title: Re:std::stringで CString::GetBufferみたいなメソッドを使いたい…    
ためしに確かめて(?)みたところReleaseBufferする前は当然として、した後もGetBufferで取得したのを書き換えることができました。
とてもカプセル化できているとはいえないと思うのですが、
これはそもそもGetBufferのようなメソッドがあるのが間違いだということですか?

CStringW cWStr;
wchar_t *pwch = cWStr.GetBuffer( 30 );
wcscpy( pwch, L"あいうえお" );
MessageBox( cWStr );// あいうえお
cWStr.ReleaseBuffer();
wcscpy( pwch, L"かきくけこ" );
MessageBox( cWStr );// かきくけこ


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

Name: たかぎ [URL]  ..ハッカー(211,868ポイント)   Date: 2010/06/27(日) 23:53   No:55435     
Title: Re:std::stringで CString::GetBufferみたいなメソッドを使いたい…    
> これはそもそもGetBufferのようなメソッドがあるのが間違いだということですか? 

正しくカプセル化するという観点からはそうです。
もっとも、MFCはそもそもそんなことを目指したライブラリではありませんので、これはこれでよいのかもしれません。
ただし、同じ設計思想をstd::basic_stringに期待するのは無理があります。


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

Name: けえぼお  ..ぴよぴよ(847ポイント)   Date: 2010/06/28(月) 20:58   No:55478     
Title: Re:std::stringで CString::GetBufferみたいなメソッドを使いたい…    
丁寧に答えていただいてありがとうございます。
それと、なんだか質問ばかりで申し訳ないんですが、WindowsAPIから文字列を取得するときどうやるのが普通なのでしょうか?
あるいはたかぎさんはいつもどうやっていますか?

文字数が決まっている場合ならTCHAR ptch[xxxx];で十分でしょうが、
文字数が可変のときはいちいち
TCHAR ptch = new TCHAR[xxxx];
 ... 
delete[] ptch;
などと書くのは面倒な上、delete[]を呼び出すのを忘れてしまいそうです。


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

Name: たかぎ [URL]  ..ハッカー(212,077ポイント)   Date: 2010/06/28(月) 21:50   No:55482     
Title: Re:std::stringで CString::GetBufferみたいなメソッドを使いたい…    
MFCを使うのであれば、多重定義されたCWnd::GetWindowTextで直接CStringに読み込むのでしょうが、そうでない場合、

> 文字数が可変のときはいちいち 
> TCHAR ptch = new TCHAR[xxxx]; 
>  ...  
> delete[] ptch; 
> などと書くのは面倒な上、delete[]を呼び出すのを忘れてしまいそうです。

基本はこの方法だと思います。
一度、std::basic_string<TCHAR>用に多重定義したGetWindowText関数を作れば、面倒でもないでしょう。
文字列がそんなに長くないことがわかっているなら、_alloca等を使うという手もありますね。

まあ、次のような手もないわけではありませんが...

int length = GetWindowTextLength(hWnd);
std::basic_string<TCHAR> str(length + 1, _T('\0'));
GetWindowText(hWnd, &str[0], length + 1);
str.resize(length);



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

Name: YuO  ..熟練のプログラマー(47,045ポイント)   Date: 2010/06/28(月) 22:35   No:55484     
Title: Re:std::stringで CString::GetBufferみたいなメソッドを使いたい…    
std::vector<TCHAR>使うのが定石ですね。
一端resizeしてしまえば,ポインタは有効なままですし,
サイズがnのstd::vector<TCHAR> vについて,
&v[0] + i == &v[i] (0 <= i && i < n)が標準で定まっていますから (IS 14882:2003での追加)。
あとは,std::basic_string<TCHAR>::assignなどでbasic_stringに変換します。


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

Name: めるぽん  ..ぴよぴよ(868ポイント)   Date: 2010/06/29(火) 06:13   No:55488     
Title: Re:std::stringで CString::GetBufferみたいなメソッドを使いたい…    
> 文字数が可変のときはいちいち 
> TCHAR ptch = new TCHAR[xxxx]; 
>  ...  
> delete[] ptch; 
> などと書くのは面倒な上、delete[]を呼び出すのを忘れてしまいそうです。 
std::basic_string に格納しなくても構わないというのであれば、スコープアウトするときに delete[] してくれるクラスを作るか、もしくはそういったライブラリ(Boost の scoped_array など)を探してきて使うのがいいでしょうね。

そういうとき、自分ならこういうクラスを作ります(自分で作るとバグが増えるのであまりおすすめしませんが)。
struct tchar_scoped_string
{
    explicit tchar_scoped_string(std::size_t len)
        : p(new TCHAR[len + 1]), len(len)
    {
        p[len] = TCHAR();
    }
    ~tchar_scoped_string() { delete[] p; }
    TCHAR* get() const { return p; }
    TCHAR& operator[](std::size_t n) { assert(n < length()); return p[n]; }
    const TCHAR& operator[](std::size_t n) const { assert(n < length()); return p[n]; }
    std::size_t length() const { return len; }
    std::size_t bufsize() const { return len + 1; }

private:
    // コピー禁止
    tchar_scoped_string(const tchar_scoped_string&);
    void operator=(const tchar_scoped_string&);

private:
    TCHAR* const p;
    const std::size_t len;
};
{
    tchar_scoped_string str(GetWindowTextLength(hWnd));
    GetWindowText(hWnd, str.get(), str.bufsize());

    // str を使って適当に何かする
} // ここで str の内部で確保しているメモリが delete[] される
ただどうしても GetBuffer と ReleaseBuffer にしたい!というのであれば、たかぎさんが書かれているコードを分けてしまって以下のような関数にしてしまってもいいのかもしれません(微妙に GetBuffer や ReleaseBufer とは仕様が異なります)。 もちろん推奨はしませんが……。
TCHAR* GetBuffer(std::basic_string<TCHAR>& str, std::size_t n)
{
    str.resize(n + 1);
    return &str[0];
}
void ReleaseBuffer(std::basic_string<TCHAR>& str)
{
    str.resize(str.size() - 1);
}
std::basic_string<TCHAR> str;
int length = ::GetWindowTextLength( GetSafeHwnd() );
::GetWindowText( GetSafeHwnd(), GetBuffer( str, length ), length + 1 );
ReleaseBuffer(str);


あと _alloca を使う方法もありますが、ATL を使っていいような環境なら、_alloca よりは _ATL_SAFE_ALLOCA を使った方がいいですね。


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

Name: けえぼお  ..かけだし(1,869ポイント)   Date: 2010/07/01(木) 22:31   No:55689     
Title: Re:std::stringで CString::GetBufferみたいなメソッドを使いたい…    
3人も回答していただけるとは…
いろいろと勉強不足で、書かれている内容を調べながら理解していたらずいぶん時間がかかってしまいました。

>>std::basic_string<TCHAR> 用に多重定義したGetWindowText関数を作れば、面倒でもないでしょう。
初心者なりに頑張って考えてみました。
厚かましいようですが、直すべき点を指摘していただけないでしょうか。
int GetWindowText( HWND p_hWnd, std::basic_string<TCHAR> *p_pcStr )
{
    int iLength = GetWindowTextLength( p_hWnd );
    if( iLength <= 0 )
        return 0;
    TCHAR *ptch = new TCHAR[iLength + 1];
    if( GetWindowText( p_hWnd, ptch, iLength + 1 ) <= 0 )
        return 0;
    p_pcStr->assign( ptch, ptch + iLength );
    delete[] ptch;
    return iLength;
}
>>文字列がそんなに長くないことがわかっているなら、_alloca等を使うという手もありますね。  スタックに割り当てる関数なんてあったんですね。すごく便利です! >>std::vector<TCHAR>使うのが定石ですね。 &v[0]をポインタとして使っても良いだなんて驚きです。勉強になります!
std::vector<TCHAR> cVector;
std::basic_string<TCHAR> cStr;
int iLength = GetWindowTextLength( hWnd );
if( iLength <= 0 )
    return 0;
cVector.resize( GetWindowTextLength( hWnd ) + 1 );
if( GetWindowText( hWnd, &cVector[0], GetWindowTextLength( hWnd ) + 1 ) <= 0 )
    return 0;
cStr.assign( &cVector[0], &cVector[0] + GetWindowTextLength( hWnd ) );

↑Yuoさんはこんな感じでやるんでしょうか?

>>std::basic_string に格納しなくても構わないというのであれば、スコープアウトするときに delete[] してくれるクラスを作るか、もしくはそういったライブラリ (Boost の scoped_array など)を探してきて使うのがいいでしょうね。 
調べたらstd::auto_ptrが出てきました。でもdelete[]には対応してないんですね。やはり自作でしょうか。

>>そういうとき、自分ならこういうクラスを作ります
わざわざこんな長いコードを書いてくださってありがとうございます。
explicit、const、assert等色々勉強させて頂きました。

>>あと _alloca を使う方法もありますが、ATL を使っていいような環境なら、_alloca よりは _ATL_SAFE_ALLOCA を使った方がいいですね。 
_allocaには安全性面で弱点があったんですね。。。
便利なので使い倒そうと思っていたんですが、、、確保する領域が小さい時だけに限るようにします。

_allocaについて調べて疑問に思ったのですが、
_allocaで動的にスタックから領域を確保できるなら、どうしてCの配列は静的配列にする必要があったんでしょうか?
動的配列のほうが断然便利だと思うのですが。


ところで、皆さんが苦労して得た知識を素人が簡単に教えてもらうのはどうかと思えてきました。
このまま質問していていいんでしょうか?


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

Name: めるぽん  ..かけだし(2,381ポイント)   Date: 2010/07/01(木) 23:59   No:55698     
Title: Re:std::stringで CString::GetBufferみたいなメソッドを使いたい…    
いろいろ調べて頂けたみたいでなによりです。

// この関数の仕様が無いので、どういう動作をするのかが正しいのか分かりません。
// なので、基本は GetWindowText と同じ動作をしたい、という前提で書きます
int GetWindowText( HWND p_hWnd, std::basic_string<TCHAR> *p_pcStr )
{
    // p_pcStr が NULL の可能性があります
    // std::basic_string<TCHAR>& にするか、p_pcStr の NULL チェックを入れた方がいいかも

    // GetWindowTextLength は、失敗したときと、
    // キャプションが空の文字列になっているときも 0 を返すそうです。
    // 空の文字列は別に失敗でも何でもないので、
    // 0 が返されたときに p_pcStr が更新されていないのはまずいかも?
    int iLength = GetWindowTextLength( p_hWnd );
    if( iLength <= 0 )
        return 0;
    // ここで例外が投げられる可能性があります。
    // なので GetWindowText と動作が大きく異なってしまう可能性があります
    TCHAR *ptch = new TCHAR[iLength + 1];
    if( GetWindowText( p_hWnd, ptch, iLength + 1 ) <= 0 )
        return 0; // ここで return すると ptch がリークします

    // p_pcStrはここでしか変更していないのですが、
    // ドキュメントによると GetWindowText で失敗した場合、
    // ptch には空の文字列が渡されるそうです。
    // GetWindowText という名前にするのであれば、動作をあわせるため、失敗したときに
    // p_pcStr->clear() を呼び出した方がいいかもしれません。
    p_pcStr->assign( ptch, ptch + iLength );
    // あと、これは自分が書いたコードにも問題があったのですが、
    // ptch の有効な文字列は ptch + iLength まであるとは限らないので、
    // GetWindowText の戻り値を見て、ptch + result とする必要がありそうです。

    delete[] ptch;
    return iLength;
}
// 上記の指摘は結構厳しめに見ています。
// 実際 Windows でメモリが足りないなんてことはまず無いでしょうし、
// NULL の std::basic_string を渡す人もまずいないでしょう。
ということで、自分が作るならこんな感じになりますね
// 基本的には ::GetWindowText と同じ動作をします。
// 違いは、自動的に長さを計算して std::basic_string に設定することと、
// メモリが足りない場合に例外が投げられる可能性があることです。
// 例外が投げられた場合、str.size() は不定の大きさになります。
int GetWindowText(HWND hwnd, std::basic_string<TCHAR>& str)
{
    str.clear();
    int len = GetWindowTextLength(hwnd);
    //try
    //{
        str.resize(len + 1); // new は怖いので...
        int result = GetWindowText(hwnd, &str[0], str.size());
        str.resize(result);
    //}
    //catch (std::exception&) // std::bad_alloc と std::length_error を catch
    //{
    //    return 0;
    //}
    return result;
}


例外についても指摘したので、最初は例外を catch していたのですが、
GetWindowText で 0 で返された場合と区別が付かなくなるので、
そのまま上に伝えた方がいいかなーと思ってコメントアウトしました。

# 何度か読み直しましたが、自分のコードもまだ何か抜けがありそうで怖いところ……。

>ところで、皆さんが苦労して得た知識を素人が簡単に教えてもらうのはどうかと思えてきました。
>このまま質問していていいんでしょうか?
ここは質問する場所ですし、答えたくない人は書き込まなかったらいいだけじゃないかなーと。


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

Name: けえぼお   Date: 2010/07/07(水) 21:34   No:554141278506084 解決!     
Title: Re:std::stringで CString::GetBufferみたいなメソッドを使いたい…    
おお…的確な指摘をどうもありがとうございます!
大変参考になりました!
あと、返事が遅くなって申し訳ありませんでした。

// std::basic_string<TCHAR>& にするか、p_pcStr の NULL チェックを入れた方がいいかも
NULLが渡されることは全然考えてませんでした。
MFCでCStringをバッファとして要求するメソッドはCString &をとることが多い気がするので、真似して参照を使おうと思います。
参照を使うとそんなメリットがあったなんて。

// ここで return すると ptch がリークします
あああ。。。
なんでこんなミスをしたんでしょう。
関数を抜けるときはdeleteを忘れないようにしないといけないですね。

// ドキュメントによると GetWindowText で失敗した場合、
// ptch には空の文字列が渡されるそうです。
// GetWindowText という名前にするのであれば、動作をあわせるため、失敗したときに
// p_pcStr->clear() を呼び出した方がいいかもしれません。
自分がドキュメントを読めてなかったことがよくわかります。
GetWindowTestという名前にするのなら正確に仕様を理解しておくべきでした。

// 実際 Windows でメモリが足りないなんてことはまず無いでしょうし、
メモリが足りなかったときは、アプリケーションはそのまま終了すべきだ。
と何処かに書いてあった気がするのでnewで投げられる例外はあまり気にしていないです。
一応、関数の仕様として例外が投げられることを明示しておくように心がけようと思います。



他にもいろいろ聞きたいことはあるのですが、スレッドのタイトルと合わなくなりそうなので、
この件については 解決! させておきました。
答えてくださった方々、ありがとうございました!




Name: けんたろうちゃん  ..初心者(5,508ポイント)   Date: 2010/07/01(木) 15:10   No:55652       
Title: DxLibを使用して作成したネット対戦ゲームがズレてしまう    
DXライブラリ公開ページにあるチャットプログラムを参考に、ネット対戦ゲームを作ろうと思いました。
しかし、何度やっても対戦中に微妙なズレが生じてしまいます。

ネット対戦の流れとしては
・お互いに自分の入力状態を相手に送信
・相手の入力を自分のPC上で再生
というような感じです。

どなたかズレが発生しないような、修正方法を知っている方は教えてください。
できることなら、汎用性の高い方法にしたいです。
(他のゲームに応用できるように、入力情報の受け取りにしています)

以下にソースコードとコンパイル済みのプログラムを置きました。

http://www1.axfc.net/uploader/Sc/so/129442
Pass:1111

ゲームの操作方法は以下の通りです。
・↑、↓:移動
・Z:弾を発射

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


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


Name: toyo  ..熟練のプログラマー(50,663ポイント)   Date: 2010/07/01(木) 16:27   No:55655     
Title: Re:DxLibを使用して作成したネット対戦ゲームがズレてしまう    
test.cpp:int ConnectRun()関数で
            // データを受信
            NetWorkRecv( NetHandle , o_buf  , sizeof(char) ) ;
ですが受信バッファが空の場合は失敗して-1が返ってくるようです
ここを0が返るまでループすればズレはなくなると思いますがゲームのスムーズさが無くなるかもしれません


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

Name: けんたろうちゃん  ..初心者(5,401ポイント)   Date: 2010/07/01(木) 22:18   No:55687 解決!     
Title: Re:DxLibを使用して作成したネット対戦ゲームがズレてしまう    
>>toyoさん
返信ありがとうございます。
同期ズレはなくなりましたが、やはり遅すぎてゲームとして成り立たなくなってしまいました。
対戦ゲームでは非同期通信がベストなのでしょうか?
でも非同期だとズレてしまうし・・・
なかなかうまくいきません・・・

とりあえずこの質問(ズレについて)は解決とします。


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



Name: シエル  ..上級者(19,350ポイント)   Date: 2010/07/01(木) 20:57   No:55666 解決!       
Title: すいません。タグのテストさせて下さい。    
すいません。タグの使い方がいまいち分かってないので、テストさせて下さい。
ご迷惑をかけて申し訳ありません。

=========================================================================
<B>あいうえお
かきくけこ<B>

ABCDEFG<U>


123456789<small>


111111111111<font color="Red">


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


Name: シエル  ..上級者(19,360ポイント)   Date: 2010/07/01(木) 20:57   No:55667     
Title: Re:すいません。タグのテストさせて下さい。    
<B>あいうえお<B>

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

Name: シエル  ..上級者(19,392ポイント)   Date: 2010/07/01(木) 20:58   No:55668     
Title: Re:すいません。タグのテストさせて下さい。    

あれ?さっぱり分からない

あいうえお
<font color="Red">


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

Name: シエル  ..上級者(19,400ポイント)   Date: 2010/07/01(木) 20:59   No:55670     
Title: Re:すいません。タグのテストさせて下さい。    
<B>
テスト


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

Name: シエル  ..上級者(19,422ポイント)   Date: 2010/07/01(木) 21:00   No:55671     
Title: Re:すいません。タグのテストさせて下さい。    
</font>
赤くなれ
<font color="Red">


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

Name: シエル  ..上級者(19,439ポイント)   Date: 2010/07/01(木) 21:04   No:55673     
Title: Re:すいません。タグのテストさせて下さい。    
</B>あいうえお

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

Name: シエル  ..上級者(19,447ポイント)   Date: 2010/07/01(木) 21:05   No:55674     
Title: Re:すいません。タグのテストさせて下さい。    
太文字で赤色

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

Name: シエル  ..上級者(19,486ポイント)   Date: 2010/07/01(木) 21:09   No:55675     
Title: Re:すいません。タグのテストさせて下さい。    
これで最後です。

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

Name: シエル  ..上級者(19,507ポイント)   Date: 2010/07/01(木) 21:10   No:55676     
Title: Re:すいません。タグのテストさせて下さい。    
使い方分かりました!
大変ご迷惑をおかけ致しまして、申し訳ございませんでした!


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

Name: たいちう  ..ハッカー(100,233ポイント)   Date: 2010/07/01(木) 21:26   No:55677     
Title: Re:すいません。タグのテストさせて下さい。    
拡張子がhtmlというテキストファイルを作って試すのが簡単です。
適当なタグを書いてブラウザで開いてみましょう。
この方法で試したタグが、この掲示板でそのまま使えるという保証はありませんけどね。

一応参考までに。
http://www.tohoho-web.com/
http://www.tohoho-web.com/html/index.htm


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

Name: Dixq (管理人) [URL]  ..ウィザード(1,229,231ポイント)   Date: 2010/07/01(木) 21:30   No:55679     
Title: Re:すいません。タグのテストさせて下さい。    
「簡単タグ入力」をクリックして出てくる所の「説明」をクリックすると
http://www.style-21.com/optiontag.html
こちらが出てきます。もし参考になればどうぞ

※chromeでは簡単タグ入力が正常動作しない件は管理人さんに1年位前に報告済みなのですが、
直らないようです・・


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

Name: シエル  ..上級者(19,651ポイント)   Date: 2010/07/01(木) 21:33   No:55680 解決!     
Title: Re:すいません。タグのテストさせて下さい。    
すいません。
htmlは多少できるんですが、ボタンを押したときに
タグが文字の一番後ろにくっついたので、htmlとは使い方が違うのかと
思ってました。


#ちなみに私は昔そのサイトでhtmlを学びましたwありがとうございます。


>>管理人様
このスレはもう不要ですので、削除していただいて構いません。


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

Name: toyo  ..熟練のプログラマー(50,766ポイント)   Date: 2010/07/01(木) 21:33   No:55681     
Title: Re:すいません。タグのテストさせて下さい。    
投稿ボタンの横のプレビューにチェック入れたら投稿前に確認できますよ


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

Name: シエル  ..上級者(19,656ポイント)   Date: 2010/07/01(木) 21:34   No:55682     
Title: Re:すいません。タグのテストさせて下さい。    
あっ!説明あったんですね。すみませんでした。。。

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

Name: シエル  ..上級者(19,678ポイント)   Date: 2010/07/01(木) 21:35   No:55683     
Title: Re:すいません。タグのテストさせて下さい。    
プレビューって、そういう機能だったんですね!
使わせていただきます!


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



Name: T.J  ..かけだし(1,431ポイント)   Date: 2010/07/01(木) 19:17   No:55660       
Title: 【龍神録】レーザーの使い方    
レーザーの構造体がそれぞれどういった役割を持っているのか分からず、オリジナル弾幕を作ろうと思っていても全くできません。
それぞれどういった役割を持っているのですか?教えてください


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


Name: Dixq (管理人) [URL]  ..ウィザード(1,229,096ポイント)   Date: 2010/07/01(木) 20:32   No:55664     
Title: Re:【龍神録】レーザーの使い方    
あ、35章の説明書き忘れてますね・・。
レーザーの登録部分の注釈のみ更新しました。

実際に動かしてみないと良く解らないと思います。

概要は34章にあるとおりです。
それと35章で作った反魂蝶の弾幕を照らし合わせて下さい。おわかり頂けると思います。

レーザーの登録部分をご覧下さい。

解りにくいのは

1 ... lazer[k].startpt.x

2 ... lazer[k].lphy.conv_base_x

3 ... lazer[k].lphy.conv_x

この辺かと思います。
1はレーザーを描画し始める場所です。



ここですね。

レーザーはstart.ptを基準に回転しているのではなく、リリアの中心を基準に回転していますから、
回転の基準もセットしないといけません。
それで2をセットします。
だからここにはboss.xが代入されていますよね。

また、レーザーの描画し始める場所は回転基準位置と同じではないので、
どのポイントを回転させてやるかを指定する必要があります。
反魂蝶では描画し始めるstart.ptをその場所に指定しています。

色々いじってみて下さい。


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

Name: T.J  ..かけだし(1,486ポイント)   Date: 2010/07/01(木) 21:02   No:55672 解決!     
Title: Re:【龍神録】レーザーの使い方    
分かりやすい説明有難うございます。
出来れば35章の解説を追加していただけるとありがたいです。レーザーの理論が難しくてなかなか理解しきれてないので…


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



Name: Ma  ..ハッカー(104,853ポイント)   Date: 2010/06/29(火) 19:25   No:55514       
Title: 妄想力募集中 (小論対策)【雑談】    
もし今の情報技術がなんらかの形で教育に活用されたとしたら、どのような改善が見られるでしょうか?
あるいは
未来の教室はどんな技術があるだろう?


という事を考えています。
この質問に至った理由は、入試用の小論文(情報学部)の練習をしていて、自分の答案に行き詰まったからです。
もちろん、自分で考えてこその(評価される)思考力なのはごもっともですが、なかなか具体的な内容(教育における情報技術を駆使する方法)が思いつかないので、その手助けをみなさんにしていただけたらな と思ってます。


全体的なコメントとしては講師からこう言われました
「『情報技術を駆使した授業』についての具体的なイメージが、あまり説得力を持たない。」

説得力を持った具体的なイメージを持ちたいのですが、自分の中でもそれが確立できていなかったのだから
小論文で書けなくて当たり前でした。

みなさんが理想とする未来の教室はどんなところですか?




==今まで私が練習の小論文で書いた点(の一部)==
【読み飛ばしていただいてかまいません。】

・授業のレコーディング→サーバー等においていつでも学習できる。
 利点:過去の授業を模擬的に受けれる。休んだ人や病欠の人、あるいは様々な理由で学校にこれない人が学習できる。
 反論:対面授業にまさる方法ではない。
    サテライト授業との違いはなに?すでにある技術だから、入っても君はこれに貢献できないよ?
    授業中に集中力が欠ける。

・黒板をデジタルスクリーン(*マジックボード)化の促進
 利点:表、グラフ、画像、音などのツールを使いやすい。(チョークや黒板消し不要)
 反論:画像見せたいならプロジェクターでいいじゃん。
    グラフとか表が欲しいなら描けばいいでしょ?プリント配ればいいでしょ?


・情報端末を用いて、宿題やテストをデジタル記録化(動画)。
 利点:教師が生徒の学習状況を把握しやすい。
 反論:紙でやるときとの違いはなに?紙のテストだって学習状況把握できるよ。


・受動的な授業のみではなく、生徒から情報を発信させる。無名でみんなの回答をマジックボード(*)に表示。
 先生は現状の様子を眺め、復習する必要があるかチェック。生徒達は自分の答案が出て、「がんばらないと」の意識がでる。
 利点:生徒たちの授業参加意識を強める。全体の学習状況の把握。
 反論:だから、ペーパーテストとの違いは何?

(* マジックボード:大型のペンタブレット化したホワイトボードのようなもの、プロジェクターを使用してボードに描画する。PCやMACにつながる。米国の一部の州の学校で実用化が進んでいる。)
=============================

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


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


Name: たかぎ [URL]  ..ハッカー(212,099ポイント)   Date: 2010/06/29(火) 19:32   No:55515     
Title: Re:妄想力募集中 (小論対策)    
情報技術を駆使するのでしょうか?
それとも駆逐するのでしょうか?
字は似ていますが、真逆の状況ですよね。


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

Name: Ma  ..ハッカー(104,873ポイント)   Date: 2010/06/29(火) 19:36   No:55516     
Title: Re:妄想力募集中 (小論対策)    
すいません、誤字です。駆使ですね。
(原文も修正しました。)

(*ココでも間違いました。修正済み。) 編集済み


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

Name: sizuma [URL]  ..熟練のプログラマー(40,752ポイント)   Date: 2010/06/29(火) 21:29   No:55527     
Title: Re:妄想力募集中 (小論対策)    
今の技術で生かせるものと、未来の教室では結構方向性が違いますね。
入試用なら未来の教室の方が夢があっていいのかな?

僕は入試に関係がない論文であるなら、
学校教育の情報化により起こりうる弊害-デジタル世代の子供たち-
みたいなテーマにして書くかなー(笑


まぁ実際は
児童管理で標準化できるプロセスをシステム化してSaaSとして導入する
みたいなことを書くと思います。
クラウドはやってるみたいですし。
非常につまらない内容になりますね、きっと。


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

Name: ムンバ  ..初心者(7,954ポイント)   Date: 2010/06/29(火) 22:07   No:55529     
Title: Re:妄想力募集中 (小論対策)    
Maさん、こんばんはっ!

ちょっと趣旨と違うかもしれませんが、宜しければ覗いて見てみて下さい。
http://www.k.dendai.ac.jp/
(東京電機大学のサイト内の各研究室へのページです。)
ちょっと覗いてみて、参考にならないと判断したら
無視して頂くと言う事で。w


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

Name: たかぎ [URL]  ..ハッカー(212,265ポイント)   Date: 2010/06/29(火) 22:15   No:55532     
Title: Re:妄想力募集中 (小論対策)    
> みなさんが理想とする未来の教室はどんなところですか? 

入試云々関係なしに回答すると...

技術を使わない技術が大切だったりします。
とくに初等教育では、便利な道具に頼るより、限られた道具をいかに工夫して使うかを教える方がよいですからね。
ただ、現在のように学年単位で分断された教育環境より、学年の異なる児童・生徒が混在して授業を受けられるような環境づくりに情報技術が役に立てばよいなと考えています。

あと、設備的なことよりも教育内容のほうがずっと興味があります。
現在ではおろそかにされがちな道徳教育にもっと注力してもよいのではないかと思います。
上で書いた異なる学年が混在した教室というのに、ひとつの解があるのではないかと考えてみたりしています。


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

Name: Ma  ..ハッカー(104,885ポイント)   Date: 2010/06/29(火) 23:24   No:55536     
Title: Re:妄想力募集中 (小論対策)    
 sizuma さん。
具体的にありがとうございます。
よろしければ、どう標準化するのかお聞かせください。


 ムンバさん。
ちょっと今回は役に立つか不明ですが、ブックマークにとっておきますね。
ありがとうございました。



 たかぎさん
たかぎさんの意見がつまっていて読み応えがありました。
ありがとうございました。

>学年の異なる児童・生徒が混在して授業を受けられるような環境づくりに情報技術が役に立てばよい
ところで、これは具体的にどう情報技術がその環境づくりに携わるのでしょうか?
よろしければお聞かせください。


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

Name: たかぎ [URL]  ..ハッカー(212,535ポイント)   Date: 2010/06/30(水) 00:10   No:55538     
Title: Re:妄想力募集中 (小論対策)    
> >学年の異なる児童・生徒が混在して授業を受けられるような環境づくりに情報技術が役に立てばよい 
> ところで、これは具体的にどう情報技術がその環境づくりに携わるのでしょうか? 

普通は、教室の前に教師が立ち、同学年の児童・生徒を相手に授業をするわけですが、同じ教室に異なる学年の児童・生徒が混在するとそのスタイルでは無理です。かといって、複数の教師が教室に入って班分けを行って授業をやるのでは人員面等で無理が出てきます。
そこで、情報端末をうまく活用することで、複数の教室に分散している同学年の児童・生徒に対して遠隔的に授業を行ないつつ、先輩、後輩と実際に教室にいる教師の間でリアルなコミュニケーションを行えるような環境ができればと妄想しているわけです。
ただし、これをやるには、いわゆる情報技術だけでなく、念入りなカリキュラムや教材の作成、教師の学級運営・授業運営の高いスキルが要求されます。
まあ、教科によってはこんな面倒なことはやめたほうがよいでしょうね。


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

Name: Ma  ..ハッカー(104,800ポイント)   Date: 2010/06/30(水) 07:08   No:55548     
Title: Re:妄想力募集中 (小論対策)    
よくわかりました。
たかぎさんありがとうございます。

ただ、ひとつだけ疑問がありました。
>同じ教室に異なる学年の児童・生徒が混在するとそのスタイルでは無理です。
これは、児童同士が年齢の違いで嫌な気持ちを抱かないためでしょうか?

でもだとしたら、
>先輩、後輩と実際に教室にいる教師の間でリアルなコミュニケーション
これをしてしまうことで、それは達成できません。

他に理由があると思いますが、そこのところをよろしかったら教えてください。


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

Name: たかぎ [URL]  ..ハッカー(212,608ポイント)   Date: 2010/06/30(水) 09:23   No:55550     
Title: Re:妄想力募集中 (小論対策)    
> >同じ教室に異なる学年の児童・生徒が混在するとそのスタイルでは無理です。 
> これは、児童同士が年齢の違いで嫌な気持ちを抱かないためでしょうか? 

そうではなく、学年に応じて指導のしかたがある程度変わるので、全員をひとまとめにして、ひとりの教師が指導するのは無理があるということです。
音楽教室や体操教室なんかはそういったことが実現できているので、まったく無理というわけでもないのでしょうが、どうすればよいのかはよくわかりませんね。


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

Name: sizuma  ..熟練のプログラマー(41,007ポイント)   Date: 2010/06/30(水) 11:49   No:55556     
Title: Re:妄想力募集中 (小論対策)    
>標準化
そうですね、出席や成績の管理は同じようなプロセスを抜き出せると思います。
また、保護者への対応や児童の指導方針も統計的な方法でシステムからアドバイスすることはできるでしょう。

同じようなプロセスで管理することで、学校同士の横のつながりをシステムで実現することも容易でしょうし、保護者との情報共有(学校行事情報、児童情報、担任情報など)も可能です。

あとは個人情報のセキュリティを確保するプロセスとか。


>他学年合同
僕の卒業した中学では、体育とか学校行事では3学年で合同だったりしました。
違う学年と接することは道徳的にはいい勉強になると思います。


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

Name: たかぎ [URL]  ..ハッカー(212,790ポイント)   Date: 2010/06/30(水) 12:29   No:55561     
Title: Re:妄想力募集中 (小論対策)    
> 違う学年と接することは道徳的にはいい勉強になると思います。 

そうなんですよ。
長い間、同年代としか関わっていないと、いろいろ弊害がでます。
また、中学や高校のように3学年しかないと同年代のようなものですからね。

まあ、教育に関していえば、このたびの選挙で山梨選挙区がどんな結果になるかが気になっています。
(私は山梨で投票できないので見守るしかできませんが)
技術的なことをいくらあれこれ考えたところで、政治や教員が腐っていてはどうしようもありませんので。


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

Name: Ma  ..ハッカー(105,281ポイント)   Date: 2010/07/01(木) 00:37   No:55636     
Title: Re:妄想力募集中 (小論対策)    
>技術的なことをいくらあれこれ考えたところで、政治や教員が腐っていてはどうしようもありませんので。
そうですね。それがしっかりしている前提で技術は援助ツールとして役に立ってもらうことになりますね。

>たかぎさん
つまり様々な年の人を集めて教育する利便性は、つまり「違う年との人とのふれあい」による「道徳学習」のようなものですね。

逆に弊害として、、、
>そうではなく、学年に応じて指導のしかたがある程度変わるので、全員をひとまとめにして、ひとりの教師が指導するのは無理があるということです。

現状では結局学年ごとに分けたほうがいいという結論になってしまいますね(汗


>どうすればよいのかはよくわかりませんね。 
ですね。ひとつの未来像の案として受け止めさせていただきます。
ありがとうございます。具体的な(情報技術でどう年齢の違いに対応するかの)解決策があればまたよろしくお願いします。


>sizuma さん

標準化はなんだか現実的ですねw
ただ、ちょっと入試の小論として論じるには一部難しいですね。

>出席や成績の管理は同じようなプロセスを抜き出せると思います。 
(・新鮮味がちょっと足りない。現在の技術でも十分できる。)
・どのように行うことで、今(紙で管理)とどういう違いが期待ができるのか。効果が小さすぎるのではないか。

>保護者との情報共有(学校行事情報、児童情報、担任情報など)も可能です。 
・現状の学校のウェブページと比べてどう違うのか。


よければ以上の点について何かご意見がありましたらよろしくお願いします。


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

Name: ムンバ  ..初心者(7,997ポイント)   Date: 2010/07/01(木) 02:37   No:55638     
Title: Re:妄想力募集中 (小論対策)    
こんばんは。

>>よければ以上の点について何かご意見がありましたらよろしくお願いします。

議題は、Maさんの(雑談を含む)小論対策ですよね?


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

Name: sizuma  ..熟練のプログラマー(42,155ポイント)   Date: 2010/07/01(木) 12:20   No:55650     
Title: Re:妄想力募集中 (小論対策)    
>新鮮味がちょっと足りない。現在の技術でも十分できる
論題は「もし今の情報技術がなんらかの形で教育に活用」
とのことですよね。
現在の技術を用いて、利用されていない部分に適用すると読み取りました。

>紙で
エネルギー問題まで言及してもいいんですけど、情報の活用として紙媒体とデジタル情報では比較にならないですね。
1人の生徒の出席情報を9年間分出力したいときはDB化しておけばちょちょっとSQLを発行すれば情報が得られます。
また、そういう多くの生徒の情報から、教育に有効な手法をテンプレ−トとして使えますね。
例えば小学生のころから年々遅刻が多くなる人物は、これからももっと増える可能性が高いので厳しく指導してくれる担任に担当させる。
極端に欠席が増えた場合は家庭やクラスに問題が起こってる可能性が高いので担任に警告をだす。
いろいろな活用方法があると思います。


>現状の学校のウェブページと比べてどう違うのか
グループウェアとして双方向のコミュニケーションがうまくとれると思います。
まぁブラウザから利用すると思うんで、HPの利点も包括して提供できるでしょう。
考えれば面白い機能が追加できるんじゃないですかね
僕は思いつかないですけど(笑


>他学年学習
ある程度学力が高かったり、学習意欲が高い人以外は、精神的成長が一番必要なんじゃないかな、と思います。
授業は別にしても、中学や高校ですべての学年がごっちゃまぜってのはなんだか面白いですね。
体育とか英語は3学年合同でもよさそうです。
英語なんて全部見直してくれたほうがいいです。文法なんて後回しにして、しゃべれるようになるには3学年合同っていい感じの手法なんじゃないかなーと素人考え。


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

Name: Ma  ..ハッカー(106,169ポイント)   Date: 2010/07/01(木) 16:10   No:55653 解決!     
Title: Re:妄想力募集中 (小論対策)    
>議題は、Maさんの(雑談を含む)小論対策ですよね?
そうですが、それについて回答をくださった事を具体的に聞いてみたかったので「よかったら」といいました。

>sizuma さん
>論題は「もし今の情報技術がなんらかの形で教育に活用」 
あ、はい、たしかにそうかいていましたね。
失礼しました。
(本当は、未来にできる可能性がある情報技術についても話しあってみたいと思っていたのですが、うっかり「今の」をいれてしまったようです。)


>エネルギー問題まで言及してもいいんですけど、情報の活用として紙媒体とデジタル情報では比較にならないですね。 

すなわり効率、し忘れ、等 紙では複雑になってしまう作業を簡単にする役割として、ということですね。
なるほど、ありがとうございます。

>>現状の学校のウェブページと比べてどう違うのか 
>グループウェアとして双方向のコミュニケーションがうまくとれると思います。 
よくわかりました。
あとは、具体的にどんな双方向コミュニケーションが可能でそれからどんな利益が得られるか考えてみますね。


>英語なんて全部見直してくれたほうがいいです。文法なんて後回しにして、しゃべれるようになるには3学年合同っていい感じの手法なんじゃないかなーと素人考え。 

言語については、(簡単な文章構成がわかった後)まずは話す力をつけてから文法に入るべきだと私は思います。
正直、日本の学校の文法がすべて正しいとしたら日本人より外国の人のほうが文法を間違えて使っています。
(論文や新聞などしっかりした文以外の普段会話などにおいてのみですが。)
学校で英語を教えるなら何か議題をだしてグループ分けして英語のみで話しあって、決まった意見をリーダーが英語でクラスで発表するぐらいしてもいいんじゃないかな。

って情報技術についてあまり関係ない話失礼しました。


情報社会についての本も買ったので読みながら、みなさんの意見も参考にしながら深い思考で考えてみます。
ありがとうございました。

まだ他に案とか意見などありましたらぜひ聞きますのでよろしくお願いします。


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

Name: 三郎  ..入門者(4,363ポイント)   Date: 2010/07/01(木) 17:57   No:55657     
Title: Re:妄想力募集中 (小論対策)    
妄想だから、これなら妄想できるかと思っていましたが、すっかり
「証文の出し遅れ」になりました。
今は少なくなったかも分りませんし私は経験していませんが、山間僻地の学校(分校)で先生一人に生徒数人(酷いのは二人)というのがあります。
聞いたところによれば生徒同士で助け合い教え合っているとの事。
自分で実際に調査(聞き取り調査)されてみるのも無駄ではないかも。

私は英語は全く駄目です。
しかし日本語だけは得意です。
しかし、国語の時間に「文法」を習いました。
しかしこの日本語の文法の試験の点数も大変低かった記憶があります(恥)。
何の不自由もしていません。
日本人に国語の文法が何故必要か分りません。



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

Name: たかぎ [URL]  ..ハッカー(213,233ポイント)   Date: 2010/07/01(木) 18:43   No:55659     
Title: Re:妄想力募集中 (小論対策)    
> 今は少なくなったかも分りませんし私は経験していませんが、山間僻地の学校(分校)で先生一人に生徒数人(酷いのは二人)というのがあります。 

実際に今でもありますし、少子化が進むと地方都市でもそんな状態になる可能性が出てきます。
娘が通っている公文の教室でもそんな感じですし、各種の習い事(武道、スポーツ、音楽、珠算、書道など)でも似たような状況だと思います。
だからできないことはないんですね。

> 聞いたところによれば生徒同士で助け合い教え合っているとの事。 

これが結構大切で、下の子や同級生に教えるのが、その子の力を引き出す最良の方法になります。
また、後輩に恥ずかしい姿は見せられないので、自然に規律を守れるようになります。

そういえば、うちの息子が、誰も教えた覚えがないのに幼稚園のときに足し算ができるようになっていたのですが、問いただしてみると、公園で小学校1年生の友達に教わったというのです。
教えた子は大したもんですね(間違って覚えていないかどうかは、大人が確認する必要があるでしょうが)。

> 日本人に国語の文法が何故必要か分りません。 

必要かどうかは、文法を理解して、そこからもう一歩進んだときにやっとわかるようになります。
私は現在、点訳の前処理として、漢字かな混じり文をかな書きに直して、分かち書きをするプログラムをやっていますが、文法が分からないとまったく話になりません。
国語にしても数学にしても、理解していればそれだけ選択肢が増えます。

また、国文法は古文を理解するための前段階でもあります。
戦後にGHQによる愚民化政策の一貫として、漢字の表記や仮名づかいが変更されてしまいました。さらに、義務教育で文語体の教育もほとんど行われなくなったため、日本人は古典を読めなくなってしまっています。
古文は話し言葉ではないので会話から入ることはできません。だから、文法から入るのは正攻法なのです。
ただ、今のようないかにも受験のための勉強ではなく、もう少し純粋に文学や歴史に親しめるような教育をすればよいのに、とは思います。

英語にしても、大多数の日本人にとっては、会話より読み書きのほうが圧倒的に機会が多いと思います。
だから、文法中心の教育そのものが悪いわけではありません。
ただし、これも古文と同じで、もっと楽しめる教育をしてもよいと思います(例えば、英語のマンガを読ませるとか)。
 編集済み


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

Name: 三郎  ..入門者(4,600ポイント)   Date: 2010/07/01(木) 19:32   No:55661     
Title: Re:妄想力募集中 (小論対策)    
たかぎさん、こんにちわ。
いつも、たかぎさんのプログラム解説、雑談の鋭さに感服しています。

一字一句正確に読む必要(例えば裁判記録など一字のミスで{何何も と 何々が}で有罪が無罪になる事もある)はあるのでしょう。ラブレターにしても一字のミスで失恋とかあるかも分りません?。

世の中分らない事、知らない事だらけです。

古文、漢詩、等等。大昔に文法が在ったのだろうか?
無ければあのような高貴な?万葉集とか源氏物語は書けたのであろうか?
興味が尽きません。

でもプログラム(ソフト)には文法が無ければ到底不可能で、私は困っている、、、
これぞ妄想かな。


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



Name: さち  ..ぴよぴよ(399ポイント)   Date: 2010/06/30(水) 23:00   No:55629       
Title: シューティングゲームを作っているんですが…    
初めまして。C++言語初心者のさちです。
今、シューティングゲームを作っていますが、弾の残数を描画できるようにしたいのですが、どうしたらいいのかわからなくて迷ってます。
そのままですが、現段階で出来ているところまで張り付けさせていただきます。
教えてください。お願いします。

// TridentGFライブラリ用のヘッダファイル
#include "TridentGF.h"
#include <iostream>
#include <windows.h>
#include <cmath>

// TridentGFライブラリ用のネームスペース
using namespace tcgf ;

// 弾の構造体
struct SHOT{
 float x, y; // x,yの座標
 float vx, vy; // 移動速度
 float speed; // 移動速度
 float max; // 移動範囲(最大)
 static const int SHOT_OFF = 0; // 表示フラグ(オフ)
 static const int SHOT_ON = 1; // 表示フラグ(オン)
 int flag; // 表示フラグ
 float tamax, tamay; // 弾の残数を描画するx,yの座標
 int count; // 弾の残数をカウント
};
// 弾の管理
struct SHOT_CTRL{
 static const int SHOT_MAX = 5; // 弾の出現の最大数
 SHOT shot[SHOT_MAX]; // 弾の情報
};
// プロトタイプの宣言
// 弾の発射
void FlagShot(SHOT_CTRL *shot_ctrl);
// メイン
void main(void){
 // ここで初期化します
 SHOT_CTRL shot_ctrl;
 // 弾の初期化
 for (int i = 0; i < SHOT_CTRL::SHOT_MAX; i++){
 shot_ctrl.shot[i].x = shot_ctrl.shot[i].y = 0.0f;
 shot_ctrl.shot[i].vx = shot_ctrl.shot[i].vy = 0.0f;
 shot_ctrl.shot[i].speed = 0.5f;
 // 弾の移動範囲の限界
 shot_ctrl.shot[i].max = 15.0f;
 // 弾が表示中かどうかのフラグ
 shot_ctrl.shot[i].flag = SHOT::SHOT_OFF;
 // 弾の残数を描画する
 shot_ctrl.shot[i].tamax = 13.5f;
 shot_ctrl.shot[i].tamay = -10.5f;
 // 弾数
 shot_ctrl.shot[i].count = 6;
 }
 // ゲームループ
 // Windowが閉じたら、繰り返しを終了します。
 while( IsActive() ){
  // ここでゲームの処理をします
  // 弾の発射
  int i = 0;
  FlagShot(&shot_ctrl); 
  // 弾の残数を表示
  sout << shot_ctrl.shot[i].count;
  // 弾の残数が0になったら、終了する
  if (shot_ctrl.shot[i].count == 0 ){
   sout.location(270, 200);
   sout << "終了です\n";
  }
  // ここで描画処理をします
  // 弾の残数の描画
  for (int i = 0; i < 3; i++){
   for (int j = 0; j < 2; j++){
    if (shot_ctrl.shot[i].count != 0 && shot_ctrl.shot[i].flag == SHOT::SHOT_OFF){
     SetColor(226,113,0);
     DrawSmallBox(shot_ctrl.shot[i].tamax + (float)(i * 2),shot_ctrl.shot[i].tamay - (float)(j * 2));
    }
   }
  }
  // ショットフラグがオンになったら弾の描画
  if (shot_ctrl.shot[i].flag == SHOT::SHOT_ON){
   SetColor(226,113,0);
   DrawSmallBox(shot_ctrl.shot[i].x,shot_ctrl.shot[i].y);
  }
  // ここまでで描画処理を終了します。
  // 描画を行います。
  Render();
 }
 // 終了処理をします
}

// 弾の発射
void FlagShot(SHOT_CTRL *shot_ctrl){
 int i;
 for (i = 0; i < SHOT_CTRL::SHOT_MAX; i++){
  // 弾のカウントが0じゃなかったら
  if (shot_ctrl->shot[i].count != 0){
   // 弾の表示がオフのとき
   if (shot_ctrl->shot[i].flag == SHOT::SHOT_OFF){
    // 発射キーが押された
    if (GetKey(VK_SPACE)){
     // 表示フラグをオンにする
     shot_ctrl->shot[i].flag = SHOT::SHOT_ON;
     // 位置を初期化
     shot_ctrl->shot[i].x = 0.0f;
     shot_ctrl->shot[i].y = 0.0f;
     // 移動速度を設定する
     shot_ctrl->shot[i].vy = shot_ctrl->shot[i].speed;
    }
   }
   // 弾の表示がオンのとき
   if (shot_ctrl->shot[i].flag == SHOT::SHOT_ON){
    // 弾の移動速度
    shot_ctrl->shot[i].vy = shot_ctrl->shot[i].speed;
    // 位置を更新する
    shot_ctrl->shot[i].y += shot_ctrl->shot[i].vy;
    // 移動範囲の設定
    if (shot_ctrl->shot[i].y >= shot_ctrl->shot[i].max){
     // 表示フラグをオフにする
     shot_ctrl->shot[i].flag = SHOT::SHOT_OFF;
     shot_ctrl->shot[i].count = shot_ctrl->shot[i].count - 1;
    }
   }
  }
 }
}


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


Name: ookami  ..プログラマー(30,401ポイント)   Date: 2010/07/01(木) 07:24   No:55641     
Title: Re:シューティングゲームを作っているんですが…    
数字で書きたければ DrawString、

アイコンで
●●●


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

Name: ookami  ..プログラマー(30,315ポイント)   Date: 2010/07/01(木) 07:27   No:55642     
Title: Re:シューティングゲームを作っているんですが…    
うぅわすいません、誤操作で途中で投稿してしまいました。編集キーも入れる前だったから編集できないし 汗

--

数字で書きたければ DrawStringなど、

アイコンで
●●●●●●
のように描きたければ、forループでDrawGraphなどでしょうか。

-- 追記 7/2
すみません; DrawStringやDrawGraphなどは、DXライブラリでした。
「TridentGFライブラリ」というのは分かりません... ちゃんと読まず、大変失礼しました。

ついでにすみません、「TridentGFライブラリ」について調べようとしたのですが、
全く情報が得られませんでした。ちょっと興味ありますので、
参考になるURLなど教えてもらえませんか?(逆w 編集済み


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



Name: gdu  ..ぴよぴよ(430ポイント)   Date: 2010/06/30(水) 03:18   No:55545       
Title: 残機をある地点で増やす方法    

弾幕シューでスコアがある地点まで行ったら
残機を増やす方法がわからなく困っています。
(下が実際書いたものです)


//スコアが10000点を超えたら残機をひとつ増やす
    if(ch.score>10000){  
        ch.num++;}

これで実行すると10000こえたら一応残機が増えるのですが
ひとつではなく無限大に増えていってしまいます。

「>」を「=」に変えて見ると今度はスコアが最初から10000で以後ずっとスコアが
10000から変わらなくなってしまいます。

どうしたらひとつだけ増やせますか?



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


Name: y  ..初心者(6,898ポイント)   Date: 2010/06/30(水) 03:42   No:55546     
Title: Re:残機をある地点で増やす方法    
スコアが増えていくということは、必ず10000未満から10000以上になるときの境界線があるはずです。
例えばスコアアイテムを取った瞬間など、「前は10000未満だったけど、今加算したら10000以上になった」
といった風に条件を仕込むと、1度だけ増やせます。


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

Name: toyo  ..熟練のプログラマー(50,377ポイント)   Date: 2010/06/30(水) 05:44   No:55547     
Title: Re:残機をある地点で増やす方法    
残機増加用に変数を増やしてもいいと思います
初期化時に
ch.numup = 10000;
として
if (ch.score > ch.numup ) {
    ch.num++;
    ch.numup *= 2; //例として次は2倍の点数で増える
}

ch.score = 10000は値を代入しているので当然ch.scoreは10000になりますね
C、C++での比較は == とイコール2個です


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

Name: シエル  ..上級者(17,561ポイント)   Date: 2010/06/30(水) 09:24   No:55551     
Title: Re:残機をある地点で増やす方法    
一万点になった時
if(ch.score==10000)   
        ch.num++;

一万点以降(一万で割り消れたら1増やす)
if(ch.score>10000 && ch.score%10000==0)
        ch.num++


こんな感じでしょうか?

追記:
すいません。この方法はスコアが1点ずつ増えることしか考えてません。
あと、スコアが増えたときに、この関数を呼び出すということが前提です。 編集済み


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

Name: パコネコ  ..入門者(3,686ポイント)   Date: 2010/06/30(水) 12:17   No:55558     
Title: Re:残機をある地点で増やす方法    
ちょっと面倒だけどスコアと一緒に増えるものを作っておいてその値が10000を超えたら残機を増やすのはどうですか?その増えるやつは残機が増えたときに0に戻してあげれば何回でも使えますよ…わかりずらいですね。

ch.scoreが増えるときkeikentiも同じ数増やす。
if(敵を倒したときとか){
 ch.score++;
 keikenti++;//付け足す
}
if(10000<keikenti){
 ch.num++;
 keikenti=0;
}
こんな感じ
でもスコアが増えるタイミングが多いならお勧めしない
書くのが面倒だから。変数が一つ増えてしまいますし…
でもこれもありだと思う


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

Name: パコネコ  ..入門者(3,544ポイント)   Date: 2010/06/30(水) 12:22   No:55559     
Title: Re:残機をある地点で増やす方法    
すいませんよく読んでみると1度だけでしたね。
それなら残機が増える条件を増やせばできるはず…
/*
//スコアが10000点を超えたら残機をひとつ増やす 
    if(ch.score>10000){   
        ch.num++;}
*/
if(ch.score>10000 && a==0){
 ch.num++;
 a++;
}
aは何でもいいです
思いつかなかったので…これも変数が増えてしまいますが、ここ以外に使わないのでいいですよね?
これでaの値を触らなければ1度しか増えません


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

Name: gdu  ..ぴよぴよ(477ポイント)   Date: 2010/07/01(木) 01:20   No:55637 解決!     
Title: Re:残機をある地点で増やす方法    
皆さん返答ありがとうございます。

いろいろと試した結果新たに変数をつくり
指定した点数まで行ったら残機を増やす方法が一番
わかりやすかったので、
今回はtoyoさんが書いたのを元に作成することにしました。

他の皆さんが書いてくれた物もどこかで参考にしたいと思います。


問題が解決できたので解決!にしておきます。

 編集済み


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



Name: シエル  ..上級者(18,752ポイント)   Date: 2010/06/30(水) 23:12   No:55630       
Title: 【DirectXプログラミング】加算合成について    
いつもお世話になります。
DirectXプログラミングでの、加算合成について質問があります。
ある画像を明るくするために、下記のような関数を作りました。
下記の関数の中のDrawPrimitiveの呼び出し回数を増やせば増やすほど、画像が明るくなっていったのですが、
加算合成の方法として、これは正しい方法なのでしょうか?

void Draw()
{
LPVOID lpvwrite;

    VERTEX Triangle[4]={
    {200.0f,0.0f,0.0f,1.0f,D3DCOLOR_ARGB(200,0,200,200),1.0f,0.0f},
    {200.0f,200.0f,0.0f,1.0f,D3DCOLOR_ARGB(200,0,200,200),1.0f,1.0f},
    {0.0f,0.0f,0.0f,1.0f,D3DCOLOR_ARGB(200,200,0,200),0.0f,0.0f},
    {0.0f,200.0f,0.0f,1.0f,D3DCOLOR_ARGB(200,0,200,200),0.0f,1.0f}
    };

    lpd3dvb9->Lock(NULL,sizeof(VERTEX)*4,&lpvwrite,0);
    memcpy(lpvwrite,Triangle,sizeof(VERTEX)*4);
    lpd3dvb9->Unlock();

    lpd3dv9->SetStreamSource(0,lpd3dvb9,0,sizeof(VERTEX));

    lpd3dv9->SetTexture(0,lpd3dtex9);

    lpd3dv9->SetTextureStageState(0,D3DTSS_COLORARG1,D3DTA_TEXTURE);
    lpd3dv9->SetTextureStageState(0,D3DTSS_COLOROP,D3DTOP_SELECTARG1);
    
    lpd3dv9->SetTextureStageState(0,D3DTSS_ALPHAARG1,D3DTA_TEXTURE);
    lpd3dv9->SetTextureStageState(0,D3DTSS_ALPHAOP,D3DTOP_SELECTARG1);

    lpd3dv9->SetRenderState(D3DRS_ALPHABLENDENABLE,TRUE);
    lpd3dv9->SetRenderState(D3DRS_SRCBLEND,D3DBLEND_ONE);
    lpd3dv9->SetRenderState(D3DRS_DESTBLEND,D3DBLEND_ONE);

    lpd3dv9->DrawPrimitive(D3DPT_TRIANGLESTRIP,0,2);//これを増やす
    lpd3dv9->DrawPrimitive(D3DPT_TRIANGLESTRIP,0,2);//これを増やす
}


また、別の質問なのですが、
透明度の設定を↓のようにした場合、テクスチャの透明度が設定されると思いますが、
この透明度の「値」はどこで設定するものなのでしょうか?
(画像を段々消えていくようにしたいと思っています。)
lpd3dv9->SetTextureStageState(0,D3DTSS_ALPHAARG1,D3DTA_TEXTURE);
lpd3dv9->SetTextureStageState(0,D3DTSS_ALPHAOP,D3DTOP_SELECTARG1);


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


Name: Justy  ..伝説なるハッカー(552,373ポイント)   Date: 2010/06/30(水) 23:57   No:55632     
Title: Re:【DirectXプログラミング】加算合成について    
>加算合成の方法として、これは正しい方法なのでしょうか?
 何を以て正しいというのかによって判断が変わってきますが、動いているなら正しいのではないかと。
 ちなみに私は SRCBLENDは D3DBLEND_SRCALPHA、DESTBLENDは D3DBLEND_ONEで加算することが多いです。


>この透明度の「値」はどこで設定するものなのでしょうか?
 ALPHAOPを D3DTOP_SELECTARG1にしないで D3DTOP_MODULATEなどにした上で D3DTSS_ALPHAARG2を
指定すればいいです。

 例えば
     lpd3dv9->SetTextureStageState(0, D3DTSS_ALPHAOP, D3DTOP_MODULATE);
     lpd3dv9->SetTextureStageState(0, D3DTSS_ALPHAARG1, D3DTA_TEXTURE);
     lpd3dv9->SetTextureStageState(0, D3DTSS_ALPHAARG2, D3DTA_DIFFUSE);
とすればテクスチャのアルファとディフューズカラーのアルファを掛け合わせたものが
表示されます。


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

Name: シエル  ..上級者(19,159ポイント)   Date: 2010/07/01(木) 00:02   No:55633     
Title: Re:【DirectXプログラミング】加算合成について    
Justyさん!ありがとうございます!

>とすればテクスチャのアルファとディフューズカラーのアルファを掛け合わせたものが 
>表示されます。
このテクスチャの「アルファ」とディフューズカラーの「アルファ」の「値」の設定方法が
知りたいのです。

テクスチャのアルファはグラフィックソフトで設定しているのでしょうか?
ディフューズカラーのアルファは、↓のD3DCOLOR_ARGBで設定しているアルファ値のことですか?
VERTEX Triangle[4]={ 
    {200.0f,0.0f,0.0f,1.0f,D3DCOLOR_ARGB(200,0,200,200),1.0f,0.0f}, 
    {200.0f,200.0f,0.0f,1.0f,D3DCOLOR_ARGB(200,0,200,200),1.0f,1.0f}, 
    {0.0f,0.0f,0.0f,1.0f,D3DCOLOR_ARGB(200,200,0,200),0.0f,0.0f}, 
    {0.0f,200.0f,0.0f,1.0f,D3DCOLOR_ARGB(200,0,200,200),0.0f,1.0f} 
    }; 


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

Name: Justy  ..伝説なるハッカー(552,419ポイント)   Date: 2010/07/01(木) 00:07   No:55634     
Title: Re:【DirectXプログラミング】加算合成について    
>グラフィックソフトで設定しているのでしょうか? 
 そうです。


>D3DCOLOR_ARGBで設定しているアルファ値のことですか
 そうです。


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

Name: シエル  ..上級者(19,190ポイント)   Date: 2010/07/01(木) 00:08   No:55635 解決!     
Title: Re:【DirectXプログラミング】加算合成について    
いつもありがとうございます!
これにて解決にさせていただきます!


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



Name: X  ..かけだし(1,938ポイント)   Date: 2010/06/28(月) 20:12   No:55469       
Title: 選択画面    
今あるゲームを製作中で、タイトル(選択画面)を作っているところです。
しかし、画像を表示しようとすると、GAMESTARTの画像しか出てこなく、矢印とExitが出てきません。
初心者なのでよく分かりません。
どうすればいいでしょうか m(__)m
因みに、ソースは、メイン関数にインクルードして、title関数を使っています。

OS:WindowsXP HomeEdition
   VisualC++2008

ソース---------------------------------------------------------

#include "DxLib.h"
#include "../head/global.h"
#include "../head/struct.h"

void title(void){

    title_t title;

    title.arrow_img     = LoadGraph("dat/img/title/arrow.png"); 
    title.manu_img[0] = LoadGraph("dat/img/title/GAMESTART.png");
    title.manu_img[1] = LoadGraph("dat/img/title/Exit.png");


    title.manu_x[0] = 225;
    title.manu_y[0] = 100;

    title.manu_x[1] = 225;
    title.manu_y[1] = 120;

    title.arrow_x     = 210;
    title.arrow_y     = 100;
    

    DrawGraph(title.arrow_x ,title.arrow_y ,title.arrow_img,TRUE);
    DrawGraph(title.manu_x[0],title.manu_y[0],title.manu_img[0],TRUE); //配列番号0は、GAMESTART
    DrawGraph(title.manu_x[1],title.manu_y[1],title.manu_img[1],TRUE); //配列番号1は、Exit


    if(Key[KEY_INPUT_DOWN] == 1)
                title.arrow_y += 20;
        

    if(Key[KEY_INPUT_UP] == 1)
                title.arrow_y -= 20;
        
}

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


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


Name: シエル  ..上級者(16,540ポイント)   Date: 2010/06/28(月) 20:50   No:55476     
Title: Re:選択画面    
ではゲームスタートの画像だけコメントアウトして描画しない状態にすると、
何が描画されますか?


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

Name: X  ..かけだし(1,940ポイント)   Date: 2010/06/28(月) 22:09   No:55483     
Title: Re:選択画面    
シエルさんありがとうございます。m(__)m

ゲームスタートのところだけコメントアウトすると、
何も描画されませんでした。



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

Name: Ma  ..ハッカー(104,803ポイント)   Date: 2010/06/29(火) 07:32   No:55492     
Title: Re:選択画面    
(title_t 内の img がポインタだとしたら)manu.img は、配列のようですが、title の初期化時に配列も初期化(領域の確保を)してますか?
画像は指定されたパスに存在しますか?
ブレイクポイントをいれて、値に異常がないかチェックしましたか?


あと、どうでもいいですが、メニューは英語で menu です。


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

Name: シエル  ..上級者(16,795ポイント)   Date: 2010/06/29(火) 07:55   No:55493     
Title: Re:選択画面    
この関数を実行するたびに、画像を読み込んでしまっているので、
画像はゲーム開始時に読み込んでハンドルを保存しておき、
描画する方が効率がいいですよ。

でも、それが原因ではなさそうですので、
一度画像を違う画像に変更してみてどうなるか教えてください。

あとメインループのコードも貼ってもらえると、原因が分かるかもしれません。




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

Name: X  ..かけだし(1,016ポイント)   Date: 2010/06/29(火) 18:35   No:55509     
Title: Re:選択画面    
Maさん、シエルさんありがとうございます!
とりあえずパスは正確でした。
それと、manu→menuに訂正しました。
後、別の画像に変えると、title.menu_img[0]が表示されます。

因みに、title.arrow_yの下で
title.menu_img[0]
title.menu_img[1]
title.arrow_img
を宣言すると、
title.arrow_imgが表示されました。

それにメインループのソースも貼ります。

メインループのソースです---------------------------------------

#include "DxLib.h"
#include "../head/struct.h"
#include "../head/function.h"
#include "../head/define.h"

#define  GLOBAL_INSTANCE
#include "../head/global.h"




int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow ){
        
    int ben[16];

    ch_t ch;
    back_t bc;
    music_t ms;


    bc.x = GetClipMinX;
    bc.y = GetClipMinY;

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



    SetMainWindowText("Ben10");

    

    if( ChangeWindowMode(TRUE) != DX_CHANGESCREEN_OK || DxLib_Init() == -1 ) return -1; 
 
  
    SetDrawScreen( DX_SCREEN_BACK ) ;          

    

    LoadDivGraph("dat/img/ben.png",16,4,4,32,32,ben);

    ms.music = LoadSoundMem("dat/bgm/lastboss_01.mp3");
    bc.img = LoadGraph("dat/img/bk_ground.png");


    PlaySoundMem(ms.music,DX_PLAYTYPE_LOOP);
    


    while(!ProcessMessage() && !ClearDrawScreen() && !GetHitKeyStateAll( Key ) && !Key[KEY_INPUT_ESCAPE]){

        title();
        
/*
if(ch.x%32==0 && ch.y%32==0){        
            ch.walking_flag=1;       
            if     ( Key[ KEY_INPUT_UP   ]  == 1 )  
                    ch.muki=0;     
            else if( Key[ KEY_INPUT_LEFT ]  == 1 ) 
                    ch.muki=1;         
            else if( Key[ KEY_INPUT_DOWN ]  == 1 )  
                    ch.muki=2;        
            else if( Key[ KEY_INPUT_RIGHT]  == 1 )  
                    ch.muki=3;         
            else                           
                    ch.walking_flag=0; 

            if      (ch.walking_flag == 1)
                if(can_or_cannot(ch.x,ch.y,ch.muki)==1)//行き先が歩けないなら
                    ch.walking_flag=0;                  //歩かないフラグを立てる。

}
        if(ch.walking_flag==1){      
            if     (ch.muki==0)   {    
                    ch.y--;
                    bc.y++;
            }
            else if(ch.muki==1)  {      
                    ch.x--;
                    bc.x++;
            }
            else if(ch.muki==2)   {   
                    ch.y++;
                    bc.y--;
            }
            else if(ch.muki==3)    {    
                    ch.x++;
                    bc.x--;
            }
        }

        ch.img = ben[(ch.x % 32 +  ch.y % 32)/8 + ch.muki * 4];
        

        DrawGraph( bc.x , bc.y ,bc.img ,FALSE);
        DrawGraph( GetCenterX, GetCenterY, ch.img,TRUE);
      
        */
        ScreenFlip();
        
    }
 
    DxLib_End();
    return 0;
}


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

Name: シエル  ..上級者(17,288ポイント)   Date: 2010/06/29(火) 18:50   No:55512     
Title: Re:選択画面    
title_tの構造体の宣言部分のコードも貼っていただけますか?(struct.hの中のやつ)

あと、DrawGraphのあたりにブレークポイントを設定後、デバックして、
title.arrow_img
title.manu_img[0]
title.manu_img[1] 

この三つ中の値に何が入っているか教えてください。


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

Name: X  ..かけだし(1,031ポイント)   Date: 2010/06/30(水) 21:31   No:55610     
Title: Re:選択画面    
返信遅れました(;´Д`)

title.arrow_img  が、 -858993460で、
title.menu_img[0]が、-858993460で、
title.menu_img[1]が、ありませんでした。


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

Name: シエル  ..上級者(18,516ポイント)   Date: 2010/06/30(水) 21:58   No:55611     
Title: Re:選択画面    
でたらめな値が入っているということは、やっぱり画像がうまく読み込めてませんね。
↓のように「dat」の前に「./」を入れて、やってみて下さい。

LoadGraph("./dat/img/title/arrow.png");  
LoadGraph("./dat/img/title/GAMESTART.png"); 
LoadGraph("./dat/img/title/Exit.png"); 


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

Name: X  ..かけだし(1,012ポイント)   Date: 2010/06/30(水) 22:10   No:55616     
Title: Re:選択画面    
その通りにやってみましたが、
前と変わりませんでした orz


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

Name: シエル  ..上級者(18,535ポイント)   Date: 2010/06/30(水) 22:14   No:55617     
Title: Re:選択画面    
datというフォルダはプロジェクトファイルの直下にありますか?
それともexeファイルの直下ですか?
え〜とにかくdatというフォルダの場所を分かるように教えてください。

あと、本当にファイルパスは間違ってないですよね?


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

Name: MNS  ..プログラマー(37,484ポイント)   Date: 2010/06/30(水) 22:20   No:55621     
Title: Re:選択画面    
読み込みに失敗した場合のハンドルは-1になりますので、
それ以外であれば読み込みは成功しているはずです。
しかし、arrow_imgとmenu_img[0]が同値であるのはおかしいですね。
title_t構造体の内容を公開してください。何か分かるかも知れません。


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

Name: X  ..かけだし(1,053ポイント)   Date: 2010/06/30(水) 22:24   No:55623     
Title: Re:選択画面    
datファイルはBen10というファイルの中に、

dat, Debug, head, sourceや
Ben10.ncb, Ben10.vcproj, Ben10.sln,
Ben10.vcproj.FM-4735B71DD3F7.user.user,
Log.txtが入っています

ちゃんと直下に入っていていました。
ファイルパスも間違っていないと思います。


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

Name: シエル  ..上級者(18,636ポイント)   Date: 2010/06/30(水) 22:25   No:55624     
Title: Re:選択画面    
失敗した場合はー1になるんですね。。。すいませんでした。勘違いです。

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

Name: X  ..ぴよぴよ(952ポイント)   Date: 2010/06/30(水) 22:40   No:55626     
Title: Re:選択画面    
title_tの内容を貼り忘れました(^^;)

title_tの内容です----------------


typedef struct{
        int img ,x, y;
        int menu_img[1], menu_x[1],menu_y[1];
        int arrow_img ,arrow_x ,arrow_y;
}title_t;


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

Name: MNS  ..プログラマー(37,624ポイント)   Date: 2010/06/30(水) 22:45   No:55627     
Title: Re:選択画面    
>int menu_img[1], menu_x[1],menu_y[1]; 
これでは、要素が1つの配列になってしまいます。
menu_imgを要素が2つの配列、Xさんがmenu_img[0], menu_img[1]として使いたいならば、
int menu_img[2]と宣言する必要があります。同x,yについても同様です。

以上をとりあえず訂正して実行してみて、結果を教えてください。


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

Name: X  ..かけだし(1,015ポイント)   Date: 2010/06/30(水) 22:58   No:55628 解決!     
Title: Re:選択画面    
宣言を [1]→[2] に変えたら、思い通りにいきました(^-^)b

配列を勉強したほうがいいですね Φ(。。;)

シエルさん、MNSさん、ありがとうございました!!


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



Name: 爺プログラマー  ..かけだし(1,171ポイント)   Date: 2010/06/29(火) 12:10   No:55495       
Title: 再描画(WM_PAINT)が変    
爺プログラマーです何時もお世話になります。

CreateWindowEx(0, CLASSNAME, CLASSNAME,
WS_OVERLAPPED| WS_SYSMENU| WS_CAPTION| WS_BORDER| WS_VISIBLE |WS_EX_TOPMOST,
Wnd_x, Wnd_y, Wnd_x_size, Wnd_y_size,HWND_DESKTOP, NULL, hThisInst, NULL);


while(loop_flag)
{
    if( PeekMessage( &msg, NULL, 0, 0, PM_REMOVE ))//GetMessage()は待機型
    {
            TranslateMessage(&msg);
            DispatchMessage(&msg);
         }
Sleep(10);




InvalidateRect(h_MainWnd,NULL,FALSE );

}//while(loop_flag)


このようにして再描画をしていますがこの画面が例えばノートパッドを開くと消され閉じると再びこの画面が現れるのですが、コンボボックスやボタンが消えています。
この時この画面を少し移動させると全て表示されます。
InvalidateRectを削除すると消された後も全て表示されます。
原因がわかりません、解決策お願いします。


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


Name: シエル  ..上級者(17,018ポイント)   Date: 2010/06/29(火) 12:19   No:55496     
Title: Re:再描画(WM_PAINT)が変    
ウィンドウプロシージャのコードを貼って下さい

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

Name: 爺プログラマー  ..ぴよぴよ(0ポイント)   Date: 2010/06/29(火) 13:32   No:55499     
Title: Re:再描画(WM_PAINT)が変    


少し長いですが、よろしくお願いします。



LRESULT CALLBACK WinProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
    HDC        hdc;
    PAINTSTRUCT ps;
    HFONT    AppFont;
    HFONT    AppFont1;
    HBRUSH    hBrush1,hBrush2;
    HPEN    hPen1,hPen2,hPen3,hPen4;
    POINT    points[5];
    POINT    points1[4];
    POINT    points2[4];
    RECT    recDisplay;

    switch(uMsg)
    {
    case WM_CREATE:

        GetClientRect( hWnd, &recDisplay );//クライアント領域
        //recDisplay.top
        //recDisplay.left
        SizeX = recDisplay.right;
        SizeY = recDisplay.bottom;//196 134

        Y1=SizeY*0.06;
        Y2=SizeY*0.20;
        Y3=SizeY*0.38;
        Y4=SizeY*0.63;
        Y5=SizeY*0.78;

        InitCommonControls();

        CreateComboBox(hWnd);
        CreateButton(hWnd);

        AppFont = CreateFont(16,0,0,0,FW_NORMAL,FALSE,FALSE,FALSE,SHIFTJIS_CHARSET,
                OUT_DEFAULT_PRECIS,CLIP_DEFAULT_PRECIS,DEFAULT_QUALITY,
                                        FIXED_PITCH,"MS ゴシック");

        SendMessage( h_Buttonkakutei, WM_SETFONT, (WPARAM)AppFont, MAKELPARAM(FALSE,0) );
        SendMessage( h_Buttonplay, WM_SETFONT, (WPARAM)AppFont, MAKELPARAM(FALSE,0) );
        SendMessage( h_ButtonDelete, WM_SETFONT, (WPARAM)AppFont, MAKELPARAM(FALSE,0) );
        SendMessage( h_Buttonstop, WM_SETFONT, (WPARAM)AppFont, MAKELPARAM(FALSE,0) );
        SendMessage( h_ComboBox1, WM_SETFONT, (WPARAM)AppFont, MAKELPARAM(FALSE,0) );

//        DeleteObject( AppFont );ここでリリースしてはいけないプログラム終了まで保持
        break;

    case WM_PAINT:
        hdc = BeginPaint(hWnd, &ps);
        AppFont1=CreateFont(16,0,0,0,FW_NORMAL,0,0,0,SHIFTJIS_CHARSET,
                            OUT_DEFAULT_PRECIS,CLIP_DEFAULT_PRECIS,
                            DEFAULT_QUALITY,FIXED_PITCH,"MS ゴシック");
        SelectObject(hdc,AppFont1);
        SetTextColor(hdc, RGB(150,150,150));
        TextOut(hdc, 16, Y1, "選択ファイルの名前の修正と削除",30);
        TextOut(hdc, 16, Y4, "選択ファイルの再生(マウスでクリックした位置から再生可能)",58);

        DeleteObject(AppFont1);


        hBrush1 = CreateSolidBrush(RGB(160, 60, 60));
        hBrush2 = CreateSolidBrush(RGB(255, 255, 255));//塗りつぶし
        hPen1 = CreatePen(PS_SOLID, 14, RGB(220, 220, 220)); 
        hPen2 = CreatePen(PS_SOLID, 7, RGB(150, 150, 150)); 
        hPen3 = CreatePen(PS_SOLID, 2, RGB(0, 0, 0)); 
        hPen4 = CreatePen(PS_SOLID, 2, RGB(100, 100, 100)); //輪郭

        //再生バーの表示
        SelectObject(hdc , hBrush1);
        Rectangle(hdc , 16 , Y5-2 , 514 , Y5+26 );

        SelectObject(hdc, hPen1);
        MoveToEx(hdc , 28 , Y5+12 , NULL);
        LineTo(hdc , 502 , Y5+12);
        
        SelectObject(hdc, hPen2);
        MoveToEx(hdc , 28 , Y5+11 , NULL);
        LineTo(hdc , 502 , Y5+11);

        SelectObject(hdc, hPen3);
        MoveToEx(hdc , 28 , Y5+12 , NULL);
        LineTo(hdc , 502 , Y5+12);

        //スライダー
        points[0].x = SL_Point;   points[0].y = Y5+1;
        points[1].x = SL_Point-5; points[1].y = Y5+10;
        points[2].x = SL_Point-5; points[2].y = Y5+23;
        points[3].x = SL_Point+5; points[3].y = Y5+23;
        points[4].x = SL_Point+5; points[4].y = Y5+12;

        SelectObject(hdc , hBrush2);
        SelectObject(hdc, hPen4);
        Polygon( hdc, points, 5 );

        DeleteObject(hPen4);
        DeleteObject(hPen3);
        DeleteObject(hPen2);
        DeleteObject(hPen1);
        DeleteObject(hBrush2);
        DeleteObject(hBrush1);

        vol_wt(hdc);

        ReleaseDC(hWnd,hdc);
        EndPaint(hWnd, &ps);
    break;

    case WM_LBUTTONDOWN:
        mouse_dw=1; mouse_dw1=1; 
    break;

    case WM_LBUTTONUP:
        mouse_dw1=0; 
    break;

    case WM_COMMAND:
        switch(LOWORD(wParam))
        {
        case IDC_KAKUTEI:
            name_chg = 1;
        break;
        case IDC_DELETE:
            delete_flag = 1;
        break;
        case IDC_PLAYBUTTON:
            if(!play_flag)
            {
            play_flag = 1;//DS起動
            Stop=0;
            }

        if(play_flag==2)
        {
            if(Stop)
            {
            lpSecondary->Play( 0,0,DSBPLAY_LOOPING );
            }
            if(!Stop)
            {
            lpSecondary->Stop();
            }        

            if(Stop)
            {Stop=0;}
            else
            {Stop=1;}
        }
        break;
        case IDC_STOPBUTTON:
            if(play_flag == 2)//再生中?
            {
            play_flag = 0;
            lpSecondary->Stop();
            Exit();
            }
        break;

        case IDC_COMBOBOX://選択項目が変更されたとき
            if(HIWORD(wParam) == CBN_SELCHANGE)
            {
            i = SendMessage(h_ComboBox1, CB_GETCURSEL, 0, 0);
            // 文字列の取得
            SendMessage(h_ComboBox1, CB_GETLBTEXT, (WPARAM)i, (LPARAM)FILENAME);
            SetWindowText(h_EditBox,FILENAME);
            }
        break;
        }
    break;

    case WM_DESTROY:
        PostQuitMessage(0);
        loop_flag = 0;
        if(play_flag == 2)//再生中?
        {
        play_flag = 0;
        lpSecondary->Stop();
        Exit();
        }
    break;

        default:
        return DefWindowProc(hWnd, uMsg, wParam, lParam);
    }
    return 0;
}


2,074ポイント を落としてしまった。

Name: 爺プログラマー  ..ぴよぴよ(958ポイント)   Date: 2010/06/29(火) 13:48   No:55500     
Title: Re:再描画(WM_PAINT)が変    
ウインドープロシージャーの中で呼び出している関数です。

別に関数にするまでもないのですが・・・

void vol_wt(HDC hdc)
{
    HPEN    hPen1,hPen2,hPen3,hPen4;
    POINT    points[5];
    POINT    points1[4];
    POINT    points2[4];
    HBRUSH    hBrush1;

        i = (Volume/140) + 45 + 590; 


        //つまみ
        points[0].x = i-5; points[0].y = Y4-6;
        points[1].x = i-5; points[1].y = Y4+10;
        points[2].x = i+5; points[2].y = Y4+10;
        points[3].x = i+5; points[3].y = Y4-6;

        //スピーカーアイコン
        points1[0].x = 575; points1[0].y = Y4-9;
        points1[1].x = 565; points1[1].y = Y4-4;
        points1[2].x = 565; points1[2].y = Y4+6;
        points1[3].x = 575; points1[3].y = Y4+11;
        points2[0].x = 565; points2[0].y = Y4-4;
        points2[1].x = 558; points2[1].y = Y4-4;
        points2[2].x = 558; points2[2].y = Y4+6;
        points2[3].x = 565; points2[3].y = Y4+6;

        hBrush1 = CreateSolidBrush(RGB(255, 255, 255));//塗りつぶし
        hPen1 = CreatePen(PS_SOLID, 1, RGB(160, 60, 60));
        hPen2 = CreatePen(PS_SOLID, 2, RGB(0, 0, 0));
        hPen3 = CreatePen(PS_SOLID, 20, RGB(255, 255, 255));
        hPen4 = CreatePen(PS_SOLID, 3, RGB(180, 180, 180)); //輪郭
        SelectObject(hdc, hBrush1);

        SelectObject(hdc, hPen3);
        MoveToEx(hdc , 590-2 , Y4+2 , NULL);
        LineTo(hdc , 635+2 , Y4+2);
        SelectObject(hdc, hPen2);
        MoveToEx(hdc , 590-5 , Y4+2 , NULL);
        LineTo(hdc , 635+5 , Y4+2);
        SelectObject(hdc, hPen4);
        Polygon( hdc, points, 4 );
        SelectObject(hdc, hPen1);
        Polygon( hdc, points1, 4 );
        Polygon( hdc, points2, 4 );
        DeleteObject(hPen4);
        DeleteObject(hPen3);
        DeleteObject(hPen2);
        DeleteObject(hPen1);
        DeleteObject(hBrush1);
}
 


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

Name: シエル  ..上級者(17,150ポイント)   Date: 2010/06/29(火) 18:41   No:55511     
Title: Re:再描画(WM_PAINT)が変    
すいません。一度InvalidateRectの第3引数をTRUEにしてどうなるか教えてもらえますか?

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

Name: 爺プログラマー  ..かけだし(1,010ポイント)   Date: 2010/06/29(火) 20:14   No:55517     
Title: Re:再描画(WM_PAINT)が変    
ありがとうございます。
早速試しましたが、立ち上げからコンボボックスとボタンが表示されません。
ペイントイベントのグラフィックと文字は表示されています。
フォーカスを外して再び戻しても同様に表示されません。


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

Name: シエル  ..上級者(17,390ポイント)   Date: 2010/06/29(火) 20:35   No:55518     
Title: Re:再描画(WM_PAINT)が変    
ウィンドウ作成時の親ウィンドウハンドルが「HWND_DESKTOP」でInvalidateRectで呼び出している、
ウィンドウハンドルが「h_MainWnd」になってますが、これは同じウィンドウハンドルですか?

それと、もしよろしければ、ウィンドウクラス登録のコード、ボタン、コンボボックス作成時のコードも貼って下さい。


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

Name: 爺プログラマー  ..ぴよぴよ(0ポイント)   Date: 2010/06/29(火) 20:40   No:55519     
Title: Re:再描画(WM_PAINT)が変    
よろしくお願いします。

    wce.cbSize            = sizeof(WNDCLASSEX);
    wce.hInstance        = hThisInst;
    wce.lpszClassName    = CLASSNAME;
    wce.lpfnWndProc        = WinProc;
    wce.style            = NULL;
    wce.hIcon            = NULL;
    wce.hIconSm            = NULL;
    wce.hCursor            = LoadCursor(NULL, IDC_ARROW      );
    wce.lpszMenuName    = NULL;
    wce.cbClsExtra        = 0;
    wce.cbWndExtra        = 0;
    wce.hbrBackground    = (HBRUSH)GetStockObject(WHITE_BRUSH);
    if(!RegisterClassEx(&wce)) return 0;


    hDeskWnd = GetDesktopWindow();
    GetWindowRect( hDeskWnd, &recDisplay );
    Wnd_x = ( recDisplay.right - Wnd_x_size ) / 2; //左上x座標
    Wnd_y = ( recDisplay.bottom - Wnd_y_size ) /2; //左上y座標

    h_MainWnd = CreateWindowEx(0, CLASSNAME, CLASSNAME,
        WS_OVERLAPPED| WS_SYSMENU| WS_CAPTION| WS_BORDER| WS_VISIBLE |WS_EX_TOPMOST,
                    Wnd_x, Wnd_y, Wnd_x_size, Wnd_y_size,
                                HWND_DESKTOP, NULL, hThisInst, NULL);





long CreateComboBox(HWND hWnd)
{
    WIN32_FIND_DATA lpFileData;
    HANDLE    hFind;

    h_EditBox = CreateWindowEx(
            0, "EDIT", "",    WS_CHILD | WS_VISIBLE | WS_BORDER | ES_LEFT |ES_AUTOHSCROLL,
                16, Y2, 500, 25,
                        hWnd, (HMENU)IDC_EDITBOX, h_Inst, NULL);

    h_ComboBox1 = CreateWindowEx(
            0, "COMBOBOX", "",
                WS_CHILD|WS_VISIBLE|WS_VSCROLL|CBS_DROPDOWNLIST|CBS_SORT|CBS_NOINTEGRALHEIGHT,
                    16, Y3, 500, 220,
                        hWnd, (HMENU)IDC_COMBOBOX, h_Inst, NULL);

    
    strcpy(FILENAME+260,INI_BUFF+Folder);
    strcat(FILENAME+260,"\\*.wav");
    List_len = 0;

    //ファイルの検索
    hFind = FindFirstFile(FILENAME+260, &lpFileData);

    next_file:

    strcpy(FILENAME,lpFileData.cFileName);
    j=(strlen(FILENAME))-4;
    FILENAME[j]=0;//拡張子削除

    SendMessage(h_ComboBox1, CB_ADDSTRING, 0, (LPARAM)FILENAME);

    if(List_len < j)List_len = j;

    if(FindNextFile(hFind,&lpFileData)!=0)goto next_file;

    FindClose(hFind);

    i=SendMessage(h_ComboBox1, CB_GETCOUNT, 0, 0)-1;//行数取得(最後の行を初期表示にする)
    SendMessage(h_ComboBox1, CB_SETCURSEL, i, 0);

    SendMessage(h_ComboBox1, CB_GETLBTEXT, (WPARAM)i, (LPARAM)FILENAME);
    SetWindowText(h_EditBox,FILENAME);//最後の行をテキストボックスへ

    SendMessage(h_ComboBox1,CB_SETDROPPEDWIDTH,List_len * 8.52,NULL);//最大幅設定
    return 0;
}






long CreateButton(HWND hWnd){
    h_Buttonkakutei = CreateWindowEx(
            0, "BUTTON", "入力確定",
                WS_CHILD|WS_VISIBLE|BS_PUSHBUTTON,
                    522, Y2, 70, 24,
                        hWnd, (HMENU)IDC_KAKUTEI, h_Inst, NULL);
    h_ButtonDelete = CreateWindowEx(
            0, "BUTTON", "削除",
                WS_CHILD|WS_VISIBLE|BS_PUSHBUTTON,
                    530+70, Y2, 40, 24,
                        hWnd, (HMENU)IDC_DELETE, h_Inst, NULL);

    h_Buttonplay = CreateWindowEx(
            0, "BUTTON", "再生停止",
                WS_CHILD|WS_VISIBLE|BS_PUSHBUTTON,
                    522, Y5, 70, 24,
                        hWnd, (HMENU)IDC_PLAYBUTTON, h_Inst, NULL);
    h_Buttonstop = CreateWindowEx(
            0, "BUTTON", "終了",
                WS_CHILD|WS_VISIBLE|BS_PUSHBUTTON,
                    520+80, Y5, 40, 24,
                        hWnd, (HMENU)IDC_STOPBUTTON, h_Inst, NULL);
    return 0;
}


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

Name: シエル  ..上級者(17,330ポイント)   Date: 2010/06/29(火) 20:51   No:55521     
Title: Re:再描画(WM_PAINT)が変    
う〜ん。よく分からないですねぇ。

メインウィンドウ作成時のCreateWindowExの親ウィンドウハンドルにHWND_DESKTOPを指定してますが、
これは何か意味があるのですか?
ちなみにこれをNULLにしてみたらどうなりますか?


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

Name: 爺プログラマー  ..ぴよぴよ(233ポイント)   Date: 2010/06/29(火) 21:06   No:55524     
Title: Re:再描画(WM_PAINT)が変    

HWND_DESKTOPをNULLでためしましたが、結果は同じでした。

なお、ハンドルの記述は下記の通りです。


HWND    h_MainWnd;//子のハンドル
HWND    h_Buttonkakutei,h_Buttonplay,h_ButtonDelete,h_Buttonstop;
HWND    h_ComboBox1,h_EditBox;
HINSTANCE    h_Inst;



int WINAPI WinMain(HINSTANCE hThisInst,HINSTANCE hPrevInst,    LPSTR lpszArgs,int nWinMode)
{
    HWND       hDeskWnd;
    MSG        msg;





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

Name: シエル  ..上級者(17,435ポイント)   Date: 2010/06/29(火) 21:51   No:55528     
Title: Re:再描画(WM_PAINT)が変    
やっぱり原因は良く分かりませんが、
基本的に描画はバックバッファに描画を行い、BITBLTでメインに転送して表示するのが
基本だと思いますので、そのようにしたほうが良いと思います。
このままだとおそらく画面もちらつきますし。


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

Name: Justy  ..伝説なるハッカー(552,228ポイント)   Date: 2010/06/29(火) 22:07   No:55530     
Title: Re:再描画(WM_PAINT)が変    
 WM_PAINTのときも DefWindowProcが呼ばれるようにしたらどうなりますか?

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

Name: 爺プログラマー  ..ぴよぴよ(595ポイント)   Date: 2010/06/29(火) 22:21   No:55533     
Title: Re:再描画(WM_PAINT)が変    
シエル  ..上級者さん

実はチラツキがあるため描画順序に配慮しています。

BITBLTを勉強します。DirectXには自信があるのですが・・・




..伝説なるハッカーさん
case WM_PAINT:



ReleaseDC(hWnd,hdc);
EndPaint(hWnd, &ps);
DefWindowProc(hWnd, uMsg, wParam, lParam);
break;

このようにするのですか?




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

Name: 爺プログラマー  ..ぴよぴよ(697ポイント)   Date: 2010/06/29(火) 22:37   No:55534 解決!     
Title: Re:再描画(WM_PAINT)が変    
自己解決しました!!!

InvalidateRect(h_MainWnd,NULL,FALSE );
UpdateWindow(h_MainWnd);


シエル  ..上級者さん
Justy  ..伝説なるハッカーさん

感謝します、また宜しくお願いします。



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

Name: シエル  ..上級者(17,495ポイント)   Date: 2010/06/29(火) 22:41   No:55535     
Title: Re:再描画(WM_PAINT)が変    
UpdateWindowですか。。。おめでとうございます。
私はDirectxを始めたばかりで、まだ全然わからないので、
私がDirectxの質問をした時は助けてくれると助かりますw


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

Name: ISLe  ..かけだし(1,070ポイント)   Date: 2010/06/30(水) 02:39   No:55544     
Title: Re:再描画(WM_PAINT)が変    
EndPaintの前のReleaseDCは要らないと思います。

SelectObjectで選択したGDIオブジェクトを選択したままDeleteObjectしてるのが気になります。
しばらく動かしているとデスクトップが真っ白になりそうな気がしますがただの気のせいかもしれません。
#デバイスコンテキストといっしょにうまく解放されているかもしれないので。

描画のチラツキは親ウインドウにWS_CLIPCHILDRENスタイルを指定すると直るかもしれません。


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

Name: 爺プログラマー  ..ぴよぴよ(931ポイント)   Date: 2010/06/30(水) 10:00   No:55554     
Title: Re:再描画(WM_PAINT)が変    
ISLe  ..かけだし さん
的確な回答ありがとうございます。

WS_CLIPCHILDRENでチラツキは全く無くなりました、今までは10ループ毎に表示していましたがこれで毎回ループ表示が出来ます。

>真っ白になりそうな気がしますがただの気のせいかもしれません

気のせいではありません、描画タイミングによりデスクトップにも塗られた時がありました。
Windowsは皆の共有物であることを忘れていました。

hFontOld = SelectObject(hdc, hFont);



SelectObject(hdc, hFontOld);
DeleteObject(hFont);

借りた物はそっくりそのまま返すよう、これからはお行儀よく致します。


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

Name: dic  ..比類無きプログラマー(81,484ポイント)   Date: 2010/06/30(水) 16:32   No:55596     
Title: Re:再描画(WM_PAINT)が変    
HDC に描画してFlipだったような・・・
できたならそれでいいですけどね


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

Name: 爺プログラマー  ..かけだし(1,267ポイント)   Date: 2010/06/30(水) 20:43   No:55608     
Title: Re:再描画(WM_PAINT)が変    
皆さんに教えて頂いたことを守ってジックリ試験しましたら、やはりダメでした。
時間が経つと、新規作成したウインドー相対ではなくデスクトップ相対のピクセル位置に描画されてしまいました。


dic  ..比類無きプログラマー さん今日は・・・

Flipとはどの様に記述するのでしょうか?
具体的に構文を教えてください。
お願いします。


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

Name: dic  ..比類無きプログラマー(81,730ポイント)   Date: 2010/06/30(水) 22:10   No:55615     
Title: Re:再描画(WM_PAINT)が変    
DirectX とあったので、DirectX を使っての描画かと思ったんですが、
上のソースを見るとWIN32AIPを使っての描画のようで、私の勘違いでした

はずしてしまったんですが、聞かれてるので簡単に書くと
LPDIRECTDRAWSURFACE3 pScreen = NULL;
pScreen を初期化
pScreen->Flip(NULL,DDFLIP_WAIT);
のようにするみたいです

というのもDirectXを使ったライブラリがあったのですが、
ハードディスクごとデータが消えたのです
なので、うる覚えです

うる覚えですが、WIN32APi と Direct X を混合すると
結構やっかいな処理になった記憶があります


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

Name: 爺プログラマー  ..かけだし(1,336ポイント)   Date: 2010/06/30(水) 22:36   No:55625     
Title: Re:再描画(WM_PAINT)が変    
dic  ..比類無きプログラマー さん

ご参加ありがとうございます。フリップはDirectXの裏画面と表画面を切り替える操作でしたね。
DirectXでは描画中のチラツキを隠すためにこの操作が基本になります。

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


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



Name: 初心者  ..熟練のプログラマー(49,538ポイント)   Date: 2010/06/29(火) 15:37   No:55501       
Title: はじめまして。    
while,scanfを使って、入力した2桁の整数の中から偶数の数字だけを表示するプログラムを作りたいんですが、何回やってもうまくいきません。ヒントでいいのでよろしければ教えてください。

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


Name: しろ  ..ぴよぴよ(21ポイント)   Date: 2010/06/29(火) 16:00   No:55502     
Title: Re:はじめまして。    
もし偶数⇒出力

そうでなければ⇒出力しない(何もかかない)

2で割ったあまりを考えてください。


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

Name: 初級者  ..初心者(8,309ポイント)   Date: 2010/06/29(火) 16:05   No:55503     
Title: Re:はじめまして。    
この返信はケータイからであるため、ご質問の投稿時に
ソースコードを貼り付けてあったかどうかがわからないのですが、
もし貼り付けてなかったのでしたら、その「何度やってもうまくいかない」という
コードを貼り付けてみてください。

ところで、「偶数の数字」と「偶数の数値」とは意味が異なります。
今回出力したいのは「数字」の方で間違いないですか?  編集済み


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

Name: 初心者  ..熟練のプログラマー(49,670ポイント)   Date: 2010/06/29(火) 16:25   No:55504     
Title: Re:はじめまして。    
#include <stdio.h>

int main(void)
{
    int a,b;
    
    while (b<1);{
        printf("2桁の整数を入力してください:");
        scanf("%d", &a);
        b=a%2;
    }
    printf("%d\n", b);
    
    return 0;
}
自分なりに書いてみたんですが、ぜんぜん駄目です。しろさんが言ってるのはifを使うってことですね。
やってみます^^


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

Name: TKOZ  ..熟練のプログラマー(68,964ポイント)   Date: 2010/06/29(火) 16:43   No:55505     
Title: Re:はじめまして。    
ヒントです。
2で割った余りを求めるには、%を使います。
例:
int num=Number%2;

これで、numにNumberを2で割った余りが求まります。

で2で割った余りが0と等しければ偶数です。

あと、判定をするのは、if文か3項演算子か、switchです。
今回は、if文が適しているでしょう。

最後に二桁の数字の中からということは、
入力した二桁以下の数値で判定するという事でよろしいでしょうか?
ならば、例とヒントです。

一番目の????に入るのは、分かりますよね?
scanfの使い方を知っているなら分かるはずです。

二番目の????が重要です。
0と変数が等しい場合は、
0==hensuという条件です。
(このhensuという変数は適当です)

三番目の????は、二番目の????が分かれば
すぐに分かるでしょう。

四番目の????は、減算です。

#include<stdio.h>

int main()
{
    int num;
    printf("数値を入力してください。");
    scanf("%d",????);
    
    while(num>0)
    {
        if(num%2 ????)
            printf("%dは偶数です。\n",????);
        
        num????;
    }
    
    return 0;
}


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

Name: だいちゃん  ..ぴよぴよ(114ポイント)   Date: 2010/06/29(火) 17:24   No:55506     
Title: Re:はじめまして。    
初書き込みになります

↑↑
失敗しちゃいました(>_<)

まず1個だけ気になったのは
初めにint bを定義してますが
初期化されてないみたいですけど
いきなりwhileの条件でb使って平気ですか?


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

Name: シエル  ..上級者(17,291ポイント)   Date: 2010/06/29(火) 18:52   No:55513     
Title: Re:はじめまして。    
入力された数字を2で割って、割り切れたら偶数。

一度書いてみて、また質問して下さい。


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

Name: 初心者  ..熟練のプログラマー(49,824ポイント)   Date: 2010/06/30(水) 15:32   No:55590     
Title: Re:はじめまして。    
偶数の数字です。たとえば100と打った場合に、2,4,6・・100と表示されるプログラムです。
自宅でcpadダウンロードしてやったのですが、初期設定がよくわからなくて、
コンパイルできませんでした;いちよTKOZさんのヒントを借りて練ってみたんですが、、難しいです。

#include<stdio.h> 

int main() 

    int num; 
    printf("数値を入力してください。"); 
    scanf("%d",num); 
     
    while(num>0) 
    { 
        if(num%2 ==0) 
            printf("%dは偶数です。\n",num); 
         
        num--; 
    } 
     
    return 0; 
}

出題者いわく2つの変数を使うらしいのですが、1つででもできるみたいなので、もう少し練ってみます。


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

Name: シエル  ..上級者(18,353ポイント)   Date: 2010/06/30(水) 15:43   No:55591     
Title: Re:はじめまして。    
scanfの第二引数をちょっと直せば、完成なんじゃないかと。

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

Name: だいちゃん  ..ぴよぴよ(156ポイント)   Date: 2010/06/30(水) 16:13   No:55595     
Title: Re:はじめまして。    
scanf("%d",&num);

for(i = 2; i <= num; i+=2){
    printf("%dは偶数です\n");
}

だめですか?^^;笑


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

Name: Dixq (管理人)  ..ウィザード(1,229,513ポイント)   Date: 2010/06/30(水) 16:44   No:55598     
Title: Re:はじめまして。    
うちのサイトのトップページに「C言語を始めるには?」みたいなページがあるのでよければ参考にして下さい。

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

Name: パコネコ  ..入門者(4,273ポイント)   Date: 2010/06/30(水) 20:18   No:55606     
Title: Re:はじめまして。    
今まできづかなかったけど、入力された数字が偶数なのかではなく、
入力された数字以下のものも描写するんですね。


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

Name: 初心者   Date: 2010/07/06(火) 13:21   No:555011278390074     
Title: Re:はじめまして。    
おかげ様で大きい順で偶数を並べることができました^^
そうですね、入力された数字以下を出力させるプログラムです。
管理人さんが教えてくれた、Visual C++ 2010でうまい具合に出ました。
ただこれから変数を二つ使って小さい順にするんですが・・、
#include<stdio.h>  

int main()  
{  
    int num,i;

    i = 2;

    printf("数値を入力してください:");  
    scanf("%d",&num);  
      
    while(i <= num; i+=2)  
    {  
        if(num%2 ==0)  
            printf("%d",num);  
          
        num=num+1;  
    }  
      
    return 0;  

このプログラムだとエラーがでてしまいます;
小さい順にすると厄介ですね。




Name: dic  ..比類無きプログラマー(81,607ポイント)   Date: 2010/06/30(水) 20:06   No:55605 解決!       
Title: Sleep関数について    
前にSleep関数について質問がありましたが
下URL先に詳しい内容がのっていたので書いておきます
http://hp.vector.co.jp/authors/VA007219/rtc_pic.html


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




Name: トマト  ..初心者(5,284ポイント)   Date: 2010/06/30(水) 13:53   No:55578       
Title: ファイルの読み書き    
テキストファイルの読み書きを行っています。
複数のファイルをいくつも読み込んで、一つのファイルに出力するようにしました。

以前に質問させて頂き 文字列1から 文字列2を検索するとの 書き方を教えていただきました。
今回は、そのプログラムに渡すファイルの部分を変更しなければならなくなり
永久ループ的になってしまったので
どう直したら良いか相談させて頂こうと思い書き込みさせて頂きました。
初歩的な問題で申し訳ありませんがもう分からなくなってしまって、よろしくお願いします。

if(argc < 2)
{
    printf("Usage : XTYPE filename1 [filename2 ...]\n");
    return -1;
}
if((fnotice = fopen( "notice.txt", "w" )) == NULL)
{
    printf("can not open write file.");
    return -2;
}
if((fcombi = fopen( "combi.txt", "w" )) == NULL)
{
    printf("can not open write file.");
    return -3;
}
while(--argc)
{
    ++argv;
    if((fp = fopen( *argv, "r" )) == NULL)
    {
        printf("can not open file. %s\n", *argv);
        return -2;
    }
    while(fgets(arpinfo,sizeof(arpinfo),fp))
    {
        printf("%s",arpinfo);
        fprintf(fcombi, "%s", arpinfo);
    }

if(!(fcombi = fopen("combi.txt", "r"))){
     printf("can not open file.\n");
        }
while(--argc){
        ++argv;
            while(fgets(tmp, 1024, fcombi)){
            if(!strstr(tmp, "iso")) continue;
            if(AddString(tmp)) continue;
        }
}


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


Name: シエル  ..上級者(18,195ポイント)   Date: 2010/06/30(水) 14:04   No:55582     
Title: Re:ファイルの読み書き    
>今回は、そのプログラムに渡すファイルの部分を変更しなければならなくなり 
>永久ループ的になってしまったので 
読み込むファイル名が変わったということですか?
また、どの部分が永久ループになってしまったのかを、明確にしてください。


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

Name: トマト  ..初心者(5,632ポイント)   Date: 2010/06/30(水) 14:19   No:55584     
Title: Re:ファイルの読み書き    
読み込みたいファイル名は可変です。
[___] ./fileOpen sample1 sample2 sample3 sample4
と引数に読み込みたいファイルを書き連ねていき、

while(--argc)
{
    ++argv;
    if((fp = fopen( *argv, "r" )) == NULL)
    {
        printf("can not open file. %s\n", *argv);
        return -2;
    }
    while(fgets(arpinfo,sizeof(arpinfo),fp))
    {
        printf("%s",arpinfo);
        fprintf(fcombi, "%s", arpinfo);
    }
}
fgetsで combi.txt(固定ファイル名)に読み込みたいファイルの中身が全て書き込まれたのを確認しました。

そのあとに、combi.txt内に必ず「iso」と書いてある文字列があるのですが
strstrで探している所で(<-プログラム内部処理の)
iso.3.6.1.2.1.4.22.1.2.9.192.168.64.90 = Hex-STRING: 00 AB B0 94 39 31 
iso.3.6.1.2.1.4.22.1.2.9.192.168.64.99 = Hex-STRING: 00 A0 48 4E 67 80[EOF] 
:
:
プロンプトが返ってこないんです。(プログラムが終了しない)

分かりにくい点あれば書き直します。よろしくお願いします



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

Name: toyo  ..熟練のプログラマー(50,398ポイント)   Date: 2010/06/30(水) 14:26   No:55585     
Title: Re:ファイルの読み書き    
if(!(fcombi = fopen("combi.txt", "r"))){ 
でfcloseしないでfopenしているのが原因では
一旦fcloseするかfreopenを使ったらどうでしょう


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

Name: シエル  ..上級者(18,195ポイント)   Date: 2010/06/30(水) 14:30   No:55586     
Title: Re:ファイルの読み書き    
combi.txtを一回fcloseしてから、fopenしてみるとどうなりますか?

追記:
すいません。かぶりました。。。 編集済み


Name: トマト  ..初心者(5,855ポイント)   Date: 2010/06/30(水) 14:45   No:55587     
Title: Re:ファイルの読み書き    
while(--argc)
{
    ++argv;
    if((fp = fopen( *argv, "r" )) == NULL)
    {
        printf("can not open file. %s\n", *argv);
        return -2;
    }
    while(fgets(arpinfo,sizeof(arpinfo),fp))
    {
        printf("%s",arpinfo);
        fprintf(fcombi, "%s", arpinfo);
    }
}
fclose(fcombi);  (<-ココに入れました!)

if(!(fcombi = fopen("combi.txt", "r"))){
printf("can not open file.\n");
}

ですが、結果は同じでした。ファイルは無事に作成されていましたが
プロンプトが返って来ない状態です。


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

Name: シエル  ..上級者(18,344ポイント)   Date: 2010/06/30(水) 14:58   No:55588     
Title: Re:ファイルの読み書き    
実際にブレークポイントを↓の中のどこかに設定してデバッグし、
argcの値や、どのようにループしているのかを教えてください。

while(--argc){ 
        ++argv; 
            while(fgets(tmp, 1024, fcombi)){ 
            if(!strstr(tmp, "iso")) continue; 
            if(AddString(tmp)) continue; 
        } 
}


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

Name: トマト  ..初心者(6,334ポイント)   Date: 2010/06/30(水) 15:31   No:55589     
Title: Re:ファイルの読み書き    
ブレークポイントが置けないのでprintfしました。

while(--argc){
        ++argv;
        printf("argc [%d]",argc); (<-ココに設置)
        
        while(fgets(tmp, STRING_MAX, fcombi)){
            if(!strstr(tmp, "iso")) continue;
            if(AddString(tmp)) continue;
        }
    }
23178]argc [-1123179]argc [-1123180]argc [-1123181]argc [-1123182]argc [-1123183]argc [-1123184]argc [-1123185]argc [-1123186]argc [-1123187]argc [-1123188]argc [-1123189]argc [-1123190]argc [-1123191]argc [-1123192]argc [-1123193]argc [-1123194]argc [-1123195]argc [-11

ずっと繰り替えしてました。

while(fgets(tmp, STRING_MAX, fcombi)){
   if(!strstr(tmp, "iso"))
   {
     continue;
   }
   else
   {
     printf("%s",tmp);
   }

の場合には、「iso」のある文字列のみ出力されてプロンプトが返ってこない。

if(AddString(tmp)) 
            {   
                continue;
            }   
            else
            {
                printf("%s",tmp);
            }
の場合も「iso」のある文字列のみ出力されてプロンプトが返ってこない。
状態でした。


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

Name: シエル  ..上級者(18,380ポイント)   Date: 2010/06/30(水) 15:46   No:55592     
Title: Re:ファイルの読み書き    
argcの値を見れば、無限ループするのは明らかなのではないかと。

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

Name: toyo  ..熟練のプログラマー(50,457ポイント)   Date: 2010/06/30(水) 15:50   No:55593     
Title: Re:ファイルの読み書き    
なんでargcがマイナスにと思ってよく見たら
while(--argc){ 
を2回実行してるんですね
1回目のwhileでargcは0になってますからだめですよ
カウンタを複数回使うならforループで回したほうがいいかも
for ( i = 1; i < argc; i++) 


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

Name: トマト  ..初心者(6,584ポイント)   Date: 2010/06/30(水) 16:06   No:55594     
Title: Re:ファイルの読み書き    
ありがとうございました。きちんとプログラムがとまりました。

while(fgets(tmp, STRING_MAX, fcombi)){
   if(!strstr(tmp, "iso"))
   {
     printf("can not iso\n");
     continue;
   }
   else
   {
     printf("%s",tmp);
   }

の場合に何も表示されない

if(AddString(tmp)) 
            {   
                continue;
            }   
            else
            {
                printf("%s",tmp);
            } 

の場合に何も表示されないのは何かあるのでしょうか?


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

Name: トマト  ..初心者(6,636ポイント)   Date: 2010/06/30(水) 18:16   No:55601     
Title: Re:ファイルの読み書き    
すみません。
>while(--argc){ 
>を2回実行してるんですね
>1回目のwhileでargcは0になってますからだめですよ 

argcは0になっていました。

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


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

Name: トマト  ..初心者(6,647ポイント)   Date: 2010/06/30(水) 18:19   No:55602 解決!     
Title: Re:ファイルの読み書き    
解決いたしました。本当にありがとうございました

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



Name: toni  ..ぴよぴよ(48ポイント)   Date: 2010/06/30(水) 13:01   No:55563       
Title: 初歩的な質問ですが・・・    
初めまして、C言語初心者のtoniです。
早速ですが、館の「入門編」と「ゲーム基本」編に登場している
「透過処理した画像を表示」と「行けないところを作る2D」の質問ですが、
この両方のプログラムを実行させたい場合、どのようにコードを繋げれば宜しいでしょうか?
教えていただけると助かります。

返答お待ちしております。


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


Name: シエル  ..上級者(17,611ポイント)   Date: 2010/06/30(水) 13:13   No:55566     
Title: Re:初歩的な質問ですが・・・    
「行けないとこを作る」のコードで既に、透過処理をした画像の表示も行われておりますが…

具体的にどう分からないかを明確にしていただけると助かります。


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

Name: toni  ..ぴよぴよ(78ポイント)   Date: 2010/06/30(水) 13:17   No:55567     
Title: Re:初歩的な質問ですが・・・    
「行けないとこを作る」でどこが透過処理した画像を表示したコードの部分なのか判らないので
そこを教えていただけると幸いです。
透過処理した画像でつかった画像を使いたいんです。


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

Name: シエル  ..上級者(17,672ポイント)   Date: 2010/06/30(水) 13:20   No:55568     
Title: Re:初歩的な質問ですが・・・    
DrawGraph( ch.x , ch.y , ch.img , TRUE )

コードで言うと↑の部分です。

この第四引数をTRUEにすれば透過処理されます。
デフォルトでは、透過処理されるのは、限りなく黒に近い色か、画像に予め透過処理をしてある部分です。


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

Name: toni  ..ぴよぴよ(118ポイント)   Date: 2010/06/30(水) 13:28   No:55570     
Title: Re:初歩的な質問ですが・・・    
DrawGraph( ch.x , ch.y , ch.img , TRUE ) 

この部分を使いたい画像を引き出すように書き換えればいいんですか?


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

Name: シエル  ..上級者(17,745ポイント)   Date: 2010/06/30(水) 13:32   No:55571     
Title: Re:初歩的な質問ですが・・・    
int LoadGraph( char *FileName )
まず↑この関数で読み込みたいファイル名を指定して、読み込むと、
グラフィックハンドルというものが返ってきます。

そのハンドルを
DrawGraph( ch.x , ch.y , ch.img , TRUE ) の
第3引数に指定して、第四引数をTRUEにすると、透過処理されます。
一度やってみましょう。


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

Name: toni  ..ぴよぴよ(189ポイント)   Date: 2010/06/30(水) 13:34   No:55572     
Title: Re:初歩的な質問ですが・・・    
説明が下手なので整理すると

「行けない所を作る2D」のコードで背景は白黒ですよね、
これを「透過処理をした画像を表示」でつかったオレンジ色の背景に替えたいんです。
言葉足らずでしたらすみません;;


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

Name: toni  ..ぴよぴよ(209ポイント)   Date: 2010/06/30(水) 13:34   No:55573     
Title: Re:初歩的な質問ですが・・・    
試してみます@w@ノ

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

Name: toni  ..ぴよぴよ(264ポイント)   Date: 2010/06/30(水) 13:43   No:55574     
Title: Re:初歩的な質問ですが・・・    
int LoadGraph( char *FileName ) 

でたとえば back.bmpを参照したかったらどう打ち込めばいいでしょうか・・・
ほんとすみません(T T)


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

Name: シエル  ..上級者(17,962ポイント)   Date: 2010/06/30(水) 13:44   No:55575     
Title: Re:初歩的な質問ですが・・・    
オレンジ色の背景にしたければ、↓のように
白い壁を描画する前にオレンジ色の背景を描画するようにしてあげれば
良いです。
こうすれば、白い壁の部分以外はオレンジ色になります。

LoadGraphScreen( 0 , 0 , "back.bmp" , FALSE ) ;//オレンジ壁描画
                /*白い壁を描画*/
                for(i=0;i<15;i++)
                        for(j=0;j<20;j++)
                                if(hantei[i][j]==1) 
DrawBox(j*32,i*32,(j+1)*32,(i+1)*32,GetColor(255,255,255),TRUE);
 編集済み


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

Name: toni  ..ぴよぴよ(275ポイント)   Date: 2010/06/30(水) 13:46   No:55576     
Title: Re:初歩的な質問ですが・・・    
おおっ試してみます!

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

Name: シエル  ..上級者(18,106ポイント)   Date: 2010/06/30(水) 13:46   No:55577     
Title: Re:初歩的な質問ですが・・・    
>int LoadGraph( char *FileName )  
>↑ 
>でたとえば back.bmpを参照したかったらどう打ち込めばいいでしょうか・・・ 
>ほんとすみません(T T)

LoadGraph("back.bmp");
でいいです。


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

Name: toni  ..ぴよぴよ(307ポイント)   Date: 2010/06/30(水) 13:56   No:55579 解決!     
Title: Re:初歩的な質問ですが・・・    
おおっ、シエルさんできましたありがとうございます!
やっと一歩前進出来た気がします;w;


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



Name: みっちゃん  ..ぴよぴよ(906ポイント)   Date: 2010/06/30(水) 11:48   No:55555       
Title: このプログラムのmax_of関数の利点について教えてください    
このプログラムのmax_of関数の利点について教えてください 
#include <stdio.h> 

#define NUMBER 3 

int max_of(int vc[], int no) 

int i; 
int max = vc[0]; 
for (i = 1; i < no; i++) 
if (vc[i] > max) 
max = vc[i]; 
return (max); 


int min_of(int vc[], int no) 

int i; 
int min = vc[0]; 
for (i = 1; i < no; i++) 
if (vc[i] < min) 
min = vc[i]; 
return (min); 


int main(void) 

int i; 
int jap[NUMBER]; 
int mat[NUMBER]; 
int csi[NUMBER]; 
int sha[NUMBER]; 
int eng[NUMBER]; 
int max_j, max_m, max_c, max_s, max_e; 
int min_j, min_m, min_c, min_s, min_e; 

printf("%d人の点数を入力してください。\n", NUMBER); 
for (i = 0; i < NUMBER; i++) { 
printf("[%d] 国語:", i + 1); scanf("%d", &jap[i]); 
printf(" 数学:"); scanf("%d", &mat[i]); 
printf(" 理科:"); scanf("%d", &csi[i]); 
printf(" 社会:"); scanf("%d", &sha[i]); 
printf(" 英語:"); scanf("%d", &eng[i]); 


max_j = max_of(jap, NUMBER); 
max_m = max_of(mat, NUMBER); 
max_c = max_of(csi, NUMBER); 
max_s = max_of(sha, NUMBER); 
max_e = max_of(eng, NUMBER); 

min_j = min_of(jap, NUMBER); 
min_m = min_of(mat, NUMBER); 
min_c = min_of(csi, NUMBER); 
min_s = min_of(sha, NUMBER); 
min_e = min_of(eng, NUMBER); 

printf("国語の最高点:%3d、最低点:%3d\n", max_j, min_j); 
printf("数学の最高点:%3d、最低点:%3d\n", max_m, min_m); 
printf("理科の最高点:%3d、最低点:%3d\n", max_c, min_c); 
printf("社会の最高点:%3d、最低点:%3d\n", max_s, min_s); 
printf("英語の最高点:%3d、最低点:%3d\n", max_e, min_e); 

return (0); 
}


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


Name: パコネコ  ..入門者(3,624ポイント)   Date: 2010/06/30(水) 12:28   No:55560     
Title: Re:このプログラムのmax_of関数の利点について教えてください    
利点ですか?
意味はもっとも大きなものはどれかというものですよね。
何回も使うからプログラムが1行で済むし、楽ってことですか?
でもサブルーチンの利点になっちゃう…意味がよくわかりませんでした、すいません
ちなみに
min_ofはいいですか?同じようなものですよね…利点は


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



Name: RAKI  ..ぴよぴよ(634ポイント)   Date: 2010/06/27(日) 12:46   No:55391       
Title: ポインタへのポインタを使ってクイックソート    
[1] 初めてこのサイトを利用させてもらいます><
  初心者です。ポインタへのポインタを使ってquickSort関数を自分で作る学校の課題なのですが、 
  完成したとおもったらエラーがでてしまってどこが間違ってるかがよくわかりません。。
  

[1.1] 教科の合計点(sum)をクイックソートを用いて高→低順に並べていきたい。
[1.2] #include <stdio.h>
#include <stdlib.h>
struct student{
    int number;
    int math;
    int eng;
    int phy;
    int sum;
    struct student *next;
};
typedef struct student Student;
void swap(Student **x, Student **y);
void quickSort(Student **sort, int first, int c);
int main(void)
{
    Student *top,**sort,**sortTop,*tmp;
    char line[80];
    int count=0,a=0;    
    top=(Student *)malloc(sizeof(Student));
    top->number=-1; top->math=-1; top->eng=-1; top->phy=-1; top->sum=-1;
    top->next=NULL;

    while(fgets(line,sizeof(line),stdin)!=NULL){
    tmp=(Student *)malloc(sizeof(Student));
    if(tmp==NULL){
        fprintf(stderr,"No more memory...\n");
        return(1);
    }
    count++;
    tmp->next=top->next;
    top->next=tmp;
    sscanf(line,"%d,%d,%d,%d",
           &(tmp->number),
           &(tmp->eng),
           &(tmp->math),
           &(tmp->phy));&(tmp->number),
    tmp->sum=(tmp->eng)+(tmp->math)+(tmp->phy);
    }
    sort=(Student **)malloc((count+1)*sizeof(Student *));
    sortTop=sort;
    tmp=top->next;
    while(tmp!=NULL){
    *sort=tmp;
    tmp=tmp->next;
    sort++;
    }    
        sort=NULL;
        sort=sortTop;
    
    quickSort(sort,a,count);
    
    sort=sortTop;
    while(*sort!=NULL){
    fprintf(stdout,"%8d\t%3d\t%3d\t%3d\t%3d\n",
        (*sort)->number,
        (*sort)->eng,
        (*sort)->math,
        (*sort)->phy,
        (*sort)->sum);
    sort++;
    }
    return(0);
}

void quickSort(Student **sort, int first, int c)
{
    Student **t1,**t2,**pivot;
    int left,right;
    left=first;
    right=c;
    t1=sort+first;
    t2=sort+c;
    pivot=sort+(c/2);
    
    while(1){
    while(((*t1)->sum)<((*pivot)->sum)){
        t1++;
        first++;
    }
    while(((*pivot)->sum)<((*t2)->sum)){
        t2--;
        c--;
    }
    if(t1 >= t2){
        break;
    }
    swap(t1,t2);
    t1++;
    t2--;
    first++;
    c--;
    }
    if(left<first-1){
    quickSort(sort,left,first-1);
    }  
    if(c+1<right){
    quickSort(sort,c+1,right);
    }
    return;
}
void swap(Student **x, Student **y)
{
    Student *tmp;
    tmp=*x;
    *x=*y;
    *y=tmp;
    return;
}

 [1.3] このCソースをコンパイルした場合のコンパイルエラーが
    6[main]a 9272_cygtls::handle_exceptions:Error while dumping state
        (probably corrupted stack)
    とでます。

どうしてこのようなコンパイルエラーがおきるのか、
またこの方法でのクイックソートは間違っていないのかを指導してもらえると助かります。
    


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


Name: たいちう  ..比類無きプログラマー(99,910ポイント)   Date: 2010/06/27(日) 13:15   No:55393     
Title: Re:ポインタへのポインタを使ってクイックソート    
まずコンパイルエラーではなく、実行時エラーが出るようです。

ちゃんと見てないけど、実行時エラーの原因は、この部分。
t1=sort+first;
t2=sort+c; 
まるで配列のように扱っていますが、mallocで別々に取得した構造体の
アドレスが、sizeof(Student)の間隔で並んでいることを期待するのが
間違いです。アドレスを表示して確認してください。
sortからt1を求めるには、リンクを順番に辿りましょう。

それとmallocで確保したメモリーはちゃんとfreeしましょう。


ついでにデバッグしやすいような工夫を1つ。
実行するたびに数値を入力するのは面倒なので、

--- data.txt ---
1,50,60,70
2,45,50,55
3,20,30,45

というものを用意し、

FILE *fp = fopen("data.txt", "r");

こうして、

//while(fgets(line,sizeof(line),stdin)!=NULL){
while(fgets(line,sizeof(line),fp)!=NULL){

こうします。


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

Name: たいちう  ..比類無きプログラマー(99,923ポイント)   Date: 2010/06/27(日) 13:27   No:55394     
Title: Re:ポインタへのポインタを使ってクイックソート    
> ちゃんと見てないけど、実行時エラーの原因は、この部分。

申し訳ない、肝心の↑の部分は勘違いのようです。
後で時間が取れたらまた書きこみます。


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

Name: ISLe  ..ぴよぴよ(809ポイント)   Date: 2010/06/27(日) 15:36   No:55402     
Title: Re:ポインタへのポインタを使ってクイックソート    
> RAKI さん

quickSortに入って最初にt2が指しているところがどうなっているかをよーく考えてみてください。


> たいちう さん

> FILE *fp = fopen("data.txt", "r"); 
> こうして、 
> //while(fgets(line,sizeof(line),stdin)!=NULL){ 
> while(fgets(line,sizeof(line),fp)!=NULL){ 
> こうします。

プログラム変更せずに

./a < data.txt

と実行するほうが楽じゃないでしょうか?


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

Name: たいちう  ..ハッカー(100,000ポイント)   Date: 2010/06/27(日) 17:18   No:55409     
Title: Re:ポインタへのポインタを使ってクイックソート    
> プログラム変更せずに

> ./a < data.txt

> と実行するほうが楽じゃないでしょうか?

実行だけならば良いのですが、デバッガを使おうと思うと、
プロジェクトのプロパティの設定をいじらないといけません。
(私が今使っているVC++EE2008の場合)

RAKIさんの開発環境も、それをどの程度使いこなしているレベルも
分からないので、プログラムの変更の方がフォローが楽だと思いました。


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

Name: RAKI  ..ぴよぴよ(698ポイント)   Date: 2010/06/28(月) 00:05   No:55437     
Title: Re:ポインタへのポインタを使ってクイックソート    
みなさんアドバイスありがとうございます><
いちよアドバイスしてくださったところを考えていろいろやってはみたのですけど
どうもまだうまく動かなくて^^;
もう少しいろいろ考えて粘ってみます><b


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

Name: RAKI  ..ぴよぴよ(824ポイント)   Date: 2010/06/28(月) 02:38   No:55440     
Title: Re:ポインタへのポインタを使ってクイックソート    
> たいちう さん
--- data.txt --- 
1,50,60,70 
2,45,50,55 
3,20,30,45 
を作って実行してみました。
楽に実行できたのでためになりました!
ありがとでした。

> ISLe さん

quickSortに入って最初にt2が指しているところを考えたのですが、
NULLが入ってるのでしょうか・・・?

それと
./a < data.txt 
と実行したらできました^^
ありがとでした。 
 
  編集済み


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

Name: たいちう  ..ハッカー(100,190ポイント)   Date: 2010/06/30(水) 09:37   No:55553     
Title: Re:ポインタへのポインタを使ってクイックソート    
> quickSortに入って最初に t2が指しているところを考えたのですが、
> NULLが入ってるのでしょうか・・・?
quickSort(sort,a,count);
↓
void quickSort(Student **sort, int first, int c)
{
    ...
    t2=sort+c;
    ...
    while(((*pivot)->sum)<((*t2)->sum)){

データが3件の場合、
sort[0] ... 1人目のデータ
sort[1] ... 2人目のデータ
sort[2] ... 3人目のデータ
となりますが、sort+cは、4人目のデータを指しています。


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



Name: シエル  ..上級者(16,473ポイント)   Date: 2010/06/28(月) 15:39   No:55455       
Title: DirectXプログラミングでの自由変形描画について    
いつもお世話になります。

DirectxのID3DXSpriteを使って2D描画を行いゲームを作成しているのですが、
拡大や回転などはできるものの、画像を自由に変形して描画することが出来ません。
ここで言っている自由変形とは、DXライブラリで言うとDrawModiGraph関数を使った描画のようなことです。
ID3DXSpriteでは、画像を自由に変形して描画することは不可能なのでしょうか?

また、不可能であれば、他の方法を教えてください。
(このインターフェースを使って、〜して描画する。等)

あと、各ドットの明るさを加算する方法をご存知の方がいらっしゃれば、教えていただけると助かります。

DirectXに限った回答をお願い致します。
他のライブラリ等を使うことは考えていません。

投げやりで申し訳ございませんが、よろしくお願い致します!


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


Name: ISLe  ..ぴよぴよ(891ポイント)   Date: 2010/06/28(月) 16:46   No:55461     
Title: Re:DirectXプログラミングでの自由変形描画について    
> また、不可能であれば、他の方法を教えてください。
> (このインターフェースを使って、〜して描画する。等)

テクスチャを貼ったポリゴンを変形という方法になります。
いろいろ状況に応じた前後処理が必要なので説明が難しいです。

"DrawPrimitiveUp スプライト"
"DrawIndexedPrimitiveUp スプライト"
といったキーワードで検索してみてください。


> あと、各ドットの明るさを加算する方法をご存知の方がいらっしゃれば、教えていただけると助かります。

"SetRenderState 加算合成"
のキーワードで検索してみてください。


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

Name: ideyan  ..中級者(9,756ポイント)   Date: 2010/06/28(月) 16:56   No:55462     
Title: Re:DirectXプログラミングでの自由変形描画について    
私もスプライトを使って色々試してみてますが
自由変形描画の方法は分かりませんでしたので、
そこだけは別の方法を使って実装しています。

1.▲ポリ2枚で1枚の■ポリを用意する。
2.それにテクスチャを貼って描画する。

座標変換済みの頂点を使えば2D座標で扱えるのでそこそこ便利だと思います。

△ポリ2枚なので添付画像(画面は800*600)のように微妙に歪な変形になるのがちょっと残念です。
(もっと細かくわければそれらしくなるとは思います)

とりあえず、自分のライブラリから該当部分の実装方法だけを
抜き出してきました。
見にくくて申し訳ないですが、よろしければご参考までに。

#長々と書いてる間にレスがついてしまいました^^;


#define MY_VER_FVF3 (D3DFVF_XYZRHW|D3DFVF_DIFFUSE|D3DFVF_TEX1) //モード設定

typedef struct textureImage{
    IDirect3DTexture9 *pTex;//←今回はこれが必要
    float as_width,as_height;
    D3DXVECTOR3 Center;
    int width,height;
    int usage;
    textureImage():pTex(NULL){}
} Img;

typedef D3DXVECTOR3 VEC3;
typedef D3DXVECTOR2 VEC2;

//頂点データの構造体
typedef struct myVertexC{
    VEC3 p;
    float rhw;
    DWORD col;
    VEC2 t;
}mVC;

void drawMod2d(Img *img,VEC2 *vec){
    static mVC vb[4]={
        {VEC3(0,0,0),1.0f,D3DXCOLOR(1.0f,1.0f,1.0f,1.0f),VEC2(0.0f,0.0f)},
        {VEC3(0,0,0),1.0f,D3DXCOLOR(1.0f,1.0f,1.0f,1.0f),VEC2(1.0f,0.0f)},
        {VEC3(0,0,0),1.0f,D3DXCOLOR(1.0f,1.0f,1.0f,1.0f),VEC2(0.0f,1.0f)},
        {VEC3(0,0,0),1.0f,D3DXCOLOR(1.0f,1.0f,1.0f,1.0f),VEC2(1.0f,1.0f)},
    };
    //左上座標
    vb[0].p.x=vec[0].x;
    vb[0].p.y=vec[0].y;
    //右上
    vb[1].p.x=vec[1].x;
    vb[1].p.y=vec[1].y;
    //左下
    vb[2].p.x=vec[2].x;
    vb[2].p.y=vec[2].y;
    //右下
    vb[3].p.x=vec[3].x;
    vb[3].p.y=vec[3].y;

    pDevice->SetFVF(MY_VER_FVF3);
    pDevice->SetTexture(0,img->pTex);
    pDevice->SetTextureStageState(0,D3DTSS_COLORARG1,D3DTA_TEXTURE);
    pDevice->SetTextureStageState(0,D3DTSS_COLOROP,D3DTOP_SELECTARG1);
    pDevice->DrawPrimitiveUP(D3DPT_TRIANGLESTRIP,2,vb,sizeof(mVC));
    
}


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

Name: シエル  ..上級者(16,349ポイント)   Date: 2010/06/28(月) 17:20   No:55463 解決!     
Title: Re:DirectXプログラミングでの自由変形描画について    
>>ISLeさん
回答ありがとうございます!
これだけでも十分です。グググらせていただきます!

>>ideyanさん
詳しい説明ありがとうございます!
画像まで添付していただいて…、ありがとうございます。
貼っていただいたコードも参考にさせていただきます!

後は何とか自分で対応しますが、何か効果的な方法をご存知の方が
いらっしゃれば、回答お願い致します! 編集済み


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

Name: ISLe  ..かけだし(1,035ポイント)   Date: 2010/06/28(月) 17:46   No:55465     
Title: Re:DirectXプログラミングでの自由変形描画について    
> △ポリ2枚なので添付画像(画面は800*600)のように微妙に歪な変形になるのがちょっと残念です。
> (もっと細かくわければそれらしくなるとは思います)

それは頂点数とは関係ないと思います。
詳しくは↓の記事を。

テクセルとピクセル間の直接マッピング
http://msdn.microsoft.com/ja-jp/library/cc373047.aspx

変換済み座標を使う場合スクリーン座標すべて-0.5fすれば歪まなくなるはずです。

テクスチャ座標を+(0.5f/[テクスチャサイズ])しても良いようです。


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

Name: シエル  ..上級者(16,997ポイント)   Date: 2010/06/29(火) 09:23   No:55494     
Title: Re:DirectXプログラミングでの自由変形描画について    
すいません。追加で質問させて下さい。

ググって色々調べてみたところ、
自分で定義した、座標変換済み頂点の配列をDrawPrimitiveUpに渡して描画する方法と、
CreateVertexBufferで頂点バッファを作成し、メモリをロックしてバッファに頂点配列を書き込み、
DrawPrimitiveで描画する方法の二つがありました。

どちらの方法を使用して描画する方が効率が良いのでしょうか?
それぞれのメリット、デメリットがあれば、教えていただけると助かります。


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

Name: ISLe  ..ぴよぴよ(745ポイント)   Date: 2010/06/29(火) 17:51   No:55508     
Title: Re:DirectXプログラミングでの自由変形描画について    
頂点バッファはグラボのVRAM上に作成されると期待できるので、いったん大量の頂点を転送したあと部分的に更新するような用途で高速化を見込めます。

DrawPrimitiveUpは毎回頂点バッファを作成して転送を行うのでオーバーヘッドが大きいと考えられます。

ただしスプライト用途では座標が大きく変化します。
DrawPrimitiveUpは実際にVRAMに転送されるまでのあいだに最適化が働きます。
自前で頂点バッファを管理してもさほど高速になりません。
スプライト用途に限ってはプログラムコードも見易くなるDrawPrimitiveUpがお勧めです。

あと高速化のために、SetFVF、SetTexture、Set〜State、等をできるだけまとめて、DrawPrimitiveUpを連投するようにしてください。
属性の切り替えはとても時間のかかる処理です。
環境にもよりますが毎回SetTextureしないようにするだけで3倍くらい速くなることもあります。


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

Name: シエル  ..上級者(17,147ポイント)   Date: 2010/06/29(火) 18:38   No:55510     
Title: Re:DirectXプログラミングでの自由変形描画について    
お忙しいところ回答ありがとうございます!
座標がさほど変化しないようであれば、頂点バッファを作成して描画し、
座標が大きく変化するようであれば、DrawPrimitiveUpを使います!

属性の切り替えについても、呼び出すタイミングや回数について悩んでいるところでした。。。
アドバイスありがとうございます。できるだけまとめて回数を減らします。

で、書いてる間にちょっと気になったのですが、
一般的に、Directxで2Dのゲームを作成するときの描画方法として、

・スプライトで表現できる描画であれば、基本的にスプライトで描画。
・複雑な描画であれば、ポリゴンにテクスチャを貼って描画。

というような感じで、皆さんはゲームを作成されているのでしょうか?

何度も追加質問で申し訳ございません。よろしくお願い致します!


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

Name: ISLe  ..ぴよぴよ(942ポイント)   Date: 2010/06/30(水) 02:02   No:55543     
Title: Re:DirectXプログラミングでの自由変形描画について    
> 座標がさほど変化しないようであれば、頂点バッファを作成して描画し、
> 座標が大きく変化するようであれば、DrawPrimitiveUpを使います!

「さほど」「大きく」というのは数値の大小ではなくてデータ量の話です。
とりあえずUP系を使うようにして使い分けは考えなくて良いと思いますよ。

例えば3Dゲームの舞台となる地形のデータはおおかたずっと変化しませんよね。
そういうデータをビデオメモリに置きっぱなしにすることで転送コストを減らすわけです。


> ・スプライトで表現できる描画であれば、基本的にスプライトで描画。
> ・複雑な描画であれば、ポリゴンにテクスチャを貼って描画。

スプライトとポリゴンの違いって何でしょう?
背景で3D描画するときとかはもちろんポリゴンなんですけど。
変換済み頂点使うのとビルボードとの違いってところでしょうか。


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

Name: シエル  ..上級者(17,555ポイント)   Date: 2010/06/30(水) 09:22   No:55549     
Title: Re:DirectXプログラミングでの自由変形描画について    
ISLeさん、返答ありがとうございます。
頑張って作成していきます!

#DirectXのヘルプすごい分かりづらいですね…


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



Name: sattch  ..ぴよぴよ(248ポイント)   Date: 2010/06/28(月) 23:03   No:55486       
Title: C++で○×ゲーム    
C++初心者です。

C++で○×ゲームを作っているのですが、コンピュータと対戦出来るようにしたいのですがどうすればよろしいでしょうか。

ソースプログラム
http://codepad.org/wfwkEbVP

実行結果としてはこんな感じにしたいです。

1Pと2Pとの交互に対戦しますか?
1Pとコンピュータとの対戦にしますか?
プレイヤ同士の対戦なら1を、コンピュータとの対戦なら2を入力してください:
こんな感じで選らばせて対戦できるようにしてほしいです。 

※プレイヤ1は○、プレイヤ2とコンピュータは×を表示させるようにしたいです。
コンピュータのAIは単純にしたいです。

どなたか教えてください。お願いします。


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


Name: Ma  ..ハッカー(104,711ポイント)   Date: 2010/06/29(火) 07:25   No:55489     
Title: Re:C++で○×ゲーム    
1.ループの最初の時に対戦モード選択させる。
2.1でプレイヤーを相手に選んだのなら、いまのまま。
  コンピューターを選んだのなら、get_pos に代わる関数(自動的にどこにするかを決める関数)を作ってそれを呼ぶ。
3.get_posに代わる関数内に簡易なAI(?)を作る。(例:優先順位1ふたつならんでいるなら3つ目を作る。2ひとつすでにおいてあってそれに続く開いているマス、あるいは一個とばしのマスに二つ目を置く。3どこもリーチにできないなら角をせめてみる。4角もあいていないならランダム。)


以上の3ステップでできるのではないかと思います。

まだどうすればいいのかわからない場合は質問を具体的にしてください。 編集済み


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

Name: sattch  ..ぴよぴよ(478ポイント)   Date: 2010/06/29(火) 22:09   No:55531     
Title: Re:C++で○×ゲーム    
>>(例:優先順位1ふたつならんでいるなら3つ目を作る。2ひとつすでにおいてあってそれに続く開いているマス、あるいは一個とばしのマスに二つ目を置く。3どこもリーチにできないなら角をせめてみる。4角もあいていないならランダム。)

プログラムにする際どうやって書けばいいのか分からなくなって殆ど乱数でしていするようになってしまいました。。。。。

http://codepad.org/2VItJ1Bt


それと先手後手をジャンケンで決めるようにしたいのですが、どういう感じにプログラム書けばいいのか教えてほしいです。


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



Name: シノニム  ..初心者(5,625ポイント)   Date: 2010/06/27(日) 22:54   No:55430       
Title: ゲームパッド対応のゲームを作っています    
いつもお世話になっております。シノニムです

現在ゲームパッド(PS2用コントローラー・DUAL SHOCK2)をつかったゲームを作成しています
いざゲームの操作を家でやろうとしたら、十字キーのみが反応してくれません
コントロールパネルから見てみると、しっかり入力は受け取っている様子でした

学校で貸出しているパッドではしっかりと十字キーも動いていて、コンバータも同じものを使用しています
ネットで検索するも、なかなか求めていた答えが見当たらないので質問させていただきました

OS:windows XP
環境:Visual C++

解決方法などご存知の方いましたら、アドバイスください


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


Name: 迷彩吹雪  ..かけだし(1,986ポイント)   Date: 2010/06/29(火) 12:51   No:55497     
Title: Re:ゲームパッド対応のゲームを作っています    
自分は「ELECOM JC-U2312FSV」を使っていますが、同じような現象に遭遇しています。
やはり十字キーが反応せず、ゲームでは使用していないアナログスティックを動かすと反応します。
しかしこのゲームパッドは「ANALOG」というボタンがついていて、これを押すとアナログモードからデジタルモードに切り替わります。
すると、十字キーが反応するようになりました。
(その代わりアナログスティックには別ボタンの機能が割り振られました)

このゲームパッドはアナログモードでは十字キーにPOVなる機能が割り振られているようです。
Point of Viewの略らしいですが……すみません、よくわかりません(私も今調べたので)。
この現象はハットスイッチ問題などと呼ばれているようです。
もしかするとこれかも知れませんね。

具体的な解決法でなくてすみません。
私は上述の方法で満足してしまっているので……。


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

Name: toyo  ..熟練のプログラマー(50,304ポイント)   Date: 2010/06/29(火) 13:13   No:55498     
Title: Re:ゲームパッド対応のゲームを作っています    
DXライブラリですよね
GetJoypadPOVState( )関数で取得できるようです
Dxlib.hより
extern    int GetJoypadPOVState( int InputType, int POVNumber ) ;                        // ジョイパッドのPOV入力の状態を得る( 単位は角度の100倍  中心位置にある場合は -1 が返る )

int Pov;
Pov = GetJoypadPOVState( DX_INPUT_PAD1, 0 );
のようにしてPovが
0:上 
4500:右上 
9000:右
のように判断すればよさそうです


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



Name: 初心者  ..熟練のプログラマー(49,583ポイント)   Date: 2010/06/28(月) 09:48   No:55442       
Title: a    
編集済み

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


Name: fatens  ..中級者(14,363ポイント)   Date: 2010/06/28(月) 11:00   No:55444     
Title: Re:3次元配列を用いたジャンケンプログラム    
コンパイルエラーの文章は読みましたか?
1. char *massege[] = {"user の勝ち","userの負け","引き分け"};     ←messageの綴りミス
2. printf("じゃんけんぽん\n0がグー\n1がチョキ\2がパー\n")    ←セミコロンがない
3. if (user < 0 || user > END) {    ←ENDが定義されていない


エラーしか見ていませんでしたが、根本的な間違いが多いように思います。
もう一度作り直してみてはどうでしょうか。

 編集済み


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

Name: fatens  ..中級者(14,781ポイント)   Date: 2010/06/28(月) 11:31   No:55446     
Title: Re:3次元配列を用いたジャンケンプログラム    
上にも書きましたが、コンパイルエラーを消しても、このプログラムでは正常に動作しません。
プログラムの仕様を説明してもらえると指摘しやすいです。

それといくつか確認を。
1. 3次元配列を使う必要があるのか
2. 多次元配列へのアクセスの方法が理解できているか
3. printf 関数の使い方が理解できているか(\2はともかく%sの意味)


あと、初心者というお名前は重複していますので、ユニークなものに変更するようにしてください。


追記
int te[3][3] = {{2,1,0},
                {0,2,1},
                {1,0,2}};
これは2次元配列ですね。見間違いました。
ということで1,2は無視してください。
 編集済み


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

Name: TKOZ  ..熟練のプログラマー(68,500ポイント)   Date: 2010/06/28(月) 17:30   No:55464     
Title: Re:3次元配列を用いたジャンケンプログラム    
過去のスレッドで私が作ったプログラムを改良してみてはどうでしょうか?

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

#define GUU 0
#define CYOKI 1
#define PAA 2

int main(void)
{
    char Guu[3][20]={"アイコです。","勝ちです。","負けです。"};
    char Cyoki[3][20]={"負けです。","アイコです。","勝ちです。"};
    char Paa[3][20]={"勝ちです。","負けです。","アイコです。"};
    char janken[3][20]={"グー","チョキ","パー"};
    int input,com;
    printf("じゃんけんゲームです。\n");
    srand(time(NULL));
    while(1)
    {
        printf("手を入力してください。\n(0:グー,1:チョキ,2:パー)->");
        scanf("%d",&input);
        com=rand()%3;
        printf("コンピュータは%sを出しました。\n",janken[com]);
        if(input==GUU){printf("%s\n",Guu[com]);}
        else if(input==CYOKI){printf("%s\n",Cyoki[com]);}
        else if(input==PAA){printf("%s\n",Paa[com]);}
    }
        
}



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

Name: 初心者高校生  ..ぴよぴよ(115ポイント)   Date: 2010/06/28(月) 19:49   No:55466     
Title: Re:3次元配列を用いたジャンケンプログラム    
fatensさんが指摘してくれた通りにしてみたら、コンパイルはできました。
が、最後の

printf("あなたの手:%s\n", te[user]);
printf("私の手:%s\n", te[com]);

でうまくジャンケンの手が表示してくれませんでした。やはり、%sの理解不足ということなのでしょうか。

追記
プログラムの仕様ですがルックアップテーブルというものを使ってソースファイルを簡単化するというものです。
3次元配列ではなくて2次元配列というのですね。
他は特には言われていません。 編集済み


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

Name: シエル  ..上級者(16,373ポイント)   Date: 2010/06/28(月) 19:55   No:55467     
Title: Re:3次元配列を用いたジャンケンプログラム    
%sは文字列を表示するためのものですよ。

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

Name: 初心者高校生  ..ぴよぴよ(201ポイント)   Date: 2010/06/28(月) 20:01   No:55468     
Title: Re:3次元配列を用いたジャンケンプログラム    
>>TKOZさん
ありがとうございます。参考にさせていただきます。

>>シエルさん
ですよね。
そうでしたら上記のソースファイルで間違ってはいないような気がするのですが。
ご指摘の方お願いいたします。


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

Name: シエル  ..上級者(16,386ポイント)   Date: 2010/06/28(月) 20:32   No:55472     
Title: Re:3次元配列を用いたジャンケンプログラム    
では、teっていう配列は何型ですか?

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

Name: 初心者高校生  ..ぴよぴよ(227ポイント)   Date: 2010/06/28(月) 20:39   No:55474     
Title: Re:3次元配列を用いたジャンケンプログラム    
>>シエルさん
2次元ですよね。スレタイを間違えてしまいました。


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

Name: シエル  ..上級者(16,509ポイント)   Date: 2010/06/28(月) 20:41   No:55475     
Title: Re:3次元配列を用いたジャンケンプログラム    
いやそうではなくて、何型かを聞いてるんですが…
int型とかdouble型とかのことです。


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

Name: Dixq (管理人) [URL]  ..ウィザード(1,229,448ポイント)   Date: 2010/06/29(火) 07:27   No:55490     
Title: Re:3次元配列を用いたジャンケンプログラム    
> 初心者高校生さん

記事を削除するのは規約違反になってしまいます。
ですので説明無く削除された記事は元に戻すことになっています。
どうして削除されたのでしょうか?
もしもう解決されたのでしたらせめて回答して下さった方々にお礼を言ってトピックを閉じて下さい。


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



Name: わふー  ..ぴよぴよ(898ポイント)   Date: 2010/06/26(土) 11:33   No:55302       
Title: ゲームパッドのクラス設計について    
こんにちは。
お世話になります。

私はゲームを作っています。
そのゲームではパッド(コントローラ)を使いますので、パッドの入力を検知したいです。
そのためにパッド用クラスCPadを作ったのですが、このクラスをゲーム本体クラスに対してどう使っていったらいいか悩んでます。

ゲーム本体は、CGameクラスを作り、WinMain関数中に
CGame game = new CGame();
game->run();
と記述するだけで動くようにしています。
肝心のゲーム内容は、CRPGだったりCShootingだとかのクラスをCGameクラス内で持ち、同様に
void CGame::Run(){
 rpg->run();
}
というようにしています。(実際にはCGame::Runはもっと複雑ですが、色々と省略しています。)

このような構造をしている場合、CPadをCGameに持たせるべきか、グローバルにするべきか、迷っています。
CGameクラスに持たせた方が意味的には合ってる(パッドなんてゲーム以外使わない……)気がします。ですが、そうしますと、CRPGには(作るRPGではパッドを使うので)CGameクラスへの参照が必要になり、更にCRPGの中に色々なクラスを作ると、それらのクラスの中でパッドを使う操作をするクラスは全てCGameへの(直接または間接的な)参照を持っていなければならなくなってしまいます。


そこで、皆様の場合、CPadクラスはどういう扱いにされますか?
よろしくお願いいたします。


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


Name: わふー  ..ぴよぴよ(936ポイント)   Date: 2010/06/26(土) 11:34   No:55303     
Title: Re:無題    
またタイトル忘れ;
何度もすいません。。。


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

Name: わふー  ..かけだし(1,223ポイント)   Date: 2010/06/26(土) 11:55   No:55304     
Title: Re:無題    
ってこれ、CPadクラスの内容がまったくないですね。
申し訳ありません。


内容としては、

class CPad
{
public:
        // 各ボタンの状態(ボタンを押し続けている時間)保持用変数
        // 名前が思いっきりスーファミコントローラなのは仕様です
    int Up;
    int Down;
    int Left;
    int Right;

    int A;
    int B;
    int X;
    int Y;
    int L;
    int R;
    int Start;

        void Run(); // 入力をチェックし、各ボタンの値を更新
};

という感じです。
Run()をメインループ内の先頭で行い、毎フレーム各ボタンの値を更新します。

他のクラスなどから入力された値を参照する場合は、例えば、
if ( pad.A ) jump(); // Aを押したらジャンプする
といったような使い方をします。


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

Name: MNS  ..プログラマー(37,394ポイント)   Date: 2010/06/26(土) 12:32   No:55306     
Title: Re:無題    
私だったら、グローバル変数ないしはシングルトンクラスにするでしょうね。
いずれにせよ、CPadのメンバが全てpublicであることは見直すべきです。


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

Name: ぽこ  ..上級者(17,070ポイント)   Date: 2010/06/26(土) 12:39   No:55308     
Title: Re:無題    
質問が2点あります。
・CGameクラスの役割は何でしょうか?CRPGクラスの役割は何でしょうか?
 #パッと見ると、CGameクラスは何もしていない様に見えます。

・「それらのクラスの中でパッドを使う操作をするクラスは全てCGameへの(直接または間接的な)参照を持っていなければならなくなってしまいます。」とありますが、問題点は何でしょうか?


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

Name: Justy  ..伝説なるハッカー(548,653ポイント)   Date: 2010/06/26(土) 12:43   No:55309     
Title: Re:無題    
>CPadをCGameに持たせるべきか、グローバルにするべきか
 パッドそのものはゲームとは何ら関係ないただのデバイスですので 
グローバル的な扱い(シングルトンとか)でいいと思います。

 CGameがどういうものなのか正確に把握できていませんが、仮に何かのクラスに持たせるとしたら
「右移動キーが押された」「ジャンプキーが押された」「決定キーが押された」という情報を扱うクラスでしょう。

 つまりプログラム的には「Aボタンが押されたからジャンプする」じゃなくて、
「ジャンプボタンが押されたからジャンプする」ようにするということです。

 こういうクラスならゲーム全体(?)だと思われる CGameや、或いはもっと下のプレイヤークラスとか
タイトルメニューのクラスが持っていてもおかしくないと思います。


 ところで、

>CPadクラスの内容
 この設計だと外部から無制限に各ボタンの状態を外部の都合で変更できるようですが、問題ないですか?
 又これだと1つしかパッドの情報が参照できないのですけど、複数パッドがあった場合とか
どうするのでしょうか?


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

Name: わふー  ..かけだし(2,499ポイント)   Date: 2010/06/26(土) 13:52   No:55312     
Title: Re:無題    
ありがとうございます。

とりあえず色々な箇所でご指摘の多いCGameクラスの説明をさせていただきたいと思います。
これはウィンドウのサイズを記述したり、ウィンドウを生成したり、ゲームのタイトルを記述(ウィンドウの上の方に出る文字列ですね)したり、使うゲーム用ライブラリの初期化……といったことをします。
どんなジャンルのゲームでも共通の処理はあると思いますので、それをまとめております。
ですが、ここでCGameの名前を出すのは無意味かもしれませんね。
省略すれば良かったと反省しております。申し訳ありません。
ですので、話の簡略のため、CRPGやCShootingといったクラスが根っこの部分になると考えていただければ問題ないと思います……たぶん。
(でも、CGameクラスもまとめてシングルトンにしてしまえばいいのかな……とか思ったり思ったり)


>いずれにせよ、CPadのメンバが全てpublicであることは見直すべきです。
>この設計だと外部から無制限に各ボタンの状態を外部の都合で変更できるようですが、問題ないですか? 
各ボタンの値を自クラス以外から変更することは、まずないと思います。
ですので、まさか余所で値を変更することなんてないだろうと踏んでしまい、そこまで考えておりませんでした。
全ての値をprivateにして、
int getState[ボタン名]()
とか
int getState(int button)
とかにすればいいですかね……?


>・CGameクラスの役割は何でしょうか?CRPGクラスの役割は何でしょうか?
> #パッと見ると、CGameクラスは何もしていない様に見えます。 
上記の通りです。
申し訳ありません。


>・「それらのクラスの中でパッドを使う操作をするクラスは全てCGameへの(直接または間接的な)参照を持っていなければならなくなってしまいます。」とありますが、問題点は何でしょうか?
まず、CGameをCRPGに置き換えさせて下さい。(CRPGがCPadを持っていることになります。)
んで。
例えば、キャラがジャンプするためのクラスCCharaJumpを作るとしましょう。
このクラスからしたら、パッドの入力は検知したいが、RPGに関する他の部分の情報は必要ありません。
ただ「ボタンが押されたらjump()を実行する」ためのクラスですので、キャラのHPは要りません。
ですので、隠蔽が上手くできてないのではないかと感じてしまうのです。


> パッドそのものはゲームとは何ら関係ないただのデバイスですので 
まったくその通りですね。




> CGameがどういうものなのか正確に把握できていませんが、仮に何かのクラスに持たせるとしたら
>「右移動キーが押された」「ジャンプキーが押された」「決定キーが押された」という情報を扱うクラスでしょう。
> つまりプログラム的には「Aボタンが押されたからジャンプする」じゃなくて、
>「ジャンプボタンが押されたからジャンプする」ようにするということです。 
すいません、私にとっては難しく、意味があまり分かりません。
これは、Padをグローバル的な扱いにした上で、例えば、
if ( pad.A ) jump(); // A を押したらジャンプする 
ではなく、
if ( jumpButton() ) jump();
と言う風にするということでしょうか。
いずれにしても、
int jumpButton(){
 return pad.A;
}
というのが必要になり、「pad.A」の「pad」の部分はどうなるのか、という話になってしまいますが……。
なんだか私がすごい勘違いしてそうですね。すいません。


>これだと1つしかパッドの情報が参照できないのですけど、複数パッドがあった場合とかどうするのでしょうか? 
論点ではないので、省略させていただきました。(実際には、このクラスのコンストラクタにどのパッドを検知対象にするのかという情報を得て対応しております。)
ですが、こういうとこもご指摘を下さる風潮がココにあるのでしたら、あまり省略しない方が良いのかもしれませんね。





ご返信ありがとうございます。


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

Name: ぽこ  ..上級者(17,676ポイント)   Date: 2010/06/26(土) 14:22   No:55317     
Title: Re:無題    
> > CGameがどういうものなのか正確に把握できていませんが、仮に何かのクラスに持たせるとしたら
> >「右移動キーが押された」「ジャンプキーが押された」「決定キーが押された」という情報を扱うクラスでしょう。
> > つまりプログラム的には「Aボタンが押されたからジャンプする」じゃなくて、
> >「ジャンプボタンが押されたからジャンプする」ようにするということです。 
> すいません、私にとっては難しく、意味があまり分かりません。
> これは、Padをグローバル的な扱いにした上で、例えば、
> if ( pad.A ) jump(); // A を押したらジャンプする 
> ではなく、
> if ( jumpButton() ) jump();
> と言う風にするということでしょうか。
> いずれにしても、
> int jumpButton(){
>  return pad.A;
> }
> というのが必要になり、「pad.A」の「pad」の部分はどうなるのか、という話になってしまいますが……。
> なんだか私がすごい勘違いしてそうですね。すいません。


大体あっていると思います。各クラスの役割は何なのってハナシです。
何通りかのパターンが考えられます。
・パターン(A)
人間→(Aを押す)→CPad(Aが押されたよ)→CGame(Aが押されたよ)→CRPG(決定だってさ)→CRPGSub(決定が押された時の処理をする)
                                           →CAction(ジャンプだってさ)→CActionSub(ジャンプ時の処理をする)

・パターン(B)
人間→(Aを押す)→CPad(Aが押されたよ)→CGame(決定だってさ)→CRPG(決定だってさ)→CRPGSub(決定が押された時の処理をする)
                                           →CAction(決定だってさ)→CActionSub(決定時の処理をする)

・パターン(C)
人間→(Aを押す)→CPad(Aが押されたよ)→CGame(Aが押されたよ)→CRPG(Aが押されたよ)→CRPGSub(Aが押された時の処理をする)
                                           →CAction(Aが押されたよ)→CActionSub(Aが押された時の処理をする)

各パターンの違いは、ただの入力データ(上記例では「A」)を、ゲーム上で意味がある行動に変換するクラスはどこか?です。
(A)ではCRPGやCACtionがそれを担い、(B)ではCGameがそれを担い、(C)ではCRPGやCActionの子クラスがそれを担っています。どれを選択するかによって、ゲームのつくり、ゲームエンジンの作りがまるで変わってきます。

どれを選択するのが適切か?
これが一番重要な点だと思います。

キレイな設計を行うためには、適切なレイヤーに分割する必要があります。

適切なレイヤーとは何か?というのは、各自で違うと思いますが、
私はクラス名、関数名、変数名が同じ抽象レベルの言葉で表現されているかで
レイヤーの分け方が適切かどうか判断しています。
各レイヤーには役割があり、より上位のレイヤーのための抽象概念を用意する必要があるからです。
#用意できないのであれば、それはレイヤーになりえません。

上記パターン(C)にて、ゲームの内容部分を実装するクラス(CRPGSub等)にキーボードの「A」という概念は
似つかわしくなく、私ならこのパターンは採用しません。

残ったパターン(A)と(B)ですが私としては、どっちでも良いです(最終的には折衷案になると思いますが)。
理由は、ゲームエンジンとしてそれを使う側から見た場合、関係がないからです。
他人(もしくは未来のわふーさん)がこれを再利用しようとした場合、CRPGSub2を作成するだけなので、
CPadもCGameも見えません。
 編集済み


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

Name: Justy  ..伝説なるハッカー(551,265ポイント)   Date: 2010/06/26(土) 16:12   No:55325     
Title: Re:無題    
>全ての値をprivateにして
>とかにすればいいですかね……? 
 はい、そんな感じで。
 強いて言うならメソッドに constをつけるくらいですね。



 さて、本題とは離れてしまったこちらの件ですが。
 良い感じにぽこさんが補足して下さってますね。ありがとうございます。

>と言う風にするということでしょうか
 そんな感じです。
 
 要するに末端のクラス……プレイヤーやメニューなどのクラスはパッドの情報を直接参照しないで、
パッドの情報を解釈し役割に応じた適切な名前をつけたものから参照するようにする、ということです。

 メリットとしては、中間を挟むことで入力イベントを抽象化できます。
 これによって、例えば RPGの調べるコマンドをAからBに変えたいときや、AとXを調べるに割り当てたいとき
後からキーボードやタッチパネルの入力に対応したい、といった要望があったときも
基本的にこのクラスの修正だけで済み、末端のプレイヤーなどのクラスでは
「調べるトリガーが発生したから調べるの処理を行った」という形になり、その調べるトリガーが
どういうものだったのかを気にしなくていい、ということになります。

 わふーさんが先に書かれたジャンプのコードを例にしますと、

    if((Aボタンがジャンプの時 &&Aが押された) || (Bボタンがジャンプの時 && Bが押された)
    || 画面の特定のところがクリックされた|| 画面の特定のところがタッチされた || キーボードスペースキーが押された)
        「ジャンプ」の処理;

こう書くよりかは

    if ( ジャンプトリガーが発生した ) 「ジャンプ」の処理;
とした方がコードが意味もわかりやすいですし、すっきりとしますよね。

 勿論実際のところ、それをインスタンスとしてどこかのクラスに持たせるか、
これもまたグローバル的なクラス・関数などにするかは検討しなければならないところではありますが。


>「pad」の部分はどうなるのか
 グローバル的な扱いにした上で、ということなので、そのままでいいと思いますけど。


>このクラスのコンストラクタにどのパッドを検知対象にするのかという情報を得て対応しております
 なるほど。
 だとすると、このゲームではパッドを1つしか使用しないのかもしれませんが、
ひょっとすると複数のパッドを束ねて管理できるクラスを作って、そちらをシングルトンなどの
グローバル的な扱いにした方がいいのかもしれませんね。


>あまり省略しない方が良いのかもしれませんね
 多すぎるのも問題ですが、情報が不足しすぎても適切な回答できなくなるので、
さじ加減が難しいところではありますがある程度提示してもらった方が回答側としては助かります。


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

Name: わふー  ..入門者(2,776ポイント)   Date: 2010/06/27(日) 04:36   No:55378     
Title: Re:無題    
こんばんは。
出かけてました。

大体把握しました。
ありがとうございます。
ちょっと思うところだけツッコミます〜。


>適切なレイヤーとは何か?というのは、各自で違うと思いますが、
>私はクラス名、関数名、変数名が同じ抽象レベルの言葉で表現されているかで
>レイヤーの分け方が適切かどうか判断しています。
>各レイヤーには役割があり、より上位のレイヤーのための抽象概念を用意する必要があるからです。 

レイヤー分けの判断ってのは、すごい難しそうですね。
多人数でやるなら、この辺はすり合わせをしないといけないのかな……。

また、シングルトンでいけば、
・パターン
人間→(Aを押す)→CPad(Aが押されたよ)→CRPG(決定だってさ)→以下略
となるのですかね。
CGameは飛ばしちゃう感じで。


> 要するに末端のクラス…… プレイヤーやメニューなどのクラスはパッドの情報を直接参照しないで、 
>パッドの情報を解釈し役割に応じた適切な名前をつけたものから参照するようにする、ということです。 

とのことですが、

>    if ( ジャンプトリガーが発生した ) 「ジャンプ」の処理;

とある中の「bool [ジャンプトリガーが発生した]()関数」の中ではパッドの情報が必要になるのでは……。
CRPGがCPadを参照していればCRPGから取って来れますが、CRPGの中がトリガー関数で溢れることになりそうですね……。

トリガーまとめクラスとか別に作るのかな? うーん?

というか、そのためにこのクラスはCRPGへの参照を必要としてしまうのですね。
CPadのためだけに完全に独立したクラスが作れないというのは、それはそれで問題になる気もするんですが、そんなもんではないんでしょうかね。



> だとすると、このゲームではパッドを1つしか使用しないのかもしれませんが、
>ひょっとすると複数のパッドを束ねて管理できるクラスを作って、そちらをシングルトンなどのグローバル的な扱いにした方がいいのかもしれませんね。

現状では、パッドの数だけクラスを作ることができたので、問題になりませんでした。
シングルトンにするならば、そういう対応にしなければなりませんね。





ご返信ありがとうございます。


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

Name: Justy  ..伝説なるハッカー(551,716ポイント)   Date: 2010/06/27(日) 15:09   No:55400     
Title: Re:無題    
>とある中の「bool [ジャンプトリガーが発生した]()関数」の中ではパッドの情報が必要になるのでは
 なりますね。


>CRPGの中がトリガー関数で溢れることになりそうですね……。 
>トリガーまとめクラスとか別に作るのかな?
 (クラスになるかどうかは別として)既存のものとは別にまとめることを想定しています。
 なので、CRPGの中がそれで溢れることはありません。


>CPadのためだけに完全に独立したクラスが作れないというのは、それはそれで問題になる気もするんですが
 CPadのインスタンスがどこにあったとしても、CPadの中で CGameや CRPGを参照する必要はないので、
CPadは独立していますよ?
 独立できない可能性があるのは CPadを参照してジャンプだとか決定の入力イベントが発生したことを
検出するクラス・モジュールの方じゃないでしょうか。
 こちらの方は中身にも依りますが CGameとか CRPGなどを参照する必要が出てくるかもしれません。


>パッドの数だけクラスを作ることができたので、問題になりませんでした
 なるほど。


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

Name: わふー  ..入門者(3,149ポイント)   Date: 2010/06/27(日) 20:29   No:55421     
Title: Re:無題    
>>CRPGの中がトリガー関数で溢れることになりそうですね……。 
>>トリガーまとめクラスとか別に作るのかな?
> (クラスになるかどうかは別として)既存のものとは別にまとめることを想定しています。
> なので、CRPGの中がそれで溢れることはありません。 

「既存のものとは別にまとめる」が分かりません……。
クラスにすることも、この「まとめる」の1手法という認識でいいのですかね……?
そして、まだ他に色々と手法があると。


> CPadのインスタンスがどこにあったとしても、CPadの中で CGameや CRPGを参照する必要はないので、CPadは独立していますよ? 

独立して欲しいのはCPadではなく、CRPGSubやCActionといったクラスですねー。
確かにCPadは簡単に独立してくれそうですしね。




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

Name: dic  ..比類無きプログラマー(81,446ポイント)   Date: 2010/06/27(日) 21:42   No:55427     
Title: Re:無題    
CRPG が CPad を持っている CRPG has CPad の関係か
CRPG と CPad 各自独立しているか という関係かでしょうかね


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

Name: ぽこ  ..上級者(18,764ポイント)   Date: 2010/06/27(日) 23:34   No:55434     
Title: Re:無題    
> 「既存のものとは別にまとめる」が分かりません……。
> クラスにすることも、この「まとめる」の1手法という認識でいいのですかね……?

そういう認識でいいと思いますよ。

> そして、まだ他に色々と手法があると。

関数+変数にしてもいいと思いますよ。

> 独立して欲しいのはCPadではなく、CRPGSubやCActionといったクラスですねー。
> 確かにCPadは簡単に独立してくれそうですしね。

正直、独立という概念が理解できません。
あるレイヤーが直下のレイヤーのクラスorインタフェースを利用するのは当然ですよね?
これが下のさらに下のインタフェースを利用するとおかしい気がします。

デバイス層にあるCPadが提供するpublicなメンバ関数はゲームエンジン層にあるCRPG(CGame)が使用します。
ゲームエンジン層のCRPGが提供するpublicかprotectedなメンバ関数は個別ゲームの層にあるCRPGSubが
使用/オーバライドします。
ここで重要なのは、CRPGSubがデバイス層のクラスやインタフェースを使わないことです。


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

Name: わふー  ..入門者(3,541ポイント)   Date: 2010/06/28(月) 00:39   No:55438     
Title: Re:無題    
確かに、独立という言葉は不適切かもしれませんね。
私の認識としては、例えばMathクラスのようなものです。
「Math.abs(-5)」と言う風なやつですね。

このMathクラスを友人に作ってもらうという場面を考えます。
友人に知らせなくてはならない情報は、単に「Math.abs([int])という形で使えるような、引数はint1つでその絶対値を返すようなクラス作って」というような言い方で済むはずです。
それをこちらがどう使うか、どういうものを作っているか、は知らせなくても済むはずです。
こういうようなものが理想です。


----------

と、ここまで書いたところでやっと気づいたのですが、CRPGSubとはCRPGを継承したクラスだったのですね……。
CRPGが(class CRPG{ CRPGSub sub; };のように)持つクラスなのかと勘違いしておりました。
RPGでしたら、CCharaですとか、CEnemyとかですかね。

確かにぽこさんの仰る実装方法ならば、私もそのやり方にも納得がいくかもしれません。
(まだその考え方が浸透しておりませんので、改めて疑問が出てしまうかもしれませんが……。)



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

Name: ぽこ  ..上級者(18,912ポイント)   Date: 2010/06/28(月) 01:03   No:55439     
Title: Re:無題    
> 確かに、独立という言葉は不適切かもしれませんね。
(省略)
> こういうようなものが理想です。

凝集(cohesion)性を指しているんですかね。

> と、ここまで書いたところでやっと気づいたのですが、CRPGSubとはCRPGを継承したクラスだったのですね……。
> CRPGが(class CRPG{ CRPGSub sub; };のように)持つクラスなのかと勘違いしておりました。
> RPGでしたら、CCharaですとか、CEnemyとかですかね。

私の中ではCRPGと同格(同レイヤー)であるCActionが、CRPGSubと同格で扱われていたので、
なんとなく認識にズレがあるなとは思っていました。
まあ、言いたいことは伝わったみたいなので結果オーライってことで。


> 確かにぽこさんの仰る実装方法ならば、私もそのやり方にも納得がいくかもしれません。
> (まだその考え方が浸透しておりませんので、改めて疑問が出てしまうかもしれませんが……。)

私はゲーム屋さんではないので、このやり方がゲームにフィットするかどうかは分かりません。
#んが多分、間違っていないと思いますよ、多分。


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

Name: わふー  ..入門者(3,608ポイント)   Date: 2010/06/28(月) 22:56   No:55485 解決!     
Title: Re:無題    
>凝集(cohesion)性を指しているんですかね。

今ぐぐって少し調べた程度の知識ですが、恐らくそういうノリだと思います。



色々とありがとうございました。
解決踏みますね。


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



Name:  ..かけだし(1,224ポイント)   Date: 2010/06/27(日) 19:47   No:55418       
Title: 型変換について    
ネットでC++のソースを見てると
例えば

float a;
long b;

// 色々な処理

a = *(float*)&b;

ということをしているのを見かけたんですが

a = (float)b;

とどう違うんでしょうか?


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


Name: ドラ  ..初心者(6,566ポイント)   Date: 2010/06/28(月) 20:24   No:55471     
Title: Re:型変換について    
> a = *(float*)&b; 
long* を float* にキャストすることによってポインタが指す先にある
変数のビットパターンの解釈方法を無理やり変えています。
つまり、bと同じビットパターンを持つfloat型の値をaに代入しています。
この行為に何の意味があるのかは分かりません。

> a = (float)b;
long型のbの値をできるだけ維持したまま、float型の値に変換しています。
整数型と浮動小数点型では数値の表現形式が異なるのでaとbのビットパターンは異なります。


以下のコードの実行結果を見ると分かりやすいかもしれません。
long型とfloat型は共に4byte(1byte = 8bit)であることを仮定しています。

#include <iostream>
#include <iomanip>

void PrintBit(const void *ptr)
{
    const unsigned long *p = static_cast<const unsigned long*>(ptr);
    std::ios::fmtflags save = std::cout.flags();
    
    std::cout.unsetf(std::ios::dec);
    std::cout << std::hex << std::setfill('0');
    std::cout << std::setw(2) << ((*p & 0xff000000) >> 24);
    std::cout << std::setw(2) << ((*p & 0x00ff0000) >> 16);
    std::cout << std::setw(2) << ((*p & 0x0000ff00) >> 8);
    std::cout << std::setw(2) << ((*p & 0x000000ff));
    
    std::cout.flags(save);
}

void PrintValue(long val)
{
    PrintBit(&val);
    std::cout << '\t' << val << std::endl;
}

void PrintValue(float val)
{
    std::ios::fmtflags save = std::cout.flags();
    
    PrintBit(&val);
    std::cout << '\t' << std::showpoint << val << std::endl;
    
    std::cout.flags(save);
}

int main()
{
    float a;
    long b = 1234L;
    
    a = *(float*)&b;
    std::cout << "a = *(float*)&b;\n";
    std::cout << "a : ";
    PrintValue(a);
    std::cout << "b : ";
    PrintValue(b);
    
    std::cout << "------------------------------" << std::endl;
    
    a = (float)b;
    std::cout << "a = (float)b;\n";
    std::cout << "a : ";
    PrintValue(a);
    std::cout << "b : ";
    PrintValue(b);
    
    return 0;
}



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

Name:  ..かけだし(1,380ポイント)   Date: 2010/06/28(月) 21:49   No:55481 解決!     
Title: Re:型変換について    
一見同じように見えて全然違ったんですね。

今考えると、以前見かけたソースはfloat型をfloat型のビットパターンのままシフト演算やビット演算したかったのだろうと思います。
ただ、自分はfloat型の仕組みについてさっぱり理解してないので何をしてるのか分かりませんでしたが^^;

分かりやすい解説、ありがとうございました。


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



Name: shiro4ao  ..初心者(6,210ポイント)   Date: 2010/06/28(月) 20:22   No:55470       
Title: GetWindowRectの使い方    
ウィンドウを現在位置から右へ10移動したいです。

==================コードの一部========================
//自分のウィンドウハンドルはhWndです
LPRECT rc;
GetWindowRect(hWnd,(LPRECT)&rc);  
SetWindowPos( hWnd,HWND_TOP, (int)rc.left+10,(int)rc.top,(int)rc.right+10,(int)rc.bottom, SWP_SHOWWINDOW);
=================ここまで=============================

上のようなコードを書きましたが、インテリセンス機能から「使用可能なメンバがありません」
と怒られました。
なにかまずいのでしょうか。 編集済み


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


Name: シエル  ..上級者(16,464ポイント)   Date: 2010/06/28(月) 20:37   No:55473     
Title: Re:GetWindowRectの使い方    
Getwindowrectの第二引数はLPRECT型ですよね?

ですので、
GetWindowRect(hWnd,(LPRECT)&rc); ではなくて、

LPRECT型のrcをそのまま下記のようにしてみて下さい。

GetWindowRect(hWnd,rc);


そうすれば、インテリセンス機能が働くはずです
 


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

Name: スキマ妖怪  ..かけだし(2,025ポイント)   Date: 2010/06/28(月) 20:57   No:55477     
Title: Re:GetWindowRectの使い方    
どちらか言うと

LPRECT rc;

RECT rc;

だと思いますよ。


個人的にインテリセンスは、あまり信用できないですね(コード量が多くなると、利かない時があるので)


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

Name: シエル  ..上級者(16,671ポイント)   Date: 2010/06/28(月) 21:03   No:55479     
Title: Re:GetWindowRectの使い方    
すいません。スキマ妖怪さんの言うとおりです。

LPRECT rc
で宣言した場合、そのメンバにアクセスするには
rc->rightでアクセスする。


RECT rc
で宣言した場合は、
GetWindowRect(hWnd,&rc)って書いて、

rc.rightでメンバにアクセスできます。


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

Name: shiro4ao  ..初心者(6,153ポイント)   Date: 2010/06/28(月) 21:26   No:55480 解決!     
Title: Re:GetWindowRectの使い方    
>LPRECT型のrcをそのまま下記のようにしてみて下さい。 
LPRECTなのに何をしていたのでしょうね私は・・・
うまくいきました。

申し訳ないです。


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




 
[ 1 , ... ]
 
 
管理者画面   RSS   + Powered By 21style +