Initial import
This commit is contained in:
@@ -0,0 +1,83 @@
|
||||
using System;
|
||||
|
||||
namespace vampi {
|
||||
public class Spielflaeche {
|
||||
private Spielfeld[,] sfeld_2dim;
|
||||
private int groesse;
|
||||
public int Groesse {
|
||||
get { return sfeld_2dim.GetLength(0) * sfeld_2dim.GetLength(1); }
|
||||
}
|
||||
|
||||
public Spielflaeche(int groesse) {
|
||||
this.groesse = groesse;
|
||||
sfeld_2dim = new Spielfeld[groesse, groesse];
|
||||
for (int i = 0; i < groesse; i++) {
|
||||
for (int j = 0; j < groesse; j++) {
|
||||
sfeld_2dim[i, j] = new Spielfeld(new Position(i+1, j+1), this);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public Spielflaeche(int groesse, int initBedeckung, int initVerhaeltnis) : this(groesse) {
|
||||
initSpielfeld(initBedeckung, initVerhaeltnis);
|
||||
}
|
||||
|
||||
private void initSpielfeld(int initBedeckung, int initVerhaeltnis) {
|
||||
// INFO: Andere Idee: Spielfeld linear befüllen, danach alle Felder durchgehen
|
||||
// und das aktuelle Feld jeweils mit einem zufälligen Feld tauschen
|
||||
int feldX, feldY;
|
||||
int bedeckung = this.groesse * this.groesse * initBedeckung / 100; // groesse^2 * Prozent
|
||||
int vampire = (int)Math.Round((double)bedeckung / (initVerhaeltnis+1)); // Felder / (Verhaeltnis+1)
|
||||
|
||||
for (int i = bedeckung; i > 0; i--) {
|
||||
// find an empty, random field
|
||||
do {
|
||||
feldX = Program.random.Next(0, this.groesse);
|
||||
feldY = Program.random.Next(0, this.groesse);
|
||||
} while (this.sfeld_2dim[feldX, feldY].Sfigur != null);
|
||||
|
||||
// first set all vampires then set inhabitants
|
||||
if (vampire > 0) {
|
||||
new Vampir(this.sfeld_2dim[feldX, feldY]);
|
||||
vampire--;
|
||||
} else {
|
||||
new Einwohner(this.sfeld_2dim[feldX, feldY]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public Spielfeld getSpielfeld(Position pos) {
|
||||
if (pos.x > this.groesse)
|
||||
pos.x -= this.groesse; // should be 1
|
||||
if (pos.x < 1)
|
||||
pos.x += this.groesse; // should be this.groesse
|
||||
|
||||
if (pos.y > this.groesse || pos.y < 1) {
|
||||
// y-direction doesn't wrap
|
||||
return null;
|
||||
}
|
||||
|
||||
return sfeld_2dim[pos.x-1, pos.y-1];
|
||||
}
|
||||
|
||||
public int countTypeOccurrences(int typ) {
|
||||
int result = 0;
|
||||
for (int i = 0; i < this.groesse; i++) {
|
||||
for (int j = 0; j < this.groesse; j++) {
|
||||
if (this.sfeld_2dim[i, j].Sfigur != null && this.sfeld_2dim[i, j].Sfigur.Typ == typ)
|
||||
result++;
|
||||
}
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
public void simulateStep() {
|
||||
for (int i = 0; i < this.groesse; i++) {
|
||||
for (int j = 0; j < this.groesse; j++) {
|
||||
if (this.sfeld_2dim[i, j].Sfigur != null)
|
||||
this.sfeld_2dim[i, j].Sfigur.runStep();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user