[過去ログ] 【初心者】課題をクリアしていくスレ【講習会】 (787レス)
上下前次1-新
このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
215(2): 通りすがり人 [sage] 04/06/30 12:46 ID:qBs2hfFg(1) AAS
 >>213213(1): 生徒BLUE [] 04/06/30 00:29 ID:HYWm3For(1/4) AAS
 >>181 
 >「ANDでマスクとる」とかはわかる?  
 はい、この場合は2進数に直して一番左のビット以外を全部0にするってことですよね 
 MSDN読んだりあれからさらに調べてみたので前よりはちょっとわかったのですが 
 左端のビットが1ならボタンが押されているという程度の理解でいいのでしょうか 
  
 ・定数書いちゃダメ 
 defineを積極的に使ってみました 
 C++の場合だとdefineは使わずにconstを使ったほうがいいと書いてあるホームページも 
 みつけましたがどうなんでしょう? 
  
 ・拡張子がcppなのにC言語風 
 意識せずに全部cppにする習慣がついてたので…… 
 クラスを使う→cpp、使わない→cでいいですか? 
 拡張子の使い分けむずかしい 
  
 ・バックバッファあたりは毎回生成&破棄しなくても最初に一度だけ 
 GetDCを使えばいいんだ!と前回は気づいてませんでした 
WEBの情報をあちこちからつまみ食いしてるので全体的にチグハグな感じに 
 なっていたようで指摘してもらって勉強になります 
 ソースみていただける方は2ちゃんねるに貼り付けとアップローダのどちらが見やすいでしょうか? 
 それとも両方のほうがよい?  
> 左端のビットが1ならボタンが押されているという程度の理解でいいのでしょうか 
  
 HELPには... 
 最上位ビットがセットされたときは現在キーが押されていることを示し、  
 最下位ビットがセットされたときは直前のGetAsyncKeyState関数呼び出し以降に 
 キーが押されたことを示します。 
 って書いてある。つまり・・・ 
 #include<windows.h> 
 #include<stdio.h> 
  
 void main() 
 { 
  intRv; 
  
  for(;;) { 
   Sleep(1); 
   Rv = GetAsyncKeyState(VK_SPACE); 
   if (Rv != 0) { 
    printf("%08x\n", Rv ); 
   } 
  } 
 } 
 スペースをバシッと叩くとわかるんだけど、初回だけ最下位ビットが変化してる。 
 つまり、リピート状態なのかを判断できるわけ。
216(2): 生徒BLUE [] 04/06/30 17:09 ID:HYWm3For(2/4) AAS
 >>215 
 早速、コンパイルして試してみました 
 最下位ビットに注目してみると 
 1000000000100100100100100100...... 
 といったように変化します 
 初回だけということなので10000000......というものを期待していたのですがうまくいかないです 
217: 生徒BLUE [] 04/06/30 17:38 ID:HYWm3For(3/4) AAS
 課題6 当たり判定 
 赤い四角のサイズを元に当たり判定をしました 
  
 //****** 変更箇所 ****** 
  
 //乱数の初期化 
 srand((unsigned)time(NULL)); 
  
 //敵の移動 
 ++ty; 
 if (ty>YMAX) 
 { 
   ty=0; 
   tx=rand()*640/RAND_MAX; 
 } 
  
 //当たり判定 
 if (abs(x-tx)<BOXWIDTH && abs(y-ty)<BOXHEIGHT) 
 { 
   PostQuitMessage(0); 
 } 
  
 外部リンク[zip]:gamdev.org 
218(1): 名前は開発中のものです。 [sage] 04/06/30 18:49 ID:3iu2d+4i(1/2) AAS
 >>216 
 ん?スペースキーを押すと、こんな風に表示されませんか? 
 ffff8001 
 ffff8000 
 ffff8000 
 ffff8000 
 ffff8000 
 ffff8000 
 ffff8000 
 ffff8000 
 ffff8000 
 ffff8000 
 ffff8000
219(1): 生徒BLUE [] 04/06/30 19:04 ID:HYWm3For(4/4) AAS
 >>218 
 ならないです 
 もうちょっと調べてみます 
220: 名前は開発中のものです。 [sage] 04/06/30 19:39 ID:3iu2d+4i(2/2) AAS
 >>219 
 あ〜、押しっぱなしの場合は違う結果になるかもです。 
 OSのキーボードバッファとか、その辺の兼ね合いだと思うけど。 
221: 名前は開発中のものです。 [sage] 04/06/30 19:52 ID:/EAv0A9z(1) AAS
 >>215試して見たけど確かに>>216の現象が出るな。 
 他の出力で確認したらちゃんと立ち上がりだけ1が出るので 
 printf()絡みでキー状態が変化してるっぽい。 
 普通はこんな使い方しないので気にしなくて良いと思われ。 
222(1): 63 ◆xdaKt6k1XI  [sage] 04/06/30 21:22 ID:qAZjVMDs(1) AAS
 >>211211(1): 名前は開発中のものです。 [sage] 04/06/29 22:14 ID:OSp1CFcf(3/4) AAS
 >>210 
 混同してました 
 2人も先行者がいたのかorz 
 修正しました 
 HSPのほうはもうやらないの? 
  
 JavaScript         ****** 6  
 Ruby..            ****** 6  
 生徒A(Win32API).     ***** 5  
 生徒BLUE (Win32API).  ***** 5  
 Delphi            ***** 5  
 D言語            ** 2  
 LGP             ** 2  
 x≠先生かつx=生徒 ⇒ x=俺(Win32API) 測定不能 
 VB 測定不能  
今回のは敵の大きさとか動きとかよくわからないのでやらないです。 
223(1): 名前は開発中のものです。 [] 04/06/30 22:22 ID:j1/sm794(1) AAS
 320x240で一度作ったけど即死しすぎて32x32に縮小したよ 
 サイズ指定してないから何でもいいと思ったけどそのあたりどうなんですか?>先生 
  
 wikiのほうにまとめコーナー作っておいたので各自書きたいことがあったら適当にどうぞ 
 というか書いてくださいおながいします 
 名無しさんを消して自分の名前にして提出状況とかコンパイラは何を使ってるとかそんなのでいいので 
  
 外部リンク:gamdev.org 
224: LGP@課題4sin波形 [] 04/07/01 00:05 ID:TMNGfYFe(1/2) AAS
 //画面初期化、最後を0にすると全画面 
 CH = G@SETUP( 640 , 480 , 16 , 1 ) 
 //ペンの設定、実線、線の幅1、赤色 
 G@GDISETPEN(LG_GDI_PS_SOLID,1,1.0,0,0) 
 //sin波形の始点になる点を描画(LINETOの都合) 
 G@GDILINE(CH,0,239,0,239) 
 FOR I=0 TO 360 
 X=I 
 //SINの引数と戻り値は固定小数点定数(float) 
 //整数を固定小数点定数にキャストするには65536を掛ける 
 //固定小数点定数を整数にキャストするには65536で割る 
 Y=SIN(I*65536)*100/65536+239 
 //最後にG@GDILINEかG@GDILINETOで線を引いた場所からX,Yまで線を引く 
 G@GDILINETO(CH,X,Y) 
 NEXT 
 G@FLIP() 
  
 //無限ループ 
 LOOP 
   S@WAIT() 
 ENDLOOP 
225: 4  ◆3VUXqvbfSY  [] 04/07/01 08:34 ID:KOe6GSoY(1) AAS
 >>222,223 
 サイズは自由で結構です。 
 敵の動きは…だからy++;だけですよ? 
226(1): 生徒A [sage] 04/07/01 14:26 ID:MCi74o/R(1) AAS
 数日間ソースとにらめっこしてるのですが、バックバッファーの処理が上手くいかないです…
227(1): 名前は開発中のものです。 [sage] 04/07/01 15:45 ID:bdPAbTo6(1) AAS
 >>226 
 キミのソースに少し手を加えたやつをうpろだにあげたから試してみれ。780.lzhだ。 
 ただしオフスクリーン処理以外(後始末とか)は端折ってるのでそこは参考にしないように。 
228: LGP@課題5キー入力 [] 04/07/01 22:17 ID:TMNGfYFe(2/2) AAS
  CH = G@SETUP( 640 , 480 , 16 , 1 ) 
  LOOP //無限ループ 
  //赤い四角を黒で塗りつぶして消す 
    G@GDISETBRUSH( 0 , 0 , 0 , 0 ) 
    G@GDIBOXFULL( CH , X, Y, X+320, Y+240 ) 
    I@KEYGET() //キーの状態を得る 
  //I@KEYBTNの引数に調べたいキーをいれ、戻り値が1なら押してる状態 
    IF I@KEYBTN(0xC8)=1 THEN //0xC8はカーソルキー↑ 
      IF Y>0 THEN  
        Y=Y-1 
      ENDIF 
    ENDIF 
    IF I@KEYBTN(0xCB)=1 THEN 
      IF X>0 THEN 
        X=X-1 
      ENDIF 
    ENDIF 
    IF I@KEYBTN(0xCD)=1 THEN 
      IF X<320 THEN 
        X=X+1 
      ENDIF 
    ENDIF 
    IF I@KEYBTN(0xD0)=1 THEN 
      IF Y<240 THEN 
        Y=Y+1 
      ENDIF 
    ENDIF 
   //赤い四角を描く 
    G@GDISETBRUSH( 0 , 1.0 , 0 , 0 ) 
    G@GDIBOXFULL( CH , X, Y, X+320, Y+240 ) 
    G@FLIP() 
  ENDLOOP 
229: LGP@課題6当たり判定 [] 04/07/02 03:30 ID:4ZvlEEie(1/2) AAS
  CH = G@SETUP( 640 , 480 , 16 , 1 ) 
  X=320 
  Y=240 
  //無限ループ 
  LOOP 
  //黒で塗りつぶし 
    G@GDISETBRUSH( 0 , 0 , 0 , 0 ) 
    G@GDIBOXFULL( CH , 0, 0, 640, 480) 
  //キー入力 
  //キーの状態を得る 
    I@KEYGET() 
  //I@KEYBTNの引数に調べたいキーをいれ、戻り値が1なら押してる状態 
  //0xC8はカーソルキー↑ 
    IF I@KEYBTN(0xC8)=1 THEN 
      IF Y>0 THEN  
        Y=Y-1 
      ENDIF 
    ENDIF 
    IF I@KEYBTN(0xCB)=1 THEN 
      IF X>0 THEN 
        X=X-1 
      ENDIF 
    ENDIF
230: LGP@課題6当たり判定 [] 04/07/02 03:30 ID:4ZvlEEie(2/2) AAS
    IF I@KEYBTN(0xCD)=1 THEN 
      IF X<(640-32) THEN 
        X=X+1 
      ENDIF 
    ENDIF 
    IF I@KEYBTN(0xD0)=1 THEN 
      IF Y<(480-32) THEN 
        Y=Y+1 
      ENDIF 
    ENDIF //敵移動 
    TY=TY+1; 
    IF TY>(640-32) THEN 
      TY=0 
      TX=RAND()%(640-32) 
    ENDIF 
   
  //赤い四角を描く 
    G@GDISETBRUSH( 0 , 1.0 , 0 , 0 ) 
    G@GDIBOXFULL( CH , X, Y, X+32, Y+32 ) 
  //敵を描く 
    G@GDISETBRUSH( 0 , 0 , 1.0 , 0 ) 
    G@GDIBOXFULL( CH , TX, TY, TX+32, TY+32 ) 
   
  //当たり判定 
    IF (ABS(X-TX)<32) AND  (ABS(Y-TY)<32) THEN 
      END 
    ENDIF 
   
    G@FLIP() 
  ENDLOOP 
231: 名前は開発中のものです。 [] 04/07/04 00:00 ID:UWWF49AF(1) AAS
 保守age 
232(1): HSPが初プログラム@生徒希望 [sage] 04/07/04 11:07 ID:3DUC6+Xf(1/2) AA×

外部リンク[zip]:gamdev.org
233(1): 名前は開発中のものです。 [sage] 04/07/04 11:13 ID:dw9vgL9Y(1/2) AAS
 >>232 
 自分以下で2以上の全ての整数の割り算の余りが0にならなければ素数 
 別の解放にエラトステネスのふるいってのがあるけど別に使わなくていい
234: 名前は開発中のものです。 [sage] 04/07/04 11:14 ID:dw9vgL9Y(2/2) AAS
 自分未満の整数の間違い 
 以下だったら自分も含むからね 
235: 名前は開発中のものです。 [sage] 04/07/04 12:05 ID:WDudAYFD(1/5) AAS
 自分の1/2で十分じゃね?
236(1): 名前は開発中のものです。 [sage] 04/07/04 12:35 ID:yqwpjhZT(1) AAS
 (√自分)でよくない? 
237(1): 名前は開発中のものです。 [sage] 04/07/04 12:38 ID:WDudAYFD(2/5) AAS
 平方根求めるより楽だし 
238: 名前は開発中のものです。 [sage] 04/07/04 12:55 ID:9GihiSR8(1) AAS
 >>236-237 
 なんで平方根まででいいんだっけ? 
239(1): 名前は開発中のものです。 [sage] 04/07/04 13:00 ID:WDudAYFD(3/5) AAS
 それ以上のは今までに計算した分と対応してるだけ 
上下前次1-新書関写板覧索設栞歴
あと 548 レスあります
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル
ぬこの手 ぬこTOP 0.046s