1 名前:名前は開発中のものです。 [04/06/10 18:05 ID:VshiFFV8] ゲームに必要な要素を先生が出してくれます その課題をクリアしていく講習会です
188 名前:生徒A [04/06/28 06:10 ID:D8BhR1kS] なんとか徹夜して6時間ほど粘ってキー入力まで行ったけど、限界が近い… WM_TIMERで画面の更新を行っているんですが、なんかすごくちらつくんですよ あと、DeleteObject(hBr)というのを使うと、何故か画面が白くなるんです… なので、使ってません。 gamdev.org/up/img/762.lzh
189 名前:4 ◆3VUXqvbfSY [04/06/28 06:20 ID:kLFrYp0l] すみません皆様… ミニ死の行進してました… アプロダについて: あっても、別に構いませんが、必要無いようにします。 具体的には、トップダウンで(例えばCなら) メインを作る。 ↓ 個々に使われた関数を作る みたいに、ソースを(出来るだけ解りやすく)分割して、表示しようと企んでいます。 進行度: 自分で出来る方がドンドン進まれるのは、むしろ、喜ばしいです。ただし、課題はあくまで初心者ラインにしておきます。 だから、焦らなくて大丈夫。今の課題は、「キーで、赤い四角を動かす」です。 先生: や、やっと一人…m(_ _)mヨロシクオネガイシマス 次の課題: 当たり判定。 先ほどの、「動く赤い四角」を避けゲーに改造しましょう 敵は 敵x = rand() % 640;//rand()*640/RAND_MAX で…敵y++;のように動く単純な敵です。 当たったら終了と言う仕様で…
190 名前:副担任 mailto:sage [04/06/28 10:23 ID:HdfIcXTc] 漏れは先生と考え方が違うので一応書いておきます。うざかったらクビにしてください。>先生 ・動けば正義(いい設計はできたほうがいいけどまだ求める段階ではないと思う) ・ソースは固めてどこかにアップする(バックアップ、成果としてわかりやすい) ・バイナリは付けて欲しい(開発環境を全てそろえるのは難しい) ・課題によけいなものは付けないでください(初心者が提出したソースを参考にしたとき、必要な機能のみが実装されていたほうがいい) あくまで初心者のためのライブラリとしてとらえています。 「絵を描くにはこうする」「動かすにはこうする」「…」「…」のサンプルコードの固まりにしたいです。 課題の方針には賛成なので従います。 というわけで分からんことがある人は漏れが面倒みます。勉強しながら…。orz
191 名前:副担任 mailto:sage [04/06/28 10:26 ID:HdfIcXTc] 訂正すまそ。 × ・課題によけいなものは付けないでください(初心者が提出したソースを参考にしたとき、必要な機能のみが実装されていたほうがいい) ○ ・提出したソースにはよけいな機能は付けないでください(初心者が提出したソースを参考にしたとき、必要な機能のみが実装されていたほうがいい)
192 名前:名前は開発中のものです。 mailto:sage [04/06/28 10:28 ID:Ten9Dr/x] >>188 簡単だが添削。ウィンドウプロシージャだけ。 DeleteObjectの2行はWM_PAINT内でやってはダメ。 WM_PAINTは何度も呼ばれるため、最初の描画が終了した時点で、作ったペンやブラシは 無効になるため、色がつかなくなる。DeleteObjectするならWM_DESTROY内で。 ちなみにCreateしたものはちゃんと削除するのがお約束。 SelectObjectしたものに関しても、元に戻しておくのが一応の作法。 holdobj = SelectObject(hdc, hobj);// 以前のオブジェクトハンドルを保存 // 何か処理 holdobj = SelectObject(hdc, holdobj);// 以前のオブジェクトに戻す 何故か赤く塗りつぶされないというのは、ディスプレイDCに複数回描画を行っていて、それが ちらつきとして現れるから。こういう場合はオフスクリーンに描画し、最後にディスプレイDCに BitBltする。
193 名前:名前は開発中のものです。 mailto:sage [04/06/28 10:30 ID:Ten9Dr/x] ちと訂正・・orz ×holdobj = SelectObject(hdc, holdobj);// 以前のオブジェクトに戻す ○SelectObject(hdc, holdobj);// 以前のオブジェクトに戻す
194 名前:63 ◆xdaKt6k1XI mailto:sage [04/06/28 15:51 ID:W33tIq0j] >>190 変な質問ですいません バイナリってなんですか?
195 名前:生徒A [04/06/28 16:36 ID:D8BhR1kS] >>194 190じゃないですが、もともとは2進数という意味だと思います。 だから、この場合は、1と0の組み合わせで作られた機械語データ (実行ファイル)の意味だと思います。 他にも、テキストデータ以外のファイル全てを指す事もあります。
196 名前:生徒A [04/06/28 16:40 ID:D8BhR1kS] >>192 ありがとうございます。 DeleteObjectのやり方は分かったのですが、 オフスクリーンのやり方がちょっとよく分からないです。 具体的には、オフスクリーンの作成方法です。
197 名前:名前は開発中のものです。 mailto:sage [04/06/28 17:06 ID:cdlT0cfW] CreateCompatibleBitmap
198 名前:副担任 mailto:sage [04/06/28 17:37 ID:HdfIcXTc] >>194 Windowsの実行ファイルのことです。"〜.exe" ってやつ。 C言語とかはコンパイルして実行ファイルを作らないとプログラムが動きません。 HSPはインタプリタ言語なので実行ファイルは作らなくていいみたいですね。 >>195 正解です
199 名前:Ruby@課題6当たり判定 [04/06/28 18:32 ID:1FRiXQWF] require 'sdl' SDL.init( SDL::INIT_VIDEO ) screen = SDL.setVideoMode( 640, 480, 16, SDL::SWSURFACE ) x=(639-32)/2 y=(479-32)/2 enemyX=rand(639-32) enemyY=0 loop do while event = SDL::Event2.poll case event when SDL::Event2::Quit exit end end SDL::Key.scan y -= 1 if SDL::Key.press?( SDL::Key::UP ) x += 1 if SDL::Key.press?( SDL::Key::RIGHT ) y += 1 if SDL::Key.press?( SDL::Key::DOWN ) x -= 1 if SDL::Key.press?( SDL::Key::LEFT ) x=0 if x<0 x=(639-32) if x>(639-32) y=0 if y<0 y=(479-32) if y>(479-32) enemyY=enemyY+1 enemyY=0 if enemyY>479 if (x-enemyX).abs<32 and (y-enemyY).abs<32 then exit end
200 名前:Ruby@課題6当たり判定 [04/06/28 18:33 ID:1FRiXQWF] screen.fillRect( 0, 0, 640, 480, [ 0, 0, 0 ] ) screen.fillRect( x, y, 32, 32, [ 255, 0, 0 ] ) screen.fillRect( enemyX, enemyY, 32, 32, [ 0, 255, 0 ] ) screen.updateRect( 0, 0, 0, 0 ) end 課題6当たり判定(実行ファイル付き) gamdev.org/up/img/764.zip 【Rubyスクリプトを実行ファイルにする方法】 exerb.sourceforge.jp/ からExerbををダウンロード レシピファイルを書く add_ruby_script[TAB](スクリプト名) add_extension_library[TAB](ライブラリ名)[TAB](パスを含めたライブラリ名) 例) add_ruby_script[TAB]collision.rb add_extension_library[TAB]sdl.so[TAB]sdl.so ※注意 [TAB]はTABキーで入力してください 通常のエディタだと空白と判別できませんので注意 Exerb添付ドキュメントは旧式の書き方になっているようです サンプルは新しいものだったのでそちらを参考にしました
201 名前:63 ◆xdaKt6k1XI mailto:sage [04/06/28 20:48 ID:W33tIq0j] >>195 >>198 ありがとうございました。
202 名前:生徒BLUE [04/06/28 21:18 ID:mIyMN4GH] 指摘された所を全部直しました 課題5キー入力再提出 gamdev.org/up/img/766.zip
203 名前:4 ◆3VUXqvbfSY [04/06/28 21:39 ID:kLFrYp0l] 参考程度に… オフスクリーン: 変数宣言 前略 hdcOFF=CreateCompatibleDC(hdcON);//空の描画ハンドルを作る CopyBitmap=CreateCompatibleBitmap(hdcON,640,480);//表のウィンドウと互換のビットマップをつくる。 SelectObject(hdcOFF,CopyBitmap);//んで、設定 中略 BitBlt(hdcON,0,0,640,480,hdcOFF,0,0,SRCCOPY);//裏に書かれた内容を、表に上書きする。 後略 こんな感じ。…VC++だけでごめんなさい…
204 名前:LGP@課題1数当て [04/06/28 23:47 ID:1FRiXQWF] スクリプト組はあまり時間もかからず有利なので 複数言語同時習得を目指してみます CH = G@SETUP( 640 , 480 , 16 , 1 ) RANDSET(SYSTIME()) RN = RAND()%9+1 G@PRINT(CH,0,0,"1〜9の数を入力せよ") G@FLIP() LOOP I@KEYGET2( ) IF I@KEYBTN2(1)=2 THEN ANS=I@KEYBTN2(0)-1 IF ANS=RN THEN SYSEXIT() ENDIF IF (ANS>0) AND (ANS<10) THEN N=N+1 G@GDIBOXFULL( CH , 0, 100, 640, 480 ) G@PRINT(CH,0,100,"はずれ"+STR(N)+"回目") ENDIF G@FLIP() ENDIF S@WAIT() ENDLOOP LGP@課題1数当て(実行ファイル付き) gamdev.org/up/img/767.zip
205 名前:名前は開発中のものです。 mailto:sage [04/06/29 06:26 ID:Ngmzz0xf] 課題6 実行方法:@メモ帳にコピペ、A名前をつけて保存でinvader.html、BブラウザにD&D <html><head><title>Invader Game?</title><style type="text/css"><!-- .self{background-color:#FF0000;position:absolute;width:32px;height:32px;} .enemy{background-color:#0000FF;position:absolute;width:32px;height:32px;} --></style></head> <body onLoad="m()"onKeyDown="k[event.keyCode]=1"onKeyUp="k[event.keyCode]=0"> <div id=c class=self></div><div id=e class=enemy></div> <script language="Javascript"><!-- var alive=true,timerID,k=[],x=304,y=448,eX,eY= 480; var charElm=document.getElementById('c'),enemyElm=document.getElementById('e'); function m(){clearTimeout(timerID); x+=k[37]&&x?-8:k[39]&&x<608?8:0;y+=k[38]&&y?-8:k[40]&&y<448?8:0; charElm.style.left=x;charElm.style.top=y; eY+=8;if(eY>480){eY=-32;enemyElm.style.left=eX=Math.floor(Math.random()*640);} enemyElm.style.top=eY; if(Math.abs(x-eX)>32||Math.abs(y-eY)>32)timerID=setTimeout(m,30);} //--></script></body></html>
206 名前:LGP@課題2素数 [04/06/29 09:54 ID:OSp1CFcf] FH=F@OPEN("PrimeNumber.txt" , 3 ) F@WRITES( FH , STR(2) ) COUNT=COUNT+1 I=3 WHILE COUNT<1000 SOSU=-1 FOR J=3 TO I/2 STEP 2 IF I%J=0 THEN SOSU=0 ENDIF NEXT IF SOSU=-1 THEN F@WRITES( FH , STR(I) ) COUNT=COUNT+1 ENDIF I=I+2 S@WAIT() ENDWHILE F@CLOSE( FH )
207 名前:名前は開発中のものです。 mailto:sage [04/06/29 13:12 ID:WW/6W0k2] dpかwinsockでチャット作りたひ。
208 名前:名前は開発中のものです。 [04/06/29 18:46 ID:vpUdLCjy] >>207 自分で作ったチャットソフトで皆と繋げられたら楽しそうな予感!
209 名前:名前は開発中のものです。 [04/06/29 21:15 ID:OSp1CFcf] もの凄い勢いで進行してるのでまとめの意味もあって統計をとってみました 抜けてる人がいたらごめんなさい JavaScript ****** 6 Ruby.. ****** 6 生徒A(Win32API). ***** 5 生徒BLUE (Win32API). ***** 5 Delphi ***** 5 D言語 ** 2 LGP ** 2 x≠先生かつx=生徒 ⇒ x=俺(VB) 測定不能 まとめページ gamdev.org/w/?%5B%5B%A1%DA%BD%E9%BF%B4%BC%D4%A1%DB%B2%DD%C2%EA%A4%F2%A5%AF%A5%EA%A5%A2%A4%B7%A4%C6%A4%A4%A4%AF%A5%B9%A5%EC%A1%DA%B9%D6%BD%AC%B2%F1%A1%DB%A4%DE%A4%C8%A4%E1%5D%5D アップローダ gamdev.org/up/
210 名前:x≠先生かつx=生徒 ⇒ x=俺 mailto:sage [04/06/29 21:28 ID:gNXtRGm+] >>209 VBを使った覚えは無いんですが…というよりVB使えません。 >>134 のことかな?
211 名前:名前は開発中のものです。 mailto:sage [04/06/29 22:14 ID:OSp1CFcf] >>210 混同してました 2人も先行者がいたのかorz 修正しました HSPのほうはもうやらないの? JavaScript ****** 6 Ruby.. ****** 6 生徒A(Win32API). ***** 5 生徒BLUE (Win32API). ***** 5 Delphi ***** 5 D言語 ** 2 LGP ** 2 x≠先生かつx=生徒 ⇒ x=俺(Win32API) 測定不能 VB 測定不能
212 名前:LGP@課題3赤い四角 [04/06/29 22:53 ID:OSp1CFcf] //640x480、16ビット色、ウィンドウ画面 CH = G@SETUP( 640 , 480 , 16 , 1 ) //ブラシを赤色に設定(RGBはそれぞれ0〜1.0で設定) G@GDISETBRUSH( 0 , 1.0 , 0 , 0 ) //四角を描画 G@GDIBOXFULL( CH , 0, 0, 320, 240 ) //フリップ G@FLIP() //無限ループ LOOP S@WAIT() ENDLOOP
213 名前:生徒BLUE [04/06/30 00:29 ID:HYWm3For] >>181 >「ANDでマスクとる」とかはわかる? はい、この場合は2進数に直して一番左のビット以外を全部0にするってことですよね MSDN読んだりあれからさらに調べてみたので前よりはちょっとわかったのですが 左端のビットが1ならボタンが押されているという程度の理解でいいのでしょうか ・定数書いちゃダメ defineを積極的に使ってみました C++の場合だとdefineは使わずにconstを使ったほうがいいと書いてあるホームページも みつけましたがどうなんでしょう? ・拡張子がcppなのにC言語風 意識せずに全部cppにする習慣がついてたので…… クラスを使う→cpp、使わない→cでいいですか? 拡張子の使い分けむずかしい ・バックバッファあたりは毎回生成&破棄しなくても最初に一度だけ GetDCを使えばいいんだ!と前回は気づいてませんでした WEBの情報をあちこちからつまみ食いしてるので全体的にチグハグな感じに なっていたようで指摘してもらって勉強になります ソースみていただける方は2ちゃんねるに貼り付けとアップローダのどちらが見やすいでしょうか? それとも両方のほうがよい?
214 名前:名前は開発中のものです。 mailto:sage [04/06/30 11:43 ID:0T8fXV58] そろそろ本気で見にくくなってきたわけだが、 ちょっと言語が大杉やしないかい? もうちょっと絞ろうよ
215 名前:通りすがり人 mailto:sage [04/06/30 12:46 ID:qBs2hfFg] >>213 > 左端のビットが1ならボタンが押されているという程度の理解でいいのでしょうか HELPには... 最上位ビットがセットされたときは現在キーが押されていることを示し、 最下位ビットがセットされたときは直前のGetAsyncKeyState関数呼び出し以降に キーが押されたことを示します。 って書いてある。つまり・・・ #include<windows.h> #include<stdio.h> void main() { intRv; for(;;) { Sleep(1); Rv = GetAsyncKeyState(VK_SPACE); if (Rv != 0) { printf("%08x\n", Rv ); } } } スペースをバシッと叩くとわかるんだけど、初回だけ最下位ビットが変化してる。 つまり、リピート状態なのかを判断できるわけ。
216 名前:生徒BLUE [04/06/30 17:09 ID:HYWm3For] >>215 早速、コンパイルして試してみました 最下位ビットに注目してみると 1000000000100100100100100100...... といったように変化します 初回だけということなので10000000......というものを期待していたのですがうまくいかないです
217 名前:生徒BLUE [04/06/30 17:38 ID:HYWm3For] 課題6 当たり判定 赤い四角のサイズを元に当たり判定をしました //****** 変更箇所 ****** //乱数の初期化 srand((unsigned)time(NULL)); //敵の移動 ++ty; if (ty>YMAX) { ty=0; tx=rand()*640/RAND_MAX; } //当たり判定 if (abs(x-tx)<BOXWIDTH && abs(y-ty)<BOXHEIGHT) { PostQuitMessage(0); } gamdev.org/up/img/775.zip
218 名前:名前は開発中のものです。 mailto:sage [04/06/30 18:49 ID:3iu2d+4i] >>216 ん?スペースキーを押すと、こんな風に表示されませんか? ffff8001 ffff8000 ffff8000 ffff8000 ffff8000 ffff8000 ffff8000 ffff8000 ffff8000 ffff8000 ffff8000
219 名前:生徒BLUE [04/06/30 19:04 ID:HYWm3For] >>218 ならないです もうちょっと調べてみます
220 名前:名前は開発中のものです。 mailto:sage [04/06/30 19:39 ID:3iu2d+4i] >>219 あ〜、押しっぱなしの場合は違う結果になるかもです。 OSのキーボードバッファとか、その辺の兼ね合いだと思うけど。
221 名前:名前は開発中のものです。 mailto:sage [04/06/30 19:52 ID:/EAv0A9z] >>215 試して見たけど確かに>>216 の現象が出るな。 他の出力で確認したらちゃんと立ち上がりだけ1が出るので printf()絡みでキー状態が変化してるっぽい。 普通はこんな使い方しないので気にしなくて良いと思われ。
222 名前:63 ◆xdaKt6k1XI mailto:sage [04/06/30 21:22 ID:qAZjVMDs] >>211 今回のは敵の大きさとか動きとかよくわからないのでやらないです。
223 名前:名前は開発中のものです。 [04/06/30 22:22 ID:j1/sm794] 320x240で一度作ったけど即死しすぎて32x32に縮小したよ サイズ指定してないから何でもいいと思ったけどそのあたりどうなんですか?>先生 wikiのほうにまとめコーナー作っておいたので各自書きたいことがあったら適当にどうぞ というか書いてくださいおながいします 名無しさんを消して自分の名前にして提出状況とかコンパイラは何を使ってるとかそんなのでいいので gamdev.org/w/?%5B%5B%A1%DA%BD%E9%BF%B4%BC%D4%A1%DB%B2%DD%C2%EA%A4%F2%A5%AF%A5%EA%A5%A2%A4%B7%A4%C6%A4%A4%A4%AF%A5%B9%A5%EC%A1%DA%B9%D6%BD%AC%B2%F1%A1%DB%A4%DE%A4%C8%A4%E1%5D%5D
224 名前:LGP@課題4sin波形 [04/07/01 00:05 ID:TMNGfYFe] //画面初期化、最後を0にすると全画面 CH = G@SETUP( 640 , 480 , 16 , 1 ) //ペンの設定、実線、線の幅1、赤色 G@GDISETPEN(LG_GDI_PS_SOLID,1,1.0,0,0) //sin波形の始点になる点を描画(LINETOの都合) G@GDILINE(CH,0,239,0,239) FOR I=0 TO 360 X=I //SINの引数と戻り値は固定小数点定数(float) //整数を固定小数点定数にキャストするには65536を掛ける //固定小数点定数を整数にキャストするには65536で割る Y=SIN(I*65536)*100/65536+239 //最後にG@GDILINEかG@GDILINETOで線を引いた場所からX,Yまで線を引く G@GDILINETO(CH,X,Y) NEXT G@FLIP() //無限ループ LOOP S@WAIT() ENDLOOP
225 名前:4 ◆3VUXqvbfSY [04/07/01 08:34 ID:KOe6GSoY] >>222 ,223 サイズは自由で結構です。 敵の動きは…だからy++;だけですよ?
226 名前:生徒A mailto:sage [04/07/01 14:26 ID:MCi74o/R] 数日間ソースとにらめっこしてるのですが、バックバッファーの処理が上手くいかないです…
227 名前:名前は開発中のものです。 mailto:sage [04/07/01 15:45 ID:bdPAbTo6] >>226 キミのソースに少し手を加えたやつをうpろだにあげたから試してみれ。780.lzhだ。 ただしオフスクリーン処理以外(後始末とか)は端折ってるのでそこは参考にしないように。
228 名前:LGP@課題5キー入力 [04/07/01 22:17 ID:TMNGfYFe] CH = G@SETUP( 640 , 480 , 16 , 1 ) LOOP //無限ループ //赤い四角を黒で塗りつぶして消す G@GDISETBRUSH( 0 , 0 , 0 , 0 ) G@GDIBOXFULL( CH , X, Y, X+320, Y+240 ) I@KEYGET() //キーの状態を得る //I@KEYBTNの引数に調べたいキーをいれ、戻り値が1なら押してる状態 IF I@KEYBTN(0xC8)=1 THEN //0xC8はカーソルキー↑ IF Y>0 THEN Y=Y-1 ENDIF ENDIF IF I@KEYBTN(0xCB)=1 THEN IF X>0 THEN X=X-1 ENDIF ENDIF IF I@KEYBTN(0xCD)=1 THEN IF X<320 THEN X=X+1 ENDIF ENDIF IF I@KEYBTN(0xD0)=1 THEN IF Y<240 THEN Y=Y+1 ENDIF ENDIF //赤い四角を描く G@GDISETBRUSH( 0 , 1.0 , 0 , 0 ) G@GDIBOXFULL( CH , X, Y, X+320, Y+240 ) G@FLIP() ENDLOOP
229 名前:LGP@課題6当たり判定 [04/07/02 03:30 ID:4ZvlEEie] CH = G@SETUP( 640 , 480 , 16 , 1 ) X=320 Y=240 //無限ループ LOOP //黒で塗りつぶし G@GDISETBRUSH( 0 , 0 , 0 , 0 ) G@GDIBOXFULL( CH , 0, 0, 640, 480) //キー入力 //キーの状態を得る I@KEYGET() //I@KEYBTNの引数に調べたいキーをいれ、戻り値が1なら押してる状態 //0xC8はカーソルキー↑ IF I@KEYBTN(0xC8)=1 THEN IF Y>0 THEN Y=Y-1 ENDIF ENDIF IF I@KEYBTN(0xCB)=1 THEN IF X>0 THEN X=X-1 ENDIF ENDIF
230 名前:LGP@課題6当たり判定 [04/07/02 03:30 ID:4ZvlEEie] IF I@KEYBTN(0xCD)=1 THEN IF X<(640-32) THEN X=X+1 ENDIF ENDIF IF I@KEYBTN(0xD0)=1 THEN IF Y<(480-32) THEN Y=Y+1 ENDIF ENDIF //敵移動 TY=TY+1; IF TY>(640-32) THEN TY=0 TX=RAND()%(640-32) ENDIF //赤い四角を描く G@GDISETBRUSH( 0 , 1.0 , 0 , 0 ) G@GDIBOXFULL( CH , X, Y, X+32, Y+32 ) //敵を描く G@GDISETBRUSH( 0 , 0 , 1.0 , 0 ) G@GDIBOXFULL( CH , TX, TY, TX+32, TY+32 ) //当たり判定 IF (ABS(X-TX)<32) AND (ABS(Y-TY)<32) THEN END ENDIF G@FLIP() ENDLOOP
231 名前:名前は開発中のものです。 [04/07/04 00:00 ID:UWWF49AF] 保守age
232 名前:HSPが初プログラム@生徒希望 mailto:sage [04/07/04 11:07 ID:3DUC6+Xf] 課題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 gamdev.org/up/img/801.zip 課題2はヨクワカラナイです。ヒントくれませんか?
233 名前:名前は開発中のものです。 mailto:sage [04/07/04 11:13 ID:dw9vgL9Y] >>232 自分以下で2以上の全ての整数の割り算の余りが0にならなければ素数 別の解放にエラトステネスのふるいってのがあるけど別に使わなくていい
234 名前:名前は開発中のものです。 mailto:sage [04/07/04 11:14 ID:dw9vgL9Y] 自分未満の整数の間違い 以下だったら自分も含むからね
235 名前:名前は開発中のものです。 mailto:sage [04/07/04 12:05 ID:WDudAYFD] 自分の1/2で十分じゃね?
236 名前:名前は開発中のものです。 mailto:sage [04/07/04 12:35 ID:yqwpjhZT] (√自分)でよくない?
237 名前:名前は開発中のものです。 mailto:sage [04/07/04 12:38 ID:WDudAYFD] 平方根求めるより楽だし
238 名前:名前は開発中のものです。 mailto:sage [04/07/04 12:55 ID:9GihiSR8] >>236-237 なんで平方根まででいいんだっけ?
239 名前:名前は開発中のものです。 mailto:sage [04/07/04 13:00 ID:WDudAYFD] それ以上のは今までに計算した分と対応してるだけ
240 名前:HSPが初プログラム@生徒希望 mailto:sage [04/07/04 19:58 ID:3DUC6+Xf] えと、素数はどういうものかはわかるんですが、プログラムというかHSPでの算出方法が…
241 名前:x≠先生かつx=生徒 ⇒ x=俺 mailto:sage [04/07/04 20:45 ID:WDudAYFD] ; 素数判定 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=俺 mailto:sage [04/07/04 20:47 ID:WDudAYFD] あ、インデントかけるの忘れとった。。。 ; 素数判定 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 ID:K58VA1M5] 以前のバージョン 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 ID:o/9mlWPU] >>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 名前:名前は開発中のものです。 mailto:sage [04/07/05 07:17 ID:LZQQVRIy] Delphiで素数 gamdev.org/up/img/805.zip
246 名前:名前は開発中のものです。 mailto:sage [04/07/05 13:04 ID:LZQQVRIy] 最速の素数判定アルゴリズム pc.2ch.net/tech/kako/993/993457354.html
247 名前:名前は開発中のものです。 mailto:sage [04/07/05 20:13 ID:axn64mRQ] すごいスレの流れと違うような気がしますが、 Cで、ウインドウ表示とか(課題3)、できないんですが・・・どうしたらいいんでしょうか?
248 名前:名前は開発中のものです。 mailto:sage [04/07/05 20:40 ID:q8IB8pY7] できないだけ書かれてもどうしようもない。
249 名前:名前は開発中のものです。 mailto:sage [04/07/05 20:57 ID:0DOOfkU1] >>247 猫でもわかるプログラミング ttp://www.kumei.ne.jp/c_lang/ このへんでまず勉強してこよう
250 名前:名前は開発中のものです。 mailto:sage [04/07/05 22:48 ID:LZQQVRIy] >>247 WinMainからはじまって CreateWindowでウィンドウの設定して ShowWindowで表示するだけだ
251 名前:HSPが初プログラム@生徒希望 mailto:sage [04/07/05 22:51 ID:ZZjGGIiZ] 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=俺 mailto:sage [04/07/05 23:00 ID:pTJ3lo22] エラーを読も・・・・・Σ(;゚Д゚)HSPがエラー吐いてない! noteadd "*" m ~|~ 要らない。ここでエラーが出てる。 noteadd "n" ~|~ エラーの原因ではないが、""+nの誤り。 あと、objprm 0, mをstopの前に入れて出力させてあげよう。
253 名前:HSPが初プログラム@生徒希望 mailto:sage [04/07/05 23:07 ID:ZZjGGIiZ] >>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=俺 mailto:sage [04/07/05 23:24 ID:pTJ3lo22] たしか7919のはずだけど・・・ 暇だしPerlとJava版の素数判定作ってみようかな。。。
255 名前:名前は開発中のものです。 mailto:sage [04/07/05 23:25 ID:MIzlaErt] >>253 間違ってるよ・・・ 121とかあるし・・・11からの素数の合成数が出まくりやね。
256 名前:名前は開発中のものです。 mailto:sage [04/07/06 00:11 ID:hNVuoewj] >>247 それは簡単だって!どっかのサイトに張ってあるやつをそのままコピペで完成だぁよぉ!
257 名前:名前は開発中のものです。 mailto:sage [04/07/06 01:48 ID:IHRV3HSb] 素数スレになってるのだが・・・
258 名前:名前は開発中のものです。 [04/07/06 02:29 ID:pkSoPn0/] Delphi エラトステネスの篩 gamdev.org/up/img/810.zip
259 名前:x≠先生かつx=生徒 ⇒ x=俺 mailto:sage [04/07/06 07:38 ID:BOq5Vq10] #!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 名前:名前は開発中のものです。 mailto:sage [04/07/06 12:03 ID:IHRV3HSb] >>259 Perlは見かけ上インタプリタだけど、 処理はコンパイル後実行だと聞いたことがある。
261 名前:名前は開発中のものです。 [04/07/06 16:54 ID:pkSoPn0/] 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=俺 mailto:sage [04/07/06 17:32 ID:BOq5Vq10] 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 ID:pkSoPn0/] //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 ID:pkSoPn0/] #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 mailto:sage [04/07/06 19:10 ID:B1nIIlBn] 素数スレに変化していたらしい
266 名前:名前は開発中のものです。 mailto:sage [04/07/06 19:57 ID:2QvbUldx] いろんな言語で素数プログラムつくるとゲーム作れるようになるですか
267 名前:4 ◆3VUXqvbfSY [04/07/06 20:22 ID:sRW7wZ6D] >>266 なるわけありませんw だだし、解らない方をホっといて課題を進める訳には… うーん… じゃあ、課題外伝でも出しますか… 余力が有ればどうぞ。 弾道シミュレーション:とは言え、何も波動方程式を使えとはいわない。 真空空間で結構。 画面を横を640kmと仮定し、初速、角度を入力させ、弾の軌道を描いてくれ。 ちなみに、初速は29000m/s以下で 重力加速度は10m/(s^2)でお願いします。
268 名前:x≠先生かつx=生徒 ⇒ x=俺 mailto:sage [04/07/06 20:28 ID:BOq5Vq10] (;゚Д゚)ノ先生!…まだ高1なので習ってません
269 名前:名前は開発中のものです。 mailto:sage [04/07/06 21:30 ID:Oq4N2t0v] >>268 高一だけどもう習ったよ
270 名前:名前は開発中のものです。 mailto:sage [04/07/06 21:32 ID:tJWPmmxn] とりあえず初速度を三角関数でxとyに分解した後、 重力加速度をyに対して適用していきましょう。 しかし初速29000m/sだと、軽々地球を離脱して重力圏外に吹っ飛んでいきそうです。
271 名前:名前は開発中のものです。 mailto:sage [04/07/06 21:37 ID:jam3e6md] 地球の半径は6370kmぐらいでいいですか?
272 名前:HSPが初プログラム@生徒希望 mailto:sage [04/07/06 22:03 ID:GhTVD8Z+] >>242 > if n{ このnって何の意味があるんですか? それから>>241 にある「>>」の使い方がわかりません…
273 名前:HSPが初プログラム@生徒希望 mailto:sage [04/07/06 22:06 ID:GhTVD8Z+] 連レス済みません HSPでの平方根の出すのと、その整数か否かの判断てできますか? できれば、教えてください。 質問ばっかで済みません
274 名前:x≠先生かつx=生徒 ⇒ x=俺 mailto:sage [04/07/06 23:17 ID:BOq5Vq10] >>269 ガ━━(゚Д゚;)━━━ン!! 物理じゃなくて化学だし・・・ >>270 何をすればいいのか全くわからそ( ´・ω・`) >>271 ループを抜けるときにn = 0にされていたら(割り切れたときにn = 0にして抜けている)無視、 されていない(素数)のとき、いろいろしてる。 >>はビットシフト。2進数が関わってきます。 で、結果的には x >> nは、xを2のn乗で割るのと同じ。 x << nは、xに2のn乗をかけるのと同じ。 だから、n>>1 はn/2と同じ。 平方根も求められるには求められるけど、自分で求めるアルゴリズムは用意しないといけない。 その整数か否かとは・・・?
275 名前:名前は開発中のものです。 mailto:sage [04/07/06 23:53 ID:pkSoPn0/] //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 ID:FL+3iUiB] これであってるのかな よくわからんので実行しても合ってるのか確認しようがない(´・ω・`) ググった式をそのまま当てはめてみました 弾道シミュレーション gamdev.org/up/img/814.zip
277 名前:HSPが初プログラム@生徒希望 mailto:sage [04/07/07 21:29 ID:dX/NBYiw] >>274 返答有難う御座います。 学校で考えてたら、平方根だけじゃダメだとわかったんで、 >>233 にあった2以上〜自分未満ってのをやってみようと思います。 因みに整数か否かとは、平方根出したときのことです。 例えば√2は1.414…ですよね?だから整数じゃないですし、√4なら2ですから整数で、 整数じゃなかったら素数に入れよう!とか思ってたんですが、 11*13(適当に思いついた)だとダメなんですよね…
278 名前:名前は開発中のものです。 mailto:sage [04/07/07 21:32 ID:W6JVsWwD] ゲームに必要なのは実現できるか否かだ ちょっぱやな素数判定できることに課題としての価値はないよ ガンガレ
279 名前:x≠先生かつx=生徒 ⇒ x=俺 mailto:sage [04/07/07 22:18 ID:lBWiEqny] √27 = 5.1961... 27 = 3 * 9
280 名前:C / HSPの生徒 orz mailto:sage [04/07/07 23:08 ID:B0lUGdqJ] >>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=俺 mailto:sage [04/07/07 23:51 ID:lBWiEqny] >>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 mailto:sage [04/07/08 14:31 ID:oFd7+xVG] >>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 mailto:sage [04/07/08 14:31 ID:oFd7+xVG] *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=俺 mailto:sage [04/07/08 17:42 ID:gJH4XEvh] おっと、emcosがemsinになってたか・・・
285 名前:名前は開発中のものです。 mailto:sage [04/07/08 17:45 ID:f5vo4Z1w] なんていうかさ。素数よりも、もっと普通にゲームでよく使うようなやつを やったほうがいいんじゃないかな? ボールが跳ねるのをシミュレート、とかなら ジャンプするゲームでは確実に使うだろうし。
286 名前:4 ◆3VUXqvbfSY [04/07/08 19:00 ID:xmAVGw0W] なんか…確かに素数ばっかりに見えますが…違うんですよ。 素数で詰まってる人が多いってだけで… あとですね…ボールが跳ね返るシミュレーション、ジャンプに使いますかねぇ? マリオが勝手に地面で跳ね返ったら、俺は切れますがw …ああ、何時になったらインベーダーが…本来なら、そろそろ、赤い四角に弾でも撃って貰おうと思ってたんですが… わかりました。二つ出します メイン課題 前の、赤い四角に弾を撃って貰います。さらに前課題の降ってくる物体と相殺させて下さい。 弾丸は横2ドット、縦16ドットで黄緑色 動きは Y座標(初期値は赤い四角のY座標+16)その後Y--; X座標(初期値は赤い四角のX座標÷2)その後固定; 当たった時点もしくは、画面外にでたら再発射が可能となる。 基本一発。ただし、複数発実装できるならしても良い。 課題外伝 ボールの跳ね返りシミュ ボールを(0,0)から水平投射する。(速度は自由) 床の反発係数は0.8 壁は1.0 重力加速度は10m/s^2
287 名前:名前は開発中のものです。 mailto:sage [04/07/08 20:05 ID:kembbGf8] トランポリンでも使うつもりなんですかね ジャンプで跳ね返りって… そいやマリオには敵ふんだときちょっと浮くけどあれなのかな・・・
288 名前:名前は開発中のものです。 mailto:sage [04/07/08 21:00 ID:gJH4XEvh] 名古屋撃ちのために、実装しない方向で行こう。。。 >>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