// (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(); }