![]() |
|
|
|||||||
| Java Basics - Anfänger-Themen Fragen ausschließlich zu Java-Grundlagen von Ein- und Umsteigern |
|
|
|
Themen-Optionen | Thema durchsuchen | Ansicht |
| #1 (permalink) | |
|
Neuer Benutzer
byte
Registriert seit: 14.04.2008
Fachbeiträge: 14
Abgegebene Danke: 0
Erhielt 0 Danke für 0 Beiträge
|
also Syntaktisch ist alles klar aber ich habe kein plan wieder der MouseListener nix tut...
![]() also der soll bei klick nen Point per DrawPoint.DrawPoint(e.getX(), e.getY(), actualcolor); zeichnen... debugtechnisch in der Main aufrufen funktioniert es aber per mouselistener nicht... was mach ich da falsch ??? hier der code Code:
package guiGo2;
/*DrawWindow.java*/
import java.awt.Color;
import java.awt.Graphics;
import java.awt.GraphicsDevice;
import java.awt.Window;
import javax.swing.JFrame;
import java.awt.MouseInfo.*;
import java.awt.event.*;
import java.awt.event.MouseListener;
public class DrawWindow implements Runnable, MouseListener {
private static int win_width, win_height, field_h, field_w;
static Graphics g;
static Color actualcolor;
static Window myWindow;
static JFrame F = new JFrame("Go");
static DrawField drawField = new DrawField(400, 400);
DrawWindow() { // konstruktor
this.win_height = 500;
this.win_width = 600;
this.field_h = 400;
this.field_w = 400;
this.actualcolor =Color.RED; // SET DEFAULTCOLOR FOR DEBUGGING
}
public void run() {
F.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
F.setSize(win_width, win_height);
F.setVisible(true);
F.addMouseListener(this);
}
@SuppressWarnings("static-access")
public static void main(String[] args) {
(new Thread(new DrawWindow())).start();
drawField.setLayout(null);
F.add(drawField);
DrawPoint.DrawPoint(80, 100, Color.BLUE); //debugging point... klappt wunderbar
}
public void mouseClicked(MouseEvent e) {
//drawpoint only debugging um zu wissen ob der hässliche Mouselistener funzt
DrawPoint.DrawPoint(e.getX(), e.getY(), actualcolor);
// setArray[e.getX()][e.getY()] = "PLAYER";
/* eigentlich diese vorläufige nicht angepasste anweisung...
* muss e.getxy muss aber noch ans array angepasst werden...
*sonst ist compiler böse... ;)
**/
}
public void mousePressed(MouseEvent e) {
// NOP();
}
public void mouseReleased(MouseEvent e) {
// NOP();
}
public void mouseEntered(MouseEvent e) {
// NOP();
}
public void mouseExited(MouseEvent e) {
// NOP();
}
}
|
|
|
| #3 (permalink) | |
|
Neuer Benutzer
byte
Themenstarter
Registriert seit: 14.04.2008
Fachbeiträge: 14
Abgegebene Danke: 0
Erhielt 0 Danke für 0 Beiträge
|
hier hab ich noch mal drawfield und drawpoint ->
Code:
package guiGo2;
/*
* DrawPoint.java
*/
import java.awt.*;
import javax.swing.*;
public class DrawPoint extends JLabel {
private Color color = Color.RED;
public DrawPoint(int x, int y,Color c) {
setBounds(x, y, 20, 20);
this.color =c;
}
public void drawPoint(int x, int y) {
setLocation(x, y);
}
@Override
public void paintComponent(Graphics g) {
super.paintComponent(g);
Graphics2D g2D = (Graphics2D) g;
g2D.setColor(color);
g2D.fillOval(0, 0, 20, 20);
}
public static void DrawPoint(int x, int y, Color c){
DrawWindow.drawField.add(new DrawPoint(x, y,c));
}
}
Code:
package guiGo2;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import javax.swing.*;
import java.awt.*;
/*DrawField.java*/
public class DrawField extends JPanel {
Color lineColor = Color.BLACK;
Color background = Color.GRAY;
public DrawField(int x, int y) {
this.setSize(x, y);
this.setBackground(background);
}
@Override
public void paintComponent(Graphics g) {
super.paintComponent(g);
Graphics2D g2D = (Graphics2D) g;
for (int i = 0; i <= 400; i += 20) {
g2D.setColor(lineColor);
g2D.drawLine(i, 400, i, 0);
g2D.drawLine(400, i, 0, i);
}
}
}
dachte dass muss ich auch nicht weil sonst alles funktioniert... |
|
|
| #4 (permalink) | |
|
Java-Forum Team
Moderator
Registriert seit: 06.01.2007
Fachbeiträge: 16.742
Abgegebene Danke: 0
Erhielt 1.640 Danke für 1.485 Beiträge
|
Mit diesem static-murks kann ja auch niemand rechnen..
DrawWindow.drawField.add(new DrawPoint(x, y,c)); DrawWindow.drawField.validate(); DrawWindow.drawField.repaint(); |
|
|
| #6 (permalink) | |
|
Java-Forum Team
Moderator
Registriert seit: 06.01.2007
Fachbeiträge: 16.742
Abgegebene Danke: 0
Erhielt 1.640 Danke für 1.485 Beiträge
|
Ganz allgemein sollte man fields "fast nie" static machen. Das ist keine Objektorientierte Modellierung (im eigentlichen Sinn). Stell dir nur mal vor, du willst irgendwann mal zwei DrawFields nebeneinander anzeigen (ist aber auch nur ein Beispiel).
Ein kleiner Ausflug, weil mit langweilig ist... war: Eine Modellierung, die in dem Sinne "gut" ist, dass sie skalierbar und sehr allgemein anwendbar ist (und schließlich will man ja i.a. nicht ein Spiel schreiben, sondern was lernen, was man später noch brauchen kann) ist das Model-View-Controller-Pattern (MVC-Pattern). Du könntest dein Go schreiben, und das GUI komplett ignorieren. Schreib' dein Spiel als Spiel als Spiel und nur als Spiel. Überleg' dir, welche Eigenschaften (fields, "Zustandsbescheibungen") das Spiel hat, und welche Methoden ("Aktionen") es geben soll. Überleg' dir, was man braucht, um das Spiel quasi vollständig(!) "fernsteuern" zu können: Code:
class Go
{
// Speichert die Felder (leer, schwarz, weiß)
private int board[][] = ...
// Der Spieler, der gerade dran ist
private int activePlayer = ...
// Noch mehr Eigenschaften
....
// Welcher Spielstein auf Feld (x,y) liegt
public int getColorAt(int x, int y) { ... }
// Setzt den gegebenen Spielstein bei (x,y)
public void setColorAt(int x, int y, int stone) { ... }
// Wer gewonnen hat
public int getWinner() { ... }
// Noch mehr Methoden
....
}
Wenn das Spiel dann fertig ist, kann man es auf verschiedene Arten bedienen. Entweder, indem man es "programmatisch" laufen läßt: Code:
Go go = new Go(); go.setColorAt(3,4, Go.BLACK); go.setColorAt(1,2, Go.WHITE); go.setColorAt(5,4, Go.BLACK); if (go.gameOver()) printSomething(); Code:
Go go = new Go();
int x;
int y;
while (!go.gameOver())
{
x = benutzerEingabe("Schwarz: Gib x ein");
y = benutzerEingabe("Schwarz: Gib y ein");
go.setColorAt(x,y, Go.BLACK);
x = benutzerEingabe("Weiss: Gib x ein");
y = benutzerEingabe("Weiss: Gib y ein");
go.setColorAt(x,y, Go.WHITE);
}
Code:
// Visualisiert das Spielfeld
class GoPanel extends JPanel
{
private Go go = ...
// Zeichne das Brett (oder füge entsprechend Buttons in das Panel ein, oder sonstwas)
public paintComponent(Graphcis g)
{
for (alle Positionen)
{
if (go.getColorAt(x,y) == Go.WHITE) maleWeiss();
if (go.getColorAt(x,y) == Go.BLACK) maleSchwarz();
if (go.getColorAt(x,y) == Go.EMPTY) maleNix();
}
}
}
// Kontrolliert den Spielablauf, bzw. empfängt Benutzereingaben und leitet sie an Go weiter
class GoController implements ActionListener oder MouseListener
{
private Go go = ...
public GoController()
{
...
goPanel.addActionOderMouseListener(this);
...
}
void spiele()
{
while (!go.gameOver())
{
erwarteBenutzerEingabe();
goPanel.aktualisiereMitNeuemZustand();
}
}
public void actionPerformed(ActionEvent e)
{
int x = findeRausWasGeklicktWurdeX();
int y = findeRausWasGeklicktWurdeY();
go.setColorAt(x,y, farbe);
}
}
1. den aktuellen Spielzustand anzuzeigen (wie auch immer: Mit buttons, oder kleinen JPG-Bilchen von Steinen oder so) 2. Benutzereingaben zu empfangen, und an das "abstrakte" Spiel weiterzuleiten Wenn du da dann noch ein bißchen geschickte Objektierientierung reinbringst, wird das ganze sogar recht flexibel... Code:
abstract class Player
{
private int color;
abstract Move doMove(Go go);
}
class HumanPlayer extends Player { ... }
class ComputePlayer extends Player { ... }
class NetworkPlayer extends Player { ... }
) spielen, oder übers Netzwerk, oder oder oder... Aber das nur als Anregung, damit du weißt, womit du dich die nächsten Monate beschäftigen könntest
|
|
|
|
| Themen-Optionen | Thema durchsuchen |
| Ansicht | |
Ähnliche Themen
|
||||
| Thema | Autor | Forum | Antworten | Letzter Beitrag |
| javac funzt net | gasti | Java Basics - Anfänger-Themen | 3 | 06.05.2008 18:59 |
| Scrollbar funzt net :-/ | KenshinX | AWT, Swing, JavaFX & SWT | 4 | 07.01.2006 19:08 |
| CellRenderer funzt net | T1M | AWT, Swing, JavaFX & SWT | 20 | 31.05.2005 07:56 |
| TableLayout & .jar funzt das? | joschika77 | Allgemeine Java-Themen | 6 | 05.12.2004 20:15 |
| Methode funzt net | Allgemeine Java-Themen | 1 | 20.01.2004 17:14 | |
| Lesezeichen |
|
|