Programing/c언어

c언어 바둑판 규칙추가 #2

Sang12 2014. 5. 26. 17:59

#include<stdio.h>
#include<windows.h>
#include<conio.h>
#include<stdlib.h>

void draw_check01(int column, int row);
void gotoxy(int x, int y);
void move_arrow_key(char chr, int *x, int *y, int x_b, int y_b);
void game_control(void);
void display_stone(int matrix[][20][20],int xx,int yy);
int checkEnd(int m[2][20][20]);


int main(void)
{
 game_control();
 return 0;

}

 

void game_control(void){

 int x=1, y=1, matrix[2][20][20]={0};
 int other = 0;
 char key;
 int win;
 char *stone[2] = {"○","●"};
 do
 {
  gotoxy(1,1);
  draw_check01(18,18);
  gotoxy(x,y);
  printf("%s",stone[other]);
  display_stone(matrix,x,y);
  win=checkEnd(matrix);
  if(win==1)
  {
   gotoxy(1,22);
   printf("흑돌 승리");
   getch();
   return;
  }
  else if(win==2)
  {
   gotoxy(1,22);
   printf("백돌 승리");
   getch();
   return;
  }
  gotoxy(1,20);
  printf("방향키로 움직이고");
  printf("스페이스 키를 누르시오.");
  gotoxy(1,21);
  printf("돌을 놓았으면 상대방 차례입니다.");
  key = getch();
  if (key==27)
   exit(0);
  else if(key>=72)
   move_arrow_key(key,&x,&y,37,19);
  else if(key==32){

   if((matrix[0][(x+1)/2][y]) || (matrix[1][(x+1)/2][y] ))
   {
    gotoxy(1,21);
    printf("이미 돌이 있습니다. \a");
    getch();
    continue;
   }
   else{
   matrix[other][(x+1)/2][y]=1;
   other = 1-other;
   }
  }

 }while(1);

}

void display_stone(int matrix[][20][20],int xx,int yy)
{
 int x,y,i;
 char *stone[3] = {"○","●","◎"};
 for(i=0;i<2;i++)
  for(x=1;x<20;x++)
   for(y=1;y<20;y++)
   {
    if(x==((xx+1)/2) && y==yy)
    {
     if(matrix[i][x][y]==0 && matrix[1][x][y]==0)
     {
      gotoxy(x*2-1,y);
      printf("%s",stone[2]);
     }
    }
    if(matrix[i][x][y]==1)
    {
     gotoxy(x*2-1,y);
     printf("%s",stone[i]);
    }
   }
}

int checkEnd(int m[2][20][20])
{
 int x,y,i;
 /*
 for(i=0;i<2;i++)
  for(x=1;x<15;y++)
   for(y=1;y<15;y++)
   {
    if((m[i][x][y]==1) && (m[i][x+1][y]==1) && (m[i][x+2][y]==1) && (m[i][x+3][y]==1) && (m[i][x+4][y]==1)
     || (m[i][x][y]==1) && (m[i][x][y+1]==1) && (m[i][x][y+2]==1) && (m[i][x][y+3]==1) && (m[i][x][y+4]==1)
     || (m[i][x][y]==1) && (m[i][x+1][y+1]==1) && (m[i][x+2][y+2]==1) && (m[i][x+3][y+3]==1) && (m[i][x+4][y+4]==1)
     || (m[i][x][y]==1) && (m[i][x][y+1]==1) && (m[i][x][y+2]==1]) && (m[i][x][y+3]==1) && (m[i][x][y+4]==1) ) {
      if(i==0) return 1;
      else if(i==1) return 2;
    }
     

   }
 */
   
 
 
  for(x=1;x<16;x++)
   for(y=1;y<16;y++)
   {
    if(m[0][x][y]==1){
     if((m[0][x+1][y]==1) && (m[0][x+2][y]==1) && (m[0][x+3][y]==1) && (m[0][x+4][y]==1)) return 1;
     if((m[0][x][y+1]==1) && (m[0][x][y+2]==1) && (m[0][x][y+3]==1) && (m[0][x][y+4]==1)) return 1;
     if((m[0][x+1][y+1]==1) && (m[0][x+2][y+2]==1) && (m[0][x+3][y+3]==1) && (m[0][x+4][y+4]==1)) return 1;
     if((m[0][x][y+1]==1) && (m[0][x][y+2]==1) && (m[0][x][y+3]==1) && (m[0][x][y+4]==1)) return 1;
    }
    else if(m[1][x][y]==1){
     if((m[1][x+1][y]==1) && (m[1][x+2][y]==1) && (m[1][x+3][y]==1) && (m[1][x+4][y]==1)) return 2;
     if((m[1][x][y+1]==1) && (m[1][x][y+2]==1) && (m[1][x][y+3]==1) && (m[1][x][y+4]==1)) return 2;
     if((m[1][x+1][y+1]==1) && (m[1][x+2][y+2]==1) && (m[1][x+3][y+3]==1) && (m[1][x+4][y+4]==1)) return 2;
     if((m[1][x][y+1]==1) && (m[1][x][y+2]==1) && (m[0][1][y+3]==1) && (m[1][x][y+4]==1)) return 2;
    }
   }

}


void move_arrow_key(char key, int *x1, int *y1, int x_b, int y_b)
{
 switch(key)
 {
 case 72: //위쪽(상) 방향의 화살표 키 입력
  *y1=*y1-1;
  if(*y1<1) *y1=1;  //y좌표의 최소값
  break;
 case 75: //왼쪽(좌) 방향의 화살표 키 입력
  *x1=*x1-2;
  if(*x1<1) *x1=1;  //x좌표의 최소값
  break;
 case 77: //오른쪽(우) 방향의 화살표 키 입력
  *x1=*x1+2;
  if(*x1>x_b) *x1=x_b; //x좌표의 최대값
  break;
 case 80: //아래쪽(하) 방향의 화살표 키 입력
  *y1=*y1+1;
  if(*y1>y_b) *y1=y_b; //y좌표의 최대값
  break;
 default:
  return;
 }
}

 

void gotoxy(int x, int y)
{
 COORD Pos= {x-1,y-1};
 SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),Pos);
}

void draw_check01(int c, int r)
{
 int i,j;
 unsigned char a=0xa6;
 unsigned char b[12];
 for(i=1;i<12;i++)
  b[i]=0xa0+i;
 printf("%c%c",a,b[3]);
 for(i=1;i<c;i++)
  printf("%c%c",a,b[8]);
 printf("%c%c",a,b[4]);
 printf("\n");
 for(i=1;i<r-1;i++){
  printf("%c%c",a,b[7]);
  for(j=0;j<c-1;j++)
   printf("%c%c",a,b[11]);
  printf("%c%c",a,b[9]);
  printf("\n");
 }
 printf("%c%c",a,b[6]);
 for(i=0;i<c-1;i++)
  printf("%c%c",a,b[10]);
 printf("%c%c",a,b[5]);
 printf("\n");
 
}