[C/C++演算法]-五子棋

[C/C++演算法]-五子棋

 [C/C++演算法]-五子棋 

 

本篇要分享五子棋的演算法程式,有興趣的(C/P)同好,歡迎來(C/P)一下 ^ ^

 

程式碼

#include <iostream>
#include <conio.h>
#include <windows.h>
usingnamespace std;
/*
關於遊戲控制
wasd上左下右  j 下棋
另外這是兩人對戰的~~(小弟不會寫AI= ="
學了一下class 寫個五子棋
*/
class object
{
    int map;    //private
    
    public:
    int **array;
    int player;
    object()
    {   int i=0;
      player=0;
  
    for(;;)
   {
     cout<<"請輸入所要的地圖大小:X x X\n";
          cin>>map;
    
    if(map < 10 || map >30)
          cout<<"請輸入適合的數字 10~30\n";
      else
      {
        system("cls");
     array= newint* [map];
           for(i=0;i<map;i++)
     array[i]= newint [map];
         
     break;
      }
   }
}
//void test(){ cout<<map;}; 
void print();
void process(int *x,int *y); 
void gotoxy(int x,int y);  
int check();
};
void object::print()
{
  int i,j; 
  
  for(i=0;i<map;i++)
   {
for(j=0;j<map;j++)
    array[i][j]=0;
   }
     for(i=0;i<map;i++)
  {
      for(j=0;j<map;j++)
   {
     if(i==0 && j==0) cout<<"┌";
     elseif(i==0 && j==(map-1)) cout<<"┐";
  elseif(i==0) cout<<"┬";
     
     if(j==0 && i!=0 && i!=map-1) cout<<"├";
  elseif( i!=map-1 && i!= 0 && j==map-1) cout<<"┤";
  if(i!=0 && j!=0 && i!=map-1 && j!=map-1) cout<<"┼";
  if(i==map-1 && j==0) cout<<"└";
  if(i==map-1&& j!=0 && j!=map-1) cout<<"┴";
  if(i==map-1 && j==map-1) cout<<"┘";
   }
  
   cout<<"\n";
  }
   cout<<"玩家1●"<<"   "<<"玩家2○";
}
void object::process(int *x,int *y)
{
  char ch;
  ch=_getch();
  
   switch (ch)
  {
  case 'w': if(*y>0)
   (*y)--;
         break;
   
  case 'a': if(*x>0)
   (*x)=(*x)-2;
         break;
   
  case 's': if(*y<map-1)
   (*y)++;
         break;
   
  case 'd': if(*x/2<map-1)
   (*x)=(*x)+2;
            break;
   
  
  case 'j': if(player%2==0 && array[*x/2][*y]==0)
   {
   cout<<"●";
            array[*x/2][*y]=1;
            player++;
   }
   if(player%2==1 && array[*x/2][*y]==0)
   {
            cout<<"○";
   array[*x/2][*y]=2;
   player++;
   }
            break;
  
  default : break;
  }
 
 
}
void object::gotoxy(int x, int y){
static HANDLE hConsole = 0; //初始值
staticint instanceCount = 0;
COORD coord;
  if( instanceCount == 0 ){
  //取得螢幕的控制
  hConsole = GetStdHandle( STD_OUTPUT_HANDLE );
  instanceCount = 1;
}
coord.X = x ;
coord.Y = y ;
//將游標移至所指定的座標位置
SetConsoleCursorPosition( hConsole, coord );
}
int object::check()
{ 
   int i,j;
   int set=(player+1)%2+1; 
for(i=0;i<map;i++)
{ 
   for(j=0;j<map;j++)
   {
  
  if(array[i][j]==set && array[i+1][j]==set && array[i+2][j]==set && array[i+3][j]==set && array[i+4][j]==set)
  { cout<<"玩家"<<set<<"贏了!!"; return 0;}
     if(array[i][j]==set && array[i][j+1]==set && array[i][j+2]==set && array[i][j+3]==set && array[i][j+4]==set)
  { cout<<"玩家"<<set<<"贏了!!";  return 0;}
     if(array[i][j]==set && array[i+1][j+1]==set && array[i+2][j+2]==set && array[i+3][j+3]==set && array[i+4][j+4]==set )
  { cout<<"玩家"<<set<<"贏了!!"; return 0;}
     if(array[i][j]==set && array[i+1][j-1]==set && array[i+2][j-2]==set && array[i+3][j-3]==set && array[i+4][j-4]==set )
  { cout<<"玩家"<<set<<"贏了!!"; return 0;}
  
}
}
return 1;
}
int main()
{
int x=0,y=0;
object s1;
// s1.test(); //雖然無法用 s1.map的方式改變其值,因為他是private屬性,但卻可利用外在函數改變他,似乎初始化一次後,
//就不會讓你再初始話一次
 
s1.print();
 
do
{
 
s1.gotoxy(x,y);
s1.process(&x,&y);
}while(s1.check());
 
system("pause");
return (0);
}

 

 

 


One thought on “[C/C++演算法]-五子棋

  1. 玩家對打不叫演算法吧
    版主回覆:(08/30/2015 10:49:34 AM)
    維基百科-演算法定義(https://zh.wikipedia.org/wiki/%E7%AE%97%E6%B3%95)
    演算法/算則法(Algorithm)爲一個計算的具體步驟,常用於計算、資料處理和自動推理。精確而言,演算法是一個表示爲有限長[1]清單的有效方法。演算法應包含清晰定義的指令[2]用於計算函式[3]

發表迴響

你的電子郵件位址並不會被公開。 必要欄位標記為 *