乱数で石を設定する

三個の山に乱数で石を設定して描画します。

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

プログラムの作成

  1. メモ帳などでタイプして miyama.java の名前で保存して下さい。
    //★ 乱数で三個の山に石を並べる    前田 稔
    import java.applet.*;
    import java.awt.*;
    import javax.swing.*;
    import java.util.*;
    
    public class miyama extends JApplet
    {   static  Image   img;
        static  Random  rand;
        static  int     Yama[] = new int[3];    // 山に積まれた石の数
    
        // Initialize
        public void init()
        {   int     i;
            img = getImage(getDocumentBase(),"jewel.gif");
            rand = new Random();
            for(i=0; i<3; i++)  Yama[i]= rand.nextInt(15)+1;
        }
    
        // Paint
        public void paint(Graphics g)
        {   int   i,j,x,y;
            if (img!=null)
            {   for(i=0; i<3; i++)
                    for(j=0; j<Yama[i]; j++)
                    {   x= (i*200)+j/5*60+40;
                        y= 300-(j%5)*60;
                        g.drawImage(img,x,y,this);
                    }
            }
        }
    }
    
  2. Java Applet を起動する HTMLファイル(miyama.htm)です。
    <html>
      <body>
        <h3>乱数で石を並べる</h3>
        <applet code="miyama.class" width="640" height="400">
        </applet>
      </body>
    </html>
    

プログラムの説明

  1. "jewel.gif" が描画する石の画像です。
    60*60 ぐらいの適当な画像を用意して下さい。
    miyama.class を作成して、インターネットブラウザで miyama.htm を起動して下さい。
    プログラムを起動すると、三個の山に石が描画されます。
  2. 乱数を使うので java.util.* をインポートします。
    extends(クラスの継承) で JApplet を指定して下さい。
    img が石の画像の領域です。
    rand が乱数の領域です。
    Yama[] が三個の山に積まれた石の数です。
    import java.applet.*;
    import java.awt.*;
    import javax.swing.*;
    import java.util.*;
    
    public class miyama extends JApplet
    {   static  Image   img;
        static  Random  rand;
        static  int     Yama[] = new int[3];    // 山に積まれた石の数
    
  3. アプリケーション(ゲーム)の初期化を行う init() メソッドです。
    img に画像を入力します。
    乱数を初期化して Yama[] に1個〜15個の石を設定します。
        public void init()
        {   int     i;
            img = getImage(getDocumentBase(),"jewel.gif");
            rand = new Random();
            for(i=0; i<3; i++)  Yama[i]= rand.nextInt(15)+1;
        }
    
  4. paint() で山に設定されて石をウインドウに描画します。
    横方向に最大15個の石を並べる方が簡単なのですが、今回は縦に5個ずつ並べてみました。
        public void paint(Graphics g)
        {   int   i,j,x,y;
            if (img!=null)
            {   for(i=0; i<3; i++)
                    for(j=0; j<Yama[i]; j++)
                    {   x= (i*200)+j/5*60+40;
                        y= 300-(j%5)*60;
                        g.drawImage(img,x,y,this);
                    }
            }
        }
    

miyamacls を使う

  1. 上のプログラムを miyamacls を使って書き直してみました。
    Object Class の作成方法を学んで下さい。
    //★ miyamacls を定義する    前田 稔
    import java.applet.*;
    import java.awt.*;
    import javax.swing.*;
    import java.io.*;
    import javax.imageio.ImageIO;
    import java.util.*;
    import java.net.URL;
    import java.awt.event.*;
    
    public class miyama extends JApplet implements MouseListener
    {   miyamacls   obj;
    
        // Initialize
        public void init()
        {   obj = new miyamacls(getCodeBase(),"jewel.gif");
            addMouseListener(this);
            setBackground(new Color(200,200,200));
        }
    
        // Paint
        public void paint(Graphics g)
        {
            Dimension  size = getSize();
            g.setColor(getBackground());
            g.fillRect(0, 0, size.width, size.height);
            obj.View(g);
        }
    
        // Mouse Click
        public void mouseClicked(MouseEvent e)
        {   obj.SetT();
            repaint();
        }
    
        public void mousePressed(MouseEvent e){}
        public void mouseReleased(MouseEvent e){}
        public void mouseEntered(MouseEvent e){}
        public void mouseExited(MouseEvent e){}
    }
    
    //★ 三山くずし Object Class
    class miyamacls extends JApplet
    {   Image       Img;
        Random      Rand;
        int         T[] = new int[3];
        int         i,j,x,y;
    
        // Constructor
        miyamacls(URL url, String file)
        {
            Img= null;
            try
            {   URL u = new URL(url, file);
                Img = ImageIO.read(u);
            }
            catch (IOException e)
            {   System.out.println("Image File Load Error");
            }
            Rand = new Random();        //乱数の初期化
            SetT();
        }
    
        // 山の石を描画
        public void View(Graphics g)
        {
            if (Img!=null)
            {   for(i=0; i<3; i++)
                    for(j=0; j<T[i]; j++)
                    {   x= (i*200)+j/5*60+40;
                        y= 300-(j%5)*60;
                        g.drawImage(Img,x,y,this);
                    }
            }
        }
    
        // 乱数で山に石を設定
        public void SetT()
        {   while(true)
            {   for(i=0; i<3; i++)  T[i]= Rand.nextInt(15)+1;
                if (T[0]!=T[1] && T[0]!=T[2] && T[1]!=T[2]) return;
            }
        }
    }
    

miyamacls プログラムの説明

  1. そのままでは面白く無いので、マウスのクリックで山の石を再設定して描画します。
    マウスのクリックを検出するので java.awt.event.* をインポートします。
    乱数を使うので java.util.* をインポートします。
    マウスのクリックを検出するので MouseListener を implements(実装) します。
    miyamacls obj; が miyamacls の定義です。
    //★ miyamacls を定義する    前田 稔
    import java.applet.*;
    import java.awt.*;
    import javax.swing.*;
    import java.io.*;
    import javax.imageio.ImageIO;
    import java.util.*;
    import java.net.URL;
    import java.awt.event.*;
    
    public class miyama extends JApplet implements MouseListener
    {   miyamacls   obj;
    
  2. init() で miyamacls をインスタン化(生成)します。
    MouseListener を設定します。
        public void init()
        {   obj = new miyamacls(getCodeBase(),"jewel.gif");
            addMouseListener(this);
            setBackground(new Color(200,200,200));
        }
    
  3. paint() では背景色で塗りつぶしてから obj.View(g) で山の石を描画します。
        public void paint(Graphics g)
        {
            Dimension  size = getSize();
            g.setColor(getBackground());
            g.fillRect(0, 0, size.width, size.height);
            obj.View(g);
        }
    
  4. マウスがクリックされたときの処理です。
    obj.SetT(); で山の石を再設定して repaint(); で描画します。
        public void mouseClicked(MouseEvent e)
        {   obj.SetT();
            repaint();
        }
    
  5. miyamacls の Constructor です。
    画像を入力して山に石を設定します。
        miyamacls(URL url, String file)
        {
            Img= null;
            try
            {   URL u = new URL(url, file);
                Img = ImageIO.read(u);
            }
            catch (IOException e)
            {   System.out.println("Image File Load Error");
            }
            Rand = new Random();        //乱数の初期化
            SetT();
        }
    
  6. 山の石を描画する View() メソッドです。
    縦に5個ずつ並べて描画します。
        public void View(Graphics g)
        {
            if (Img!=null)
            {   for(i=0; i<3; i++)
                    for(j=0; j<T[i]; j++)
                    {   x= (i*200)+j/5*60+40;
                        y= 300-(j%5)*60;
                        g.drawImage(Img,x,y,this);
                    }
            }
        }
    
  7. 乱数で山に石を設定する SetT() メソッドです。
    二個の山の石が同じ数だと必勝手が見え見えなので、同じ数にならないようにしています。
        public void SetT()
        {   while(true)
            {   for(i=0; i<3; i++)  T[i]= Rand.nextInt(15)+1;
                if (T[0]!=T[1] && T[0]!=T[2] && T[1]!=T[2]) return;
            }
        }
    

[Next Chapter ↓] 交互にプレイする
[Previous Chapter ↑] 三山くずしの説明

Java Game Program