150 lines
		
	
	
		
			3.7 KiB
		
	
	
	
		
			V
		
	
	
			
		
		
	
	
			150 lines
		
	
	
		
			3.7 KiB
		
	
	
	
		
			V
		
	
	
| import rand
 | |
| import time
 | |
| import os
 | |
| 
 | |
| const (HelpText = ' Usage:\t./VCasino\n
 | |
|  Description:\n  VCasino is a little game only made to learn V.\n')
 | |
| const (GDesc = '  The object of Roulette is to pick the number where the spinning ball will land on the wheel.
 | |
|    If your number is the good one, you\'ll get your bet x3.
 | |
|    If your number is the same color as the ball one, you\'ll get your bet /2.
 | |
|    Otherwise, you will lose your bet.\n')
 | |
| const (Odd = 'Red' Even = 'Black')
 | |
| 
 | |
| struct Options {
 | |
|     long_opt string
 | |
|     short_opt string
 | |
| }
 | |
| 
 | |
| fn display_help() {
 | |
|     println(HelpText + GDesc)
 | |
| }
 | |
| 
 | |
| fn option_parser() bool {
 | |
|     help := Options{'--help', '-h'}
 | |
|     for i in 0..os.args.len {
 | |
|         if os.args[i]== help.long_opt || os.args[i]== help.short_opt {
 | |
|             display_help()
 | |
|             return true
 | |
|         }
 | |
|     }
 | |
|     return false
 | |
| }
 | |
| 
 | |
| fn str_is_nbr(s string) bool {
 | |
| 	for i in 0..s.len {
 | |
|         if !s[i].is_digit() {
 | |
|             return false
 | |
|         }
 | |
|     }
 | |
|     return true
 | |
| }
 | |
| 
 | |
| fn get_bet_nbr() int {
 | |
|     mut bet_nbr := -1
 | |
|     for bet_nbr < 0 || bet_nbr > 49 {
 | |
|         println('Reminder: Odd numbers are red and even are black.')
 | |
|         println('Type the number you want to bet on (between 0 and 49):')
 | |
| 		line := os.get_line().trim_space()
 | |
|         if line.len < 1 {
 | |
|             println('error: empty line.')
 | |
|             continue
 | |
|         }
 | |
|         if !str_is_nbr(line) {
 | |
|             println('error: $line is not a number.')
 | |
|             continue
 | |
|         }
 | |
|         bet_nbr = line.int()
 | |
|         if bet_nbr < 0 || bet_nbr > 49 {
 | |
|             println('error: $line is not between 0 and 49.')
 | |
|             bet_nbr = -1
 | |
|             continue
 | |
|         }
 | |
|     }
 | |
|     return bet_nbr
 | |
| }
 | |
| 
 | |
| fn get_bet(money int) int {
 | |
|     mut bet := -1
 | |
|     for bet <= 0 || bet > money {
 | |
|         println('You\'ve $money V. Type in the amount of your bet:')
 | |
| 		line := os.get_line().trim_space()
 | |
|         if line.len < 1 {
 | |
|             println('error: empty line.')
 | |
|             continue
 | |
|         }
 | |
|         if !str_is_nbr(line) {
 | |
|             println('error: $line is not a number.')
 | |
|             continue
 | |
|         }
 | |
|         bet = line.int()
 | |
|         if bet <= 0 {
 | |
|             println('error: $line is not heigher than 1.')
 | |
|             continue
 | |
|         } else if bet > money {
 | |
|             println('error: $line is more money than you have.')
 | |
|         }
 | |
|     }
 | |
|     return bet
 | |
| }
 | |
| 
 | |
| fn run_wheel(bet_nbr int, _bet int) int {
 | |
| 	mut bet := _bet
 | |
|     rand.seed(time.now().unix)
 | |
|     winning_nbr := rand.next(50)
 | |
|     print('Roulette Wheel spinning... and stops on the number $winning_nbr which is a ')
 | |
|     if winning_nbr % 2 == 1 {
 | |
|         println(Odd)
 | |
|     } else {
 | |
|         println(Even)
 | |
|     }
 | |
|     if winning_nbr == bet_nbr {
 | |
|         bet *= 3
 | |
|         println('Congratulations! You get $bet V!')
 | |
|     } else if winning_nbr % 2 == bet_nbr % 2 {
 | |
|         bet /= 2
 | |
|         println('You bet the right color. You get $bet V!')
 | |
|     } else {
 | |
|         println('Sorry buddy. You lost $bet V!')
 | |
|         bet *= -1
 | |
|     }
 | |
|     return bet
 | |
| }
 | |
| 
 | |
| fn is_broke(money int) bool {
 | |
|     if money <= 0 {
 | |
|         println('You\'broke, the game is over..')
 | |
|         return false
 | |
|     } else {
 | |
|         quit := Options{'yes', 'y'}
 | |
|         println('You\'ve $money V. Do you want to quit the casino with your winnings? (y/n)')
 | |
|    	    line := os.get_line().trim_space().to_lower()
 | |
|         if line== quit.long_opt || line== quit.short_opt {
 | |
|             return false
 | |
|         }
 | |
|     }
 | |
|     return true
 | |
| }
 | |
| 
 | |
| fn game_loop() {
 | |
|     mut can_play := true
 | |
|     mut money := 1000
 | |
| 
 | |
|     println(GDesc)
 | |
|     println('You start the game with $money V.\n')
 | |
|     for can_play {
 | |
|         bet_nbr := get_bet_nbr()
 | |
|         bet := get_bet(money)
 | |
|         money += run_wheel(bet_nbr, bet)
 | |
|         can_play = is_broke(money)
 | |
|     }
 | |
| }
 | |
| 
 | |
| fn main() {
 | |
|     if os.args.len >= 2 {
 | |
|         if option_parser() {
 | |
|             return
 | |
|         }
 | |
|     }
 | |
|     game_loop()
 | |
| }
 |