Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- use rand::prelude::*;
- /*
- rust port of:
- https://gist.github.com/sagebind/8358734
- ^ was the first result of "simple c++ game"
- port by nullflex
- */
- fn create_zombie() -> u8 {
- let mut rng = thread_rng();
- let chance = rng.gen_range(0, 100);
- if chance > 75 {
- return 11;
- }
- return rng.gen_range(1, 10);
- }
- #[allow(non_camel_case_types)]
- struct player_info {
- skill: u8,
- score: u16,
- name: String
- }
- #[allow(non_camel_case_types)]
- struct zombie_info {
- count: u16,
- killed: u16
- }
- fn main() {
- use std::io::stdin;
- // game stats
- let rand_player_skill: u8 = {
- let mut rng = thread_rng();
- rng.gen_range(2, 12)
- };
- let mut player = player_info{skill: rand_player_skill, score: 1, name: String::from("")};
- let mut zombie_stats = zombie_info{count: 0, killed: 0};
- let mut input_value: String = String::from("");
- // title
- println!("Welcome to Zombie War (rust port). \nPress [ENTER] to start.");
- stdin().read_line(&mut input_value).expect("how did you break the first input prompt?");
- // player name
- println!("Enter your name: ");
- stdin().read_line(&mut player.name).expect("something invalid passed in name input");
- player.name = player.name.trim_end().to_string();
- // ask how many zombies
- println!("How many zombies do you want to fight? ");
- {
- let mut zombie_count_str: String = String::from("");
- stdin().read_line(&mut zombie_count_str).expect("something invalid passed in zombies fight input");
- zombie_count_str = zombie_count_str.trim_end().to_string();
- zombie_stats.count = zombie_count_str.parse::<u16>().expect("invalid number entered in zombies fight");
- }
- println!("Get ready to fight {}!", player.name);
- // main game loop
- while zombie_stats.killed < zombie_stats.count {
- // create a random zombie
- let zombie_skill: u8 = create_zombie();
- // battle sequence
- if zombie_skill > 10 {
- println!("boss zombie alert!");
- }
- else {
- println!("here comes zombie {}", zombie_stats.killed);
- }
- println!("fighting...");
- std::thread::sleep(std::time::Duration::from_secs(2));
- // zombie killed the player
- if player.skill < zombie_skill {
- println!("you have died.");
- break;
- }
- let skill_delta: i8 = (player.skill - zombie_skill) as i8;
- if skill_delta > 7 {
- println!("you wasted the zombie");
- player.score *= 2;
- }
- else if skill_delta > 5 {
- println!("you decapitated the zombie");
- player.score *= 2;
- }
- else if skill_delta > 0 {
- println!("you killed the zombie");
- player.score *= 2;
- }
- else {
- println!("you killed the zombie, but suffered injuries");
- }
- zombie_stats.killed += 1;
- println!("hit enter to continue.");
- stdin().read_line(&mut input_value).expect("how did you break an input that doesn't even require anything?");
- }
- // game ended
- if zombie_stats.killed == zombie_stats.count {
- println!("you survived");
- }
- else {
- println!("you did not survive");
- }
- println!("zombies killed: {}, final score: {}", zombie_stats.killed, player.score);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement