SB
Sergey Borschev

кто поможет описать код с++??пятнашки))

#include
#include
#include
#include

#define MENTIONprintf("Enter 'j', 'i', 'l' or 'k' to move the empty cell left, up, right or down correspondingly, or 'q' to exit: \n\n");

int** field;
int emptyCell_x, emptyCell_y;

//------------------
void init()
{
int x,y, i,j;
srand(time(NULL));
for(i=1; i<=15;)
{
x=rand()%4; y=rand()%4;
if(field[x][y] == 0) field[x][y] = i++;
}

for(i=0; i<4; i++) //to find the empty cell
for(j=0; j<4; j++)
if(field[j] == 0)
{
emptyCell_x=j; emptyCell_y = i; return;
}

}

//---------------------
void printField()
{
int i,j;
for(i=0; i<4; i++)
{
for(j=0; j<4; j++)
if(field[j]) printf("=", field[j]);
else printf(" _");
printf("\n\n");
}
printf("\n\n");
}

//-----------------------
int notEndYet()
{
int i,j;
for(i=0; i<3; i++)
for(j=0; j<4; j++)
if(field[j] != 4*i+j+1) return 0; //go on play
if(field[0][3] != 13) return 0;

return 1; //victory!
}

//---------------allows move the emply cell
int move()
{
char c;

while(1)
{
c = getch();
switch(c)
{
case 'j':
if(emptyCell_x==0)
{
printf("Not valid move.\n\n");
break;
}
else
{
field[emptyCell_x][emptyCell_y] = field[emptyCell_x-1][emptyCell_y];
field[emptyCell_x-1][emptyCell_y] = 0;
emptyCell_x--;
return 1;
}
case 'i':
if(emptyCell_y==0)
{
printf("Not valid move.\n\n");
break;
}
else
{
field[emptyCell_x][emptyCell_y] = field[emptyCell_x][emptyCell_y-1];
field[emptyCell_x][emptyCell_y-1] = 0;
emptyCell_y--;
return 2;
}
case 'l':
if(emptyCell_x==3)
{
printf("Not valid move.\n\n");
break;
}
else
{
field[emptyCell_x][emptyCell_y] = field[emptyCell_x+1][emptyCell_y];
field[emptyCell_x+1][emptyCell_y] = 0;
emptyCell_x++;
return 3;
}
case 'k':
if(emptyCell_y==3)
{
printf("Not valid move.\n\n");
break;
}
else
{
field[emptyCell_x][emptyCell_y] = field[emptyCell_x][emptyCell_y+1];
field[emptyCell_x][emptyCell_y+1] = 0;
emptyCell_y++;
return 4;
}
case 'q': exit(1);
default: MENTION
}
}
}

//-----------------main function
void main()
{
field = (int**)calloc(4, sizeof(int*));
for(int i=0; i<4; i++)
field = (int*)calloc(4, sizeof(int));

doinit(); while(notEndYet());
MENTION
printField();

while(!notEndYet())
{
move();
printField();
}

printf("\nYou win!\n"); getch();

Мария Лукичева
Мария Лукичева

Я в своё время проще делал. Игровое поле -- одномерный массив.
Empty mod 4 = 0 -- пустышка в первом столбце
Empty mod 4 = 1 -- во втором столбце
Empty mod 4 = 2 -- в третьем столбце
Empty mod 4 = 3 -- в четвёртом столбце
Empty div 4 = 0 -- пустышка в первой строке
Empty div 4 = 1 -- во второй строке
Empty div 4 = 2 -- в третьей строке
Empty div 4 = 3 -- в четвёртой строке.
Играем клавишами-стрелками или клацаем мышкой. Проверки там очень простые, типа есть ли фишка с соответствующей стороны от пустышки. Если да -- меняем местами, иначе -- "бум" в динамик. Когда игра собрана -- "подарки".

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

Похожие вопросы
пятнашки на визуал бейсике
Пятнашки на визуал бейсик 2
Помогите!! ! Проблемы с пятнашками) Кто любит пятнашки сюда!))
Нужна бесплатная помощь программиста, который (-я) поможет прокомментировать C++ коды
Пятнашка не заводится! Что случилось???
Как описать категории?
Возможно ли сделать игру пятнашки на HTML? Если да то код предоставьте пожалуйста))
что лудше семёрка или пятнашка
не могу найти песню, могу описать, кто поможет?
построить условие в VBA. А конкретнее как описать это кодом.