イラストロジックについて

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

イラストロジックについて

#1

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

イラストロジック(ピクロス)を作成していますが、下記の段階まで進んでいます。

・表をクリックで反転可
・マスの周りを白くする(ウインドウとマス目との境界を作る)
・各々マスの境界を作る

ですが、判定条件(毎回判定し、完成図と一致でクリア)と削るマスの数字入力の仕方が
分からなく、悩んでいます。


どうすれば解決できるか、宜しくお願い致します。

#include "DxLib.h"
#define SET_X (100)
#define SET_Y (100)
#define SIZE (26) //1ピクセル(1マスの)大きさ
#define size (300)
#define PI_H (10)
#define PI_W (10)

int MyDrawPixel(int x, int y, int color){
int col[/url] = {GetColor(0,0,0), GetColor(255,255,255)};
int sx, sy;

if (color < 0 || color > 1) {return -1;}
sx = SET_X + x*SIZE; sy = SET_Y + y*SIZE;
DrawBox(sx, sy, sx + SIZE-1, sy+SIZE-1, col[colo[/url], TRUE);
return 0;//終了
}

int MyDrawPi(int x, int y, int color){
int col[/url] = {GetColor(255,255,255)};
int sx, sy;

if (color < 0 || color > 1) {return -1;}
sx = SET_X; sy = SET_Y;
DrawBox(80, 80, 80 + size-1, 80+size-1, col[colo[/url], TRUE);
return 0;//終了
}

int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nCmdShow){
int col[/url] = {GetColor(255,255,255)};

ChangeWindowMode(TRUE);
if(DxLib_Init() == 1){
return 1;
}
int PixelData[PI_H][PI_W] = //完成図は「→」
{{0,0,0,0,0,1,0,0,0,0},
{0,0,0,0,0,1,1,0,0,0},
{0,0,0,0,0,0,1,1,0,0},
{0,0,0,0,0,0,1,1,1,0},
{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,1,1,1,0},
{0,0,0,0,0,0,1,1,0,0},
{0,0,0,0,0,1,1,0,0,0},
{0,0,0,0,0,1,0,0,0,0},};
int WorkData[PI_H][PI_W] = {1}, i, j;

for(i=0; i<1; i++){
for(j=0; j<1; j++){
MyDrawPi(j, i, 1);//x, y, color
}
}
for(i=0; i<PI_H; i++){
for(j=0; j<PI_W; j++){
MyDrawPixel(j, i, 1);//x, y, color
}
}
SetMouseDispFlag(TRUE);
while(!ProcessMessage()){
int MouseX, MouseY;

if((GetMouseInput() & MOUSE_INPUT_LEFT)){
while (GetMouseInput() & MOUSE_INPUT_LEFT);
GetMousePoint(&MouseX, &MouseY); MouseX = (MouseX-SET_X) / SIZE;
MouseY = (MouseY-SET_Y) / SIZE;
if(MouseX >= 0 && MouseX < PI_W && MouseY >= 0 && MouseY < PI_H){
WorkData[MouseY][MouseX]++;
if(WorkData[MouseY][MouseX] > 1){
WorkData[MouseY][MouseX] = 0;
}
MyDrawPixel(MouseX, MouseY, WorkData[MouseY][MouseX]);
}
}
//if(WorkData[MouseY][MouseX]== PixelData[PI_H][PI_W])
// break;
}
printf("Game Clear!!");//クリア表示する

DxLib_End();//mainの終了
return 0;//終了
}

toyo

Re:イラストロジックについて

#2

投稿記事 by toyo » 16年前

クリアのチェックはPixelDataとWorkDataを全部比較して一致してるか調べればいいでしょう
forの2重ループで比較してもいいしmemcmpで比較してもいいでしょう
if (memcmp(PixelData, WorkData, sizeof(int) * PI_H * PI_W) == 0) {
    break;
}

たいちう

Re:イラストロジックについて

#3

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

数字入力部分も作成するのは、プログラムの手間がかかる割に、
使いやすいものができないのではないかと思います。
まずはテキストファイルから問題を読み込んで表示するものを作成してはいかがか。

デジキャメ

Re:イラストロジックについて

#4

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

返信が遅れました。

TOYOさん、たいほうさん、アドバイスありがとうございます。

上記の方法で作成してみます。

デジキャメ

Re:イラストロジックについて

#5

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

判定条件を成立させることができました。


次は、テキストファイルで作成してみます。


TOYOさん、たいちうさんありがとうございました。

閉鎖

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