fmemo
バカラ
最終更新:
Bot(ページ名リンク)
-
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;
}
参考サイト http://www.bj-10jqka.com/programs/Perl/index.html