working on draw methods
This commit is contained in:
Uğur Küpeli
2022-05-05 02:00:33 +03:00
parent 9a582ed0d9
commit b86c30e89c
6 changed files with 121 additions and 0 deletions

8
90_Tower/rust/Cargo.toml Normal file
View File

@@ -0,0 +1,8 @@
[package]
name = "rust"
version = "0.1.0"
edition = "2021"
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
[dependencies]

27
90_Tower/rust/src/disk.rs Normal file
View File

@@ -0,0 +1,27 @@
pub struct Disk {
size: u8,
}
impl Disk {
pub fn new(size: u8) -> Self {
Disk { size }
}
pub fn draw(&self) {
let space_amount = (15 - self.size) / 2;
let draw_space = || {
if space_amount > 0 {
for _ in 0..space_amount {
print!(" ");
}
}
};
draw_space();
for _ in 0..self.size {
print!("*");
}
draw_space();
}
}

34
90_Tower/rust/src/game.rs Normal file
View File

@@ -0,0 +1,34 @@
use crate::{needle::Needle, util};
pub struct Game {
pub needles: Vec<Needle>,
_moves: usize,
}
impl Game {
pub fn new() -> Self {
let mut needles = Vec::new();
for i in 0..3 {
let number = (i + 1) as u8;
let disks = match number {
1 => util::generate_disks(4),
2 => util::generate_disks(3),
_ => Vec::new(),
};
needles.push(Needle { disks, number });
}
Game { needles, _moves: 0 }
}
pub fn draw(&self) {
for r in (1..=7).rev() {
for n in &self.needles {
n.draw(r)
}
println!("");
}
}
}

11
90_Tower/rust/src/main.rs Normal file
View File

@@ -0,0 +1,11 @@
use game::Game;
mod disk;
mod game;
mod needle;
mod util;
fn main() {
let game = Game::new();
game.draw();
}

View File

@@ -0,0 +1,26 @@
use crate::disk::Disk;
pub struct Needle {
pub disks: Vec<Disk>,
pub number: u8,
}
impl Needle {
pub fn draw(&self, row: u8) {
//println!("printing row: {}", row);
let offset = match self.number {
1 => " ",
_ => "\t\t\t",
};
let row = row as usize;
if self.disks.len() >= row {
self.disks[row - 1].draw();
} else {
print!("{offset}");
print!("*");
}
}
}

15
90_Tower/rust/src/util.rs Normal file
View File

@@ -0,0 +1,15 @@
use crate::disk::Disk;
pub fn generate_disks(amount: u8) -> Vec<Disk> {
if amount > 7 {
println!("CANNOT HAVE MORE THAN 7 DISKS!");
}
let mut disks = Vec::new();
for i in (1..=amount).rev() {
disks.push(Disk::new(i * 2 + 1));
}
disks
}