/* S1010.java * ギャンブル必勝法 * (C) H.Ishikawa 2008 */ package simulation; import java.applet.*; import java.awt.*; import java.awt.event.*; import window.Window; public class S1010 extends Applet implements ActionListener { Button button0; public void init() { button0 = new Button(" 再実行 "); add(button0); button0.addActionListener(this); } public void actionPerformed(ActionEvent e) { String label = e.getActionCommand(); repaint(); } public void paint(Graphics g) { Window w ; w = new Window(); int SPACE = 30; int HIGHT = 400; int WIDTH = 640; long t; /* 賭の回数 */ long q = 100; /* 持ち金 はじめは100ドル */ long k = 1; /* 1回の賭金1ドル */ long T_END = 500; /* 終りの回数 */ /*グラフィックの準備*/ w.setWindow(0, 0.0,0.0,(double)T_END,500.0, SPACE,HIGHT-SPACE,WIDTH-SPACE,SPACE); w.axis(0, "t", T_END/10, "q", 100, g); w.moveTo(0, 0.0, q, g); g.setColor(Color.blue); /*メイン*/ for (t = 1; t <= T_END; t ++) { q = q - k; if (craps() == 1) { /* (3)勝った場合 */ q = q + 2 * k; k = 1; /* 1ドル賭ける */ } else { /* 負けた場合 */ k = k * 2; /* 2倍賭ける */ } w.lineTo(0, (double)(t), (double)(q), g); } } public static int dice(){ /* (1)サイコロ */ return((int)(Math.random() * 6.0 + 1)); } public static int craps(){ /* (2)クラプスのルール */ int r; /* 1:勝ち 0:負け */ int sum1; /* 和1 */ int sum2; /* 和2 */ sum1 = dice() + dice(); if (sum1 == 7 || sum1 == 11) { /* ナチュラル */ r = 1; } else if(sum1 == 2 || sum1 == 3 || sum1 == 12) { /* クラップス */ r = 0; } else { sum2 = 0; r = 0; while (sum2 != 7) { /* 7が出るまで */ sum2 = dice() + dice(); if (sum2 == sum1) { /* ポイント */ r = 1; break; } } } return(r); } }