ページ 1 / 1
ロジックを研究していますが・・・
Posted: 2009年5月15日(金) 11:01
by デジキャメ
ロジックを作りたいのですが、
セル表示に悩んでいます。
テキストやWEBでも検索していますが、
いまいち分からない状態です。
言語:C言語
目標・サイズ10×10
・時間制限あり
・完成したときのみクリアできる
Re:ロジックを研究していますが・・・
Posted: 2009年5月15日(金) 11:31
by kazuoni
お絵かきロジックですか?マ○オのピクロス的な?
>セル表示に悩んでいます。
printfでロジックの状態(0:□ 1:■)を表示すればいいのでは?
もう少し具体的な質問のほうが、求めている回答が得られるかも知れません。
Re:ロジックを研究していますが・・・
Posted: 2009年5月15日(金) 14:34
by デジキャメ
ご返信ありがとうございます。
マ○オのピ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のマスの初期状態
} ;
を用いて作成を考えていますが、表のようにできないです。
ほかの方法でないと作成(クリックで反転等)は不可能なのでしょうか?
Re:ロジックを研究していますが・・・
Posted: 2009年5月16日(土) 11:49
by toyo
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 ;
}
Re:ロジックを研究していますが・・・
Posted: 2009年5月16日(土) 13:01
by kazuoni
toyoさんもサンプルで使っていますが、
DXライブラリでのマウスクリック判定、座標位置取得はそれぞれ
GetMouseInput()
GetMousePoint()
があります。
Re:ロジックを研究していますが・・・
Posted: 2009年5月16日(土) 15:55
by デジキャメ
>toyoさん、 kazuoniさん
丁寧なご回答ありがとうございます。
マス表示の研究の参考にさせて頂きます。
Re:ロジックを研究していますが・・・
Posted: 2009年5月17日(日) 00:57
by たいちう
解決されたようですし、単なる戯言を。
プログラマにとって、ロジックとはアルゴリズムと同義語とは言えないけど、
それに近いような「論理」「論理学」などの英語の元の意味を連想します。
そこで最初の質問で「ロジックを作りたい」とあり、何のロジックか全く
書いてないあたりで、ぉぃぉぃ、と思ってしまいました。
しかし、パズルに造詣が深いプログラマである私としては、
目標として書かれた「サイズ10×10」「時間制限」「完成」等のキーワードで、
イラストロジックやお絵かきロジック、などを指していると気付きました。
質問の仕方がおかしいだろと思いましたが、指摘する以上の時間が取れず、
黙っていました。質問の不備を指摘するのは簡単ですが、質問の意図を
ほぼ確信できた以上は、できれば有効な回答を添えたいものですので。
放置している間に、ふと「ロジック」でググって見たところ、
なんと件のパズルが1位なんですね。きっとこのようにして言葉は
変わっていくんですね。質問者、ちっとも悪くねーじゃん。
とはいえ、英単語 logic は高校で習うくらいだし、質問者が大学生以上なら
少しは元の意味を考えてほしいかな。
いずれにしても、パズル好きが高じてプログラマになった私としては、
複雑な気分です。