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

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

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

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

オナーニスレだけどよろしくね。
0792788NGNG
>>791
なんでわかったん?
0793デフォルトの名無しさんNGNG
>>782
そういう時は別の言語触ってみたら?
J++も入ってるんでしょ? 他にもDelphi6Personalとかも無料だし
0794789NGNG
>>788=790
おいおい何怒ってるんだよ。(笑)
0795デフォルトの名無しさんNGNG
実は.>>1が自作自演でストレス解消中だったりして・・・。
0796デフォルトの名無しさんNGNG
掃除機、錆吸ぃ。

>>1さぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁ♥ぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁ♥ぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁ(以下略
0797デフォルトの名無しさんNGNG
 | ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄|
 | >>1 はどこ!!    |
 |_________|
    ∧∧ ||
    ( ゚д゚) ||
    / づΦ
0798デフォルトの名無しさんNGNG
あまりおすすめできない擦れたい、形で始まった子のスレの
勢いはもう \0 どうぜん…(w
0799デフォルトの名無しさんNGNG
googleで「入門」を検索したつもりで「柔毛」を検索してしまいました。
(例) http://www.google.co.jp/search?q=%8F_%96%D1&hl=ja&lr=
0800デフォルトの名無しさんNGNG
やる気・向上心のあるプログラミング初心者募集!
0801ヒッキー@プログラミング ◆hky/PGis NGNG
(;´Д`)
0802デフォルトの名無しさんNGNG
>>800
プログラミングは (それほど) 初心者でもないが、ゲームプログラミングはド素人ってあたりで
どうよ? ひとつシューティングゲームでも書いてみたいなと思ってるんだが、観客いた方が気
合入るし。
0803デフォルトの名無しさんNGNG
>>802
俺は全然構わないと思うよ。
>>1もプログラミング多少できたみたいだし。
0804デフォルトの名無しさんNGNG
♥ a g e ♥
0805デフォルトの名無しさんNGNG
ビットマップが白黒になるのは
CreateCompatibleBitmap
の引数のHDCに入れるものが間違ってるからだったような・・・
hWnd = 「メインウインドウのhWnd」;
hdc = GetDC(hWnd);
CreateCompatibleBitmap(hdc, width, height);

とhdcをウインドウのものにすればすればカラーになるはず


0806デフォルトの名無しさんNGNG
>>802
漏れも便乗させてもらってもいい?
0807802NGNG
>>806
良いんじゃない。

とりあえず DirectDraw7 で、16x16 タイル張りの背景をスクロールできるところまで行きました。
ちとコードを整理したら up します。
0808806NGNG
>>807
どうもありがとう。
漏れ業務ではPL/SQLしか経験なくてやばめだけど。

わたしはDirectDrawは使えないヘタレなので、DirectX系無しのVCで・・
背景のスクロールはWM_TIMERでX+=10;とかにして
BitBltの所の背景のX座標の位置を増やしてみました。
たぶんWM_TIMER使っているからだと思うけどゲームみたいな綺麗な
スクロールじゃないや。
それにInvalidateRectをWM_PAINTじゃなくてWM_TIMERの方に書かないと
だめだったし。無念。
0809806NGNG
それと再描画命令はInvalidateRect(hwnd,NULL,FALSE);
一文しか私は使っていないんですが、UpdateWindow(hwnd);は
やっぱり普通は使うものなんですか?
自分のソースにInvalidateRectの次の行に書いたらKARNEL32.dllっていうのがエラー出します(涙
0810デフォルトの名無しさんNGNG
>>801
VBに帰る手もあると思う。
0811デフォルトの名無しさんNGNG
>>806
おそらくWM_PAINT に UpdateWindow 書いてねーか?
0812デフォルトの名無しさんNGNG
WOODYPOP
http://www2.sega.co.jp/sw/woody/

セガのブロック崩し。
おもろいよ。
0813デフォルトの名無しさんNGNG
このスレ好きだったんだが、ずいぶんさびれちゃって寂しいんで
漏れもちょっと参加してみます。

貴様ら!見てください
http://www.geocities.co.jp/SiliconValley-PaloAlto/4792/

プログラム歴は、昔BASICとCをかじった程度。ひと月程前にDelphiをダウソして勉強中。
0814デフォルトの名無しさんNGNG
>>813
色つけたら見てるだけで楽しくなりそう。
0815名無しへの扉NGNG
見れ!!
http://www.vector.co.jp/soft/win95/game/se174379.html
0816デフォルトの名無しさんNGNG
気合入ってんなぁゴルァ!
API板にも来てください

http://pc.2ch.net/test/read.cgi/tech/1006783012/l50
0817813NGNG
とりあえず次バージョンUPしました。
http://www.geocities.co.jp/SiliconValley-PaloAlto/4792/

画面を分割して、衝突判定を分けたんですが、
だんだんソースがゴチャゴチャしてきて見辛くなってきた。
あと、Ctrl+左マウスドラッグで画面をスクロールできるようになりました。

>>814 
ぱくり元のゲームも見てるだけで飽きないとこが好きだったんですが、フルスクリーン専用だったので、
そのへんをなんとかしたいなってのも、作ってる動機のひとつです。完成したらスクリーンセーバにもしてみようかと思ってます。
今のとこ、どうやって作ったらいいのか全然わかりませんが。
見た目の寂しさは何とかしたいとこですが、一通りの機能が出来るまでは我慢しようとおもいます。
音の追加とかも。
0818デフォルトの名無しさんNGNG
を、なんか楽しげ。
ぼーっとみちゃったよ。
0819デフォルトの名無しさんNGNG
見るわケネーだろうが
0820ヒッキー@プログラミング ◆hky/PGis NGNG
http://www.geocities.co.jp/SiliconValley/2530/
今日またやり始めたので、よかったらおいでくださいませ(;´Д`)
0821813NGNG
またUPしてみましたが…、
http://www.geocities.co.jp/SiliconValley-PaloAlto/4792/
なんとなくソースファイルをメインフォーム、宣言、描画、物理計算部の4つに分割してみたんですが、
描画時の色がおかしくなってしまい困ってます。

//細胞カーソル描画
procedure DrawCellCursor(cell: PCell; Color: TColor);
begin
 with Form1 do begin
 if Cell = Nil then Exit;
 Image1.Canvas.Pen.Color := Color;
 Image1.Canvas.Pen.Width := 2;
 Image1.Canvas.Brush.Style := bsClear;
 Image1.Canvas.Ellipse(Cell.x - CellRadius - 4 - ViewLeft, Cell.y - CellRadius - 4 - ViewTop,
               Cell.x + CellRadius + 4 - ViewLeft, Cell.y + CellRadius + 4 - ViewTop);
 end;
end;
//============================================
上のようになっていて

DrawLifeCursor(LifeSelected, clBlue);

のように呼んでいるんですが何故かclBlueでなくclBtnFace(ウィンドウの色)で描画されてしまいます。
ソース分割前は正常だったんですが…。考えてみてもまったく原因が分からない。(;´д`)

お、>>1さんが、ひっそりと復活。息切れしないよう、程ほどに頑張ってね〜。
0822デフォルトの名無しさんNGNG
試してないからはずしているような気がするけど、
引数のColorではなくてForm1.Colorが描画されてるのかな。
名前がバッティングしないように引数を変えてみてはどうでしょうか。
0823813NGNG
>>822
おっしゃる通りでした。
なんで気が付かなかったんだろ…。(;´Д`)ハズカスィ
0824agoNGNG
>>1だ!
>>1が帰ってきたぞーー!!


(・ι_・)age
0825デフォルトの名無しさんNGNG
>>1さんのページおめえ('-T)
0826デフォルトの名無しさんNGNG
1の掲示板で2げっととか、ズサーとかってやってる
0827ヒッキー@プログラミング ◆hky/PGis NGNG
ただいまです。ほしゅあげ
http://www.geocities.co.jp/SiliconValley/2530/

WM_TIMERで処理するのをやめて、時間を計るようにしました
0828ヒッキー@プログラミング ◆hky/PGis NGNG
・・・こんどこそあげ
0829デフォルトの名無しさんNGNG
このスレッドは大耳モナーが嫌々放置中です。
なんら問題はありません。
                        タリー
タリー      タリー              イヤーソ
   (\_/)          タリー
   (  ´Д)アハーン    タリー              タリー
   /   つ  (\_/)   (\_/)ノ⌒ヽ、
  (_(__つ⊂(´Д`⊂⌒`つ(´Д` )_人__) ))
0830デフォルトの名無しさん NGNG
>>1
今VBの方をDLしてみたんだけど、面白かったYO!
0831ヒッキー@プログラミング ◆hky/PGis NGNG
>>829
がーん(´ρ`)
>>830
ども、ありがとうございます!
これからもがんばって作っていきます
0832デフォルトの名無しさんNGNG
>>1が帰ってきた!帰ってきた!名前をハンカクにして帰ってきた!

折れもC勉強しようかと思うんだけど、
コンパイラなどどれがいい?

便乗 保守 呼込 質問 揚
0833デフォルトの名無しさんNGNG
俺が熱を出している間に帰ってくるとは・・・(w
0834ヒッキ-@プログラミング ◆hky/PGis NGNG
>>832
どもー。
Cですかー。漏れはWindows派の人間なのでやっぱVCが
(・∀・)イイと思うんですが、もし挫折してしまったら
投資がモターイナイので、フリーのLSI-C試食版などどうでしょうか?
DOS環境に限られますが、勉強ならちょうど良いんではないかと。

構造体・配列・ファイル管理などができるようになってきたら、
gccかボーランドのコンパイラに移行すればまた無料でできます。
0835  NGNG
男ならだまってGCCだ。
環境がWINDOWS、LINUX、FREEBSD、SUNOS、、、その他いかなる環境でも
男はだまってG・C・C!!!!!!!!!!!!!!!!!
0836ヒッキ-@プログラミング ◆hky/PGis NGNG
今、ゲームボーイアドバンス用のGCC使ってるんですが、
インラインアセンブラのところでエラー出すんですが何ででしょう…。

あと、makeコマンドでコンパイル→リンクする時も
なぜかエラーが…。

設定の仕方がよくわかりません。タスケテ
0837デフォルトの名無しさんNGNG
>>836
とりあえずエラーメッセージを Copy & Paste しろ。
0838デフォルトの名無しさんNGNG
今初めっからココまで読んだけど、1は>>466でもの凄く良いこと言ってる。
466で考えたことはずっと忘れないように。

> 結論としては、僕的にはコンピュータを内部まで知らなくても、1回ソースを
> 書いたら全ての環境で全く同じソースがコンパイルできるようになったら
> いいなと思います。

例えばJavaはすべてのプラットフォームに同じ土台(JavaVM)を用意することで
その上では同じコードを実行できる。

それもひとつの方法なんだけど、1がこれからもっと規模の大きいプログラムに取りかかるとき、
構造化やオブジェクト指向の考え方を知っておいて損はしないと思う。

ざっと1のVBのソース見た限りでは、プログラムが実行する処理を順番に書いてるだけだよね。
VC版ブロック崩しはブロック、パドルなんかを別ファイルに分けてるから、その辺考え始めてると思う。

確かにブロックやパドルは、それぞれひとまとまりだから分けることが出来る。
でもブロックもパドルもボールも同じ画面に描画される物体だよね。
それぞれ表示すべき座標があり、グラフィックがある。
ブロックに対しても、パドルに対しても、ボールに対しても「表示しろ」と命令すれば
しかるべき位置にしかるべき表示をしてくれるとすれば、理にかなってると思わない?
こういう考え方をすると、ブロック=パドル=ボールは共通の概念をもったものであると考えることもできる。

良くまとまらないけど、オブジェクト指向の考え方に踏み出すきっかけにならないかな…?

#俺も昔ゲーム作って、今の1と全く同じようなファイルの分け方してた(ワラ
0839デフォルトの名無しさんNGNG
続き。

今のVC版ブロック崩しではボールやパドルのソースファイルに
HDCやら何やらも一緒に入ってるよね。

で、例えばMoveしたときにHDCに対して絵を送ってやって表示を実現してる。
ボールを画面に表示するプログラムの手順としては間違ってるわけではないが、
ボールは表示されるべき場所(この場合はプログラムのWindowの中)の事まで
考慮すべきかどうか。

VBの時も、VCの時も、「ボール」の振る舞いは「移動する」「反射する」…で変わらない。
ブロック崩しのアルゴリズムも変わるわけじゃない。
変わったのは実装依存の部分。これはVBだったらBitBlt、VCだったらBltToBufとか使ったり。
他にはtimer使ったりイベントが呼び出されたり。

こういうとき一枚ラップ用の関数を定義して、例えば表示ならDraw()の中で
実装依存の関数BltToBufを呼び出したりすると、プログラムが読みやすくなる。

抽象化された概念(言葉)でラップして、実装は内側に閉じこめてしまうわけ。
このようにしておくと、例えば描画エンジンをDirectXに取り換えても書き換える部分はごくわずかで済む(のが理想)。
Drawの内側の実装部分を変えるだけだから。

実際うまく行くように切り分けるのは最初は難しいかもしれないけど、
この考える作業は結構楽しい。

でそれにハマりすぎて何時までも完成品が出来なかったりすることもあるけどな・・>俺。
そんなとき初心に帰ってゴリゴリ書くのもいいなとこのスレ見て思ったよ。

長レスすまそ。
0840ヒッキ-@プログラミング ◆hky/PGis NGNG
>>837
アセンブラのとこのエラーはこんな感じです…。
a.c: In function `vsync':
a.c:79: parse error before '{' token

で、中身はこんな感じです。
76:void vsync()
77:{
78: __asm
79:  {
80:  mov r0, 0x4000006
81:  scanline_wait:
82:   ldrh r1, [r0]
83:   cmp r1, 160
84:   bne scanline_wait
85:  }
86:}
0841ヒッキ-@プログラミング ◆hky/PGis NGNG
>>837
Makeの時のエラーは、

D:\GBA\sample\proto_devkit\proto_devkit>make
gcc -g -O3 -mthumb-interwork -nostdlib -Wall -fverbose-asm -fpeephole -M main.c
> Makedepend.txt
make: /bin/sh.exe: Command not found
make: *** [Makedepend.txt] Error 127

こういうのです。
でも、sh.exeにはパス通ってると思うんですが…
っていうか、sh.exeに渡すファイルがないって言う事でしょうか…。

あ、友達からネトゲーのお誘いが…
>>838さんまた後でレスします
0842デフォルトの名無しさんNGNG
Command not foundてことは、sh.exeがそもそも無いか、pathが通って無いんじゃない??
自信無いのでsage
0843デフォルトの名無しさんNGNG
>>840
gccのインラインアセンブラの書式じゃないから。
0844デフォルトの名無しさんNGNG
>>841
cygwinインストールした?
0845ヒッキ-@プログラミング ◆hky/PGis NGNG
>>842
うーん、一応PATHに足したつもりなんですが…
>>843
まじすか?がーん。
まずgccの使い方をもっと覚えた方がいいですよね…
>>844
cygintl.dll cygwin1.dll
っていうファイルは、zipに一緒に入ってたので
入れました。
0846844NGNG
PATHに何を足したの?
DLLだけじゃなくて、cygwin上の開発環境入れたらかなり大量に入るはずなんだけど。
0847ヒッキ-@プログラミング ◆hky/PGis NGNG
>>846
cygwinってコンパイラとは別に用意しないといけないんでしょうか?
pathにはC:\devkitadv\binっていうのを足してます。
devkitadvっていうのがGBA用のgccみたいです。
0848デフォルトの名無しさんNGNG
で、そこにsh.exeってある?
ちなみにmake.exeはそこにあるわけ?
0849ヒッキ-@プログラミング ◆hky/PGis NGNG
ありました。
0850デフォルトの名無しさんNGNG
そのsh.exeをダブルクリックすると、DOS窓が開いて実行するはずだけど、

mount [ENTER]
mount -s [ENTER]

ってタイプするとなんて出て来る?
0851ヒッキ-@プログラミング ◆hky/PGis NGNG
$ mount
mount: not found
$ mount -s
mount: not found
0852デフォルトの名無しさんNGNG
/bin/shがないっつってんだから無論そうか。

pwd [ENTER]
./mount [ENTER]
./mount -s [ENTER]

だとどうよ?
0853ヒッキ-@プログラミング ◆hky/PGis NGNG
cygwinのサイト逝って、インストールしてみました…。
で、cygwinのbashからmakeしたらうまく逝きました…。
>>852さんどうもありがとうゴザイマス。
0854デフォルトの名無しさんNGNG
昨日このスレを見つけて最初から読んでたが、
またプログラムやりたくなったよ。
頑張れー>>1
0855デフォルトの名無しさんNGNG
841の時点でメイクファイルの中に
SHELL=sh
って書いたらたぶん解決してたと思う。
853で普通のcygwinとアドバンス開発環境が同居することになったようだけど、
無用な混乱が起こるような気がします。
PATHの設定とmountの状態でわけわからんくなる可能性がありますぜ。
0856ヒッキ-@プログラミング ◆hky/PGis NGNG
>>838
Javaってそういえばどこでも同じコードで動くんですよね。
でもシステム内部をいじるようなプログラムができないっぽい
ですね。やっぱこれからはWebベースのプログラムでないと
駄目なんでしょうか?C#もJavaっぽいし

Webのプログラムができなくてもいいから、いろんなシステム上で
動くコードが書けたら良いとおもうんですが…。
そういえばWindowsのコードって中間コードなんでしょうか?
それともx86系に依存したコードですか?……って調べてみます(わら

>ざっと1のVBのソース見た限りでは、プログラムが実行する処理を順番に書いてるだけだよね。
>VC版ブロック崩しはブロック、パドルなんかを別ファイルに分けてるから、その辺考え始めてると思う。
ファイルを、どこで線を引いて分けるかというのはとても
難しいですねー。とりあえず見た目に違うもので分けました…。

>ブロックに対しても、パドルに対しても、ボールに対しても「表示しろ」と命令すれば
>しかるべき位置にしかるべき表示をしてくれるとすれば、理にかなってると思わない?
そうですよね。
違うところは画像へのポインタと、座標だけですもんね。

>#俺も昔ゲーム作って、今の1と全く同じようなファイルの分け方してた(ワラ
安心しました(藁
やっぱそういう部分も考えないと良くなっていかないですねー。
今までは、ただ動けば(・∀・)イイという感じでプログラムしてました。
後で読めないソースや、再利用できないようなものを書くというのは
あまり良い事ではないですね。勉強になります。

>こういうとき一枚ラップ用の関数を定義して、例えば表示ならDraw()の中で
>実装依存の関数BltToBufを呼び出したりすると、プログラムが読みやすくなる。
この概念はすごい難しいです…。
いろいろ考えを巡らせてみましたが、中身の若干の変更で
他へ移植できるような書き方はなかなか思い付かないです…。
でも、うまくまとまってから作ったら、動きの把握しやすい
ソースになりそうですね。

後、少し疑問に思うことがあるのですが、ソース中の関数が、
WinAPIか自作の関数か分からなくなるときがあるので、
自作の関数に接頭文字を付けようと思いましたが、
全てに付けるにはあまりキレイじゃないし、読み分けするには
どうしようかと思っています。
もう一つ、staticな関数なんですが、他のファイルに公開する
関数と見分けるのがややこしいので、見やすくしたいと思うのですが、
どういう書き方が考えられるでしょうか。
僕的には、staticな関数は1段Tabしてから書いたらどうかと思っています。
そういう書き方は読みやすいですか?
(ソースの最後に、staticだけかためて書くというのも考えましたが、
 機能別に書いていくと、ソースの途中に書いた方が良い場合もあったので…
 もしかしてこっちの方が読みやすいでしょうか?)

最後に…レス忘れてました(;´Д`)すいません…
0857ヒッキ-@プログラミング ◆hky/PGis NGNG
>>854
おー、どもです!
プログラム、やっぱおもろいですよー。
がんばります!

>>855
がーん、まじですか?
後でインストしたcygwinにはパスが通っていないのか、
なぜかアドバンス開発環境のsh.exeからcygwinのコマンドが
実行できないんですよねー。うーん。
makeファイルからコンパイルするとき、イチイチcygwinから
cdで移動して、実行してました。
一回、SHELL=sh書いてみます。さんきうです!
0858デフォルトの名無しさんNGNG
>>856
WinAPI かどうかはそのうち覚えるから心配すんな。
でもまぁ自作関数にプレフィクスをつけるのは勧めとくよ。
少なくとも目立つ関数にはな。
関数の static 化はあんまり考えなくていーんじゃねーの。
そこまできっちり考えて作る必要なし。
0859デフォルトの名無しさんNGNG
>>856
> いろいろ考えを巡らせてみましたが、中身の若干の変更で
> 他へ移植できるような書き方はなかなか思い付かないです…。
Win32 only だが

 表示 GDI, DirectX7
 入力 User32.lib (Win32 標準), DirectInput8
 サウンド mci, DirectAudio8

組み合わせ可能なコードとかなら手元にあるぞ。C++ だけど。

> WinAPI かどうかはそのうち覚えるから心配すんな。
俺は C++ で書いてるから、Win32 API にはグローバルスコープを示す :: を
つけるようにしてる。
0860838NGNG
>>856
一段落ついたらクラスの使い方を覚えるといいよ。
ファイル単位でデータをstaticにしたり関数をstaticにして
スコープを分ける代わりに、クラスを使うと、同じように
データと関数を1セットにまとめることができて、
publicとprivateのキーワードで外部公開するかしないかを選択できる。

>後、少し疑問に思うことがあるのですが、ソース中の関数が、
>WinAPIか自作の関数か分からなくなるときがあるので、
これはクラス(クラススコープ)の導入で解決する。
いま問題になるのは、Win32APIも自作の関数もグローバルなレベルにあるから。
クラスのメンバ関数はそのクラスに属するから、例えばパドルクラスを作れば

Paddle paddle;
paddle.Init();

というように、Init関数はパドルを初期化するんだぜ、ってのが明快になる。
同様に bar.Init() ってのがあっても混乱することはない。

今、PaddleInit() って関数名は、「パドルを初期化する」ものだから、
Paddleという接頭辞によってInitの対象を限定してることになる。
よって方向性は間違ってない。
関数をグローバルスコープにして接頭辞をつけて対処するのは誤り。

>関数の書き方
関数の実装はとりあえずヘッダに書いた順に並べてる。
ここは個人で見やすいようにしておけばいいと思う。
他のファイルから呼び出すときは、ヘッダファイルだけ見れば分かるから。
編集の時はVC++のクラスビューア(だっけ?)で関数名クリックすればジャンプするでしょ。
もしくはヘッダで関数名を右クリックして定義位置を表示。

あと、ソースの書き方は綺麗で好感が持てます。
0861デフォルトの名無しさんNGNG
>>860
> 関数をグローバルスコープにして接頭辞をつけて対処するのは誤り。
誤りってことはないやね。確かに C++ で書くなら接頭辞不要だけど、C の場合には
プリフィクスをつけるのは一般的。

Win32API なら wave*, mci* とか UNIX のカーネルなら pmap_*, arp_* など実例は
多数。
0862ヒッキ-@プログラミング ◆hky/PGis NGNG
>>855
SHELL=sh でうまく逝きました!
やたら苦労したので、やたら嬉しいです。どもども!

>>858
まだきっちり考えなければ把握できないほどの
規模でもなかったですね…。
よく出てくる関数は目立つ名前にしようかなーと思います。

>>859
GDI→DirectDrawは、だいたい予想つくんですが、
mci→DirectAudioっていうのは想像するのが難しいです…。
どこまで分解したらいいかとか、どういう機能があるかとかを
知らないといけませんね…。

グローバルスコープの::って、左に何か付けるんでしょうか?
右にはAPIの名前ですよね?
0863ヒッキ-@プログラミング ◆hky/PGis NGNG
>>860
クラス覚えたら、整理しやすくなりそうですね。
Javaの本ちょこっと読んだんですが、継承やら
多態やらムズカシそうなので理解しないうちに
置いてました…。

Paddle paddle;
paddle.Init();
こういう書き方はすごい見やすいですねー。

また疑問が湧いてきたんですが、パドルの実体を
作るのって、メインループのあるファイルの中で
いいんでしょうか?

>関数の実装はとりあえずヘッダに書いた順に並べてる。
ほおほ、やっぱヘッダの順番と中身の順番が違うかったら
ややこしいですよね。
やっぱ、関数の機能の説明などのコメントは、ヘッダの方に
入れた方がいいですか?

>もしくはヘッダで関数名を右クリックして定義位置を表示。
あ、そんな機能あるんですか!?(;´Д`)

>あと、ソースの書き方は綺麗で好感が持てます。
ありがとうございます。
実際、仕事に逝った時に役に立てるようにもっと
いろいろ書き方考えてみます。

>>861
時と場合によって使い分けるのがいいんですね。
何かに固執して、他の場所で臨機応変に対応できない
ようにならないように気をつけます。
0864デフォルトの名無しさんNGNG
>>862
> グローバルスコープの::って、左に何か付けるんでしょうか?
グローバルスコープにある識別子(変数や関数名、enum 値)にアクセスする場合
には、何もつけません。

  ::CoInitialize(NULL);

みたいに書けば OK。

C だと名前はグローバルスコープ以外には置けませんが、C++ だと namespace
やクラスに閉じ込めることが出来ます。

namespace Block
{
  enum { PADDLE_PLAYER1, PADDLE_PLAYER2 };
}

たとえばこんな感じに書くと enum 値は Block 名前空間に属することになるので


 Blcok::PADDLE_PLAYER1

と書いてアクセスできます。所属する名前空間が異なれば、同じ識別子があって
も衝突せずに併用できます。

あと、特定の名前空間の識別子を選択的、あるいはまとめて現在のスコープに
導入する方法 (using namespace) があるので、実際にはそれを使うことが多い。
0865838NGNG
>>861
誤り、は言い過ぎた。実例上げてくれたとおり。
自分で関数定義するとき、かつクラスや名前空間が使えるとき、
という条件のつもりで書いた。

>>863
>パドルの実体を作るのって、メインループのあるファイルの中で
>いいんでしょうか?
でいいよ。使うところで作る。
他にはゲーム進行を行うクラスを定義して、そのメンバとして
パドル、ボール、ブロックを持たせるやり方も考えられる。

>やっぱ、関数の機能の説明などのコメントは、ヘッダの方に
>入れた方がいいですか?
両方に同じ説明(短文)を書いてる。実装の方にはコードの修正日も。
上手い人の書き方を参考にして、自分がいいと思う書き方でやればいいと思うよ。

複数人で作業する環境だったら、コメントはこう書け、みたいな
規約が決まってるかもしれない。
0866デフォルトの名無しさんNGNG
>>865
> 実装の方にはコードの修正日も。
それはバージョン管理ツール入れて、バージョン管理ツールにお任せが良いと
思われ。

私はバージョン管理は CVS、コメントは doxygen で出力できるように Javadoc
形式で入れてる。
0867デフォルトの名無しさんNGNG
10年前に作ったことある。
同時に三つのブロックに当たったときの動作どうする?
漏れのプログラムの場合、そのまま突き抜けるような
動作になっちまって・・
0868ヒッキ-@プログラミング ◆hky/PGis NGNG
>>864
>::CoInitialize(NULL);
>みたいに書けば OK。
ほおほ、そういう書き方があるんですねー。

ネームスペースっていうのは初めて聞きました…。
そんな便利な機能があったとは。

>あと、特定の名前空間の識別子を選択的、あるいはまとめて現在のスコープに
>導入する方法 (using namespace) があるので、実際にはそれを使うことが多い。
?なんか滅茶苦茶ムズカシいんですけど…(わら
using namespaceっていうのは手法のことでしょうか?
それともライブラリみたいなものですか?

>>865
>他にはゲーム進行を行うクラスを定義して、そのメンバとして
>パドル、ボール、ブロックを持たせるやり方も考えられる。
おお、そういう事も考えられるんですね。
なんか、目に見えるものばっかりをクラスに定義しようと
考えてました…。
クラスにクラスを持たせるっていう時は、継承させるんでしょうか?
それとも、実体をクラス内に持たせるという事ができるんでしょうか?

>両方に同じ説明(短文)を書いてる。実装の方にはコードの修正日も。
その方法なら修正時に、実装部かヘッダーか、
どちらを見られても対応できますね。
コードの修正日ってやっぱ必要なんでしょうか?

>上手い人の書き方を参考にして、自分がいいと思う書き方でやればいいと思うよ。
ですね。いろいろ見回って勉強します。

>複数人で作業する環境だったら、コメントはこう書け、みたいな
>規約が決まってるかもしれない。
複数人でやった事ないですけど、そういうルールって
結構重要っぽいですね。

>>866
バージョン管理ツールって、よく聞くんですが、
どういうソフトなんでしょうか?イメージできない…。

>>867
僕のやつも、2つほど一緒に当たると、突き抜けてしまいます(わら
ボールの近くのブロック全て検知して、同時に当たったときは、
進む方向に対してOR演算とかしたらうまく逝きそうな予感…
0869デフォルトの名無しさんNGNG
>>868
> ?なんか滅茶苦茶ムズカシいんですけど…(わら
「名前空間」とか使ってる単語が難しいだけで、別に実際に使うのは難しくないって。

namespace Paddle
{
  using namespace Ball;
  // こうすると namespace Ball の中にある名前を、修飾 Ball:: なしで
  // 参照できる

  using std::for_each;
  // こうすると namespace std にある for_each だけを、修飾 std:: なしで
  // 参照できる
}

こんな感じ。
0870ヒッキ-@プログラミング ◆hky/PGis NGNG
>>869
そういうのって、関数の引数に指定したりできるんですか?
function(namespace Paddle)みたいに…。
今のところ、enumのパワーアップ版みたいなイメージしてます。

あと、例えばBallには、数値を持たせることはできますか?
0871デフォルトの名無しさんNGNG
Del坊なのですが、このスレに参加してよいですか?>1さん
ひまになったんでなんかゲーム作ろうと思って。
0872ヒッキ-@プログラミング ◆hky/PGis NGNG
>>871
ういういー。
っていうか、ここは2chなので、漏れに人の考えを
制限する権利が無いんですよね。どぞご自由に。
0873デフォルトの名無しさんNGNG
838です。
>>868
クラスにする目安は、意味的、役割的にまとめる価値があるもの。
管理役として、マネージャっていう職があるのと同じ。

クラスを継承するか、所持するかは、例えば
 トヨタ車とホンダ車など各社の車を表すのに「車」クラスを継承させる
 車の「ハンドル」や「タイヤ」は車が所持する
と考えれば分かりやすいかな。

クラスにクラスを持たせるのはこんな感じ。
Class Paddle {}
Class Ball {}

Class Manager {
 Paddle paddle;
 Ball ball;
}

>コードの修正日
いつ書いたコードか分かるのは便利。
過去に書いたコードと比較して、スキルレベルの確認ができるから。
0874ヒッキ-@プログラミング ◆hky/PGis NGNG
>>873
>クラスにする目安は、意味的、役割的にまとめる価値があるもの。
>管理役として、マネージャっていう職があるのと同じ。
そういうとらえ方なんですねー。
なんか誤解してました…。

>トヨタ車とホンダ車など各社の車を表すのに「車」クラスを継承させる
>車の「ハンドル」や「タイヤ」は車が所持する
おおお、イメージばっちりです!
すごく分かりました。ありがとうございます。

>いつ書いたコードか分かるのは便利。
>過去に書いたコードと比較して、スキルレベルの確認ができるから。
ほおほ、たしかにそうですよね。
僕も修正日とか書くように心がけようと思います。
0875ヒッキ-@プログラミング ◆hky/PGis NGNG
保守…

最近、ブロック崩し作ってませんでした…。
GBAにはまりまくりです。
0876デフォルトの名無しさんNGNG
俺は見ているぞ
0877デフォルトの名無しさんNGNG
漏れも見ているぞ! たまに……な(ニヤソ)
0878デフォルトの名無しさんNGNG
応援sage
0879デフォルトの名無しさんNGNG
俺も見てるぞ。俺もなんか作ろっと。
0880デフォルトの名無しさんNGNG
俺も作ったけど、うまくいかないよ!
0881デフォルトの名無しさんNGNG
あげよう
0882デフォルトの名無しさんNGNG
ブロック崩しはローラーみたいな入力装置がないとだめだよ。
マウスや、ましてやキーボードなんかじゃまったく遊べない。

何か新機軸のアイデアでもあれば別だけど、、、
0883デフォルトの名無しさんNGNG
ホイールボタンをローラー代わりに使うとか。
0884デフォルトの名無しさんNGNG
>>883
それだ!
マウスホイールならいっそ画面を90度回転させるとか。
自機の移動は縦で。
0885デフォルトの名無しさんNGNG
>884
それって昔のテニスじゃ・・・
0886デフォルトの名無しさんNGNG
ホイールじゃ細かい移動ができんぞ
0887デフォルトの名無しさんNGNG
では、大まかな動きでもいいように球をでかくしてみよう
自機の10倍くらいに
0888 NGNG
でかすぎだよ!
0889ヒッキ-@プログラミング ◆hky/PGis NGNG
ひさびさあげ
http://www.geocities.co.jp/SiliconValley/2530/car.lzh

GBAで連打するゲーム作ったんで、よろしければ
やってみて頂きたいなぁと。
まだ完成度低いですけど…。
0890デフォルトの名無しさんNGNG
ゲームボーイないからできないや
0891デフォルトの名無しさんNGNG
http://www.emuhq.com/vboy

これでできると思われ。
自分はできました(感動した)。
0892ヒッキ-@プログラミング ◆hky/PGis NGNG
>>890
がーn
>>891
お、どもです!
やっぱやってくれる人がいると、すごい嬉しいっす。

今、F-ZEROの地面みたいな画面はどうやって描くか
考え中です。回転の式をうまく使えばできるかなぁとか…
でも、あんなグリグリ動かしたら処理落ちしそうな気もするし…。
あと、回転した後の図形の、当たり判定っていったい
どうするんでしょう。当たり判定の位置を決めるにも、
毎フレーム回転させないといけないんでしょうか。
■ このスレッドは過去ログ倉庫に格納されています