Cでブロック崩しを作りたい
■ このスレッドは過去ログ倉庫に格納されています
03/12/08 00:21ID:YP9pjvLE
おしえてください
03/12/08 00:22ID:YP9pjvLE
#が消えました
03/12/08 00:50ID:XapCE/Zh
なにも知らない香具師に赤の他人が手取り足取り教えてくれたら
さぞかし楽な世の中であろう。
さぞかし楽な世の中であろう。
03/12/08 00:50ID:Rc2apOdK
7行で作れ!
03/12/09 07:57ID:I9RIreYv
貴様ら!ブロック崩し作るので見てください
http://pc.2ch.net/tech/kako/1004/10048/1004855513.html
http://pc.2ch.net/tech/kako/1004/10048/1004855513.html
03/12/11 14:39ID:FV1LIWex
ってか教えてくれってのよくあるが自分がどこまで知っててどこまでできるのかそれを言わないと
なにもわからないから教えようがないな
なにもわからないから教えようがないな
03/12/11 20:47ID:qHow8O8P
03/12/13 02:17ID:6XmZl8Hm
まずはテキストベースで作れ。
話はそれからだ。
話はそれからだ。
03/12/13 02:32ID:QNEM2G11
えーーー
10名前は開発中のものです。
03/12/16 11:49ID:AbmLxMwB 唐突にやってみたくなった。今日は一日ヒマだし挑戦してみるか…
1110
03/12/16 12:29ID:AbmLxMwB 表示位置を指定するには 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')
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')
03/12/16 12:48ID:X4Q7cl+/
16ビットアプリで作るのか。
いや、止めやしないが。
いや、止めやしないが。
13名前は開発中のものです。
03/12/16 12:49ID:Dm2m+BAd いやまておまいら。
「C」が言語のことだとは限らんぞ。
つまり、>>1が作りたいのは、こう↓だ。
CCCCCCCCCCCCCCCCCCCCCCCCC ←ブロック
CCCCCCCCCCCCCCCCCCCCCCCCC
CCCCCCCCCCCCCC CCCCCCC
C ←ボール
/
CCCCC ←バー
「C」が言語のことだとは限らんぞ。
つまり、>>1が作りたいのは、こう↓だ。
CCCCCCCCCCCCCCCCCCCCCCCCC ←ブロック
CCCCCCCCCCCCCCCCCCCCCCCCC
CCCCCCCCCCCCCC CCCCCCC
C ←ボール
/
CCCCC ←バー
1410
03/12/16 13:03ID:AbmLxMwB 速度の調整方法がわからない。やっつけで組んでみたがガタガタになる。
とりあえず後回しにしてロジックから組もう…
#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++);
}
}
とりあえず後回しにしてロジックから組もう…
#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++);
}
}
1510
03/12/16 13:13ID:AbmLxMwB キーバッファを確認してあれば読み取り、余れば読み飛ばし、
6で右移動、4で左移動… あれ?「キーが離されて止まる」
ことが認識できない!?
// キーボード入力
int getKey()
{
int result = 0;
while(kbhit())result = getch();
return result;
}
6で右移動、4で左移動… あれ?「キーが離されて止まる」
ことが認識できない!?
// キーボード入力
int getKey()
{
int result = 0;
while(kbhit())result = getch();
return result;
}
1610
03/12/16 13:53ID:AbmLxMwB // メイン
int main( int argc , char *argv[])
{
〜〜〜初期化〜〜〜
while(true)
{
key = getKey();
if(key == 0x1b)break;
〜〜〜各種処理〜〜〜
wait();
}
return 0;
}
int main( int argc , char *argv[])
{
〜〜〜初期化〜〜〜
while(true)
{
key = getKey();
if(key == 0x1b)break;
〜〜〜各種処理〜〜〜
wait();
}
return 0;
}
1710
03/12/16 14:49ID:AbmLxMwB //変数の宣言
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 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;// 残りのブロック
1810
03/12/16 19:27ID:AbmLxMwB 連続投稿の制限あるんだな
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;
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;
1910
03/12/16 19:31ID:AbmLxMwB // ボール移動
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");
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");
03/12/16 19:38ID:55g8ZfCO
ブロックブロックー
03/12/16 19:46ID:Uo9/VOQt
break( block );
03/12/16 20:09ID:a7/wgjw6
テトリスみたいに7行でつくれるんじゃねーの
2310
03/12/16 22:45ID:AbmLxMwB これでおしまい
// クリア判定
if(norma <= 0)
{
setColor(WHITE, RED);
setCursorPos(17, 12); printf("ALL CLEAR");
for(x=0; x<60; x++)wait();
break;
}
// クリア判定
if(norma <= 0)
{
setColor(WHITE, RED);
setCursorPos(17, 12); printf("ALL CLEAR");
for(x=0; x<60; x++)wait();
break;
}
2410
03/12/16 22:57ID:AbmLxMwB このプログラムはWindows98で入力したが、WindowsXPではやはりまともに
うごかない。ansi.sys を適用させるため config.nt や command.com の
ショートカットをいじってみたが効果なし。どうやらWin32コンソール用に
コンパイルしたのがいけないらしい。
LSI C-86試食版を落としてきたのでこちらでコンパイルしようとしている。
これどうやって使うんだろ?
うごかない。ansi.sys を適用させるため config.nt や command.com の
ショートカットをいじってみたが効果なし。どうやらWin32コンソール用に
コンパイルしたのがいけないらしい。
LSI C-86試食版を落としてきたのでこちらでコンパイルしようとしている。
これどうやって使うんだろ?
2510
03/12/17 00:09ID:pfCf+iQ3 コンパイルできないのは拡張子がcppになっていたからだった。
コメントに//が使えないとか、long型を使用すべき場所でint型を使って
いたとか、問題が多発。全体的に修正しよう。
コメントに//が使えないとか、long型を使用すべき場所でint型を使って
いたとか、問題が多発。全体的に修正しよう。
2610
03/12/17 00:24ID:pfCf+iQ3 さっそくWindowsXPで実行。しかし描画落ちしまくりでまともに映らない。
command.comを実行しただけでも、キーのレスポンスがものすごく悪い。
全画面化するとキー入力を全く受け付けない。
どういうこと?だれかHELP!
cmd.exeは正常に動作している。
command.comを実行しただけでも、キーのレスポンスがものすごく悪い。
全画面化するとキー入力を全く受け付けない。
どういうこと?だれかHELP!
cmd.exeは正常に動作している。
2710
03/12/17 00:42ID:pfCf+iQ3 内部的には正常に動作しているっぽい。画面の更新が毎秒2〜3回しか
行われていないように見える。
行われていないように見える。
03/12/17 01:05ID:C3C73JZv
03/12/17 12:14ID:USu6w+V3
ゲ製作には珍しいC#スレかと思ったらなぜCばかり?
03/12/17 21:10ID:C3C73JZv
03/12/30 20:08ID:vKDCLhIz
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;
}
{
if(e.KeyCode == Keys.NumPad4)
{
Pad.X -= 4;
}
if(e.KeyCode == Keys.NumPad6)
{
Pad.X += 4;
}
e.Handled = true;
}
03/12/31 10:20ID:1FVv67t8
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);
}
{
SolidBrush brushball = new SolidBrush(Color.Pink);
e.Graphics.FillEllipse(brushball, Ball);
SolidBrush brushpad = new SolidBrush(Color.Yellow);
e.Graphics.FillRectangle(brushpad, Pad);
}
03/12/31 11:11ID:lrTGEVSA
>>33
重そう
重そう
35名前は開発中のものです。
04/01/13 19:52ID:Pt4fK32M せめて、bitbltくらい…
36名前は開発中のものです。
04/01/13 23:24ID:gVPfZUgA 情報の少ないC#関連。だからage
04/01/19 09:00ID:65lFw0+/
むずい
38名前は開発中のものです。
04/01/20 17:59ID:R6008Bhw (C#でブロック崩しを作るのは)難しい
04/01/21 09:03ID:1BeIUSrO
40名前は開発中のものです。
04/01/22 12:43ID:ZFWypAZ0 スプライトない時点で今時のパソコン言語なんざ団栗の背比べ
04/01/22 17:21ID:viuBoj2b
OOPLなり構造化が考えられた言語なりあれば
往年のPCのスプライト的な実装作るのって
そんなに手間かからんでしょ。
ドライバアクセスがこんなにラクなんだから。
往年のPCのスプライト的な実装作るのって
そんなに手間かからんでしょ。
ドライバアクセスがこんなにラクなんだから。
04/01/22 20:04ID:cutdAgu4
>>40
スプライトオヤジキタ━━━━━━(゚∀゚)━━━━━━!!!!
スプライトオヤジキタ━━━━━━(゚∀゚)━━━━━━!!!!
04/01/22 22:05ID:IS3WpODp
スプライトを言語に掛けてるところがなんとも・・・w
04/01/23 21:40ID:tTds2/9p
スプライト指向言語
45名前は開発中のものです。
04/01/25 11:24ID:RsMxbw9n 2ゲトー!! ズザザザー
46名前は開発中のものです。
04/01/25 12:49ID:OzO634EJ まあテキスト画面が無いのはどうかと思う
04/01/25 13:55ID:hyKM2g2B
スプライターのいるスレはこちらですか?
04/01/26 10:59ID:S3/uC7m5
>>46
それはむしろエディット系コントロールとか作るときに不便
それはむしろエディット系コントロールとか作るときに不便
04/01/26 12:59ID:reTPUXlQ
昔はハードウェアでコリジョン判定してたから速かった
スプライトまんせー
スプライトまんせー
04/01/26 18:07ID:0Y9OAJKd
最近は文字書くのにいちいちグラフィックで描くのな
消すのも背景色で塗りつぶさなくちゃいけないし
FONTROM最強
消すのも背景色で塗りつぶさなくちゃいけないし
FONTROM最強
04/01/26 22:01ID:qnPUEFWD
PC/ATも英語ならテキストモード持ってるYO!
04/01/26 23:08ID:FFAkzKMp
スプライトなどもはや時代遅れだ。
やはりPCGが最強。
やはりPCGが最強。
04/01/30 08:44ID:n8YkP2Tj
EGC は最凶
04/01/31 00:23ID:rIH36sCb
>>13
あんた賢いな・・・
あんた賢いな・・・
55名前は開発中のものです。
04/02/08 16:52ID:4z3IB4nU ブリック崩しにオブジェクト指向は向かない
04/02/08 17:02ID:JCXudZiK
クラス:キャラクタ
プロパティ:位置
メソッド:描画
メソッド:移動(全キャラクタへの参照)
メソッド:接触判定(キャラクタへの参照)
クラス:ブロック
プロパティ:ブロック種別
プロパティ:接触回数
クラス:玉
プロパティ:玉種別
クラス:パドル
プロパティ:パドル種別
意外といけそうですが。
プロパティ:位置
メソッド:描画
メソッド:移動(全キャラクタへの参照)
メソッド:接触判定(キャラクタへの参照)
クラス:ブロック
プロパティ:ブロック種別
プロパティ:接触回数
クラス:玉
プロパティ:玉種別
クラス:パドル
プロパティ:パドル種別
意外といけそうですが。
57名前は開発中のものです。
04/02/08 18:43ID:2mWO52jY 玉の動きけっこうむずいんだよね。
ブロックの角に当たったとき、もときた方向に
もどるのはいいとして、ブロックがたくさん並んでいて
見た目平らな面のときは都合が悪い。せっかく穴に球が
入っていったのにすぐ戻ってきたりして。
あと、L字型に並んだブロックに対して三つ同時に
ブロックに当たったとき跳ね返る方向とか。
その辺まで考えないで作れられてるブロック崩しの
サンプルが以外と多い。
ブロックの角に当たったとき、もときた方向に
もどるのはいいとして、ブロックがたくさん並んでいて
見た目平らな面のときは都合が悪い。せっかく穴に球が
入っていったのにすぐ戻ってきたりして。
あと、L字型に並んだブロックに対して三つ同時に
ブロックに当たったとき跳ね返る方向とか。
その辺まで考えないで作れられてるブロック崩しの
サンプルが以外と多い。
58名前は開発中のものです。
04/02/09 01:19ID:WyPVuQOq ttp://ponk.jp/el/index.php?page=3
フリーのライブラリ使って結構手軽に作れる。
入門書一冊読んだ位でも十分理解できると思う。
フリーのライブラリ使って結構手軽に作れる。
入門書一冊読んだ位でも十分理解できると思う。
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 【野球】大谷翔平、WBC出場を表明! インスタグラムで発表 [冬月記者★]
- 🇺🇸🇨🇳米中関係は「極めて強固」とトランプ氏… ★3 [BFU★]
- きょう日米電話首脳会談で調整…トランプ大統領が中国・習主席との電話会談受け高市首相に説明か 台湾問題の認識は… [ぐれ★]
- 「ホストに貢ぎたい」と海外で売春する日本人女性 2カ月で2千万円稼ぐケースも [1ゲットロボ★]
- 【東京・足立の車暴走】赤信号無視か 危険運転致死傷疑いも視野に捜査 逮捕された職業不詳の男性(37)は精神疾患で通院歴も ★4 [ぐれ★]
- 「台湾有事」発言の高市早苗氏が首相である限り日本経済はボロボロになる 一刻も早く「ポスト高市」を真剣に議論すべきだ 古賀茂明氏 [少考さん★]
- 巨専】 松本剛 ★2
- ハム専 ありがとう、そしておめでとう松本剛
- 競輪実況★1610
- NFL 2025/26 week12 part 3
- とらせん IP
- NFL 2025/26 week12 part 2
- 【あっ…】トランプと習近平、ガッツリ握手。高市早苗、ガチで終了。 [153490809]
- 小野田大臣「山上はただのテロリスト」政府によってテロリスト公認 [245325974]
- トランプ、高市早苗に電話会談で説教へ「台湾の中国への復帰が国際秩序」「アメリカは重要性を理解している」 [329329848]
- トー横キッズ、海外売春旅行で2ヶ月で2,000万円荒稼ぎwwwwwwwwwwwwwwwwwwwww [329329848]
- 💕15歳アイドルのバースデーイベントが凄いと話題に✨ [153490809]
- 【悲報】日本人さん、高市早苗の台湾発言に「問題あり」と答えたのは僅か25% [522666295]
