1 名前:名前は開発中のものです。 [04/06/10 18:05 ID:VshiFFV8] ゲームに必要な要素を先生が出してくれます その課題をクリアしていく講習会です
131 名前:名前は開発中のものです。 mailto:sage [04/06/23 20:12 ID:bTZutcV4] 真に初心者であれば分からないのは当然。 とりあえず分からない単語を列挙すれば、誰か暇な人が答えてくれるかもしれない。
132 名前:名前は開発中のものです。 mailto:sage [04/06/23 22:00 ID:dPgxaG/R] >>129 hello worldを何で表示したか分からんからアレだけど、 取り合えずC/C++と仮定した場合、キミがいくべきところはここだ。 www.kumei.jp/c_lang/
133 名前:生徒BLUE@入隊希望 [04/06/23 22:23 ID:G2RbfgcV] >>127 の続き これで完了です LRESULT CALLBACK WndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam) { switch (msg) { case WM_DESTROY: PostQuitMessage(0); break; case WM_PAINT: DrawGr(hWnd); break; default: return(DefWindowProc(hWnd, msg, wParam, lParam)); } return (0L); }
134 名前:名前は開発中のものです。 [04/06/24 00:34 ID:9IgBi+UW] >>130 ありがとうございます。C言語でも出来ますけど、あまり自信が無いんです…。 VBでキャラの移動と弾の発射だけやってみました。 ←→キーで左右移動、Z or Spaceキーで弾の発射です。 gamdev.org/up/img/737.lzh
135 名前:名前は開発中のものです。 mailto:sage [04/06/24 14:35 ID:9ja3YKOg] >>134 ×押して終了しても、プロセスが残ってるみたい
136 名前:メトロイド オモロイド mailto:sage [04/06/24 21:11 ID:Yq9S/x7T] 2Dメトロイド&3Dメトロイド作ってみたらどうだ? 難しいがエラー無く完成したら腕上がるぞ。
137 名前:生徒BLUE [04/06/24 23:20 ID:kfww3pCy] 次はいよいよインベーダーですか 参考にしたサイト:www3.omn.ne.jp/~renas/Win32/ 今回新しく使った関数:MoveToEx、LineTo >>125 >>127 >>133 の中からDrawGr関数を書き換えて#include <math.h>を追加します。 //課題4sin波 int DrawGr(HWND hWnd) { PAINTSTRUCT paint; HDC hdc = BeginPaint(hWnd, &paint); HPEN hPen, hOldPen; RECT rt; GetClientRect(hWnd, &rt); hPen = CreatePen(PS_SOLID, 1, RGB(255, 0, 0)); hOldPen = (HPEN)SelectObject(hdc, hPen); HBRUSH hBrush = CreateSolidBrush( RGB(255, 0, 0)); SelectObject(hdc, hBrush); MoveToEx(hdc,0,sin(0.0)*100+240,NULL); for (float i=0; i<6.28; i+=0.01) { LineTo(hdc,i*100,sin(i)*100+240); } SelectObject(hdc, hBrush); DeleteObject(hPen); SelectObject(hdc, hOldPen); DeleteObject(hPen); EndPaint(hWnd, &paint); return 0; }
138 名前:134 [04/06/25 02:41 ID:dGOyDbGP] 当たり判定などを追加しました。問題のメモリリークのバグも直しました。 gamdev.org/up/img/741.lzh
139 名前:4 ◆3VUXqvbfSY [04/06/25 07:09 ID:va8qXu2v] >>134 さん まずは、sinからお願いします。 あんまり爆走すると、先生にしますよ。 むしろ、なって欲し… >>ALL 次の課題は、基本中の基本。 キー入力です。 先程の赤い四角を使い、カーソル(テンキーでも可)でグリグリ動く物を作ってください。 参考程度に VC++ GetKeyState();//バーチャルキーの状態取得。 C++ getch();//標準入力 VB _KeyDown(key%,Shift%)//keyにキーコードが返る HSP getkey p1,p2//p2のキーが押されていると、p1に1が代入される。
140 名前:x≠先生かつx=生徒 ⇒ x=俺 mailto:sage [04/06/25 18:25 ID:oIl/kTfS] sin波生成 rupan.zive.net/~kain/cgi-bin/up/src/up1133.zip
141 名前:63 ◆xdaKt6k1XI mailto:sage [04/06/25 23:47 ID:BZ++Tyug] 動かせました。 WIDTH 640,480 *main BUFFER 2,640,480,1 COLOR 255 BOXF x+320,y+240,x,y pos x,y stick a,15 if a&1 : x-1 if a&2 : y-1 if a&4 : x+1 if a&8 : y+1 await 1 GSEL 0 GCOPY 2,0,0,640,480 goto *main stop
142 名前:生徒142 mailto:sage [04/06/26 00:54 ID:NxwPZgd2] 今日から参加します。 まずは四角 gamdev.org/up/img/742.lzh キー入力に取りかかります。 赤い四角を動かせばいいんですよね?
143 名前:生徒142 mailto:sage [04/06/26 03:19 ID:NxwPZgd2] 連投 プロシージャのみ貼り付けてみます。 描画がカクカクします、再描画の処理はどうすればきれいに動くのでしょうか? LRESULT CALLBACK WndProc(HWND hWnd,UINT msg,WPARAM wp,LPARAM lp){ HDC hdc;PAINTSTRUCT ps;HPEN hpen;static int x,y; switch(msg){case WM_CREATE:x = 0;y = 0;break; case WM_KEYDOWN:if(wp == VK_RIGHT){if(x < 310){x += 5;}} if(wp == VK_LEFT){f(x > 0){x -= 5;}} if(wp == VK_UP){if(y > 0){y -= 5}}; if(wp == VK_DOWN){if(y < 210){ y += 5;}} InvalidateRect(hWnd,NULL,TRUE); break; case WM_PAINT: hdc = BeginPaint(hWnd,&ps); hpen = CreatePen(PS_SOLID,3,RGB(255,0,0)); SelectObject(hdc,hpen); Rectangle(hdc,x,y,x+320,y+240); DeleteObject(hpen); EndPaint(hWnd,&ps); break; case WM_DESTROY: PostQuitMessage(0); break; default: return(DefWindowProc(hWnd,msg,wp,lp)); } return 0; }
144 名前:名前は開発中のものです。 mailto:sage [04/06/26 04:14 ID:sMwugFr/] if(wp == VK_LEFT){f(x > 0){x -= 5;}} ↓ if(wp == VK_LEFT){if(x > 0){x -= 5;}} if(wp == VK_UP){if(y > 0){y -= 5}}; ↓ if(wp == VK_UP){if(y > 0){y -= 5;}}
145 名前:生徒142 mailto:sage [04/06/26 04:30 ID:NxwPZgd2] >>144 すみません、ソース書いた時は{使ってなかったもので ここに貼り付ける時に急遽書きました。 iが消えたり;の前に}書いたり間抜けなことになってますね。 次からはよく確かめます
146 名前:134 [04/06/26 05:20 ID:1CizLySr] >>139 VBでsinカーブを描画してみました。 そろそろC言語でやりたいとは思うのですが、ポインタの所がいまいちなので… gamdev.org/up/img/743.lzh
147 名前:名前は開発中のものです。 mailto:sage [04/06/26 08:40 ID:K/WyEUE8] <html><head><style type="text/css"><!-- .put{background-color:#FF0000;position:absolute;width:320px;height:240px;} --></style></head> <body onLoad="main()" onKeyDown="k[event.keyCode]=1" onKeyUp="k[event.keyCode]=0"> <div id=char class=put></div><script language="Javascript"> var timerID,k=[],x=0,y=0,charElm=document.getElementById('char'); function main(){ clearTimeout(timerID);timerID=setTimeout(main,30); x+=k[37]&&x?-8:k[39]&&x<320?8:0; y+=k[38]&&y?-8:k[40]&&y<240?8:0; charElm.style.left=x;charElm.style.top=y;} </script></body></html>
148 名前:134 [04/06/26 10:37 ID:1CizLySr] gamdev.org/up/img/744.lzh キャラ移動です。一応加速度も考慮してあります。
149 名前:名前は開発中のものです。 [04/06/26 13:26 ID:wteFDikq] Wikiなんかじゃなくて専用のHP作ったら? ソース貼るのに不憫だろ
150 名前:名前は開発中のものです。 mailto:sage [04/06/26 13:31 ID:jYUMekjC] >>149 神キタ━━━━━━(゚∀゚)━━━━━━ !! tabとか半角スペースめんどいもんな ひょっとして過去にうぷされたソースとかも整形してうぷしてくれれば うれしいけどそれは望みすぎかな 急がなくていいからがんがれ!
151 名前:名前は開発中のものです。 mailto:sage [04/06/26 13:39 ID:CUwn7Ubj] 強引な150に萌え
152 名前:Ruby@課題1数当て [04/06/26 14:32 ID:jYUMekjC] kotae=rand(9)+1 while (true) print "1〜9の数を入力してください\n" gets ans=Integer(chop) if ans==kotae then print "正解\n" break else print "不正解\n" end end
153 名前:149 [04/06/26 15:26 ID:wteFDikq] 俺かYoΣ(´□`;)
154 名前:Ruby@課題2素数 [04/06/26 16:17 ID:jYUMekjC] count=0 i=2 while count<1000 do sosu=true for j in 2..i-1 do if ( (i % j) == 0) sosu=false end end if (sosu) print "#{i}\n" count=count+1 end i=i+1 end print "素数を#{count}個みつけました\n"
155 名前:Ruby/SDL@課題3赤い四角 [04/06/26 17:32 ID:jYUMekjC] require 'sdl' SDL.init( SDL::INIT_VIDEO ) screen = SDL.setVideoMode( 640, 480, 16, SDL::SWSURFACE ) screen.fillRect( 0, 0, 320, 240, [ 255, 0, 0 ] ) screen.updateRect( 0, 0, 0, 0 ) loop do while event = SDL::Event2.poll case event when SDL::Event2::Quit, SDL::Event2::KeyDown exit end end end
156 名前:Ruby/SDL@課題4sin波形 [04/06/26 18:50 ID:jYUMekjC] require 'sdl' SDL.init( SDL::INIT_VIDEO ) screen = SDL.setVideoMode( 640, 480, 16, SDL::SWSURFACE ) count=0.0 while count < 6.28 x=count*100 y=Math.sin(count)*100+240 screen.putPixel(x,y,[255,0,0]) count=count+0.01 end screen.updateRect( 0, 0, 0, 0 ) loop do while event = SDL::Event2.poll case event when SDL::Event2::Quit, SDL::Event2::KeyDown exit end end end
157 名前:Ruby/SDL@課題5キー入力 [04/06/26 20:12 ID:jYUMekjC] require 'sdl' SDL.init( SDL::INIT_VIDEO ) screen = SDL.setVideoMode( 640, 480, 16, SDL::SWSURFACE ) y=0 x=0 loop do while event = SDL::Event2.poll case event when SDL::Event2::Quit exit end end SDL::Key.scan y -= 1 if SDL::Key.press?( SDL::Key::UP ) x += 1 if SDL::Key.press?( SDL::Key::RIGHT ) y += 1 if SDL::Key.press?( SDL::Key::DOWN ) x -= 1 if SDL::Key.press?( SDL::Key::LEFT ) x=0 if x<0 x=319 if x > 319 y=0 if y<0 y=239 if y > 239 screen.fillRect( 0, 0, 640, 480, [ 0, 0, 0 ] ) screen.fillRect( x, y, 320, 240, [ 255, 0, 0 ] ) screen.updateRect( 0, 0, 0, 0 ) end
158 名前:名前は開発中のものです。 mailto:sage [04/06/26 21:12 ID:4yTlUeBl] こりゃある意味、荒らしといえなくもないな
159 名前:名前は開発中のものです。 [04/06/26 21:34 ID:jYUMekjC] Ruby/SDLインストール方法(Windows) 1.とりあえずコレをダウンロード www.kmc.gr.jp/~ohai/rubysdl/rubysdl-0.9.2-win32bin-pack.lzh 2.解凍して適当なフォルダにコピー 3.[コピーしたフォルダ]\usr\local\binにパスを切る (たとえばc:\ruby\usr\local\binなど) 以上でインストール終了。 スクリプトをテキストファイルとして保存して(拡張子は.rbが一般的) ruby [ファイル名]として実行 (たとえばruby sosu.rbなど) 公式サイト www.kmc.gr.jp/~ohai/index.html チュートリアル www.kmc.gr.jp/~ohai/rubysdl_intro.html
160 名前:名前は開発中のものです。 mailto:sage [04/06/26 23:23 ID:VAfJSjue] 宣伝?
161 名前:名前は開発中のものです。 [04/06/26 23:49 ID:PaYEz6W8] キー入力、Delphiです TApplicationEventsとQD3のDDIDEX使ってます private Chara: TPoint; procedure TForm1.ApplicationEvents1Idle(Sender: TObject; var Done: Boolean); begin DDIDEX1.Scan(DI_KEYB); Chara.X:=Chara.X+DDIDEX1.Stick.X; Chara.Y:=Chara.Y+DDIDEX1.Stick.Y; if (Chara.X<0) or (Chara.X>319) then begin Chara.X:=Chara.X-DDIDEX1.Stick.X; end; if (Chara.Y<0) or (Chara.Y>239) then begin Chara.Y:=Chara.Y-DDIDEX1.Stick.Y; end; Canvas.Brush.Color:=clBlack; Canvas.FillRect(Rect(0,0,ClientWidth,ClientHeight)); Canvas.Brush.Color:=clRed; Canvas.FillRect(Rect(Chara.X,Chara.Y,Chara.X+320,Chara.Y+240)); Sleep(5); Done:=False; end; procedure TForm1.FormCreate(Sender: TObject); begin DoubleBuffered:=True; ClientWidth:=640; ClientHeight:=480; end;
162 名前:名前は開発中のものです。 mailto:sage [04/06/27 01:17 ID:m6T91X5d] >>149 インデントを保ったままソースをうぷしたいなら ソース置き場やゲムデヴあぷろだをを利用させてもらう手もある というかこのスレはなぜ貼り付けるのが主流なんだw ソース置き場 do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/lounge/index.html ゲムデヴあぷろだ gamdev.org/up/ >>151 うむ、萌えプロ目指してるからな 参考1) www.bk1.co.jp/cgi-bin/srch/srch_message.cgi/40dd9dc0e029f0104573?aid=p-sf0023&tpl=genre/07/softbank.html 参考2) oshimago.chu.jp/personal/archives/DSC00117.JPG >>153 ☆ チン マチクタビレタ〜 マチクタビレタ〜 ☆ チン 〃 ∧_∧ / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ヽ ___\(\・∀・) < 専用のHPまだ〜? \_/⊂ ⊂_) \_____________ / ̄ ̄ ̄ ̄ ̄ ̄ /| | ̄ ̄ ̄ ̄ ̄ ̄ ̄| | | S p o k e | >>158 このスレ自体(ry まぁ、土曜日を利用してスタートダッシュだ許せ >>160 おまいらも開発環境や実行環境ぐらい書けよ ところでRubyって宣伝と思われるほどマイナーなのか? ちなみにRuby暦1日(もう2日目だな)なので優しくしてくれな
163 名前:名前は開発中のものです。 mailto:sage [04/06/27 02:56 ID:fYoguU/V] >>162 >このスレはなぜ貼り付けるのが主流なんだw ダウソして解凍してって面倒なので結構貼り付けいいと思うんだが 普通のレスが見にくい&改行制限が問題だな 2ch型掲示板を設置して生徒一人につき1スレ使ってソースを貼り付けていくっていうのはどうでしょ? TABの問題が残るかな?
164 名前:名前は開発中のものです。 mailto:sage [04/06/27 06:21 ID:6ucDfgWE] >>163 神キタ━━━━━━(゚∀゚)━━━━━━ !! ダウソとか解凍めんどいもんな ひょっとして過去にうぷされたソースとかもスレ立てて貼りつけてくれれば うれしいけどそれは望みすぎかな 急がなくていいからがんがれ!
165 名前:名前は開発中のものです。 mailto:sage [04/06/27 07:31 ID:fYoguU/V] >>164 コピペかよ!ほんとに作るぞ? aaacafeとかだったらすぐだし
166 名前:名前は開発中のものです。 mailto:sage [04/06/27 09:45 ID:sIosK61q] ソースをコピペしてコンパイルして実行するほうがはるかにめんどい
167 名前:129 mailto:sage [04/06/27 10:57 ID:BWzYLsUd] 今更ながらやっとwindows.hが読める?環境が整ったよ… >>130-132 さんありがとう。 LSI-C86試食でやっていたのですがこの度borlandのなんとかをいれました 次はSDL&Cygwin???? なんかいまだにDelphiとか分からないんですけど何をどうするのが好ましいのでしょうか…? 自分だけ違う次元ですね…。鬱。
168 名前:名前は開発中のものです。 mailto:sage [04/06/27 12:50 ID:1xxqplwj] >167 SDLとかCygwinとかDelphiとか気にしなくても良いから とりあえずborland c++ コンパイラ用意できたということで Cのお勉強をしてみましょうよ
169 名前:167 mailto:sage [04/06/27 13:15 ID:BWzYLsUd] >>168 SDLとかいれたほうが楽なのかなと思ったのですが… やっぱりいきなり窓プログラミングにぶっ飛ぶより基礎からじっくりやるべきですか 基礎でぬくぬくしてられないと思ったもので…反省。
170 名前:課題2@D言語 mailto:sage [04/06/27 13:29 ID:TlIkOaxm] まだβ版だけど先取りして勉強。 素数判定。 const int MAX_COUNT = 1000; int main() { int num,check,count; printf("1\n"); count = 1; num = 2; while (count<MAX_COUNT) { for (check=2;check<num;check++) { if (num%check==0) break; } if (check==num) { printf("%d\n",num); count++; } num++; } return 0; }
171 名前:名前は開発中のものです。 [04/06/27 17:32 ID:m6T91X5d] >>163 ソース貼り付けのメリットも捨てがたいな テキストファイルを扱えるあぷろだがあれば閲覧もダウンロードもできて楽かもしれん スレにソース貼りまくりも妙に楽しいんだが >>164 ,,ヘ ヘ / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ (,, ゚∇゚) < クレクレ厨逝ってよち! 〜(,,_ノ \_____________ >>165 megaBBSスクリプト( pabbs.hp.infoseek.co.jp/haifu.html )が半角、全角、TABを扱えていい感じだった しかも等幅フォントも使えるみたい 2chでインデントつける方法は教えてもらってきた pc5.2ch.net/test/read.cgi/tech/1088022524/83-92 >>166 だよな、人のソースみて勉強してる立場からすると崩れたソースは辛い >>167 >>169 Win32APIで窓プログラミング汁! ぬくぬくどころか最難関だw といっても参加者やわかる人が多い環境でもあるので王道かもしれん ひたすらたくさんの開発環境を整えてPCの基礎知識を仕入れるのも(・∀・)イイ! >>170 D言語知らないから間違ってたら悪いんだが それって1も表示されないか?(1はもちろん素数じゃない) >>生徒BLUE氏 BRUSHの解放忘れがあるよ
172 名前:課題2@D言語 mailto:sage [04/06/27 17:41 ID:TlIkOaxm] >>171 1と自分以外で割れない数が素数じゃないの? 1と1以外で割れない数だからと思って"わざわざ"付け足したのに orz
173 名前:名前は開発中のものです。 mailto:sage [04/06/27 18:31 ID:fYoguU/V] テスト というかこんな感じのロダでいいのかな?cppアップ可能に設定してみた cgi.f11.aaacafe.ne.jp/~novarabb/phpup/img/007.cpp 各言語のテキストに対応させればそのままあpできるし。
174 名前:名前は開発中のものです。 mailto:sage [04/06/27 19:00 ID:PY8053hi] >>169 実際にはWindowsのゲームプログラミングはそれほど難しくないよ。 内部にゲーム画像を作成してキー入力などに応じて更新、それを 描画するだけだからね。ウインドウプログラミングの「流れ」を 掴めれば、パズルゲームやADV/RPGは比較的簡単に作れる。 何からはじめればよいかわからない、ということなら C++ ゲーム プログラミング といったキーワードでぐぐるなり、書店で「Windowsプログラミングの本」 を眺めて何をすれば「Windows用プログラム」になるのか、調べてみると 良いかも。 本当に「基礎」をやるなら、高レベルのライブラリではなくまずSDK ベースのWindowsプログラミングで「Windowsのプログラムの流れ」を しっかり追った方が良い。
175 名前:x≠先生かつx=生徒 ⇒ x=俺 mailto:sage [04/06/27 19:17 ID:v+n6K1pQ] インベーダー途中 gamdev.org/up/img/757.zip
176 名前:生徒A [04/06/27 19:26 ID:WIo25CTE] しばらく来ない内にすごい事になってるよ…もう付いていけない
177 名前:生徒BLUE [04/06/27 22:04 ID:b0jvqBNF] あまりソースを貼り付けるのは荒らしっぽい?のでうぷろだにしました 今はまだ170行ですがインベーダーなら500〜1000ぐらいにたぶんなるので そろそろ切り替えようと思っていたところです キー入力はGetAsyncKeyStateを使いました 0x8000の意味とかまだよくわかりませんけれど if ((GetAsyncKeyState( VK_UP ) & 0x8000) == 0x8000) { y--; } チラチキ対策でダブルバッファを使った描画をしています 参考にしたソースをほぼそのままコピペしていますが内容は理解しています このあたりは以前、やったことがあるのでまだまだ大丈夫 課題5キー入力 gamdev.org/up/img/759.zip
178 名前:名前は開発中のものです。 mailto:sage [04/06/27 22:28 ID:6fdveQpW] 画像だけなら簡単だが、音をつける段階で挫折しそうだ。 ダイレクトXを使わずに、WAVを複数同時に鳴らすことがどれほど大変か・・・
179 名前:名前は開発中のものです。 mailto:sage [04/06/27 22:41 ID:PY8053hi] >>178 そうだね。 「自分でPCMバッファを作成し波形を合成、リアルタイムに出力」 なんてことになると結構しんどい(面白いとも言うがw)・・・。 まあ、画像でも同じような場面(自分で管理するバッファを処理し ながらのリアルタイム出力)はあるわけだが。
180 名前:名前は開発中のものです。 mailto:sage [04/06/27 22:48 ID:qWAk5Epz] ほらほら、先生が仕切らないから、落ちこぼれがでちゃったぞ。 一人は突っ走ってるし。
181 名前:名前は開発中のものです。 mailto:sage [04/06/27 22:58 ID:qWAk5Epz] >>177 > 0x8000の意味とかまだよくわかりませんけれど 「ANDでマスクとる」とかはわかる? 定数書いちゃダメとか、staticって書くようにするとか、 拡張子がcppなのにC言語風じゃん!とか、 バックバッファあたりは毎回生成&破棄しなくても最初に一度だけ 作成してしまった方が処理の無駄がないとか、ブラシとペンも。
182 名前:x≠先生かつx=生徒 ⇒ x=俺 mailto:sage [04/06/27 23:05 ID:v+n6K1pQ] >>180 とりあえず突っ走ってるって俺じゃないよな? >>134 CPU使用率が70%〜80%まで行ったんだけど・・・。
183 名前:x≠先生かつx=生徒 ⇒ x=俺 mailto:sage [04/06/27 23:07 ID:v+n6K1pQ] ( ゚д゚)ハッ!もしや、落ちこぼれが俺か!
184 名前:副担任 mailto:sage [04/06/27 23:48 ID:sIosK61q] 先生が帰ってくるまで漏れが面倒みましょうか?
185 名前:ぷち [04/06/28 00:10 ID:W5zBmX8i]
186 名前:名前は開発中のものです。 mailto:sage [04/06/28 03:20 ID:vjeNxAuN] 落ちこぼし師
187 名前:名前は開発中のものです。 mailto:sage [04/06/28 04:46 ID:AKJFcicb] >>184 お願いします。 ソース貼っても、アドバイス求めても生徒ばっかりでレスなくて(´・ω・`)ショボーンです。
188 名前:生徒A [04/06/28 06:10 ID:D8BhR1kS] なんとか徹夜して6時間ほど粘ってキー入力まで行ったけど、限界が近い… WM_TIMERで画面の更新を行っているんですが、なんかすごくちらつくんですよ あと、DeleteObject(hBr)というのを使うと、何故か画面が白くなるんです… なので、使ってません。 gamdev.org/up/img/762.lzh
189 名前:4 ◆3VUXqvbfSY [04/06/28 06:20 ID:kLFrYp0l] すみません皆様… ミニ死の行進してました… アプロダについて: あっても、別に構いませんが、必要無いようにします。 具体的には、トップダウンで(例えばCなら) メインを作る。 ↓ 個々に使われた関数を作る みたいに、ソースを(出来るだけ解りやすく)分割して、表示しようと企んでいます。 進行度: 自分で出来る方がドンドン進まれるのは、むしろ、喜ばしいです。ただし、課題はあくまで初心者ラインにしておきます。 だから、焦らなくて大丈夫。今の課題は、「キーで、赤い四角を動かす」です。 先生: や、やっと一人…m(_ _)mヨロシクオネガイシマス 次の課題: 当たり判定。 先ほどの、「動く赤い四角」を避けゲーに改造しましょう 敵は 敵x = rand() % 640;//rand()*640/RAND_MAX で…敵y++;のように動く単純な敵です。 当たったら終了と言う仕様で…
190 名前:副担任 mailto:sage [04/06/28 10:23 ID:HdfIcXTc] 漏れは先生と考え方が違うので一応書いておきます。うざかったらクビにしてください。>先生 ・動けば正義(いい設計はできたほうがいいけどまだ求める段階ではないと思う) ・ソースは固めてどこかにアップする(バックアップ、成果としてわかりやすい) ・バイナリは付けて欲しい(開発環境を全てそろえるのは難しい) ・課題によけいなものは付けないでください(初心者が提出したソースを参考にしたとき、必要な機能のみが実装されていたほうがいい) あくまで初心者のためのライブラリとしてとらえています。 「絵を描くにはこうする」「動かすにはこうする」「…」「…」のサンプルコードの固まりにしたいです。 課題の方針には賛成なので従います。 というわけで分からんことがある人は漏れが面倒みます。勉強しながら…。orz
191 名前:副担任 mailto:sage [04/06/28 10:26 ID:HdfIcXTc] 訂正すまそ。 × ・課題によけいなものは付けないでください(初心者が提出したソースを参考にしたとき、必要な機能のみが実装されていたほうがいい) ○ ・提出したソースにはよけいな機能は付けないでください(初心者が提出したソースを参考にしたとき、必要な機能のみが実装されていたほうがいい)
192 名前:名前は開発中のものです。 mailto:sage [04/06/28 10:28 ID:Ten9Dr/x] >>188 簡単だが添削。ウィンドウプロシージャだけ。 DeleteObjectの2行はWM_PAINT内でやってはダメ。 WM_PAINTは何度も呼ばれるため、最初の描画が終了した時点で、作ったペンやブラシは 無効になるため、色がつかなくなる。DeleteObjectするならWM_DESTROY内で。 ちなみにCreateしたものはちゃんと削除するのがお約束。 SelectObjectしたものに関しても、元に戻しておくのが一応の作法。 holdobj = SelectObject(hdc, hobj);// 以前のオブジェクトハンドルを保存 // 何か処理 holdobj = SelectObject(hdc, holdobj);// 以前のオブジェクトに戻す 何故か赤く塗りつぶされないというのは、ディスプレイDCに複数回描画を行っていて、それが ちらつきとして現れるから。こういう場合はオフスクリーンに描画し、最後にディスプレイDCに BitBltする。
193 名前:名前は開発中のものです。 mailto:sage [04/06/28 10:30 ID:Ten9Dr/x] ちと訂正・・orz ×holdobj = SelectObject(hdc, holdobj);// 以前のオブジェクトに戻す ○SelectObject(hdc, holdobj);// 以前のオブジェクトに戻す
194 名前:63 ◆xdaKt6k1XI mailto:sage [04/06/28 15:51 ID:W33tIq0j] >>190 変な質問ですいません バイナリってなんですか?
195 名前:生徒A [04/06/28 16:36 ID:D8BhR1kS] >>194 190じゃないですが、もともとは2進数という意味だと思います。 だから、この場合は、1と0の組み合わせで作られた機械語データ (実行ファイル)の意味だと思います。 他にも、テキストデータ以外のファイル全てを指す事もあります。
196 名前:生徒A [04/06/28 16:40 ID:D8BhR1kS] >>192 ありがとうございます。 DeleteObjectのやり方は分かったのですが、 オフスクリーンのやり方がちょっとよく分からないです。 具体的には、オフスクリーンの作成方法です。
197 名前:名前は開発中のものです。 mailto:sage [04/06/28 17:06 ID:cdlT0cfW] CreateCompatibleBitmap
198 名前:副担任 mailto:sage [04/06/28 17:37 ID:HdfIcXTc] >>194 Windowsの実行ファイルのことです。"〜.exe" ってやつ。 C言語とかはコンパイルして実行ファイルを作らないとプログラムが動きません。 HSPはインタプリタ言語なので実行ファイルは作らなくていいみたいですね。 >>195 正解です
199 名前:Ruby@課題6当たり判定 [04/06/28 18:32 ID:1FRiXQWF] require 'sdl' SDL.init( SDL::INIT_VIDEO ) screen = SDL.setVideoMode( 640, 480, 16, SDL::SWSURFACE ) x=(639-32)/2 y=(479-32)/2 enemyX=rand(639-32) enemyY=0 loop do while event = SDL::Event2.poll case event when SDL::Event2::Quit exit end end SDL::Key.scan y -= 1 if SDL::Key.press?( SDL::Key::UP ) x += 1 if SDL::Key.press?( SDL::Key::RIGHT ) y += 1 if SDL::Key.press?( SDL::Key::DOWN ) x -= 1 if SDL::Key.press?( SDL::Key::LEFT ) x=0 if x<0 x=(639-32) if x>(639-32) y=0 if y<0 y=(479-32) if y>(479-32) enemyY=enemyY+1 enemyY=0 if enemyY>479 if (x-enemyX).abs<32 and (y-enemyY).abs<32 then exit end
200 名前:Ruby@課題6当たり判定 [04/06/28 18:33 ID:1FRiXQWF] screen.fillRect( 0, 0, 640, 480, [ 0, 0, 0 ] ) screen.fillRect( x, y, 32, 32, [ 255, 0, 0 ] ) screen.fillRect( enemyX, enemyY, 32, 32, [ 0, 255, 0 ] ) screen.updateRect( 0, 0, 0, 0 ) end 課題6当たり判定(実行ファイル付き) gamdev.org/up/img/764.zip 【Rubyスクリプトを実行ファイルにする方法】 exerb.sourceforge.jp/ からExerbををダウンロード レシピファイルを書く add_ruby_script[TAB](スクリプト名) add_extension_library[TAB](ライブラリ名)[TAB](パスを含めたライブラリ名) 例) add_ruby_script[TAB]collision.rb add_extension_library[TAB]sdl.so[TAB]sdl.so ※注意 [TAB]はTABキーで入力してください 通常のエディタだと空白と判別できませんので注意 Exerb添付ドキュメントは旧式の書き方になっているようです サンプルは新しいものだったのでそちらを参考にしました
201 名前:63 ◆xdaKt6k1XI mailto:sage [04/06/28 20:48 ID:W33tIq0j] >>195 >>198 ありがとうございました。
202 名前:生徒BLUE [04/06/28 21:18 ID:mIyMN4GH] 指摘された所を全部直しました 課題5キー入力再提出 gamdev.org/up/img/766.zip
203 名前:4 ◆3VUXqvbfSY [04/06/28 21:39 ID:kLFrYp0l] 参考程度に… オフスクリーン: 変数宣言 前略 hdcOFF=CreateCompatibleDC(hdcON);//空の描画ハンドルを作る CopyBitmap=CreateCompatibleBitmap(hdcON,640,480);//表のウィンドウと互換のビットマップをつくる。 SelectObject(hdcOFF,CopyBitmap);//んで、設定 中略 BitBlt(hdcON,0,0,640,480,hdcOFF,0,0,SRCCOPY);//裏に書かれた内容を、表に上書きする。 後略 こんな感じ。…VC++だけでごめんなさい…
204 名前:LGP@課題1数当て [04/06/28 23:47 ID:1FRiXQWF] スクリプト組はあまり時間もかからず有利なので 複数言語同時習得を目指してみます CH = G@SETUP( 640 , 480 , 16 , 1 ) RANDSET(SYSTIME()) RN = RAND()%9+1 G@PRINT(CH,0,0,"1〜9の数を入力せよ") G@FLIP() LOOP I@KEYGET2( ) IF I@KEYBTN2(1)=2 THEN ANS=I@KEYBTN2(0)-1 IF ANS=RN THEN SYSEXIT() ENDIF IF (ANS>0) AND (ANS<10) THEN N=N+1 G@GDIBOXFULL( CH , 0, 100, 640, 480 ) G@PRINT(CH,0,100,"はずれ"+STR(N)+"回目") ENDIF G@FLIP() ENDIF S@WAIT() ENDLOOP LGP@課題1数当て(実行ファイル付き) gamdev.org/up/img/767.zip
205 名前:名前は開発中のものです。 mailto:sage [04/06/29 06:26 ID:Ngmzz0xf] 課題6 実行方法:@メモ帳にコピペ、A名前をつけて保存でinvader.html、BブラウザにD&D <html><head><title>Invader Game?</title><style type="text/css"><!-- .self{background-color:#FF0000;position:absolute;width:32px;height:32px;} .enemy{background-color:#0000FF;position:absolute;width:32px;height:32px;} --></style></head> <body onLoad="m()"onKeyDown="k[event.keyCode]=1"onKeyUp="k[event.keyCode]=0"> <div id=c class=self></div><div id=e class=enemy></div> <script language="Javascript"><!-- var alive=true,timerID,k=[],x=304,y=448,eX,eY= 480; var charElm=document.getElementById('c'),enemyElm=document.getElementById('e'); function m(){clearTimeout(timerID); x+=k[37]&&x?-8:k[39]&&x<608?8:0;y+=k[38]&&y?-8:k[40]&&y<448?8:0; charElm.style.left=x;charElm.style.top=y; eY+=8;if(eY>480){eY=-32;enemyElm.style.left=eX=Math.floor(Math.random()*640);} enemyElm.style.top=eY; if(Math.abs(x-eX)>32||Math.abs(y-eY)>32)timerID=setTimeout(m,30);} //--></script></body></html>
206 名前:LGP@課題2素数 [04/06/29 09:54 ID:OSp1CFcf] FH=F@OPEN("PrimeNumber.txt" , 3 ) F@WRITES( FH , STR(2) ) COUNT=COUNT+1 I=3 WHILE COUNT<1000 SOSU=-1 FOR J=3 TO I/2 STEP 2 IF I%J=0 THEN SOSU=0 ENDIF NEXT IF SOSU=-1 THEN F@WRITES( FH , STR(I) ) COUNT=COUNT+1 ENDIF I=I+2 S@WAIT() ENDWHILE F@CLOSE( FH )
207 名前:名前は開発中のものです。 mailto:sage [04/06/29 13:12 ID:WW/6W0k2] dpかwinsockでチャット作りたひ。
208 名前:名前は開発中のものです。 [04/06/29 18:46 ID:vpUdLCjy] >>207 自分で作ったチャットソフトで皆と繋げられたら楽しそうな予感!
209 名前:名前は開発中のものです。 [04/06/29 21:15 ID:OSp1CFcf] もの凄い勢いで進行してるのでまとめの意味もあって統計をとってみました 抜けてる人がいたらごめんなさい JavaScript ****** 6 Ruby.. ****** 6 生徒A(Win32API). ***** 5 生徒BLUE (Win32API). ***** 5 Delphi ***** 5 D言語 ** 2 LGP ** 2 x≠先生かつx=生徒 ⇒ x=俺(VB) 測定不能 まとめページ gamdev.org/w/?%5B%5B%A1%DA%BD%E9%BF%B4%BC%D4%A1%DB%B2%DD%C2%EA%A4%F2%A5%AF%A5%EA%A5%A2%A4%B7%A4%C6%A4%A4%A4%AF%A5%B9%A5%EC%A1%DA%B9%D6%BD%AC%B2%F1%A1%DB%A4%DE%A4%C8%A4%E1%5D%5D アップローダ gamdev.org/up/
210 名前:x≠先生かつx=生徒 ⇒ x=俺 mailto:sage [04/06/29 21:28 ID:gNXtRGm+] >>209 VBを使った覚えは無いんですが…というよりVB使えません。 >>134 のことかな?
211 名前:名前は開発中のものです。 mailto:sage [04/06/29 22:14 ID:OSp1CFcf] >>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 測定不能
212 名前:LGP@課題3赤い四角 [04/06/29 22:53 ID:OSp1CFcf] //640x480、16ビット色、ウィンドウ画面 CH = G@SETUP( 640 , 480 , 16 , 1 ) //ブラシを赤色に設定(RGBはそれぞれ0〜1.0で設定) G@GDISETBRUSH( 0 , 1.0 , 0 , 0 ) //四角を描画 G@GDIBOXFULL( CH , 0, 0, 320, 240 ) //フリップ G@FLIP() //無限ループ LOOP S@WAIT() ENDLOOP
213 名前:生徒BLUE [04/06/30 00:29 ID:HYWm3For] >>181 >「ANDでマスクとる」とかはわかる? はい、この場合は2進数に直して一番左のビット以外を全部0にするってことですよね MSDN読んだりあれからさらに調べてみたので前よりはちょっとわかったのですが 左端のビットが1ならボタンが押されているという程度の理解でいいのでしょうか ・定数書いちゃダメ defineを積極的に使ってみました C++の場合だとdefineは使わずにconstを使ったほうがいいと書いてあるホームページも みつけましたがどうなんでしょう? ・拡張子がcppなのにC言語風 意識せずに全部cppにする習慣がついてたので…… クラスを使う→cpp、使わない→cでいいですか? 拡張子の使い分けむずかしい ・バックバッファあたりは毎回生成&破棄しなくても最初に一度だけ GetDCを使えばいいんだ!と前回は気づいてませんでした WEBの情報をあちこちからつまみ食いしてるので全体的にチグハグな感じに なっていたようで指摘してもらって勉強になります ソースみていただける方は2ちゃんねるに貼り付けとアップローダのどちらが見やすいでしょうか? それとも両方のほうがよい?
214 名前:名前は開発中のものです。 mailto:sage [04/06/30 11:43 ID:0T8fXV58] そろそろ本気で見にくくなってきたわけだが、 ちょっと言語が大杉やしないかい? もうちょっと絞ろうよ
215 名前:通りすがり人 mailto:sage [04/06/30 12:46 ID:qBs2hfFg] >>213 > 左端のビットが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 名前:生徒BLUE [04/06/30 17:09 ID:HYWm3For] >>215 早速、コンパイルして試してみました 最下位ビットに注目してみると 1000000000100100100100100100...... といったように変化します 初回だけということなので10000000......というものを期待していたのですがうまくいかないです
217 名前:生徒BLUE [04/06/30 17:38 ID:HYWm3For] 課題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); } gamdev.org/up/img/775.zip
218 名前:名前は開発中のものです。 mailto:sage [04/06/30 18:49 ID:3iu2d+4i] >>216 ん?スペースキーを押すと、こんな風に表示されませんか? ffff8001 ffff8000 ffff8000 ffff8000 ffff8000 ffff8000 ffff8000 ffff8000 ffff8000 ffff8000 ffff8000
219 名前:生徒BLUE [04/06/30 19:04 ID:HYWm3For] >>218 ならないです もうちょっと調べてみます
220 名前:名前は開発中のものです。 mailto:sage [04/06/30 19:39 ID:3iu2d+4i] >>219 あ〜、押しっぱなしの場合は違う結果になるかもです。 OSのキーボードバッファとか、その辺の兼ね合いだと思うけど。
221 名前:名前は開発中のものです。 mailto:sage [04/06/30 19:52 ID:/EAv0A9z] >>215 試して見たけど確かに>>216 の現象が出るな。 他の出力で確認したらちゃんと立ち上がりだけ1が出るので printf()絡みでキー状態が変化してるっぽい。 普通はこんな使い方しないので気にしなくて良いと思われ。
222 名前:63 ◆xdaKt6k1XI mailto:sage [04/06/30 21:22 ID:qAZjVMDs] >>211 今回のは敵の大きさとか動きとかよくわからないのでやらないです。
223 名前:名前は開発中のものです。 [04/06/30 22:22 ID:j1/sm794] 320x240で一度作ったけど即死しすぎて32x32に縮小したよ サイズ指定してないから何でもいいと思ったけどそのあたりどうなんですか?>先生 wikiのほうにまとめコーナー作っておいたので各自書きたいことがあったら適当にどうぞ というか書いてくださいおながいします 名無しさんを消して自分の名前にして提出状況とかコンパイラは何を使ってるとかそんなのでいいので gamdev.org/w/?%5B%5B%A1%DA%BD%E9%BF%B4%BC%D4%A1%DB%B2%DD%C2%EA%A4%F2%A5%AF%A5%EA%A5%A2%A4%B7%A4%C6%A4%A4%A4%AF%A5%B9%A5%EC%A1%DA%B9%D6%BD%AC%B2%F1%A1%DB%A4%DE%A4%C8%A4%E1%5D%5D
224 名前:LGP@課題4sin波形 [04/07/01 00:05 ID:TMNGfYFe] //画面初期化、最後を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] >>222 ,223 サイズは自由で結構です。 敵の動きは…だからy++;だけですよ?
226 名前:生徒A mailto:sage [04/07/01 14:26 ID:MCi74o/R] 数日間ソースとにらめっこしてるのですが、バックバッファーの処理が上手くいかないです…
227 名前:名前は開発中のものです。 mailto:sage [04/07/01 15:45 ID:bdPAbTo6] >>226 キミのソースに少し手を加えたやつをうpろだにあげたから試してみれ。780.lzhだ。 ただしオフスクリーン処理以外(後始末とか)は端折ってるのでそこは参考にしないように。
228 名前:LGP@課題5キー入力 [04/07/01 22:17 ID:TMNGfYFe] 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] 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] 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] 保守age