Hamster
Aus ProgrammingWiki
Wiki-Quelltext dieser Seite.
<language>Java</language>
Im Internet Explorer ist die Darstellung deutlich langsamer als im FireFox. Es wird deshalb der FireFox Browser für die Hamsterbeispiele empfohlen.
<code id="4b03d247ead06" hidden>
int GridSize = 50;
public Object Hamster(Object Spielfeld) {
public int x;
public int y;
public int look = 0; // 0 up, 1 right, 2 down, 3 left
int speed = 50;
Object Feld= Spielfeld;
int inMouth = 0;
void wait() {
if(speed < 1) speed = 1;
if(speed > 100) speed = 100;
Thread.sleep(1000-(speed-1)*10);
}
void vor() {
wait();
Feld.drawField(x,y);
if(look == 0)
if(y > 0) y--; else y = Feld.sizeY-1;
if(look == 1)
if(x < Feld.sizeX-1) x++; else x = 0;
if(look == 2)
if(y < Feld.sizeY-1) y++; else y = 0;
if(look == 3)
if(x > 0) x--; else x = Feld.sizeX-1;
draw();
}
void linksUm() {
wait();
if(look == 0) look = 3; else
if(look == 1) look = 0; else
if(look == 2) look = 1; else
if(look == 3) look = 2;
draw();
}
void nimm() {
wait();
if(Feld.map[x][y] > 0) {
Feld.map[x][y]--;
inMouth++;
draw();
}else alert("Kein Korn hier");
}
void gib() {
wait();
if(inMouth > 0){
Feld.map[x][y]++;
inMouth--;
draw();
}else alert("Kein Korn im Mund");
}
boolean vornFrei() {
if(look == 0)
if(y > 0) return Feld.map[x][y-1] != -1;
if(look == 1)
if(x < Feld.sizeX-1) return Feld.map[x+1][y] != -1;
if(look == 2)
if(y < Feld.sizeY-1) return Feld.map[x][y+1] != -1;
if(look == 3)
if(x > 0) return Feld.map[x-1][y] != -1;
return false;
}
boolean kornDa() {
return Feld.map[x][y] > 0;
}
boolean maulLeer() {
return inMouth == 0;
}
void draw(){
Feld.drawField(x,y);
canvas.drawImage(x*GridSize,y*GridSize,GridSize,GridSize,"http://michael-hielscher.de/hamster/hamster"+look+".png");
}
return this;
}
public Object Spielbrett() {
public int sizeX = 8;
public int sizeY = 8;
public int[][] map= new int[sizeX][sizeY];
void initMap(){
canvas.clear();
for(int y=0; y < sizeY; y++)
for(int x=0; x < sizeX; x++)
if(x==0 ||y == 0||x == sizeX-1|| y == sizeY-1) map[x][y] = -1;
drawMap();
}
void placeWall(int x, int y){
if(x>=0 &&y >= 0&&x < sizeX && y < sizeY) { map[x][y] = -1; drawField(x,y); }
}
void clearWall(int x, int y){
if(x>=0 &&y >= 0&&x < sizeX && y < sizeY) { map[x][y] = 0; drawField(x,y); }
}
void drawMap(){
for(int y=0; y < sizeY; y++)
for(int x=0; x < sizeX; x++)
drawField(x,y);
}
void drawField(int x, int y) {
canvas.setColor(255,255,255);
canvas.fillRect(x*GridSize,y*GridSize,GridSize,GridSize);
canvas.setColor(0,0,0);
canvas.rect(x*GridSize,y*GridSize,GridSize-1,GridSize-1);
if(map[x][y] == -1) {
canvas.drawImage(x*GridSize,y*GridSize,GridSize,GridSize,"http://michael-hielscher.de/hamster/brick_wall.png");
}
if(map[x][y] > 0) {
int image = map[x][y];
if(image > 9) image = 9;
canvas.drawImage(x*GridSize,y*GridSize,GridSize,GridSize,"http://michael-hielscher.de/hamster/grain"+image+".png");
}
}
void putGrain(int x, int y,int count) {
map[x][y] = count;
drawField(x,y);
}
return this;
}
Object Spielfeld = Spielbrett();
Object Paul = Hamster(Spielfeld);
void vor() {Paul.vor();}
void linksUm() {Paul.linksUm();}
void nimm() {Paul.nimm();}
void gib() {Paul.gib();}
boolean vornFrei() {return Paul.vornFrei();}
boolean kornDa() {return Paul.kornDa();}
boolean maulLeer() {return Paul.maulLeer();}
//////// Setup Map /////////
Spielfeld.initMap();
Paul.x = 1;
Paul.y = 1;
Paul.look = 1;
Paul.speed = 60; // 1 slow - 100 fast
Spielfeld.putGrain(3,1,1);
Spielfeld.putGrain(6,1,4);
Spielfeld.putGrain(3,2,1);
Spielfeld.putGrain(4,2,1);
Spielfeld.putGrain(1,3,2);
Spielfeld.putGrain(2,3,2);
Spielfeld.putGrain(3,3,2);
Spielfeld.putGrain(4,3,1);
Spielfeld.putGrain(5,3,1);
Spielfeld.putGrain(6,3,1);
Spielfeld.putGrain(3,4,1);
Spielfeld.putGrain(4,4,1);
Spielfeld.putGrain(6,4,1);
Spielfeld.putGrain(2,5,1);
Spielfeld.putGrain(1,6,1);
Spielfeld.putGrain(3,6,4);
Spielfeld.putGrain(5,6,1);
</code>
<eval id="4b03d247eb4f5">
void rechtsUm() { //Definition
linksUm();
linksUm();
linksUm();
}
void frissDichRundUndSatt() {
// aufessen solange bis kein Korn mehr da liegt
while(kornDa()) nimm();
}
void eineReiheLeerFuttern () {
// wenn wir auf einem Korn anfangen erstmal aufessen
frissDichRundUndSatt();
while(vornFrei()){
// weiter laufen
vor();
// aufessen wenn hier was liegt
frissDichRundUndSatt();
}
}
void main () {
while(vornFrei()){
eineReiheLeerFuttern ();
rechtsUm();
if(!vornFrei()) break;
vor();
rechtsUm();
eineReiheLeerFuttern ();
linksUm();
if(!vornFrei()) break;
vor();
linksUm();
}
}
main();
</eval>
<canvas w=500 h=400>
</canvas>