Nerest, советы:
1. обрамляй код тегом "code", иначе нечитаемо
2. твой код не собирается т.к. перепутано местами, где надо .h и где не надо
3. В с/c++ индекс массивов начинается с 0 (но твой код работоспособен). Это чаще бывает удобно, чем когда начинается с 1
4. if(x==true) сработает только тогда, когда int(x)=1, if (x) тогда, когда int(x)!=0. x лучше писать в виде is_XXX или have_XXX, например if (is_kbhit())
5. Проследи места, когда ты делаешь вывод на экран. Выводить нужно 1 раз за цикл, тогда, когда у тебя поле построено полностью
Вот так работает:
Код:

#include <iostream>
#include <stdio.h>
#include <time.h>
#include <conio.h>
#include <windows.h>
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();
while(1)
{
if (kbhit()==true){changing();}
move();
snake();
display();
Sleep(200);
}
cin.get();
}
Интересный эффект, когда змейка заходит за границу