ロジックを研究していますが・・・

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
デジキャメ

ロジックを研究していますが・・・

#1

投稿記事 by デジキャメ » 16年前

ロジックを作りたいのですが、
セル表示に悩んでいます。
テキストやWEBでも検索していますが、
いまいち分からない状態です。

言語:C言語

目標・サイズ10×10
  ・時間制限あり
  ・完成したときのみクリアできる

kazuoni

Re:ロジックを研究していますが・・・

#2

投稿記事 by kazuoni » 16年前

お絵かきロジックですか?マ○オのピクロス的な?

>セル表示に悩んでいます。
printfでロジックの状態(0:□ 1:■)を表示すればいいのでは?

もう少し具体的な質問のほうが、求めている回答が得られるかも知れません。

デジキャメ

Re:ロジックを研究していますが・・・

#3

投稿記事 by デジキャメ » 16年前

ご返信ありがとうございます。

マ○オのピOロスなものを研究しています。

作成までの計画は、=>基となるセル(マス)を作成する。
         =>絵を作ってみる。(ご指摘の通り□■および01を使用します)
         =>先画面を裏に格納する。(SetDrawScreen(DX_SCREEN_BACK) 等で表示させない)
         =>マスを、キー入力で(マスの)反転 □⇔■
         =>入力毎にチェックされ、裏の絵と一致したらゲームセット。
           その後はオリジナル版へ発展させる計画です。

ピクロスにとって不可欠な、表ですが    

int PixcellData[ PIXCELL_HEIGHT ][ PIXCELL_WIDTH ] =
{
{ 0, 0, 0, 0, 0},
{ 0, 0, 0, 0, 0},
{ 0, 0, 0, 0, 0},
{ 0, 0, 0, 0, 0},
{ 0, 0, 0, 0, 0}, //5*5のマスの初期状態
} ;
  
を用いて作成を考えていますが、表のようにできないです。

ほかの方法でないと作成(クリックで反転等)は不可能なのでしょうか?

toyo

Re:ロジックを研究していますが・・・

#4

投稿記事 by toyo » 16年前

DXライブラリで作られているのでしょうか
サンプルを作ってみました
#include "DxLib.h"
#define OFFSET_X (100) // 表示位置
#define OFFSET_Y (100)
#define PIXSIZE (16) // ピクセル1個の大きさ
#define PIXEL_HEIGHT (5) // ピクセルの行数
#define PIXEL_WIDTH (5) // ピクセルの列数

int MyDrawPixel(int x, int y, int color)
{
	int col[/url] = {GetColor(0,255,0), GetColor(0,0,255), GetColor(255,255,255)};
	int sx, sy;
	if (color < 0 || color > 2)
	{
		return -1;
	}
	if (x < 0 || x >= PIXEL_WIDTH)
	{
		return -2;
	}
	if (y < 0 || y >= PIXEL_HEIGHT)
	{
		return -3;
	}
	sx = OFFSET_X + x * PIXSIZE;
	sy = OFFSET_Y + y * PIXSIZE;
	DrawBox(sx, sy, sx + PIXSIZE - 1, sy + PIXSIZE - 1, col[colo[/url], TRUE);
	return 0;
}

int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow )
{
	// 完成図
	int PixelData[ PIXEL_HEIGHT ][ PIXEL_WIDTH ] =
	{
		{ 1, 1, 1, 1, 1},
		{ 0, 0, 1, 0, 0},
		{ 0, 0, 1, 0, 0},
		{ 0, 0, 1, 0, 0},
		{ 0, 0, 1, 0, 0},
	} ;
	// 作業用
	int WorkData[ PIXEL_HEIGHT ][ PIXEL_WIDTH ] = {0};
	int i, j;
	ChangeWindowMode(TRUE);
	if( DxLib_Init() == -1 )
	{
		 return -1;
	}
	// 初期画面表示
	for (i = 0; i < PIXEL_HEIGHT; i++)
	{
		for (j = 0; j < PIXEL_WIDTH; j++)
		{
			MyDrawPixel(j, i, 0);
		}
	}
	// マウスカーソルを表示状態にする
	SetMouseDispFlag(TRUE);
	while(!ProcessMessage())
	{
		int MouseX, MouseY;
		// マウス左クリック
		if((GetMouseInput() & MOUSE_INPUT_LEFT))
		{
			// マウスボタンを放すまで待つ
			while (GetMouseInput() & MOUSE_INPUT_LEFT);
			// マウスの位置を取得
			GetMousePoint(&MouseX, &MouseY);
			// マウス座標を配列値に変換
			MouseX = (MouseX - OFFSET_X) / PIXSIZE;
			MouseY = (MouseY - OFFSET_Y) / PIXSIZE;
			// ピクセルの状態を変更
			if (MouseX >= 0 && MouseX < PIXEL_WIDTH &&
				MouseY >= 0 && MouseY < PIXEL_HEIGHT)
			{
				WorkData[ MouseY ][ MouseX ]++;
				if (WorkData[ MouseY ][ MouseX ] > 2)
				{
					WorkData[ MouseY ][ MouseX ] = 0;
				}
				MyDrawPixel(MouseX, MouseY, WorkData[ MouseY ][ MouseX ]);
			}
		}
		// 一定時間待つ
		WaitTimer(100);
	}
	DxLib_End() ;
	return 0 ;
}

kazuoni

Re:ロジックを研究していますが・・・

#5

投稿記事 by kazuoni » 16年前

toyoさんもサンプルで使っていますが、
DXライブラリでのマウスクリック判定、座標位置取得はそれぞれ
GetMouseInput()
GetMousePoint()

があります。

デジキャメ

Re:ロジックを研究していますが・・・

#6

投稿記事 by デジキャメ » 16年前

>toyoさん、 kazuoniさん

丁寧なご回答ありがとうございます。

マス表示の研究の参考にさせて頂きます。

たいちう

Re:ロジックを研究していますが・・・

#7

投稿記事 by たいちう » 16年前

解決されたようですし、単なる戯言を。

プログラマにとって、ロジックとはアルゴリズムと同義語とは言えないけど、
それに近いような「論理」「論理学」などの英語の元の意味を連想します。
そこで最初の質問で「ロジックを作りたい」とあり、何のロジックか全く
書いてないあたりで、ぉぃぉぃ、と思ってしまいました。

しかし、パズルに造詣が深いプログラマである私としては、
目標として書かれた「サイズ10×10」「時間制限」「完成」等のキーワードで、
イラストロジックやお絵かきロジック、などを指していると気付きました。

質問の仕方がおかしいだろと思いましたが、指摘する以上の時間が取れず、
黙っていました。質問の不備を指摘するのは簡単ですが、質問の意図を
ほぼ確信できた以上は、できれば有効な回答を添えたいものですので。

放置している間に、ふと「ロジック」でググって見たところ、
なんと件のパズルが1位なんですね。きっとこのようにして言葉は
変わっていくんですね。質問者、ちっとも悪くねーじゃん。

とはいえ、英単語 logic は高校で習うくらいだし、質問者が大学生以上なら
少しは元の意味を考えてほしいかな。


いずれにしても、パズル好きが高じてプログラマになった私としては、
複雑な気分です。

閉鎖

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