Variablen Int-Array Int Zuweisen

4a616e

Mitglied
Hallo,
ich Programmiere Momentan Tic-Tac-Toe in einem Framework unsrer Firma plus eigenen Gui-Designer.
Ich habe Folgendes Problem und zwar habe ich ein int[]-Array mit 9 Buttons, die alle einen Wert von Null am Anfang haben. Es gibt einen Spieler und eine KI, der Spieler bzw die KI haben einen Normalen int Wert (Spieler = 1 und X ; und KI war auserhalb des Framework 2 bzw O).
Nun Versuche ich gerade irgendwie ein int[] einem int Wert zuzuweisen jedoch klappt das natürlich nicht. Ich habe jetzt bloß keine Ahnung wie ich das genau anstellen soll (hatte es schon versucht die Spieler auch in ein Array reinzuwerfen was aber auch nicht so wirklich geklappt hat). Die Anpassungen in Model View Controller kommen dann noch es soll erst mal das Programm laufen. Teile die mit Sternchen gekennzeichnet sind, sind Firmen eigene Framwork Strukturen die ich so nicht abbilden darf.
Das Problem liegt in der setXO()- , ki()- Methode.
Schonmal Danke für die Antworten.

Hier mein Code:
Java:
public class DevelForm extends AbstractJavaViewerForm {
    public static int spieler = 1; //Aktueller Spieler
    int icounter = 1;

    private Model model;

    @Override
    public AbstractGuiControl getGui() {
        return develForm;
    }

    public DevelForm(******) {
        super(connector, form);
        $$internalCreateGui$$(null);
        postCreateGui();
    }

    private void postCreateGui() {
        model = new Model();
    }

    public class Model{
        private int[] value;
        FrameworkImage X,O;

        public Model() {
            this(new int[]{0,0,0,0,0,0,0,0,0});
        }

        public Model(int[] value){
            this.value = value;
            X = FrameworkImage.getRelativeToClass(DevelForm.class, "X.png");
            O = FrameworkImage.getRelativeToClass(DevelForm.class, "0.png");
        }

        public int[] getValue() {
            return value;
        }
        public void setValue(int[] value) {
            this.value = value;
        }

        public int getValueAt(int index){
            return value[index];
        }
        public void setValueAt(int idx, int value) {
            this.value[idx] = value;
        }


        public void setXO(int spieler){
            GuiButton button;
            switch(spieler){
                case 0:
                    value = spieler;
                    button.setIcon(null);
                    break;
                case 1:
                    value = spieler;
                    button.setIcon(X);
                    break;
                case 2:
                    value = spieler;
                    button.setIcon(O);
                    break;
            }
        }
    }

    public class Controller {
    }

    public class View{
    }

    public void checkforset(Model model) {
        if (model.getValueAt(0) == 1 || model.getValueAt(0) == 2) {
            develForm.button_0.setEnabled(false);
        }
        if (model.getValueAt(1) == 1 || model.getValueAt(1) == 2) {
            develForm.button_1.setEnabled(false);
        }
        if (model.getValueAt(2) == 1 || model.getValueAt(2) == 2) {
            develForm.button_2.setEnabled(false);
        }
        if (model.getValueAt(3) == 1 || model.getValueAt(3) == 2) {
            develForm.button_3.setEnabled(false);
        }
        if (model.getValueAt(4) == 1 || model.getValueAt(4) == 2) {
            develForm.button_4.setEnabled(false);
        }
        if (model.getValueAt(5) == 1 || model.getValueAt(5) == 2) {
            develForm.button_5.setEnabled(false);
        }
        if (model.getValueAt(6) == 1 || model.getValueAt(6) == 2) {
            develForm.button_6.setEnabled(false);
        }
        if (model.getValueAt(7) == 1 || model.getValueAt(7) == 2) {
            develForm.button_7.setEnabled(false);
        }
        if (model.getValueAt(8) == 1 || model.getValueAt(8) == 2) {
            develForm.button_8.setEnabled(false);
        }
    }

    public boolean checkforwin(Model model) {
        //XButton
        if (((model.getValueAt(0) == 1) && (model.getValueAt(1) == 1) && (model.getValueAt(2) == 1)) || ((model.getValueAt(0) == 2) && (model.getValueAt(1) == 2) && (model.getValueAt(2) == 2))) {
            return true;
        } else if (((model.getValueAt(3) == 1) && (model.getValueAt(4) == 1) && (model.getValueAt(5) == 1)) || ((model.getValueAt(3) == 2) && (model.getValueAt(4) == 2) && (model.getValueAt(5) == 2))) {
            return true;
        } else if (((model.getValueAt(6) == 1) && (model.getValueAt(7) == 1) && (model.getValueAt(8) == 1)) || ((model.getValueAt(6) == 2) && (model.getValueAt(7) == 2) && (model.getValueAt(8) == 2))) {
            return true;
        } else if (((model.getValueAt(0) == 1) && (model.getValueAt(3) == 1) && (model.getValueAt(6) == 1)) || ((model.getValueAt(0) == 2) && (model.getValueAt(3) == 2) && (model.getValueAt(6) == 2))) {
            return true;
        } else if (((model.getValueAt(1) == 1) && (model.getValueAt(4) == 1) && (model.getValueAt(7) == 1)) || ((model.getValueAt(1) == 2) && (model.getValueAt(4) == 2) && (model.getValueAt(7) == 2))) {
            return true;
        } else if (((model.getValueAt(2) == 1) && (model.getValueAt(5) == 1) && (model.getValueAt(8) == 1)) || ((model.getValueAt(2) == 2) && (model.getValueAt(5) == 2) && (model.getValueAt(8) == 2))) {
            return true;
        } else if (((model.getValueAt(0) == 1) && (model.getValueAt(4) == 1) && (model.getValueAt(8) == 1)) || ((model.getValueAt(0) == 2) && (model.getValueAt(4) == 2) && (model.getValueAt(8) == 2))) {
            return true;
        } else if (((model.getValueAt(2) == 1) && (model.getValueAt(4) == 1) && (model.getValueAt(6) == 1)) || ((model.getValueAt(2) == 2) && (model.getValueAt(4) == 2) && (model.getValueAt(6) == 2))) {
            return true;
        } else {
            return false;
        }
    }

    //Buttons
    public void clickedButton0(Event event) {
        clickedButton((GuiButton)event.getSource(), 0);
    }
    public void clickedButton1(Event event) {
        clickedButton((GuiButton)event.getSource(), 1);
    }
    public void clickedButton2(Event event) {
        clickedButton((GuiButton)event.getSource(), 2);
    }
    public void clickedButton3(Event event) {
        clickedButton((GuiButton)event.getSource(), 3);
    }
    public void clickedButton4(Event event) {
        clickedButton((GuiButton)event.getSource(), 4);
    }
    public void clickedButton5(Event event) {
        clickedButton((GuiButton)event.getSource(), 5);
    }
    public void clickedButton6(Event event) {
        clickedButton((GuiButton)event.getSource(), 6);
    }
    public void clickedButton7(Event event) {
        clickedButton((GuiButton)event.getSource(), 7);
    }
    public void clickedButton8(Event event) {
        clickedButton((GuiButton)event.getSource(), 8);
    }

    public void clickedButton(GuiButton button,int modelIdx) {




        this.model.setValueAt(modelIdx, spieler);
        checkforset(model);
        button.setEnabled(false);

        if (checkforwin(model)) {
            develForm.panel_0.setEnabled(false);
            develForm.label_2.setText("Gewinner ist Spieler 1");
        } else if (!checkforwin(model) && (icounter >= 8)) {
            develForm.panel_0.setEnabled(false);
            develForm.label_2.setText("Unentschieden!");
        } else {
            checkforset(model);
            ki();
            checkforset(model);

            if (checkforwin(model)) {
                develForm.panel_0.setEnabled(false);
                develForm.label_2.setText("Gewinner ist KI");
            } else if (!checkforwin(model) && (icounter >= 8)) {
                develForm.panel_0.setEnabled(false);
                develForm.label_2.setText("Unentschieden!");
            }
        }
        icounter++;
    }

    //KI
    public void ki() {
        GuiButton move = null;

        move = winorblock(2);
        if (move == null){
            move = winorblock(1);
            if(move == null){
                move = corner();
                if ((move == null)){
                    move = space();
                    if(move == null){
                        develForm.label_2.setText("Unentschieden!");
                    }else{
                        move.setXO(2);
                    }
                } else {
                    model.setXO(2);
                }
            } else {
                model.setXO(2);
            }
        } else {
            model.setXO(2);
        }
    }
 
Kannst du vielleicht mal die Fehlermeldung posten?
Normalerweise weist man Werte wie folgt zu:
Java:
int[] intArray1 = new int[5];
intArray1[0] = 1;
intArray1[1] = 2;
intArray1[2] = 3;
intArray1[3] = 4;
intArray1[4] = 5;
// oder

int[] intArray2 = new int[] {1,2,3,4,5};
// oder

int[] intArray3 = new int[5];
for(int index = 0; index < intArray3.lenght; index++) {
    intArray3[index] = index + 1;
}
Wie es aussieht, ist das aber nicht das Problem.

hatte es schon versucht die Spieler auch in ein Array reinzuwerfen was aber auch nicht so wirklich geklappt hat
Hört sich auch nach raten an und nicht an effektiven Arbeiten.
TicTacToe ist ja auch nicht das schwierigste Spiel. Dein Code sieht zu dem auch nicht super und gut strukturiert aus. Wenn du eine gute Struktur hinein bekommst, passieren diese "magischen" Fehler vermutlich auch nicht.
 
Zuletzt bearbeitet:
Die Fehler meldung sagt Folgendes:

Bei value = spieler; in setXo , was dementsprechen in ki() einen Fehler gibt bei move.setXO
Incompatibel Types.Requiered Int[] Found Int.

Das mit der Zuweisung ist mir Bewusst, sollte es laut Angaben meines Ausbilders jedoch so lösen. Und da ich eh nur dieses, hoffentlich recht kleine Problem habe, und sonst alle weitere funktioniert bin ich soweit auch ganz glücklich.
Das ganze Erzeugen mit der for Schleife wird hierbei von unserem GUI-Designer selbst weiter Unten geschrieben den Part darf/kann ich leider nicht zeigen (wegen interenen Klassen, Designs etc.) und dieser wäre auch etwas zu lang (ca 400 zeilen).
 
Ja soweit war ich auch schon aber ich muss das ganze ja in dem Sinne verallgemeinern dass er den Array Value nicht an einer zugewiesenen Stelle, sondern an der Stelle wo der Button geklickt wurde setzten soll.
 
Moin,
ich muss das ganze ja in dem Sinne verallgemeinern dass er den Array Value nicht an einer zugewiesenen Stelle, sondern an der Stelle wo der Button geklickt wurde setzten soll.
Ehrlich gesagt: keine Ahnung, was Du damit ausdrücken willst ..... 😱

Fakt ist (und genau das besagt die Fehlermeldung), das Du, wenn Du einen Wert in ein Array einfügen willst, einen Index angeben MUSST !!!
Anders geht es nun mal nicht ..... 😳

Gruß Klaus
 
verallgemeinern dass er den Array Value nicht an einer zugewiesenen Stelle, sondern an der Stelle wo der Button geklickt wurde setzten soll.
Ja dazu musst du aber irgendwo festlegen welcher JButton für welchen Index "zuständig" ist. Du könntest zum Beispiel den JButtons ein ActionCommand setzen welches den Index beinhaltet.
Im ActionListener fragst du das ActionCommand ab und weißt welcher Index gesetzt werden soll.
 
@ Vfl_Freak Mein Gedanke war (Fehlermeldung dabei nicht beachten): Ich klicke einen zufälligen Button der dann (durch den Wert des Spielers (1) + switch case) den Value 1 und somit ein Icon X bekomt, das selbe dann über die ki die ja .setXO(2) hat. Heißt ki geht erst alle Prüfungen durch und setzt dann den Value 2 auf den Button der bei der Prüfung rauskam den Value 2 bzw dann das O Icon.

Und somit war mein Gedanke dass ich dem Value = Spieler keinen festen Index angeben darf weil dieser doch sonst Immer auf genau dieser Index-Position den Wert einsetzt und nicht woanders.



@Joose
Okay ich werds mal so probieren.
 

Neue Themen


Zurück
Oben