K
Kquadrato
Gast
Ich schreibe seit 2 Tagen ein Programm / Spiel (ohne gui alles wird auf die Konsolo ausgegeben).
Also, ich hab soweit alles schön versucht zu strukturieren und mit dem klassenmode zu arbeiten, nur leider versteh ich nicht genau wo die Exception geworfen wird mit dme Nullpointer und wieso genau...
ich poste hier mal die Quellcodes...
Also das mit den Spieler werd ich versuchenanders zu machen...
ist nur etwas doof geworden, weil mir erst heute früh was einfiel...
wollte heute die Ausgabe testen, wie das soweit aussieht, leider bekomm ich da diesen Nullpointer -.-"
Ich hoffe die Kommendare reichen aus bei den Funktionen.
Zum Spiel, es soll ein 8x8 Spielfeld sein, das mit Zufallszahlen zwischen 1-9 geschrieben beschrieben wird. Auf den Feld stehen zwei Figuren, diese stehen aber diagonal. Das Spielprinzip, die Figur auf dem Spielfeld müssen 100 Punkte schaffen um zu siegen.
Aber wichtig ist, das die Punkte die auf dem Feld sind, von einem Spieler "gefressen" werden, somit verschwieden, falls der zweite Spieler auf das feld geht, bekommt er keine Punkte (wie denn, wenn die schon gefressen wurden :lol: ).
Ich würde mich über eine Hilfe sehr freuen
Main:
Die Spielfeld-klasse
Spieler:
und nun den letzten block...
Steuerung
[/code]
Also, ich hab soweit alles schön versucht zu strukturieren und mit dem klassenmode zu arbeiten, nur leider versteh ich nicht genau wo die Exception geworfen wird mit dme Nullpointer und wieso genau...
ich poste hier mal die Quellcodes...
Also das mit den Spieler werd ich versuchenanders zu machen...
ist nur etwas doof geworden, weil mir erst heute früh was einfiel...
wollte heute die Ausgabe testen, wie das soweit aussieht, leider bekomm ich da diesen Nullpointer -.-"
Ich hoffe die Kommendare reichen aus bei den Funktionen.
Zum Spiel, es soll ein 8x8 Spielfeld sein, das mit Zufallszahlen zwischen 1-9 geschrieben beschrieben wird. Auf den Feld stehen zwei Figuren, diese stehen aber diagonal. Das Spielprinzip, die Figur auf dem Spielfeld müssen 100 Punkte schaffen um zu siegen.
Aber wichtig ist, das die Punkte die auf dem Feld sind, von einem Spieler "gefressen" werden, somit verschwieden, falls der zweite Spieler auf das feld geht, bekommt er keine Punkte (wie denn, wenn die schon gefressen wurden :lol: ).
Ich würde mich über eine Hilfe sehr freuen
Main:
Code:
class Max {
static private Steuerung dieSpielsteuerung;
static private String test;
public void ausgebenaufFeld(int x, int y, char sympol ){
}
//------------------------------------------------------------------------------------------
////Textausgabe über den Spielzustand, wer dran ist, wer gewonnen hat ect.
//------------------------------------------------------------------------------------------
static public void ausgebenText(int index){
switch (index){
case 1: System.out.println("Spieler1 'S' ist am Zug"); break;
case 2: System.out.println("Spieler2 'W' ist am Zug"); break;
case 3: System.out.println("Unzulässige Eingabe Spieler1 'S'"); break;
case 4: System.out.println("Unzulässige Eingabe Spieler2 'W'"); break;
case 5: System.out.println("Spieler1 'S' gewinnt"); break;
case 6: System.out.println("Spieler2 'W' gewinnt"); break;
}
}
//------------------------------------------------------------------------------------------
////Das Spielfeld auf der Konsole zeichnen lassen
//------------------------------------------------------------------------------------------
static public String printSpielfeld(){
System.out.println();
for(int i=0; i<dieSpielsteuerung.dasSpielfeld.getfeldX(); i++){
System.out.print("[");
for(int j=0; j<dieSpielsteuerung.dasSpielfeld.getfeldY(); j++){
dieSpielsteuerung.derSpieler.setzeSpieler();
System.out.print(dieSpielsteuerung.dasSpielfeld.getFeld(i, j) +"");
}
System.out.print("]");
}
return test;
}
//------------------------------------------------------------------------------------------
////Die main-methode
//------------------------------------------------------------------------------------------
public static void main(String[] args) throws Exception {
IO.write("Willkommen im Spiel MAX");
//Ausgeben des Spielfeldes
System.out.println(printSpielfeld());
}
}//end
Die Spielfeld-klasse
Code:
class Spielfeld {
private char feld [][]; //Spielfeld
private int feldX = 8; //Spielfeldgröße X festlegen
private int feldY = 8; //Spielfeldgröße Y festlegen
Spielfeld(){
}
//------------------------------------------------------------------------------------------
////Spielfeld erzeugen
//------------------------------------------------------------------------------------------
public void erzeugen(int sposX, int sposY, int wposX, int wposY){
feld = new char [feldX][feldY];
for (int i = 0; i < feldX; i++){ //alle X durchgehen
for (int j = 0; j < feldY; j++){ //alle Y durchgehen
feld[i][j] = ((char)((Math.random() * 8) + 1)); // Zufallszahl zuweisen [1..49]
}
}
feld[sposX][sposY] = 'S'; //setze S in das Feld
feld[wposX][wposY] = 'W'; //setze W in das Feld
}
//------------------------------------------------------------------------------------------
////Wichtige Get-Funktion wegen dem Geheimnissprinzip
//------------------------------------------------------------------------------------------
public int getfeldX (){
return feldX;
}
public int getfeldY(){
return feldY;
}
//gebeFeld an ein weiteres Objekt
public char getFeld(int x, int y){
return feld[x][y];
}
//------------------------------------------------------------------------------------------
////Belegt das Feld mit der Spielfigur
//------------------------------------------------------------------------------------------
public boolean belegeFeld(int x, int y, char spieler){
if(feldFrei(x,y)==false){
return false;
}
else {
feld[x][y]= spieler; //ob spieler 1 oder spieler2 das feld belegt
return true;
}
}
//------------------------------------------------------------------------------------------
////Prüft ob das Feld wirklich frei ist, bevor der Spieler gesetz wird
//------------------------------------------------------------------------------------------
public boolean feldFrei(int x, int y){
if(x>=8 || y>=8 || x<0 || y<0) { //Prüfe ob innerhalb vom Spielfeld
return false;
}
//Prüfe ob frei -> zahl 0-9
if(feld[x][y] == '0'){
return true;
}
if(feld[x][y]=='1' || feld[x][y]=='2' || feld[x][y]=='3'){
return true;
}
if(feld[x][y]=='4' || feld[x][y]=='5' || feld[x][y]=='6'){
return true;
}
if(feld[x][y]=='7' || feld[x][y]=='8' || feld[x][y]=='9'){
return true;
}
else {return false;}
}
//------------------------------------------------------------------------------------------
////Das Feld wird "freigegeben" bzw. gelöscht!
//------------------------------------------------------------------------------------------
public void freigabeFeld(int x, int y){
feld[x][y]='0';
}
}//end
Spieler:
Code:
class Spieler {
private int sposX, sposY, wposX, wposY; //Positionen von Spieler 'S' wie 'W'
Spielfeld dasSpielfeld;
//------------------------------------------------------------------------------------------
////Wichtige Get-Funktion wegen dem Geheimnissprinzip
//------------------------------------------------------------------------------------------
public int getSposX(){
return sposX;
}
public int getSposY(){
return sposY;
}
public int wposX(){
return wposX;
}
public int wposY(){
return wposY;
}
//------------------------------------------------------------------------------------------
////Spieler1 und Spieler2 Diagonal setzen
//------------------------------------------------------------------------------------------
public void setzeSpieler (){
sposX = ((dasSpielfeld.getfeldX() /2)-1);
sposY = ((dasSpielfeld.getfeldY() /2)-1);
wposX = ((dasSpielfeld.getfeldX() /2)+1);
wposY = ((dasSpielfeld.getfeldY() /2)+1);
dasSpielfeld.erzeugen(sposX, sposY, wposX, wposY);
}
//------------------------------------------------------------------------------------------
////Prüfe ob das Feld von Spieler1 wirklich frei ist
//------------------------------------------------------------------------------------------
public boolean freiFeldSpieler1(){
if(!dasSpielfeld.feldFrei(sposX, sposY-1) &&
!dasSpielfeld.feldFrei(sposX, sposY+1) &&
!dasSpielfeld.feldFrei(sposX-1, sposY) &&
!dasSpielfeld.feldFrei(sposX+1, sposY)) {
return false;
}
else {
return true;
}
}
//------------------------------------------------------------------------------------------
////Prüfe ob das Feld von Spieler2 wirklich frei ist
//------------------------------------------------------------------------------------------
public boolean freiFeldSpieler2(){
if(!dasSpielfeld.feldFrei(wposX, wposY-1) &&
!dasSpielfeld.feldFrei(wposX, wposY+1) &&
!dasSpielfeld.feldFrei(wposX-1, wposY) &&
!dasSpielfeld.feldFrei(wposX+1, wposY)) {
return false;
}
else {
return true;
}
}
//------------------------------------------------------------------------------------------
////Spieler1 springt auf das gewählte FELD
//------------------------------------------------------------------------------------------
public boolean geheNachSpieler1(char weg){
boolean gesprungen= false;
switch (weg){
case 'O':
if(dasSpielfeld.belegeFeld(sposX+1, sposY, 'S')==true){
dasSpielfeld.freigabeFeld(sposX, sposY);
sposX++;
gesprungen = true;
}
break;
case 'W':
if(dasSpielfeld.belegeFeld(sposX-1, sposY, 'S')==true){
dasSpielfeld.freigabeFeld(sposX, sposY);
sposX--;
gesprungen = true;
}
break;
case 'N':
if(dasSpielfeld.belegeFeld(sposX, sposY+1, 'S')==true){
dasSpielfeld.freigabeFeld(sposX, sposY);
sposY++;
gesprungen = true;
}
break;
case 'S':
if(dasSpielfeld.belegeFeld(sposX, sposY-1, 'S')==true){
dasSpielfeld.freigabeFeld(sposX, sposY);
sposY--;
gesprungen = true;
}
break;
}
return gesprungen;
}
//------------------------------------------------------------------------------------------
////Spieler2 springt auf das gewählte FELD
//------------------------------------------------------------------------------------------
public boolean geheNachSpieler2(char weg){
boolean gesprungen= false;
switch (weg){
case 'O':
if(dasSpielfeld.belegeFeld(sposX+1, sposY, 'W')==true){
dasSpielfeld.freigabeFeld(sposX, sposY);
sposX++;
gesprungen = true;
}
break;
case 'W':
if(dasSpielfeld.belegeFeld(sposX-1, sposY, 'W')==true){
dasSpielfeld.freigabeFeld(sposX, sposY);
sposX--;
gesprungen = true;
}
break;
case 'N':
if(dasSpielfeld.belegeFeld(sposX, sposY+1, 'W')==true){
dasSpielfeld.freigabeFeld(sposX, sposY);
sposY++;
gesprungen = true;
}
break;
case 'S':
if(dasSpielfeld.belegeFeld(sposX, sposY-1, 'W')==true){
dasSpielfeld.freigabeFeld(sposX, sposY);
sposY--;
gesprungen = true;
}
break;
}
return gesprungen;
}
}//end
und nun den letzten block...
Steuerung
Code:
class Steuerung {
//private int zustand = 0; //spiel ist noch nicht gestartet
Spielfeld dasSpielfeld;
Spieler derSpieler;
Steuerung(){
dasSpielfeld = new Spielfeld();
derSpieler = new Spieler();
}
void bearbeiteTastatur(){
}
//boolean bewegeSpieler(char richtung){
// boolean ruckgabe = false;
//}
}