2018-09-11 20:10:37 +03:00
|
|
|
#include "snake.h"
|
2018-10-11 00:04:52 +03:00
|
|
|
#include "guiobject.h"
|
2018-09-11 20:10:37 +03:00
|
|
|
|
2018-10-11 00:04:52 +03:00
|
|
|
#include <QMap>
|
|
|
|
#include <QRectF>
|
2018-09-11 22:15:30 +03:00
|
|
|
|
|
|
|
Snake::Snake() :
|
2018-09-14 22:06:34 +03:00
|
|
|
speed(SPEEDSNAKE){
|
2018-09-11 22:15:30 +03:00
|
|
|
}
|
|
|
|
|
2018-09-11 22:08:08 +03:00
|
|
|
const QVector<Head *> &Snake::getItems() const {
|
2018-09-14 22:06:34 +03:00
|
|
|
return items;
|
2018-09-11 20:10:37 +03:00
|
|
|
}
|
|
|
|
|
2018-09-11 22:15:30 +03:00
|
|
|
void Snake::render() {
|
2018-09-14 22:13:47 +03:00
|
|
|
for (int i = items.length(); i >= 0; --i) {
|
|
|
|
if(i == 0){
|
2018-09-14 22:06:34 +03:00
|
|
|
if(isClick){
|
|
|
|
if(countClick & 1){
|
2018-09-14 22:13:47 +03:00
|
|
|
items[i]->setAngle(45);
|
2018-09-14 22:06:34 +03:00
|
|
|
}else{
|
2018-09-14 22:13:47 +03:00
|
|
|
items[i]->setAngle(315);
|
2018-09-14 22:06:34 +03:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}else{
|
2018-09-14 22:13:47 +03:00
|
|
|
items[i]->setAngle(items[i-1]->getAngle());
|
2018-09-14 22:06:34 +03:00
|
|
|
}
|
|
|
|
}
|
2018-09-11 20:10:37 +03:00
|
|
|
}
|
|
|
|
|
2018-10-11 00:04:52 +03:00
|
|
|
QMap<int, GuiObject*> Snake::init(int size, double speed) {
|
|
|
|
|
|
|
|
QMap<int, GuiObject*> res;
|
2018-09-11 22:08:08 +03:00
|
|
|
|
2018-09-14 22:06:34 +03:00
|
|
|
if (size < 0 || speed <= 0) {
|
2018-10-11 00:04:52 +03:00
|
|
|
return res;
|
2018-09-11 20:10:37 +03:00
|
|
|
}
|
|
|
|
|
2018-09-14 22:06:34 +03:00
|
|
|
this->speed = speed;
|
2018-09-11 22:08:08 +03:00
|
|
|
|
|
|
|
for ( int i = size; i >= 0; --i ) {
|
2018-10-11 00:04:52 +03:00
|
|
|
auto obj = new Head(&this->speed);
|
|
|
|
items.push_back(obj);
|
|
|
|
res[obj->getId()] = obj;
|
2018-09-11 22:08:08 +03:00
|
|
|
}
|
|
|
|
|
2018-10-11 00:04:52 +03:00
|
|
|
return res;
|
2018-09-11 22:08:08 +03:00
|
|
|
|
2018-09-11 20:10:37 +03:00
|
|
|
}
|
2018-09-11 22:15:30 +03:00
|
|
|
|
|
|
|
Snake::~Snake() {
|
2018-09-14 22:06:34 +03:00
|
|
|
for (auto i : items) {
|
2018-09-11 22:15:30 +03:00
|
|
|
delete i;
|
|
|
|
}
|
2018-09-14 22:06:34 +03:00
|
|
|
items.clear();
|
2018-09-11 22:15:30 +03:00
|
|
|
|
|
|
|
}
|
2018-10-11 00:04:52 +03:00
|
|
|
|
|
|
|
QRectF Snake::getRiger() const {
|
|
|
|
QRectF result;
|
|
|
|
|
|
|
|
if (!items.length()) {
|
|
|
|
return result;
|
|
|
|
}
|
|
|
|
|
|
|
|
result.setX(items.first()->getX());
|
|
|
|
result.setY(items.first()->getY());
|
|
|
|
result.setSize(QSizeF(items.first()->getSizeX(),
|
|
|
|
items.first()->getSizeY()));
|
|
|
|
|
|
|
|
return result;
|
|
|
|
}
|