どのようにしてその座標の情報を変えたらよいのかわかりません。
今の状態だと当然ながら、EMPTYという状態がすべて書き換わってしまいます
例えば、座標の(0,0)はボードの配列[0][0]ということなので、その場所だけの情報を変えたいです。
どのような記述をすればよいでしょうか?
#include "DxLib.h"
#define SCREEN_WIDIH 840
#define SCREEN_HEIGHT 640
#define CURSOR_MAX 480
#define BOARDSIZE 8
#define EMPTY 0
#define BLACK -1
#define WHITE 1
int key[256];
int gpUpdatekey()
{
char tmpkey[256]; //現在のキーの入力状態を格納
GetHitKeyStateAll(tmpkey); //すべてのキーの入力状態を得る
for (int i = 0; i < 256; ++i)
{
if (tmpkey[i] != 0)
{
++key[i];
}
else
{
key[i] = 0;
}
}
return 0;
}
struct Obj {
int x,
y,
w,
h,
Handle;
};
int board[BOARDSIZE][BOARDSIZE];
int boardGraph;
Obj black;
Obj white;
Obj cursor;
int turn;
int vec_y[] = { -1,-1,0,1,1,-1,0,-1 };
int vec_x[] = { 0,1,1,1,0,-1,-1,-1 };
//画像のロード
void Graph_Ini()
{
boardGraph = LoadGraph("画像/オセロ.bmp");
black.Handle = LoadGraph("画像/クロ駒.bmp");
white.Handle = LoadGraph("画像/シロ駒.bmp");
cursor.Handle = LoadGraph("画像/選択.png");
}
//盤面の初期化
void Board_Ini()
{
for (int y = 0; y < BOARDSIZE; ++y)
{
for (int x = 0; x < BOARDSIZE; ++x)
{
board[y][x] = EMPTY;
}
}
board[BOARDSIZE / 2 - 1][BOARDSIZE / 2] = BLACK; //[3][4]
board[BOARDSIZE / 2][BOARDSIZE / 2 - 1] = BLACK; //[4][3]
board[BOARDSIZE / 2][BOARDSIZE / 2] = WHITE; //[4][4]
board[BOARDSIZE / 2 - 1][BOARDSIZE / 2 - 1] = WHITE; //[3][3]
}
//カーソルの初期化
void Cursor_Ini()
{
cursor.x = 0;
cursor.y = 0;
}
//カーソルの移動
void Cursor_Move()
{
if (key[KEY_INPUT_RIGHT] == 1 && cursor.x <= CURSOR_MAX)
{
cursor.x += 80;
}
if (key[KEY_INPUT_LEFT] == 1 && cursor.x > 0)
{
cursor.x -= 80;
}
if (key[KEY_INPUT_UP] == 1 && cursor.y > 0)
{
cursor.y -= 80;
}
if (key[KEY_INPUT_DOWN] == 1 && cursor.y <= CURSOR_MAX)
{
cursor.y += 80;
}
}
//コマを置く処理
void PutPice()
{
for (int y = 0; y < BOARDSIZE; ++y)
{
for (int x = 0; x < BOARDSIZE; ++x)
{
if (board[y][x] == EMPTY && key[KEY_INPUT_Z] == 1)
{
board[y][x] = WHITE;
}
}
}
}
//盤面の表示
void Draw_Board()
{
//盤面
DrawGraph(0, 0, boardGraph, false);
//コマ
for (int y = 0; y < BOARDSIZE; ++y)
{
for (int x = 0; x < BOARDSIZE; ++x)
{
//ボードの情報がWHITEなら白コマが置かれる
if (board[y][x] == WHITE)
{
DrawGraph(80 * x, 80 * y, white.Handle, false);
}
//ボードの情報がBLACKなら黒コマが置かれる
if (board[y][x] == BLACK)
{
DrawGraph(80 * x, 80 * y, black.Handle, false);
}
}
}
//グリッド線を引く
for (int x = 0; x < 9; ++x)
{
DrawLine(80 * x, 0, 80 * x, SCREEN_HEIGHT, GetColor(255, 255, 255), true);
}
for (int y = 0; y < 9; ++y)
{
DrawLine(0, 80 * y, SCREEN_HEIGHT, 80 * y, GetColor(255, 255, 255), true);
}
//カーソル
DrawGraph(cursor.x, cursor.y, cursor.Handle,true);
}
int WINAPI WinMain(HINSTANCE,HINSTANCE,LPSTR,int)
{
ChangeWindowMode(TRUE), DxLib_Init(), SetDrawScreen(DX_SCREEN_BACK); //ウィンドウモード変更と初期化と裏画面設定
SetGraphMode(SCREEN_WIDIH, SCREEN_HEIGHT, 32);
Graph_Ini();
Cursor_Ini();
Board_Ini();
// while(裏画面を表画面に反映、メッセージ処理、画面クリア、キーの更新)
while(ScreenFlip() == 0 && ProcessMessage() == 0 && ClearDrawScreen() == 0 && gpUpdatekey() == 0) //無限ループ
{
//ここにゲームの処理を描く------------------------------------------------
Cursor_Move();
PutPice();
Draw_Board();
//----------------------------------------------------------------------
}
DxLib_End(); // DXライブラリ終了処理
return 0;
}