DrawLogic.cpp
#include "DrawLogic.h"
void DrawLogic::getCol(Square square, int colNum, Square::scaleStatus result[Square::yScaleLen?]) {
for(int y=Square::yScaleMin; y<=Square::yScaleMax; y++) { result[y- Square::yScaleMin] = square.get(colNum - Square::xScaleMin,y - Square::yScaleMin); }
} /* void DrawLogic::getCol(Square::scaleStatus square[Square::xScaleLen?][Square::yScaleLen?] ,
int colNum, Square::scaleStatus result[Square::yScaleLen]) {
for(int y=Square::yScaleMin; y<=Square::yScaleMax; y++) { result[y- Square::yScaleMin] = square[colNum - Square::xScaleMin][y - Square::yScaleMin]; }
}
void DrawLogic::getRow(Square::scaleStatus square[Square::xScaleLen?][Square::yScaleLen?] ,int rowNum, Square::scaleStatus result[Square::xScaleLen?]) {
for(int x=Square::xScaleMin; x<=Square::xScaleMax; x++) { result[x- Square::xScaleMin] = square[x - Square::xScaleMin][rowNum - Square::yScaleMin]; }
}
void DrawLogic::getColCond?(int colCond[Square::xScaleLen?][Square::condLen] ,
int colNum, int result[Square::condLen]) {
for(int i=0; i<Square::condLen; i++) { result[i] = colCond[colNum - Square::xScaleMin][i]; }
} void DrawLogic::getRowCond?(int rowCond[Square::yScaleLen?][Square::condLen] ,
int rowNum, int result[Square::condLen]) {
for(int i=0; i<Square::condLen; i++) { result[i] = rowCond[rowNum - Square::yScaleMin][i]; }
}
void DrawLogic::printCol(Square square) {
printf("print getCol \n");
for(int x=Square::xScaleMin; x<=Square::xScaleMax; x++) { for(int y=Square::yScaleMin; y<=Square::yScaleMax; y++) { printf("%d",square.get(x - Square::xScaleMin,y - Square::yScaleMin)); } printf("\n"); }
}
void DrawLogic::printRow(Square square) {
printf("print getRow \n"); for(int y=Square::yScaleMin; y<=Square::yScaleMax; y++) { Square::scaleStatus row[Square::xScaleLen];
for(int x=Square::xScaleMin; x<=Square::xScaleMax; x++) { printf("%d",square.get(x - Square::xScaleMin,y - Square::yScaleMin)); } printf("\n"); }
}
int DrawLogic::getMinXLen(Square::scaleStatus column[Square::xScaleLen?],
int cond[Square::condLen]) { int pos = Square::xScaleMin;
int result = 0;
for(int i=0; i<Square::condLen; i++) { if(cond[i] == 99) break;
result += cond[i];
if(i > 0) { result++; } }
return result;
}
void DrawLogic::sub() {
// 盤の初期化 printf("init init Square \n"); Square::scaleStatus square[Square::xScaleLen][Square::yScaleLen]; printf("bbbbbbbb \n"); Square sq; //initSquare2(sq) NG; // //void DrawLogic::initSquare2(Square square) { // square.init(); //} sq.init();
printf("init Condition \n"); // 条件の初期化 //-99 条件要素の終了 int colCond[Square::xScaleLen][Square::condLen] = {{1,99,99},{3,1,99},{1,1,99},{5,99,99},{1,99,99}}; int rowCond[Square::yScaleLen][Square::condLen] = {{1,1,99},{5,99,99},{1,1,99},{1,99,99},{3,99,99}};
printf("start stuff col \n"); // column方向の埋め込み開始 for(int y=Square::yScaleMin; y<=Square::yScaleMax; y++) { int pos = Square::xScaleMin; int cond = rowCond[y-Square::yScaleMin][0]; printf("cond : %d \n",cond);
int r = pos + cond - Square::xScaleMin; int l = Square::xScaleMax - cond + Square::xScaleMin; printf("r=%d : l=%d \n",r,l);
if(r >= l) { for(int x=l; x<=r; x++) { sq.set(x-Square::xScaleMin,y-Square::yScaleMin); } } }
printf("start stuff row \n"); // row方向の埋め込み開始 for(int x=Square::xScaleMin; x<=Square::xScaleMax; x++) { int pos = Square::yScaleMin; int cond = colCond[x-Square::xScaleMin][0]; printf("cond : %d \n",cond);
int r = pos + cond - Square::yScaleMin; int l = Square::yScaleMax - cond + Square::yScaleMin; printf("r=%d : l=%d \n",r,l);
if(r >= l) { for(int y=l; y<=r; y++) { sq.set(x-Square::xScaleMin,y-Square::yScaleMin); } } }
printf("print square result \n"); //結果表示 for(int y=Square::yScaleMin; y<=Square::yScaleMax; y++) { for(int x=Square::xScaleMin; x<=Square::xScaleMax; x++) { printf("%d\t",sq.get(x-Square::xScaleMin,y-Square::yScaleMin)); } printf("\n"); }
printCol(sq); printRow(sq);
printf("print getMinXLen \n"); for(int x=Square::xScaleMin; x<=Square::xScaleMax; x++) { Square::scaleStatus col[Square::yScaleLen]; //getCol(square, x, col); getCol(sq, x, col);
int cond[Square::condLen]; getColCond(colCond ,x , cond);
int min = getMinXLen(col, cond); printf("%d \n",min); }
}
void main() {
DrawLogic d; d.sub();
}
#include <stdio.h>
#include "Square.h"
class DrawLogic {
public: void getCol(Square square,int colNum, Square::scaleStatus result[Square::yScaleLen]); //void getCol(Square::scaleStatus square[Square::xScaleLen][Square::yScaleLen] ,int colNum, Square::scaleStatus result[Square::yScaleLen]);
void getRow(Square::scaleStatus square[Square::xScaleLen][Square::yScaleLen] ,int rowNum, Square::scaleStatus result[Square::xScaleLen]);
void getColCond(int colCond[Square::xScaleLen][3] ,int colNum, int result[Square::condLen]);
void getRowCond(int rowCond[Square::yScaleLen][3] ,int rowNum, int result[Square::condLen]);
void printCol(Square square); void printRow(Square square); int getMinXLen(Square::scaleStatus column[Square::xScaleLen], int cond[3]); void DrawLogic::sub();
};
Square.h
#include <stdio.h>
class Square {
public: static const int xScaleMin = 1; static const int yScaleMin = 1; static const int xScaleMax = 5; static const int yScaleMax = 5; static const int xScaleLen = xScaleMax - xScaleMin + 1; static const int yScaleLen = yScaleMax - yScaleMin + 1; static const int condLen = 3;
static int getXScaleMin(); static int getYScaleMin(); static int getXScaleMax(); static int getYScaleMax(); static int getXScaleLen(); static int getYScaleLen(); static int getCondLen();
//protected: typedef enum _scaleStatus { unknown = 0, //空白、未決定状態 white = 1, //区切り、決定状態 black = 2 //塗りつぶし、決定状態 } scaleStatus;
private: scaleStatus field[xScaleLen][yScaleLen];
public: void init();
void set(int x,int y); scaleStatus get(int x,int y);
};
Square.cpp
#include "Square.h"
int Square::getXScaleMin?() { return Square::xScaleMin?; } int Square::getYScaleMin?() { return Square::yScaleMin?; } int Square::getXScaleMax?() { return Square::xScaleMax?; } int Square::getYScaleMax?() { return Square::yScaleMax?; } int Square::getXScaleLen?() { return Square::xScaleLen?; } int Square::getYScaleLen?() { return Square::yScaleLen?; } int Square::getCondLen?() { return Square::condLen; }
void Square::init() {
printf("*********************************************** \n"); printf("Square::init \n"); printf("*********************************************** \n"); for(int y=getYScaleMin(); y<=getYScaleMax(); y++) { for(int x=getXScaleMin(); x<=getXScaleMax(); x++) { field[x-xScaleMin][y-yScaleMin] = unknown; } }
for(int y=Square::yScaleMin; y<=Square::yScaleMax; y++) { for(int x=Square::xScaleMin; x<=Square::xScaleMax; x++) { printf("%d\t",get(x-Square::xScaleMin,y-Square::yScaleMin)); } printf("\n"); }
}
Square::scaleStatus Square::get(int x,int y) {
return field[x][y];
} void Square::set(int x,int y) {
printf("Square::set x,y: %d , %d \n",x,y); field[x][y] = black;
}