just update
[rwork.git] / blackjack.rb
bloba78a3a693d33ab2c48d120abc8d3140cc90f2084
1 #zatial zjednodusene pravidla:
3 #   Split
4 #   Bet?
5 #   ...
6 #je to neprehladne 
8 class Array; def sum; inject( nil ) { |sum,x| sum ? sum+x : x }; end; end
10 class Players
12     attr_accessor :a, :cards, :pk, :name#, :bet
13     # pk - Poradie v Kartach
14     def initialize(aName)
15         self.a = [2,3,4,5,6,7,8,9,10,10,10,10,11] * 4
16         self.cards = []
17         self.pk = 0
18         self.name = aName
19     end
21     def firstHit(n)
22         n.times do
23              self.cards[self.pk] = self.a.delete_at(self.a.index(self.a.sample))
24              if self.cards[self.pk] == 11 and self.cards.sum > 21 then
25                  if self.cards.sum - 11 + 1 <= 21#eso nahradim za 1
26                      self.cards[self.pk] = 1
27                  end
28              end
29              self.pk = self.pk.next
30         #     print ","
31         end
32         p self.cards
33         puts "\b \n#{self.name} has #{self.cards.sum}"
34     end
36     def hit(ask)
37         self.cards[self.pk] = self.a.delete_at(self.a.index(self.a.sample))
38         if self.cards[self.pk] == 11 and self.cards.sum > 21 then
39             if self.cards.sum - 11 + 1 <= 21#eso nahradim za 1
40                 self.cards[self.pk] = 1
41             end
42         end
43         self.pk = self.pk.next
44         # for x in self.cards
45         #     if not self.cards[self.cards.index(x)+1] # == nil :)
46         #         print " | "
47         #         print x
48         #     else
49         #         print x.to_s + ","
50         #     end
51         # end
52         # puts "\n----"
53         # puts "#{self.name} has #{self.cards.sum}" 
55         if self.check and ask == true then p self.cards; puts "#{self.name} has #{self.cards.sum}"; self.askMe
56         elsif not self.check then 
57             if @@on.cards.length == 1 then @@on.hit(false)
58             else p self.cards; results(@@on.cards.sum,@@ja.cards.sum)
59             end
60         else self.stay(@@ja.cards.sum) #probably now's playing The Dealer!
61         end
62     end
64     def check
65         if self.cards.sum > 21
66             return false 
67         else
68             return true
69         end
70     end
71     
72     def askMe
73         more = ""
74         avail = [1,2]
75         if self.cards.length == 2
76             more = "3. Double down"
77             avail = [1,2,"dd"]
78         end
79         if self.cards.length == 2 and self.cards[0] == self.cards[1]
80             more = more + "\n       4. Split"
81             avail = [1,2,"dd","split"]
82         end
83         print "          1. Hit
84           2. Stay
85           #{more}\n:"
86         i = gets.chomp.to_i
87         if    i == 1 then self.hit(true)
88         elsif i == 2 then @@on.stay(@@ja.cards.sum)
89         elsif avail[2] == "dd" then 
90             if i == 3 then
91                 #self.bet=self.bet*2
92                 #puts "#{self.name}'s bet is #{self.bet}"
93                 #puts "Dunno what's bet"
94                 self.hit(false)
95                 @@on.stay(@@ja.cards.sum)
96             end
97         elsif avail[3] == "split" then 
98             if i == 4 then return "I don't know this feature so far..." end
99         end
100     end
102     def stay(jaSum)
103         "on is thinking..."
104         onSum = self.cards.sum
105         if 
106             onSum >= 17 then p self.cards; puts "#{self.name} has #{self.cards.sum}"; results(onSum,jaSum)
107         elsif
108             onSum >= 2 and onSum <= 15 then self.hit(false)
109         elsif
110             onSum - jaSum >= 10 then p self.cards; puts "#{self.name} has #{self.cards.sum}"; results(onSum,jaSum)
111         elsif
112             onSum - jaSum < 10 then self.hit(false)
113         else
114             puts "Error occurred"
115         end
116     end
120 def results(onSum,jaSum)
121     print "You have: #{@@ja.cards.sum} ="
122     p @@ja.cards
123     print "Dealer has: #{@@on.cards.sum} ="
124     p @@on.cards
125   
126     if onSum > 21 and jaSum > 21 then puts "You lost the game"
127     elsif onSum > 21 and jaSum <= 21 then  puts "Winner is: #{@@ja.name}"
128     elsif jaSum > 21 and onSum <= 21 then  puts "Winner is: #{@@on.name}"
129     elsif jaSum == 21 and onSum == 21 and @@ja.cards.sum == 2 and @@on.cards.sum != 2 then "Blackjack!"
130     else 
131         if onSum < jaSum then  puts "Winner is: #{@@ja.name}"
132         elsif onSum > jaSum then  puts "Winner is: #{@@on.name}"
133         else puts "Push!"
134         end
135     end
136     puts "-----------\nWanna play again?"
137     ans = gets.chomp
138     print ":"
139     if ans == "y" or ans == "Y" then playGame
140     elsif ans == "n" or ans == "N" then exit
141     else
142         puts '!@#$ you!'
143     end
146     #@@ja.bet=50
147     #puts "#{@@ja.name}'s bet is #{@@ja.bet}\n----\n"
148 def playGame
149     system("clear")
150     @@ja = Players.new("   Frankie  ")
151     @@on = Players.new("   Dealer  ")
152     @@ja.firstHit(2)
153     @@on.firstHit(1)
154     @@ja.askMe
156 playGame