четверг, 21 июля 2011 г.

Урок третий - примитивная игра змейка(Часть 1)


В прошлых уроках мы научились выводить текст пользоваться таймером и кнопками, пришло время для змейки. В этом уроке мы сделаем только саму змею. Уровень, поедание яблок и стены сделаем в следующих уроках!
Теперь сам урок!Копируем в новый проект текст из второго урока!
Добавляем 2 новых дефайна !


#define gotoxy pspDebugScreenSetXY
#define setcolor pspDebugScreenSetTextColor
Теперь напряжем наш мозГГ и подумаем какой алгоритм змейки.
Он прост.Нам нужна такая вот структура  

struct XY{

int x;
int y;
};
Вставляем это рядом с переменной pad;




И вот так примерно получается змейка=)
XY *a;
a = new XY[2];
Для того чтобы получить движение змейки делаем что-то
типо

a[0]=a[1];
a[1].x=a[1].x+1;
Реализуем!!! Создадим класс змеи
class Zmei{
      XY * pos;
      int amount;//количество точек в змее
      int dx;//скорость по х
      int dy;//скорость по у
      public:
      void Load(){
            amount=5;
            pos=new XY[5];
            for(int i=0;i<5;i++){
                  pos[i].x=10+i;
                  pos[i].y=10;
            }
            dx=1;
            for(int i = 0; i <amount-1 ; i++){
                  gotoxy(pos[i].x,pos[i].y);
                  printf("*");


            }
            gotoxy(pos[amount-1].x,pos[amount-1].y);
            printf("%c",1);



      }
      void Move(){
            XY head = pos[amount - 1]; //голова
            XY tail = pos[0]; //хвост
            XY next;// cледущая клетка
            next.x=head.x+dx;
            next.y=head.y+dy;
/*Вот и сам алгоритм тоесть мы хвосту присваиваем х у следущего элемента,ну и так для всех точек,после мы закрашиваем прошлый хвост
 и рисуем новую голову ,закрашивая старую обычной **/
            for(int i = 0; i <amount - 1; i++)
                  pos[i] = pos[i + 1];
            pos[amount - 1] = next;
            gotoxy(tail.x,tail.y);
            printf(" ");
            gotoxy(head.x,head.y);
            setcolor(0xfff);
            printf("*");
            gotoxy(next.x,next.y);
            setcolor(0xffffff); //красим курсор в белый цвет (голову змеи)
            printf("%c",1);

      }
      void Control(){//здесь я надеюсь все понятно?
            sceCtrlReadBufferPositive(&pad, 1);
            if(pad.Buttons & PSP_CTRL_UP) {
                  dx=0;
                  dy=-1;
            }
            if(pad.Buttons & PSP_CTRL_DOWN) {
                  dx=0;
                  dy=+1;
            }
            if(pad.Buttons & PSP_CTRL_RIGHT) {
                  dx=1;
                  dy=0;
            }
            if(pad.Buttons & PSP_CTRL_LEFT) {
                  dx=-1;
                  dy=0;
            }
      }

};
Добавляем также рядом c pad Zmei zmei;
Теперь заменяем всю мейн функцию на вот это
int main(int argc, char *argv[])
{
      SetupCallbacks(); //Устанавливаем колбеки
      pspDebugScreenInit();
      zmei.Load
      printf("*");
      while(1){
            zmei.Control();
            zmei.Move();
            sceKernelDelayThread(1000*100);//задерживаем поток чтобы змея не была супер скоростная
      }


      return 0;
}

Теперь компилим,кидаем на пиху наслаждаемся первой незаконченной игрой=)
В следующем уроке я расскажу о создание коллизий стен и поедание яблок=)
Все пожелания и вопросы в комменты!

Комментариев нет:

Отправить комментарий