mirror of
https://github.com/coding-horror/basic-computer-games.git
synced 2025-12-23 07:29:02 -08:00
init
working on draw methods
This commit is contained in:
8
90_Tower/rust/Cargo.toml
Normal file
8
90_Tower/rust/Cargo.toml
Normal 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
27
90_Tower/rust/src/disk.rs
Normal 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
34
90_Tower/rust/src/game.rs
Normal 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
11
90_Tower/rust/src/main.rs
Normal file
@@ -0,0 +1,11 @@
|
||||
use game::Game;
|
||||
|
||||
mod disk;
|
||||
mod game;
|
||||
mod needle;
|
||||
mod util;
|
||||
|
||||
fn main() {
|
||||
let game = Game::new();
|
||||
game.draw();
|
||||
}
|
||||
26
90_Tower/rust/src/needle.rs
Normal file
26
90_Tower/rust/src/needle.rs
Normal 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
15
90_Tower/rust/src/util.rs
Normal 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
|
||||
}
|
||||
Reference in New Issue
Block a user