add mechanism for level gain

This commit is contained in:
2024-11-06 14:29:30 +01:00
parent 3249529f94
commit a542e4b1c0
6 changed files with 113 additions and 25 deletions

View File

@@ -2,6 +2,7 @@ use rand::Rng;
use std::cmp::{max, min};
use crate::artifacts::Potion;
use crate::level_ladder::get_level_ladder;
use crate::position::{HasPosition, Position};
pub struct Player {
@@ -13,6 +14,7 @@ pub struct Player {
experience: usize,
inventory: Vec<Potion>,
inventory_slots: usize,
level: usize,
}
impl Player {
@@ -26,6 +28,7 @@ impl Player {
experience: 0,
inventory: vec![],
inventory_slots: 2,
level: 1,
}
}
pub fn get_name(&self) -> String {
@@ -59,8 +62,26 @@ impl Player {
self.gold
}
pub fn gain_experience(&mut self, amount: usize) {
self.experience += amount
pub fn gain_experience(&mut self, amount: usize) -> bool {
let mut result = false;
for (i, level_step) in get_level_ladder().enumerate() {
if self.experience <= level_step && self.experience + amount > level_step {
self.level += 1;
self.max_life += 5;
self.life = self.max_life;
result = true;
break;
}
if i > self.level {
break;
}
}
self.experience += amount;
result
}
pub fn get_experience_level(&self) -> usize {
self.level
}
pub fn get_experience(&self) -> usize {
@@ -116,6 +137,7 @@ fn test_get_name() {
experience: 0,
inventory: vec![],
inventory_slots: 1,
level: 0,
};
assert_eq!(p.get_name(), "Teddy Tester");
}
@@ -141,6 +163,7 @@ fn test_change_life() {
experience: 0,
inventory: vec![],
inventory_slots: 1,
level: 0,
};
assert_eq!(p.get_life(), 5);
p.change_life(-2);
@@ -176,6 +199,7 @@ fn test_max_life() {
experience: 0,
inventory: vec![],
inventory_slots: 1,
level: 0,
};
assert_eq!(p.get_max_life(), 10);
}