カーソルで選んだ場所にコマを置きたい

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
tonari
記事: 28
登録日時: 6年前

カーソルで選んだ場所にコマを置きたい

#1

投稿記事 by tonari » 6年前

void PutPice()の中で、選択した場所にコマを置きたいのですが、
どのようにしてその座標の情報を変えたらよいのかわかりません。
今の状態だと当然ながら、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;
}
 

アバター
みけCAT
記事: 6734
登録日時: 13年前
住所: 千葉県
連絡を取る:

Re: カーソルで選んだ場所にコマを置きたい

#2

投稿記事 by みけCAT » 6年前

tonari さんが書きました:どのような記述をすればよいでしょうか?
カーソルがある場所だけコマを置く記述をすればいいでしょう。
テストしていないので間違っているかもしれませんが、例えばこんな感じでしょうか?

コード:

//コマを置く処理
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 && 80 * x == cursor.x && 80 * y == cursor.y)
			{
				board[y][x] = WHITE;
			}
		}
	}
}
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

tonari
記事: 28
登録日時: 6年前

Re: カーソルで選んだ場所にコマを置きたい

#3

投稿記事 by tonari » 6年前

返信ありがとうございます。
その通りに書いたら行いたい処理ができました。
本当にありがとうございます。

返信

“C言語何でも質問掲示板” へ戻る