;;; This program shows how you can and should compartmentalize your ;;; code. If you find yourself doing a block of commands several ;;; times, you should group the commands into a subroutine. The ;;; subroutings to WAR are named WAR_TIE and WAR_GET_CARD. pro war_tie, bankroll, wager print, "We tie!" print, "Do you (D)efend or (S)urrender?" ans = '' read, ans ans = strmid(ans, 0, 1) ;;; Use STRLOWCASE to force ANS to lower case if strlowcase(ans) eq 'd' then begin ;;; Give player a card (number between 1 and 14, inclusive) player_card = war_get_card(number=pnum, seed=seed) print, "Your card is "+string(player_card) ;;; Flip dealer card dealer_card = war_get_card(number=dnum, seed=seed) print, "My card is "+string(dealer_card) print ;;; If player's card is larger, add to bank roll else subtract wager case 1 of pnum gt dnum : begin print, "You win!" bankroll += wager end pnum lt dnum : begin print, "Oooo, sorry. You lose." bankroll -= wager*2 end else : bankroll += wager endcase endif else begin bankroll -= wager/2. endelse end function war_get_card, number=number, seed=seed number = round(randomu(seed)*13)+1 case 1 of number eq 1 or number eq 14 : begin number = 14 card = 'Ace' end number lt 11 : card = string(number) number eq 11 : card = 'Jack' number eq 12 : card = 'Queen' number eq 13 : card = 'King' endcase return, card end pro war ;;; Explain rules print, "You get a card, I get a card. If your's is larger you get" print, "win your wager. If mine is larger I take your wager." ;;; Prompt player for starting bankroll print, "What's your starting bankroll?" read, bankroll ;;; Prompt player for wager done = 0 while ~done do begin print, "Your bankroll is $"+string(round(bankroll)) cool = 0 print, "What's your wager?" while ~cool do begin read, wager if wager le bankroll then cool=1 else begin print, "Nice try buddy! Seriously, what's your wager?" endelse endwhile print ;;; Give player a card (number between 1 and 14, inclusive) player_card = war_get_card(number=pnum, seed=seed) print, "Your card is "+string(player_card) ;;; Flip dealer card dealer_card = war_get_card(number=dnum, seed=seed) print, "My card is "+string(dealer_card) print ;;; If player's card is larger, add to bank roll else subtract wager case 1 of pnum gt dnum : begin print, "You win!" bankroll += wager end pnum lt dnum : begin print, "Oooo, sorry. You lose." bankroll -= wager end else : war_tie, bankroll, wager endcase ;;; Ask to play again, if yes check to see if bankroll is nonzero and ;;; loop back to prompt for wager else say good bye if bankroll le 0 then begin done = 1 print,"Sorry, out of money!" break ;BREAK exits out of the loop early endif print,"Wanna play again? (y/n, default is yes)" answer = '' read, answer if strlowcase(answer) eq 'n' then begin done = 1 print,"Had enough, huh? Well, have a nice day!" print,"At least you still have $"+string(bankroll)+" left!" endif endwhile end