|
|  |
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;
}
/**
*
*
*/
}
|