Trisentis

G

Gino Adomeit

Gast
Java:
import java.awt.*;
import java.awt.event.*;

class InputButton extends Button
{
   // Attribute
   protected ButtonPanel buttons;
   protected int row, col;
   protected boolean black;
   
   public InputButton(int i,int j,ButtonPanel b)
   {
      buttons = b;
      row = i;
      col = j;
      // Eventverarbeitung
      setBackground(new Color(255,255,255));
   }
   
   public void changeColor()
   {
      if(getBackground().equals(new Color(0,0,0)))
         setBackground(new Color(255,255,255));
      else
         setBackground(new Color(0,0,0));
   }
   
   public void reset()
   {
      setBackground(new Color(255,255,255));
   }
}


class ButtonPanel extends Panel
{
   protected int size;
   protected InputButton[][] button;
   
   public ButtonPanel(int n)
   {
      size = n;
      setLayout(new GridLayout(n,n,2,2));
      button = new InputButton[n][n];
      for(int k=0;k<n;k++)
      {
         for(int l=0;l<n;l++)
         {
            button[k][l] = new InputButton(l,k,this);
            button[k][l].addActionListener (new ActionListener() {
               public void actionPerformed(ActionEvent e){
                     changeNeighborsOf(((InputButton)e.getSource()).col,
                        ((InputButton)e.getSource()).row);
                  }
            });
            add(button[k][l]);
         }
      }
   }
   
   public void changeNeighborsOf(int x,int y)
   {
      for(int k=-1;k<2;k++)
      {
         for(int l=-1;l<2;l++)
         {
            if(x+k>=0 && x+k<size && y+l>=0 && y+l<size &&(k!=0 || l!=0))
            {
               button[x+k][y+l].changeColor();
            }
         }
      }
   }
      
   public void reset()
   {
      for(int k=0;k<size;k++)
      {
         for(int l=0;l<size;l++)
         {
            button[k][l].reset();
         }
      }
   }
}

public class Trisentis extends Frame
{

  //  Attribute:

  protected ButtonPanel buttons;  // Eingabefeld
  protected Button resetButton;  // Reset-Knopf

  //  Konstruktor:

  public Trisentis(int size)
  {
    super("Trisentis");

    // Bestandteile konstruieren:
    buttons = new ButtonPanel(size);
    resetButton = new Button("Reset");
    add("Center", buttons);
    add("South", resetButton);

    resetButton.addActionListener (new ActionListener() {
      public void actionPerformed(ActionEvent e) { buttons.reset(); }
    });

    this.addWindowListener
      (new WindowAdapter(){
        public void windowClosing(WindowEvent e){
          dispose();
          System.exit(0);
        }
       });

    // Spiel sichtbar machen:
    setSize(400, 440);
    show();
  }

  //  Methode:

  // Fuer den Aufruf von einer Kommandozeile:
  public static void main(String[] args) {
    if (args.length != 1)
    {
      System.out.println("Trisentis benoetigt genau ein int-Argument");
    } else
    {
      int size = Integer.parseInt(args[0]);
      new Trisentis(size);
    }
  }
}

Hallo,

das ist der Quelltext von dem Spiel Trisentis. Allerdings erscheinen ein Paar Meldungen (siehe unten).

Beim Kompilieren

Compiliere C:\Dokumente und Einstellungen\Benutzername\Desktop\InputButton.java mit Jikes-Compiler
C:/Dokumente und Einstellungen/Benutzername/Desktop/InputButton.java:100:14:100:22: Semantic Warning:
The public type "Trisentis" does not match the name of its containing file "C:/Dokumente und Einstellungen/Benutzername/Desktop/InputButton.java".

C:/Dokumente und Einstellungen/Benutzername/Desktop/InputButton.java:134:5:134:10: Semantic Warning:
The method "void show();" declared in type "java.awt.Window" has been deprecated.

Beim Starten

Starte C:\Dokumente und Einstellungen\Benutzername\Desktop\InputButton.java

java.lang.NoSuchMethodError: main
Exception in thread "main"

Die zweite Meldung beim Kompilieren kann man ja ignorieren, aber was ist mit den anderen?

Danke im Voraus!
 

Atze

Top Contributor
könnte daran liegen, dass deine datei nicht wie die darin enthaltene public class heißt. und versuchst anstatt mit show mal mit setVisible(true) :)
 

Steev

Bekanntes Mitglied
Hi,

die beiden Hinweise bekommst du über @SuppressWarnings weg. ;-)
Den letztern Fehler konnte ich allerdings nicht nachstellen. Wenn du Eclipse benutzt. Dann kopiere dir bitte mal den gesamten Code aus der Datei und lösche die Datei leer. Speichere die Datei leer ab und füge den Code wieder ein. Danach sollte es funktionieren.

Gruß
Steev
 

Steev

Bekanntes Mitglied
@L-ectron-X:
Ups, ja du hast Recht :)
Die show-Methode wird ja irgendwann aus der Distribution gelöscht. Gewarnt wurde man ja lange genug...
 
G

Gino Adomeit

Gast
Erst einmal Danke für die (schnellen) Antworten!

Also, ich habe jetzt show(); durch setVisible(true); ersetzt und danach (wie Steev sagte) den Code ausgeschnitten, die Datei leer gespeichert und den Code wieder eingefügt. Anschließend ließ sich die Datei fehlerfrei kompilieren. ;-)

Jedoch erscheint beim Starten nun folgendes:

Trisentis benoetigt genau ein int-Argument
 

Atze

Top Contributor
weil du dann bei deinem aufruf noch ein int-argument mit übergeben musst :)

zum beispiel:

Java:
java "C:\Dokumente und Einstellungen\Benutzername\Desktop\InputButton.java" 1

hier wird das erste argument des an die main-methode übergebenen String-arrays verwendet (args[0]), welches dann im obigen beispiel die 1 ist

Java:
int size = Integer.parseInt(args[0]);

da du wohl nicht mit übergeben hast, erscheint die meldung

Java:
if (args.length != 1)
    {
      System.out.println("Trisentis benoetigt genau ein int-Argument");
    }
 

Neue Themen


Oben