[過去ログ] 【初心者】課題をクリアしていくスレ【講習会】 (787レス)
1-

このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
181
(1): 名前は開発中のものです。 [sage] 04/06/27 22:58 ID:qWAk5Epz(2/2) AAS
>>177
177(1): 生徒BLUE [] 04/06/27 22:04 ID:b0jvqBNF(1) AAS
あまりソースを貼り付けるのは荒らしっぽい?のでうぷろだにしました
今はまだ170行ですがインベーダーなら500〜1000ぐらいにたぶんなるので
そろそろ切り替えようと思っていたところです

キー入力はGetAsyncKeyStateを使いました
0x8000の意味とかまだよくわかりませんけれど
if ((GetAsyncKeyState( VK_UP ) & 0x8000) == 0x8000)
{
y--;
}

チラチキ対策でダブルバッファを使った描画をしています
参考にしたソースをほぼそのままコピペしていますが内容は理解しています
このあたりは以前、やったことがあるのでまだまだ大丈夫

課題5キー入力
外部リンク[zip]:gamdev.org
> 0x8000の意味とかまだよくわかりませんけれど
「ANDでマスクとる」とかはわかる?

定数書いちゃダメとか、staticって書くようにするとか、
拡張子がcppなのにC言語風じゃん!とか、
バックバッファあたりは毎回生成&破棄しなくても最初に一度だけ
作成してしまった方が処理の無駄がないとか、ブラシとペンも。
182: x≠先生かつx=生徒 ⇒ x=俺 [sage] 04/06/27 23:05 ID:v+n6K1pQ(2/3) AAS
>>180
180(1): 名前は開発中のものです。 [sage] 04/06/27 22:48 ID:qWAk5Epz(1/2) AAS
ほらほら、先生が仕切らないから、落ちこぼれがでちゃったぞ。
一人は突っ走ってるし。
とりあえず突っ走ってるって俺じゃないよな?

>>134
134(16): 名前は開発中のものです。 [] 04/06/24 00:34 ID:9IgBi+UW(1) AAS
>>130 ありがとうございます。C言語でも出来ますけど、あまり自信が無いんです…。

VBでキャラの移動と弾の発射だけやってみました。
←→キーで左右移動、Z or Spaceキーで弾の発射です。
外部リンク[lzh]:gamdev.org
CPU使用率が70%〜80%まで行ったんだけど・・・。
183: x≠先生かつx=生徒 ⇒ x=俺 [sage] 04/06/27 23:07 ID:v+n6K1pQ(3/3) AAS
( ゚д゚)ハッ!もしや、落ちこぼれが俺か!
184
(1): 副担任 [sage] 04/06/27 23:48 ID:sIosK61q(2/2) AAS
先生が帰ってくるまで漏れが面倒みましょうか?
185: ぷち [] 04/06/28 00:10 ID:W5zBmX8i(1) AAS

186: 名前は開発中のものです。 [sage] 04/06/28 03:20 ID:vjeNxAuN(1) AAS
落ちこぼし師
187: 名前は開発中のものです。 [sage] 04/06/28 04:46 ID:AKJFcicb(1) AAS
>>184
お願いします。
ソース貼っても、アドバイス求めても生徒ばっかりでレスなくて(´・ω・`)ショボーンです。
188
(1): 生徒A [] 04/06/28 06:10 ID:D8BhR1kS(1/3) AAS
なんとか徹夜して6時間ほど粘ってキー入力まで行ったけど、限界が近い…

WM_TIMERで画面の更新を行っているんですが、なんかすごくちらつくんですよ
あと、DeleteObject(hBr)というのを使うと、何故か画面が白くなるんです…
なので、使ってません。

外部リンク[lzh]:gamdev.org
189: 4 ◆3VUXqvbfSY [] 04/06/28 06:20 ID:kLFrYp0l(1/2) AAS
すみません皆様…
ミニ死の行進してました…

アプロダについて:
あっても、別に構いませんが、必要無いようにします。
具体的には、トップダウンで(例えばCなら)
メインを作る。

個々に使われた関数を作る
みたいに、ソースを(出来るだけ解りやすく)分割して、表示しようと企んでいます。

進行度:
自分で出来る方がドンドン進まれるのは、むしろ、喜ばしいです。ただし、課題はあくまで初心者ラインにしておきます。
だから、焦らなくて大丈夫。今の課題は、「キーで、赤い四角を動かす」です。

先生:
や、やっと一人…m(_ _)mヨロシクオネガイシマス

次の課題:
当たり判定。
先ほどの、「動く赤い四角」を避けゲーに改造しましょう
敵は 敵x = rand() % 640;//rand()*640/RAND_MAX
で…敵y++;のように動く単純な敵です。
当たったら終了と言う仕様で…
190
(1): 副担任 [sage] 04/06/28 10:23 ID:HdfIcXTc(1/3) AAS
漏れは先生と考え方が違うので一応書いておきます。うざかったらクビにしてください。>先生
・動けば正義(いい設計はできたほうがいいけどまだ求める段階ではないと思う)
・ソースは固めてどこかにアップする(バックアップ、成果としてわかりやすい)
・バイナリは付けて欲しい(開発環境を全てそろえるのは難しい)
・課題によけいなものは付けないでください(初心者が提出したソースを参考にしたとき、必要な機能のみが実装されていたほうがいい)

あくまで初心者のためのライブラリとしてとらえています。
「絵を描くにはこうする」「動かすにはこうする」「…」「…」のサンプルコードの固まりにしたいです。

課題の方針には賛成なので従います。

というわけで分からんことがある人は漏れが面倒みます。勉強しながら…。orz
191: 副担任 [sage] 04/06/28 10:26 ID:HdfIcXTc(2/3) AAS
訂正すまそ。
× ・課題によけいなものは付けないでください(初心者が提出したソースを参考にしたとき、必要な機能のみが実装されていたほうがいい)
○ ・提出したソースにはよけいな機能は付けないでください(初心者が提出したソースを参考にしたとき、必要な機能のみが実装されていたほうがいい)
192
(1): 名前は開発中のものです。 [sage] 04/06/28 10:28 ID:Ten9Dr/x(1/2) AAS
>>188
簡単だが添削。ウィンドウプロシージャだけ。

DeleteObjectの2行はWM_PAINT内でやってはダメ。
WM_PAINTは何度も呼ばれるため、最初の描画が終了した時点で、作ったペンやブラシは
無効になるため、色がつかなくなる。DeleteObjectするならWM_DESTROY内で。
ちなみにCreateしたものはちゃんと削除するのがお約束。

SelectObjectしたものに関しても、元に戻しておくのが一応の作法。
holdobj = SelectObject(hdc, hobj);// 以前のオブジェクトハンドルを保存
// 何か処理
holdobj = SelectObject(hdc, holdobj);// 以前のオブジェクトに戻す

何故か赤く塗りつぶされないというのは、ディスプレイDCに複数回描画を行っていて、それが
ちらつきとして現れるから。こういう場合はオフスクリーンに描画し、最後にディスプレイDCに
BitBltする。
193: 名前は開発中のものです。 [sage] 04/06/28 10:30 ID:Ten9Dr/x(2/2) AAS
ちと訂正・・orz

×holdobj = SelectObject(hdc, holdobj);// 以前のオブジェクトに戻す
○SelectObject(hdc, holdobj);// 以前のオブジェクトに戻す
194
(2): 63 ◆xdaKt6k1XI [sage] 04/06/28 15:51 ID:W33tIq0j(1/2) AAS
>>190
変な質問ですいません
バイナリってなんですか?
195
(2): 生徒A [] 04/06/28 16:36 ID:D8BhR1kS(2/3) AAS
>>194 190じゃないですが、もともとは2進数という意味だと思います。
だから、この場合は、1と0の組み合わせで作られた機械語データ
(実行ファイル)の意味だと思います。
他にも、テキストデータ以外のファイル全てを指す事もあります。
196: 生徒A [] 04/06/28 16:40 ID:D8BhR1kS(3/3) AAS
>>192 ありがとうございます。
DeleteObjectのやり方は分かったのですが、
オフスクリーンのやり方がちょっとよく分からないです。
具体的には、オフスクリーンの作成方法です。
197: 名前は開発中のものです。 [sage] 04/06/28 17:06 ID:cdlT0cfW(1) AAS
CreateCompatibleBitmap
198
(1): 副担任 [sage] 04/06/28 17:37 ID:HdfIcXTc(3/3) AAS
>>194
Windowsの実行ファイルのことです。"〜.exe" ってやつ。
C言語とかはコンパイルして実行ファイルを作らないとプログラムが動きません。
HSPはインタプリタ言語なので実行ファイルは作らなくていいみたいですね。

>>195
正解です
199: Ruby@課題6当たり判定 [] 04/06/28 18:32 ID:1FRiXQWF(1/3) AAS
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
479(1): 名前は開発中のものです。 [sage] 04/10/03 15:50:38 ID:QgrdTrHQ(1) AAS
矩形マップでなら、別のスレになかったっけ?
if (x-enemyX).abs<32 and (y-enemyY).abs<32 then
exit
end
200: Ruby@課題6当たり判定 [] 04/06/28 18:33 ID:1FRiXQWF(2/3) AAS
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当たり判定(実行ファイル付き)
外部リンク[zip]:gamdev.org

【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 [sage] 04/06/28 20:48 ID:W33tIq0j(2/2) AAS
>>195
>>198
ありがとうございました。
202: 生徒BLUE [] 04/06/28 21:18 ID:mIyMN4GH(1) AAS
指摘された所を全部直しました

課題5キー入力再提出
外部リンク[zip]:gamdev.org
203: 4 ◆3VUXqvbfSY [] 04/06/28 21:39 ID:kLFrYp0l(2/2) AAS
参考程度に…
オフスクリーン:
変数宣言 前略

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(3/3) AAS
スクリプト組はあまり時間もかからず有利なので
複数言語同時習得を目指してみます

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数当て(実行ファイル付き)
外部リンク[zip]:gamdev.org
205: 名前は開発中のものです。 [sage] 04/06/29 06:26 ID:Ngmzz0xf(1) AAS
課題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
480(1): 名前は開発中のものです。 [age] 04/10/12 23:54:20 ID:ZkCM0hrO(1) AAS
ageてみる
){eY=-32;enemyElm.style.left=eX=Math.floor(Math.random()*640);}
enemyElm.style.top=eY;
if(Math.abs(x-eX)>32
32(1): 生徒弐顎 [] 04/06/13 20:20 ID:3gckKy9M(3/3) AAS
どこかで見たような課題ですね。
とりあえず言語はC/C++で問題ないですか?
採点のポイントをあらかじめ教えてくれるとやりやすいのですが。
||Math.abs(y-eY)>32)timerID=setTimeout(m,30);}
//--></script></body></html>
1-
あと 582 レスあります
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル

ぬこの手 ぬこTOP 0.026s