goo blog サービス終了のお知らせ 

TOY VOX

管理人VOX6336が昭和レトロな遊びをするだけのブログです。スマートフォンでの閲覧推奨。

ブラックジャック 8

2020-04-21 08:56:54 |  カード
これまで39年前に作られたポケコンのプログラム解析をしてきたが、①52枚のカードを使っていないこと、②子のブラックジャックが9倍役であること等々変わったルールであることが分かった。39年前はこれでよかったのだろう。
ちなみに本職(プログラマー)に聞いたところ、初期設定が最後にくるのはエディタのせいで、リストの最後になるのだそうだ。
あらためて、以前自作したプログラムを改造する方向でブラックジャックのプログラムについて考えてみたい。
参考文献として図書館でこのような本を借りてきた。


ブルーバックス B-1352
確率·統計であばくギャンブルのからくり
「絶対儲かる必勝法」のウソ
2001年11月20日 第1刷発行
著者 谷岡一郎

第4章の大部分を使ってブラックジャックの必勝戦術について論じられている。

コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

ブラックジャック 7

2020-04-16 08:38:03 |  カード
プログラム解析4回目。

520行目、Zに33+A(30) を代入。この時点で配列変数A(30)=0 なので、Z=33となる。さらに A(Z) に 1 を足す。この時点で A(33)=0 なので、A(33)=0+1=1 となる。

530行目、A(35) に 28+A(30) を代入。この時点で配列変数A(30)=0 なので、A(35)=28 となる。

540行目、A((Z-19)+A(Z)) をさきほど発生した1~13の乱数とする。 Z は 33 で、A(33)=1 なので、この配列変数は A(34) である。さらに Z を 31+A(30) とするが、この時点で配列変数A(30)=0 なので、Z=31+0=31 となる。

600 IF Y=1 LET A(Z)=A(Z)+11:A(A(35))=A(A(35))+1:GOTO 630
さきほど発生した乱数が 1 である場合、A(31) を 0+11=11 とする。これは「A」の処理だろう。配列変数A(28) を 0+1=1 とする。630行目へ飛び、オーバーの判定をする。

610 IF Y>9 LET A(Z)=A(Z)+10:GOTO 630
さきほど発生した乱数が 10以上である場合、A(31) を 0+10=10 とする。これは「10」「J」「Q」「K」の処理だろう。630行目へ飛び、オーバーの判定をする。

620 A(Z)=A(Z)+Y
A(31) にさきほど発生した乱数を足す。

630 IF A(Z)<22 GOTO 690
オーバーの判定。A(31) が 21以下であればメインルーチンへもどる。

640 IF A(Z-3)=0 GOTO 690
配列変数A(28) が 0 であればメインルーチンへもどる。この場合、0 なのでもどる。

650 A(Z)=A(Z)-10:A(Z-3)=A(Z-3)-1:GOTO 630
もしオーバーしていて、しかも配列変数A(28) が 0 でない場合、A(31) から10 を引く。これは「A」の処理だろう。A(28) の数字をひとつへらして、ふたたびオーバーの判定をする。

690 RETURN
メインルーチンへもどる。


ところでこのプログラムは39年前に「ポケットコンピューター友の会」の杉山哲夫さんという方が作ったものであるらしい。
テクニックのかたまりのようなプログラムである。トランプ52枚を使っていないようだが、それはメモリの関係でしかたがないのだろう。
コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

ブラックジャック 6

2020-04-14 07:52:15 |  カード
39年前のポケコンのプログラムを読んでいる。その3回目。

100行目、サブルーチンへ飛ぶ。ここからのサブルーチンがこのプログラムの肝であるような気がする。




500行目、よく分からないのだが、変数Uと変数Vを使って乱数を発生させているらしい。機械語でやる処理をダイレクトにベーシック言語にするとこうなるのだろうか。
510行目、Yが0以下あるいは14以上ならもう一度500行目の処理をくりかえす。
スマイルベーシックでやるなら、

Y=RND[13]+1

となるのだろうか。





コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

ブラックジャック 5

2020-04-13 08:03:12 |  カード
10行目、「A」を押してプログラム開始、タイトル表示。「PAUSE」命令はおそらく少し時間をあける、もしくはキー入力があるまで止まるというものだろう。プログラムの実行画面は1行しかないので、このような工夫がされている。
20行目、いきなりサブルーチンへとぶ。



700、710行目、初期設定。文字列A$〜N$にトランプの数字、記号と空白を代入。最初の持ち金は「E3」=1000。4桁以上の数字はこんな感じで表される。
790行目、もどる(RETURN)。
なぜ初期設定をわざわざ一番後に入れたのか分からないのだが、たぶんこれはメモリを節約するためなのではないかと思う。
40行目、配列変数A(25)〜A(34)を初期化。FORループ、「I」じゃなくて「P」をつかうんだな。
60行目、プレイヤーの持ち金Wを表示。
70行目、プレイヤーは掛け金Xを入力。
80行目、もし掛け金がゼロだったり、持ち金より多かったらもう一度入力。
90行目、P、Q、R、S、Tに14を代入。説明によると「親と子のカードスタック」であるらしい。分からないがとにかく先へ進める。


コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

ブラックジャック 4

2020-04-13 04:41:25 |  カード
80年代にシャープ電卓事業部ポケコングループが作成したブラックジャックのプログラムを入手した(『ポケコン・ライブラリーSeries-1』、1981年、日本ソフトバンク)。




パソコン黎明期のプログラマーはすごい。これ、どうやって乱数を発生させているのだろう?本当にこんな短いプログラムで動くのだろうか?

以下、何度かに分けてプログラムを解析してみたい。


コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする