4
1
mirror of https://github.com/QuasarApp/Snake.git synced 2025-04-29 11:14:40 +00:00

73 lines
1.3 KiB
C++
Raw Normal View History

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;
}