modernization, better food rendering, consistent player moving, snake intersections

This commit is contained in:
programsnail 2024-07-22 23:20:20 +03:00
parent adabb50a9e
commit b4509733da
8 changed files with 119 additions and 39 deletions

View file

@ -1,6 +1,7 @@
#pragma once
#include <deque>
#include <iostream>
#include "Canvas.hpp"
#include "Utils.hpp"
@ -50,8 +51,12 @@ public:
for (const auto &food : food_) {
Veci food_pos = food.pos - offset;
if (utils::is_valid_pos(food_pos) and not food.eaten) {
paint::circle(
{{.pos = food_pos, .color = config_.food_color}, food.weight * 3});
paint::circle({{
.pos = food_pos,
.color = color::scale(config_.food_color,
1.0 - food_lasted(food)),
},
food.weight * 2});
}
}
}
@ -59,21 +64,31 @@ public:
private:
void generate() {
++current_gen_;
while (food_.front().gen + config_.food_exists_gens < current_gen_) {
while (food_.front().gen + config_.food_exists_gens <= current_gen_) {
food_.pop_front();
}
for (size_t i = 0; i < config_.gen_food_count; ++i) {
food_.push_back({
.gen = current_gen_,
.pos = {.x = rand() % config_.size.x, .y = rand() % config_.size.y},
.pos =
{
.x = std::rand() % config_.size.x,
.y = std::rand() % config_.size.y,
},
.weight = config_.min_food_weight +
rand() % std::abs(config_.max_food_weight -
config_.min_food_weight),
std::rand() % std::abs(config_.max_food_weight -
config_.min_food_weight),
});
}
}
double food_lasted(const Food &food) {
return ((current_gen_ - food.gen) * config_.gen_interval +
time_from_last_gen_) /
(config_.food_exists_gens * config_.gen_interval);
}
private:
Config config_;
double time_from_last_gen_ = 0;