/*
Sudo Game 4*4
*/
#include<iostream>
#include<iomanip>
#include<ctype.h>
using namespace std;
#define size 4
struct Node
{
int value;
};
void init(Node a[size][size])
{
for(int i=1;i<=size;i++)
{
for(int j=1;j<=size;j++)
{
a[i][j].value = 0;
}
}
}
bool CheckRow(Node a[size][size])
{
for(int i=1;i<=size;i++)
{
for(int j=1;j<=size;j++)
{
for(int k=j+1;k<=size;k++)
{
if( a[i][j].value == a[i][k].value )
return false;
}
}
}
return true;
}
bool CheckColumn(Node a[size][size])
{
for(int i=1;i<=size;i++)
{
for(int j=1;j<=size;j++)
{
for(int k=i+1;k<=size;k++)
{
if( a[i][j].value == a[k][j].value )
return false;
}
}
}
return true;
}
void block(Node a[size][size] , Node buf[] , int row , int col)
{
int count = 1;
for(int i = row;i<row+2;i++)
{
for(int j = col;j<col+2;j++)
{
buf[count].value = a[i][j].value;
count++;
}
}
}
void Check(bool &ans , Node buf[])
{
for(int i=1;i<size;i++)
{
for(int j=i+1;j<=size;j++)
{
if( buf[i].value == buf[j].value )
ans = false;
}
}
}
bool CheckBlock(Node a[size][size])
{
bool ans = true;
Node buf[size];
block(a,buf,1,1);
Check(ans,buf);
block(a,buf,1,3);
Check(ans,buf);
block(a,buf,3,1);
Check(ans,buf);
block(a,buf,3,3);
Check(ans,buf);
return ans;
}
void draw()
{
cout<<"座標位置: "<<endl<<endl;
cout<<"------------------------------------------"<<endl;
for(int i=1;i<=size;i++)
{
cout<<"| ";
for(int j=1;j<=size;j++)
{
cout<<" ("<<i<<" , "<<j<<") |";
}
cout<<endl<<"------------------------------------------"<<endl;
}
}
void print(Node a[size][size])
{
cout<<endl<<"=========================================="<<endl<<endl;
cout<<"Your Answer: "<<endl<<endl;
cout<<"-----------------"<<endl;
for(int i=1;i<=size;i++)
{
cout<<"|";
for(int j=1;j<=size;j++)
{
cout<<" "<<a[i][j].value<<" |";
}
cout<<endl<<"-----------------"<<endl;
}
}
void drawAns(Node a[size][size])
{
cout<<"-----------------"<<endl;
for(int i=1;i<=size;i++)
{
cout<<"|";
for(int j=1;j<=size;j++)
{
cout<<" "<<a[i][j].value<<" |";
}
cout<<endl<<"-----------------"<<endl;
}
}
void Input(Node a[size][size])
{
char x,y,ans;
int row,col,Ans;
bool input = true;
while(input)
{
cout<<endl<<"請輸入答案( X座標 Y座標 答案 ) 輸入完畢請按 Y: ";
cin>>x;
if( x=='y' || x=='Y' )
break;
cin>>y>>ans;
if( isalpha(x) || isalpha(y) || isalpha(ans) )
cout<<endl<<"錯誤輸入 請重新輸入"<<endl;
else
{
row = (int)x-48;
col = (int)y-48;
Ans = (int)ans-48;
if( row>4 || col>4 || row<1 || col<1 || Ans<1 || Ans>4 )
cout<<endl<<"輸入範圍錯誤 請重新輸入"<<endl;
else
{
a[row][col].value = Ans;
}
}
drawAns(a);
}
}
void printAns(bool Ans)
{
if(Ans)
cout<<endl<<"congratulations!!"<<endl<<endl<<"你答對了"<<endl;
else
cout<<endl<<"Sorry!!"<<endl<<endl<<"你答錯了"<<endl;
}
void main()
{
Node a[size][size];
bool Ans = false;
init(a);
draw();
Input(a);
print(a);
if( CheckRow(a) && CheckColumn(a) && CheckBlock(a) )
Ans = true;
printAns(Ans);
system("PAUSE");
}
執行結果:
答對圖
輸入時可以檢視輸入答案
x & y 座標 & 輸入答案 範圍有錯誤時的檢測
輸入字元檢測
答錯圖
雞仔昨天聽到同學說他有寫數獨
感覺很有趣
之前都只有玩過而已
就自己來寫看看
數獨size可以變動
但是印出會不好看 哈
也沒作切檔
所以又臭又長
但寫好玩嘛 XD
http://www.badongo.com/file/14319291 執行檔連結(無毒 不信不要下)
