【初心者】課題をクリ ..
83:名前は開発中のものです。
04/06/17 10:39 qLkBm+a6.net
その考え方で問題ないか確認してみる。...のあとの数字は余り。
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
04/06/18 15:04 uMGX0XjB.net
>>83
駄目でしたか・・・・もう一度がんばります!
85:名前は開発中のものです。
04/06/19 14:57 W8craWnM.net
#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
04/06/19 14:58 W8craWnM.net
unsigned long cun; とcun++;
は無視で <(_ _)>
87:名前は開発中のものです。
04/06/19 17:01 olZSV2kJ.net
>>85-86
Upするまえにテストしよ〜よ。
それから、問題文をちゃんと読むべし。
88:生徒A
04/06/19 19:27 GZf8LDr8.net
そういえば、新しい課題って無いの?
89:名前は開発中のものです。
04/06/19 20:08 hqj9xu9C.net
素数とかはロジックを考えるのは大切だけど、できてもあまり嬉しくないからなぁ。
かといって特定の分野に特化すると、それぞれの分野には初心者スレがあるし。
「適当なウィンドウを作成してsin波形を描画する」あたりはどう?
90:4 ◆3VUXqvbfSY
04/06/19 21:47 wn6hjF1m.net
良いねその課題!…ってチョットレベル上がり杉な…
…まあ良いか…
でもまずは、640*480のウィンドウに
(0,0)320*240の赤い四角を描いてください。
91:4 ◆3VUXqvbfSY
04/06/19 22:17 wn6hjF1m.net
前課題解答例
#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
04/06/19 22:23 D2QJG2Dd.net
素数は無理でしたが・・・
>>90の課題はできました。
WIDTH 640,480
COLOR 255
BOXF 320,240,1,0
stop
93:63 ◆xdaKt6k1XI
04/06/19 22:24 D2QJG2Dd.net
>>92
BOXF 320,240,1,0
は
BOXF 320,240,0,0
です。
94:4
04/06/19 22:25 wn6hjF1m.net
ミスった(汗。訂正
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
04/06/20 04:33 9LoKJ5Oe.net
なんだか、構造体とかポインタとか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
04/06/20 04:33 9LoKJ5Oe.net
// ウインドウプロシージャ
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
04/06/20 04:36 9LoKJ5Oe.net
正直、4行で実現できるHSPがうらやましいと思った…
98:名前は開発中のものです。
04/06/20 04:46 l91pLvEB.net
ここはJavaでは参加できないですか?
99:名前は開発中のものです。
04/06/20 07:05 w0wGxy3B.net
>>98
問題ないと思いますよ
100:名前は開発中のものです。
04/06/20 07:50 NlSC2nfH.net
赤い四角
<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:名前は開発中のものです。
04/06/20 07:51 NlSC2nfH.net
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:名前は開発中のものです。
04/06/20 11:15 B7NIG/G/.net
画面を黒でクリアする方法ってこれでいいんですか?
void Clear(void)
{
SelectObject(hDC , GetStockObject(BLACK_BRUSH));
Rectangle(hDC , 0 , 0 , WIDTH , HEIGHT);
}
103:名前は開発中のものです。
04/06/21 12:47 X4sdLydq.net
>>102
イイともワルいともいえないというか、
ウィンドウを更新するとか必要だけど、まぁ、そんな感じ。
つーか、先生はどこだ?!
104:4 ◆3VUXqvbfSY
04/06/21 13:24 xh+2kWgx.net
ココw
…まあ、VCの人が出来てんだから、sinの課題も可能か…
sinの方の制作もどうぞ。
さて…みなさんに質問です。
これから、ゲーム制作を開始してみます。
次の課題は、インベーダーとテトリス
どちらがいいですか?
いや…どっちが基本的ですかね?
とりあえず、プログラムの特徴は
インベーダー:かなり基本的なシューティング。当たり判定とキー判定がネック。また、あの敵の大群を纏めて動かすのも結構めんどい。高速化も要るかも。
テトリス:かなり基本的なパズル。回転の処理、消しの判定、落ち判定がネック。とは言え、これ自体はさして大変ではない。インベーダーより楽に見えるが、向こうより単純な分、テスト回数が少なく、飽きるかもw
まあ、どちらも一気にはつくりませんw
方向性が決まったら、ボトムアップに作りましょうw
105:名前は開発中のものです。
04/06/21 13:30 Z9w22r4l.net
>>102
DCはグローバルで持ってるのか?引数で渡した方が良いぞ。
106:名前は開発中のものです。
04/06/21 15:47 6NF9APWD.net
どちらにせよソースが収まらない悪寒
107:x≠先生かつx=生徒 ⇒ x=俺
04/06/21 18:09 X+fe3iOx.net
HSP版
#include "hspext.as"
pos 0, 240
repeat 640
emsin sin, cnt\256
line cnt, 240+(sin*240/256)
loop
stop
108:名前は開発中のものです。
04/06/21 19:41 /2qctf8W.net
テトリスは専用スレがあるし、JavaScriptで7行に収まったりと、
ネタが出尽くしているので飽きてます。
109:名前は開発中のものです。
04/06/21 19:57 8Xx3uQUF.net
237 名前:名前は開発中のものです。[sage] 投稿日:03/09/21(日) 18:16 ID:vg0x9Gpj
>>227
URLリンク(www.excite.co.jp)
2Freference%2Fdesign%2Ffeatures%2Fmakegames%2Fpage2.asp&wb_lp=ENJA&wb_dis=2
テトリス→ブロック崩し→パックマン→スーパーマリオ→ギャラガ
がいいらしい
リンク先のスーパーマリオ2が違うゲーム(夢工場?)に見えるけどなんなんだろ
110:名前は開発中のものです。
04/06/21 20:05 B4V2NoLh.net
メッセージループを使う60fpsのゲームにして欲しい。
後々こっちのほうが役に立つと思う。
111:生徒A
04/06/21 21:54 jNWjDlXF.net
とりあえず、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
04/06/21 21:57 jNWjDlXF.net
私は、インベーダーの方が良いと思います。
113:名前は開発中のものです。
04/06/21 22:10 MJraUy6q.net
本当に一からやるんだったら、まだまだ基礎的なことはたくさんあるですよ。
o 描いた四角を横に動かし続ける
o 画面の端で跳ね返るようにする
o 2つの四角を描いてを横に動かし続ける(速度が違うようにする)
o 四角同士が衝突したら跳ね返るようにする
o 四角を斜めに動かす
o 斜めに跳ね返るようにする
o 丸を描く
o 丸同士を当てたら跳ね返るようにする(ビリヤードみたいなの)
o etc, etc, etc...
114:名前は開発中のものです。
04/06/21 22:13 MJraUy6q.net
あと、できればバイナリ付きソースをUPして欲しかったり…
115:名前は開発中のものです。
04/06/21 22:17 8Xx3uQUF.net
まとめページ
URLリンク(gamdev.org)
アップローダ
URLリンク(gamdev.org)
116:名前は開発中のものです。
04/06/21 22:23 Z9w22r4l.net
誰かsin関数くらい自前で用意して描画しろよ。
117:生徒A
04/06/21 22:33 jNWjDlXF.net
sin関数を自前で用意するとなると、テイラー級数展開?が必要になる気がしたんですが…
確か、こんな式だったような
sin(x) = x-(x^3/3!)+(x^5/5!)-(x^7/7!)+…
118:名前は開発中のものです。
04/06/21 23:47 8Xx3uQUF.net
赤い四角、Delphiです
procedure TForm1.Button1Click(Sender: TObject);
begin
ClientWidth:=640;
ClientHeight:=480;
Canvas.Brush.Color:=clRed;
Canvas.FillRect(Rect(0,0,320,240));
end;
119:名前は開発中のものです。
04/06/22 00:43 z3uDPhKo.net
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 tegmloOZ.net
>>113
勿論、選んだ方の基礎からやっていきますから。大丈夫です。ただ、大まかな指針が欲しいだけで。
>>115
ワーイ、まとめページだ!ありがとう!
>>ALL
マジで、先生増やしてよ〜。僕一人じゃ不安だよ〜
121:名前は開発中のものです。
04/06/22 08:07 bOsE7Dq6.net
>>118-119
正解。
122:名前は開発中のものです。
04/06/22 12:14 vyNZUIcy.net
>>111
作ったペンとブラシは終了時に開放したほうがいいですよ。
123:名前は開発中のものです。
04/06/22 13:59 z3uDPhKo.net
階級制にしようぜ!
*問題に難易度設定
課題にも難易度が設定されていて大佐向け、中尉向けなどがある
*昇格資格
課題を一つクリアするたびに昇格
自分の階級より下の問題を解いても昇格しない(大佐は少尉向けの課題を解いても出世はなし)
*出題する権利
自分より2つ下向けの課題を出せる(大佐になれば少佐向けを出題できる)
*特別昇格
自分より格下の問題を解いた場合、通常は昇格しない
しかし、お手本になるようなすばらしい解答、解説をした場合は
昇格の対象となる
(上級職の人の任意か下級職の人の過半数の支持が目安)
こんな感じでどうよ
せっかくだからゲーム感覚でやろうじゃないかと設定してみた
ちょっと昇格条件が甘すぎる気もするけど
もちろん4 ◆3VUXqvbfSY氏や他の先生役の人はそのまま出題してくれるとありがたい
階級はこれがわかりやすくていい
URLリンク(www.special-warfare.net)
124:名前は開発中のものです。
04/06/22 15:06 3E6K9gNw.net
階級みたいにポンポンと技術は上がらんからねぇ。
プログラミングの技術って、どちらかというと山登りみたいな感じだと思う。
準備(下積み)がほぼ大半を占めるけど、準備だけしてもだめで
登り方も知らないと駄目だし(変な登り方をすると途中でのたれ死ぬ)
なにより体力(根気)が必要。
どれをとっても「これだけやれば大丈夫」という基準が無い。
たまに天才がいて、Tシャツ短パンで一直線にエベレストに登頂したりするけど
そういうやつ以外は「大佐のくせにそんなことも知らないのかよ。プッ」って言われるのがオチかも。
125:生徒BLUE@入隊希望
04/06/22 23:32 ImuZbVzv.net
赤い四角の課題解きました
書き込み制限に引っ掛かりますのでのんびり貼り付けていきます
参考にしたのは猫でもわかるプログラミングと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:名前は開発中のものです。
04/06/23 01:15 4HGTxQki.net
怖いのは登山ルートが間違った状態で登っていることだ
行き先は崖だったり
127:生徒BLUE@入隊希望
04/06/23 15:21 G2RbfgcV.net
>>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 XpSZny8Q.net
VBも参加していいですか?
129:名前は開発中のものです。
04/06/23 19:25 mQ2LYzxk.net
mingwとかSDLとかHSPとかSDKとかSDLPerlとかが一体なんなのか
理解できない漏れ…
とりあえずHelloWorldはできたけどウインドウ表示なんて壁高杉
どうすればいいんだよう…
130:4 ◆3VUXqvbfSY
04/06/23 20:11 YwmthHB/.net
>>128
ぜんぜんOK!HSPが居るんだから大じょーぶ。
>>129
MSDNライブラリを読む事から始めましょう。
ウィンドウ表示に関しては、VCの最初の壁です。コレがあるからVCは面倒くさいんですが…。
しかし、ウィンドウが表示できれば、簡単なゲームは直ぐ作れるようになりますって。
まあ、難しければHSPに転向しちゃうって手もあります。
スピードが要求されなければ、かなり便利な言語です。
HSPでググってみてください。
>>ALL
わかりました。インベーダーで始めましょう。
ただし、インベーダーが一通り作れたら、落ちゲーにも触れますよ(ぷよぷよやドリラー等)
階級制は面白いんですが…判断基準が…微妙…。
昇級試験制にしたらどうでしょう。
たとえば。
問題(if文を使わずに、A=Bなら0。A≠Bなら1を表示するプログラムを作れ)
とか
131:名前は開発中のものです。
04/06/23 20:12 bTZutcV4.net
真に初心者であれば分からないのは当然。
とりあえず分からない単語を列挙すれば、誰か暇な人が答えてくれるかもしれない。
132:名前は開発中のものです。
04/06/23 22:00 dPgxaG/R.net
>>129
hello worldを何で表示したか分からんからアレだけど、
取り合えずC/C++と仮定した場合、キミがいくべきところはここだ。
URLリンク(www.kumei.jp)
133:生徒BLUE@入隊希望
04/06/23 22:23 G2RbfgcV.net
>>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 9IgBi+UW.net
>>130 ありがとうございます。C言語でも出来ますけど、あまり自信が無いんです…。
VBでキャラの移動と弾の発射だけやってみました。
←→キーで左右移動、Z or Spaceキーで弾の発射です。
URLリンク(gamdev.org)
135:名前は開発中のものです。
04/06/24 14:35 9ja3YKOg.net
>>134
×押して終了しても、プロセスが残ってるみたい
136:メトロイド オモロイド
04/06/24 21:11 Yq9S/x7T.net
2Dメトロイド&3Dメトロイド作ってみたらどうだ?
難しいがエラー無く完成したら腕上がるぞ。
137:生徒BLUE
04/06/24 23:20 kfww3pCy.net
次はいよいよインベーダーですか
参考にしたサイト:URLリンク(www3.omn.ne.jp)
今回新しく使った関数: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 dGOyDbGP.net
当たり判定などを追加しました。問題のメモリリークのバグも直しました。
URLリンク(gamdev.org)
139:4 ◆3VUXqvbfSY
04/06/25 07:09 va8qXu2v.net
>>134さん
まずは、sinからお願いします。
あんまり爆走すると、先生にしますよ。
むしろ、なって欲し…
>>ALL
次の課題は、基本中の基本。
キー入力です。
先程の赤い四角を使い、カーソル(テンキーでも可)でグリグリ動く物を作ってください。
参考程度に
VC++ GetKeyState();//バーチャルキーの状態取得。
C++ getch();//標準入力
VB _KeyDown(key%,Shift%)//keyにキーコードが返る
HSP getkey p1,p2//p2のキーが押されていると、p1に1が代入される。
140:x≠先生かつx=生徒 ⇒ x=俺
04/06/25 18:25 oIl/kTfS.net
sin波生成
URLリンク(rupan.zive.net)
141:63 ◆xdaKt6k1XI
04/06/25 23:47 BZ++Tyug.net
動かせました。
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
04/06/26 00:54 NxwPZgd2.net
今日から参加します。
まずは四角
URLリンク(gamdev.org)
キー入力に取りかかります。
赤い四角を動かせばいいんですよね?
143:生徒142
04/06/26 03:19 NxwPZgd2.net
連投
プロシージャのみ貼り付けてみます。
描画がカクカクします、再描画の処理はどうすればきれいに動くのでしょうか?
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:名前は開発中のものです。
04/06/26 04:14 sMwugFr/.net
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
04/06/26 04:30 NxwPZgd2.net
>>144
すみません、ソース書いた時は{使ってなかったもので
ここに貼り付ける時に急遽書きました。
iが消えたり;の前に}書いたり間抜けなことになってますね。
次からはよく確かめます
146:134
04/06/26 05:20 1CizLySr.net
>>139
VBでsinカーブを描画してみました。
そろそろC言語でやりたいとは思うのですが、ポインタの所がいまいちなので…
URLリンク(gamdev.org)
147:名前は開発中のものです。
04/06/26 08:40 K/WyEUE8.net
<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 1CizLySr.net
URLリンク(gamdev.org)
キャラ移動です。一応加速度も考慮してあります。
149:名前は開発中のものです。
04/06/26 13:26 wteFDikq.net
Wikiなんかじゃなくて専用のHP作ったら?
ソース貼るのに不憫だろ
150:名前は開発中のものです。
04/06/26 13:31 jYUMekjC.net
>>149
神キタ━━━(゚∀゚)━━━ !!
tabとか半角スペースめんどいもんな
ひょっとして過去にうぷされたソースとかも整形してうぷしてくれれば
うれしいけどそれは望みすぎかな
急がなくていいからがんがれ!
151:名前は開発中のものです。
04/06/26 13:39 CUwn7Ubj.net
強引な150に萌え
152:Ruby@課題1数当て
04/06/26 14:32 jYUMekjC.net
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 wteFDikq.net
俺かYoΣ(´□`;)
154:Ruby@課題2素数
04/06/26 16:17 jYUMekjC.net
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 jYUMekjC.net
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 jYUMekjC.net
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 jYUMekjC.net
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:名前は開発中のものです。
04/06/26 21:12 4yTlUeBl.net
こりゃある意味、荒らしといえなくもないな
159:名前は開発中のものです。
04/06/26 21:34 jYUMekjC.net
Ruby/SDLインストール方法(Windows)
1.とりあえずコレをダウンロード
URLリンク(www.kmc.gr.jp)
2.解凍して適当なフォルダにコピー
3.[コピーしたフォルダ]\usr\local\binにパスを切る
(たとえばc:\ruby\usr\local\binなど)
以上でインストール終了。
スクリプトをテキストファイルとして保存して(拡張子は.rbが一般的)
ruby [ファイル名]として実行
(たとえばruby sosu.rbなど)
公式サイト
URLリンク(www.kmc.gr.jp)
チュートリアル
URLリンク(www.kmc.gr.jp)
160:名前は開発中のものです。
04/06/26 23:23 VAfJSjue.net
宣伝?
161:名前は開発中のものです。
04/06/26 23:49 PaYEz6W8.net
キー入力、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:名前は開発中のものです。
04/06/27 01:17 m6T91X5d.net
>>149
インデントを保ったままソースをうぷしたいなら
ソース置き場やゲムデヴあぷろだをを利用させてもらう手もある
というかこのスレはなぜ貼り付けるのが主流なんだw
ソース置き場
URLリンク(do.sakura.ne.jp)
ゲムデヴあぷろだ
URLリンク(gamdev.org)
>>151
うむ、萌えプロ目指してるからな
参考1) URLリンク(www.bk1.co.jp)
参考2) URLリンク(oshimago.chu.jp)
>>153
☆ チン マチクタビレタ〜
マチクタビレタ〜
☆ チン 〃 ∧_∧ / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
ヽ ___\(\・∀・) < 専用のHPまだ〜?
\_/⊂ ⊂_) \_____________
/ ̄ ̄ ̄ ̄ ̄ ̄ /|
| ̄ ̄ ̄ ̄ ̄ ̄ ̄| |
| S p o k e |
>>158
このスレ自体(ry
まぁ、土曜日を利用してスタートダッシュだ許せ
>>160
おまいらも開発環境や実行環境ぐらい書けよ
ところでRubyって宣伝と思われるほどマイナーなのか?
ちなみにRuby暦1日(もう2日目だな)なので優しくしてくれな
163:名前は開発中のものです。
04/06/27 02:56 fYoguU/V.net
>>162
>このスレはなぜ貼り付けるのが主流なんだw
ダウソして解凍してって面倒なので結構貼り付けいいと思うんだが
普通のレスが見にくい&改行制限が問題だな
2ch型掲示板を設置して生徒一人につき1スレ使ってソースを貼り付けていくっていうのはどうでしょ?
TABの問題が残るかな?
164:名前は開発中のものです。
04/06/27 06:21 6ucDfgWE.net
>>163
神キタ━━━(゚∀゚)━━━ !!
ダウソとか解凍めんどいもんな
ひょっとして過去にうぷされたソースとかもスレ立てて貼りつけてくれれば
うれしいけどそれは望みすぎかな
急がなくていいからがんがれ!
165:名前は開発中のものです。
04/06/27 07:31 fYoguU/V.net
>>164
コピペかよ!ほんとに作るぞ?
aaacafeとかだったらすぐだし
166:名前は開発中のものです。
04/06/27 09:45 sIosK61q.net
ソースをコピペしてコンパイルして実行するほうがはるかにめんどい
167:129
04/06/27 10:57 BWzYLsUd.net
今更ながらやっとwindows.hが読める?環境が整ったよ…
>>130-132さんありがとう。
LSI-C86試食でやっていたのですがこの度borlandのなんとかをいれました
次はSDL&Cygwin????
なんかいまだにDelphiとか分からないんですけど何をどうするのが好ましいのでしょうか…?
自分だけ違う次元ですね…。鬱。
168:名前は開発中のものです。
04/06/27 12:50 1xxqplwj.net
>167
SDLとかCygwinとかDelphiとか気にしなくても良いから
とりあえずborland c++ コンパイラ用意できたということで
Cのお勉強をしてみましょうよ
169:167
04/06/27 13:15 BWzYLsUd.net
>>168
SDLとかいれたほうが楽なのかなと思ったのですが…
やっぱりいきなり窓プログラミングにぶっ飛ぶより基礎からじっくりやるべきですか
基礎でぬくぬくしてられないと思ったもので…反省。
170:課題2@D言語
04/06/27 13:29 TlIkOaxm.net
まだβ版だけど先取りして勉強。
素数判定。
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 m6T91X5d.net
>>163
ソース貼り付けのメリットも捨てがたいな
テキストファイルを扱えるあぷろだがあれば閲覧もダウンロードもできて楽かもしれん
スレにソース貼りまくりも妙に楽しいんだが
>>164
,,ヘ ヘ / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
(,, ゚∇゚) < クレクレ厨逝ってよち!
〜(,,_ノ \_____________
>>165
megaBBSスクリプト( URLリンク(pabbs.hp.infoseek.co.jp) )が半角、全角、TABを扱えていい感じだった
しかも等幅フォントも使えるみたい
2chでインデントつける方法は教えてもらってきた
スレリンク(tech板:83-92番)
>>166
だよな、人のソースみて勉強してる立場からすると崩れたソースは辛い
>>167>>169
Win32APIで窓プログラミング汁!
ぬくぬくどころか最難関だw
といっても参加者やわかる人が多い環境でもあるので王道かもしれん
ひたすらたくさんの開発環境を整えてPCの基礎知識を仕入れるのも(・∀・)イイ!
>>170
D言語知らないから間違ってたら悪いんだが
それって1も表示されないか?(1はもちろん素数じゃない)
>>生徒BLUE氏
BRUSHの解放忘れがあるよ
172:課題2@D言語
04/06/27 17:41 TlIkOaxm.net
>>171
1と自分以外で割れない数が素数じゃないの?
1と1以外で割れない数だからと思って"わざわざ"付け足したのに orz
173:名前は開発中のものです。
04/06/27 18:31 fYoguU/V.net
テスト
というかこんな感じのロダでいいのかな?cppアップ可能に設定してみた
URLリンク(cgi.f11.aaacafe.ne.jp)
各言語のテキストに対応させればそのままあpできるし。
174:名前は開発中のものです。
04/06/27 19:00 PY8053hi.net
>>169
実際にはWindowsのゲームプログラミングはそれほど難しくないよ。
内部にゲーム画像を作成してキー入力などに応じて更新、それを
描画するだけだからね。ウインドウプログラミングの「流れ」を
掴めれば、パズルゲームやADV/RPGは比較的簡単に作れる。
何からはじめればよいかわからない、ということなら
C++ ゲーム プログラミング
といったキーワードでぐぐるなり、書店で「Windowsプログラミングの本」
を眺めて何をすれば「Windows用プログラム」になるのか、調べてみると
良いかも。
本当に「基礎」をやるなら、高レベルのライブラリではなくまずSDK
ベースのWindowsプログラミングで「Windowsのプログラムの流れ」を
しっかり追った方が良い。
175:x≠先生かつx=生徒 ⇒ x=俺
04/06/27 19:17 v+n6K1pQ.net
インベーダー途中
URLリンク(gamdev.org)
176:生徒A
04/06/27 19:26 WIo25CTE.net
しばらく来ない内にすごい事になってるよ…もう付いていけない
177:生徒BLUE
04/06/27 22:04 b0jvqBNF.net
あまりソースを貼り付けるのは荒らしっぽい?のでうぷろだにしました
今はまだ170行ですがインベーダーなら500〜1000ぐらいにたぶんなるので
そろそろ切り替えようと思っていたところです
キー入力はGetAsyncKeyStateを使いました
0x8000の意味とかまだよくわかりませんけれど
if ((GetAsyncKeyState( VK_UP ) & 0x8000) == 0x8000)
{
y--;
}
チラチキ対策でダブルバッファを使った描画をしています
参考にしたソースをほぼそのままコピペしていますが内容は理解しています
このあたりは以前、やったことがあるのでまだまだ大丈夫
課題5キー入力
URLリンク(gamdev.org)
178:名前は開発中のものです。
04/06/27 22:28 6fdveQpW.net
画像だけなら簡単だが、音をつける段階で挫折しそうだ。
ダイレクトXを使わずに、WAVを複数同時に鳴らすことがどれほど大変か・・・
179:名前は開発中のものです。
04/06/27 22:41 PY8053hi.net
>>178
そうだね。
「自分でPCMバッファを作成し波形を合成、リアルタイムに出力」
なんてことになると結構しんどい(面白いとも言うがw)・・・。
まあ、画像でも同じような場面(自分で管理するバッファを処理し
ながらのリアルタイム出力)はあるわけだが。
180:名前は開発中のものです。
04/06/27 22:48 qWAk5Epz.net
ほらほら、先生が仕切らないから、落ちこぼれがでちゃったぞ。
一人は突っ走ってるし。
181:名前は開発中のものです。
04/06/27 22:58 qWAk5Epz.net
>>177
> 0x8000の意味とかまだよくわかりませんけれど
「ANDでマスクとる」とかはわかる?
定数書いちゃダメとか、staticって書くようにするとか、
拡張子がcppなのにC言語風じゃん!とか、
バックバッファあたりは毎回生成&破棄しなくても最初に一度だけ
作成してしまった方が処理の無駄がないとか、ブラシとペンも。
182:x≠先生かつx=生徒 ⇒ x=俺
04/06/27 23:05 v+n6K1pQ.net
>>180
とりあえず突っ走ってるって俺じゃないよな?
>>134
CPU使用率が70%〜80%まで行ったんだけど・・・。
183:x≠先生かつx=生徒 ⇒ x=俺
04/06/27 23:07 v+n6K1pQ.net
( ゚д゚)ハッ!もしや、落ちこぼれが俺か!
184:副担任
04/06/27 23:48 sIosK61q.net
先生が帰ってくるまで漏れが面倒みましょうか?
185:ぷち
04/06/28 00:10 W5zBmX8i.net
186:名前は開発中のものです。
04/06/28 03:20 vjeNxAuN.net
落ちこぼし師
187:名前は開発中のものです。
04/06/28 04:46 AKJFcicb.net
>>184
お願いします。
ソース貼っても、アドバイス求めても生徒ばっかりでレスなくて(´・ω・`)ショボーンです。
188:生徒A
04/06/28 06:10 D8BhR1kS.net
なんとか徹夜して6時間ほど粘ってキー入力まで行ったけど、限界が近い…
WM_TIMERで画面の更新を行っているんですが、なんかすごくちらつくんですよ
あと、DeleteObject(hBr)というのを使うと、何故か画面が白くなるんです…
なので、使ってません。
URLリンク(gamdev.org)
189:4 ◆3VUXqvbfSY
04/06/28 06:20 kLFrYp0l.net
すみません皆様…
ミニ死の行進してました…
アプロダについて:
あっても、別に構いませんが、必要無いようにします。
具体的には、トップダウンで(例えばCなら)
メインを作る。
↓
個々に使われた関数を作る
みたいに、ソースを(出来るだけ解りやすく)分割して、表示しようと企んでいます。
進行度:
自分で出来る方がドンドン進まれるのは、むしろ、喜ばしいです。ただし、課題はあくまで初心者ラインにしておきます。
だから、焦らなくて大丈夫。今の課題は、「キーで、赤い四角を動かす」です。
先生:
や、やっと一人…m(_ _)mヨロシクオネガイシマス
次の課題:
当たり判定。
先ほどの、「動く赤い四角」を避けゲーに改造しましょう
敵は 敵x = rand() % 640;//rand()*640/RAND_MAX
で…敵y++;のように動く単純な敵です。
当たったら終了と言う仕様で…
190:副担任
04/06/28 10:23 HdfIcXTc.net
漏れは先生と考え方が違うので一応書いておきます。うざかったらクビにしてください。>先生
・動けば正義(いい設計はできたほうがいいけどまだ求める段階ではないと思う)
・ソースは固めてどこかにアップする(バックアップ、成果としてわかりやすい)
・バイナリは付けて欲しい(開発環境を全てそろえるのは難しい)
・課題によけいなものは付けないでください(初心者が提出したソースを参考にしたとき、必要な機能のみが実装されていたほうがいい)
あくまで初心者のためのライブラリとしてとらえています。
「絵を描くにはこうする」「動かすにはこうする」「…」「…」のサンプルコードの固まりにしたいです。
課題の方針には賛成なので従います。
というわけで分からんことがある人は漏れが面倒みます。勉強しながら…。orz
191:副担任
04/06/28 10:26 HdfIcXTc.net
訂正すまそ。
× ・課題によけいなものは付けないでください(初心者が提出したソースを参考にしたとき、必要な機能のみが実装されていたほうがいい)
○ ・提出したソースにはよけいな機能は付けないでください(初心者が提出したソースを参考にしたとき、必要な機能のみが実装されていたほうがいい)
192:名前は開発中のものです。
04/06/28 10:28 Ten9Dr/x.net
>>188
簡単だが添削。ウィンドウプロシージャだけ。
DeleteObjectの2行はWM_PAINT内でやってはダメ。
WM_PAINTは何度も呼ばれるため、最初の描画が終了した時点で、作ったペンやブラシは
無効になるため、色がつかなくなる。DeleteObjectするならWM_DESTROY内で。
ちなみにCreateしたものはちゃんと削除するのがお約束。
SelectObjectしたものに関しても、元に戻しておくのが一応の作法。
holdobj = SelectObject(hdc, hobj);// 以前のオブジェクトハンドルを保存
// 何か処理
holdobj = SelectObject(hdc, holdobj);// 以前のオブジェクトに戻す
何故か赤く塗りつぶされないというのは、ディスプレイDCに複数回描画を行っていて、それが
ちらつきとして現れるから。こういう場合はオフスクリーンに描画し、最後にディスプレイDCに
BitBltする。
193:名前は開発中のものです。
04/06/28 10:30 Ten9Dr/x.net
ちと訂正・・orz
×holdobj = SelectObject(hdc, holdobj);// 以前のオブジェクトに戻す
○SelectObject(hdc, holdobj);// 以前のオブジェクトに戻す
194:63 ◆xdaKt6k1XI
04/06/28 15:51 W33tIq0j.net
>>190
変な質問ですいません
バイナリってなんですか?
195:生徒A
04/06/28 16:36 D8BhR1kS.net
>>194 190じゃないですが、もともとは2進数という意味だと思います。
だから、この場合は、1と0の組み合わせで作られた機械語データ
(実行ファイル)の意味だと思います。
他にも、テキストデータ以外のファイル全てを指す事もあります。
196:生徒A
04/06/28 16:40 D8BhR1kS.net
>>192 ありがとうございます。
DeleteObjectのやり方は分かったのですが、
オフスクリーンのやり方がちょっとよく分からないです。
具体的には、オフスクリーンの作成方法です。
197:名前は開発中のものです。
04/06/28 17:06 cdlT0cfW.net
CreateCompatibleBitmap
198:副担任
04/06/28 17:37 HdfIcXTc.net
>>194
Windowsの実行ファイルのことです。"〜.exe" ってやつ。
C言語とかはコンパイルして実行ファイルを作らないとプログラムが動きません。
HSPはインタプリタ言語なので実行ファイルは作らなくていいみたいですね。
>>195
正解です
199:Ruby@課題6当たり判定
04/06/28 18:32 1FRiXQWF.net
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 1FRiXQWF.net
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当たり判定(実行ファイル付き)
URLリンク(gamdev.org)
【Rubyスクリプトを実行ファイルにする方法】
URLリンク(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添付ドキュメントは旧式の書き方になっているようです
サンプルは新しいものだったのでそちらを参考にしました
次ページ最新レス表示スレッドの検索類似スレ一覧話題のニュースおまかせリスト▼オプションを表示暇つぶし2ch
3915日前に更新/292 KB
担当:undef