Witam,
Potrzebuję zrobić grę Snake. Dostałem 8 plików od profesora z uczelni, do których mam dodać własne funkcje / klasy itd w celu stworzenia Snake'a.
W plikach są stworzone już klasy, porobione dziedziczenia itd. Musiałem zrozumieć podany kod i dodać do niego tworzenie węża, a następnie zrobić poruszanie wężem itd.
Niestety na początku mam problem.
Zrobiłem "proste" wypisanie węża. Wąż jest jako string (później planuję zrobić wszystko na kontenerach oczywiście ale najpierw potrzebuję poruszania wężem).
Następnie funkcja handleEvent() musi posłużyć za poruszanie wężem.
Niestety gdy próbuję cokolwiek zrobić z wypisywaniem to nic się nie dzieje. Sama funkcja działa, bo porusza całym polem gry - ale to dlatego, że używam funkcji Move, która jest własnie od tego chyba żeby całymi obiektami poruszać, a sam mój string nie jest obiektem.
Wiem, że to już "większy" projekt i wymaga jakiejś znajomości biblioteki ncurses.h ale może ktoś miałby trochę czasu na pomoc? Jest to naprawdę ważne, bo goni mnie termin, a nie mogę przejść przez ten etap :/
Nagradzam lajkami każdą pomoc!
Główne dwa pliki w których mam pracować: snake.cpp i snake.h
paczka plików z projektem: (Dosłownie 5kb)
https://mega.nz/#!jdFDSSZY!dMvtmHqGqIwQOJnqcWec1rx0h_LgWhRDsjYfiwgm9io
Virustotal żeby nie było:
https://www.virustotal.com/#/file/d6b824d8ee31713ddc3dcde01fc0927a90e732a11f4ce3a54fc9f9590284323e/detection
Dodam tutaj kod snake.cpp i snake.h, bo może tylko w nich leży mój błąd?
Snake.h:
#ifndef __SNAKE_H__
#define __SNAKE_H__
#include "winsys.h"
class Snake:public FramedWindow
{
private:
string snek;
string snek2;
public:
Snake(Rect r, char _c = ' ');
void paint();
bool handleEvent(int key);
//bool test(int key);
};
#endif
Snake.cpp:
#include "snake.h"
#include "screen.h"
#include "point.h"
#include <time.h>
#include <unistd.h>
//Snake w wyznaczonym polu gry
Snake::Snake(Rect r, char _c /*=' '*/):
FramedWindow(r, _c)
{
}
void Snake::paint()
{
snek="Dupa Dupa";
FramedWindow::paint();
int x = geom.size.y+geom.topleft.x;
int y = geom.size.y;
unsigned int xx=0;
//wypisanie snek w centrum pola gry
gotoyx(y, x);
for(xx=0;xx<snek.size() ; xx++)
printl("%c", xx < snek.size() ? snek[xx] : c);
// for(xx=0;xx<snek.size() ; xx++)
// mvprintw(y+5,x+xx,"%c",xx < snek.size() ?snek[xx]: c);
}
bool Snake::handleEvent(int key) //handleEvent na w,s,a,d
{
//to nie działa dla 'w'. Żadnej reakcji w programie, a miało wypisać snek2 w centrum pola gry.
int x = geom.size.y+geom.topleft.x;
int y = geom.size.y;
unsigned int xx=0;
snek2="TEST TEST";
switch (key)
{
case 'w':
gotoyx(y, x);
for(xx=0;xx<snek2.size() ; xx++)
printl("%c", xx < snek2.size() ? snek2[xx] : c);
return true;
case 's':
move (Point (0, 10)); //to jest funkcja przesuwająca obiekty zadeklarowana w pliku winsys.h z deklaracją w winsys.cpp linia 11
return true;
case 'd':
move (Point (10, 0));
return true;
case 'a':
move (Point (-10, 0));
return true;
};
return false;
}