Internet Start Page  TOP  
 Road of Developers
 
 


DownLoad Billgame.lzh(ソースコード付き)



//////////////////////////////////////////////////////////////////////////////////////
/////////////////////////
//
import java.applet.Applet;
import java.applet.AudioClip;
import java.awt.*;
import java.awt.image.CropImageFilter;
import java.awt.image.FilteredImageSource;
/**
 *
 * 
 */
public class BillJava extends Applet implements Runnable
{
    boolean m_same;
    boolean m_up;
    int m_block;
    int m_erase;
    int m_next;
    int m_element[][];
    int m_temporary[][];
    Thread m_thread;
    Graphics m_g;
    Font m_font;
    MediaTracker m_mt;
    Image m_image[];
    AudioClip m_sound[];
    Color m_table[];
    static final int pause_run = 50;
    static final int pause_start = 500;
    static final int pause_slide = 50;
    static final int pause_erase = 100;
    static final int pause_over = 50;
    static final int unit_size = 32;
    static final int font_size = 24;
    static final int null_block = 0;
    static final int wall_block = 10;
    static final int gate_block = 11;
    static final int erase_block = -1;
    static final int erase_max = 65535;
    static final int sound_start = 0;
    static final int sound_slide = 1;
    static final int sound_erase = 2;
    static final int sound_over = 3;
    static final int image_num = 12;
	/**
	 *
	 */
	public BillJava()
    {
        m_table = (new Color[] {
            Color.gray, Color.green, Color.blue, Color.red, Color.yellow, Color.magenta, Color.cyan, Color.orange, Color.white, Color.black, 
            Color.lightGray, Color.lightGray
        });
    }
	/**
	 *
	 */
	public void init()
    {
        m_erase = 0;
        m_element = new int[4][6];
        m_temporary = new int[4][6];
        m_thread = null;
        m_g = getGraphics();
        m_font = new Font("TimesRoman", 0, 24);
        m_mt = new MediaTracker(this);
        String s = getParameter("image");
        Image image = s != null ? getImage(getDocumentBase(), s) : null;
        m_image = new Image[12];
        for(int i = 0; i < 12; i++)
            if(image != null)
            {
                m_image[i] = createImage(new FilteredImageSource(image.getSource(), new CropImageFilter(i * 32, 0, 32, 32)));
                m_mt.addImage(m_image[i], 0);
            } else
            {
                int j = 0;
                int l = 0;
                m_image[i] = createImage(32, 32);
                Graphics g = m_image[i].getGraphics();
                g.setColor(m_table[i]);
                g.fillRect(j, l, 32, 32);
                if(i != 0)
                {
                    g.setColor(Color.white);
                    g.fillRect(j, l, 32, 1);
                    g.fillRect(j, l, 1, 32);
                    g.setColor(Color.darkGray);
                    g.fillRect(j + 1, (l + 32) - 1, 32, 1);
                    g.fillRect((j + 32) - 1, l + 1, 1, 32);
                    if(i == 11)
                    {
                        j += 4;
                        l += 4;
                        g.setColor(Color.darkGray);
                        g.fillRect(j, l, 24, 1);
                        g.fillRect(j, l, 1, 24);
                        g.setColor(Color.white);
                        g.fillRect(j + 1, (l + 32) - 8 - 1, 24, 1);
                        g.fillRect((j + 32) - 8 - 1, l + 1, 1, 24);
                    }
                }
            }

        m_sound = new AudioClip[4];
        for(int k = 0; k < 4; k++)
            m_sound[k] = getAudioClip(getCodeBase(), "bill" + k + ".au");

        init_field();
    }
	/**
	 *
	 *
	 */
    public void start()
    {
        if(m_thread == null)
        {
            m_thread = new Thread(this);
            m_thread.start();
        }
    }
	/**
	 *
	 *
	 */
    public void stop()
    {
        if(m_thread != null)
        {
            m_thread.stop();
            m_thread = null;
        }
    }
	/**
	 *
	 *
	 */
    public void run()
    {
        try
        {
            m_mt.waitForID(0);
        }
        catch(InterruptedException _ex)
        {
            return;
        }
        repaint();
        do
            pause(50);
        while(true);
    }
	/**
	 *
	 *
	 */
    public void update(Graphics g)
    {
        paint(g);
    }
	/**
	 *
	 *
	 */
    public void paint(Graphics g)
    {
        if(m_mt.checkID(0))
        {
            disp_score(g);
            disp_wall(g);
            disp_field(g);
            return;
        } else
        {
            g.setFont(m_font);
            g.setColor(Color.black);
            g.drawString("Now Loading ...", 16, 160);
            return;
        }
    }
	/**
	 *
	 *
	 */
    public void init_field()
    {
        for(int i = 0; i <= 3; i++)
        {
            for(int j = 0; j <= 5; j++)
                m_element[i][j] = 0;

        }

        m_next = 11;
    }
	/**
	 *
	 *
	 */
    public void game_start()
    {
        if(m_next != 11)
        {
            init_field();
            disp_field(m_g);
        }
        m_next = 0;
        disp_next(m_g);
        disp_gate(m_g);
        m_sound[0].play();
        pause(500);
        m_up = false;
        m_block = 3;
        m_erase = 0;
        disp_score(m_g);
        m_next = get_block();
        disp_next(m_g);
        slide();
    }
	/**
	 *
	 *
	 */
    public void bottom_up(int i)
    {
        if(m_next == 11)
            return;
        if(i < 0 || i > 3)
            return;
        if(m_element[i][0] != 0)
            return;
        if(m_element[i][5] == 0)
            return;
        m_up = true;
        for(int j = 0; j <= 4; j++)
            m_element[i][j] = m_element[i][j + 1];

        m_element[i][5] = 0;
        disp_bottom_up(m_g, i);
        slide();
        m_up = false;
    }
	/**
	 *
	 *
	 */
    public void slide()
    {
        for(int i = 3; i >= 0; i--)
            if(m_element[i][5] == 0)
            {
                for(int j = i; j < 3; j++)
                    m_element[j][5] = m_element[j + 1][5];

                m_element[3][5] = m_next;
                m_next = get_block();
                m_sound[1].play();
                pause(50);
                disp_slide(m_g, i);
            }

        check_block();
    }
	/**
	 *
	 *
	 */
    public void check_block()
    {
        m_same = false;
        for(int i = 0; i <= 3; i++)
        {
            for(int j = 0; j <= 5; j++)
                m_temporary[i][j] = m_element[i][j];

        }

        for(int k = 0; k <= 0; k++)
        {
            for(int l = 0; l <= 5; l++)
                erase_horizon(k, l);

        }

        for(int i1 = 0; i1 <= 3; i1++)
        {
            for(int j1 = 0; j1 <= 2; j1++)
                erase_vertical(i1, j1);

        }

        for(int k1 = 0; k1 <= 0; k1++)
        {
            for(int l1 = 0; l1 <= 2; l1++)
            {
                erase_diagonal1(k1, l1);
                erase_diagonal2(k1, l1);
            }

        }

        if(m_same)
        {
            disp_erase(m_g, false);
            m_sound[2].play();
            pause(100);
            disp_erase(m_g, true);
            pause(100);
            disp_erase(m_g, false);
            pause(100);
            disp_erase(m_g, true);
            pause(100);
            disp_erase(m_g, false);
            pause(100);
            garbage_block();
            return;
        }
        for(int i2 = 0; i2 <= 3; i2++)
            if(m_element[i2][0] == 0)
                return;

        m_sound[3].play();
        disp_over(m_g);
    }
	/**
	 *
	 *
	 */
    public void garbage_block()
    {
        for(int i = 0; i <= 3; i++)
        {
            for(int j = 0; j <= 5; j++)
                if(m_element[i][j] == -1)
                {
                    for(int k = j; k > 0; k--)
                        m_element[i][k] = m_element[i][k - 1];

                    m_element[i][0] = 0;
                }

        }

        disp_field(m_g);
        slide();
    }
	/**
	 *
	 *
	 */
    public void erase_horizon(int i, int j)
    {
        int k = 0;
        if(m_temporary[i][j] == 0)
            return;
        for(int l = i + 1; l <= i + 3; l++)
            if(m_temporary[l][j] == m_temporary[i][j])
                k++;

        if(k == 3)
        {
            for(int i1 = i; i1 <= i + 3; i1++)
                m_element[i1][j] = -1;

            erase_count();
        }
    }
	/**
	 *
	 *
	 */
    public void erase_vertical(int i, int j)
    {
        int k = 0;
        if(m_temporary[i][j] == 0)
            return;
        for(int l = j + 1; l <= j + 3; l++)
            if(m_temporary[i][l] == m_temporary[i][j])
                k++;

        if(k == 3)
        {
            for(int i1 = j; i1 <= j + 3; i1++)
                m_element[i][i1] = -1;

            erase_count();
        }
    }
	/**
	 *
	 *
	 */
    public void erase_diagonal1(int i, int j)
    {
        int k = 0;
        if(m_temporary[i][j] == 0)
            return;
        for(int l = i + 1; l <= i + 3; l++)
            if(m_temporary[l][j + l] == m_temporary[i][j])
                k++;

        if(k == 3)
        {
            for(int i1 = i; i1 <= i + 3; i1++)
                m_element[i1][j + i1] = -1;

            erase_count();
        }
    }
	/**
	 *
	 *
	 */
    public void erase_diagonal2(int i, int j)
    {
        int k = 0;
        if(m_temporary[i][j + 3] == 0)
            return;
        for(int l = i + 1; l <= i + 3; l++)
            if(m_temporary[l][(j + 3) - l] == m_temporary[i][j + 3])
                k++;

        if(k == 3)
        {
            for(int i1 = i; i1 <= i + 3; i1++)
                m_element[i1][(j + 3) - i1] = -1;

            erase_count();
        }
    }
	/**
	 *
	 *
	 */
    public int get_block()
    {
        int ai[] = {
            1, 1, 1, 2, 2, 3, 1, 1, 1, 2, 
            3, 4
        };
        int i = (int)(Math.random() * (double)((m_block - 2) * 6));
        return ai[i];
    }
	/**
	 *
	 *
	 */
    public void erase_count()
    {
        if(m_erase < 65535)
        {
            m_erase++;
            disp_score(m_g);
            if(m_erase == 10)
                m_block++;
        }
        m_same = true;
    }
	/**
	 *
	 *
	 */
    public void disp_wall(Graphics g)
    {
        for(int i = -1; i <= 6; i++)
        {
            disp_block(g, i, -1, 10);
            disp_block(g, i, 6, 10);
        }

        for(int j = 0; j <= 5; j++)
            disp_block(g, -1, j, 10);

        for(int k = 0; k <= 3; k++)
            disp_block(g, 4, k, 10);

        disp_gate(g);
    }
	/**
	 *
	 *
	 */
    public void disp_field(Graphics g)
    {
        for(int i = 0; i <= 5; i++)
        {
            for(int j = 0; j <= 3; j++)
                disp_block(g, j, i, m_element[j][i]);

        }

        disp_next(g);
    }
	/**
	 *
	 *
	 */
    public void disp_bottom_up(Graphics g, int i)
    {
        for(int j = 0; j <= 5; j++)
            disp_block(g, i, j, m_element[i][j]);

    }
	/**
	 *
	 *
	 */
    public void disp_slide(Graphics g, int i)
    {
        for(int j = i; j <= 3; j++)
            disp_block(g, j, 5, m_element[j][5]);

        disp_next(g);
    }
	/**
	 *
	 *
	 */
    public void disp_erase(Graphics g, boolean flag)
    {
        for(int i = 0; i <= 5; i++)
        {
            for(int j = 0; j <= 3; j++)
                if(m_element[j][i] == -1)
                    if(flag)
                        disp_block(g, j, i, m_temporary[j][i]);
                    else
                        disp_block(g, j, i, 0);

        }

    }
	/**
	 *
	 *
	 */
    public void disp_over(Graphics g)
    {
        for(int i = 0; i <= 4; i++)
        {
            for(int j = 0; j <= 3; j++)
            {
                for(int l = 5; l > 0; l--)
                    m_element[j][l] = m_element[j][l - 1];

                m_element[j][0] = 0;
            }

            disp_field(g);
            pause(50);
        }

        for(int k = 0; k <= 5; k++)
        {
            m_next = m_element[3][5];
            for(int i1 = 3; i1 > 0; i1--)
                m_element[i1][5] = m_element[i1 - 1][5];

            m_element[0][5] = 0;
            disp_field(g);
            pause(50);
        }

        m_next = 11;
        disp_gate(g);
        disp_next(g);
    }
	/**
	 *
	 *
	 */
    public void disp_gate(Graphics g)
    {
        if(m_next == 11)
        {
            disp_block(g, 4, 4, 10);
            return;
        } else
        {
            disp_block(g, 4, 4, 11);
            return;
        }
    }
	/**
	 *
	 *
	 */
    public void disp_next(Graphics g)
    {
        disp_block(g, 4, 5, m_next);
    }
	/**
	 *
	 *
	 */
    public void disp_block(Graphics g, int i, int j, int k)
    {
        i = 32 * ++i;
        j = 32 * ++j + 32;
        m_g.drawImage(m_image[k], i, j, this);
    }
	/**
	 *
	 *
	 */
    public void disp_score(Graphics g)
    {
        g.setColor(Color.lightGray);
        g.fillRect(0, 0, 192, 32);
        g.setColor(Color.white);
        g.fillRect(0, 0, 192, 1);
        g.fillRect(0, 0, 1, 32);
        g.setColor(Color.darkGray);
        g.fillRect(1, 31, 192, 1);
        g.fillRect(191, 1, 1, 31);
        String s = "BillGame - " + m_erase;
        g.setFont(m_font);
        g.setColor(Color.white);
        g.drawString(s, 17, 26);
        g.setColor(Color.darkGray);
        g.drawString(s, 16, 25);
    }
	/**
	 *
	 *
	 */
    public void pause(int i)
    {
        try
        {
            Thread.currentThread();
            Thread.sleep(i);
            return;
        }
        catch(InterruptedException _ex)
        {
            return;
        }
    }
	/**
	 *
	 *
	 */
    public boolean keyDown(Event event, int i)
    {
        switch(i)
        {
        default:
            break;

        case 52: // '4'
        case 97: // 'a'
        case 106: // 'j'
            if(!m_up)
                bottom_up(0);
            break;

        case 53: // '5'
        case 107: // 'k'
        case 115: // 's'
            if(!m_up)
                bottom_up(1);
            break;

        case 54: // '6'
        case 100: // 'd'
        case 108: // 'l'
            if(!m_up)
                bottom_up(2);
            break;

        case 43: // '+'
        case 59: // ';'
        case 102: // 'f'
            if(!m_up)
                bottom_up(3);
            break;

        case 10: // '\n'
        case 27: // '\033'
            game_start();
            break;
        }
        return true;
    }
	/**
	 *
	 *
	 */
    public boolean mouseDown(Event event, int i, int j)
    {
        int k = i / 32 - 1;
        int l = (j - 32) / 32 - 1;
        if(l < 0 || l > 5 || k < 0)
            return true;
        if(k > 3)
        {
            if(m_next == 11)
            {
                if(l == 5)
                    game_start();
            } else
            if(l == 4)
                game_start();
            return true;
        }
        if(!m_up)
            bottom_up(k);
        return true;
    }
	/**
	 *
	 *
	 */
}
インターネットスタートページ 鈴木維一郎 石橋三重子
         
               
                   


©2000 kg-group Inc.