Seite 1 von 2

unknow chess (alpha) pb 5.50

Verfasst: 02.12.2016 00:38
von True29
Heyhey,

hier mein letztes Projekt (unknow chess noch namenlos) in welchem ich versucht hatte eine Chess KI auf die beine zu stellen.
Leider bin ich nun an einem Punkt an welchem ich nicht mehr weiter komme und so stelle ich euch hier den aktuelln stand bereit.
Eventuell hat hier ja jemand lust daran sich zu versuchen ich würde mich freuen ;)

hier eine kleine übersicht was fehlt bzw was integriert ist.
programm Status: alpha
bewegungen: integriert
regeln: fehlen alle
gui: 80% (hier fehlt die zeitanzeige)
ki: 50%
gfx: ist alles vorhanden (spielfeld,figuren,farbliche farkierung für zielfeld)

was fehlt nun noch bei der KI:
ich habe hier versucht das alpha beta pruning zu intergrieren wem das nicht sagt dies ist ein algo welche für jeden spieler des besten nutzen aus dem zug holt.
quelle: https://chessprogramming.wikispaces.com/Alpha-Beta

Man müsste die Methoden/Prozeduren Makemove unmakemove/copyboard integrieren.
quelle: https://chessprogramming.wikispaces.com/Make+Move

ebenso fehlt die berechnung der position
quelle: https://chessprogramming.wikispaces.com/Evaluation

copyrigh von den Grafiken geht an http://graphicriver.net , die grafik darf nicht verkauft werden ;)
bild vom chess.

Bild

compiler: pb 5.50 windows
download: (alles enthalten , source grafik)
https://www.dropbox.com/s/hmnz31pvbqyyw ... s.rar?dl=0

__________________________________________________
Link zum Originalbild hinzugefügt
01.12.2016
RSBasic

Re: unknow chess (alpha) pb 5.50

Verfasst: 02.12.2016 00:44
von RSBasic
:allright:

PS: Ich habe den von dir eingefügten Screenshot zusätzlich zum Originalbild verlinkt, damit man besser sehen kann, wie dein Spiel aussieht.

Re: unknow chess (alpha) pb 5.50

Verfasst: 02.12.2016 01:04
von True29
danke ;)

Re: unknow chess (alpha) pb 5.50

Verfasst: 04.12.2016 02:00
von DarkSoul
Habe das Spiel getestet.

Hier mein Feedback:

Bugs:
- Kein Schließen-X?
- Sehr hohe CPU-Last (ein Kern läuft stets auf 100% - durch dieses Spiel)
- Das Schachbrett ist spiegelverkehrt. Die Koordinate A8 ist oben links oder unten rechts (je nachdem, auf welcher Seite man sitzt)
- Die Koordinaten (Zahlen/Buchstaben) um das Schachbrett herum sind nicht mittig und auch teilweise abgeschnitten
- Mein erster Startversuch war, auf "Start new game" im Screen zu klicken. Es irritiert etwas, dass der Klick nicht angenommen wird und man über Game/New... gehen muss.
- "Choose your color, yes = white, no = black" -> Warum das? Warum nicht "Choose your color" mit einem Button "Black" und einem Button "White"?
- Die KI hat bei mir keinen einzigen Zug gemacht, obwohl ich die Frage "Player vs KI" bejaht habe.
- Die Seitenwahl ist funktionslos, wenn beide Seiten von menschlichen Spielern gesteuert wird. Weiß fängt IMMER an.
- Die beiden großen Bauern unterscheiden sich zu schlecht von den kleinen. Idee: Normalerweise hat der große einen eingekerbten Kopf.
- Die großen Bauern lassen sich nicht bewegen.
- Wenn ich eine Figur anklicke, kann ich zwar sehen, wohin ich sie setzen kann, aber es wäre evtl. besser, wenn auch angezeigt werden würde, welche Figur überhaupt ausgewählt wurde.
- Teilweise sind die Anzeigen rechts abgeschnitten
- Total Playtime. Hier sollte die Formatierung der Zeit imho so aussehen: 00:00:00. Die bisherige Anzeige ist eher für Videoschnittprogramme geeignet. 8)
- Entweder sollte das eine nicht korrekt funktionierende Schach-Matt-Erkennung sein, oder der König wird nicht richtig gezogen.. Das kannst du dir jetzt aussuchen. :) (https://postimg.org/image/nwd0jd66t/)
- Die Chessclock führte bei mir dazu, dass alle 3 Stellen (h, m und s) in rasender Geschwindigkeit rückwärts liefen
- Wozu ist der Menübutton "Actions"? Der ist bei mir immer leer.
- Ich kann den eigenen König schachsetzen, wenn ich eine Figur so bewege, dass eine gegnerische Figur dadurch den König im nächsten Zug schlagen kann
- Klick auf die Last-turns-Liste führt gelegentlich zu verbuggten Anzeigen auf dem Spielfeld. Vermutlich alte Züge werden angezeigt, die aber nie stattgefunden haben.
- Die Querlatte vom Kreuz des weißen Königs ist verschwommen

Es fehlen noch wichtige Spielregeln (darum wahrscheinlich noch Alpha):
- En passant (Am gegnerischen Bauern vorbeigelaufener eigener Bauer kann von diesem nachträglich geschlagen werden)
- Ein bis zum Ende durchgelaufender Bauer kann durch eine zuvor verlorene Spielfigur nach Wahl ersetzt werden
- Rochade bei ungezogenem König/Turm
- Eine Figur, die man auswählt, muss man dann theoretisch auch setzen MÜSSEN (im realen Leben ist es so, dass du die Figur auch wirklich setzen musst, wenn du sie angefasst hast)
- Wenn ein König geschlagen worden ist, ist das Spiel zuende und derjenige hat gewonnen, der seinen König noch hat.

Anregungen:
- Vielleicht dunkles Grün oder dunkles Rot anstatt das Schwarz als Hintergrund? Ich finde den Kontrast auf Dauer sehr anstrengend.
- Das Spielbrett kann locker die doppelte Größe haben.
- Ich finde das Spiel grafisch ziemlich hässlich. Ein schönes Holzbrett und schöne Figuren würden das Spiel für mich schon viel attraktiver machen.

Ich hoffe, dir helfen diese Infos weiter. :)

Re: unknow chess (alpha) pb 5.50

Verfasst: 04.12.2016 17:06
von True29
danke für deine Kritik. und das ausführliche Testen.
Eins hatte ich vielleicht vergessen zu erwähnen ich bin kein schach spieler ;) demnach kann ich das nicht so nachempfinden was wichtig ist.
werde einige punkte davon umsetzten ;)

thema grafik:
Bei dem spiel war eher mein Ziel mich dem Thema chess KI zu widdmen weshalb ich die grafik minimal gehalten habe.
Ich hätte für die figuren auch platzhalter lassen können.

Grüße

Re: unknow chess (alpha) pb 5.50

Verfasst: 04.12.2016 17:45
von DarkSoul
Ich bin auch kein Schachspieler. :mrgreen:

Ich spiele mal aus Jokus Schach mit jemandem, der genauso wenig Ahnung hat. Dann wirds aber Räuberschach (mit Schlagzwang) :mrgreen: :mrgreen:

Habe meine Schachfiguren vor Jahren selber aus Holz geschnitzt, weil ich zu geizig war, welche zu kaufen. :mrgreen:

Wenn dir nur die KI wichtig ist, wäre es vielleicht eine Überlegung wert, das entsprechende .pb in eine DLL auszulagern, die in ein bestehendes Schachspiel eingebaut werden kann. :mrgreen:

Dann wäre die DLL das "wertvolle" und die GUI drumherum nur Beiwerk zum Testen.

Schade, dass du das Projekt mehr oder weniger aufgegeben hast. :|

Re: unknow chess (alpha) pb 5.50

Verfasst: 04.12.2016 19:00
von True29
hm , zum thema aufgeben. ich habe da bestimmt schon viel zeit in die KI gesteckt.
jedoch ist es da schwierig hilfe zu bekommen.

mache jetzt mal ein zwischen projekt und dann vielleicht weiter ;)
demotiviert wenn man in einem projekt nicht wirklich selbst weiterkommen kann :D

Re: unknow chess (alpha) pb 5.50

Verfasst: 04.12.2016 20:27
von Helle
Haste denn mein simples Schachprogramm hier ein paar Seiten weiter angeschaut? Habe das eben für Unicode aktualisiert:
http://www.mdcc-fun.de/k.helbing/Little-Timpetu/LT.zip
Wenn Grafik weniger wichtig ist kann man für Unicode auch die dort enthaltenen Schach-Figuren-Symbole verwenden; simples Beispiel:

Code: Alles auswählen

;Unicode einschalten für ältere PB-Versionen!
;Unicode-Schachfiguren:
;Weisser König 	    = 9812
;Weisse  Dame 	    = 9813
;Weisser Turm 	    = 9814
;Weisser Läufer     =	9815
;Weisser Springer   =	9816
;Weisser Bauer 	    = 9817
;Schwarzer König 	  = 9818
;Schwarze Dame 	    = 9819
;Schwarzer Turm 	  = 9820
;Schwarzer Läufer	  = 9821
;Schwarzer Springer	= 9822
;Schwarzer Bauer 	  = 9823

Procedure Brettmal(Pixel.f, Width.i, Height.i, StartPosX.i, StartPosY.i)
  FontHigh = Int(Pixel / (GetDeviceCaps_(GetDC_(WindowID(0)), #LOGPIXELSY) / 96.0)) ;Font anpassen
  LoadFont(0, "Arial Unicode MS", FontHigh)
  ;LoadFont(0, "Arial Unicode MS Bold", FontHigh)     ;Geschmacks-Sache
  Font0 = FontID(0)

  PosX = StartPosX
  PosY = StartPosY
  Feldfarbe = $ffffff                  ;Weiss
  Restore Grundstellung
  Restore Figuren
  For i = 0 To 63                      ;64 Felder
    Feld = PeekB(?Grundstellung + i) & $FF
    Select Feld    
      Case $11                         ;weisser Bauer usw.
        Figur = PeekW(?Figuren)
      Case $12
        Figur = PeekW(?Figuren + 2)
      Case $13
        Figur = PeekW(?Figuren + 4)
      Case $14
        Figur = PeekW(?Figuren + 6)
      Case $15
        Figur = PeekW(?Figuren + 8)
      Case $16
        Figur = PeekW(?Figuren + 10)
      Case $81
        Figur = PeekW(?Figuren + 12)
      Case $82
        Figur = PeekW(?Figuren + 14)
      Case $83
        Figur = PeekW(?Figuren + 16)
      Case $84
        Figur = PeekW(?Figuren + 18)
      Case $85
        Figur = PeekW(?Figuren + 20)
      Case $86
        Figur = PeekW(?Figuren + 22)
      Default
        Figur = 32                     ;Leerfeld
    EndSelect

    If i > 0 And (i % 8 = 0)
      PosX = StartPosX
      PosY + Height
      Feldfarbe ! ($ffffff - $cc99)    ;Wechsel Weiss <> Grün
    EndIf

    TextGadget(i, PosX, PosY, Width, Height, Chr(Figur))
    SetGadgetFont(i, Font0)
    SetGadgetColor(i, #PB_Gadget_BackColor, Feldfarbe)
    PosX + Width
    Feldfarbe ! ($ffffff - $cc99)      ;Wechsel Weiss <> Grün
  Next
EndProcedure


OpenWindow(0, 0, 0, 360, 400, "Schach-Figuren Unicode", #PB_Window_ScreenCentered | #PB_Window_MinimizeGadget | #PB_Window_SizeGadget)
  Brettmal(24.0, 40, 45, 20, 20)


  While Event <> #PB_Event_CloseWindow      ;zum Test als Schleife
    Event = WaitWindowEvent()
    If Event = #PB_Event_SizeWindow
      Breite = WindowWidth(0)
      Hoehe = WindowHeight(0)
      If Breite >= 700 And Hoehe >= 700     ;Testwerte, willkürlich. Selber anpassen!
        Brettmal(40.0, 60, 65, 20, 20)
       ElseIf Breite >= 600 And Hoehe >= 600
        Brettmal(36.0, 55, 60, 20, 20)
       ElseIf Breite >= 500 And Hoehe >= 500
        Brettmal(32.0, 50, 55, 20, 20)
       ElseIf Breite >= 400 And Hoehe >= 450
        Brettmal(28.0, 45, 50, 20, 20)
       ElseIf Breite < 400 Or Hoehe < 450
        Brettmal(24.0, 40, 45, 20, 20)
      EndIf
    EndIf
  Wend
End

DataSection
Grundstellung:
  Data.b $84, $82, $83, $85, $86, $83, $82, $84
  Data.b $81, $81, $81, $81, $81, $81, $81, $81
  Data.b $00, $00, $00, $00, $00, $00, $00, $00
  Data.b $00, $00, $00, $00, $00, $00, $00, $00
  Data.b $00, $00, $00, $00, $00, $00, $00, $00
  Data.b $00, $00, $00, $00, $00, $00, $00, $00
  Data.b $11, $11, $11, $11, $11, $11, $11, $11
  Data.b $14, $12, $13, $15, $16, $13, $12, $14

Figuren:
  Data.w 9817, 9816, 9815, 9814, 9813, 9812      ;wB, wS, wL, wT, wD, wK
  Data.w 9823, 9822, 9821, 9820, 9819, 9818      ;sB, sS, sL, sT, sD, sK

EndDataSection
Einfach mal das Fenster vergrößern usw.
Übrigens, die großen Bauern mit Schlitz nennt man Läufer... :mrgreen:

Re: unknow chess (alpha) pb 5.50

Verfasst: 05.12.2016 01:36
von True29
@Helle gute Arbeit wenn du das alles alleien und selbst programmiert hast ;)
jedoch bringt mir das ja alles nichts da ich es selbst hinbekommen wollte danke trotzdem.
wie lange hast du für das ganze so gebraucht bis alles lief ?

Re: unknow chess (alpha) pb 5.50

Verfasst: 05.12.2016 01:57
von NicTheQuick
Das sieht so nach 30-60 Minuten Arbeit aus.