/* Written by Ramses Smeyers (rsmeyers@khk.org). Copyright (C) 2000 Ramses Smeyers This software may be used and distributed according to the terms of the GNU Public License, incorporated herein by reference. tux, tux_g and bsd taken from xtux by David Lawrence (philaw@camtech.net.au) bill taken from xbill by Brian Wellington and Matias Duarte images prepared by Dolphin (wim@hal.theo.kuleuven.ac.be) */ //#define DEBUG #undef DEBUG import java.awt.*; import java.applet.*; public class World { private Graphics g; private int width; private int height; private int number; private int world[][]; private int movement; private boolean evaluate; private Color wiskleur; private int totaldots=0,dotstaken=0; public World (Graphics g, int number, int width, int height, int movement) { this.g = g; this.number = number; world = new int[width+10][height+10]; this.width = width; this.height=height; this.movement = movement; switch(number){ case 0: makeLineH(1,1,width); makeLineV(1,1,height); makeLineH(1,height,width); makeLineV(width,1,height); makeLineH(64,64,20); makeLineV(64,64,110); makeLineH(64,174,20); makeLineV(84,64,110); makeLineH(64,240,86); makeLineH(64,260,86); makeLineV(64,240,20); makeLineV(150,220,20); makeLineH(150,220,20); makeLineV(170,220,60); makeLineV(150,260,20); makeLineH(150,280,20); makeLineH(64,328,20); makeLineV(64,328,104); makeLineV(84,328,104); makeLineH(64,432,20); makeLineV(150,1,40); makeLineH(150,40,20); makeLineV(170,1,40); makeLineV(150,110,43); makeLineH(150,110,20); makeLineV(170,110,43); makeLineH(150,152,20); makeLineV(150,460,40); makeLineH(150,460,20); makeLineV(170,460,40); makeLineV(150,348,45); makeLineH(150,348,20); makeLineV(170,348,45); makeLineH(150,392,20); // middenstuk makeLineV(239,180,140); makeLineV(381,180,140); makeLineH(239,180,143); makeLineH(239,320,40); // speciale Line zodat mannetjes in centrum niet // omhoog kunnen makeLineH2(240,186,141); makeLineH2(240,192,141); makeLineH2(240,198,141); makeLineH2(240,204,141); makeLineH2(240,210,141); makeLineH2(240,216,141); makeLineH2(240,222,141); makeLineH2(240,228,141); makeLineH2(240,234,141); makeLineH2(240,240,141); makeLineH2(240,246,141); makeLineH2(240,252,141); makeLineH2(240,258,141); makeLineH2(240,264,141); makeLineH2(240,270,141); makeLineH2(240,276,141); makeLineH2(240,282,141); makeLineH2(240,288,141); makeLineH2(240,294,141); makeLineH2(240,300,141); makeLineH2(240,306,141); makeLineH2(240,312,141); makeLineH2(240,318,141); makeLineH2(240,324,141); makeLineH2(240,330,141); makeLineH2(240,236,141); makeLineH(240,64,140); makeLineV(240,64,48); makeLineH(240,112,140); makeLineV(380,64,48); makeLineH(240,390,140); makeLineV(240,390,42); makeLineH(240,432,140); makeLineV(380,390,42); makeLineV(449,1,40); makeLineH(449,40,20); makeLineV(469,1,40); makeLineV(449,110,42); makeLineH(449,110,20); makeLineV(469,110,42); makeLineH(449,152,20); makeLineV(449,460,40); makeLineH(449,460,20); makeLineV(469,460,40); makeLineV(449,348,44); makeLineH(449,347 ,20); makeLineV(469,348,44); makeLineH(449,392,20); makeLineH(534,64,20); makeLineV(534,64,110); makeLineH(534,174,20); makeLineV(554,64,110); makeLineH(534,328,20); makeLineV(534,328,104); makeLineV(554,328,104); makeLineH(534,432,20); makeLineH(469,240,86); makeLineH(469,260,86); makeLineV(554,240,20); makeLineV(469,220,20); makeLineH(449,220,20); makeLineV(449,220,60); makeLineV(469,260,20); makeLineH(449,280,20); // de puntjes waar het om gaan plaatsen for (int i=33;i<470;i+=30){ makeDot(33,i); } for (int i=33;i<220;i+=30){ makeDot(117,i); } for (int i=297;i<470;i+=30){ makeDot(117,i); } for (int i=33;i<470;i+=30){ makeDot(207,i); } for (int i=33;i<470;i+=30){ makeDot(417,i); } for (int i=33;i<220;i+=30){ makeDot(501,i); } for (int i=297;i<470;i+=30){ makeDot(501,i); } for (int i=33;i<470;i+=30){ makeDot(591,i); } for (int i=238;i<400;i+=30){ makeDot(i,33); } for (int i=238;i<400;i+=30){ makeDot(i,147); } for (int i=238;i<400;i+=30){ makeDot(i,357); } for (int i=238;i<400;i+=30){ makeDot(i,465); } for (int i=148;i<180;i+=30){ makeDot(i,75); } for (int i=148;i<180;i+=30){ makeDot(i,179); } for (int i=148;i<180;i+=30){ makeDot(i,315); } for (int i=148;i<180;i+=30){ makeDot(i,429); } for (int i=448;i<480;i+=30){ makeDot(i,75); } for (int i=448;i<480;i+=30){ makeDot(i,179); } for (int i=448;i<480;i+=30){ makeDot(i,315); } for (int i=448;i<480;i+=30){ makeDot(i,429); } for (int i=64;i<96;i+=30){ makeDot(i,33); } for (int i=64;i<96;i+=30){ makeDot(i,207); } for (int i=64;i<96;i+=30){ makeDot(i,297); } for (int i=64;i<96;i+=30){ makeDot(i,465); } for (int i=532;i<564;i+=30){ makeDot(i,33); } for (int i=532;i<564;i+=30){ makeDot(i,207); } for (int i=532;i<564;i+=30){ makeDot(i,297); } for (int i=532;i<564;i+=30){ makeDot(i,465); } totaldots=countDot(); break; } }; public void teken(){ g.setColor(Color.black); for (int x=1; x<=width;x++){ for (int y=1;y<=height;y++){ g.setColor(Color.black); if (world[x][y] == 1) g.drawLine(x,y,x,y); } } for (int x=1; x<=width;x++){ for (int y=1;y<=height;y++){ if (world[x][y] == 3) drawDot(x,y); } } } public void drawDot(int x, int y){ g.setColor(Color.red); g.fillOval(x-4,y-4,8,8); } public void removeDot(int x,int y){ g.setColor(Color.white); g.fillOval(x-4,y-4,8,8); dotstaken++; double percentage = (double)dotstaken / (double)totaldots; g.setColor(Color.green); percentage *=height; int temp = (int)percentage; g.fillRect(width+5,1,10,temp); } public int countDot(){ int i=0; for (int x=1; x<=width;x++){ for (int y=1;y<=height;y++){ if (world[x][y] == 3) i++; } } return i; } public void makeDot(int x, int y){ world[x][y] = 3; } public void makeLineH (int x, int y, int lenght){ for (int i = x; i<(x+lenght);i++){ world[i][y] = 1; } } public void makeLineH2 (int x, int y, int lenght){ for (int i = x; i<(x+lenght);i++){ world[i][y] = 2; } } public void makeLineV (int x, int y, int lenght){ for (int i=y;i<(y+lenght);i++){ world[x][i] =1; } } // WallControl public boolean checkMoveDown(int x, int y){ int starty = y+62; int startx = x; int t=0; for (int i = starty; i<=starty+(3*2);i++){ if (checkLineH(startx,i,62,2)) t++; } #if DEBUG g.drawString(" "+x+" "+y,50,550); #endif if (t == 7) return true; else return false; } public boolean checkMoveUp(int x, int y){ int starty = y; int startx = x; int t=0; for (int i = starty; i>=starty-(3*2);i--){ if (checkLineH(startx,i,62,1)) t++; } if (t == 7) return true; else return false; } public boolean checkMoveRight(int x, int y){ int starty = y; int startx = x+62; int t=0; for (int i = startx; i<=startx+(3*2);i++){ if (checkLineV(i,starty,62)) t++; } if (t == 7) return true; else return false; } public boolean checkMoveLeft(int x, int y){ int starty = y; int startx = x; int t=0; for (int i = startx; i>=startx-(3*2);i--){ if (checkLineV(i,starty,62)) t++; } if (t == 7) return true; else return false; } public boolean checkLineH (int x, int y, int lenght,int richting){ int t = 0; for (int i = x; i<(x+lenght);i++){ if (world[i][y] == 1) {t ++;break;}; if (world[i][y] == 2 && richting==1) {t ++;break;}; } if (t > 0) return false; else return true; } public boolean checkLineV (int x, int y, int lenght){ int t = 0; for (int i = y; i<(y+lenght);i++){ if (world[x][i] == 1) {t ++;}; } if (t > 0) return false; else return true; } //Dotcontrol public void dotRemove(int x, int y){ for (int i=x;i<(x+62);i++){ for (int j=y;j<(y+62);j++){ if (world[i][j] == 3) { world[i][j]=0; removeDot(i,j); } } } } public void aiMove(int x, int y){ int check = 8; int borderx = x -check; int bordery = y -check; if (borderx < 0) borderx=0; if (bordery < 0) bordery=0; for (int i=borderx;i<(x+62+check);i++){ for (int j=bordery;j<(y+62+check);j++){ if (uitRec(i,j,x,y) && world[i][j]==3) drawDot(i,j); } } } public boolean uitRec(int curx, int cury, int x, int y){ if (curx < x+62 && curx >= x && cury < y+62 && cury>=y){ return false;} else { return true;} } }