MapDataの1に当たった場合ボールが跳ね返るようにしたいです。
もしよかったら文章だけでなく、例も載せてください。
よろしくお願いします。
#include "DxLib.h"
#include <math.h>
#define SCREEN_WIDTH (640) // 画面の横幅
#define SCREEN_HEIGHT (480) // 画面の縦幅
#define MAP_PIXEL_WIDTH (1280)
#define MAP_PIXEL_HEIGHT (480)
#define CHIP_SIZE (32) // 一つのチップのサイズ
#define MAP_WIDTH ( MAP_PIXEL_WIDTH / CHIP_SIZE) // マップの横幅
#define MAP_HEIGHT (MAP_PIXEL_HEIGHT / CHIP_SIZE) // マップの縦幅
int DrawF(int x, int y, int color)
{
DrawCircle(x, y, 10, color, TRUE);
return 0;
}
char MapData[MAP_HEIGHT][MAP_WIDTH] =
{
{ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 },
{ 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1 },
{ 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1 },
{ 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1 },
{ 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1 },
{ 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1 },
{ 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1 },
{ 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1 },
{ 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1 },
{ 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1 },
{ 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1 },
{ 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1 },
{ 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1 },
{ 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1 },
{ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 },
};
int WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int)
{
int i, j;
int x = 300, y = 0;
int x_direction = 0;//x方向を表す変数
int y_direction = 0;//y方向を表す変数
//ウィンドウモードに設定
ChangeWindowMode(TRUE);
//背景の色を指定
SetBackgroundColor(255, 255, 255);
//DXライブラリを初期化
DxLib_Init();
//描画処理
SetDrawScreen(DX_SCREEN_BACK);
while (1)
{
ClsDrawScreen();
if (x_direction == 0) {
x = x + 3;
}
else {
x = x - 3;
}
if (y_direction == 0) {
y = y + 3;
}
else {
y = y - 3;
}
if (x >= SCREEN_WIDTH) {
x_direction = 1;
}
if (x <= 0) {
x_direction = 0;
}
if (y >= SCREEN_HEIGHT) {
y_direction = 1;
}
if (y <= 0) {
y_direction = 0;
}
for (i = 0; i < MAP_HEIGHT; i++)
{
for (j = 0; j < MAP_WIDTH; j++)
{
// 1は当たり判定チップを表しているので1のところだけ描画
if (MapData[i][j] == 1)
{
DrawBox(j * CHIP_SIZE, i * CHIP_SIZE,
j * CHIP_SIZE + CHIP_SIZE, i * CHIP_SIZE + CHIP_SIZE,
GetColor(0, 0, 0), TRUE);
}
}
}
//ランダムな位置,色で「F」を表示
DrawF(x, y, GetColor(rand() % 255, rand() % 255, rand() % 255));
//DrawF(x, y, GetColor(0, 255, 255));
if (CheckHitKey(KEY_INPUT_ESCAPE) == 1)
break;
ScreenFlip();
}
WaitKey();
DxLib_End();
return 0;
}