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

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

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

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

オナーニスレだけどよろしくね。
0596デフォルトの名無しさんNGNG
正直、このスレの >>1 にチョト感動した。
ガムバレ
0597デフォルトの名無しさんNGNG
>>595
妙にDelphiびいきだなぁ(笑
漏れは別にSTL依存は全く問題無いと思うけど。むしろSTLを使いこなせたら
ちょっと尊敬しちゃう。漏れはコンテナクラスくらいしか使う気しない。

Direct3D使うようになると、DelphiどころかVC++/IC++以外のコンパイラは
たとえC/C++であっても却下なんだよなぁ。
Borlandもさっさと妥協してオブジェクトファイルのフォーマットをMSに合わ
せれば良いのだが。
0598デフォルトの名無しさんNGNG
>>597
> Direct3D使うようになると、DelphiどころかVC++/IC++以外のコンパイラは
> たとえC/C++であっても却下なんだよなぁ。
なんで? 詳細キボンヌ
0599デフォルトの名無しさんNGNG
Delphiびいきの人って多いよね。
言語というより一つの処理系にすぎないと思うんだけど。
0600デフォルトの名無しさんNGNG
初心者がコンポーネントを再利用しまくりで開発するクセがついたらどうするの?

っていうか、VBにもユーザコントロールって無かった?
0601デフォルトの名無しさんNGNG
確かにDephiの場合は コンポーネント検索病にかかるな
 そこで成長が止まるか コンポ自作側に回るかが分岐点かもな

UserControl はActiveXを手軽に作れるのがメリットで、便利とは
思うけど、あくまでもコントロール。

コンポーネントはコントロールも作れるけど、クラスの一種。
コンポーネントにしたからといってオーバーヘッドはクラス化と同じ
程度。(実行時型情報を動的に使えば多少のオーバヘッドは出るけど)

またコンポーネントを作る事でクラス作成の訓練にもなるのがイイ感じ
0602 NGNG
>>601
それってC++でも一緒じゃないの?
参考書片手に勉強すればいい話かと。
結局本人次第としか言いようがない・・・。
0603デフォルトの名無しさんNGNG
C++ってそんなに敷居が高いかな。
0604デフォルトの名無しさんNGNG
C++は簡単だよね。
問題はまあ クラス設計とかが難しいって話かもしれないけど
趣味で作るなら 何回か作れば最適なのが見つかるし。
0605デフォルトの名無しさんNGNG
ガイシュツ?
>>1 =ヒッキー@プログラミング
例のブロック崩しですが(この話題ってもうおわったの?)、
ブロックをすべて崩した後に、ボールをキャッチせず、残りのボールを0にすると
「ゲームクリア」となるのはいいのですか?
しかもその後面が変わって即「ゲームオーバー」となってしまう。
ださい と思うんやけど。
ソース見てくるわ
# VBは経験ないので、直感で読みます(藁

# C言語を勉強中http://www.kumei.ne.jp/c_lang/で。
# ポインタってのがよく分からないのが、つらい。
0606ヒッキー@プログラミングNGNG
>>589
的を射たご意見、ありがとうございます。
ちょっとやる気がでました。

>>590
そういえばN88Basic互換のフリーソフトがVectorにありましたね。
サンプルがう○この描画でしたが(藁

>>592
ハイスコア、ネット上で集計するにあたって、何が必要でしょう?
アプリケーション上から自動で処理するには、CGIにPOSTメッセージ
を送ればいいんでしょうか。

>>593
Modって、音楽のModですか?

>>595
Delphiってインラインアセンブラ使えるんですか?
おー、結構すごそうですねー。
KylixってDelphiと互換の開発環境だったんですねー。
参考になります。

>>596
ありがとうございます。ガムバリます。

>>597
STLとは何でしょう?検索してみます。
やっぱWindowsで開発する以上、MSのツール使った方がいいのかなぁ…。

>>600
なんか、OCXというのを作る機能がありましたね。
一回、Web上に張りましたが、ウイルスぽい警告を出されるので
萎えました(藁

>>601
Delphiって、実行ファイルにコンポーネントを埋め込めるんでしょうか。
…としたら、探しまくるようになりそうですね。
僕は人が作ったクラスは内部で何をやってるのか見えないので、
あまり好きではないです。手軽に作りたい方が先行してたら
既にあるものを使わせて頂いた方が楽ですが。

>>602
うーん、いろいろ考え方がありますねー。
やっぱプログラムを勉強する人次第なんでしょうか。

>>603
なんか、開発環境デフォルトでついてる、謎のクラスやらを
覚えるのが大変で、どこに手を付けていいやら分からなくなります。

>>604
クラス、一回作ってみようと思います。
VBで作ってもダメかな…。

>>605
ご指摘ありがとうございます。直してみました。
遊んでくださる人がいる以上、不都合は直そうと思いますが、
1個直す度にUPしてたら、ファイルだらけになるのではないかと
思い、ちょっと戸惑ってました。
0607ヒッキー@プログラミングNGNG
http://www.geocities.co.jp/SiliconValley/2530/
↑次UPしました。変更点は、

・ブロック全て破壊後にボールを落としても、StageClearとなる現象の修正

です。
0608597NGNG
>>598
MicrosoftとBorlandではオブジェクトファイルに互換性が無いんだけど、
(昔はあったらしいがMSが仕様変更したときにBorlandがついてこなかったとか)
dllならimplib使ってBorland用のlibを作れるからDirectXでもあまり問題
無いんだけど、Direct3Dは重要なライブラリがスタティックライブラリで
提供されてて、それはdllじゃないからBorlandのコンパイラでは利用不可能。

DirectX7の頃はそれほど重要でもなかったんだけど、X8になったらシェーダー
のコンパイル関数とかがスタティックライブラリの方に入ってて死亡。
一応、NVIDIAのNVASM使ってコンパイルできなくも無いけど、試行錯誤するのに
毎回コンパイルしなきゃいけないのは面倒かと。

事実上、DirectX8でBorlandコンパイラには死刑宣告されたようなもんだ。
0609デフォルトの名無しさんNGNG
つーかCOM使ってるくせに他言語/他コンパイラから利用できないDirectXの方がオカシイ。
MSの単なる嫌がらせか?
0610デフォルトの名無しさんNGNG
あと、VBやDelphiの得意とする領域とDirectXの分野は明らかに違う。
その点でDirectXが使えない=死刑宣告というのは偏狭。
0611デフォルトの名無しさんNGNG
>>608 それは coff2omf  でも変換出来ないの?
0612デフォルトの名無しさんNGNG
>>609
だからぁ、Direct3DはCOM使ってない部分があるんだって。
COMにしないのは何故だか分からんが。速度的な問題かも。かなりの部分がインライン
関数になってるくらいだし。

>>610
597に「Direct3D使うようになると」って但し書きしてるから、そこも見てから言っ
てくれ。

>>611
coff2omfでも駄目みたい。
ただ、検索したらボーランド用のライブラリを公開してる人がいたよ。
どんなのか見たら、Direct3DXの関数を全部エクスポートしたdll作って、
それを利用するみたい。
俺もソースの無いdllとかを改良するときに同じ事してるけど、これなら
呼び出しコストが少し増えるだけで利用できるわな。
0613598NGNG
じゃあ「VC++/IC++以外の」というよりも「Borlandの」コンパイラは全滅なわけね。
gcc(mingw)とかlcc-winとかはどうなのかな。
0614デフォルトの名無しさんNGNG
オブジェクトがCOFFのものなら問題ないと思われ
0615傍観者NGNG
ねぇ、そのへんの議論は他でやらない??
ここは1の成長を見守るスレなんだから。
0616デフォルトの名無しさんNGNG
>>615
やるとしたら、このあたりか?

鬱だ氏のう DirectX 2
http://pc.2ch.net/test/read.cgi/tech/997101556/
0617デフォルトの名無しさんNGNG
それもそうだ、1の成長を見守り、やさしく教えてあげませう。
0618デフォルトの名無しさんNGNG
1さんのソースを見て勉強させていただいています。
block29.zip の ManageBall.bas について質問なんですが、
286行目から…

---------------------------------------
'キーボードの時の角度の補正
If CBall.vx > 0 Then
 If Press.Shift Or Press.Ctrl Then
  If Press.Right And CBall.Angle >= 25 Then CBall.Angle = CBall.Angle - 10
  If Press.Left And CBall.Angle <= 65 Then CBall.Angle = CBall.Angle + 10
 Else
  If Press.Right And CBall.Angle >= 20 Then CBall.Angle = CBall.Angle - 5
  If Press.Left And CBall.Angle <= 70 Then CBall.Angle = CBall.Angle + 5
 End If
Else
 If Press.Shift Or Press.Ctrl Then
  If Press.Right And CBall.Angle <= 65 Then CBall.Angle = CBall.Angle + 10
  If Press.Left And CBall.Angle >= 25 Then CBall.Angle = CBall.Angle - 10
 Else
  If Press.Right And CBall.Angle <= 70 Then CBall.Angle = CBall.Angle + 5
  If Press.Left And CBall.Angle >= 20 Then CBall.Angle = CBall.Angle - 5
 End If
End If
---------------------------------------

「CBall.vx > 0」というのは右に向かっている状態ということでしょうか。

[SHIFT]で加速パドルになってて、かつ角度が「25度以上」なら、
パドルの力が加わって右方向に流れる角度(-10)になる
というイメージでいいでしょうか?

その次が、同じく加速パドルで「65度以下」なら、パドルによって
左方向の力が加わり、角度が垂直方向より(+10)になる
ということですか?

「25」「20」「65」「70」という角度にはなにか意味があるのでしょうか?
もしよろしければ教えてください。
0619ヒッキー@プログラミングNGNG
>>608
スタティックライブラリって、コンパイラが変わると
使えなくなるんでしょうか?

>>615
実はこういう話題も、僕にはまだちょっと難しいですが
興味があるので、調べながら読ませてもらっています(藁

>>616-617
どもども。お気遣い、ありがとうございます。

>>618
>「CBall.vx > 0」というのは右に向かっている状態…
はい、右に進む場合は座標がだんだん正の方に増えていくので、
そのように書きました。
>「25」「20」「65」「70」という角度にはなにか意味が…
あまり意味はないのですが(w 、ただ、15度以下になったり、
75度以上にならないようにしようかと思いまして。
急角度になりすぎると、角度を修正する事ばかりにとらわれて、
ゲーム性が違うほうに向かってしまうんではないか、
と感じたので、そのようにしました。
0620ヒッキー@プログラミングNGNG
http://www.geocities.co.jp/SiliconValley/2530/
↑次UPしました。変更点は

・マウスモードでボールを複数出すと自機が重くなる現象の修正

です。
ソース、1行の修正で済みました…。
もうちょっと注意深く調べるようにします。
0621618NGNG
>>619
なるほど、勉強になります。
ありがとうございました。
0622598NGNG
>>619
> スタティックライブラリって、コンパイラが変わると
> 使えなくなるんでしょうか?

コンパイラというか、コンパイルしてできるオブジェクトファイルの形式ね。
大体はシステムで共通なんだけど、Borlandだけ他と違ってるということかな。
なんでスタティックライブラリだけかというと、DLLの場合はシステムでロー
ドできる必要があるから、独自のものにはできないので問題が起きないから。
0623傍観者NGNG
>>620
おつかれ〜〜、早速見てみます。

>>616-617
サンクスコ。
やっぱいい奴の周りにはいい奴が集まるって事だねヽ(´ー`)ノ
他スレなら『しきるな(゚Д゚)ゴルァ!!』だし。
0624デフォルトの名無しさんNGNG
マウスモードのチェックをはずしてキーボード操作に戻る時や
マウスモードの時に最小化ボタンをクリックしたりデスクトップのアイコンをクリックすると
ボールが発射されてしまいますね。これは直してほしいところです。

ゲーム画面をクリックすると開始、
ゲーム画面の中だけにマウスの移動範囲を制限するというのはどうでしょうか。
そして一時停止するとマウスの移動制限をなくし、
またゲーム画面をクリックするとマウスの移動範囲を制限し、ゲームを開始する。
このようにすればなんとなく解決する気がします。
ただこれにすると一時停止中でしかマウスモード→キーボードの切り替えができませんが。
あとなんとなく左クリックで開始と一時停止、右クリックでボールを増やすという方が一般的な気がします。恐らく。

とりあえずマウスの移動制限の説明のリンクを。
ttp://www.elixir.co.jp/developer/vb/lib/vb_all.htm
0625デフォルトの名無しさんNGNG
みんないろいろ教えたがってるな。
良い人材を見つけたら自分で育てたくなるのがPGってもんだ(謎

>>1は、もうこのゲームのチューニングは十分ではないだろうか?
ここら辺から先は別の人間が進めても良いと思う。
>>1が作ったソースコードをベースに、有志が独自の改造を施してみては?
そして改造したらジオで公開し、ココに報告する。と。

>>1は次は何を作りたいんだ?
0626デフォルトの名無しさんNGNG
C++かCかDelphiか・・・・
0627ヒッキー@プログラミングNGNG
>>621
いえいえ、こちらこそソースを読んでいただいて
ありがとうございます。

>>622
そういうことでしたか。
DLLは独自のものにできないんですね。
オブジェクトファイルって、exeになる前の中間ファイルのことですか?
(というか、リンクという作業もよくわかりません(w)

>>623
おー、どうもありがとうございます。

>>624
そうですね。画面外をクリックした時に始まるのは変ですね。
マウスの移動範囲を制限するというのは、ゲームを正しく動かす為には
有効なやり方だと思いますが、手軽さが減るのではないかなぁ
と思います。
リンク先、参考にさせていただきます。どもども。

>>625
僕も止め時が難しいなぁと感じてました(w
でも、ソースを放置するにも、説明が少なすぎるし、
何かまとめになるようなモノを書こうかと思っています。
順番的には、次はテトリスを作ろうかと。

>>626
まだいくつかVBで作ってみようと思います。
他の言語に移るのはもうちょっと勉強してからにします。
(次の候補は一応VCにしました。)
0628デフォルトの名無しさんNGNG
テトリスのあとにはぷよぷよというわけですね(藁

テトリスが一応出来たら、ぷよぷよへの応用も結構できる。
ただ、ブロックの消える判定が違うが。
0629デフォルトの名無しさんNGNG
テトリスよりもぷよぷよの方がコード書いてて面白かったなぁ(ボソ
0630622NGNG
>>627
> DLLは独自のものにできないんですね。
今Windowsで使われてるのはPEフォーマットという奴

> オブジェクトファイルって、exeになる前の中間ファイルのことですか?
そう。というかVBも中間ファイルとかいって作ってるはずだが。

> (というか、リンクという作業もよくわかりません(w)
オブジェクトファイル同士(とライブラリ)をくっつけて実行ファイルを作ること
0631デフォルトの名無しさんNGNG
え?この程度で終わりなの?まぁいいが。
次はテトリスって話だけど、少なくともテトリスはブロック崩しより簡単だよ。
ぷよぷよは再帰使うと簡単だけど、VBって再帰使える?
0632デフォルトの名無しさんNGNG
つーか、1よ、今上がっている候補としては、

テトリス
ぷよぷよ
電卓(俺推奨 藁 (1/3)*3が1と表示されるヤツ

だな。
0633デフォルトの名無しさんNGNG
>>4
薬師丸ひろ子まだ〜。
0634ヒッキー@プログラミングNGNG
>>628
ぷよぷよは面白そうですねー。
でもぷよぷよ、すごく苦手なんです…連鎖のデバッグができない(w

>>629
ほおほお。そうですかー。
次にやってみたいと思います。

>>630
おー、ご教示ありがとうございます。
リンクという作業がようやく納得できました。

>>631
うーん、テトリスならすぐにできそうなので、
それからブロック崩しの続きを考えようと思います。
再帰ですか。VBはできないような……できるのかな。
ぷよぷよで再帰とはどこで使うのでしょう?
くっついた時の判定でしょうか?

>>632
あー、電卓の存在を忘れるところでした。
インタープリタは書いてみたいですが、もう少し経験を積んでから
やり始めようと思います。

>>633
そろそろ髪の毛1本づつとか送って来たりして(w
0635デフォルトの名無しさんNGNG
再帰はVBで使えます。

削除判定のときじゃない?
簡単な塗りつぶしのアルゴリズムと一緒。
0636デフォルトの名無しさんNGNG
テトリスって確か一度ブロックを回転してみて、ブロックが重なっていたり壁からはみ出ていたら元に戻すっていう方法でやるんですよね。
配列変数で仮想画面を作ってそれで判定する・・・であってますか?

いや、というより本当に聞きたいのはブロックの回転の仕方なんです。

■
■  →    ■
■■   ■■■

と回転させる時、みなさんはどのようにして回転させていますか?
やはり変数に(2次元配列変数)

 │012
 ┼──
0│000
1│001
2│111

などと形を記録しておいて、回転の度に該当する変数を呼び出しているのでしょうか。
ていうか以前にそこらへんをすべてむりやり計算して回転させようとして無茶苦茶になって挫折したんです。

うーん、上手く説明できない。これでわかるかな?
0637デフォルトの名無しさんNGNG
全パターン用意しておけばいいのでは?
0638デフォルトの名無しさんNGNG
回転の処理が分からないなら、あらかじめ全パターンを配列にいれておくのがよいかと。
計算して回転させるのも「むりやり」じゃなくてフツーだよ。
まぁ、やるなら最初にプログラム内で回転させたパターンを全部生成して、それを
使うのが一番良いと思うが。
0639デフォルトの名無しさんNGNG
そんなことより>>1よ、
VBでDirectX使ってみたら?
たしかDirectX7はVBからでも使えたような・・・。
0640デフォルトの名無しさんNGNG
・・・他の言語に移るタイミングが遅れると
モナーの *やさしい* Delphi質問スレ
http://pc.2ch.net/test/read.cgi/tech/1003113413/

の ( = ゚ ω゚ )  みたいになるぞ・・・
0641デフォルトの名無しさんNGNG
誰も知ってる人おらんのかな・・・
俺も詳しく知らないのでほっとけば誰かの講釈が入るだろうと思って
たんだけれど・・・・

MODで名前あってるか知らないけど、確かCSならHL(ハーフライフ)
持ってればただでゲームできるという代物だったよーな。
つまりHLのプログラムを利用したゲームだって事だと思う。
クォーク(クエイク?)とかアンリアルとかもにたようなモノだと
どこかで読んだ記憶がアリ。なんとかエンジンって言うのかな。
俺はこれくらいしかしりません。
0642デフォルトの名無しさんNGNG
>>1よ、
>>640の言うようになるかどうかはお前次第だ。
別に移行のタイミングなんて関係ないから気にするな。
0643デフォルトの名無しさんNGNG
http://www.geocities.co.jp/SiliconValley-SanJose/4825/tet/index.html
0644デフォルトの名無しさんNGNG
>>641
modは知ってるけど、googleで検索すればいくらでも解説はあるから無視した。
ただ、音楽の方のmodばかりヒットするから、マイナス検索使わないと面倒だが。
そもそもこのスレに関係ないし。
0645デフォルトの名無しさんNGNG
そうなんですか・・・・
ゲーム作りに興味ありそうなんで、
俺が知ってる事を言ってみただけなんですが
すいませんでした。
0646ヒッキー@プログラミングNGNG
現在テトリス作成中であります。
体調悪くて、書き込みできませんでした。

>>635
お、再帰使えますか?実験してみます。
あー、囲まれた領域を塗りつぶすアルゴリズムですか。

>>636
僕も回転の仕方で詰まりました(w
やっぱ回転後の配列を用意したほうがいいのかなぁと。

>>637
そうなんですよね。

>>638
うむぅ。そうしてみようかと思います。

>>639
DirectXをVBから使う方法を解説した本が一応手元にあるんですが、
GDIを使って処理する方が勉強になるかと思いまして。

>>640
読んでみようと思います…

>>641
あー、そういえばグラフィックを入れ替えるデータを
配布している方がいらっしゃいますね。
あれって、自分でデータを解析されているんでしょうか。

>>642
どもです。気楽に逝こうと思います。

>>643
お、回転のパターンが載ってますね。
じっくり見てみます。

>>644
やっぱ有名なんですね。

>>645
おかげ様で、また新たな単語を知る事ができました。
興味があるので、検索してみようと思います。
0647デフォルトの名無しさんNGNG
http://www.google.com/search?q=%83q%83b%83L%81%5B%81%97%83v%83%8D%83O%83%89%83%7E%83%93%83O&hl=ja&lr=
0648ヒッキー@プログラミングNGNG
http://www.geocities.co.jp/SiliconValley/2530/tetris1.zip
↑テトリス、未完成ですがUPしてみました。
 今の所、端に埋まったりします…

>>647
お、このスレ1番上に出てきますねー。感動。

生き返ったのでage
0649デフォルトの名無しさんNGNG
>>648 遊んでみました。イイ!
いちばん上までブロックが積もっても、ゲームオーバにならない・・・。
ランタイムエラーとやらが出て、終了してしまいます。
0650デフォルトの名無しさんNGNG
俺のテトリスからコピペ。プレゼントfor誰か。

private static int[][] pattern = {
 {},
 { 0x00f0, 0x4444, 0x00f0, 0x4444 }, // 棒
 { 0x0660, 0x0660, 0x0660, 0x0660 }, // □
 { 0x0e40, 0x4640, 0x4e00, 0x4c40 }, // 凸
 { 0x0e80, 0x4460, 0x2e00, 0xc440 }, // L
 { 0x0e20, 0x6440, 0x8e00, 0x44c0 }, // 逆L
 { 0x0c60, 0x2640, 0x0c60, 0x2640 }, // Z
 { 0x06c0, 0x8c40, 0x06c0, 0x8c40 }, // 逆Z
};
0651デフォルトの名無しさんNGNG
>>648
(・∀・)イイ!!VBはよくわからんが、とりあえず指摘。
>>649さんのに加えて、回転する時の軸が変(つーか普通のと違う)から、ちょっと違和感あり。
回転のほうは、壁にめり込む場合は回転できないようにするのかな??
あまり役に立てなくてスマソ。
1、頑張れよ〜〜
0652デフォルトの名無しさんNGNG
651さんの普通が何か分からないけど、
回転法則自体は>>643の仕様どおりになってると思う。
(壁にめり込むのは別として)

市販されてるテトリスは回転法則がソフトによってまちまちです。
例えばこの辺を参照
ttp://www.din.or.jp/~koryan/t_r01.htm
0653デフォルトの名無しさんNGNG
テトリスと言えば、漏れはやはりセガのアーケード版だな。
同時期に出た各社のテトリス(アーケードでもATARI版とかあった)の中では
セガのが一番良かった。落下スピードが反則的に速いかわりに、地面について
からくっつくまでの時間がとても長い。
BPSのパソコン版はイマイチ。
0654デフォルトの名無しさんNGNG
>>636
 ぶっちゃけ、回転パターン用意した方が速い(両方の意味で)けど、
一応、計算で求めれ無い事も無い。

 │012
 ┼──―
0│000
1│001
2│111

 ↑を配列変数「block」として、

for(x=0;x<3;x++)
for(y=0;y<3;y++)
work[y][2-x] = block[x][y];

 ってーやれば、一応workの中に回転後のブロックが出来る(多分)

 もちろん、

 │0123
 ┼──――
0│0010
1│0010
2│0010
3|0010

 なんつー場合は、

for(x=0;x<4;x++)
for(y=0;y<4;y++)
work[y][3-x] = block[x][y];

 っつー事になるわけだけどもね。

 まぁ、よっぽどカラフルなテトリス(個々のブロックに色がついている)でも
作ろうとしない限り必要ねーんだけど。

 俺だったら>>650使うね。
0655ヒッキー@プログラミングNGNG
http://www.geocities.co.jp/SiliconValley/2530/tetris2.zip
↑テトリス、次UPしました。
 今のところ問題点としては

・壁に埋まる
・レベルが上がらない(早くならない)

などです。

>>649
どもども。
一番上まであがったら座標が-1になるときがあって、それで
エラーを吐いていたようです。応急処理的に、MsgBoxを出してみました。
ご報告、ありがとうございます。

>>650
僕もそういう感じで処理したかったんですが、
VBだと冗長な処理になってしまいます…。
宣言時に初期化できないもんでしょうか。

>>651
ういー。がんばります。
>>652 さんのおっしゃる通り、いろいろ回転が違うみたいですね。
ゲームボーイでさっきやりましたが、>>643 さんにリンクして頂いた
回転と違っていました。
って、>>652さんのページ、すごいですね(藁

>>653
あー、セガのってサルのやつですですよね。
僕は当時お小遣いが少なくてほとんどできませんでした…。
なんかOL風の人が、異様な形相ですごい速度を
さばいてたのを見ました。
テトリスってパソコン版あったんですか?知らなかった。

>>654
回転、計算でもとめれるんですねー。
僕は回転の仕方を考えていたら頭がよじれそうになりました。
やっぱ配列に回転後のデータを格納しておいた方が速いのでしょうか。
0656バード大佐NGNG
すげー
いつのまにかテトリス開発に移ってたのかw
0657デフォルトの名無しさんNGNG
(´-`).。oO(なんでみんな既存のゲームに似せようとするんだろ...)
0658デフォルトの名無しさんNGNG
>>657
ブロック崩し、テトリス、パックマン、リバーシ(オセロ)、ぷよぷよ、インベーダー……
このあたりはゲームプログラミング初心者に最適な題材だからだ。

ゲーム会社の研修の課題にも使われるぞ(マジで)。
0659デフォルトの名無しさんNGNG
テトリス、プレイさせて頂きました。
操作レスポンス非常に良好ですが、落としたブロックが固まる前に
次のブロックを回転させようとして大変な状態になること多数。
下キーで落とした時にはすぐに固まって次に行って良いかと思いました。
あと、揃えた列が消える時に画像効果が欲しいですね。

それと、この際タイトルに
「貴様ら! 落ちてくるブロック揃えて消してください」なんてどうかと。
0660 NGNG
シンプルに、
『貴様ら!ブロックをそろえてください』でいいんじゃない?
0661デフォルトの名無しさんNGNG
ストレートに
貴様ら!テトリス作ったからプレイしてください
でどう?
0662デフォルトの名無しさんNGNG

「貴様ら!ブロック崩し作るので見てください (662)」
               ↓
「貴様ら!ブロック消し作るので見てください (3)」
0663デフォルトの名無しさんNGNG
>>662の
>けしって何
の部分が
「こけしって何」に見えた俺は逝ってよし?
0664デフォルトの名無しさんNGNG
>>663
(´-`).。oO(逝かないで・・・)
0665ヒッキー@プログラミングNGNG
http://www.geocities.co.jp/SiliconValley/2530/tetris3.zip
↑次UPしました。
 まだ若干ブロックに埋まったりします…

>>656
はは。テトリス終ったら、またブロック崩しの続きを作ろうかと思っています。

>>657
オリジナリティを出すのはまだ早いかと思いまして…

>>658
>ゲーム会社の研修の課題にも使われるぞ
ほおほお、そうなんですか?
もっとやらねば。

>>659
そうですねー。下キー押したときは固まるようにしようと思います。
画面効果、考えてみます。

>>660
採用させていただきました(w

>>663
こけしですかー。最近見てないなぁ…。
0666ヒッキー@プログラミングNGNG
http://www.geocities.co.jp/SiliconValley/2530/tetris4.zip
↑次UPしました。一応ちゃんと動くようになりました。

 あとは音を付けたいと思います。
0667デフォルトの名無しさんNGNG
何が何でも罵倒語と丁寧語をスレタイトルに同居させんといかんのだな
0668デフォルトの名無しさんNGNG
>>667
http://jiten.www.infoseek.co.jp/Kokugo?pg=result_k.html&col=KO&qt=%B5%AE%CD%CD&sm=1
昔は尊敬の意味があった(^^)
0669デフォルトの名無しさんNGNG
電波ども、ドキュソを
0670デフォルトの名無しさんNGNG
ああ、努力って報われるのね。
このスレッド見てて、そう思った。
俺も頑張ろう。
0671デフォルトの名無しさんNGNG
>>668
「ら」は尊敬じゃないだろう。
0672ヒッキー@プログラミングNGNG
http://www.geocities.co.jp/SiliconValley/2530/tetris5.zip
↑次UPしてみました。

・音の追加
・バランスの調整
・タイトル画面の追加

などしてみました。

>>667
なんとなく、一貫性があった方が良いかと考えまして。
そろそろ、他の名前の付け方考えます…

>>668
ほおほお。貴様!ありがとうございます。

>>669
目撃ドキュソ

>>670
このスレでプログラムの勉強始めてから、がんばるのは
スバラシイ事だと実感しました。

>>671
そうですね…うーん、貴様ドモ!…余計ダメですね。
0673デフォルトの名無しさんNGNG
>>672

どのキーでブロックを回転させるの?
0674ヒッキー@プログラミングNGNG
スペースキーで回転します。
逆回転は今の所ありません…
0675 NGNG
http://ww31.tiki.ne.jp/~mayugon/java/tamago/
0676660NGNG
貴方様ドモ!!で。
0677デフォルトの名無しさんNGNG
貴様方!!
0678ヒッキー@プログラミングNGNG
今日は風邪気味で休憩してました。
最近、更新回数が減ったせいか、酸化してくださるかたも
減っていったような…
そろそろブロック崩しの続きでも作ろうと思います。

>>675
うんちを取って、終了してしまいました(藁

>>676
今辞書引いたところ、ドモはラよりも駄目みたいです…

>>677
方…(・∀・)イイ
0679デフォルトの名無しさんNGNG
けど、>>1=ヒッキー@プログラミング は、ム板に立てて正解だったなぁ…
とつくづくおもふ。
臭蚊屁の……

次スレは「貴様方!C言語勉強するので見てください」だな(藁
0680デフォルトの名無しさんNGNG
http://pc.2ch.net/test/read.cgi/tech/1008483093/
0681ヒッキー@プログラミングNGNG
>>679
クサカベさんって、煽り専門のように見えるのですが
気のせいでしょうか。
この発言に「はつみみです。」っていうレスついたりして(藁

>>680
おー、第2段が(w
さっそくご挨拶に逝きました。

対抗age
0682ヒッキー@プログラミングNGNG
体調がすこぶる悪いです。
開発停滞してる間にお客さんが減ってしまった…。

VCにブロック崩しを移植しようと思っているんですが、
どのようにして画像を表示したら良いか模索中です。
STATICでCreateWindowを実行したらいいんでしょうか。
とりあえずいろいろ実験します。
0683デフォルトの名無しさんNGNG
がんばる人は、好きです。
0684デフォルトの名無しさんNGNG
>>682
1. メインウィンドウと同じサイズのビットマップを用意しておく(バックバッファ)
2. ゲームではバックバッファにデータを書き込む
3. 一通り書き終わったら、バックバッファをメインウィンドウに BitBlt して貼り付ける。

こんなものでいいと思うが。普通の Windows アプリケーションでは WM_PAINT メッセージに対応して
描画するんだが、ゲームだったら無視して適当なタイミングで BitBlt() しても構わんでしょ。
0685たけおNGNG
見てる人は見てる( ̄ー ̄)
0686ヒッキー@プログラミングNGNG
http://www.geocities.co.jp/SiliconValley/2530/cblock.html
↑VC編始めました。いろんなところのソースを見ながら書きました。
 ちゃんと動いてないかもしれません…。
 タイマーとかデバイスコンテキストとか破棄されてなかったらごめんなさい。

>>683
ケコーンしましょう。

>>684
今の所、バックバッファは用意しませんでした。
WM_PAINTのところ何も書いてないんですが、いいんでしょうか。
BeginPaint・EndPaintの役割が、まだはっきりつかめてなかったりします(w

>>685
おぉ、ありがとうございます。
見てくださるかたが、もしいらっしゃらなかったらちょっと悲しいです。

※肩こりで頭が痛くて、変な事書いてるかもしれません…。ごめんなさい。
0687デフォルトの名無しさんNGNG
>>VBテトリス
テトリスの上カーソルキー、使う予定がないなら回転をアサインしてほしいなぁ。
そうすると片手で遊べるんだけど(w

>>VCブロック崩し
描画は>>684の方法でOKでしょう。現状のディスプレイDCに直接BitBltだと
そのうちチラツキが気になってくるハズ。
で、画像の表示は今はDDB使ってるけどそのうちDIBを使うことになると思う。
DIBならメモリに直接イメージを描けるからマスクパターンも要らなくなるしね。
WM_PAINTは処理しない場合でもDefWindowProc()が適当に処理してくれるから気にしなくても大丈夫。

BeginPaint()とEndPaint()はWM_PAINT内では
必ず呼ぶということだけとりあえず覚えておけばOK。

とりあえずこんだけ。
0688デフォルトの名無しさんNGNG
>>686
まず *.aps, *.plg, *.opt, *.ncb はソースアーカイブから削除ね。他の環境に持っていっても、役に
立たんから。

ReleaseDC(), DeleteDC() の使い方を間違えてるな。
 CreateCompatibleDC() などで作ったメモリデバイスコンテクストは、DeleteDC() で解放する。
 GetDC() や GetWindowDC() で取得したデバイスコンテクストは ReleaseDC() で解放する。
混同しないよう。

グローバル変数を使いすぎだが、それはともかくグローバル変数の宣言はヘッダにまとめておく。
extern を実装側に書くと、不一致が生じたときに検出できないで、致命的なバグになるぞ。逆に
外に見せる必要が無い関数/変数は static リンケージにして、同一ファイルからのみアクセスで
きるようにしておくのが身のためです。

画面サイズのこととか、エラーチェックしてない点とか、わりとツッコミどころ満載だが、とりあえず気
になったとこだけサクッと書き直してみた。
http://members.tripod.co.jp/lambda_func/cblock01_x.zip
0689デフォルトの名無しさんNGNG
書き直すなよ。
0690デフォルトの名無しさんNGNG
とりあえずCで書くなら.cppじゃなくて.cにしとけ。
0691デフォルトの名無しさんNGNG
>>689
別に、俺が書いたコードをそのまま使えとは言わんよ。サンプルとして参照したければ
すればいいし、したくなきゃ捨てときゃ良いだけ。
0692 NGNG
>>689
漏れもそう思って昨日言おうとしたけど、1が読んだら参考になると思ってやめた。
1ならそれをうまく吸収できそうだし。
0693ヒッキー@プログラミングNGNG
http://www.geocities.co.jp/SiliconValley/2530/tetris6.zip
↑テトリス修正しました。変更点は

・上キーで回転できるようにした
・タイトル画面とゲームオーバーの画面で終了したら、正常にアンロードされない問題の修正
・横キーとスペースキーを同時に押したら壁に埋まってしまう現象の修正

です。

>>687
上キーで回転できるようにしました。

描画の時、見える部分を直接いじるとやっぱチラついてくるもんなんですね。
DIB、検索してみました。便利そうですねー。
でもDIBに対して行うBitBltのようなものを自分で実装しないといけないんでしょうか。
マスクデータが要らないのはいいですね。
白なら転送しない…みたいに書けばいいんでしょうか。
>>BeginPaint()とEndPaint()はWM_PAINT内では必ず呼ぶということだけとりあえず覚えておけばOK
ほおほお。了解しました。

>>688
>>*.aps, *.plg, *.opt, *.ncb はソースアーカイブから削除ね
やっぱいらないデータもあるんですね…。よく調べずに添付してしまいました(w

ほおほお、新たに作成したDCはDeleteDCで、
既にあるDCを取得した場合はReleaseDCを使えばいいんですね。覚えます。

>>グローバル変数の宣言はヘッダにまとめておく
>>外に見せる必要が無い関数/変数は static リンケージに
そうしてみます。externはなるべく使わないようにします…

書き直して頂いた分、見させてもらいました。
書き方、すごく参考になりました。ありがとうございます。
StdAfxって、最初に1回だけコンパイルする分ですよね?
あと、#if defined のところがよく分かりませんでした…
0694ヒッキー@プログラミングNGNG
>>689
わざわざ労力を使って書き直して頂けるというのは大変嬉しいです。

>>690
.cにしたら問題が出そうな気がしたので.cppにしました。

>>691
いえいえ、捨てるなんて�dでもない。

>>692
吸収するべくがんばります。
0695デフォルトの名無しさんNGNG
>>693
> StdAfxって、最初に1回だけコンパイルする分ですよね?
プリコンパイルヘッダのこと?

Windows アプリケーションだと <windows.h> やら何やらヘッダファイルを読み込むわけだが、
これはかなりサイズが大きくて、解析に時間がかかる。そこで <windows.h> など良く使うヘッ
ダファイルを

1 あらかじめ解析して、コンパイラがすぐに使える形 (*.pch) に変換しておく
2 *.c, *.cpp をコンパイルするときには毎回 <windows.h> などを解析する代わりに、1 で作っ
 たコンパイル済みヘッダ (*.pch) を使う

ことで、コンパイルの速度を上げられる。小細工の類だが、知っておいて損は無いやね。

> あと、#if defined のところがよく分かりませんでした…
あれは通称コードガードという技法で、二回以上同じヘッダファイルを #include したときに発生
するトラブルを避けるためにつけておく。このぐらいの小規模なプログラムだと問題ないんだが、
規模が大きくなってくると

 ヘッダ A がヘッダ X を #include
 ヘッダ B がヘッダ X を #include
 main.cpp がヘッダ A, B を #include (X は都合二回 #include される)

みたいな状態が発生してコンパイルに支障が出る可能性がある。
■ このスレッドは過去ログ倉庫に格納されています