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添付ドキュメントは旧式の書き方になっているようです
サンプルは新しいものだったのでそちらを参考にしました
201:63 ◆xdaKt6k1XI
04/06/28 20:48 W33tIq0j.net
>>195
>>198
ありがとうございました。
202:生徒BLUE
04/06/28 21:18 mIyMN4GH.net
指摘された所を全部直しました
課題5キー入力再提出
URLリンク(gamdev.org)
203:4 ◆3VUXqvbfSY
04/06/28 21:39 kLFrYp0l.net
参考程度に…
オフスクリーン:
変数宣言 前略
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 1FRiXQWF.net
スクリプト組はあまり時間もかからず有利なので
複数言語同時習得を目指してみます
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数当て(実行ファイル付き)
URLリンク(gamdev.org)
205:名前は開発中のものです。
04/06/29 06:26 Ngmzz0xf.net
課題6
実行方法:①メモ帳にコピペ、②名前をつけて保存でinvader.html、③ブラウザに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 OSp1CFcf.net
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:名前は開発中のものです。
04/06/29 13:12 WW/6W0k2.net
dpかwinsockでチャット作りたひ。
208:名前は開発中のものです。
04/06/29 18:46 vpUdLCjy.net
>>207
自分で作ったチャットソフトで皆と繋げられたら楽しそうな予感!
209:名前は開発中のものです。
04/06/29 21:15 OSp1CFcf.net
もの凄い勢いで進行してるのでまとめの意味もあって統計をとってみました
抜けてる人がいたらごめんなさい
JavaScript ****** 6
Ruby.. ****** 6
生徒A(Win32API). ***** 5
生徒BLUE (Win32API). ***** 5
Delphi ***** 5
D言語 ** 2
LGP ** 2
x≠先生かつx=生徒 ⇒ x=俺(VB) 測定不能
まとめページ
URLリンク(gamdev.org)
アップローダ
URLリンク(gamdev.org)
210:x≠先生かつx=生徒 ⇒ x=俺
04/06/29 21:28 gNXtRGm+.net
>>209
VBを使った覚えは無いんですが…というよりVB使えません。
>>134のことかな?
211:名前は開発中のものです。
04/06/29 22:14 OSp1CFcf.net
>>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 OSp1CFcf.net
//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 HYWm3For.net
>>181
>「ANDでマスクとる」とかはわかる?
はい、この場合は2進数に直して一番左のビット以外を全部0にするってことですよね
MSDN読んだりあれからさらに調べてみたので前よりはちょっとわかったのですが
左端のビットが1ならボタンが押されているという程度の理解でいいのでしょうか
・定数書いちゃダメ
defineを積極的に使ってみました
C++の場合だとdefineは使わずにconstを使ったほうがいいと書いてあるホームページも
みつけましたがどうなんでしょう?
・拡張子がcppなのにC言語風
意識せずに全部cppにする習慣がついてたので……
クラスを使う→cpp、使わない→cでいいですか?
拡張子の使い分けむずかしい
・バックバッファあたりは毎回生成&破棄しなくても最初に一度だけ
GetDCを使えばいいんだ!と前回は気づいてませんでした
WEBの情報をあちこちからつまみ食いしてるので全体的にチグハグな感じに
なっていたようで指摘してもらって勉強になります
ソースみていただける方は2ちゃんねるに貼り付けとアップローダのどちらが見やすいでしょうか?
それとも両方のほうがよい?
214:名前は開発中のものです。
04/06/30 11:43 0T8fXV58.net
そろそろ本気で見にくくなってきたわけだが、
ちょっと言語が大杉やしないかい?
もうちょっと絞ろうよ
215:通りすがり人
04/06/30 12:46 qBs2hfFg.net
>>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 HYWm3For.net
>>215
早速、コンパイルして試してみました
最下位ビットに注目してみると
1000000000100100100100100100......
といったように変化します
初回だけということなので10000000......というものを期待していたのですがうまくいかないです
217:生徒BLUE
04/06/30 17:38 HYWm3For.net
課題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);
}
URLリンク(gamdev.org)
218:名前は開発中のものです。
04/06/30 18:49 3iu2d+4i.net
>>216
ん?スペースキーを押すと、こんな風に表示されませんか?
ffff8001
ffff8000
ffff8000
ffff8000
ffff8000
ffff8000
ffff8000
ffff8000
ffff8000
ffff8000
ffff8000
219:生徒BLUE
04/06/30 19:04 HYWm3For.net
>>218
ならないです
もうちょっと調べてみます
220:名前は開発中のものです。
04/06/30 19:39 3iu2d+4i.net
>>219
あ~、押しっぱなしの場合は違う結果になるかもです。
OSのキーボードバッファとか、その辺の兼ね合いだと思うけど。
221:名前は開発中のものです。
04/06/30 19:52 /EAv0A9z.net
>>215試して見たけど確かに>>216の現象が出るな。
他の出力で確認したらちゃんと立ち上がりだけ1が出るので
printf()絡みでキー状態が変化してるっぽい。
普通はこんな使い方しないので気にしなくて良いと思われ。
222:63 ◆xdaKt6k1XI
04/06/30 21:22 qAZjVMDs.net
>>211
今回のは敵の大きさとか動きとかよくわからないのでやらないです。
223:名前は開発中のものです。
04/06/30 22:22 j1/sm794.net
320x240で一度作ったけど即死しすぎて32x32に縮小したよ
サイズ指定してないから何でもいいと思ったけどそのあたりどうなんですか?>先生
wikiのほうにまとめコーナー作っておいたので各自書きたいことがあったら適当にどうぞ
というか書いてくださいおながいします
名無しさんを消して自分の名前にして提出状況とかコンパイラは何を使ってるとかそんなのでいいので
URLリンク(gamdev.org)
224:LGP@課題4sin波形
04/07/01 00:05 TMNGfYFe.net
//画面初期化、最後を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 KOe6GSoY.net
>>222,223
サイズは自由で結構です。
敵の動きは…だからy++;だけですよ?
226:生徒A
04/07/01 14:26 MCi74o/R.net
数日間ソースとにらめっこしてるのですが、バックバッファーの処理が上手くいかないです…
227:名前は開発中のものです。
04/07/01 15:45 bdPAbTo6.net
>>226
キミのソースに少し手を加えたやつをうpろだにあげたから試してみれ。780.lzhだ。
ただしオフスクリーン処理以外(後始末とか)は端折ってるのでそこは参考にしないように。
228:LGP@課題5キー入力
04/07/01 22:17 TMNGfYFe.net
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 4ZvlEEie.net
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 4ZvlEEie.net
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 UWWF49AF.net
保守age
232:HSPが初プログラム@生徒希望
04/07/04 11:07 3DUC6+Xf.net
課題1
title "数当てゲーム"
screen 0,150,65 ;ウィンドウのサイズを調整
mes "1~9から一つ入力"
input a ;入力ボックスを出す
*random
rnd b,9 ;0~8の乱数発生
b+=1 ;1~9にする
c=1
*number
button "これだ!",*judge
stop
*judge
if a=b:dialog "当たり!",0,""+c+"回目":goto *random
if a>b:dialog "もっと小さい",0,""+c+"回目"
if a<b:dialog "もっと大きい",0,""+c+"回目"
c+=1
goto *number
課題3
title "赤い四角の描画"
screen 0,640,480,1
color 255,0,0:boxf 0,0,320,240
stop
URLリンク(gamdev.org)
課題2はヨクワカラナイです。ヒントくれませんか?
233:名前は開発中のものです。
04/07/04 11:13 dw9vgL9Y.net
>>232
自分以下で2以上の全ての整数の割り算の余りが0にならなければ素数
別の解放にエラトステネスのふるいってのがあるけど別に使わなくていい
234:名前は開発中のものです。
04/07/04 11:14 dw9vgL9Y.net
自分未満の整数の間違い
以下だったら自分も含むからね
235:名前は開発中のものです。
04/07/04 12:05 WDudAYFD.net
自分の1/2で十分じゃね?
236:名前は開発中のものです。
04/07/04 12:35 yqwpjhZT.net
(√自分)でよくない?
237:名前は開発中のものです。
04/07/04 12:38 WDudAYFD.net
平方根求めるより楽だし
238:名前は開発中のものです。
04/07/04 12:55 9GihiSR8.net
>>236-237
なんで平方根まででいいんだっけ?
239:名前は開発中のものです。
04/07/04 13:00 WDudAYFD.net
それ以上のは今までに計算した分と対応してるだけ
240:HSPが初プログラム@生徒希望
04/07/04 19:58 3DUC6+Xf.net
えと、素数はどういうものかはわかるんですが、プログラムというかHSPでの算出方法が…
241:x≠先生かつx=生徒 ⇒ x=俺
04/07/04 20:45 WDudAYFD.net
; 素数判定 with HSP 少しだけ高速版
sdim log, 7000: notesel log
title "素数判定 - Calculating..."
mesbox log, 640, 480
log = "2": n = 1
repeat 999
repeat
n += 2: f = 1
repeat n>>1-1,3
if n \ cnt = 0: f = 0: break
continue cnt+2
loop
if f: break
loop
noteadd ""+n
await
loop
objprm 0, log
title "素数判定"
stop
242:x≠先生かつx=生徒 ⇒ x=俺
04/07/04 20:47 WDudAYFD.net
あ、インデントかけるの忘れとった。。。
; 素数判定 with HSP 単純版
sdim log, 7000: notesel log
title "素数判定 - Calculating..."
mesbox log, 640, 480
repeat ,2
n = cnt
repeat cnt-2, 2
if n \ cnt = 0: n = 0: break
loop
if n{
noteadd ""+cnt
i++
if i >= 1000: break
await
}
loop
objprm 0, log
title "素数判定"
stop
243:Ruby@素数高速化
04/07/05 00:33 K58VA1M5.net
以前のバージョン
43.702999830246秒
ループ 31343403回
新しいバージョン(奇数のみ評価、平方根までチェック)
0.921999931335449秒(約47倍)
ループ 225062回(約139倍)
思ったより高速化されてビクーリ
print "2\n"
count=1
loopCount=0
i=3
old=Time.now.to_f;
while count<1000 do
sosu=true
for j in 3..Math.sqrt(i) do
loopCount=loopCount+1
if ( (i % j) == 0)
sosu=false
end
end
if (sosu)
print "#{i}\n"
count=count+1
end
i=i+2
end
print " #{Time.now.to_f - old}秒かかりました\n"
print " #{loopCount}回ループしました\n"
print "素数を#{count}個みつけました\n"
244:名前は開発中のものです。
04/07/05 01:37 o/9mlWPU.net
>>241を改良してみた。
; 素数判定 with HSP 何気に高速版
title "素数判定 - Calculating..."
#const MAX_COUNT 1000
ll_libload dll,"kernel32.dll" :ll_getproc func,"GetTickCount", dll
ll_libfree dll :ll_retset refunc
sdim log, 7 * MAX_COUNT :notesel log
dim result, MAX_COUNT
mesbox log, 640, 480
noteadd "2",0,1 :result.0 = 2 :count = 3 :i = 1
;測定
ll_callfunc temp,0,func
start = refunc
repeat
flg = 1;
repeat i
if count \ result.cnt = 0 : flg = 0 :break
loop
if flg {
noteadd ""+count, -1 :result.i = count
i++ :if i >= MAX_COUNT: break
await
}
count += 2
loop
ll_callfunc temp,0,func
refunc -= start :dialog "" + refunc + "ms"
objprm 0, log :title "素数判定"
stop
245:名前は開発中のものです。
04/07/05 07:17 LZQQVRIy.net
Delphiで素数
URLリンク(gamdev.org)
246:名前は開発中のものです。
04/07/05 13:04 LZQQVRIy.net
最速の素数判定アルゴリズム
URLリンク(pc.2ch.net)
247:名前は開発中のものです。
04/07/05 20:13 axn64mRQ.net
すごいスレの流れと違うような気がしますが、
Cで、ウインドウ表示とか(課題3)、できないんですが・・・どうしたらいいんでしょうか?
248:名前は開発中のものです。
04/07/05 20:40 q8IB8pY7.net
できないだけ書かれてもどうしようもない。
249:名前は開発中のものです。
04/07/05 20:57 0DOOfkU1.net
>>247
猫でもわかるプログラミング
URLリンク(www.kumei.ne.jp)
このへんでまず勉強してこよう
250:名前は開発中のものです。
04/07/05 22:48 LZQQVRIy.net
>>247
WinMainからはじまって
CreateWindowでウィンドウの設定して
ShowWindowで表示するだけだ
251:HSPが初プログラム@生徒希望
04/07/05 22:51 ZZjGGIiZ.net
sdim m,4000 : notesel m
mesbox m,640,480
noteadd "2" m : noteadd "3" m : noteadd "5" m : noteadd "7" m
n=7
c=4
*judge
n+=2
if n\3=0 : goto *judge
if n\5=0 : goto *judge
if n\7=0 : goto *judge
noteadd "n" m : c+
if c=1000 : goto *s
goto *judge
*s
stop
素数はこれで出るカナと思ったんですが、エラー発生。原因を突き止められませんTT
252:x≠先生かつx=生徒 ⇒ x=俺
04/07/05 23:00 pTJ3lo22.net
エラーを読も・・・・・Σ(;゚Д゚)HSPがエラー吐いてない!
noteadd "*" m
~|~
要らない。ここでエラーが出てる。
noteadd "n"
~|~
エラーの原因ではないが、""+nの誤り。
あと、objprm 0, mをstopの前に入れて出力させてあげよう。
253:HSPが初プログラム@生徒希望
04/07/05 23:07 ZZjGGIiZ.net
>>252
thx
でも、4363で終わりますがあってるんでしょうか?
sdim m,4000 : notesel m
mesbox m,640,480
noteadd "2" : noteadd "3" : noteadd "5" : noteadd "7"
n=7
c=4
*judge
n+=2
if n\3=0 : goto *judge
if n\5=0 : goto *judge
if n\7=0 : goto *judge
noteadd ""+n : c+
if c=1000 : goto *s
goto *judge
*s
objprm 0, m
stop
254:x≠先生かつx=生徒 ⇒ x=俺
04/07/05 23:24 pTJ3lo22.net
たしか7919のはずだけど・・・
暇だしPerlとJava版の素数判定作ってみようかな。。。
255:名前は開発中のものです。
04/07/05 23:25 MIzlaErt.net
>>253
間違ってるよ・・・
121とかあるし・・・11からの素数の合成数が出まくりやね。
256:名前は開発中のものです。
04/07/06 00:11 hNVuoewj.net
>>247
それは簡単だって!どっかのサイトに張ってあるやつをそのままコピペで完成だぁよぉ!
257:名前は開発中のものです。
04/07/06 01:48 IHRV3HSb.net
素数スレになってるのだが・・・
258:名前は開発中のものです。
04/07/06 02:29 pkSoPn0/.net
Delphi エラトステネスの篩
URLリンク(gamdev.org)
259:x≠先生かつx=生徒 ⇒ x=俺
04/07/06 07:38 BOq5Vq10.net
#!D:\perl\bin\perl.exe
print "Content-type: text/plain\n\n";
print "Start\n";
print "2\n";
$table[0] = 2;
$i = 1;
for(2..1000){
for($i += 2; ; $i += 2){
if(&IsPrime($i)){ last; }
}
}
print "Finish";
exit(1);
sub IsPrime{
(my $src) = @_;
for($j = 0; $table[$j] <= sqrt($src); $j++){
if($src % $table[$j] == 0){ return 0; }
}
print $src."\n";
push(@table, $src);
return 1;
}
# Perl版。printを取ってみると分かるけどPerlはインタープリタなのに
# 結構処理速いね。。。
260:名前は開発中のものです。
04/07/06 12:03 IHRV3HSb.net
>>259
Perlは見かけ上インタプリタだけど、
処理はコンパイル後実行だと聞いたことがある。
261:名前は開発中のものです。
04/07/06 16:54 pkSoPn0/.net
C#で素数
static void Main(string[] args)
{
int sosuCount=0;
for (int i = 2; sosuCount<1000; i++)
{
Boolean nososu;
nososu = false;
for (int j = 2; j < i ; j++)
{
if ((i % j) == 0)
{
nososu = true;
break;
}
}
if (!nososu)
{
Console.WriteLine(i);
sosuCount++;
}
}
Console.WriteLine(sosuCount + "個の素数を発見しました");
}
262:x≠先生かつx=生徒 ⇒ x=俺
04/07/06 17:32 BOq5Vq10.net
public class Prime {
public final static int PRIME_MAX = 1000;
static int PrimeTable[] = new int [PRIME_MAX];
static int TableLast = 1;
public static void main(String[] args) {
int l = 1;
PrimeTable[0] = 2;
System.out.println(2);
for(; TableLast < PRIME_MAX; TableLast++)
for(l += 2; ; l += 2)
if(IsPrime(l)) break;
System.out.println("Finish");
}
public static boolean IsPrime(int src) {
for(int i = 0; PrimeTable[i] <= Math.sqrt(src) && i < TableLast; i++)
if(src % PrimeTable[i] == 0) return false;
PrimeTable[TableLast] = src;
System.out.println(src);
return true;
}
}
// Java版。
// あと手を付けてない言語は何だっけ。
// ・・・ひまわりでもやってみるか。
263:名前は開発中のものです。
04/07/06 18:09 pkSoPn0/.net
//PHPで素数
<?php
for ($i=2; $sosuCount<1000; $i++)
{
$nososu=false;
for ($j=2; $j<$i; $j++)
{
if (($i % $j) == 0)
{
$nososu=true;
break;
}
}
if (!$nososu)
{
echo $i;
echo "\n";
$sosuCount++;
}
}
echo $sosuCount + "個の素数を発見しました";
?>
264:名前は開発中のものです。
04/07/06 18:57 pkSoPn0/.net
#Pythonで素数
sosuCount=0
i=2
while sosuCount<1000:
nososu=False
j=2
while j<i:
if ((i % j) == 0):
nososu=True
j=99999
break
j=j+1
if (not nososu):
print i
sosuCount=sosuCount+1
i=i+1
print sosuCount
print "個の素数を発見しました"
265:生徒A
04/07/06 19:10 B1nIIlBn.net
素数スレに変化していたらしい
266:名前は開発中のものです。
04/07/06 19:57 2QvbUldx.net
いろんな言語で素数プログラムつくるとゲーム作れるようになるですか
267:4 ◆3VUXqvbfSY
04/07/06 20:22 sRW7wZ6D.net
>>266
なるわけありませんw
だだし、解らない方をホっといて課題を進める訳には…
うーん…
じゃあ、課題外伝でも出しますか…
余力が有ればどうぞ。
弾道シミュレーション:とは言え、何も波動方程式を使えとはいわない。
真空空間で結構。
画面を横を640kmと仮定し、初速、角度を入力させ、弾の軌道を描いてくれ。
ちなみに、初速は29000m/s以下で
重力加速度は10m/(s^2)でお願いします。
268:x≠先生かつx=生徒 ⇒ x=俺
04/07/06 20:28 BOq5Vq10.net
(;゚Д゚)ノ先生!…まだ高1なので習ってません
269:名前は開発中のものです。
04/07/06 21:30 Oq4N2t0v.net
>>268
高一だけどもう習ったよ
270:名前は開発中のものです。
04/07/06 21:32 tJWPmmxn.net
とりあえず初速度を三角関数でxとyに分解した後、
重力加速度をyに対して適用していきましょう。
しかし初速29000m/sだと、軽々地球を離脱して重力圏外に吹っ飛んでいきそうです。
271:名前は開発中のものです。
04/07/06 21:37 jam3e6md.net
地球の半径は6370kmぐらいでいいですか?
272:HSPが初プログラム@生徒希望
04/07/06 22:03 GhTVD8Z+.net
>>242
> if n{
このnって何の意味があるんですか?
それから>>241にある「>>」の使い方がわかりません…
273:HSPが初プログラム@生徒希望
04/07/06 22:06 GhTVD8Z+.net
連レス済みません
HSPでの平方根の出すのと、その整数か否かの判断てできますか?
できれば、教えてください。
質問ばっかで済みません
274:x≠先生かつx=生徒 ⇒ x=俺
04/07/06 23:17 BOq5Vq10.net
>>269
ガ━(゚Д゚;)━━ン!!
物理じゃなくて化学だし・・・
>>270
何をすればいいのか全くわからそ( ´・ω・`)
>>271
ループを抜けるときにn = 0にされていたら(割り切れたときにn = 0にして抜けている)無視、
されていない(素数)のとき、いろいろしてる。
>>はビットシフト。2進数が関わってきます。
で、結果的には
x >> nは、xを2のn乗で割るのと同じ。
x << nは、xに2のn乗をかけるのと同じ。
だから、n>>1はn/2と同じ。
平方根も求められるには求められるけど、自分で求めるアルゴリズムは用意しないといけない。
その整数か否かとは・・・?
275:名前は開発中のものです。
04/07/06 23:53 pkSoPn0/.net
//HSPヘルプではincludeするのはhspext.hsになってますがhspext.asじゃないと動きません
//なぜ?(´・ω・`)
//
//平方根の求め方
//
//HSP2.61で動作確認しますた
//
#include "hspext.as"
//100の平方根を求めます
i=100
//iの平方根を固定少数点型でjに代入
emsqr j,i
//jの値を整数型にキャスト(少数点以下切り捨て)
j=j>>4
//jを表示
print j
stop
276:名前は開発中のものです。
04/07/07 04:08 FL+3iUiB.net
これであってるのかな
よくわからんので実行しても合ってるのか確認しようがない(´・ω・`)
ググった式をそのまま当てはめてみました
弾道シミュレーション
URLリンク(gamdev.org)
277:HSPが初プログラム@生徒希望
04/07/07 21:29 dX/NBYiw.net
>>274
返答有難う御座います。
学校で考えてたら、平方根だけじゃダメだとわかったんで、
>>233にあった2以上~自分未満ってのをやってみようと思います。
因みに整数か否かとは、平方根出したときのことです。
例えば√2は1.414…ですよね?だから整数じゃないですし、√4なら2ですから整数で、
整数じゃなかったら素数に入れよう!とか思ってたんですが、
11*13(適当に思いついた)だとダメなんですよね…
278:名前は開発中のものです。
04/07/07 21:32 W6JVsWwD.net
ゲームに必要なのは実現できるか否かだ
ちょっぱやな素数判定できることに課題としての価値はないよ
ガンガレ
279:x≠先生かつx=生徒 ⇒ x=俺
04/07/07 22:18 lBWiEqny.net
√27 = 5.1961...
27 = 3 * 9
280:C / HSPの生徒 orz
04/07/07 23:08 B0lUGdqJ.net
>>275
> HSPヘルプではincludeするのはhspext.hsになってますがhspext.asじゃないと動きません
HSPヘルプは電波入っているから気にしないがよし。
つかhspソースファイルの拡張子は".as"以外使わないと思うが。
>>274
>267を簡単に表現すると、
__
/ \ /
〇 〇←B.止まる A/) 角度 R
↑
A.初速<29000m/s
こんな感じの軌道を描画する。
で、真空中なのでX軸方向の速度は 初速 * cosR
Y軸は 初速 * sinR で、毎秒-10していく。
281:x≠先生かつx=生徒 ⇒ x=俺
04/07/07 23:51 lBWiEqny.net
>>280
#include "hspext.as"
screen 2, 300, 100, 4: title "Config"
pos 5, 8: mes "初速:": pos 50, 5: input speed, 215, 25: pos 270, 8: mes "m/s"
pos 5, 38: mes "角度:": pos 50, 35: input angle, 210, 25: pos 265, 38: mes "/255"
pos 5, 70: objsize 290, 25: button "Start", *start
gsel 0: stop
*start
emsin sin, angle: emsin cos, angle
mx = speed * sin / 255: my = speed * cos / 255
x = 0: y = 480000: pos x/1000, y/1000
repeat
x += mx: y -= my: my -= 10
line x / 1000, y / 1000
wait 10
loop
stop
こんな感じかぇ・・・?
282:C / HSPの生徒 orz
04/07/08 14:31 oFd7+xVG.net
>>281
sin と cos が逆だけど、だいたいOKじゃないか?
俺も281参考に一応作ってみた。
…なんでcos7がマイナスになるんだ、理解できん。
#include "hspext.as"
#define EDIT_X 160
#define EDIT_Y 24
#define G 10
#define SCREEN_X 640
#define SCREEN_Y 480
width SCREEN_X, SCREEN_Y
title "C / HSPの生徒 orz"
color 200, 200, 200:boxf
pos 120, 70:button "描画", *ready
goto config_sub
283:C / HSPの生徒 orz
04/07/08 14:31 oFd7+xVG.net
*ready
color 200, 200, 200:boxf
if v0 > 29000:stop
uchar_r = r \ 360 * 255 / 360
color 240
emsin sin, uchar_r:emcos cos, uchar_r
vx = -v0 * cos / 255:vy = -v0 * sin / 255
x = 0:y = SCREEN_Y:pos x, y
repeat
x += vx:y += vy:vy += G
line x, y
if (y > SCREEN_Y) || (x < 0) || (x > SCREEN_X):break
await 0
loop
*config_sub
color
pos 40, 15:mes "初速 :":pos 100, 10:input v0, EDIT_X, EDIT_Y
pos 40, 45:mes "角度 :":pos 100, 40:input r, EDIT_X, EDIT_Y
stop
284:x≠先生かつx=生徒 ⇒ x=俺
04/07/08 17:42 gJH4XEvh.net
おっと、emcosがemsinになってたか・・・
285:名前は開発中のものです。
04/07/08 17:45 f5vo4Z1w.net
なんていうかさ。素数よりも、もっと普通にゲームでよく使うようなやつを
やったほうがいいんじゃないかな?
ボールが跳ねるのをシミュレート、とかなら
ジャンプするゲームでは確実に使うだろうし。
286:4 ◆3VUXqvbfSY
04/07/08 19:00 xmAVGw0W.net
なんか…確かに素数ばっかりに見えますが…違うんですよ。
素数で詰まってる人が多いってだけで…
あとですね…ボールが跳ね返るシミュレーション、ジャンプに使いますかねぇ?
マリオが勝手に地面で跳ね返ったら、俺は切れますがw
…ああ、何時になったらインベーダーが…本来なら、そろそろ、赤い四角に弾でも撃って貰おうと思ってたんですが…
わかりました。二つ出します
メイン課題 前の、赤い四角に弾を撃って貰います。さらに前課題の降ってくる物体と相殺させて下さい。
弾丸は横2ドット、縦16ドットで黄緑色
動きは Y座標(初期値は赤い四角のY座標+16)その後Y--; X座標(初期値は赤い四角のX座標÷2)その後固定;
当たった時点もしくは、画面外にでたら再発射が可能となる。
基本一発。ただし、複数発実装できるならしても良い。
課題外伝 ボールの跳ね返りシミュ
ボールを(0,0)から水平投射する。(速度は自由)
床の反発係数は0.8
壁は1.0
重力加速度は10m/s^2
287:名前は開発中のものです。
04/07/08 20:05 kembbGf8.net
トランポリンでも使うつもりなんですかね
ジャンプで跳ね返りって…
そいやマリオには敵ふんだときちょっと浮くけどあれなのかな・・・
288:名前は開発中のものです。
04/07/08 21:00 gJH4XEvh.net
名古屋撃ちのために、実装しない方向で行こう。。。
>>286
こんな感じでOK?
#include "hspext.as"
screen 2, 300, 100, 4: title "Config"
pos 5, 8: mes "初速:": pos 50, 5: input speed, 215, 25: pos 270, 8: mes "m/s"
pos 5, 38: mes "角度:": pos 50, 35: input angle, 210, 25: pos 265, 38: mes "/255"
pos 5, 70: objsize 290, 25: button "Start", *start
gsel 0: stop
*start
cls
emsin sin, angle: emcos cos, angle
mx = speed * sin / 255: my = speed * cos / 255
x = 320000: y = 240000: pos x/1000, y/1000
repeat
x += mx: y -= my: my -= 10
if x<0: x=0: mx = -mx
if x>640000: x=640000: mx = -mx
if y>480000: y=480000: my = -my * 8 / 10: if my<80: my = 0: stop
line x / 1000, y / 1000
wait 1
loop
stop
289:名前は開発中のものです。
04/07/08 23:33 UCn/khb4.net
#include "hspext.as"
#const G 10
#const Coeff 10
#const Wall_e 10
#const Floor_e 8
screen 0, 640, 480, 1
dim sin,256 :dim cos,256
repeat 256 :emsin sin.cnt,cnt :emcos cos.cnt,cnt :loop
screen 2, 150, 100, 4: title "Config"
pos 5, 8: mes "初速:": pos 50, 5: input V, 50, 25: pos 100, 8: mes "m/s"
pos 5, 38: mes "角度:": pos 50, 35: input C, 50, 25: pos 100, 38: mes "°"
pos 5, 70: objsize 120, 25: button "Start", *main
gsel 0 :stop
*main
if V > 29000 : 29000
if C > 90 : C = 90
C = C * 256 / 360 :Vx = V :Vy = V :Ycnt = 0 :x = 0 :y = 0
repeat
redraw 0 :await 1
color 255,255,255 :boxf :color 255,0,0 :pos 0, 460 : mes "■" :color 0,0,255 :line 0, 475, 640, 475
color 0,0,0 :x += Vx * (-cos.C) / 256 :y += Vy * sin.C / 256 - (G * Ycnt)
if x / 1000 < 0 :Vx = -Vx * Wall_e / Coeff :x = 0
if x / 1000 > 624 :Vx = -Vx * Wall_e / Coeff :x = 624000
Ycnt++ :if y < 0 :Vy = Vy * Floor_e / Coeff :y = 0 :Ycnt = 0
pos x / 1000, -y / 1000 + 460 : mes "○" :if cnt > 0 & (Vy <= 0) :break
redraw 1 :loop :stop
投下
290:x≠先生かつx=生徒 ⇒ x=俺
04/07/09 00:10 bufBX0Vb.net
#include "hspext.as"
screen 2, 300, 100, 4: title "Config"
pos 5, 8: mes "初速:": pos 50, 5: input speed, 215, 25: pos 270, 8: mes "m/s"
pos 5, 38: mes "角度:": pos 50, 35: input angle, 210, 25: pos 265, 38: mes "/255"
pos 5, 70: objsize 290, 25: button "Start", *start
gsel 0: stop
*start
cls
emsin sin, angle: emcos cos, angle
mx = speed * sin / 255: my = speed * cos / 255
x = 320000: y = 240000: pos x/1000, y/1000
repeat
ox = x: oy = y: x += mx: y -= my: my -= 10
if x<0: x=0: mx = -mx
if x>624000: x=624000: mx = -mx
if y>464000: y=464000: mx = mx * 8 / 10: my = -my * 8 / 10: if my<80|(mx==0): my = 0: stop
;redraw 0
color 255, 255, 255: pos ox/1000, oy/1000: mes "○"
color 0, 0, 0: pos x/1000, y/1000: mes "○"
;redraw 1
wait 1
loop
stop
改造版。
>>289
スゲー・・・
291:C / HSPの生徒 orz
04/07/09 10:25 nlM8j7wC.net
>>286の課題作ってみたが、ゲーム性を考えて数値をアレンジしています。
#define RED_SIZE 32
#define ENEMY_SIZE 32
#define MOVE_TIME 32
#define OBJ_SX 2
#define OBJ_SY 16
#define OBJ_SPEED 16
randomize
width 640, 480
red_x = 640 - RED_SIZE / 2:red_y = 480 - RED_SIZE
repeat
redraw 2:color 255, 255, 255:boxf
if enemy_stat = 0:enemy_y = -ENEMY_SIZE:enemy_stat = 1:title "C / HSPの生徒 orz 撃破数: "+obj_cnt
enemy_timer++:if enemy_timer > MOVE_TIME:enemy_timer = 0
if enemy_timer = 0:rnd enemy_x, 640 - ENEMY_SIZE
stick key, 15:if key & 1{red_x-4}if key & 4{red_x+4}
stick key, 16:if key = 16 & (obj_stat = 0){
obj_stat = 1:obj_x = RED_SIZE / 2 - (OBJ_SX / 2) + red_x:obj_y = red_y - 16}
if (enemy_x < obj_x) & (obj_x + OBJ_SX < (enemy_x + ENEMY_SIZE)) {
if (enemy_y < obj_y) & (obj_y + OBJ_SY < (enemy_y + ENEMY_SIZE)) {
obj_cnt++:obj_stat = 0:enemy_stat = 0:color 255, 0, 0:boxf} }if obj_y + OBJ_SY < 0:obj_stat = 0
if enemy_stat:color 100, 100, 200:boxf enemy_x, enemy_y, enemy_x + ENEMY_SIZE, enemy_y + ENEMY_SIZE
color 200, 100, 100:boxf red_x, red_y, red_x + RED_SIZE, red_y + RED_SIZE
if obj_stat:color 100, 200, 100:boxf obj_x, obj_y, obj_x + OBJ_SX, obj_y + OBJ_SY:obj_y-OBJ_SPEED
enemy_y++:if enemy_y > 480{enemy_stat = 0}await 20:redraw 1
loop
292:285
04/07/09 10:46 mw4kM0V8.net
すまん、言葉足らずだった。
ジャンプの軌道の加速減速だ。
ボールが跳ねるって部分は蛇足だったな。
293:285
04/07/09 10:48 mw4kM0V8.net
>ボールが跳ねるって部分は蛇足だったな。
↓
>ボールが跳ねるって言い方は変だったな。
言葉足らずって言うより、俺、言い回しが変だね。
294:名前は開発中のものです。
04/07/09 16:12 o2BnBgF7.net
>>277
平方根以下の素数で割り切れるかを調べればいいので11*13(=143)をチェックする場合、
143の平方根が11.958......なので2~11の数で割り切れるか調べればよい
11で割り切れるので素数ではないことがわかる
295:名前は開発中のものです。
04/07/09 19:10 o2BnBgF7.net
似たような事やってるスレみつけてきた
[VB] 初心者に課題を [.net]
スレリンク(tech板)
296:名前は開発中のものです。
04/07/09 22:13 2xcy471S.net
<html><body onload="go()">
角度<input type="text" value="45" id=ra>度<br>
初速<input type="text" value="1000" id=sp>m/s<br>
<input type="button" value="GO" onclick="go()"><script>
elm=new Array();
for(i=0;i<128;i++){
elm[i]=document.createElement('div');
elm[i].style.position='absolute';
elm[i].style.font='normal normal normal 7px "MS ゴシック"';
elm[i].innerHTML='■';
document.body.appendChild(elm[i]);
}
function go(){
r=document.getElementById('ra').value; s=document.getElementById('sp').value;
document.getElementById('ra').value=r=(r>89)?89:(r<0)?0:r;
document.getElementById('sp').value=s=(s>29000)?29000:(s<1)?1:s;
for(i=0;i<128;i++){
y=0; rd=r/180*Math.PI;
for(j=0;j<5000*i/s/Math.cos(rd);j++) y+=(s-10*j)*Math.sin(rd);
if(y<0)y=0;
elm[i].style.left=i*5; elm[i].style.top=475-y/1000;
}
}
</script></body></html>
297:HSPが初プログラム@生徒希望
04/07/09 22:49 nI9aNbgB.net
一応あってますか?
課題2小さい方から1000個の素数
sdim m,4000 : notesel m
mesbox m,640,480
n=2 : c=1 : j=1
*judge
if n-1=j : goto *pn
j+
if n \ j=0 : n+ : j=1
wait 1
goto *judge
*pn
c+
noteadd ""+n
if c=1000 : goto *finish
n+ : j=1
wait 1
goto *judge
*finish
objprm 0, m
stop
激しく遅いですが…
298:名前は開発中のものです。
04/07/09 23:19 JPrr+eC9.net
>>297
初期値の c は0にしないと、一つ少なくなるよ
299:HSPで素数
04/07/10 08:28 gc5EpECZ.net
#include "hspext.as"
False=0:True=1:count++:i=3
mes "計算中......"
while count<1000
sosu=True
j=3
emsqr chk,i
chk=chk>>4
while j<=chk
if (i \ j)=0 {
sosu=False
_break
}
j=j+2
wend
if sosu=True {
// cls
// mes i
EndNum=i
count++
}
i=i+2
gettime NowTime, 6
if (NowTime!=BeforeTime) {
BeforeTime=NowTime
wait 1
}
wend
mes "計算終了。"+count+"個目の素数は"+EndNum+"です。"
stop mes
300:名前は開発中のものです。
04/07/10 14:33 /RFPsMma.net
ゲムが完成するのは10後くらいの気がするのは私だけだろうか
301:名前は開発中のものです。
04/07/10 15:30 wQKs6GiV.net
このスレ遠回りしすぎ。
素数とか必要になったときにやればいいのに。
ゲーム製作に必ず必要なものではない。
302:名前は開発中のものです。
04/07/10 16:06 qklEKUA/.net
HSPにまともなゲームが無いのはゲームに関係無い事ばかりに力入れてる厨房ばかりだからじゃないか?w
303:名前は開発中のものです。
04/07/10 16:07 gc5EpECZ.net
弾発射の課題で弾の色が黄緑が指定されてたので調べてきました
JISで決まってるようです
#BBC000(187,192,0)
URLリンク(www5d.biglobe.ne.jp)
304:285
04/07/10 19:01 EpDrHTyy.net
>301
俺もそう思った。上から落ちてくるものを受け止めるとか
そういう簡単なゲームを作ったみたほうがいいんじゃないかと。
305:名前は開発中のものです。
04/07/10 19:02 EpDrHTyy.net
しまった、名前欄そのままだった_| ̄|○
306:HSPで素数 エラトステネスの篩い
04/07/10 19:34 gc5EpECZ.net
#include "hspext.as"
True=1
False=0
Max=7920
Dim SosuList, Max
emsqr chk,Max
chk=chk>>4
mes "計算中......"
i=3
while i<=chk
j=i+i
while j<Max
SosuList.j=True
j=j+i
wend
i=i+2
wend
i=3
sum=1
while i<Max
if SosuList.i=False {
sum++
}
i=i+2
wend
mes "合計"+sum+"個の素数を発見しました。"
stop
307:HSPが初プログラム@生徒希望
04/07/10 21:23 +13mwptL.net
>>298
あ、それはちょっと変更ミスです。
>>297で一応合ってるんでしょうか?
308:HSPが初プログラム@生徒希望
04/07/10 21:53 +13mwptL.net
連レススマソ
こうするとちょっと早くなりました
sdim m,4000 : notesel m
mesbox m,640,480
n=2 : c=0 : j=1
*judge
if n-1=j : goto *pn
j+
if n \ j=0 : n+ : j=1
await
goto *judge
*pn
c+
noteadd ""+n
if c=1000 : goto *finish
n+ : j=1
goto *judge
*finish
objprm 0, m
stop
309:名無しさん@そうだ選挙に行こう
04/07/11 07:11 q09vifT2.net
課題8 メイン課題 弾を撃って貰います
URLリンク(gamdev.org)
310:名無しさん@そうだ選挙に行こう
04/07/11 08:10 k56A1TFY.net
課題8 Zで弾発射
<html><head><title>Invader Game?</title><style type="text/css"><!--
.ch{position:absolute;width:32px;height:32px;}
.self{background-color:#FF0000;}.enemy{background-color:#0000FF;}
.missile{background-color:#BBC000;position:absolute;width:2px;height:16px;top:-20px;}
--></style></head>
<body onLoad="main()" onKeyDown="k[event.keyCode]=1" onKeyUp="k[event.keyCode]=0">
<div id=char class="self ch"></div><div id=enemy class="enemy ch"></div>
<div id=mi0 class=missile></div><div id=mi1 class=missile></div><div id=mi2 class=missile></div>
<script language="Javascript"><!--
var timerID, k = [];var x = 304, y = 448, charElm = document.getElementById('char');
var eX, eY = 480, enemyElm = document.getElementById('enemy');
var miE = [], miA = [], miX = [], miY = [];
for (i = 0; i < 3; i++){miE[i] = document.getElementById('mi' + i);miA[i] = false;miY[i] = -20;}
function setEnemy(){eY = -32;enemyElm.style.left = eX = Math.floor(Math.random() * 640);}
function main(){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;
for (i = 0; i < 3; i++){if (miA[i]){
if (miY[i] < -20) miA[i] = false;
if (Math.abs(miX[i] - eX - 15) < 17 && Math.abs(miY[i] - eY - 15) < 23){
miA[i] = false;miY[i] = -20;setEnemy();}
miE[i].style.top = miY[i] -= 8;
}else if (k[90]){miA[i] = true;miE[i].style.left = miX[i] = x + 15;miE[i].style.top = miY[i] = y - 16;
k[90] = 0;break;}}
if (eY > 480) setEnemy();enemyElm.style.top = eY += 8;
if (Math.abs(x - eX) > 32 || Math.abs(y - eY) > 32) timerID = setTimeout(main, 30);
}//--></script></body></html>
311:名前は開発中のものです。
04/07/12 00:04 m2Go/Kix.net
>>285
>>301
>>304
先生!試しに出題と採点をしてみませんか?
312:名前は開発中のものです。
04/07/12 06:31 YBMwRYh2.net
>310
神降臨
313:名前は開発中のものです。
04/07/12 14:47 m2Go/Kix.net
課題9 課題外伝 ボールの跳ね返りシミュ
URLリンク(gamdev.org)
314:C / HSPの生徒 orz
04/07/12 19:22 rv2Ic3EG.net
課題8 メイン課題 弾を撃って貰います
URLリンク(gamdev.org)
馬鹿やってたので修正。
315:HSPが初プログラム@生徒希望
04/07/12 19:26 ANTzJhbU.net
敵に触れても終わりませんけど、いいんですか?
316:VB.NETで素数
04/07/12 21:26 m2Go/Kix.net
Module Module1
Sub Main()
Dim i As Integer
Dim j As Integer
Dim count As Integer
Dim sosu As Boolean
i = 2
While count < 1000
sosu = False
For j = 2 To Math.Sqrt(i)
If (i Mod j) = 0 Then
sosu = True
End If
Next
If Not sosu Then
count = count + 1
Console.WriteLine(i)
End If
i = i + 1
End While
End Sub
End Module
317:名前は開発中のものです。
04/07/13 19:20 EV/5lhQ6.net
素数はそろそろ打ち切りにしない?
318:4 ◆3VUXqvbfSY
04/07/13 21:57 UU6rJvtG.net
打ち切りってどうやるんでしょうか…
まあ。進める人はいつまでも素数をやらずに、次に進んでください。
とか言っときます。
んでは…次の課題
赤い四角の敵の移動をインベダ風にしよう。
縦2体 横3体の合計六機の敵が、左右に移動します。
端に到達すると、一キャラ分下降します。
弾が当たると、当たったキャラを消去し、ソコが抜けた状態でそのまま、上の動作を繰り返します。
下まで到達されたら終了。
319:名前は開発中のものです。
04/07/14 14:18 fwuwWRAB.net
チェック対象がたくさんある場合の当たり判定って、どうやるのがベストなんだろう?
弾が20個、ターゲットが20機居たら20x20の全組み合わせの判定をするしかないの?
320:名前は開発中のものです。
04/07/14 14:32 hWTGJY1w.net
>>319
Octtree でググってみ
321:C / HSPの生徒 orz
04/07/14 19:12 JsMT7SMh.net
課題10 インベダ風移動
URLリンク(gamdev.org)
322:134
04/07/14 19:57 3WONRXZv.net
他のパソコンだと重いかも
URLリンク(gamdev.org)
323:名前は開発中のものです。
04/07/14 21:08 R7T0IzUh.net
>>322
高速弾で弾幕張ってくるインベーダー超怖え(((( ;゚Д゚)))ガクガクブルブル
324:134
04/07/14 21:42 3WONRXZv.net
>323
いや、弾の発射の処理がいまいちよく分からなかったので、そうなってしまいました。
感想ありがとうございます。
325:HSPが初プログラム
04/07/14 22:00 naAXWZ/B.net
やってみました。凄く難しかった…
326:課題3 赤い四角 その1
04/07/15 01:22 mfzLmHcI.net
#include <d3d9.h>
LPDIRECT3D9 g_pD3D = NULL;
LPDIRECT3DDEVICE9 g_pd3dDevice = NULL;
LPDIRECT3DVERTEXBUFFER9 g_pVB = NULL;
struct CUSTOMVERTEX
{
FLOAT x, y, z, rhw;
DWORD color;
};
#define D3DFVF_CUSTOMVERTEX (D3DFVF_XYZRHW|D3DFVF_DIFFUSE)
HRESULT InitD3D( HWND hWnd )
{
if( NULL == ( g_pD3D = Direct3DCreate9( D3D_SDK_VERSION ) ) )
return E_FAIL;
D3DPRESENT_PARAMETERS d3dpp;
ZeroMemory( &d3dpp, sizeof(d3dpp) );
d3dpp.Windowed = TRUE;
d3dpp.SwapEffect = D3DSWAPEFFECT_DISCARD;
d3dpp.BackBufferFormat = D3DFMT_UNKNOWN;
if( FAILED( g_pD3D->CreateDevice( D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, hWnd,
D3DCREATE_SOFTWARE_VERTEXPROCESSING,
&d3dpp, &g_pd3dDevice ) ) )
{
return E_FAIL;
}
return S_OK;
}
327:課題3 赤い四角 その2
04/07/15 01:23 mfzLmHcI.net
HRESULT InitVB()
{
CUSTOMVERTEX vertices[] =
{
{ 0.0f, 0.0f, 0.5f, 1.0f, 0xffff0000, }, // x, y, z, rhw, color
{ 320.0f, 0.0f, 0.5f, 1.0f, 0xffff0000, },
{ 320.0f, 240.0f, 0.5f, 1.0f, 0xffff0000, },
{ 0.0f, 240.0f, 0.5f, 1.0f, 0xffff0000, },
};
if( FAILED( g_pd3dDevice->CreateVertexBuffer( 4*sizeof(CUSTOMVERTEX),
0, D3DFVF_CUSTOMVERTEX,
D3DPOOL_DEFAULT, &g_pVB, NULL ) ) )
{
return E_FAIL;
}
VOID* pVertices;
if( FAILED( g_pVB->Lock( 0, sizeof(vertices), (void**)&pVertices, 0 ) ) )
return E_FAIL;
memcpy( pVertices, vertices, sizeof(vertices) );
g_pVB->Unlock();
return S_OK;
}
328:課題3 赤い四角 その3
04/07/15 01:24 mfzLmHcI.net
VOID Cleanup()
{
if( g_pVB != NULL )
g_pVB->Release();
if( g_pd3dDevice != NULL )
g_pd3dDevice->Release();
if( g_pD3D != NULL )
g_pD3D->Release();
}
VOID Render()
{
g_pd3dDevice->Clear( 0, NULL, D3DCLEAR_TARGET, D3DCOLOR_XRGB(0,0,255), 1.0f, 0 );
if( SUCCEEDED( g_pd3dDevice->BeginScene() ) )
{
g_pd3dDevice->SetStreamSource( 0, g_pVB, 0, sizeof(CUSTOMVERTEX) );
g_pd3dDevice->SetFVF( D3DFVF_CUSTOMVERTEX );
g_pd3dDevice->DrawPrimitive( D3DPT_TRIANGLEFAN, 0, 2 );
g_pd3dDevice->EndScene();
}
g_pd3dDevice->Present( NULL, NULL, NULL, NULL );
}
329:課題3 赤い四角 その4
04/07/15 01:26 mfzLmHcI.net
LRESULT WINAPI MsgProc( HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam )
{
switch( msg )
{
case WM_DESTROY:
Cleanup();
PostQuitMessage( 0 );
return 0;
}
return DefWindowProc( hWnd, msg, wParam, lParam );
}
INT WINAPI WinMain( HINSTANCE hInst, HINSTANCE, LPSTR, INT )
{
WNDCLASSEX wc = { sizeof(WNDCLASSEX), CS_CLASSDC, MsgProc, 0L, 0L,
GetModuleHandle(NULL), NULL, NULL, NULL, NULL,
"D3D Tutorial", NULL };
RegisterClassEx( &wc );
HWND hWnd = CreateWindow( "D3D Tutorial", "課題",
WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, 0, 640, 480,
GetDesktopWindow(), NULL, wc.hInstance, NULL );
330:課題3 赤い四角 その5(ラスト)
04/07/15 01:27 mfzLmHcI.net
if( SUCCEEDED( InitD3D( hWnd ) ) )
{
if( SUCCEEDED( InitVB() ) )
{
ShowWindow( hWnd, SW_SHOWDEFAULT );
UpdateWindow( hWnd );
MSG msg;
ZeroMemory( &msg, sizeof(msg) );
while( msg.message!=WM_QUIT )
{
if( PeekMessage( &msg, NULL, 0U, 0U, PM_REMOVE ) )
{
TranslateMessage( &msg );
DispatchMessage( &msg );
}
else
Render();
}
}
}
UnregisterClass( "D3D Tutorial", wc.hInstance );
return 0;
}
331:名前は開発中のものです。
04/07/15 01:45 iLVEI/nf.net
やっぱりソース貼りつけは見辛いな
332:名前は開発中のものです。
04/07/15 08:31 FCzCT1vF.net
課題1,3,4,5,7 (ActiveBasic)です。残りは、後でやる事にします
URLリンク(gamdev.org)
333:C / HSPの生徒 orz
04/07/15 09:18 Ian2SxqZ.net
>>322=>>324
始めて見たけど、こんな感じのインベーダーもいいかも(`・ω・´)
オリジナルに近づけるなら、
・折り返しのときにずれないようにする
・自分の弾は二発(あの弾幕に一発はきつい)
・敵はばらばらに弾を撃つ
だと思う。
せっかく敵を構造体で処理してるから、
敵の処理のところで個別に乱数発射させればいいんじゃない?
334:C / HSPの生徒 orz
04/07/15 09:47 Ian2SxqZ.net
やべ、訂正。
〇自分の弾は一発(あの弾幕だと二発じゃないときつい)
×自分の弾は二発(あの弾幕に一発はきつい)
335:C / HSPの生徒 orz
04/07/15 11:27 Ian2SxqZ.net
課題10 インベダ風移動 修正版
URLリンク(gamdev.org)
次の課題マダー?
336:名前は開発中のものです。
04/07/15 12:55 930GPiwR.net
>>335
ソースが初心者っぽくない:-)
337:名前は開発中のものです。
04/07/15 20:55 mfzLmHcI.net
#include <d3d9.h>
#include <dinput.h>
LPDIRECT3D9 g_pD3D = NULL;
LPDIRECT3DDEVICE9 g_pd3dDevice = NULL;
LPDIRECT3DVERTEXBUFFER9 g_pVB = NULL;
LPDIRECTINPUT8 g_lpDI;
LPDIRECTINPUTDEVICE8 g_lpDIDevice;
HINSTANCE g_hinst;
HWND g_hwndMain;
struct CUSTOMVERTEX
{
FLOAT x, y, z, rhw;
DWORD color;
};
CUSTOMVERTEX vertices[] =
{
{ 0.0f, 0.0f, 0.5f, 1.0f, 0xffff0000, }, // x, y, z, rhw, color
{ 320.0f, 0.0f, 0.5f, 1.0f, 0xffff0000, },
{ 320.0f, 240.0f, 0.5f, 1.0f, 0xffff0000, },
{ 0.0f, 240.0f, 0.5f, 1.0f, 0xffff0000, },
};
#define D3DFVF_CUSTOMVERTEX (D3DFVF_XYZRHW|D3DFVF_DIFFUSE)
int cx;
int cy;
void WINAPI ProcessKBInput()
{
#define KEYDOWN(name, key) (name[key] & 0x80)
char buffer[256];
HRESULT hr;
hr = g_lpDIDevice->GetDeviceState(sizeof(buffer),(LPVOID)&buffer);
if FAILED(hr)
{
338:名前は開発中のものです。
04/07/15 20:55 mfzLmHcI.net
exit(EXIT_FAILURE);
}
cx=0;
cy=0;
if (KEYDOWN(buffer, DIK_RIGHT))
cx=1;
else if(KEYDOWN(buffer, DIK_LEFT))
cx=-1;
if (KEYDOWN(buffer, DIK_UP))
cy=-1;
else if (KEYDOWN(buffer, DIK_DOWN))
cy=1;
}
void WINAPI DI_Term()
{
if (g_lpDI)
{
if (g_lpDIDevice)
{
g_lpDIDevice->Unacquire();
g_lpDIDevice->Release();
g_lpDIDevice = NULL;
}
g_lpDI->Release();
g_lpDI = NULL;
}
}
HRESULT InitJoystick()
{
HRESULT hr;
339:名前は開発中のものです。
04/07/15 20:57 mfzLmHcI.net
//オブジェクトの作成
hr = DirectInput8Create(g_hinst, DIRECTINPUT_VERSION,
IID_IDirectInput8, (void**)&g_lpDI, NULL);
if FAILED(hr)
{
exit(EXIT_FAILURE);
}
//キーボード デバイスの作成
hr = g_lpDI->CreateDevice(GUID_SysKeyboard, &g_lpDIDevice, NULL);
if FAILED(hr) {
DI_Term();
exit(EXIT_FAILURE);
}
//キーボードのデータ形式の設定
hr = g_lpDIDevice->SetDataFormat(&c_dfDIKeyboard);
if FAILED(hr) {
DI_Term();
exit(EXIT_FAILURE);
}
//キーボードの動作の設定
hr = g_lpDIDevice->SetCooperativeLevel(g_hwndMain,
DISCL_FOREGROUND | DISCL_NONEXCLUSIVE);
if FAILED(hr) {
DI_Term();
exit(EXIT_FAILURE);
}
}
340:名前は開発中のものです。
04/07/15 20:58 mfzLmHcI.net
HRESULT InitD3D( HWND hWnd )
{
if( NULL == ( g_pD3D = Direct3DCreate9( D3D_SDK_VERSION ) ) )
return E_FAIL;
D3DPRESENT_PARAMETERS d3dpp;
ZeroMemory( &d3dpp, sizeof(d3dpp) );
d3dpp.Windowed = TRUE;
d3dpp.SwapEffect = D3DSWAPEFFECT_DISCARD;
d3dpp.BackBufferFormat = D3DFMT_UNKNOWN;
if( FAILED( g_pD3D->CreateDevice( D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, hWnd,
D3DCREATE_SOFTWARE_VERTEXPROCESSING,
&d3dpp, &g_pd3dDevice ) ) )
{
return E_FAIL;
}
return S_OK;
}
HRESULT InitVB()
{
if( FAILED( g_pd3dDevice->CreateVertexBuffer( 4*sizeof(CUSTOMVERTEX),
0, D3DFVF_CUSTOMVERTEX,
D3DPOOL_DEFAULT, &g_pVB, NULL ) ) )
{
return E_FAIL;
}
VOID* pVertices;
if( FAILED( g_pVB->Lock( 0, sizeof(vertices), (void**)&pVertices, 0 ) ) )
return E_FAIL;
memcpy( pVertices, vertices, sizeof(vertices) );
341:名前は開発中のものです。
04/07/15 21:07 mfzLmHcI.net
g_pVB->Unlock();
return S_OK;
}
VOID Cleanup()
{
if( g_pVB != NULL )
g_pVB->Release();
if( g_pd3dDevice != NULL )
g_pd3dDevice->Release();
if( g_pD3D != NULL )
g_pD3D->Release();
}
VOID Render()
{
if (g_lpDIDevice) g_lpDIDevice->Acquire();
ProcessKBInput();
for (int i=0; i<4; i++)
{
vertices[i].x=vertices[i].x+cx;
vertices[i].y=vertices[i].y+cy;
}
VOID* pVertices;
if( FAILED( g_pVB->Lock( 0, sizeof(vertices), (void**)&pVertices, 0 ) ) )
exit(EXIT_FAILURE);
memcpy( pVertices, vertices, sizeof(vertices) );
g_pVB->Unlock();
g_pd3dDevice->Clear( 0, NULL, D3DCLEAR_TARGET, D3DCOLOR_XRGB(0,0,255), 1.0f, 0 );
if( SUCCEEDED( g_pd3dDevice->BeginScene() ) )
{
342:名前は開発中のものです。
04/07/15 21:07 mfzLmHcI.net
g_pd3dDevice->SetStreamSource( 0, g_pVB, 0, sizeof(CUSTOMVERTEX) );
g_pd3dDevice->SetFVF( D3DFVF_CUSTOMVERTEX );
g_pd3dDevice->DrawPrimitive( D3DPT_TRIANGLEFAN, 0, 2 );
g_pd3dDevice->EndScene();
}
g_pd3dDevice->Present( NULL, NULL, NULL, NULL );
}
LRESULT WINAPI MsgProc( HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam )
{
switch( msg )
{
case WM_DESTROY:
Cleanup();
PostQuitMessage( 0 );
return 0;
}
return DefWindowProc( hWnd, msg, wParam, lParam );
}
INT WINAPI WinMain( HINSTANCE hInst, HINSTANCE, LPSTR, INT )
{
g_hinst=hInst;
WNDCLASSEX wc = { sizeof(WNDCLASSEX), CS_CLASSDC, MsgProc, 0L, 0L,
GetModuleHandle(NULL), NULL, NULL, NULL, NULL,
"D3D Tutorial", NULL };
RegisterClassEx( &wc );
HWND hWnd = CreateWindow( "D3D Tutorial", "課題",
WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, 0, 640, 480,
GetDesktopWindow(), NULL, wc.hInstance, NULL );
g_hwndMain=hWnd;
InitJoystick();
if( SUCCEEDED( InitD3D( hWnd ) ) )
343:名前は開発中のものです。
04/07/15 21:36 FFz8UuO5.net
うpろだ使えよ・・
344:名前は開発中のものです。
04/07/15 21:48 mfzLmHcI.net
過去ログよんだからわざわざ貼ったのに
ろだ推奨にルール変更?
345:名前は開発中のものです。
04/07/15 22:09 A+IEwnnr.net
ところでGdevうき落ちてる?
346:名前は開発中のものです。
04/07/15 22:12 mfzLmHcI.net
とりあえずラストまで
>>337-342
{
if( SUCCEEDED( InitVB() ) )
{
ShowWindow( hWnd, SW_SHOWDEFAULT );
UpdateWindow( hWnd );
MSG msg;
ZeroMemory( &msg, sizeof(msg) );
while( msg.message!=WM_QUIT )
{
if( PeekMessage( &msg, NULL, 0U, 0U, PM_REMOVE ) )
{
TranslateMessage( &msg );
DispatchMessage( &msg );
}
else
Render();
}
}
}
UnregisterClass( "D3D Tutorial", wc.hInstance );
return 0;
}