/*
 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 執行檔連結(無毒 不信不要下)

文章標籤
全站熱搜
創作者介紹
創作者 flyinsky76 的頭像
flyinsky76

Deja Vu

flyinsky76 發表在 痞客邦 留言(0) 人氣(153)