じゃんけんゲームβ版

得点を競う「じゃんけんゲーム」のβ版(得点版)です。

Java Applet の実行は、次のリンクをクリックして下さい。
じゃんけんゲームβ版

前田稔の超初心者のプログラム入門

プログラムの作成

  1. メモ帳などでタイプして jyanken.java の名前で保存して下さい。
    //★ じゃんけんゲーム得点版    前田 稔
    import java.awt.*;
    import javax.swing.*;
    import java.awt.event.*;
    import java.util.*;
    
    public class jyanken extends JApplet implements MouseListener
    {   static  Image   img;
        static  int     hand=0, com=0;
        static  int     gcnt=0, m_val=0, c_val=0;
        static  Random  rand;
        // グー(あいこ,負け,勝ち), チョキ(あいこ,負け,勝ち), パー(あいこ,負け,勝ち)
        static  int     TBL[][] = { { 3, -5, 5 }, { 1, 0, 2 }, { 0, 0, 15 } };
    
        // Initialize
        public void init()
        {   img = getImage(getDocumentBase(),"jyanken.gif");
            addMouseListener(this);
            rand = new Random();
            setBackground(Color.gray);
        }
    
        // Paint
        public void paint(Graphics g)
        {   int  judge;
            Dimension  size = getSize();
            g.setColor(getBackground());
            g.fillRect(0, 0, size.width, size.height);
            g.drawImage(img,10,10,250,90,this);
            g.drawImage(img,10,110,130,230,com*120,0,com*120+120,120,this);
            g.drawImage(img,140,110,260,230,hand*120,0,hand*120+120,120,this);
            g.setFont(new Font("Helvetica",Font.PLAIN,32));
            g.setColor(Color.black);
            g.drawString("わたし",20,260);
            g.drawString("あなた",160,260);
            judge= (hand-com+3)%3;
            switch(judge)
            {   case 0: g.setColor(Color.yellow);
                        g.drawString("あいこです",10,290);
                        break;
                case 1: g.setColor(Color.red);
                        g.drawString("わたしの勝ち",10,290);
                        break;
                case 2: g.setColor(Color.green);
                        g.drawString("あなたの勝ち",10,290);
                        break;
            }
            if (gcnt>0)
            {   m_val+= TBL[hand][judge];
                judge= (com-hand+3)%3;
                c_val+= TBL[com][judge];
            }
            g.setColor(Color.blue);
            g.drawString(Integer.toString(c_val),20,320);
            g.drawString(Integer.toString(m_val),160,320);
        }
    
        // コンピュータ側の手を考える
        int  think(int cnt)
        {   if (cnt%12<5)       return(1);
            else if(cnt%12<6)   return(2);
            else if(cnt%12<11)  return(1);
            else return(0);
        }
    
        public void mouseClicked(MouseEvent e)
        {   gcnt++;
            hand= ((e.getX()+10)/80)%3;
            com = think(gcnt);
            repaint();
        }
    
        public void mousePressed(MouseEvent e){}
        public void mouseReleased(MouseEvent e){}
        public void mouseEntered(MouseEvent e){}
        public void mouseExited(MouseEvent e){}
    }
    
  2. Java Applet を起動する HTML ファイルです。
    <html>
    <body>
    <h3>じゃんけんゲーム</h3>
        「グー、チョキ、パー」の組み合わせにより得点が異なります。<br>
        <TABLE BORDER="1">
          <TR><TH>手</TH>        <TH>勝ち</TH>   <TH>負け</TH>   <TH>あいこ</TH></TR>
          <TR><TD>グー(0)</TD>   <TD>5点</TD>   <TD>−5点</TD> <TD>3点</TD></TR>
          <TR><TD>チョキ(1)</TD> <TD>2点</TD>   <TD>0点</TD>   <TD>1点</TH></TR>
          <TR><TD>パー(2)</TD>   <TD>15点</TD> <TD>0点</TD>   <TD>0点</TH></TR>
        </TABLE>
        グー・チョキ・パーの画像をクリックして下さい。<br>
    <applet code=jyanken.class width=280 height=340>
    </applet>
    </body>
    </html>
    
  3. インターネットブラウザを起動して jyanken.htm から実行して下さい。
    コンピュータ相手に、得点を競う「じゃんけんゲーム」が実行出来たら完成です。

Java プログラムの説明

  1. クリックで手を決める の続きです。
    基本的な説明は「クリックで手を決める」を参照して下さい。
  2. 単に乱数で「じゃんけん」をするだけでは面白みに欠けます。
    そこで「グー、チョキ、パー」の組み合わせにより以下のように得点を決めます。
    勝ち 負け あいこ
    グー(0) 5点 −5点 3点
    チョキ(1) 2点 0点 1点
    パー(2) 15点 0点 0点
    例えば、グーで勝てば5点、負ければ−5点で、パーで勝てば15点、負けても0点です。
  3. 単純に勝率を競う場合に比べて、戦略が生まれます。
    どの手を出すのが有利でしょうか?
    何時もパーを出せば、必ず勝てるでしょうか?
  4. gcnt は回数のカウントで、m_val が人間側の得点で、c_val がコンピュータ側の得点です。
    TBL[][] は得点を計算するためのテーブルです。
        static  int     gcnt=0, m_val=0, c_val=0;
        // グー(あいこ,負け,勝ち), チョキ(あいこ,負け,勝ち), パー(あいこ,負け,勝ち)
        static  int     TBL[][] = { { 3, -5, 5 }, { 1, 0, 2 }, { 0, 0, 15 } };
        
  5. paint() メソッドでウインドウを描画します。
    プログラムの起動直後に paint() メソッドが呼ばれるので、gcnt でゲームの開始を判定します。
    人間側とコンピュータ側の得点を計算して表示します。
        // Paint
        public void paint(Graphics g)
        {   Dimension  size = getSize();
                ・・・
            if (gcnt>0)
            {   m_val+= TBL[hand][judge];
                judge= (com-hand+3)%3;
                c_val+= TBL[com][judge];
            }
            g.setColor(Color.blue);
            g.drawString(Integer.toString(c_val),20,320);
            g.drawString(Integer.toString(m_val),160,320);
        }
        
  6. マウスがクリックされたときの処理です。
    クリックされた座標からグー・チョキ・パーを計算して hand に設定します。
    コンピュータ側の手を think(gcnt) で決めます。
    repaint() で描画するメソッド(paint) を呼び出します。
        public void mouseClicked(MouseEvent e)
        {   gcnt++;
            hand= ((e.getX()+10)/80)%3;
            com = think(gcnt);
            repaint();
        }
        
  7. コンピュータがもっと強くなるように think(gcnt) メソッドを工夫して下さい。
    「じゃんけんバトルゲーム」の詳細は 前田稔の超初心者のプログラム入門 から「プログラム入門(C言語 Windows)/じゃんけんバトルゲーム 」を参照して下さい。

Java Game Program