Skip to content

Instantly share code, notes, and snippets.

@yashihei
Created April 15, 2014 04:08
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save yashihei/10701298 to your computer and use it in GitHub Desktop.
Save yashihei/10701298 to your computer and use it in GitHub Desktop.
#include <iostream>
#include <vector>
#include <random>
class Board {
public:
Board() {
//容量確保
dat.resize(9);
for (int i = 0; i < 9; i++) {
dat[i].resize(9);
}
}
void init(int num) {
//param: 初期配置数値数
//ランダムに1~9の16個以上の数値を置く
for (int i = 0; i < num; i++) {
int x, y, n;
std::random_device rd;
x = rd() % 9;
y = rd() % 9;
n = (rd() % 9) + 1;
if (isEnablePutnum(x, y, n)) {
dat[x][y] = n;
} else {
i--;
}
}
}
void move() {
int x, y, n;
std::cin >> x >> y >> n;
if (isEnablePutnum(x, y, n)) {
dat[x][y] = n;
}
}
void draw() {
for (int x = 0; x < dat.size(); x++) {
for (int y = 0; y < dat[x].size(); y++) {
//xとyをあれする
if (dat[y][x] == 0) std::cout << ".";
else std::cout << dat[y][x];
}
std::cout << "\n";
}
}
private:
std::vector<std::vector<int> > dat;
void put(int x, int y, int n) {
}
bool isEnablePutnum(int x, int y, int n) {
//todo:ステージ外への入力は弾く
//3x3マス内の重複弾く
if (n < 1 || n > 9) {
//std::cout << "範囲外の数値です";
return false;
}
if (dat[x][y] != 0) {
//std::cout << "すでに入力されています\n";
return false;
}
for (int i = 0; i < 9; i++) {
if (dat[i][y] == n) {
// std::cout << "横に同じ数値があります\n";
return false;
}
}
for (int i = 0; i < 9; i++) {
if (dat[x][i] == n) {
// std::cout << "縦に同じ数値があります\n";
return false;
}
}
return true;
}
};
int main() {
Board board;
board.init(30);
while(true) {
board.draw();
board.move();
}
return 0;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment