Nerest
24-07-2014, 20:41
Итак, пытаюсь написать консольную змейку на c++. Однако возникли некоторые проблемы... С осуществлением движения змейки. Вот мой код. Я знаю, что проблема в функциях clear() и move(), но никак не доходит до меня, как эту проблему решить... Пожалуйста, помогите разобраться новичку... И просьба не кидать ссылок на готовые коды змейки. Я их видел, но хочу написать свою змейку сам =) Нужна лишь помощь в этом проблеме.
#include <iostream.h>
#include <stdio.h>
#include <time>
#include <conio>
using namespace std;
char pole[20][20]; int symbol;
int coordinatesX[1000], coordinatesY[1000];
int size;
int choiseX, choiseY;
void field()
{
for (int i = 0; i<20; i++)
{
for (int j = 0; j<20; j++)
{
if (i==0 || i == 19 || j == 0 || j == 19) {pole[i][j]='#';}
else {pole[i][j]=' ';}
}
}
cin.get();
}
void standart()
{
field();
coordinatesY[1]=2; coordinatesX[1]=3; coordinatesY[2]=2; coordinatesX[2]=2;
choiseX = 1; choiseY=0;
size = 2;
}
void display()
{
system ("cls");
for (int i = 0; i<20; i++)
{
for (int j = 0; j<20; j++)
{
cout << pole[i][j];
if (j == 19) cout << endl;
}
}
}
void snake()
{
switch (choiseX)
{
case 1: pole[coordinatesY[1]][coordinatesX[1]] = '>'; break;
case -1: pole[coordinatesY[1]][coordinatesX[1]] = '<'; break;}
switch (choiseY){
case 1: pole[coordinatesY[1]][coordinatesX[1]] = 'v'; break;
case -1: pole[coordinatesY[1]][coordinatesX[1]] = '^'; break;
}
for (int i = 2; i <= size; i++)
{
pole[coordinatesY[i]][coordinatesX[i]]='@' ;
}
}
void chlearing()
{
pole[coordinatesY[1]-choiseY][coordinatesX[1]-choiseX]=' ';
pole[coordinatesY[2]-choiseY][coordinatesX[2]-choiseX]=' ';
}
void clear()
{
for (int i = 1; i<=size; i++)
{pole[coordinatesY[i]][coordinatesX[i]]=' ';}
}
void move()
{
clear();
for (int i = size;i>=2;i--)
{
coordinatesX[i]=coordinatesX[i-1];
coordinatesY[i]=coordinatesY[i-1];
}
coordinatesX[1]=coordinatesX[1]+choiseX;
coordinatesY[1]=coordinatesY[1]+choiseY;
display();
}
void changing()
{
symbol = getch();
switch (symbol)
{
case 'd': if (choiseX!=-1) choiseX = 1; choiseY=0; break;
case 'a': if (choiseX!=1) choiseX = -1; choiseY=0; break;
case 's': if (choiseY!=-1) choiseY = 1; choiseX=0; break;
case 'w': if (choiseY!=1) choiseY = -1; choiseX=0; break;
case 'f': size++; break;
}
}
int main()
{
standart();
display();
while(1)
{
snake();
if (kbhit()==true){changing();}
move();
display();
Sleep(200);
}
cin.get();
}
#include <iostream.h>
#include <stdio.h>
#include <time>
#include <conio>
using namespace std;
char pole[20][20]; int symbol;
int coordinatesX[1000], coordinatesY[1000];
int size;
int choiseX, choiseY;
void field()
{
for (int i = 0; i<20; i++)
{
for (int j = 0; j<20; j++)
{
if (i==0 || i == 19 || j == 0 || j == 19) {pole[i][j]='#';}
else {pole[i][j]=' ';}
}
}
cin.get();
}
void standart()
{
field();
coordinatesY[1]=2; coordinatesX[1]=3; coordinatesY[2]=2; coordinatesX[2]=2;
choiseX = 1; choiseY=0;
size = 2;
}
void display()
{
system ("cls");
for (int i = 0; i<20; i++)
{
for (int j = 0; j<20; j++)
{
cout << pole[i][j];
if (j == 19) cout << endl;
}
}
}
void snake()
{
switch (choiseX)
{
case 1: pole[coordinatesY[1]][coordinatesX[1]] = '>'; break;
case -1: pole[coordinatesY[1]][coordinatesX[1]] = '<'; break;}
switch (choiseY){
case 1: pole[coordinatesY[1]][coordinatesX[1]] = 'v'; break;
case -1: pole[coordinatesY[1]][coordinatesX[1]] = '^'; break;
}
for (int i = 2; i <= size; i++)
{
pole[coordinatesY[i]][coordinatesX[i]]='@' ;
}
}
void chlearing()
{
pole[coordinatesY[1]-choiseY][coordinatesX[1]-choiseX]=' ';
pole[coordinatesY[2]-choiseY][coordinatesX[2]-choiseX]=' ';
}
void clear()
{
for (int i = 1; i<=size; i++)
{pole[coordinatesY[i]][coordinatesX[i]]=' ';}
}
void move()
{
clear();
for (int i = size;i>=2;i--)
{
coordinatesX[i]=coordinatesX[i-1];
coordinatesY[i]=coordinatesY[i-1];
}
coordinatesX[1]=coordinatesX[1]+choiseX;
coordinatesY[1]=coordinatesY[1]+choiseY;
display();
}
void changing()
{
symbol = getch();
switch (symbol)
{
case 'd': if (choiseX!=-1) choiseX = 1; choiseY=0; break;
case 'a': if (choiseX!=1) choiseX = -1; choiseY=0; break;
case 's': if (choiseY!=-1) choiseY = 1; choiseX=0; break;
case 'w': if (choiseY!=1) choiseY = -1; choiseX=0; break;
case 'f': size++; break;
}
}
int main()
{
standart();
display();
while(1)
{
snake();
if (kbhit()==true){changing();}
move();
display();
Sleep(200);
}
cin.get();
}