Advertisement
Guest User

Untitled

a guest
Nov 1st, 2018
102
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Rust 2.43 KB | None | 0 0
  1. #[allow(unused_assignments)]
  2. extern crate rand;
  3.  
  4. use rand::prelude::*;
  5.  
  6. #[derive(Debug)]
  7. struct Player {
  8.     name: String,
  9.     hp: i32,
  10.     atk: i32,
  11.     def: i32,
  12. }
  13.  
  14. //methods
  15. impl Player {
  16.     //check if players HP <= 0
  17.     fn is_alive(&self) -> bool {
  18.         if self.hp > 0 {
  19.             return true;
  20.         } else {
  21.             return false;
  22.         }
  23.     }
  24.     // damage = attacker atk value - a random number between 0 and defenders def value
  25.     fn damage_received(&self, atk: i32) -> i32 {
  26.         let mut randatk: i32 = 0;
  27.         let mut rng = thread_rng();
  28.         randatk = atk - rng.gen_range(0, self.def);
  29.         return randatk;
  30.     }
  31. }
  32.  
  33. // related functions
  34. impl Player {
  35.     // instanciate a new player
  36.     fn new(name: String, hp: i32, atk: i32, def: i32) -> Player {
  37.         Player { name, hp, atk, def }
  38.     }
  39.     //main game fighting loop
  40.     fn fight(player1: &mut Player, player2: &mut Player) {
  41.         let mut done = false;
  42.         let mut round = 1;
  43.  
  44.         while !done {
  45.             let mut damage = player1.damage_received(player2.atk);
  46.             player1.hp -= damage;
  47.             println!("{} attacked {} for {}", player2.name, player1.name, damage);
  48.             println!("!! round {} begin !!", round);
  49.             println!("{} has {} hp", player1.name, player1.hp);
  50.             if player1.is_alive() == false {
  51.                 done = true;
  52.                 break;
  53.             }
  54.             damage = player2.damage_received(player1.atk);
  55.             player2.hp -= damage;
  56.             println!("{} attacked {} for {}", player2.name, player1.name, damage);
  57.             println!("{} has {} hp", player2.name, player2.hp);
  58.             if player2.is_alive() == false {
  59.                 done = true;
  60.                 break;
  61.             }
  62.             round += 1;
  63.         }
  64.     }
  65.     // after fight loop if player1 HP is > 0 he wins, else player2 wins
  66.     fn who_wins(player1: Player, player2: Player) {
  67.         if player1.is_alive() {
  68.             println!("{} has {} hp, {} wins!",player2.name, player2.hp, player1.name)
  69.         } else {
  70.             println!("{} has {} hp, {} wins!", player1.name, player1.hp, player2.name)
  71.         }
  72.     }
  73. }
  74.  
  75. fn main() {
  76.     let mut player1 = Player::new(String::from("tim"), 100, 10, 10);
  77.     let mut player2 = Player::new(String::from("jim"), 100, 10, 10);
  78.     Player::fight(&mut player1, &mut player2);
  79.     Player::who_wins(player1, player2);
  80. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement