// (c) 1998 Ekkehard Kraemer (ekraemer@pluto.camelot.de)
import java.awt.*;
import java.io.*;
import java.util.*;
import java.net.*;
/**
* Sorry, not documented yet.
*
* Source
*/
class Field
{
Field(BojngInterface bojng,URL urlBase,Canvas canvas)
{
this.bojng=bojng;
this.urlBase=urlBase;
items=new Item[height][width];
}
synchronized void clear()
{
itemCnt=0;
freeBlocks.removeAllElements();
timedItems.removeAllElements();
for (int y=0; y':
return new Block(bojng,Images.grow,Item.GROW);
case 'L':
return new Block(bojng,Images.newball,Item.NEWBALL);
case 'X':
return new Block(bojng,Images.bomb,Item.BOMB);
case 'H':
return new Block(bojng,Images.teleport,Item.TELEPORT);
case 'r':
return new Block(bojng,Images.block[0],Item.NONE);
case 'g':
return new Block(bojng,Images.block[1],Item.NONE);
case 'b':
return new Block(bojng,Images.block[2],Item.NONE);
case 't':
return new Block(bojng,Images.block[3],Item.NONE);
case '0':
return new Block(bojng,Images.block[4],Item.NONE);
case 'y':
return new Block(bojng,Images.block[5],Item.NONE);
case 'p':
return new Block(bojng,Images.block[6],Item.NONE);
default:
return new Block(bojng,Images.block[6],Item.UNKN);
}
return null;
}
// setzt + initialisiert ein Item
synchronized void placeItem(int x,int y,Item i)
{
if (items[y][x]==null)
{
if (i.count) itemCnt++;
for (Enumeration e=freeBlocks.elements(); e.hasMoreElements(); )
{
Point p=(Point)(e.nextElement());
if (p.x==x && p.y==y)
{
freeBlocks.removeElement(p);
break;
}
}
}
items[y][x]=i;
i.init(x,y,bojng._blockwidth(),bojng._blockheight());
}
synchronized public boolean removeItem(int x,int y)
{
Item i=items[y][x];
if (i==null) return false;
freeBlocks.addElement(new Point(x,y));
timedItems.removeElement(i);
items[y][x]=null;
if (i.count) itemCnt--;
if (itemCnt<1) return true;
return false;
}
synchronized void explodeAllBlocks()
{
for (int y=0; y=width || y>=height) return null;
return items[y][x];
}
synchronized Point getFreeBlock()
{
if (freeBlocks.size()==0) return null;
return (Point)(freeBlocks.elementAt(bojng.posRand(freeBlocks.size())));
}
synchronized void placeRandom(int ms)
{
Point p=getFreeBlock();
if (p==null) return;
Item i=null;
switch (bojng.posRand(1))
{
//case 0: i=new Block(bojng,prod.getImage('r'),Item.NONE); break;
}
if (i!=null)
{
placeItem(p.x,p.y,i);
timedItems.addElement(i);
i.ageLeft=7000/ms;
bojng.msg("Get it!");
}
}
synchronized void tick()
{
for (Enumeration e=timedItems.elements(); e.hasMoreElements(); )
{
Item i=(Item)(e.nextElement());
i.ageLeft--;
if (i.ageLeft<1)
{
i.hit();
timedItems.removeElement(i);
bojng.msg("Too late...");
}
}
}
final int width=9,height=17; // Number of blocks (0,0)=links oben
Item[][] items;
Vector freeBlocks=new Vector();
Vector timedItems=new Vector();
int itemCnt;
BojngInterface bojng;
URL urlBase;
Random rand=new Random();
}