1read 100read
2011年10月1期ゲ製作技術Cでブロック崩しを作りたい
TOP カテ一覧 スレ一覧 削除依頼 ▼
・ 次のスレ
今日から必死で〜 【一ヶ月】夏休みゲーム製作スレ【多分無理】 【サクーシャ】Yuuki! Novelスレッド【ガンガレ!!】 プロのゲーム製作者の個人サイトを晒してくだちい
Cでブロック崩しを作りたい
1 :03/12/08 〜 最終レス :09/12/21 おしえてください
2 : #が消えました
3 : なにも知らない香具師に赤の他人が手取り足取り教えてくれたら さぞかし楽な世の中であろう。
4 : 7行で作れ!
5 : 貴様ら!ブロック崩し作るので見てください http://pc.2ch.net/tech/kako/1004/10048/1004855513.html
6 : ってか教えてくれってのよくあるが自分がどこまで知っててどこまでできるのかそれを言わないと なにもわからないから教えようがないな
7 : >>6 心配するな。 ここは、>>1 が立て逃げしたスレだ。
8 : まずはテキストベースで作れ。 話はそれからだ。
9 : えーーー
10 : 唐突にやってみたくなった。今日は一日ヒマだし挑戦してみるか…
11 : 表示位置を指定するには ansi.sys ってのが必要なんだそうだ http://www.gaia.h.kyoto-u.ac.jp/users/izui/technotes/escape.html 上記サイトの情報を元にまとめてみた // ansi.sys用の画面操作 #define BLACK 0 #define RED 1 #define GREEN 2 #define YELLOW 3 #define BLUE 4 #define MAGENTA 5 #define CYAN 6 #define WHITE 7 #define clearScreen() printf("\x1b[0m\x1b[2J") #define setColor(f, b) printf("\x1b[0;1;3%d;4%dm", f, b) #define setColorDark(f, b) printf("\x1b[0;3%d;4%dm", f, b) #define setCursorPos(x, y) printf("\x1b[%d;%dH", y+1, x+1) #define displayCursor(disp) printf("\x1b[>5 %c", disp ? 'l':'h')
12 : 16ビットアプリで作るのか。 いや、止めやしないが。
13 : いやまておまいら。 「C」が言語のことだとは限らんぞ。 つまり、>>1 が作りたいのは、こう↓だ。 CCCCCCCCCCCCCCCCCCCCCCCCC ←ブロック CCCCCCCCCCCCCCCCCCCCCCCCC CCCCCCCCCCCCCC CCCCCCC C ←ボール / CCCCC ←バー
14 : 速度の調整方法がわからない。やっつけで組んでみたがガタガタになる。 とりあえず後回しにしてロジックから組もう… #define FPS 60 void wait() { static long waitTime = 0; long count1, count2; int second; if(waitTime == 0) { second = time(NULL); while(second == time(NULL)); second = time(NULL); for(waitTime = 0; second == time(NULL); waitTime++) { for(count2 = 0; count2 < 0x10000; count2++); } waitTime /= FPS; } for(count1 = 0; count1 < waitTime; count1++) { second = time(NULL); for(count2 = 0; count2 < 0x10000; count2++); } }
15 : キーバッファを確認してあれば読み取り、余れば読み飛ばし、 6で右移動、4で左移動… あれ?「キーが離されて止まる」 ことが認識できない!? // キーボード入力 int getKey() { int result = 0; while(kbhit())result = getch(); return result; }
16 : // メイン int main( int argc , char *argv[]) { 〜〜〜初期化〜〜〜 while(true) { key = getKey(); if(key == 0x1b)break; 〜〜〜各種処理〜〜〜 wait(); } return 0; }
17 : //変数の宣言 int px, py;// パドルの位置 int pu ;// パドルの進行方向 // 座標系:256単位 = 全角1キャラクタ int bx, by;// ボールの位置 int bu, bv;// ボールの進行方向 int bs, bc;// ボールのスピードとウェイと用 int stock = 4;// ボールのストック char block[14][27] = {0};// ブロックテーブル int norma = 0;// 残りのブロック
18 : 連続投稿の制限あるんだな int x, y, key; displayCursor(0); clearScreen(); setColor(WHITE, WHITE); for(y=0; y<25; y++) { setCursorPos( 0, y); printf("■"); setCursorPos( 50, y); printf("■"); setCursorPos(y*2, 0); printf("■"); } for(y=0; y<6; y++)for(x=0; x<12; x++) { setColor(RED+y, RED+y); setCursorPos(x*4+2, y+3); printf("[##]"); block[x+1][y+3] = 1; norma++; } px = 26-4; py = 22; pu = 0; bx = 26; by = 21; bu = 1; bv = -1; bs = 4; bc = 0;
19 : // ボール移動 bc++; if(bc >= bs) { if(bx <= 2)bu = 1; if(bx >= 49)bu = -1; if(by <= 1)bv = 1; setColor(WHITE, BLACK); setCursorPos(bx, by); printf(" "); if(block[(bx+2+bu)/4][by]) { block[(bx+2+bu)/4][by] = 0; norma--; bs = norma/18 + 1; setColor(WHITE, BLACK); setCursorPos((bx+2+bu)/4*4-2, by); printf(" "); bu = -bu; }else bx += bu; if(block[(bx+2)/4][by+bv]) { block[(bx+2)/4][by+bv] = 0; norma--; bs = norma/18 + 1; setColor(WHITE, BLACK); setCursorPos((bx+2)/4*4-2, by+bv); printf(" "); bv = -bv; }else by += bv; bc = 0; } setColor(YELLOW, GREEN); setCursorPos(bx, by); printf("O");
20 : ブロックブロックー
21 : break( block );
22 : テトリスみたいに7行でつくれるんじゃねーの
23 : これでおしまい // クリア判定 if(norma <= 0) { setColor(WHITE, RED); setCursorPos(17, 12); printf("ALL CLEAR"); for(x=0; x<60; x++)wait(); break; }
24 : このプログラムはWindows98で入力したが、WindowsXPではやはりまともに うごかない。ansi.sys を適用させるため config.nt や command.com の ショートカットをいじってみたが効果なし。どうやらWin32コンソール用に コンパイルしたのがいけないらしい。 LSI C-86試食版を落としてきたのでこちらでコンパイルしようとしている。 これどうやって使うんだろ?
25 : コンパイルできないのは拡張子がcppになっていたからだった。 コメントに//が使えないとか、long型を使用すべき場所でint型を使って いたとか、問題が多発。全体的に修正しよう。
26 : さっそくWindowsXPで実行。しかし描画落ちしまくりでまともに映らない。 command.comを実行しただけでも、キーのレスポンスがものすごく悪い。 全画面化するとキー入力を全く受け付けない。 どういうこと?だれかHELP! cmd.exeは正常に動作している。
27 : 内部的には正常に動作しているっぽい。画面の更新が毎秒2〜3回しか 行われていないように見える。
28 : >>10 Win32のコンソールでやりたかったら、ここら辺を参考にしれ。 ttp://www.kumei.ne.jp/c_lang/intro/no_61.htm
29 : ゲ製作には珍しいC#スレかと思ったらなぜCばかり?
30 : >>29 >>1 がアフォだから
31 : private void MainForm_KeyDown(object sender, System.Windows.Forms.KeyEventArgs e) { if(e.KeyCode == Keys.NumPad4) { Pad.X -= 4; } if(e.KeyCode == Keys.NumPad6) { Pad.X += 4; } e.Handled = true; }
32 : >>28 API使っていいなら普通のウィンドウ出したほうが早いよ… ANSIでやりたかったんだ。でもありがとう。
33 : private void MainForm_Paint(object sender, System.Windows.Forms.PaintEventArgs e) { SolidBrush brushball = new SolidBrush(Color.Pink); e.Graphics.FillEllipse(brushball, Ball); SolidBrush brushpad = new SolidBrush(Color.Yellow); e.Graphics.FillRectangle(brushpad, Pad); }
34 : >>33 重そう
35 : せめて、bitbltくらい…
36 : 情報の少ないC#関連。だからage
37 : むずい
38 : (C#でブロック崩しを作るのは)難しい
39 : >>38 C#経験ないんだけど、Cと比較して難しいの?Javaみたいなモンじゃないの? OO慣れていればBasicやったりCで実装するより簡単なような気も。 SharpDevelop入れてみるかな。
40 : スプライトない時点で今時のパソコン言語なんざ団栗の背比べ
41 : OOPLなり構造化が考えられた言語なりあれば 往年のPCのスプライト的な実装作るのって そんなに手間かからんでしょ。 ドライバアクセスがこんなにラクなんだから。
42 : >>40 スプライトオヤジキタ━━━━━━(゚∀゚)━━━━━━!!!!
43 : スプライトを言語に掛けてるところがなんとも・・・w
44 : スプライト指向言語
45 : 2ゲトー!! ズザザザー
46 : まあテキスト画面が無いのはどうかと思う
47 : スプライターのいるスレはこちらですか?
48 : >>46 それはむしろエディット系コントロールとか作るときに不便
49 : 昔はハードウェアでコリジョン判定してたから速かった スプライトまんせー
50 : 最近は文字書くのにいちいちグラフィックで描くのな 消すのも背景色で塗りつぶさなくちゃいけないし FONTROM最強
51 : PC/ATも英語ならテキストモード持ってるYO!
52 : スプライトなどもはや時代遅れだ。 やはりPCGが最強。
53 : EGC は最凶
54 : >>13 あんた賢いな・・・
55 : ブリック崩しにオブジェクト指向は向かない
56 : クラス:キャラクタ プロパティ:位置 メソッド:描画 メソッド:移動(全キャラクタへの参照) メソッド:接触判定(キャラクタへの参照) クラス:ブロック プロパティ:ブロック種別 プロパティ:接触回数 クラス:玉 プロパティ:玉種別 クラス:パドル プロパティ:パドル種別 意外といけそうですが。
57 : 玉の動きけっこうむずいんだよね。 ブロックの角に当たったとき、もときた方向に もどるのはいいとして、ブロックがたくさん並んでいて 見た目平らな面のときは都合が悪い。せっかく穴に球が 入っていったのにすぐ戻ってきたりして。 あと、L字型に並んだブロックに対して三つ同時に ブロックに当たったとき跳ね返る方向とか。 その辺まで考えないで作れられてるブロック崩しの サンプルが以外と多い。
58 : ttp://ponk.jp/el/index.php?page=3 フリーのライブラリ使って結構手軽に作れる。 入門書一冊読んだ位でも十分理解できると思う。
59 : よーしManagedDirectX使っちゃうぞー
60 : >>57 玉は丸いので3つはあり得ません。
61 : 完成前に沈みそうなのであげ
62 : age
63 : M-DirectXでrogueもどきでもつくるか 3Dアルファベットの…
64 : WinRougeキタ━━━━━━(゚∀゚)━━━━━━ !!
65 : 採掘
66 : うーん
67 : >>13 わらた
68 : 文芸復興
69 : 上げんなチンカスゴミクズ
70 : >>33 もう少し軽くならないかな・・・
71 : くくく・・・ 無理だろう いくらansi.sys使って色変えても お前は見てしまったんだ、悪魔のcursesを お前はまた作りだすしかないんだヨ。
72 : >>63 どうせなら、日本語にしようぜ。
73 : ブロポンクローンを希望
74 : asm{ mov ax,13h int 10h }
75 : >>73 遊ぶだけならエミュでもいいんだろうけど やっぱWinネイティブでプレイしたいな。誰か作らんものか。
76 : .NETフレームワークいれなならんの?
77 : age
78 : http://members3.jcom.home.ne.jp/tama-t/block.exe >>56 を参考にして作ってみた。 ボールの動きに何かおかしい 所とか無いかな?誰かやってみてくだされ 重いかもしれないがスマソ Escで終了します
79 : てか2ヶ月前のスレかよこれ
80 : ,,,,,,,,,,,,,,,,,,,,,,,,,,,, ,,--―'''""`ヽ'  ̄`ヽ、 / ヾ / ~`ヽ / ヽ;:/""""ヾ ミ ヽ / ;:;;:::''''"""" \ i / / ヽ ヾヽ / / / ;/ ヾ ヽ / ;:;:ヽ ,,,,;;::'''''ヽ ;:| i / ,,,,;;::::::::::::::: ヽ ヽ | | | " :::: /\ ヾ ヽ | | ヾ | /\ ::::::. : | ;:| | ;:| : ::::::: : .、 | :| | ヽ ( ,--、 ,:"' | /|! | ヽ ヾ |;:/ | | __,-'ニニニヽ /| || `、ヽ ヾニ二ン" /;:| | ヽ \ /ノ | i `ー-::、_ ,,..-'|ヽ ヽ;:;:;:;: ;:人 `ー――'''''"~ / ヽ \;:;:;:;:/ `ー-、 ,.-'" \ー-、 ,.-'" :/ \ ,.-''" | / ! ~>、,.-''" | ,,..-‐'''"" ヾ ,.-''"――――-、 /
81 : おーいだれかCでブロック崩し
82 : おーいだれかCでブロック崩し
83 : >>81-82 >>13
84 : まだ作れんのか? 俺は昨日一日で作れたぞ
85 : C#で作ってみるか
86 : ちょっと作ってみたい。 今絵出す関数作るから待って〜。
87 : 跳ね返りがワカンネ
88 : 移動値にマイナス掛けろ
89 : とりあえず絵は出た。今入力関係作り中。 ブロック崩しを作りたい ttp://gamdev.org/w/?%5B%5B%A5%D6%A5%ED%A5%C3%A5%AF%CA%F8%A4%B7%A4%F2%BA%EE%A4%EA%A4%BF%A4%A4%5D%5D ここに丁寧な作例が。先は長いですね。
90 : 入力もなんとかできたので、ゲーム部分の製作に入る。 今ここ〜 ttp://gamdev.org/up/img/5196.png 早くもしんどくなってまいりました orz
91 : ttp://gamdev.org/up/img/5214.png 全然進んでないけど絵をうp サイズを決定して描画テストしただけ まだまだ動かない ∩(´Д`)∩
92 : ぶろっく多っ
93 : んー、ブロックとボールの判定がむずい orz ボールがブロックにHit → ボールの座標をHitしたブロックの隣に → 角度を逆に という流れなんだけど、 二番目のボールの座標調整が難しい・・
94 : http://gamdev.org/up/img/5273.png http://gamdev.org/up/img/5274.zip やっと意図どおり判定できたよ記念うp \(^o^)/ あとは隣接するブロックに同時に当たったときの処理をなんとかすれば、 最難関はクリアかな? >>92 余裕があれば、アイテムとか出して一気に消せるゲーム性にしたいんだけど、 今どうしようか迷い中w
95 : 誰が今時ブロック崩しなんかするんだよw
96 : 確かに私も絶対やらないww でも作る分には結構楽しいよー。
97 : 言語はC++だな? ボールがカプセル化されてる!
98 : 当たっても消えないことがあるのは仕様か? まあがんがれ。
99 : >>97 おお、なかなかするどい指摘! だけどだけど、実際のプログラムがカプセル化とは名ばかりの 穴だらけのクラス群で動いてることまでは見抜けまい! ( ̄ー ̄)b >>98 応援あり。消えないことがあるのは仕様ですw
100read 1read 1read 100read
TOP カテ一覧 スレ一覧 削除依頼 ▲
・ 次のスレ
今日から必死で〜 【一ヶ月】夏休みゲーム製作スレ【多分無理】 【サクーシャ】Yuuki! Novelスレッド【ガンガレ!!】 プロのゲーム製作者の個人サイトを晒してくだちい