Cでブロック崩しを作りたい
■ このスレッドは過去ログ倉庫に格納されています
なにも知らない香具師に赤の他人が手取り足取り教えてくれたら
さぞかし楽な世の中であろう。 ってか教えてくれってのよくあるが自分がどこまで知っててどこまでできるのかそれを言わないと
なにもわからないから教えようがないな >>6
心配するな。
ここは、>>1が立て逃げしたスレだ。 唐突にやってみたくなった。今日は一日ヒマだし挑戦してみるか… 表示位置を指定するには 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')
16ビットアプリで作るのか。
いや、止めやしないが。 いやまておまいら。
「C」が言語のことだとは限らんぞ。
つまり、>>1が作りたいのは、こう↓だ。
CCCCCCCCCCCCCCCCCCCCCCCCC ←ブロック
CCCCCCCCCCCCCCCCCCCCCCCCC
CCCCCCCCCCCCCC CCCCCCC
C ←ボール
/
CCCCC ←バー 速度の調整方法がわからない。やっつけで組んでみたがガタガタになる。
とりあえず後回しにしてロジックから組もう…
#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++);
}
} キーバッファを確認してあれば読み取り、余れば読み飛ばし、
6で右移動、4で左移動… あれ?「キーが離されて止まる」
ことが認識できない!?
// キーボード入力
int getKey()
{
int result = 0;
while(kbhit())result = getch();
return result;
} // メイン
int main( int argc , char *argv[])
{
〜〜〜初期化〜〜〜
while(true)
{
key = getKey();
if(key == 0x1b)break;
〜〜〜各種処理〜〜〜
wait();
}
return 0;
}
//変数の宣言
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;// 残りのブロック
連続投稿の制限あるんだな
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;
// ボール移動
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");
これでおしまい
// クリア判定
if(norma <= 0)
{
setColor(WHITE, RED);
setCursorPos(17, 12); printf("ALL CLEAR");
for(x=0; x<60; x++)wait();
break;
}
このプログラムはWindows98で入力したが、WindowsXPではやはりまともに
うごかない。ansi.sys を適用させるため config.nt や command.com の
ショートカットをいじってみたが効果なし。どうやらWin32コンソール用に
コンパイルしたのがいけないらしい。
LSI C-86試食版を落としてきたのでこちらでコンパイルしようとしている。
これどうやって使うんだろ? コンパイルできないのは拡張子がcppになっていたからだった。
コメントに//が使えないとか、long型を使用すべき場所でint型を使って
いたとか、問題が多発。全体的に修正しよう。 さっそくWindowsXPで実行。しかし描画落ちしまくりでまともに映らない。
command.comを実行しただけでも、キーのレスポンスがものすごく悪い。
全画面化するとキー入力を全く受け付けない。
どういうこと?だれかHELP!
cmd.exeは正常に動作している。 内部的には正常に動作しているっぽい。画面の更新が毎秒2〜3回しか
行われていないように見える。 >>10
Win32のコンソールでやりたかったら、ここら辺を参考にしれ。
ttp://www.kumei.ne.jp/c_lang/intro/no_61.htm ゲ製作には珍しいC#スレかと思ったらなぜCばかり? 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;
} >>28
API使っていいなら普通のウィンドウ出したほうが早いよ…
ANSIでやりたかったんだ。でもありがとう。 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);
} >>38
C#経験ないんだけど、Cと比較して難しいの?Javaみたいなモンじゃないの?
OO慣れていればBasicやったりCで実装するより簡単なような気も。
SharpDevelop入れてみるかな。 スプライトない時点で今時のパソコン言語なんざ団栗の背比べ OOPLなり構造化が考えられた言語なりあれば
往年のPCのスプライト的な実装作るのって
そんなに手間かからんでしょ。
ドライバアクセスがこんなにラクなんだから。 >>40
スプライトオヤジキタ━━━━━━(゚∀゚)━━━━━━!!!! スプライトを言語に掛けてるところがなんとも・・・w >>46
それはむしろエディット系コントロールとか作るときに不便 昔はハードウェアでコリジョン判定してたから速かった
スプライトまんせー 最近は文字書くのにいちいちグラフィックで描くのな
消すのも背景色で塗りつぶさなくちゃいけないし
FONTROM最強 スプライトなどもはや時代遅れだ。
やはりPCGが最強。 クラス:キャラクタ
プロパティ:位置
メソッド:描画
メソッド:移動(全キャラクタへの参照)
メソッド:接触判定(キャラクタへの参照)
クラス:ブロック
プロパティ:ブロック種別
プロパティ:接触回数
クラス:玉
プロパティ:玉種別
クラス:パドル
プロパティ:パドル種別
意外といけそうですが。
玉の動きけっこうむずいんだよね。
ブロックの角に当たったとき、もときた方向に
もどるのはいいとして、ブロックがたくさん並んでいて
見た目平らな面のときは都合が悪い。せっかく穴に球が
入っていったのにすぐ戻ってきたりして。
あと、L字型に並んだブロックに対して三つ同時に
ブロックに当たったとき跳ね返る方向とか。
その辺まで考えないで作れられてるブロック崩しの
サンプルが以外と多い。
ttp://ponk.jp/el/index.php?page=3
フリーのライブラリ使って結構手軽に作れる。
入門書一冊読んだ位でも十分理解できると思う。 M-DirectXでrogueもどきでもつくるか
3Dアルファベットの… WinRougeキタ━━━━━━(゚∀゚)━━━━━━ !! くくく・・・
無理だろう いくらansi.sys使って色変えても
お前は見てしまったんだ、悪魔のcursesを
お前はまた作りだすしかないんだヨ。 asm{
mov ax,13h
int 10h
} >>73
遊ぶだけならエミュでもいいんだろうけど
やっぱWinネイティブでプレイしたいな。誰か作らんものか。 http://members3.jcom.home.ne.jp/tama-t/block.exe
>>56を参考にして作ってみた。
ボールの動きに何かおかしい
所とか無いかな?誰かやってみてくだされ
重いかもしれないがスマソ
Escで終了します
,,,,,,,,,,,,,,,,,,,,,,,,,,,,
,,--―'''""`ヽ'  ̄`ヽ、
/ ヾ / ~`ヽ
/ ヽ;:/""""ヾ ミ ヽ
/ ;:;;:::''''"""" \ i
/ / ヽ ヾヽ
/ / / ;/ ヾ ヽ
/ ;:;:ヽ ,,,,;;::'''''ヽ ;:|
i / ,,,,;;::::::::::::::: ヽ ヽ
| | | " :::: /\ ヾ ヽ
| | ヾ | /\ ::::::. : | ;:|
| ;:| : ::::::: : .、 | :|
| ヽ ( ,--、 ,:"' | /|!
| ヽ ヾ |;:/
| | __,-'ニニニヽ /|
|| `、ヽ ヾニ二ン" /;:|
| ヽ \ /ノ
| i `ー-::、_ ,,..-'|ヽ
ヽ;:;:;:;: ;:人 `ー――'''''"~ / ヽ
\;:;:;:;:/ `ー-、 ,.-'" \ー-、
,.-'" :/ \ ,.-''" |
/ ! ~>、,.-''" |
,,..-‐'''"" ヾ ,.-''"――――-、 /
ちょっと作ってみたい。
今絵出す関数作るから待って〜。 とりあえず絵は出た。今入力関係作り中。
ブロック崩しを作りたい
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
ここに丁寧な作例が。先は長いですね。 入力もなんとかできたので、ゲーム部分の製作に入る。
今ここ〜
ttp://gamdev.org/up/img/5196.png
早くもしんどくなってまいりました orz ttp://gamdev.org/up/img/5214.png
全然進んでないけど絵をうp
サイズを決定して描画テストしただけ
まだまだ動かない ∩(´Д`)∩ んー、ブロックとボールの判定がむずい orz
ボールがブロックにHit → ボールの座標をHitしたブロックの隣に → 角度を逆に
という流れなんだけど、
二番目のボールの座標調整が難しい・・ http://gamdev.org/up/img/5273.png
http://gamdev.org/up/img/5274.zip
やっと意図どおり判定できたよ記念うp \(^o^)/
あとは隣接するブロックに同時に当たったときの処理をなんとかすれば、
最難関はクリアかな?
>>92
余裕があれば、アイテムとか出して一気に消せるゲーム性にしたいんだけど、
今どうしようか迷い中w 確かに私も絶対やらないww
でも作る分には結構楽しいよー。 当たっても消えないことがあるのは仕様か?
まあがんがれ。 >>97
おお、なかなかするどい指摘!
だけどだけど、実際のプログラムがカプセル化とは名ばかりの
穴だらけのクラス群で動いてることまでは見抜けまい! ( ̄ー ̄)b
>>98
応援あり。消えないことがあるのは仕様ですw アイテムは出さなくていいから、
ぶろポンみたくブロックにいろいろ個性を出して欲しいな(要望) ぶろっく崩しを作ろうとして挫折したんだが、
ブロックにぶつかった方向ってどういう理論でやりゃいいんだ?
玉の速度が上がるとめり込みすぎるし。 >>100
ぶろポンがうちで動きませんでした。
でも、もし多角形とかなら無理です ><
要望ありがとん。
>>101
めり込む前に調整しか無い気が。
私のもブロックよか移動値が大きくなるとめり込みますがw 玉に当たったブロックが、
当たった勢いで消えないでふわふわ漂い始めて、
もう一回当てると消える、
っていうアイディアが浮かんでしまった僕って
天才だと思う。 そうかな。
脱衣系なら必死になるから
調度いいかもw ttp://gamdev.org/up/img/5383.png
ttp://gamdev.org/up/img/5382.zip
ひさびさ途中経過うp
完成度30% アイテムはいまだ未実装。
あとは面作ってエフェクト強化してアイテム出して演出強化して絵を無理やり描いて・・
って、実はもうやめたくなってたりw
>>86から始めたから、もう20日以上たつのか。
あーあ。 >>108
乙です。自分もかれこれ2ヶ月程ブロック崩しを苦戦しながら
作ってるんですが、これは球の跳ね返り方が全く違和感が無くて
凄いと思った。
球がxキーで沢山出るのも球1つ1つをオブジェクトとして
扱っているからかな。
最近飽き気味ですが自分は今ブロック崩しで
こんなブロックを実装してるとこです。↓
上下左右の一方通行ブロック、球が1個でるブロック、
ローラーブロック(当たった方向に動くブロック)とか。
頑張ってください!! >>109
やぱブロックとの跳ね返りが一番難しかったですね。
てゆか、その峠を越えたらモチベーションがガクっと落ちたw
ボールの上下がブロックに同時に当たったらちょい挙動がおかしくなるのと、
隣接するブロックに見た目当たってるのに、消えないことがあるのは秘密。
ボールがいっぱい出るのは、単純にボールの構造体だかクラスだかをそのつど出してるだけです。
オブジェクト云々とかはわかりません ><
特殊ブロックは、私は出す予定ないのですが、
「当たった方向に動くブロック」ってのは鬼のように難しそうな予感。
こっちのモチベーションUPになるので、動くものがあるなら、できたら晒してちょ。
がむばってください ^^ void check(int &x,int &y,int xx,int yy)
{
if(! ボールが壁にめり込んだか? ) {
x += xx;
y += yy;
return;
}
if( ボールをX方向にのみ移動してあたったか ) {
yy *= -1;
y += yy; //縦に跳ね返り
}else if( ボールをY方向にのみ移動 ) {
xx *= -1;
x += xx; //横に跳ね返り
}else{
yy *= -1;
y += yy; //縦に跳ね返り
xx *= -1;
x += xx; //横に跳ね返り
}
}
> yy *= -1;
センセー!「yy = -yy;」の方がセクシーだと思います!! vxとかvy使わずに
ボールの進行方向ラジアンを反転させて計算したいんですけど 反射公式(度)
Θ’=2α−Θ
Θ’:反射後の角度 Θ:突入角
α :反射面の角度(水平は0、垂直は90) ttp://gamdev.org/up/img/5646.zip
ttp://gamdev.org/up/img/5644.png
ttp://gamdev.org/up/img/5645.png
とりあえず完成したのでうpします \(^o^)/
結構おばかなゲームになっちゃった。
5面しかないけど、まあいいや。
一ヶ月以上かかったけど、終わってしまえばあっという間だったわぁ。
↑のスクリーンショットと違う絵が出たり、
あからさまなバグがあったら報告よろしくお願いします m(__)m
音は出ません。 ちゃんと動きました。スコアは3306点。面白かった!!!
やってみて、自作のステージが作りたくなったので
ぜひステージエディタ作成のご検討を! プレイしてくださった人、ありがとうございます m(__)m
実はエディタはもうあったりしてw
ttp://gamdev.org/up/img/5714.png
ttp://gamdev.org/up/img/5713.zip
ただ、かなりいいかげんな作りになってますので、
ステージをパズル的に作りこんでいくのは難しいかもです。
あと、私の環境以外でsaveしたデータがloadできるかは未知数です。
てゆか、saveも超てきとーなので、loadできない環境は必ず存在します orz
ステージは>>115のは5面なのですが、今回はちょっと増やして8面にしてみました。
任意で増減はできませんので・・・
あと、ゲーム中キーボードのQを押すと
ブロック全消去して次のステージに進めるようにしてみました。 ↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
なでしこでインベーダーを作りたい
日本語だからわかりやすそう
とりあえず誰かよろしく
関連スレ
Cでブロック崩しを作りたい
http://pc8.2ch.net/test/read.cgi/gamedev/1070810517/l50 カーソルキーで操作できないので戸惑った。
期待してる。
気になったんだけど、Exeption型をcatchするのはまずいだろ
あと、再スローするときはcatch(Exception){throw;} の形式にする。eで受けちゃだめ。 例外を、単なる別のエラー処理技法のように扱ってはいけません。
エラー コードを返したり、グローバル変数の設定したりすることと
同レベルだと思ってはいけません。例外は、それを取り巻くコードの
構造と意味を、根底から覆します。例外は、プログラムの実行時
セマンティックを一時的に繋ぎ変え、通常実行しているコードを迂回し、
こういう状況でなければ決して実行されないコードを動作させます。
例外は、エラー状態を認知させ、プログラムの死という罰則を用いて
その状態を改めようとします。
このように、例外には単純なエラー処理を超えた特性があります。
これらの特性を必要としない、理解しない、あるいは文書化したく
ないなら、例外をスローしてはいけません。
例外以外のエラー処理技法を探してください。 >>126
マシンがしょぼくて初期化できない
ガ━━(゚Д゚;)━━━ン!! >>132
.NET Framework 2.0とDirectX9とManaged DirectXは入ってる? >>125
カーソルキー対応しますた。
>>127
ボール増やすテストみたいなw
>>128
まだゲームの処理かいてないからw
>>132
↓GDIで書いてみた、遅かったorz
http://gamdev.org/up/img/7457.zip 移動の軌跡が残るんですけど。
ってソース見たらClearがコメントじゃないですか
コメント外すと40fpsしかでなくなった。
つーか放っておくと編み物みたいなw ttp://gamdev.org/up/img/7495.zip
ちょっと進めてみた
XPの普通なインストールじゃないと音が見つからないから落ちると思う
それからパッドの反射がたまにおかしくなる。 時々、ボールが自機に張り付いて何十点か入るぞ。
c:\windowsは、Environment.ExpandEnvironmentVariablesでget汁 パドルの端で受けるとリバウンド繰り返して32点ゲットニダ ブロック崩しねえ…
じゃ、今度はインベーダーブロック崩しとかもやってくれ
>>115
久しぶりにはまったw
面白かったよ。
アイテムたくさんGetして、ブロックを破壊するのは爽快だね(o^-')b ブロック崩し作ったのですが、誰かソースを添削していただけますか
昨日から色々やってたらソースが大きくなりましたのでやめときます。 大きいソースってのは10万ステップクラスのことを言う。 __ ,,,,,,, - −ー―- 、
┌ー| ヽ、
/ .| ヽ、
/ .| ヽ
/ 〉 .ヽ
, '/ ! ハ ヽ り
,.' / !! ! ヽ |ヽ :::::! :: ::! ::',
/ / ! ! ! ヽ ! ヽ :::.! ::: :::::! :;
/ ,リ :::::::!.! ! ヽ ! ヽ ヽ ::! ::: :::::! :!
! ハ ::::::::::! ! .! ヽ .! ヽ ヾ、 ! :::: :::::! :!
! ; ! .::::::::::!__!」,,, ヾ__\__ヽ,,, :::::::::! .:::: ::::::! .:::',
レ' .! :::::! :::ヽ ヾ ミヽ ヽ ̄  ̄ヽ、ヽ`:::::::.! .:::: .::::/ :::::',
! :::!i ::::::::!《てソヽ "ソて)~ミミア .::: .:::::/:::: !:人ヽ
', ::! ',::::::::ヾ. r ';;ヘ " ヽ ;;;;;。ソy :::/ ..:::::メ:::::: !:::::!`-ゝ
',::!. ', ::::::::', ゝ彡゚ ゝー"/:::イ .::::メノ::::::リ、:::!
'ソ . ',从::::', , /// 彳' N:::リ ヽ:!
i! ヾ、:::ヽ ` /",/ /:::: ハ:リ ソ
ヾ:::!ゝ ヽつ u ,/,/:/:::::::::/ V
V 丶、 ,, - ":::::::レ'!:::::八 :l
` ーヾ!::::::::::::::: ,!ゝソ .V
イ ,!::::::: / \
, -'"/ ヘ ___/ .! !. \
, - '" // , ク-くヾ ! !:::::::::\
, - '" ,///イ ヽヽ // :::::::゙ -、_
ヾ;ン" 〉-、/ヽヽニ彡 ゙-、_
わたし…愛奴隷というのに、なってみようかと思うんですが♥ >>118
おもしろいブロック崩しゲームだった!実況みたいに作ったのか。ソースとかは公開していないのかな?誰か教えてー ^_^ ひさびさこの板きました。>>115を作ったものです。
やってくれた人ちょこちょこいらっしゃるようで、どもありがとございます m(__)m
とりあえず動かなかった報告は来てないようなのでよかった。
>>153
ゲームを公開してるのはこのスレだけなので、ここにのってる情報が全てです。
ただのブロック崩しなのに、ほめてくれてありがとうございます。感謝。 学校でLEDを使って16進でブロック崩しをしているのですが、rcketが消えなくて残ったままなのですが、どこが間違っているか指摘してください。
void my_rcket_put(char x, char y) //自分のrcketをvramに書き込む
{
led_dot (x, y, 1);
led_dot (x+1, y, 1);
led_dot (x+2, y, 1);
}
void my_rcket_clr(char x, char y) //自分のrcketをvramから消す
{
led_dot (x, y, 0);
led_dot (x+1, y, 0);
led_dot (x+2, y, 0);
}
void rcket_move(void)
{
my_rcket_clr (rcket_x, rcket_y);
if (key_left == 1) {
rcket_x--;
key_left = 0 ;
}
if (key_right == 1) {
rcket_x++;
key_right = 0 ;
}
my_rcket_put (rcket_x, rcket_y);
}
>>157
rcket_x,rcket_yはどこで定義されてるの? http://www.dotup.org/uploda/www.dotup.org1320.exe
2月の終わりごろからVC++触り始めて、3月からブロック崩し作ってました。
とりあえずは遊べるとこまで完成です。
岡田外務大臣キタ━━━━━━(゚∀゚)━━━━━━ !!!!!
http://qb5.2ch.net/test/read.cgi/saku2ch/1256630318/1
早く記念カキコしないと埋まっちゃうwww
逆に、最善のブロック崩壊そして、が、考えます。、
許してください、地元住民の糸の話、持っていってください。 #が消えたって書いてるじゃん
C#で書きたいんだろ 簡単にお金が稼げる方法興味ある人だけ見てください。
グーグル検索⇒『来島のモノノリウエ』
1GZ9E6D8QG メロン♪のマイページ
年齢
40代
性別
男性
投稿した質問
38
>
回答した質問
288
>
アリガト数
622
自己紹介
横浜に住んでます
ペットは パグのメロンちゃん ペキニーズの チョコちゃんが居ます
趣味はオナニー♪筋トレ スポーツ バイク ドライブ 釣り ゲーム ネット 料理 などなど
性格はノンビリのマイペースな性格です。
貧乏人ですが♪よろしくお願いします♪
こいつが低所得サクラの糖尿病ハゲ豚メロン笑 ■ このスレッドは過去ログ倉庫に格納されています