fmemo
バカラ
最終更新:
fmemo
-
view
このページはwikipediaのバカラの項目(日本語版と英語版)を参考にしている。
はじめに
バカラでは、仮想的なバンカーとプレイヤーの勝負がおこなわれる。賭けの参加者はバンカーの得点が多いか、プレイヤーの得点が多いか、あるいは引き分けになるかに対して賭けをおこなう。
得点の計算方法
Aは1点、2-9の札はその数字、10と絵札は0点となる。得点が10を上回ったときは下一桁の数字を得点とする。
ゲームの流れ
まずディーラーはバンカーサイドとプレイヤーサイドの両方に2枚づつカードを配る。この時点で、どちらかの得点が8点もしくは9点だった場合はそこで終了となる。両者の得点が6点もしくは7点のときもそこで終了となる。それ以外の場合は、以下の基準に従って、3枚目のカードを引く。そして、両者の点数を比べて勝負を決める。得点の多いほうが勝ちである。
プレイヤーの行動基準
もし、プレイヤーの点数が5点以下なら三枚目のカードを引く(Hit)。それ以外の場合は引かない(Stand)。
バンカーの行動基準
プレイヤーが3枚目のカードを引いていない場合
バンカーの点数が点以下ならHit。それ以外の場合はStand。
プレイヤーが3枚目のカードを引いている場合
- プレイヤーの3枚目のカードが2または3のとき、バンカーの点数が4点以下ならHit。それ以外の場合はStand
- プレイヤーの3枚目のカードが4または5のとき、バンカーの点数が5点以下ならHit。それ以外の場合はStand
- プレイヤーの3枚目のカードが6または7のとき、バンカーの点数が6点以下ならHit。それ以外の場合はStand
- プレイヤーの3枚目のカードが8のとき、バンカーの点数が2点以下ならHit。それ以外の場合はStand
- プレイヤーの3枚目のカードがそれ以外のとき、バンカーの点数が3点以下ならHit。それ以外の場合はStand
配当
- プレイヤーサイドに賭けていて、プレイヤーサイドが勝った場合、2倍の配当がもらえる。
- バンカーサイドに賭けていて、バンカーサイドが勝った場合、1.95倍の配当がもらえる。
- タイに賭けていて、タイになった場合、8倍の配当がもらえる。
ソースコード
use strict; use warnings; my $num_deck = 4; my @deck = shuffle($num_deck); my @banker_hand = splice(@deck,0,2); my @player_hand = splice(@deck,0,2); my $banker_score = score(@banker_hand); my $player_score = score(@player_hand); if($banker_score < 8 && $player_score < 8 ){ push @player_hand, (shift @deck) if($player_score <=5); if (@player_hand == 2){ push @banker_hand, (shift @deck) if($banker_score <=5); }else{ if($player_hand[2]=~ /^.[23]$/){ push @banker_hand, (shift @deck) if($banker_score <=4); }elsif($player_hand[2]=~/^.[45]$/){ push @banker_hand, (shift @deck) if($banker_score <=5); }elsif($player_hand[2]=~/^.[67]$/){ push @banker_hand, (shift @deck) if($banker_score <=6); }elsif($player_hand[2]=~/^.8$/){ push @banker_hand, (shift @deck) if($banker_score <=2); }else{ push @banker_hand, (shift @deck) if($banker_score <=3); } } $banker_score = score(@banker_hand); $player_score = score(@player_hand); } if($banker_score > $player_score){ print "banker won.\n"; }elsif($banker_score < $player_score){ print "player won.\n"; }else{ print "tie.\n"; } print "banker hand: @banker_hand,$banker_score\n"; print "player hand: @player_hand,$player_score\n"; # カードをシャッフルする sub shuffle { srand(); my $num_deck = shift; my @stack =(); for my $n (1..$num_deck){ for my $s ("S","H",,"D","C"){ for my $i (2,3,4,5,6,7,8,9,"T","K","Q","J","A"){ push @deck, "$s$i"; } } } while($#deck>=0){ push @stack,splice(@deck,int(rand($#deck+1)),1); } return @stack; } # 点数を計算する sub score { my @hand = @_; my $score = 0; for my $card(@hand){ if( $card =~ /^.A$/ ){ $score += 1; }elsif($card =~ /^.(\d)$/){ $score += $1; } } if($score >=10){ $score %= 10; } return $score; }