「一攫千金プログラミング ~ボットdeジャックポット~」ブラックジャックのBOTを作る本格的なプログラミングゲーム!

プレイヤーだけのAIを作り億万長者になれ!AIをうまく作成し、ハイスコアを目指すプログラミングカードゲームです。プログラミングに興味がある方はもちろん、プログラミングのことをよくしらない初心者の方でもサンプルコードをみながら安心してプレイできます!

 

まずは公式動画をチェック!

実際のプログラミングを体験

 

『一攫千金プログラミング ~ボットdeジャックポット~』はゲームというより

プログラミングをゲームとして楽しむコンテンツです。

 

ブラウザ上で簡易的なエディタを用いてプログラミングをし、

カジノでお馴染みのブラックジャックをするBOTを作っていきます。

BOTといっても難しいことはなく、

ただプレイヤーのプログラミングをする感じです。

 

プログラミングに触れたことがある方や、

これからプログラミングを学習したいという方にとって面白いゲームとなるでしょう。

 

転職サイトpaizaのコンテンツ

このPCブラウザゲームを運営しているpaizaはIT系ないしWebエンジニアに特化した転職サイトです。

これまでにも『ロジックサマナー』『もし次の常駐先が女子エンジニアばっかりだったら』

といった様々なプログラミング系ゲームをリリースしてきました。

 

転職サイトとゲームがどう結びつくのか不思議に思うかもしれませんが、

こうしたゲーム形式で

転職希望者やプレイヤーのプログラミングスキルを測ろうという狙いがあるようです。

 

ともかくプログラミングをゲームとして楽しみたいならpaizaのコンテンツはチェックして損はありません。

 

本当にプログラミングする

近年では簡易的なプログラミング言語『Scratch』を始めとして

プログラミングの入り口になるようなコンテンツが増えました。

 

パーツを組み合わせて命令を構成するようなコンテンツは

若年層をメインターゲットとして広まっています(もちろん大人でも十分に楽しめるでしょう)。

ですがこのブラウザゲームは本当にプログラミングを行います。

 

実際に業務で使われているプログラミング言語を用いて課題を解いていくわけです。

そのためこれまで全くプログラミングに触れたことが無い、

という方にとっては厳しいかもしれません。

逆にいえばプログラミングに触れたことがある方にとってはやりがいのあるゲームとなるでしょう。

 

対応言語は盛りだくさん

プログラミング言語といっても世の中にはたくさんありますが、

このPCゲームに対応している言語はかなりの数となっています。

全てを挙げると

 

「Java・PHP・Ruby・Python2・Python3・Perl・C・C++・C#・JavaScript・Objective-C・Scala・Go¥Swift・Haskell(Beta)・Erlang(Beta)・R(Beta)・COBOL(Beta)・VB(Beta)・F#(Beta)・Clojure(Beta)・D(Beta)・Kotlin(Beta)・Elixir(Beta)・Rust(Beta)・Rust(Beta)・Scheme(Beta)」となります。

 

何だか壮観ですが基本となる言語は抑えている形です。

それにしても多いですね。

F#とかRとか耳慣れない言語にも対応しているあたりはエンジニア系の転職サイトが運営しているからこそかもしれません。

 

質実剛健なコードが目の前に

繰り返しになりますが、このPCゲームは本当にプログラミングをすることになります。

例えばJavaであれば以下のような形で記述することになるのです。

 

Scanner scanner = new Scanner(System.in);
String line = scanner.nextLine();
int[] my_cards = Arrays.asList(line.split(” “)).stream().mapToInt(Integer::parseInt).toArray();

 

まず1行目ですが、

これはスキャナークラスを作成し標準入力を受け取る準備をしています。

本作では様々な情報は標準入力として受け渡されるのです。

 

2行目では標準入力と結びついたスキャナーから

1行目をString型のオブジェクトであるlineへと読み込んでいる形です。

そして3行目はlineに格納されたデータをint型の配列に変換しつつ格納しています。

 

プログラミングを経験していても何だか難しそうですし、

3行目ともなるとギョワーと悲鳴が聞こえてきそうですが、大丈夫です。

これらはサンプルプログラムとして用意されていますし、

3行目も必要に合わせてメンバ名を変えてコピペしてしまえば良かったりします。

 

理解するところはざっと理解してもっと中心的なところを楽しんでいきましょう。

とはいえ上記の部分はこのプログラミングゲームにとって重要な部分なので外すわけにもいきません。

 

チップを賭ける数を指定

まず最初のプログラミングらしいところはこの部分となります。

続いてもJavaを例にしますが、他の言語でも似たような処理を行っているので確認してみて下さい。

 

if(my_cards[0] == 0) {
System.out.print(“1”);
}

 

これは「my_cards[0]に0が格納されていたら1を表示しなさい」という命令なのですが、

このプログラミングゲームでは1回の勝負に賭けるチップ数を指定する機能をもっています。

1回目の実行時には必ずmy_cards[0]には0が入るようになっているので、

ある意味お約束的な処理ともいえるでしょう。

 

なお相手となるディーラーによって賭けられるチップ上限はそれぞれ異なります。

ゲームが進行していくに連れ大量のチップを賭けられるディーラーと対戦することができるようになるので、

序盤は少なめでも構わないでしょう。

 

どのようなときにカードを引くか

本作のブラックジャックは対面で2人対戦というルールになります。

最初に2枚ずつ開示したカードを配り、

次のカードを引くかどうかを互いのプレイヤーが決断していくわけです。

 

カードの合計数少ないほど弱く、21が最も強く、22以上は役になりません。

というルールを把握した上でプレイヤーはBOTを作っていきます。

そしてこのカードを引くかどうか、といった選択処理にあたる部分が以下のコードとなります。

 

int card_total = Arrays.stream(my_cards).sum();
if(card_total < 10){
System.out.print(“HIT”);
} else {
System.out.print(“STAND”);
}

 

まずcard_totalで持ち札の合計数を算出しています。

次の「if(card_total < 10){…}」というのは「card_totalが10以下なら{…}を実行せよ」という意味です。

 

そして「…print(“HIT”)」はカードを引くという意味で、

同じ命令文にSTANDを指定しているものはカードをこれ以上引かずに勝負をするという意味になります。

 

最初、プレイヤーは自分の手札の情報しか与えられないので

「○以下ならカードを引く」といった命令をするぐらいしかできません。

ですがゲームが進行していくと相手の手札の合計数も把握できるようになります。

 

すると「相手よりもこちらの数が少ないときに引く」とか

相手に勝っているがまだ合計数が15だからもう1枚引く」といった処理を書けるようになるのです。

 

具体例を見てみよう

全体を書くと長くなってしまうので、有効と思われる処理の具体例を一部だけ見ていきましょう。

例えばブラックジャックではエースを1ないし11として数えることができますが、

これを具体的に処理すると以下のようになります。

 

int sum=0;
for(int i=0;i<my_cards.length;i++){
sum += my_cards[i];
if(my_cards[i] == 1){
if((sum + 10) <= 21){
sum+=10;
my_cards[i] = 11;
}
}
}

 

これはやや乱暴ですがmy_cards配列の合計数を出す過程で1が見つかった場合に21以下なら11とし、

21以上なら1として数えるという処理になります。

 

最後にmy_cards[i] = 11と、

配列にエースを11として数えるよう処理しているのは後に合計数を配列から求めているためです。

カードを引く場合の分岐処理では以下のようにboolean型を使って実現することも可能です。

 

boolean hit=false;

if(card_total <= e_card_total){
hit=true;
}
if(card_total <= 15){
hit=true;
}
if(e_card_total >= 21){
hit=false;
}

if(hit){
System.out.print(“HIT”);
} else {
System.out.print(“STAND”);
}

 

一気に分岐処理を詰め込むとif(((card_total <= e_card_total) &&(…))||(…))

といったように一見して何がなにやらとなりがちですが、

真偽値であるboolean型を使えばスッキリ実現することができます。

 

なおe_card_totalとはディーラーの手札の合計数を示している形です。

ここでの処理は

 

「相手の数より自分の数が少ない、ないし手札の合計数が15以下なら手札を引き、

そうでない場合ないし相手の手札が21以上なら引かないで勝負をする」

というものとなります。

 

なぜ相手が21のときに勝負しないのかというと、

同点の場合はこちらの負けとなってしまうためです。

 

これらの処理は筆者が考えたものとなりますが、

もちろん独自に様々な処理を書くことができます。

プログラミングの面白さを十分に味わうことができるでしょう。

 

プログラミングが好きな方向けのゲーム

『一攫千金プログラミング ~ボットdeジャックポット~』はプログラミングで

ブラックジャックのBOTを作りディーラーと対決していくゲームです。

 

実際に使われているプログラミング言語を使うことになるので

自由度はかなり高いといえるでしょう。

 

ただログが出ないのでエラーが出た場合は大変だったりします。

別にエディタを用意し、そちらで試してから本作のエディタにコピペするのも良いでしょう。

 

ゲームが進むにつれてできることが増えていくので追求しがいのある作品となっています。

プログラミングに親しんでいる方や興味のある方にオススメです。

 

ちなみにプログラミングに没頭していると忘れがちになりますが、

ディーラーの女の子がかわいかったりします。ぜひプレイしてみて下さい!