/////////////////////////////////////////////////////////////////////////////// // ブロック崩し #include "el.h" #define MAIN_SCREEN 1 void MainScreen(void); DDOBJ block; // ブロック DDOBJ pad; // パドル DDOBJ ball; // ボール bool bf[5][10]; // ブロックがあるかどうか(true:ある false:ない) /////////////////////////////////////////////////////////////////////////////// // メイン関数 int elMain("ブロック崩し"); { elWindow(640, 480, TRUE); elLoop() { elSetScreen(MAIN_SCREEN,MainScreen()); } elExitMain(); } /////////////////////////////////////////////////////////////////////////////// // ウインドウ生成関数 void elCreate(void) { elDraw::Screen(640, 480); // 各ビットマップ読み込み block = elDraw::LoadObject("block.bmp"); pad = elDraw::LoadObject("pad.bmp"); ball = elDraw::LoadObject("ball.bmp"); // 初期状態のブロックをセット for (int y = 0; y < 5; y++) { for (int x = 0; x < 10; x++) { if (x == 0 || x == 9 || y == 0) bf[y][x] = false; else bf[y][x] = true; } } elCallScreen(MAIN_SCREEN); } /////////////////////////////////////////////////////////////////////////////// // キーボード関数 void elKeyboard(void) { case VK_ESCAPE: { elDraw::Exit(); break; } elExitKeyboard(); } /////////////////////////////////////////////////////////////////////////////// // イベント関数 long elEvent(void) { elExitEvent(); } /////////////////////////////////////////////////////////////////////////////// // メイン画面 void MainScreen(void) { static int bx = 50, by = 160; // ボールの中央座標 static int ax = 1, ay = 4; // ボールの速度 static int px = 0; // パドルのx座標 static int score = 0; // 得点 static bool over = false; // ゲームオーバーなら true int x, y; elDraw::Clear(); // パドル移動 px = MousePX; // パドルの座標はマウスのx座標 if (px > 640 - 128) px = 640 - 128; // ボール移動 bx += ax; by += ay; if (bx < 0) {bx = 0; ax = -ax;} else if (bx > 640) {bx = 640; ax = -ax;} if (by < 0) {by = 0; ay = -ay;} else if (by > 480) over = true; // 画面下でゲームオーバー // パドル当たり判定 if (by >= 420 && by < 420 + 16 && bx >= px && bx < px + 128) { by = 420; ay = -ay; ax = (bx - px) / 16 - 4; if (ax >= 0) ax++; } // ブロック当たり判定 int x2 = bx / 64, y2 = by / 32; if (y2 < 5 && bf[y2][x2]) { bf[y2][x2] = false; int x3 = bx % 64; int y3 = by % 32; if (x3 < 4 || x3 >= 64 - 4) ax = -ax; if (y3 < 4 || y3 >= 32 - 4) ay = -ay; score++; } // 表示 for (y = 0; y < 5; y++) { for (x = 0; x < 10; x++) { if (bf[y][x]) elDraw::Layer(x * 64, y * 32, block, 0, 0, 64, 32); } } elDraw::Layer(bx - 8, by - 8, ball, 0, 0, 16, 16); elDraw::Layer(px, 420, pad, 0, 0, 128, 16); SHOW2(0, 450, "スコア : %d", score * 10); elDraw::Refresh(); if (over) { elSystem::Message("ゲームオーバー"); elDraw::Exit(); } if (score >= 32) { elSystem::Message("ゲームクリア!"); elDraw::Exit(); } }