1 名前:名前は開発中のものです。 [04/06/10 18:05 ID:VshiFFV8] ゲームに必要な要素を先生が出してくれます その課題をクリアしていく講習会です
80 名前:名前は開発中のものです。 mailto:sage [04/06/17 00:05 ID:AAkEHKib] よし、俺も素数のと数当てやってみる
81 名前:名前は開発中のものです。 mailto:sage [04/06/17 00:44 ID:AAkEHKib] #include <stdio.h> #include <math.h> int IsPrime(int); int main() { int i, n = 1; printf(" 2 "); for(i = 0; i < 999; i++){ for(n+=2; IsPrime(n) == 0; n+=2); printf("%4d ", n); } return 0; } int IsPrime(int n) { int i; if(n % 2 == 0 && n != 2) return 0; for(i = 3; i <= sqrt(n); i += 2) if(n % i == 0) return 0; return 1; } 2を出すべきか出さざるべきか小一時間悩んだ…
82 名前:63 ◆xdaKt6k1XI mailto:sage [04/06/17 07:40 ID:wIlIrMhO] >>78 結構難しそうっすね。 >>79 2から自分自身のまで順番に割ってって計算結果が1以外だったら自分自身の数を1足してやりなおして、計算結果が1だけだったらその数を表示するってようにしたんですが。
83 名前:名前は開発中のものです。 mailto:sage [04/06/17 10:39 ID:qLkBm+a6] その考え方で問題ないか確認してみる。...のあとの数字は余り。 5/1 = 5 ... 0 5/2 = 2 ... 1 5/3 = 1 ... 2 5/4 = 1 ... 1 5/5 = 1 ... 0 6/1 = 6 ... 0 6/2 = 3 ... 0 6/3 = 2 ... 0 6/4 = 1 ... 2 6/5 = 1 ... 1 6/6 = 1 ... 0
84 名前:63 ◆xdaKt6k1XI mailto:sage [04/06/18 15:04 ID:uMGX0XjB] >>83 駄目でしたか・・・・もう一度がんばります!
85 名前:名前は開発中のものです。 mailto:sage [04/06/19 14:57 ID:W8craWnM] #include <stdio.h> void main() { unsigned long cun; int a,i; printf("2\n"); for(i=3;i<=1000;i+=2){ for(a=3;a<i;a+=2){ cun++; if(i%a==0) break; } if(i==a) printf("%d\n"); } } 暇なんで参加
86 名前:85 mailto:sage [04/06/19 14:58 ID:W8craWnM] unsigned long cun; とcun++; は無視で <(_ _)>
87 名前:名前は開発中のものです。 mailto:sage [04/06/19 17:01 ID:olZSV2kJ] >>85-86 Upするまえにテストしよ〜よ。 それから、問題文をちゃんと読むべし。
88 名前:生徒A mailto:sage [04/06/19 19:27 ID:GZf8LDr8] そういえば、新しい課題って無いの?
89 名前:名前は開発中のものです。 mailto:sage [04/06/19 20:08 ID:hqj9xu9C] 素数とかはロジックを考えるのは大切だけど、できてもあまり嬉しくないからなぁ。 かといって特定の分野に特化すると、それぞれの分野には初心者スレがあるし。 「適当なウィンドウを作成してsin波形を描画する」あたりはどう?
90 名前:4 ◆3VUXqvbfSY [04/06/19 21:47 ID:wn6hjF1m] 良いねその課題!…ってチョットレベル上がり杉な… …まあ良いか… でもまずは、640*480のウィンドウに (0,0)320*240の赤い四角を描いてください。
91 名前:4 ◆3VUXqvbfSY [04/06/19 22:17 ID:wn6hjF1m] 前課題解答例 #include <stdio.h> int Check_Prime(long n)//素数判定 { long loops; loops=1; while(loops*loops < n) { if(loops>2)loops+=2; else loops++; if(n%loops==0)return 1; } return 0; } void main(void) { long loops=2,m=1; printf("%ld %ld\n",m,loops); while(m<2000) { m++; printf("%ld %ld\n",m,loops); } if(loops>2)loops+=2; else loops++; }
92 名前:63 ◆xdaKt6k1XI mailto:sage [04/06/19 22:23 ID:D2QJG2Dd] 素数は無理でしたが・・・ >>90 の課題はできました。 WIDTH 640,480 COLOR 255 BOXF 320,240,1,0 stop
93 名前:63 ◆xdaKt6k1XI mailto:sage [04/06/19 22:24 ID:D2QJG2Dd] >>92 BOXF 320,240,1,0 は BOXF 320,240,0,0 です。
94 名前:4 [04/06/19 22:25 ID:wn6hjF1m] ミスった(汗。訂正 void main(void) { long loops=2,m=1; printf("%ld %ld\n",m,loops); while(loops<2000) { if(Check_Prime(loops)==0) { m++; printf("%ld %ld\n",m,loops); } if(loops>2)loops+=2; else loops++; } }
95 名前:生徒A mailto:sage [04/06/20 04:33 ID:9LoKJ5Oe] なんだか、構造体とかポインタとかWin32APIとかGDIとかメッセージループとか 難しすぎなんですけど… できたには、できました。 #include "windows.h" LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM); int APIENTRY WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nCmdShow ) { WNDCLASSEX wcex;HWND hWnd;MSG msg; // ウィンドウクラス構造体を設定 wcex.cbSize = sizeof(WNDCLASSEX);wcex.style = CS_HREDRAW | CS_VREDRAW; wcex.lpfnWndProc = (WNDPROC)WndProc;wcex.cbClsExtra = 0; wcex.cbWndExtra = 0;wcex.hInstance = hInstance;wcex.hIcon = LoadIcon(NULL, IDI_APPLICATION); wcex.hCursor = LoadCursor(NULL, IDC_ARROW);wcex.hbrBackground = (HBRUSH)(COLOR_WINDOW + 1); wcex.lpszMenuName = NULL;wcex.lpszClassName = "ModelApp"; wcex.hIconSm = LoadIcon(NULL, IDI_APPLICATION); // ウインドウクラスを登録 RegisterClassEx(&wcex); // ウインドウを作成 hWnd = CreateWindow(wcex.lpszClassName, "640×480のウィンドウ上の(0,0)へ320×240の赤い四角を描く", WS_OVERLAPPEDWINDOW,CW_USEDEFAULT,CW_USEDEFAULT,640,480,NULL,NULL,hInstance,NULL); ShowWindow(hWnd, nCmdShow);UpdateWindow(hWnd); // メッセージループ while(GetMessage(&msg, NULL, 0, 0)) {TranslateMessage(&msg);DispatchMessage(&msg);}return msg.wParam; }
96 名前:生徒A mailto:sage [04/06/20 04:33 ID:9LoKJ5Oe] // ウインドウプロシージャ LRESULT CALLBACK WndProc(HWND hWnd,UINT message,WPARAM wParam,LPARAM lParam) { HDC hDC;PAINTSTRUCT ps;static HPEN hPen;static HBRUSH hBr; RECT box;box.bottom =480;box.left =0;box.right =640;box.top =0; // メッセージの種類に応じて処理を分岐 switch (message){ case WM_CREATE:hPen=CreatePen(PS_SOLID,1,RGB(255,0,0));hBr=CreateSolidBrush(0x00000000); return 0; case WM_PAINT: hDC=BeginPaint(hWnd,&ps);SelectObject(hDC,hBr);FillRect(hDC,&box,hBr); SelectObject(hDC,hPen);Rectangle(hDC,0,0,320,240);EndPaint(hWnd,&ps);return 0; case WM_DESTROY:PostQuitMessage(0);return 0; default:return DefWindowProc(hWnd, message, wParam, lParam);} }
97 名前:生徒A mailto:sage [04/06/20 04:36 ID:9LoKJ5Oe] 正直、4行で実現できるHSPがうらやましいと思った…
98 名前:名前は開発中のものです。 [04/06/20 04:46 ID:l91pLvEB] ここはJavaでは参加できないですか?
99 名前:名前は開発中のものです。 mailto:sage [04/06/20 07:05 ID:w0wGxy3B] >>98 問題ないと思いますよ
100 名前:名前は開発中のものです。 mailto:sage [04/06/20 07:50 ID:NlSC2nfH] 赤い四角 <html><body><script> s='<body><div style="position:absolute;left:0px;top:0px;background-color:Red;width:320px;height:240;"></div></body>'; window.open('','','width=640,height=480').document.write(s); </script></body></html>
101 名前:名前は開発中のものです。 mailto:sage [04/06/20 07:51 ID:NlSC2nfH] SIN波 <html><body></div><script> var a=[]; for(i=0;i<10000;i++)a[i]=0; for(i=0;i<100;i++)a[(Math.sin(Math.PI/50*i)*50+50|0)*100+i]=1; var s='<body><font face="MS ゴシック" style="font-size:4px;">'; for(i=0;i<100;i++){for(j=0;j<100;j++)s+=a[i*100+j]?'■':' ';s+='<br>';} s+='</font></body>'; window.open('','','width=640,height=480').document.write(s); </script></body></html>
102 名前:名前は開発中のものです。 mailto:sage [04/06/20 11:15 ID:B7NIG/G/] 画面を黒でクリアする方法ってこれでいいんですか? void Clear(void) { SelectObject(hDC , GetStockObject(BLACK_BRUSH)); Rectangle(hDC , 0 , 0 , WIDTH , HEIGHT); }
103 名前:名前は開発中のものです。 mailto:sage [04/06/21 12:47 ID:X4sdLydq] >>102 イイともワルいともいえないというか、 ウィンドウを更新するとか必要だけど、まぁ、そんな感じ。 つーか、先生はどこだ?!
104 名前:4 ◆3VUXqvbfSY [04/06/21 13:24 ID:xh+2kWgx] ココw …まあ、VCの人が出来てんだから、sinの課題も可能か… sinの方の制作もどうぞ。 さて…みなさんに質問です。 これから、ゲーム制作を開始してみます。 次の課題は、インベーダーとテトリス どちらがいいですか? いや…どっちが基本的ですかね? とりあえず、プログラムの特徴は インベーダー:かなり基本的なシューティング。当たり判定とキー判定がネック。また、あの敵の大群を纏めて動かすのも結構めんどい。高速化も要るかも。 テトリス:かなり基本的なパズル。回転の処理、消しの判定、落ち判定がネック。とは言え、これ自体はさして大変ではない。インベーダーより楽に見えるが、向こうより単純な分、テスト回数が少なく、飽きるかもw まあ、どちらも一気にはつくりませんw 方向性が決まったら、ボトムアップに作りましょうw
105 名前:名前は開発中のものです。 mailto:sage [04/06/21 13:30 ID:Z9w22r4l] >>102 DCはグローバルで持ってるのか?引数で渡した方が良いぞ。
106 名前:名前は開発中のものです。 mailto:sage [04/06/21 15:47 ID:6NF9APWD] どちらにせよソースが収まらない悪寒
107 名前:x≠先生かつx=生徒 ⇒ x=俺 mailto:sage [04/06/21 18:09 ID:X+fe3iOx] HSP版 #include "hspext.as" pos 0, 240 repeat 640 emsin sin, cnt\256 line cnt, 240+(sin*240/256) loop stop
108 名前:名前は開発中のものです。 mailto:sage [04/06/21 19:41 ID:/2qctf8W] テトリスは専用スレがあるし、JavaScriptで7行に収まったりと、 ネタが出尽くしているので飽きてます。
109 名前:名前は開発中のものです。 mailto:sage [04/06/21 19:57 ID:8Xx3uQUF] 237 名前:名前は開発中のものです。[sage] 投稿日:03/09/21(日) 18:16 ID:vg0x9Gpj >>227 www.excite.co.jp/world/url/body?wb_url=http%3A%2F%2Fwww.gamedev.net% 2Freference%2Fdesign%2Ffeatures%2Fmakegames%2Fpage2.asp&wb_lp=ENJA&wb_dis=2 テトリス→ブロック崩し→パックマン→スーパーマリオ→ギャラガ がいいらしい リンク先のスーパーマリオ2が違うゲーム(夢工場?)に見えるけどなんなんだろ
110 名前:名前は開発中のものです。 mailto:sage [04/06/21 20:05 ID:B4V2NoLh] メッセージループを使う60fpsのゲームにして欲しい。 後々こっちのほうが役に立つと思う。
111 名前:生徒A mailto:sage [04/06/21 21:54 ID:jNWjDlXF] とりあえず、sinカーブの方を少し遅れたんですが、作ってみました。 一番先頭に#include<math.h>を付けたら、あとはキャプション以外は、ウィンドウプロシージャーしか違わないので そこだけ書く事にしました。 // ウインドウプロシージャ LRESULT CALLBACK WndProc(HWND hWnd,UINT message,WPARAM wParam,LPARAM lParam) { HDC hDC;PAINTSTRUCT ps;static HPEN hPen;static HBRUSH hBr; RECT box;box.bottom =480;box.left =0;box.right =640;box.top =0; int x=0,y,k=0; double rad=3.14159/180; // メッセージの種類に応じて処理を分岐 switch (message){ case WM_CREATE: hPen=CreatePen(PS_SOLID,1,RGB(255,0,0));hBr=CreateSolidBrush(0x00000000); return 0; case WM_PAINT: hDC=BeginPaint(hWnd,&ps);SelectObject(hDC,hBr);FillRect(hDC,&box,hBr); for(x=0;x<=640;x++){ y=(int)(sin((double)k*rad)*100.0+240.0); x++; k++; if(k>360)k=0; SelectObject(hDC,hPen); SetPixel(hDC,x,y,RGB(255,0,0)); } EndPaint(hWnd,&ps); return 0; case WM_DESTROY:PostQuitMessage(0);return 0; default:return DefWindowProc(hWnd, message, wParam, lParam);} }
112 名前:生徒A mailto:sage [04/06/21 21:57 ID:jNWjDlXF] 私は、インベーダーの方が良いと思います。
113 名前:名前は開発中のものです。 mailto:sage [04/06/21 22:10 ID:MJraUy6q] 本当に一からやるんだったら、まだまだ基礎的なことはたくさんあるですよ。 o 描いた四角を横に動かし続ける o 画面の端で跳ね返るようにする o 2つの四角を描いてを横に動かし続ける(速度が違うようにする) o 四角同士が衝突したら跳ね返るようにする o 四角を斜めに動かす o 斜めに跳ね返るようにする o 丸を描く o 丸同士を当てたら跳ね返るようにする(ビリヤードみたいなの) o etc, etc, etc...
114 名前:名前は開発中のものです。 mailto:sage [04/06/21 22:13 ID:MJraUy6q] あと、できればバイナリ付きソースをUPして欲しかったり…
115 名前:名前は開発中のものです。 mailto:sage [04/06/21 22:17 ID:8Xx3uQUF] まとめページ 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/
116 名前:名前は開発中のものです。 mailto:sage [04/06/21 22:23 ID:Z9w22r4l] 誰かsin関数くらい自前で用意して描画しろよ。
117 名前:生徒A mailto:sage [04/06/21 22:33 ID:jNWjDlXF] sin関数を自前で用意するとなると、テイラー級数展開?が必要になる気がしたんですが… 確か、こんな式だったような sin(x) = x-(x^3/3!)+(x^5/5!)-(x^7/7!)+…
118 名前:名前は開発中のものです。 mailto:sage [04/06/21 23:47 ID:8Xx3uQUF] 赤い四角、Delphiです procedure TForm1.Button1Click(Sender: TObject); begin ClientWidth:=640; ClientHeight:=480; Canvas.Brush.Color:=clRed; Canvas.FillRect(Rect(0,0,320,240)); end;
119 名前:名前は開発中のものです。 mailto:sage [04/06/22 00:43 ID:z3uDPhKo] sin波形、Delphi procedure TForm1.Button1Click(Sender: TObject); var i: Integer; begin ClientWidth:=640; ClientHeight:=480; Canvas.Pen.Color:=clRed; Canvas.MoveTo(0,240); for i:=0 to 627 do begin Canvas.LineTo(i, Trunc(sin(i/100)*100)+240); end; end;
120 名前:4 ◆3VUXqvbfSY [04/06/22 06:00 ID:tegmloOZ] >>113 勿論、選んだ方の基礎からやっていきますから。大丈夫です。ただ、大まかな指針が欲しいだけで。 >>115 ワーイ、まとめページだ!ありがとう! >>ALL マジで、先生増やしてよ〜。僕一人じゃ不安だよ〜
121 名前:名前は開発中のものです。 mailto:sage [04/06/22 08:07 ID:bOsE7Dq6] >>118-119 正解。
122 名前:名前は開発中のものです。 mailto:sage [04/06/22 12:14 ID:vyNZUIcy] >>111 作ったペンとブラシは終了時に開放したほうがいいですよ。
123 名前:名前は開発中のものです。 mailto:sage [04/06/22 13:59 ID:z3uDPhKo] 階級制にしようぜ! *問題に難易度設定 課題にも難易度が設定されていて大佐向け、中尉向けなどがある *昇格資格 課題を一つクリアするたびに昇格 自分の階級より下の問題を解いても昇格しない(大佐は少尉向けの課題を解いても出世はなし) *出題する権利 自分より2つ下向けの課題を出せる(大佐になれば少佐向けを出題できる) *特別昇格 自分より格下の問題を解いた場合、通常は昇格しない しかし、お手本になるようなすばらしい解答、解説をした場合は 昇格の対象となる (上級職の人の任意か下級職の人の過半数の支持が目安) こんな感じでどうよ せっかくだからゲーム感覚でやろうじゃないかと設定してみた ちょっと昇格条件が甘すぎる気もするけど もちろん4 ◆3VUXqvbfSY氏や他の先生役の人はそのまま出題してくれるとありがたい 階級はこれがわかりやすくていい www.special-warfare.net/data_base/102_military_unit/001_military_us/rank_01.html
124 名前:名前は開発中のものです。 mailto:sage [04/06/22 15:06 ID:3E6K9gNw] 階級みたいにポンポンと技術は上がらんからねぇ。 プログラミングの技術って、どちらかというと山登りみたいな感じだと思う。 準備(下積み)がほぼ大半を占めるけど、準備だけしてもだめで 登り方も知らないと駄目だし(変な登り方をすると途中でのたれ死ぬ) なにより体力(根気)が必要。 どれをとっても「これだけやれば大丈夫」という基準が無い。 たまに天才がいて、Tシャツ短パンで一直線にエベレストに登頂したりするけど そういうやつ以外は「大佐のくせにそんなことも知らないのかよ。プッ」って言われるのがオチかも。
125 名前:生徒BLUE@入隊希望 [04/06/22 23:32 ID:ImuZbVzv] 赤い四角の課題解きました 書き込み制限に引っ掛かりますのでのんびり貼り付けていきます 参考にしたのは猫でもわかるプログラミングとSTGを最初からみんなで作るスレです TABやスペースをnbspに変換するツールって欲しい時にはなかなか出てこないですね ム板でたまに見かけた記憶はあるのですが……、持ってる人いたらください それでは貼り付け開始 // 課題 赤い四角 #include <windows.h> #define WIDTH 640 #define HEIGHT 480 LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM); char szClassNme[] = "WINDOWCLASSNAME"; 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); Rectangle(hdc, 0, 0, 320, 240); SelectObject(hdc, hBrush); DeleteObject(hPen); SelectObject(hdc, hOldPen); DeleteObject(hPen); EndPaint(hWnd, &paint); return 0; }
126 名前:名前は開発中のものです。 mailto:sage [04/06/23 01:15 ID:4HGTxQki] 怖いのは登山ルートが間違った状態で登っていることだ 行き先は崖だったり
127 名前:生徒BLUE@入隊希望 [04/06/23 15:21 ID:G2RbfgcV] >>125 の続き //640x480ってひょっとしてクライアントウィンドウじゃなくてウィンドウのサイズでよかったですか? int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPreInst,LPSTR lpszCmdLine, int nCmdShow) { HWND hWnd; MSG msg; WNDCLASS myProg; if (!hPreInst) { myProg.style =CS_HREDRAW | CS_VREDRAW; myProg.lpfnWndProc =WndProc; myProg.cbClsExtra =0; myProg.cbWndExtra =0; myProg.hInstance =hInstance; myProg.hIcon =NULL; myProg.hCursor =LoadCursor(NULL, IDC_ARROW); myProg.hbrBackground =(HBRUSH)GetStockObject(WHITE_BRUSH); myProg.lpszMenuName =NULL; myProg.lpszClassName =szClassNme; if (!RegisterClass(&myProg)) return FALSE; } RECT rect; rect.top = 0; rect.left = 0; rect.right = WIDTH; rect.bottom = HEIGHT; DWORD style=WS_BORDER | WS_CAPTION | WS_SYSMENU | WS_MINIMIZEBOX; AdjustWindowRect(&rect, style, FALSE); int width = rect.right - rect.left; int height = rect.bottom - rect.top; hWnd=CreateWindow(szClassNme, "【初心者】課題をクリアしていくスレ【講習会】", style, CW_USEDEFAULT,0,width,height,NULL,NULL,hInstance,NULL); ShowWindow(hWnd, nCmdShow); UpdateWindow(hWnd); while (GetMessage(&msg, NULL, 0, 0)) { TranslateMessage(&msg); DispatchMessage(&msg); } return (msg.wParam); }
128 名前:名前は開発中のものです。 [04/06/23 18:23 ID:XpSZny8Q] VBも参加していいですか?
129 名前:名前は開発中のものです。 mailto:sage [04/06/23 19:25 ID:mQ2LYzxk] mingwとかSDLとかHSPとかSDKとかSDLPerlとかが一体なんなのか 理解できない漏れ… とりあえずHelloWorldはできたけどウインドウ表示なんて壁高杉 どうすればいいんだよう…
130 名前:4 ◆3VUXqvbfSY [04/06/23 20:11 ID:YwmthHB/] >>128 ぜんぜんOK!HSPが居るんだから大じょーぶ。 >>129 MSDNライブラリを読む事から始めましょう。 ウィンドウ表示に関しては、VCの最初の壁です。コレがあるからVCは面倒くさいんですが…。 しかし、ウィンドウが表示できれば、簡単なゲームは直ぐ作れるようになりますって。 まあ、難しければHSPに転向しちゃうって手もあります。 スピードが要求されなければ、かなり便利な言語です。 HSPでググってみてください。 >>ALL わかりました。インベーダーで始めましょう。 ただし、インベーダーが一通り作れたら、落ちゲーにも触れますよ(ぷよぷよやドリラー等) 階級制は面白いんですが…判断基準が…微妙…。 昇級試験制にしたらどうでしょう。 たとえば。 問題(if文を使わずに、A=Bなら0。A≠Bなら1を表示するプログラムを作れ) とか
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] ほらほら、先生が仕切らないから、落ちこぼれがでちゃったぞ。 一人は突っ走ってるし。