WICHTIG: Der Betrieb von goMatlab.de wird privat finanziert fortgesetzt. - Mehr Infos...

Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Partner:




Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

Problem bei Gewinnabfrage in 3-Gewinnte

 

Ape

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 04.02.2011, 15:42     Titel: Problem bei Gewinnabfrage in 3-Gewinnte
  Antworten mit Zitat      
Hallo go-Matlab-Members,

ich hab mittels des Matlab-GUIs eine 3-Gewinnt Oberfläche erstellt. Sie beinhaltet 9 Buttons, einen Startbutton und ein Endebutton. Ich hab mir erst theoretisch überlegt, wie die Gewinnabfrage aussehen sollte und dann versucht das in einen Code umzusetzen dabei ist dann sowas hier heraus gekommen. Man muss dazu sagen ich bin neu mit Matlab eingestiegen, deswegen wollte ich auch eine GUI zur Hilfe nehmen, weil ich dachte damit geht sowas vielleicht sehr einfach.

Das hier ist die if-schleife
Code:

function gewinnkombinationen(handles)

if (get(handles.b1,'String') == 'X') && (get(handles.b2,'String') == 'X') &&  (get(handles.b3,'String') == 'X')       %    msgbox('Winner')                                                                                                   %
elseif (get(handles.b4,'String') == 'X') && (get(handles.b5,'String') == 'X') && (get(handles.b6,'String') == 'X')   %  horizontaler Sieg
     msgbox('Winner')                                                                                               ....
 


für die anderen button geht die schleife dann eben entsprechend weiter. Das Problem ist nur er meckert irgendwie wenn ich das so schreibe. Hat jemand von euch eventuell eine Ahnung was ich falsch gemacht haben könnte?
Hier noch die entsprechende Fehlermeldung:

Zitat:

??? Input argument "handles" is undefined.

Error in ==> gaanzneu2>gewinnkombinationen at 299
if (get(handles.b1,'String') == 'X') && (get(handles.b2,'String') == 'X') &&
(get(handles.b3,'String') == 'X') %

Error in ==> gaanzneu2>b2_Callback at 116
gewinnkombinationen()

Error in ==> gui_mainfcn at 96
feval(varargin{:});

Error in ==> gaanzneu2 at 42
gui_mainfcn(gui_State, varargin{:});



Gruß,
Ape


Harald
Forum-Meister

Forum-Meister


Beiträge: 24.501
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 05.02.2011, 11:48     Titel:
  Antworten mit Zitat      
Hallo,

du kannst das nicht einfach mit dem Play-Button laufenlassen, sondern musst es eine passende Handles-Struktur zur Verfügung stellen. Wird also nur sinnvoll sein, wenn du das aus deiner GUI heraus aufrufst.

Grüße,
Harald
_________________

1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
Ape

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 05.02.2011, 12:41     Titel:
  Antworten mit Zitat      
Hallo Harald,


hab das jetzt hinbekommen mit der Gewinnabfrage. Nur so wie ich das gelöst hab ist der Code einfach unglaublich lang, weil ich jeweils zu jedem Button die if-schleife der gewinnabfrage hinzugefügt hab. Nicht nur dass ist ein Problem sondern auch meine "KI", die ich dazu programmiert habe. Ich hab hier im Forum einen ganz nützlichen Eintrag zu dem Thema von dir gefunden.
Meine KI arbeitet ziemlich primitiv ich hab ihr einfach gesagt (in einer über hundert zeilen if-schleife), dass sie erst prüfen soll, ob es gilt eine Reihe zu verhindern und wenn dass nicht der fall ist sie sich einfach ein Feld aussuchen soll. Ist nich wirklich die eleganteste Lösung, da ich diese Schleife auch wieder zu jedem Button dazu gepackt habe ansonsten hat es nicht funktioniert. Nun hab ich ein Code von über tausend Zeile, worauf nicht unbedingt stolz bin. Kann mir jemand sagen wie man das eventuell zusammenfassen kann?
Ist es möglich in Matlab eine Radom-Anweisung aus einem bestimmten Zahlenbereich festzulegen, denn die funktion rndm() generiert ja nur eine Zahl zwischen Null und eins?
Wäre wirklich nett, wenn jemand für diese Probleme ein paar Ratschläge parrat hat =)

Hier noch ein Auszug von dem Code der KI, dass ihr euch ein Bild von meinen "Künsten" machen könnt =D

Code:

                    if     (get(handles.b1,'String') == get(handles.b2,'String')) == 'X'
                            isempty(get(handles.b3,'String'))
                            wahl=3;
                    elseif (get(handles.b2,'String') == get(handles.b3,'String')) == 'X'
                            isempty(get(handles.b1,'String'))
                            wahl=1;
                    elseif (get(handles.b1,'String') == get(handles.b3,'String')) == 'X'
                            isempty(get(handles.b2,'String'))    
                            wahl=2;    
                    elseif (get(handles.b3,'String') == get(handles.b1,'String')) == 'X'
                            isempty(get(handles.b2,'String'))    
                            wahl=2;            
                    elseif (get(handles.b4,'String') == get(handles.b5,'String')) == 'X'
                            isempty(get(handles.b6,'String'))
                            wahl=6;
                    elseif isempty(get(handles.b5,'String'))
                            wahl=5;                                                                                    
                    elseif isempty(get(handles.b7,'String'))
                            wahl=7;                                                                              
                    elseif isempty(get(handles.b8,'String'))
                            wahl=8;                        



Gruß,
Ape S.
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.501
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 05.02.2011, 13:45     Titel:
  Antworten mit Zitat      
Hallo,

der Code ist nicht nur sehr länglich, sondern ich bezweifle, dass er das tut, was er soll. Beispiel:
Code:
a = 'X';
b = 'X';
a == b == 'X'

Es müsste heißen:
Code:
a == 'X' && b == 'X'


Allerdings machst du dir meines Erachtens das Leben deutlich schwerer, als es sein müsste. Warum speicherst du deine Auswahlen nicht in einer 3x3-Matrix ab, 1 für 'O' und 2 für 'X', 0 für frei? Diese Matrix könntest du mit setappdata/getappdata speichern oder meinetwegen sogar als globale Variable deklarieren. Die Abfrage, ob Spieler 1 gewinnt, sähe dann z.B. so aus:
Code:
if any(all(M == 1)) || any(all(M==1, 2)) || all(M([1 5 9]) == 1) || all(M([3 5 7]) == 1)


Im übrigen könntest du dir auch ansehen, wie andere Leute das gemacht haben:
http://www.mathworks.com/matlabcent.....eexchange/148-tic-tac-toe
http://www.mathworks.com/matlabcent.....exchange/6179-tic-tac-toe

Grüße,
Harald
_________________

1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
Ape

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 05.02.2011, 14:19     Titel:
  Antworten mit Zitat      
Hey Harald,

danke für die schnelle Antwort. Der Tipp mit der 3x3 Matrix ist echt gut mal sehn ob ich den irgendwie umgesetzt bekomme.
Ich hab mir auch schon diverse andere Programme angeschaut das Problem ist nur, dass diese oft sehr komplex geschrieben sind und für mich als Matlab-Dummie eine echte Herausforderung.
Ich wollte mein Programm so einfach wie möglich halten und die "KI" sollte sowieso nur ansatzweise versuchen den Sieg des Spielers zu verhindern.
 
Ape

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 05.02.2011, 19:30     Titel:
  Antworten mit Zitat      
Hallo an Alle,

ich hab noch eine letzte frage und zwar möchte ich einen String(in meinem Fall ein 'X' o.'O') an eine Text in der MessageBox übergeben. Es sollte so ähnlich funktionieren wie num2str() hab aber leider in der Richtung nichts brauchbares für meine Problemstellung gefunden. Ich würde mich von freun, wenn jemand von euch weis, wie das umsetzbar ist.(bin es wirklich leid weiter zu suchen)

Vielen dank für die Hilfe bisher
Gruß Ape
 
Sco
Forum-Meister

Forum-Meister


Beiträge: 699
Anmeldedatum: 15.08.10
Wohnort: Dundee
Version: 2008a, 2010a
     Beitrag Verfasst am: 05.02.2011, 21:36     Titel:
  Antworten mit Zitat      
Hallo,

hier mal ein allgemeines Beispiel wie man Strings und Zahlen in einer Messagebox ausgeben lassen kann:
Code:

zahl = 0;
string = 'Wirklich?';
msgbox([num2str(1) ': Einmal ist besser als ' num2str(zahl) ' mal, ' string]);
 


MFG

Sco
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen



Einstellungen und Berechtigungen
Beiträge der letzten Zeit anzeigen:

Du kannst Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.
Du kannst Dateien in diesem Forum posten
Du kannst Dateien in diesem Forum herunterladen
.





 Impressum  | Nutzungsbedingungen  | Datenschutz | FAQ | goMatlab RSS Button RSS

Hosted by:


Copyright © 2007 - 2025 goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks

MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.