P
PapaNoah
Hallo miteinander,
Ich arbeite gerade an einem "Schiffe versenken" für die Abschlussarbeit in der Berufsschule. Ich hänge gerade an einem ziemlich nervigen Problem fest, und zwar zeichne ich zwei praktisch identische Spielfelder in ein JFrame (Canvas => Paint() überschrieben). Sie unterscheiden sich jediglich von der Position im JFrame sowie dem Spielernamen, welcher auf der rechten Seite des Spielfelds angezeigt werden sollte. Leider funktioniert das aber irgendwie nicht, das heisst nur so halb. Wenn ich nur 1 Spielfeld zeichne klappts, zeichne ich zwei Spielfelder wird nur bei einem der Name angezeigt. Ich hoffe ihr könnt mir helfen, ich stehe leider etwas unter Zeitdruck, da ich für heute frei genommen habe um daran arbeiten zu können
Hier der betreffende Code:
Wenn eine Instanz von der Klasse "Player" erstellt wird, wird automatisch eine Instanz der Klasse "Playground"(in der die Paint()-Methode überschrieben wird) erstellt mit den mitgegebenen Parametern x, y, und dem Spielernamen.
Der Name wird in dieser Klasse bei Zeile 44 gezeichnet :
Auf die Formatierung sowie auf Kommentare wurde bisher noch nicht geachtet, ich möchte zuerst dieses Problem lösen.
Danke im Voraus für die Hilfe!
PapaNoah
Ich arbeite gerade an einem "Schiffe versenken" für die Abschlussarbeit in der Berufsschule. Ich hänge gerade an einem ziemlich nervigen Problem fest, und zwar zeichne ich zwei praktisch identische Spielfelder in ein JFrame (Canvas => Paint() überschrieben). Sie unterscheiden sich jediglich von der Position im JFrame sowie dem Spielernamen, welcher auf der rechten Seite des Spielfelds angezeigt werden sollte. Leider funktioniert das aber irgendwie nicht, das heisst nur so halb. Wenn ich nur 1 Spielfeld zeichne klappts, zeichne ich zwei Spielfelder wird nur bei einem der Name angezeigt. Ich hoffe ihr könnt mir helfen, ich stehe leider etwas unter Zeitdruck, da ich für heute frei genommen habe um daran arbeiten zu können
Hier der betreffende Code:
Wenn eine Instanz von der Klasse "Player" erstellt wird, wird automatisch eine Instanz der Klasse "Playground"(in der die Paint()-Methode überschrieben wird) erstellt mit den mitgegebenen Parametern x, y, und dem Spielernamen.
Java:
import javax.swing.*;
public class Gameplay
{
private int coordinateX;
private int coordinateY;
private String rawCoordinates;
private Player currentPlayer;
private Playground currentPlayground;
public Gameplay()
{
initializeGame();
Player testPlayer = new Player(20, 20, "Tester1");
Player testPlayer2 = new Player(20, 313, "Tester2");
showGui(testPlayer, testPlayer2);
testPlayer.getPlayground().repaint();
testPlayer2.getPlayground().repaint();
while(true)
{
rawCoordinates = Actions.getCoordinates();
coordinateX = Actions.getCoordinateX(rawCoordinates);
coordinateY = Actions.getCoordinateY(rawCoordinates);
Actions.attack(testPlayer.getPlayground(), coordinateX, coordinateY);
testPlayer.getPlayground().positioningModeActivated(false);
testPlayer.getPlayground().repaint();
}
}
public void showGui(Player playerA, Player playerB)
{
//JFrame wird erstellt
JFrame mainFrame = new JFrame("Java - Schiffe versenken");
//Spielfelder(Canvas) werden dem Frame zugewiesen
mainFrame.add(playerA.getPlayground());
mainFrame.add(playerB.getPlayground());
//Fenstereigenschaften werden angepasst
mainFrame.setSize(348,615);
mainFrame.setResizable(false);
mainFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
mainFrame.setVisible(true);
}
public void initializeGame()
{
coordinateX = 0;
coordinateY = 0;
rawCoordinates = "";
}
public void showMenu()
{
System.out.println("=============================");
System.out.println("======SCHIFFE=VERSENKEN======");
System.out.println("=============================");
System.out.println("MENU:");
System.out.println("1 EINZELSPIELER(GEGEN COMPUTER)");
System.out.println("2 2-SPIELER");
System.out.println("3 SPIEL BEENDEN");
}
}
Der Name wird in dieser Klasse bei Zeile 44 gezeichnet :
Java:
import java.awt.*;
public class Playground extends Canvas
{
private static int PLAYGROUND_SIZE = 12;
private static int FIELD_SIZE = 20;
private static int GAP = 2;
private Field playground[][] = new Field[PLAYGROUND_SIZE][PLAYGROUND_SIZE];
private Boolean positioningMode;
private int fieldPositionX;
private int fieldPositionY;
private String playerName;
public Playground(int positionX, int positionY, String playerName)
{
int canvasSize = (PLAYGROUND_SIZE * FIELD_SIZE) + ((PLAYGROUND_SIZE - 1)*GAP) + 21;
setSize(canvasSize, canvasSize);
initializePlayground();
positioningMode = true;
fieldPositionX = positionX;
fieldPositionY = positionY;
this.playerName = playerName;
}
public void paint(Graphics g)
{
super.paint(g);
int x = fieldPositionX;
int y = fieldPositionY;
int fontPositionX = fieldPositionX;
char yCoordinateSign = 'A';
g.setFont(new Font("Consolas", Font.PLAIN, 10));
for(int i = 0 ; i < PLAYGROUND_SIZE ; i++)
{
g.drawString(String.valueOf(yCoordinateSign), fontPositionX + 7, fieldPositionY - 5);
g.setColor(Color.BLACK);
fontPositionX += 22;
yCoordinateSign++;
}
g.drawString(playerName, 294, y);
System.out.println(playerName + " drawed at" + 294 + "/" + y);
for(int i = 0 ; i < PLAYGROUND_SIZE ; i++)
{
g.setColor(Color.BLACK);
g.drawString(String.valueOf(i + 1), (x - 15), (y + 13));
for(int j = 0 ; j < PLAYGROUND_SIZE ; j++)
{
if(positioningMode)
{
if(playground[i][j].containsBoat())
{
g.setColor(Color.GREEN);
}
else
{
g.setColor(Color.GRAY);
}
}
else
{
if(playground[i][j].isHit())
{
if(playground[i][j].containsBoat())
{
g.setColor(Color.RED);
}
else
{
g.setColor(Color.BLUE);
}
}
else
{
g.setColor(Color.GRAY);
}
}
g.fillRect(x, y, FIELD_SIZE, FIELD_SIZE);
x += FIELD_SIZE + GAP;
}
x = fieldPositionX;
y += FIELD_SIZE + GAP;
}
}
public void paintNew()
{
repaint();
}
private void initializePlayground()
{
for(int i = 0 ; i < 12 ; i++)
{
for(int j = 0 ; j < 12 ; j++)
{
playground[i][j] = new Field();
}
}
}
public Field getField(int x, int y)
{
return playground[y][x];
}
public void setField(Boat boat, int x, int y)
{
playground[y][x].setBoat(boat);
}
public void positioningModeActivated(Boolean activated)
{
positioningMode = activated;
}
public static int getPlaygroundSize()
{
return PLAYGROUND_SIZE;
}
}
Auf die Formatierung sowie auf Kommentare wurde bisher noch nicht geachtet, ich möchte zuerst dieses Problem lösen.
Danke im Voraus für die Hilfe!
PapaNoah