Member 13830815 Ответов: 1

Я пытаюсь сделать игру в крестики нолики на C с помощью 2d массива но что то происходит ошибка


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

char a[3][3]={'0','1','2','3','4','5','6','7','8'};
int checkwin();
void board();

int main()
{
 int ch,player=1,i;
 char make;
 do
 {
  board();
  player= (player % 2) ? 1 : 2;

  printf(" player no. %d",player);
  scanf("%d",&ch);

  make= (player==1) ? 'X': 'O';

  if(ch==1 && a[1][1]=='1')
   {
   a[1][1]=make;
   }
  else if(ch==2 && a[1][2]=='2')
   {
   a[1][2]=make;
   }
  else if(ch==3 && a[1][3]=='3')
   {
   a[1][3]=make;
   }
  else if(ch==4 && a[2][1]=='4')
   {
   a[2][1]=make;
   }
  else if(ch==5 && a[2][2]=='5')
  {
  a[2][2]=make;
  }
  else if(ch==6 && a[2][3]=='6')
   {
   a[2][3]=make;
   }
  else if(ch==7 && a[3][1]=='7')
   {
   a[3][1]=make;
   }
  else if(ch==8 && a[3][2]=='8')
   {
   a[3][2]=make;
   }
  else if(ch==9 && a[3][3]=='9')
   {
   a[3][3]=make;
   }
 else
  {
   printf("invalid choice");
   player--;
   getch();
  }
  i=checkwin();
  player++;
 }
 while(i==-1);

 board();
 if(i==1)
 printf("player %d win",--player);
 else
 printf("game over");

 getch();
 return 0;
}


int checkwin()
{
 char a[3][3];
 if(a[1][1]==a[1][2] && a[1][2]==a[1][3])
   return 1;
 else if(a[2][1]==a[2][2] && a[2][2]==a[2][3])
   return 1;
 else if(a[3][1]==a[3][2] && a[3][2]==a[3][3])
  return 1;
 else if(a[1][1]==a[2][1] && a[2][1]==a[3][1])
  return 1;
 else if(a[1][2]==a[2][2] && a[2][2]==a[3][2])
  return 1;
 else if(a[1][3]==a[2][3] && a[2][3]==a[3][3])
  return 1;
 else if(a[1][1]==a[2][2] && a[2][2]==a[3][3])
  return 1;
 else if(a[1][3]==a[2][2] && a[2][2]==a[3][1])
  return 1;
 else if(a[1][1]!=a[1][2] && a[1][2]!=a[1][3] &&
	 a[2][1]!=a[2][2] && a[2][2]!=a[2][3] &&
	 a[3][1]!=a[3][2] && a[3][2]!=a[3][3] &&
	 a[1][1]!=a[2][1] && a[2][1]!=a[3][1] &&
	 a[1][2]!=a[2][2] && a[2][2]!=a[3][2] &&
	 a[1][3]!=a[2][3] && a[2][3]!=a[3][3] &&
	 a[1][1]!=a[2][2] && a[2][2]!=a[3][3] &&
	 a[1][3]!=a[2][2] && a[2][2]!=a[3][1])

  return 0;
 else
  return -1;
}


void board()
{
 clrscr();
 printf("TIC-TAC-TOE GAME\n\n\n");
 printf("PLAYER 1 (X) -----    PLAYER 2 (O)\n\n\n");
 printf("    |    |    \n");
 printf(" %c | %c | %c \n",a[1][1],a[1][2],a[1][3]);
 printf("____|____|____\n");
 printf("    |    |    \n");
 printf(" %c | %c | %c \n",a[2][1],a[2][2],a[2][3]);
 printf("____|____|____\n");
 printf("    |    |    \n");
 printf(" %c | %c | %c \n",a[3][1],a[3][2],a[3][3]);
 printf("    |    |    \n");
}


Что я уже пробовал:

я делаю игру в крестики-нолики в 2-d массиве, но происходит ошибка . Сэр, пожалуйста, проверьте, что случилось не так .

Patrice T

"но ошибки случаются"
это не информативно.
опишите ошибку или то, что не так в программе.

1 Ответов

Рейтинг:
0

Rick York

Довольно легко увидеть фундаментальную проблему, имеющуюся в вашей программе. Вы используете массив 3x3 для представления платы и используете индексы от 1 до 3 для доступа к массиву. В языке Си индексы массива начинаются с нуля, поэтому для вашей платы они должны варьироваться от 0 до 2, что означает, что у вас есть три значения индекса : 0, 1 и 2.


CPallini

5.