# Hilfe !!! bei vier gewinnt



## My94 (5. Sep 2016)

Hallo Leute,
ich brauche unbedingt Hilfe. Ich muss im Rahmen eines Projektes ein Spiel programmieren. Ich soll vier gewinnt machen und ich komme gaaarnicht zurecht. Das Problem bei mir ist in erster Linie Eclipse. Kennt sich ja irgendjemand von euch richtig richtig gut damit aus? Wir dürfen sogar fertig Quellcodes aus dem Internet verwenden, die ich schon habe, sollten das aber kommentieren. Ich weiß auch einfach nicht bei dem Quellcode was was ist. Eine GUI haben ich schon mit dem scenebuilder erstellt. Das "Aussehen" von dem viergewinnt habe ich bisschen umgeändert, beispielsweise andere Farbe der Spielsteine...Ich bin wirklich überfordert mit Java und eclipse, ich hoffe mir kann irgendjemand helfen. Ich würde auch was zahlen. Außerdem muss nicht das gaanze Spiel programmiert werden sondern nur einzelne Bereiche, da die Arbeit aufgeteilt wurde. Wie gesagt, einen gesamten Quellcode habe ich schon.

Liebe Grüße


----------



## kiwara (5. Sep 2016)

Bis wann muss es denn fertig sein?
Ist es denn wirklich sinnvoll, wenn es jemand anderes macht, wenn du es eigentlich verstehen solltest?


----------



## My94 (5. Sep 2016)

also es sollte bis zum 15.09 fertig sein. Ich weiß, ich hab es auch erst alleine versucht und Freunde die bisschen was von Java verstehen um Hilfe gebeten, aber die haben alle keine Zeit. Ich möchte es wirklich verstehen aber die Zeit ist im Moment knapp, deswegen brauch ich Hilfe von jemandem der das halt fertig programmiert und dann hab ich noch ein bisschen Zeit  mich mit dem fertigen Spiel zu beschäftigen und es zu verstehen, denn man wird auch abgefragt. Aber ich schaff das einfach nicht und komm nicht zurecht mit dem eclipse.


----------



## Voreck (5. Sep 2016)

My94 hat gesagt.:


> komm nicht zurecht mit dem eclipse.


Warum programmierst du dann nicht mit etwas, mit dem du zurechtkommst


----------



## My94 (5. Sep 2016)

Weil wir Eclipse benutzen müssen


----------



## Joose (5. Sep 2016)

My94 hat gesagt.:


> ich brauche unbedingt Hilfe.


Die brauchen die meisten die hier einen Thread eröffnen 



My94 hat gesagt.:


> ..... ich komme gaaarnicht zurecht. Das Problem bei mir ist in erster Linie Eclipse. Kennt sich ja irgendjemand von euch richtig richtig gut damit aus?


Wo genau liegt denn das Problem bei Eclipse?



My94 hat gesagt.:


> Wir dürfen sogar fertig Quellcodes aus dem Internet verwenden, die ich schon habe, sollten das aber kommentieren. Ich weiß auch einfach nicht bei dem Quellcode was was ist.


Schlechte Idee wenn man Probleme mit Java hat sich fertige Quellcodes zu holen und diese verstehen zu wollen :/



My94 hat gesagt.:


> Außerdem muss nicht das gaanze Spiel programmiert werden sondern nur einzelne Bereiche, da die Arbeit aufgeteilt wurde. Wie gesagt, einen gesamten Quellcode habe ich schon.


Warum nicht gleich die wichtigen Informationen rausgeben  welche Bereiche sollen umgesetzt werden? 
Du sagst was davon das die Arbeit aufgeteilt wurde ... auf mehrere Abgaben oder meherer Personen? Soll dein Code mit dem Code der anderen zusammenarbeiten?


----------



## My94 (5. Sep 2016)

Es sind die Basics die man z.B. braucht um überhaupt das Programmieren anfangen zu können. Das hört sich zwar voll dumm an aber ich hab schon Probleme bei den einfachsten Sachen  

Ja das stimmt wahrscheinlich...aber ich hab extreme Probleme mit Java, da ich diesenKurs zum ersten mal hatte undes einfach viel viel zu schnell ging.


Bereiche wären : Spielfeld programmieren (Felder,Menütleiste, Zeit, Spieler) ; Dialog für Anlegen eines Spiels (Spieler 1 gegen Computer) und Einlesen der Siegerdaten, Highscore und Zeitmessung


----------



## Joose (5. Sep 2016)

My94 hat gesagt.:


> Es sind die Basics die man z.B. braucht um überhaupt das Programmieren anfangen zu können. Das hört sich zwar voll dumm an aber ich hab schon Probleme bei den einfachsten Sachen


Grundlagen kann man nur selber lernen, dass kann dir keiner abnehmen. Wir können dir nur probieren dir bei Verständnisschwierigkeiten von bestimmten Sachen zu helfen.



My94 hat gesagt.:


> Ja das stimmt wahrscheinlich...aber ich hab extreme Probleme mit Java, da ich diesenKurs zum ersten mal hatte undes einfach viel viel zu schnell ging.


Wie oft hattest du diesen Kurs bis jetzt? Mit welchen Grundlagen hat der Kurs begonnen? Hört sich so jetzt vl nach einen Java-Einsteigerkurs an und dort schon mit UI Programmierung zu starten ist etwas komisch.


----------



## My94 (5. Sep 2016)

Das ist eine Vorlesung gewesen, aber die war wirklich nicht gut aufgebaut und viele meiner Kommilitonen geht es genauso. Es wurde Eclipse kaum erklärt und wir mussten während des Semsters ein Online "Crashkurs" absolvieren, was sehr gut war. Es gab dazu Videos und dann passende Aufgaben dazu. Das Gute daran war eben, es gab dann eine Oberfläche und man konnte gleich losprogrammieren. Mit dem bin ich gut zurecht gekommen. Aber sobald man was mit Eclipse machen musste bin ich nicht mehr zurecht gekommen. Weil ich einfach nicht versteh was zum Beispiel in einen Ordner muss oder was man in die Klasse packen muss um programmieren zu können. Und Bei dem Programm konnte man seine fertige Porgrammierung durchführen und es wurde einfach gezeigt ob es falsch oder richtig war, bei eclipse erscheinen hunterte von 100 roten kreuzen von denen ich nicht versteh wieso sie da sind.


----------



## Voreck (5. Sep 2016)

My94 hat gesagt.:


> 100 roten kreuzen von denen ich nicht versteh wieso sie da sind.


geh mal mit der maus drüber, dann wird dir angezeigt, was falsch ist


----------



## My94 (5. Sep 2016)

Ja das hab ich schon gemacht, aber ich versteh es einfach nicht . Wir arbeiten auch mit dem SVN und wenn man den gleichen Quellcode durchführt dann funktioniert es, wenn ich den Quellcode auf meiner "normalen" Java Oberfläche bei Eclipse habe dann sind da die ganzen roten Kreuze und ich kann es nicht ausführen.


----------



## Voreck (5. Sep 2016)

My94 hat gesagt.:


> Ja das hab ich schon gemacht, aber ich versteh es einfach nicht


Was steht da zum beispiel


----------



## Voreck (5. Sep 2016)

LAss mal ein paar stellen sehen, an denen eclipse fehler markiert und schreib die jeweiligen fehler dazu.
vieleicht kann ich dann helfen


----------



## My94 (5. Sep 2016)

Also das grundsätzliche Problem das ich hab, das ich nicht versteh was ich alles in die Klasse packen muss um programmieren zu können. Du siehst an der Seite was ich bei start.java habe. Ich hab das Gefühl das ist schon mal falsch bzw. nicht genug um programmieren zu können. Ich hab da jetzt einfach mal den ganzen Quellcode für das vier gewinnt reingepackt aber das funktioniert alles nicht


----------



## Voreck (5. Sep 2016)

```
mit [/code=Java]
kannst du codes in solche felder packen
```
Das ist dann angenehmer zu lesen als screenshots


----------



## Joose (5. Sep 2016)

Voreck hat gesagt.:


> ```
> mit [/code=Java]
> kannst du codes in solche felder packen
> ```
> Das ist dann angenehmer zu lesen als screenshots



Nicht ganzs richtig [code=java] ... der code ... [/code]


----------



## My94 (5. Sep 2016)

bei dem zweiten Kreuz "Parent" steht zum Beispiel :
Opens the new class wizard to create the type.
Package: projekt
public class Parent {
}

in Zeile 10 :
...
import java.awt.*;
import java.util.Arrays;
...


----------



## My94 (5. Sep 2016)

```
package projekt;

public class start {
   Parent root = FXMLLoader.load(getClass().getResource("Gui Vier gewinnt.fxml"));
   > stage.setScene(new Scene(root));
   > stage.show();
   
   // FourInARow2.java (player against computer)

   import ch.aplu.jgamegrid.*;
   import java.awt.*;
   import java.util.Arrays;

   public class FourInARow2 extends GameGrid implements GGMouseListener
   {
    private int currentPlayer = 0;
    public boolean finished = false;
    Token activeToken;
    private IPlayer ComputerPlayer;
    private String moveInfo = "Move mouse to a column and click to set the token.";

    public FourInARow2()
    {
    super(7, 7, 70, null, null, false);
    addMouseListener(this, GGMouse.lPress | GGMouse.move);
    this.getBg().setBgColor(Color.white);
    activeToken = new Token(currentPlayer, this);
    addActor(activeToken, new Location(0, 0), Location.SOUTH);
    addActor(new BG(), new Location(3, -1)); //outside of grid, so it doesn't disturb game
    getBg().setFont(new Font("SansSerif", Font.BOLD, 48));
    getBg().setPaintColor(Color.red);
    show();
    setSimulationPeriod(30);
    doRun();
    addStatusBar(30);
    setStatusText(moveInfo);
    setTitle("Four In A Row (against Computer). Developed by Stefan Moser.");
    ComputerPlayer = new DBot(1, this); //menu for choosing?
    for (Token[] column : DBot.board) //fill board with "empty" stones
    Arrays.fill(column, new Token(-1, this));
    }

    public void reset()
    {
    getBg().clear();
    removeActors(Token.class); //remove all tokens
    for (Token[] column : DBot.board) //fill board with "empty" stones
    Arrays.fill(column, new Token(-1, this));
    currentPlayer = 0; //Human player always starts (bc i'm lazy)
    setStatusText("Game reset! " + (currentPlayer == 0 ? "Yellow" : "Red") + " player begins.");
    activeToken = new Token(currentPlayer, this);
    addActor(activeToken, new Location(0, 0), Location.SOUTH);
    finished = false;
    }

    public void computerMove()
    {
    setMouseEnabled(false);
    int col = ComputerPlayer.getColumn();
    activeToken.setX(col);
    activeToken.setActEnabled(true);
    currentPlayer = (currentPlayer + 1) % 2; //change Player
    setStatusText(moveInfo);
    }

    @Override
    public boolean mouseEvent(GGMouse mouse)
    {

    Location mouseLoc = toLocation(mouse.getX(), mouse.getY());
    if (mouse.getEvent() == GGMouse.move)
    { //move active Token with mouse
    if (!finished && activeToken.getX() != mouseLoc.x)
    activeToken.setX(mouseLoc.x);
    return true;
    }

    if (finished)
    {
    reset();
    return true;
    }

    if (getOneActorAt(new Location(mouseLoc.x, 1)) == null)
    { //drop Token if column isn't full
    activeToken.setActEnabled(true);
    setMouseEnabled(false);
    currentPlayer = (currentPlayer + 1) % 2;
    }
    else
    {
    setStatusText("This column is full.");
    }

    return true;
    }

    public int getPlayerOfTokenAt(int x, int y)
    {
    Location loc = new Location(x, y);
    if (getOneActorAt(loc) == null)
    return -1;
    else
    return ((Token)getOneActorAt(loc)).getPlayer();
    }

    // @param the location of newly inserted token
    // @return true, if four are connected through that token

    public boolean check4Win(Location loc)
    {
    int col = loc.x;
    int row = loc.y;
    return (checkVertically(col, row, 4) || checkHorizontally(col, row, 4)
    || checkDiagonally1(col, row, 4)
    || checkDiagonally2(col, row, 4));

    }

    private boolean checkDiagonally2(int col, int row, int nrOfTokens)
    {
    for (int j = 0; j < nrOfTokens; j++)
    {
    int adjacentSameTokens = 0;
    for (int i = 0; i < nrOfTokens; i++)
    {
    if ((col - i + thej) >= 0 && (col - i + j) < nbHorzCells
    && (row + i - j) >= 1 && (row + i - j) < nbVertCells
    && getPlayerOfTokenAt(col - i + j, row + i - j) == getPlayerOfTokenAt(col, row))
    {
    adjacentSameTokens++;
    }
    }
    if (adjacentSameTokens >= nrOfTokens)
    return true;
    }
    return false;
    }

    private boolean checkDiagonally1(int col, int row, int nrOfTokens)
    {
    for (int j = 0; j < nrOfTokens; j++)
    {
    int adjacentSameTokens = 0;
    for (int i = 0; i < nrOfTokens; i++)
    {
    if ((col + i - j) >= 0 && (col + i - j) < nbHorzCells
    && (row + i - j) >= 1 && (row + i - j) < nbVertCells
    && getPlayerOfTokenAt(col + i - j, row + i - j) == getPlayerOfTokenAt(col, row))
    {
    adjacentSameTokens++;
    }
    }
    if (adjacentSameTokens >= nrOfTokens)
    return true;
    }
    return false;
    }

    private boolean checkHorizontally(int col, int row, int nrOfTokens)
    {
    int adjacentSameTokens = 1;
    int i = 1;
    while (col - i >= 0 && getPlayerOfTokenAt(col - i, row) == getPlayerOfTokenAt(col, row))
    {
    adjacentSameTokens++;
    i++;
    }
    i = 1;
    while (col + i < nbHorzCells && getPlayerOfTokenAt(col + i, row) == getPlayerOfTokenAt(col, row))
    {
    adjacentSameTokens++;
    i++;
    }
    return (adjacentSameTokens >= nrOfTokens);
    }

    private boolean checkVertically(int col, int row, int nrOfTokens)
    {
    int adjacentSameTokens = 1;
    int i = 1;
    while (row + i < nbVertCells && getPlayerOfTokenAt(col, row + i) == getPlayerOfTokenAt(col, row))
    {
    adjacentSameTokens++;
    i++;
    }
    return (adjacentSameTokens >= nrOfTokens);
    }

    public static void main(String[] args)
    {
    new FourInARow2();
    }
   }



}
```


----------



## My94 (5. Sep 2016)

ich versteh nicht ganz was diese "imports" am anfang sind aber die brauche ich anscheinend um den Code ausführen zu können oder?


----------



## Joose (5. Sep 2016)

My94 hat gesagt.:


> Also das grundsätzliche Problem das ich hab, das ich nicht versteh was ich alles in die Klasse packen muss um programmieren zu können. Du siehst an der Seite was ich bei start.java habe.


Der Java Code muss einer bestimmten Syntax folgen sonst kann der Compiler damit nicht arbeiten.
Bei deinem Screen sieht man schon mal ein paar falsche Sachen: du hast Code der nicht in einer Methode steht, du hast 2 public Klassen in einer Datei, die import Anweisungen gehören vor die public Klasse (und davor noch eine Packageanweisung)



My94 hat gesagt.:


> Ich hab da jetzt einfach mal den ganzen Quellcode für das vier gewinnt reingepackt aber das funktioniert alles nicht


Ja die meisten der Fehler die ich da sehe sind Compilefehler, weil dem Compilere viele Klassen nicht bekannt sind.



My94 hat gesagt.:


> ich versteh nicht ganz was diese "imports" am anfang sind aber die brauche ich anscheinend um den Code ausführen zu können oder?


Das gehört zu den Grundlagen, da hättest du schon mal googlen können was "diese imports" sind:
https://www.google.at/?client=firefox-b-ab#q=java+imports&gfe_rd=cr


----------



## My94 (5. Sep 2016)

So sieht das bei mir im Moment aus


----------



## Jardcore (5. Sep 2016)

Vielleicht solltest du dich erstmal nicht um die GUI kümmern und das Spiel Konsolen basiert programmieren. Wenn das Läuft einfach eine GUI drüber setzen.

In jetzt noch 10 Tagen bis zur Abgabe ist das durchaus möglich.

Ich fange z.B. immer damit an mir ein Blatt Papier zu nehmen und meine Gedanken zu ordnen.
Welche Klassen brauche ich, wie interagieren diese. usw.

Du erwähntest eine KI, das hört sich schon ziemlich Advanced an. Genauso ist SVN eher ein Thema für höhere Semester. In welchem Semester bist du?

SVN ist aber eigentlich sehr einfach. Du brauchst hauptsächlich nur 2-3 Funktionen, Commit und Update/Synchronize sind dabei die wichtigen.

Also um nochmal auf das Blatt Papier zurück zu kommen:
Spieler, Stein, Spielfeld wären wohl die wichtigsten Modelobjeke (Objekte die Daten enthalten)
Dann bräuchtest du noch etwas was dich mit der Anwendung kommunizieren lässt. Einen sogenannten Controller verknüpft mit einer View (Konsole oder GUI).
Auf der View gibst du Daten ein (Machst deine Aktionen), der Controller verarbeitet diese und aktualisiert das Model. Die View bekommt die aktualisierten Daten und zeigt diese an.

Außerdem musst du dir Gedanken über den Ablauf deines Programms machen. Wann gewinnt jemand?, was geschieht dann, wo wird das behandelt? 
Diese Fragen musst du alle im Vorfeld geklärt haben. Wenn du das alles hast, kannst du Anfangen zu programmieren.


----------



## My94 (5. Sep 2016)

Jardcore hat gesagt.:


> Du erwähntest eine KI, das hört sich schon ziemlich Advanced an. Genauso ist SVN eher ein Thema für höhere Semester. In welchem Semester bist du?



ich bin im 2. Semester


----------

