JAVAのソースを公開しています。
このゲームは三つのファイルから出来ています。
  1. cellbom2.java メインのファイルです。
  2. sysMap.java キャンバスのクラスです。ここに画像が張られています。
  3. mapdata.java マップのデータが入ってます。


cellbom2.java


/***********************************************************************
	CELL BOM 2
	森田浩喜   平成11年6月13日

 ***********************************************************************/

import java.awt.*;
import java.applet.*;

import sysMap;

public class cellbom2 extends Applet implements Runnable
{
	Thread g_thread = null;
	int gi_sleeptime = 300;
	int i =0,ii=0;
	private Image g_offscreanImage;
	private Graphics g_offscreanGC;
	private Image[] g_image = new Image[3];
	private MediaTracker g_MediaTracker ;
	static final int g_MDID = 1;

	private boolean gb_issecure;        //実行許可
	private boolean gb_isPlaying;       //プレイ中
	private boolean gb_isLoadOK;        //画像のロード済み
	private boolean gb_isWindo;         //メッセージ表示
	private boolean gb_isGOing;         //実行中
	private sysMap g_SysMap;

	private final String gstr_STRAT = "RESET";
	private final String gstr_sinka = "進化";
	private final String gstr_dai   = "代目";
	private Button g_STbutton;          // スタートボタン
	private Button g_sinbutton;         // 進化ボタン
	private Label g_label;

	private int gi_sedai=0;         //世代カウント

	private int g_kaisu =0;
	private int posX,posY;
	int kaisu =0;

	//丸の配置状況
	public int[][][] eraebase = new int[3][20][20];
	//丸のマスク
	int[][] mask = {{1,1,1},{1,0,1},{1,1,1}};

	public void init()
	{
		// Take out this line if you don't use symantec.itools.net.RelativeURL or symantec.itools.awt.util.StatusScroller
		//symantec.itools.lang.Context.setApplet(this);

		// This code is automatically generated by Visual Cafe when you add
		// components to the visual environment. It instantiates and initializes
		// the components. To modify the code, only use code syntax that matches
		// what Visual Cafe can generate, or Visual Cafe may be unable to back
		// parse your Java file into its visual environment.
		//{{INIT_CONTROLS
		setLayout(new BorderLayout(0,0));
		setSize(400,450);
		setBackground(new Color(12632256));
		//}}
		gb_isPlaying =true;    //プレイ中じゃない
		gb_isLoadOK = false;    //ロード未完
		gb_issecure = true;     //実行可能

		g_SysMap = new sysMap(400,400);

		for (int index = 0;index=40 && yy>=40)
    		{
    		    
    		    if (base[0][posX][posY]==1)
    			{
    			    kaisu--;
    			    base = dellboll(posX,posY,base);
    			}
    			else if (base[0][posX][posY]==0)
    			{
    			    base = setboll(posX,posY,1,base);
        			kaisu++;
    			}

    		}

		}
		
		
		return base;
		//g_SysMap.setbackstage(eraebase);
	}

	/**
	 * ボールをセットする
	 *
	 */
	private int[][][] setboll(int x,int y,int z,int[][][] base)
	{
		//System.out.println( "--- set boll "+Integer.toString(z)+" ---");
	    base[0][x][y] = z;

	    //if (z==1)
	    {
	        base[1][x][y] = z;

	    }
	    return base;
	}

	/**
	 * ボールを消す
	 */
	private int[][][] dellboll(int x,int y,int[][][] base)
	{
	    base[0][x][y] = 0;
	    base[1][x][y] = 0;
	    return base;
	}


    /** 
     *..*.:'゜☆゜':..*.:'゜☆゜':..*.:'゜☆゜':..*.:'゜☆゜':..*.:'゜☆゜':
     *
     * アクションイベント取得
     *..*.:'゜☆゜':..*.:'゜☆゜':..*.:'゜☆゜':..*.:'゜☆゜':..*.:'゜☆゜':
     */
    public boolean action(Event evt,Object ojt)
    {
        if(evt.target instanceof Button)
        {
            Button l_button = (Button)evt.target;
            if(gstr_sinka.equals(l_button.getLabel()))
            {
                g_sinbutton_ActionPerformed();
            }
            else if(gstr_STRAT.equals(l_button.getLabel()))
            {
                g_STbutton_ActionPerformed();
            }
        }
        return false;
    }
                


/*
 * 変化するマスを調べる
 *
 */
	void g_sinbutton_ActionPerformed()
	{
	    eraebase = g_SysMap.passBase();
	    //一度スタートしたら置き直し出来ない
	    
	    gb_isGOing = true;
	    g_STbutton.setEnabled(true);
		//世代を1増やす
		gi_sedai++;
		String str_hyoji = Integer.toString(gi_sedai)+gstr_dai;
		g_label.setText(str_hyoji);
	    //自分の周りのセルの数

	    int kazu=0;
		for (int i=0;i<20;i++)
		{
		    for (int j=0;j<20;j++)
		    {
		        for (int x=0;x<3;x++)
		        {
		            for (int y=0;y<3;y++)
		            {

		                kazu = kazu + eraebase[0][(i+x-1+20)%20][(j+y-1+20)%20]*mask[x][y];
		            }
		        }
		        if (eraebase[0][i][j]==0)
		        {
		            if (kazu==3 )    //まわりに3で出現
		            {
		                eraebase[1][i][j] = 1;
		            }
		            if (30 <= kazu && kazu <= 39)   //癌細胞は 30 代で発生
		            {
		                eraebase[1][i][j] = 10;
		            }
		        }
		        else if (eraebase[0][i][j]==1)
		        {
		            if (kazu <= 1 || kazu >= 4 )    //4 以上 1 以下で消える
		            {
		                eraebase[1][i][j] =2;
		            }
		        }
		        else if (eraebase[0][i][j]==10)     //癌細胞は 4 以上で消える
		        {
		            if(kazu >= 40 || kazu%10 != 0)
		            {
		                eraebase[1][i][j] =2;
		            }
		        }
		        kazu=0;
		    }

		}
		lookHairetu();
		//repaint();
		//制限リセット
		kaisu = 0;
		g_SysMap.setbackstage(eraebase);
	}

    /**
     *..*.:'゜☆゜':..*.:'゜☆゜':..*.:'゜☆゜':..*.:'゜☆゜':..*.:'゜☆゜':
     *  配列を見てボールを置いたり消したり
     *..*.:'゜☆゜':..*.:'゜☆゜':..*.:'゜☆゜':..*.:'゜☆゜':..*.:'゜☆゜':
     */
	protected void lookHairetu()
	{
	    for (int i=0;i<20;i++)
	    {
	        for (int j=0;j<20;j++)
	        {
	            if (eraebase[1][i][j] == 1)
	            {
	                //ボールを置く
	                eraebase = setboll(i,j,1,eraebase);
	            }
	            else if (eraebase[1][i][j] ==10)
	            {
	                //癌細胞を置く
	                eraebase = setboll(i,j,2,eraebase);
	            }
	            else if (eraebase[1][i][j] ==2)
	            {
	                //ボールを消す
	                eraebase = dellboll(i,j,eraebase);
	            }
	            eraebase[1][i][j] =0;
	        }
	    }
	 //   repaint();
	}

    /**
     *..*.:'゜☆゜':..*.:'゜☆゜':..*.:'゜☆゜':..*.:'゜☆゜':..*.:'゜☆゜':
     * リセットボタン
     *..*.:'゜☆゜':..*.:'゜☆゜':..*.:'゜☆゜':..*.:'゜☆゜':..*.:'゜☆゜':
     */
     
	void g_STbutton_ActionPerformed()
	{
		//世代を戻す
		gi_sedai = 0;
		String str_hyoji = Integer.toString(gi_sedai)+gstr_dai;
		g_label.setText(str_hyoji);
	   eraebase = g_SysMap.setstage(1);

    	g_SysMap.setbackstage(eraebase);
    	//セルをおけるように戻す
    	gb_isPlaying = true;
    	gb_isGOing = false;
    	g_sinbutton.setEnabled(true);
	}
}

sysMap.java mapdata.java ライフゲーム 戻る トップへ