交互にプレイする

プレイヤーとコンピュータが交互にプレイします。

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

プログラムの作成

  1. メモ帳などでタイプして play.java の名前で保存して下さい。
    //★ 交互にプレイする    前田 稔
    //   appletviewer play.htm
    import java.awt.*;
    import javax.swing.*;
    import java.awt.event.*;
    import java.util.*;
    
    public class play extends JApplet implements MouseListener
    {   static  Image   img;
        static  Random  rand;
        static  int     Count;          // 山に積まれた石の数
        static  int     Max;            // 一度に取り除く最大数
        static  int     Teban= 0;       // 手番と勝敗
    
        // Initialize
        public void init()
        {   img = getImage(getDocumentBase(),"jewel.gif");
            addMouseListener(this);
            rand = new Random();
            Count= rand.nextInt(20)+11;
            Max  = rand.nextInt(5)+2;
        }
    
        // Paint
        public void paint(Graphics g)
        {   int   i,x,y;
            Dimension  size = getSize();
            g.setColor(getBackground());
            g.fillRect(0, 0, size.width, size.height);
            g.setFont(new Font("Helvetica",Font.PLAIN,32));
            g.setColor(Color.black);
            g.drawString("最後の石を取らされた方が負けです", 20,50);
            g.drawString("最大" + Integer.toString(Max) + "個まで取ることができます", 20,80);
            if (img!=null)
            {   for(i=0; i<Count; i++)
                {   x= (i%10)*60+20;
                    y= (i/10)*60+100;
                    g.drawImage(img,x,y,this);
                }
            }
            switch(Teban)
            {   case 0:
                    g.drawString("クリックで石を取り除いて下さい", 20,350);
                    break;
                case 1:
                    g.drawString("私の手番です。クリックして下さい", 20,350);
                    break;
                case 2:
                    g.drawString("私の勝ちです。確認して下さい", 20,350);
                    break;
                case 3:
                    g.drawString("私の負けです。確認して下さい", 20,350);
                    break;
            }
        }
    
        // Mouse Click
        public void mouseClicked(MouseEvent e)
        {   int xp,yp,n;
    
            switch(Teban)
            {   case 0:     // あなたの手番
                    xp= (e.getX()/60);
                    yp= ((e.getY()-80)/60);
                    n= yp*10+xp;
                    if (n<Count-Max || n>=Count)
                    {   System.out.println("クリックの座標エラー" + "  x=" + xp + "  y=" + yp);
                        return;
                    }
                    Count= n;
                    Teban= 1;
                    if (Count==0)   Teban= 2;
                    repaint();
                    return;
                case 1:
                    Count--;
                    Teban= 0;
                    if (Count==0)   Teban= 3;
                    repaint();
                    return;
            }
        }
    
        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>
    <applet code="play.class" width="640" height="400">
    </applet>
    </body>
    </html>
    
  3. インターネットブラウザを起動して Play.htm から実行して下さい。
    マウスの操作でプレイヤーとコンピュータが交互にプレイします。
    プレイヤーがプレイするとき以外は、どこでも適当にクリックして下さい。

Java プログラムの説明

  1. Count が山に積まれた石の数で、Max が一度に取り除く最大数です。
    Teban がゲームを制御する領域で、次のようになっています。
        public class play extends JApplet implements MouseListener
        {   static  Image   img;
            static  Random  rand;
            static  int     Count;          // 山に積まれた石の数
            static  int     Max;            // 一度に取り除く最大数
            static  int     Teban= 0;       // 手番と勝敗
        
  2. paint() でウインドウを描画します。
    Teban の状態によって、ゲームの案内メッセージを表示します。
    プレイヤーがプレイするとき以外は、どこでも適当にクリックして下さい。
        public void paint(Graphics g)
        {   int   i,x,y;
            Dimension  size = getSize();
            g.setColor(getBackground());
            g.fillRect(0, 0, size.width, size.height);
            g.setFont(new Font("Helvetica",Font.PLAIN,32));
            g.setColor(Color.black);
            g.drawString("最後の石を取らされた方が負けです", 20,50);
            g.drawString("最大" + Integer.toString(Max) + "個まで取ることができます", 20,80);
            if (img!=null)
            {   for(i=0; i<Count; i++)
                {   x= (i%10)*60+20;
                    y= (i/10)*60+100;
                    g.drawImage(img,x,y,this);
                }
            }
            switch(Teban)
            {   case 0:
                    g.drawString("クリックで石を取り除いて下さい", 20,350);
                    break;
                case 1:
                    g.drawString("私の手番です。クリックして下さい", 20,350);
                    break;
                case 2:
                    g.drawString("私の勝ちです。確認して下さい", 20,350);
                    break;
                case 3:
                    g.drawString("私の負けです。確認して下さい", 20,350);
                    break;
            }
        }
        
  3. マウスがクリックされたときの処理です。
    Teban の状態によって、処理の内容が異なります。
    コンピュータの手番では Count--; で山から1個の石を取り除くだけです。
        public void mouseClicked(MouseEvent e)
        {   int xp,yp,n;
    
            switch(Teban)
            {   case 0:     // あなたの手番
                    xp= (e.getX()/60);
                    yp= ((e.getY()-80)/60);
                    n= yp*10+xp;
                    if (n<Count-Max || n>=Count)
                    {   System.out.println("クリックの座標エラー" + "  x=" + xp + "  y=" + yp);
                        return;
                    }
                    Count= n;
                    Teban= 1;
                    if (Count==0)   Teban= 2;
                    repaint();
                    return;
                case 1:
                    Count--;
                    Teban= 0;
                    if (Count==0)   Teban= 3;
                    repaint();
                    return;
            }
        }
        

[Next Chapter ↓] 石取りゲームα版
[Previous Chapter ↑] 乱数で石の数を決める

Java Game Program