トップページ⇒tech
1001コメント487KB

貴様ら!ブロック崩し作るので見てください

■ このスレッドは過去ログ倉庫に格納されています
0001ヒッキー@プログラミングNGNG
VBでWinAPIを使う方法がわかってきたので
作りたくなりました。

Bitbltなど使う予定ですが、細かい技術がないので、
小出しにプログラムしようと思います。
(タマが動くだけとか、キーボードで自機を動かすだけとか)

オナーニスレだけどよろしくね。
0075 NGNG
>>73
あらら、かぶった。ごめん
0076ヒッキー@プログラミングNGNG
>>71
GetTickCountは、Windowsが起動してからの時間をミリ秒単位で
返す関数のようです。引数は無しです。
で、10ms経った時間を計ろうと思ったら、現在時間から前に計った時間を
引いて、10を超えたら…みたいに書いたらいいみたいです。

>>72
はい、なんとかHPにまとめてみたいと思います。
有意義な意見をくださる方がイパーイいらっしゃるので、
僕の為にだけではもったいないです。

>>73
そうですよね。Sinとか毎回計算してたら遅くなりそうですしね。
んで、線分の交差を検索したところ、外積やら知らない単語が
出てきたので、それを調べようとして泥沼状態です…
>その場合-1ではなく -1.0001 のようにするとだんだん…
ほおほお、たしかに(藁 取り入れてみたいです。

>>74
そういうことでしたか。ようやく納得できました。
ありがとうございます!
0077デフォルトの名無しさんNGNG
線分の交差
http://piza2.2ch.net/tech/kako/996/996157997.html
0078デフォルトの名無しさんNGNG
普通のブロック崩しって、
バーの端っこにぶつかったら急角度で跳ね返る、
要するに物理法則を無視した動きをするけどその辺はどのように解決する?

その辺をどうにかしないと、
バーやブロックや壁の垂直面・水平面が全て水平だったらボールの動く角度は
常に一定になるけど……。
0079デフォルトの名無しさんNGNG
スライスで軌道が変わったりすると面白そう。
アナログなコントローラでないと無理だけど。
008040NGNG
ボールの運動量とバーの摩擦係数から、反射後のx成分を求めるの?
俺としては、物理学的なものは無視して、まずは形にすることをお勧めする。
0081デフォルトの名無しさんNGNG
そこらへんは作って楽しい所だから好きにやればいいんじゃないの?
 単純に端に8ピクセルより近ければ 端からの距離を Dとして
 VY:=-VT : VX=VX*D/8 とかでもそれなり
0082デフォルトの名無しさんNGNG
>>81
それじゃボールのスピードが変わっちゃうYO!
0083デフォルトの名無しさんNGNG
キー入力はAPIを使うこと(GetAsyncKeyState)
リアルタイムゲームでキー押下イベントを使うVBアプリは糞と呼ばれます

描画はバックバッファを使うこと
非表示のPictureコントロール(AutoRedraw=True)に全部描いてから
FromにPictureコントロールの内容をコピーしよう
0084デフォルトの名無しさんNGNG
s/From/Form/
0085デフォルトの名無しさんNGNG
貴様、ShiftKeyでバーの移動速度を倍くらいにしてください(w
>>83
キーコード
カーソルキー左 37 、カーソルキー上 38、シフトキー 16
だっけ?左右逆かも。
008685NGNG
>>85
右39だ。上は関係ないや。
逝ってくる。
0087デフォルトの名無しさんNGNG
キーコードはキー入力定数を使えば間違いない
vbKeyLeftとかってやつな
0088デフォルトの名無しさんNGNG
ところで1さんはいつプログラミング始めたの?
0089デフォルトの名無しさんNGNG
新しいファイルがアップされてた。
0090ヒッキー@プログラミングNGNG
http://www.geocities.co.jp/SiliconValley/2530/block05.zip
↑次のファイルうぷしました。なんか、めり込みます…
 線で跳ね返る処理をコピペしたら、おかしくなりました。
 タマに、斜め方向に線をいれてます。(X状に)

>>77
リンク先、参考にさせてもらいます。どもです。
>>78
そうですね〜。完成が見えてきたら考えてみます。
>>79
アルカノイドのコンパネみたいなやつあったら嬉しいんですけどね(藁
>>80
うい〜。形を作ることを考えます。
>>81
そうですね〜。まずは好きにやってみます。
>>83
う…今回うぷした分でキー入力は修正しました。さんくす。
>>85
うい。してみました。
>>87
APIでキー入力の処理をしたので、VK_LEFTに変わってしまいました。
>>88
う〜ん、どのくらいでしょう。
趣味でたまにちょくちょくするくらいで、
期間的にはだいぶ長いことやってます…。
最初はファミリーベーシックで挫折(小学生時代)
ポケコンのベーシックにはまる(中学3年〜高校生)
CとVB勉強(高校〜)みたいな。
0091デフォルトの名無しさんNGNG
>90
バグが酷いんだが、なんとかならんか?
激しく酷いぞ。
0092デフォルトの名無しさんNGNG
まだ次期尚早かもしれないけど、マスクパターンを使った
擬似スプライト処理をしたほうがいいね。ボールのフチが見えて萎える。

それからバックバッファを使わないと後々困ると思うよ。
いまのままだと、ボールやバーの移動量をふやすと軌跡がのこっちゃうでしょ。
0093デフォルトの名無しさんNGNG
それから、FormをUnloadしたときに正しく終了してないので
これは今すぐ直しなさい。
Form1_Unloadイベントに一行End書くだけでしょ。
タスクマネージャ見て驚いたよ。
0094ヒッキー@プログラミングNGNG
>>91
すいません、徐々に直していきます。
>>92
うい。了解。
前にフチを消す処理を書いたような覚えが…探してみます。
バックバッファですか。そこに書いてから実際の画面に転送ですよね。
やってみます。
>>93
ごめんなさい…ウチでもタスクマネージャ見たら溜まってたんで
焦りました。05を再アップしました。
今まで試してくださった方、大変申し訳ないです。
0095ヒッキー@プログラミングNGNG
http://www.geocities.co.jp/SiliconValley/2530/block06.zip
↑次うぷしました。
 背景になじませてみました
0096 NGNG
ちょっとおかしい部分あるけど、昨日に比べて格段に出来上がってるじゃん。
覚えるの早いねー。
ブロックの管理あたりで一騒動ありそう・・・。
何か考えてる?
0097デフォルトの名無しさんNGNG
なんかペースが早いな。
消化できてても吸収できてないと後々にひびく。
1が無理してなきゃいいが・・・
0098デフォルトの名無しさんNGNG
こんぐらいで消化不良起こすようじゃ・・・
0099デフォルトの名無しさんNGNG
>98
消化はできてるだろ。
問題は、覚えたかどうかだ。
0100デフォルトの名無しさんNGNG
100ゲット!
0101デフォルトの名無しさんNGNG
名スレ!
このスレをヴァカ学生どものテキストに使いたいくらいじゃよ。
結局GDI描画にしたのねん。
メモリ上に仮想VRAMおったてて、スクリーンにBitBltかけるライブラリとか
なら探せばいくらでもありそう。
でも、プログラム的にはGDIのBitBltと同じような処理になっちまうだがな。
まあ、ともかく1よ、テキトーにがんばってくれや。
燃え尽きんようにな。
0102デフォルトの名無しさんNGNG
あー見ている間に1に技術的に抜かれてしまった(w
0103デフォルトの名無しさんNGNG
>102
そうなの?
0104デフォルトの名無しさんNGNG
このスレはプロゲームプログラマのネタスレと見た。
ソースは全然見てねーけどな。
0105デフォルトの名無しさんNGNG
>>104
いや、その線はないだろう。ソースを見てみれ。
ある程度経験を積んだ奴はどんなに素人らしいコードを
書こうとしても、必ずその「痕跡」がコードに現れてくるものだ。

ただ>>1は、スレの育て方のコツを知っているみたいなので
もしかしたら「プロの2チャンネラー」かもしれん・・・
0106デフォルトの名無しさんNGNG
応援age
010773NGNG
昨日言った事の1はクリアしたが2が出来ていいない
 衝突判定の為にはBallMove()の先頭で
  next_x = ball_x + vx
  next_y = ball_y + vy

 として ball_x/y next_x/y の線分との距離判定を使いなさいと言った筈だ
1、まず、線分と線分の距離を求めるルーチンを作りなさい。
  そして、 枠とラケットへの線分との距離を順に求めなさい
 その距離がボールの大きさより小さければその回に衝突する
0108ヒッキー@プログラミングNGNG
おはようございます。今日もがんばろうと思います。
だんだん難しくなってきたので昨日ほどの進捗は無いかもしれませんが…。

>>96
おー、ありがとうございます。嬉しいです。
ブロックの管理ですか…配列の中に入れようと思いますが、
まだぼんやりとしか思い浮かばないので、ちょっと紙に書いて考えます。
>>97
ちょっと無理目です。でも努力をしないと技術がつかないと思うので
がんばりたいと思います。
>>101
どもです。
スクリーンにBitbltですか。ウインドウから位置を計算してその上に
乗せればいいわけですね。
学校の先生ですか?がんばってください。
先生から受ける影響(ソースの書き方とか)大きいです。
>>105
2chねらー歴は数ヶ月です(藁
何度かスレ立てて、どうやったら面白いか考えてました。
おっしゃる通り、素人でございます。
0109 NGNG
>>107
強制するのはよくないよ。
自分で考えて作るのがプログラムの楽しさだ。
0110デフォルトの名無しさんNGNG
メインループの書き方がどうもね…
いまのままだと処理内容が増えるにつれて
リニアに遅くなるよね
0111デフォルトの名無しさんNGNG
>>110
ゲームってそうゆうもんだよ。
0112デフォルトの名無しさんNGNG
>>19
>動くのしか作れないもので…VESAのライブラリ拾って16bit色
漢発見!
0113デフォルトの名無しさんNGNG
>>111
んなこたーない

1フレームの処理Pにかかる時間をn(msec)とし、
フレーム更新間隔をm(msec)としたら、
本来1フレームはPを処理したあとに(m-n)msecを
sleepすべきである。(これを画面走査線の動作に
あわせるのが、vsyncである)
したがって、n<=mである限り1フレームの更新間隔は
nによらず一定で、その値はmである。
0114デフォルトの名無しさんNGNG
一方、このブロック崩しは
1フレームの更新間隔m=(10+n)msecとなることは自明。
プログラムの組み方によるが、たとえばブロック1つにつき
処理時間lを要するとすれば、ブロック数kに対しn=a+l*kである
つまり、m=(a'+l*k)となり、変数kによってmが線形的に変化する
こととなる。

これは、「ブロックが大量にあるスタート時とブロック残り数が
少ない最後のほうでフレーム更新間隔が異なる」ことを意味する。
フレーム更新間隔の変化は、パドルの動作、ボールや演出の動作にも
影響を与え、ゲームとしての品質を低下させる。
0115ヒッキー@プログラミングNGNG
http://www.geocities.co.jp/SiliconValley/2530/block07.zip
sleepの処理を改善してみました。>>113氏に感謝。

>>107
線分と線分の距離を求めるアルゴリズムを検索してみます。
ちょっと考えがついていってないので、しばしお待ちを…
>>110 - >>113 - >>114
ご指摘ありがとうございます。
たぶん、おっしゃる通りに改善できたと思います。
0116デフォルトの名無しさんNGNG
>>114
ブロックとの衝突判定をどうするのかまだ決まっていない状態で
議論しても始まらんだろ。

とりあえずぱっと思い付いた(つーか、ありがちな)方法だが、
普通ブロックって奴を画面に配置する時は縦横きれいに整列されているので、
その構造を利用するだけでも

     線1本との交差判定にかかる処理時間
     縦方向に配置するブロックの最大数を r
     横方向に配置するブロックの最大数を c

とした場合、その衝突判定にかかる処理時間は(生存しているブロックの
数に関わらず)

     l * r * c

で済むんではないの?
(ついでに線との衝突判定を律義に1本ずつ計算せずに
「どの線とぶつかる可能性があるか」を計算で拾い出せば
もっと速いけどな)
0117116NGNG
あ、悪りぃ。細かい事だけど、
>線1本との交差判定にかかる処理時間
を
>線1本との交差判定にかかる処理時間を l
に読み替えてくれ。
0118ヒッキー@プログラミングNGNG
やっぱ07おかしいかも…いったん削除。
0119ヒッキー@プログラミングNGNG
再アップしました。
0120デフォルトの名無しさんNGNG
1はホントにヒッキーなの?
0121デフォルトの名無しさんNGNG
>>116
別に今回のブロック崩しでどういう処理をするかは論じてない
あくまでゲームループ一般の話題であり、ブロック衝突に
かかる計算量は、あくまで一例としたまでで
気に食わないなら「ボールが複数に分裂した場合」でも
「敵が複数出現する場合」でもかまわない

それよりあれだけの情報で新しいリリースではちゃんと修正している
>>1はかなり理解力が高いと思う
ソース見たけど、いわゆる「処理落ち」まできちんと考慮してるみたいだ
初心者は初心者なんだろうけど、頭はかなりよさそうだね
0122デフォルトの名無しさんNGNG
なんでこのスレsage進行してるの?ageてもいいんじゃ・・・
0123デフォルトの名無しさんNGNG
まだ、ボールがパドルにめり込んでスタックするというバグが残ってるよね
反射の処理が冗長な割に正確じゃないのよね。思い切って書き直したほうがいいと思う

if パドルの上端(上半分)に接触 then vy=-abs(vy)
if パドルの下端(下半分)に接触 then vy=abs(vy)

ってなふうにad hocに書いたほうが妙なバグに悩まされずに済むよ
0124速報NGNG
1頑張れ。完成したぞ。

http://game.2ch.net/gamedev/
0125デフォルトの名無しさんNGNG
>>124
おお、待ち望んでいたものが。ワショーイ
0126デフォルトの名無しさんNGNG
ブロポンみたいにしようよ・・
0127 NGNG
>>124
ってことは、これは板違いにつき終了ってことね。
0128デフォルトの名無しさんNGNG
>127
まだインフラ整備されてないようだから、それまではいいんじゃない?
0129デフォルトの名無しさんNGNG
とりあえずこのスレは使い切って欲しい
0130デフォルトの名無しさんNGNG
移転するならアドレスかいてくれYO!
0131ヒッキー@プログラミングNGNG
http://www.geocities.co.jp/SiliconValley/2530/block08.zip
↑次あぷしました。
 1.タマがめり込む現象の改善
 2.線分の交差で跳ね返っていたのを消して、もっと単純に

>>123
思い切って書き直しました。
めり込みがなくなったかと思います。
>>124
昨日、記念カキコしてきました(藁
これが終ったら、向こうに逝きたいと思います。
>>127
あああああああああああああああああああああ、ちょっと待って(w

久々age
0132デフォルトの名無しさんNGNG
珍しく良スレだな。
こういうのがゲ術板でも出てくるといいのだが。
0133デフォルトの名無しさんNGNG
http://www.tkcity.net/~lucify/top/pikumin.jpg
0134 NGNG
ゲ術板、PCのカテゴリに移動したね。
厨房減ればいいけど。
0135ヒッキー@プログラミングNGNG
http://www.geocities.co.jp/SiliconValley/2530/block09.zip
↑次あぷしました。
 ブロックとぶつかるようにしました。

>>120
本当にヒッキーです。かれこれ数ヶ月になります。
>>133
ワラタ
>>134
おぉ、ほんとだ。良い板になるといいですね。
0136デフォルトの名無しさんNGNG
>1
もっとスピード早くして。
0137ヒッキー@プログラミングNGNG
http://www.geocities.co.jp/SiliconValley/2530/block10.zip
早くしてみました。
0138デフォルトの名無しさんNGNG
>>1
いまんとこ定数ごっちゃになってないけど、
大丈夫か?きちんと見た目わかりやすく定義した方がよくないか?

そんなこという俺もいっつも適当だけど、鬱
0139ヒッキー@プログラミングNGNG
http://www.geocities.co.jp/SiliconValley/2530/block11.zip
↑ついにゲームっぽくなりました。

>>138
定数ですか。
AND演算に使ってないので、大丈夫だと思います。
ただ、マジックナンバーをなくそうかと。
定義、見やすくしてみたいと思います。
0140デフォルトの名無しさんNGNG
ついでに変数もint〜〜などと書いてほしい

などと言ってみるテスト。
0141デフォルトの名無しさんNGNG
>>139
210点でクリアー.
1はいい調子だね.
0142デフォルトの名無しさんNGNG
>>139
いいね、いいね。シンプルだけど遊べるよ。
ただ、「この角度でボールに当たったら、こうは動かんだろ〜」という
ストレスが多少ありますね〜。
0143デフォルトの名無しさん NGNG
まじで名スレ (・∀・)ガンバレ!
実は、リリース版まで上がってて小出しにしてるのかとか
一瞬疑ってしまったよ
モチベーションって大切だよな、うんうん
0144デフォルトの名無しさんNGNG
ゴルァ>>1!!がんばって下さい。
0145初心者NGNG
漏れはプログラム始めたばかりでAPIサパーリだが、応援させてもらうぞゴラァ
>>1!頑張ってください
01462NGNG
漏れもうれしいぞ。
0147ヒッキー@プログラミングNGNG
http://www.geocities.co.jp/SiliconValley/2530/block12.zip
↑計算してみました。角度とか。
 あと、ステージ2を追加しました。

>>140
間違えそうになりましたよ(藁
>>141
おお、どうもありがとうございます。21個、ブロックがあるので
210点になります。
>>142
たしかにちょっと変ですね…。
自機の横にあたったときは上に行くようにしてます。
>>143
このスレ立てたときに1から作りました。
みなさんのおかげで、なんとかゲームらしくなりました。ありがと〜。
>>144
まだまだがんばります!
>>145
うい〜。APIは僕も最初、ちんぷんかんぷんでした。
ある日、突然目覚めました。
>>146
お〜、どもです。スレ維持する為にがんばります。


昨日、アルゴリズムの本を買ってきました。
もうちょっと勉強します…
0148デフォルトの名無しさんNGNG
なんかいい雰囲気だな。オレもむかし、MSXでブロック崩し作った。
昔のブロック崩しは、ブロックの横からの判定がなくて当たり前で、
衝突判定はかなり単純なものだったなあ。

ボールの角度も、エポック社の取説では、ラケットに当たった位置に
よって、4方向(!)ぐらいだけだったような。
そのレベルはとっくに超えてて、いいぞゴルァ!
0149デフォルトの名無しさんNGNG
1さんの作品が完成したら、プログラミング始めたばかりの人たちによる、
「貴様ら!○○作るので見てください」をシリーズ化キボン。
0150デフォルトの名無しさんNGNG
>>149 ただし「貴様ら!HelloWorld作るので見てください」は却下な。
0151ヒッキー@プログラミングNGNG
http://www.geocities.co.jp/SiliconValley/2530/block13.zip
↑3面追加&グラフィック変更しました。

>>148
おぉ、MSXですか。
当時はプログラムを打つと言えばファミリーベーシックしか知りませんでした。
MSXを知ったのはプレステ出てからです(藁
お褒めいただき、ありがとうございますゴルァ!
>>149
これ終ったら、また新たなスレ立てようと思っております。
みんなでシリーズ化したら面白そうですね。
0152デフォルトの名無しさんNGNG
>>149
それちょっと考えてみた。
しかし、現時点でかなり1に遅れをとっている状態であり、
怖くて立てる勇気がない。
0153141NGNG
>>151
660点でクリア.
1,成長早いね.exeのアイコン変わってるし.

途中で1回玉がブロックの下素通りしたよ.
玉はもうちょっと早くてもきもちいいなぁ.
0154ヒッキー@プログラミングNGNG
あれ、書いたのに書けてなかった…ショック
さっきなんて書いたっけ…

http://www.geocities.co.jp/SiliconValley/2530/block14.zip
↑次あぷしました。
 2周目以降の追加&ブロックから確実に跳ね返るようにしました。

>>152
厳しい意見をもらっても、凹まない精神があれば大丈夫と思います。
一緒にがんばりましょう。
>>153
テストプレイ、さんくすです。
ちょっと玉の加速度を上げました。
0155デフォルトNGNG
ステージのデータをファイルから読み込むようにして欲しいなァ。
効果音とかあると気持ちいいかも。
0156デフォルトの名無しさんNGNG
>>149
でも乱立されるとちょっと。
0157デフォルトの名無しさんNGNG
>>149
ゲ製作技術板でやるべき
0158デフォルトの名無しさんNGNG
>>157
ゲームとは限らないの方向で一つ。
「貴様ら!コンパイラ作るので見て下さい」とか
0159デフォルトの名無しさんNGNG
>>158
「貴様ら!ゲームライブラリ作るので見てください」だったら萎え
0160デフォルトの名無しさんNGNG
「貴様ら!コドモ作るので見て下さい」キボーン
0161ヒッキー@プログラミングNGNG
http://www.geocities.co.jp/SiliconValley/2530/block15.zip
↑音が鳴るようになりました。

>>155
ステージデータ、ファイルから読めるようにしてみたいですねー。
Txtで作れるようにしようかな…。
>>160
それ、見てみたいです。
あ、行為だけならビデオで見てるか…
0162デフォルトの名無しさんNGNG
そこの女!オナニーするので見ていてください
0163デフォルトの名無しさんNGNG
貴様ら!物理法則のシミュレーションを教科書の最初から順にやっていくので見てください!
0164デフォルトの名無しさんNGNG
>>163
真面目に嫌。
0165デフォルトの名無しさんNGNG
なんかコメントとかしっかりしてるけど。
>>1は何か他の言語の経験者?
0166ニセイチNGNG
>>165
COBOLとForthとアセンブラやったことあります。
0167デフォルトの名無しさんNGNG
>>166
で?そのレスのどこで笑え・・・・・と?
0168デフォルトの名無しさんNGNG
>>165
細々とやってたらしいよ。
基礎は身に付けてるみたい。
0169デフォルトの名無しさんNGNG
最初はヘタレてても、ちょっとアドバイスするとそれ以上のものを
作ってくる1は、正直すごい。
さて、ステージデータのファイル形式、どんなのを作ってくるかな?
ステージエディタなんかも作ってみては?
0170デフォルトの名無しさんNGNG
>>168
そうなんだ。誰かコメントつけなさいってアドバイスしたのかと思った。
(すまんスレ全部読んでない)プログラマとしての素養は備えているね。
俺はだめだ。もうやーめたっと。
0171デフォルトの名無しさんNGNG
>>167
うるへーばか('Д´)お前はそこでかわいてゆけ
0172デフォルトNGNG
>>1=>>2だとしたら、かなりのやり手だな。
0173デフォルトの名無しさんNGNG
>>171
「うしおととら」の偽なまはげ編だな。 
0174デフォルトの名無しさんNGNG
>169
えへへ・・・お前・・・優しいなぁ・・・
■ このスレッドは過去ログ倉庫に格納されています