[OOSchaak] MicroSE ChessIt (work in progress)

Door sanderev66 op maandag 03 november 2014 12:07 - Reacties (40)
Categorieën: ChessIt, MicroSE, Waargebeurd, Views: 4.208

Het is al weer een tijdje geleden dat ik voor het laatst over mijn in ontwikkeling zijnde schaakspel blogde. Eigenlijk is sinds 2012 tot een paar weken geleden de ontwikkeling helemaal stilgevallen.

Echter heb ik de ontwikkeling weer opgepakt. Ik heb besloten dat de Schaakklok in eerste instantie nog niet belangrijk is. Dus ben ik gaan kijken naar:
  1. Het bewegen van stukken
  2. Een simpele GUI
  3. "Speciale" zetten als rokade, en passant slaan en promotie.
Punt 1: Hierbij ben ik gaan kijken naar waar een stuk mogelijk naartoe kan gaan, dus bijvoorbeeld een paardensprong, diagonaal en/of over een rechte lijn. Dit levert per stuk een lijst met mogelijke zetten op. Hierbij controleer ik of je naar een positie kan verplaatsen, niet of het mag.


C#:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
public override IEnumerable<Move> GetPossibleMoves(Game game)
        {
            //Direction multiplier for movement of color specific pawns
            var multiplier = (Color == GameColor.White ? 1 : -1); 

            //Move one space
            var field1 = game.GetField(Field.X, Field.Y + 1 * multiplier);
            if(field1 != null && field1.Piece == null)
            {
                yield return new Move(this, field1);
            }

            //Move 2 spaces on default position
            if(DefaultPosition)
            {
                var field2 = game.GetField(Field.X, Field.Y + 2 * multiplier);
                if(field1.Piece == null && field2.Piece == null)
                {
                    yield return new Move(this, field2) { PawnDoubleStep = true };
                }
            }

            //Pawn takes piece 
            var fieldD1 = game.GetField(Field.X - 1, Field.Y + 1 * multiplier);
            if (fieldD1 != null && fieldD1.Piece != null && fieldD1.Piece.Color != Color)
                yield return new Move(this, fieldD1);

           var fieldD2 = game.GetField(Field.X + 1, Field.Y + 1 * multiplier);
            if (fieldD2 != null && fieldD2.Piece != null && fieldD2.Piece.Color != Color)
                yield return new Move(this, fieldD2);



Dit geeft alle mogelijke zetten van een Pion. (Muv en passant, maar daar later meer over.
Andere stukken hebben een soortgelijke functie waar de zetten in gedefinieerd worden.

Punt 2. Een simpele schaakgui bestaat uit een schaakbord, met daarop de stukken afgebeeld en de mogelijkheid om een stuk te verzetten.

http://tweakers.net/ext/f/kXNBRzzyGyAsFy7SuU8GC7cl/medium.png

Op Pion-promotie na kunnen alle zetten gedaan worden.

Punt 3. Schaken kent eigenlijk maar 3 soorten unieke zetten. Rokade, En Passant slaan en Pion promotie. Op de laatste na heb ik ze nu verwerkt in mijn schaakspel. Rokade zie je al in de screenshot hierboven en voor en passant slaan is er de volgende code (vervolg op code voorbeeld 1).


C#:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
//En Passant
            if(Field.Y == 5 && Color == GameColor.White || Field.Y == 3 && Color == GameColor.Black)
            {
                var fieldLeft = game.GetField(Field.X - 1, Field.Y);
                var fieldRight = game.GetField(Field.X + 1, Field.Y);

                if(fieldLeft != null && fieldLeft.Piece is Pawn && fieldLeft.Piece.Color != Color && ((Pawn)fieldLeft.Piece).EnPassant && fieldD1.Piece == null)
                {
                    yield return new Move(this, fieldD1, fieldLeft.Piece);
                }

                if(fieldRight != null && fieldRight.Piece is Pawn && fieldRight.Piece.Color != Color && ((Pawn)fieldRight.Piece).EnPassant && fieldD2.Piece == null)
                {
                    yield return new Move(this, fieldD2, fieldRight.Piece);
                }
            }



Hoe nu verder?

Als eerste wil ik het spel zo maken dat je een standaard potje kan schaken. Dan kom ik met een (gesloten) beta release. Wat is hiervoor nodig?
  1. Werking van Pion-promotie.
  2. Werking van de begrippen "Schaak", "Mat" en "Pat".
  3. Uitbreiding van de UI met weergave van de actieve speler (en misschien nog een paar andere uitbreidingen)
Vlak voor de release van de eerste beta ga ik jullie vertellen hoe je daarvoor in kan schrijven.

Have fun!

Volgende: [OOSchaak] MicroSE ChessIt Beta Inschrijvingen 11-'14 [OOSchaak] MicroSE ChessIt Beta Inschrijvingen
Volgende: [18+] Een ongelukkig gedicht 09-'14 [18+] Een ongelukkig gedicht

Reacties


Door Tweakers user Pathogen, maandag 03 november 2014 14:07

Wat grappig, ik kende de en passant regel helemaal niet!

Overigens zie ik héél veel if-jes, kun je daar niet effectief case-statements voor inzetten?

Door Tweakers user sanderev66, maandag 03 november 2014 14:16

Pathogen schreef op maandag 03 november 2014 @ 14:07:
Wat grappig, ik kende de en passant regel helemaal niet!
Het is al een heel oude regel :p Maar mensen kennen 'm inderdaad vrij weinig. Het is ook niet altijd een handige zet. Want je moet wel een heel stuk met je pion lopen én je pion is gelijk makkelijk te slaan :p
Overigens zie ik héél veel if-jes, kun je daar niet effectief case-statements voor inzetten?
Ik denk dat het hier vrij lastig wordt om het tot een select case-statement om te zetten.

Door Tweakers user Pathogen, maandag 03 november 2014 14:53

Zo puur op OO-gevoel lijkt het me overigens niet logisch als een Field een object is. Maar dat is nattevingerwerk hoor! Ik zit even mee te denken hoe ik het zou opzetten :P

Desalniettemin leuk programmeerproject :)

Door Tweakers user sanderev66, maandag 03 november 2014 15:06

Qua relatie wel.

Een Piece staat altijd op 1 Field, maar een Field heeft niet altijd 1 Piece.
Ook is er een zekerheid dat een Game 64 Fields heeft.

Daarbij heeft het alleen al voor de Pat-controle al bestaansrecht.

Pat = de uitkomst van alle mogelijke zetten is schaak voor je eigen koning (Mat), zonder dat je schaak staat (Pat).

Door Tweakers user Pathogen, maandag 03 november 2014 15:25

sanderev66 schreef op maandag 03 november 2014 @ 15:06:
Qua relatie wel.

Een Piece staat altijd op 1 Field, maar een Field heeft niet altijd 1 Piece.
Ook is er een zekerheid dat een Game 64 Fields heeft.

Daarbij heeft het alleen al voor de Pat-controle al bestaansrecht.

Pat = de uitkomst van alle mogelijke zetten is schaak voor je eigen koning (Mat), zonder dat je schaak staat (Pat).
Ik geef toe dat ie handig is, maar als ik puristisch mierenneuk zou ik hem weglaten. Alle posities zijn opgeslagen als eigenschappen van de stukken. De velden zijn dan een handige rekenhulp, maar in principe niet nodig.

Maar goed, dat is puristisch en compleet vanuit modellering gezien. Hulpklassen bewijzigen zich vaak genoeg :) Misschien moet ik deze uitdaging voor mezelf ook eens doen, kijken of ik de Field klasse ook handig ga vinden.

Door Tweakers user hyptonize, maandag 03 november 2014 15:43

Ik ben benieuwd waar die verhalen blijven.

Door Tweakers user sanderev66, maandag 03 november 2014 15:51

Die komen vanzelf :)

iig heb ik voor dit jaar 3 andere "projectjes". Mn schaakspel, mn CSV bewerkingstool en www.sanderevers.nl :)

[Reactie gewijzigd op maandag 03 november 2014 15:52]


Door Tweakers user Poepkonijn, maandag 03 november 2014 16:58

sanderev66 schreef op maandag 16 juni 2014 @ 00:10:
Ik ben begonnen aan mijn eerste "Verhalenhoek"-verhaal. Het wordt een heel ander soort verhaal dan wat ik tot nu toe geschreven heb, en zodra ik Hoofdstuk 1 af heb ga ik 'm posten.
Duurt lang dan. :)

Door Tweakers user sanderev66, maandag 03 november 2014 17:04

Ik heb laatst een bezem door mn verhalenkast :p gehaald en houd er 2 over. "De vuurproef" waar ik nu hoofdstuk 1 voor aan het nalezen ben, en mn boek :)

Door Tweakers user Coffeemonster, maandag 03 november 2014 17:09

Heb je er rekening mee gehouden dat je alleen een pion en passant kan slaan en (zit erin) dat en passant slaan alleen kan in de beurt direct na de beurt waarin de tegenpartij de pion twee velden naar voren heeft gezet? Of zit dat ingebakken in de .EnPassant-eigenschap?

@hieronder: zo'n vermoeden had ik al. :)

[Reactie gewijzigd op maandag 03 november 2014 17:13]


Door Tweakers user sanderev66, maandag 03 november 2014 17:11

Ja en nee.

Als een Pion een dubbele stap zet gaat de EnPassant property op true. De volgende zet worden alle EnPassant properties (die op true staan) eerst op false gezet. De controle zit dus niet in de property zelf. (Hoort daar mi. niet)

[Reactie gewijzigd op maandag 03 november 2014 17:14]


Door Tweakers user sanderev66, maandag 03 november 2014 22:18

Kleine update

Ik heb nu Pion-promotie werkend :) Ook heb ik redelijk wat bugs in het verplaatsen van verschillende stukken gefixed.

Door Tweakers user gmblom, maandag 03 november 2014 22:19

De null check op het doel veld van de EnPassant is overbodig. De EnPassant property kan alleen op true als de pion 2 zetten naar voren is gezet, daarmee kan het doelveld alleen maar leeg zijn (anders kon de pion nooit 2 stappen naar voren).

Door Tweakers user sanderev66, maandag 03 november 2014 22:20

Correct, thx :) Zal het gelijk aanpassen.

Door Tweakers user sanderev66, dinsdag 04 november 2014 07:29

Schaak werkt* nu.

*) Wordt gedetecteerd maar nog niet afgehandeld verder.

Door Tweakers user kipusoep, dinsdag 04 november 2014 14:26

Dan kom ik met een (gesloten) beta release.
Waarom zou je de beta release gesloten maken?! :?

Door Tweakers user sanderev66, dinsdag 04 november 2014 14:30

Zodat ik zeker weet dat ik serieuze testers heb.

Door Tweakers user Silent7, dinsdag 04 november 2014 14:37

sanderev66 schreef op maandag 03 november 2014 @ 14:16:
[...]

Het is al een heel oude regel :p Maar mensen kennen 'm inderdaad vrij weinig. Het is ook niet altijd een handige zet. Want je moet wel een heel stuk met je pion lopen én je pion is gelijk makkelijk te slaan :p
Nou een heel stuk is wat ovedreven, 1 extra voorwaarts na je dubbele zet als eerste,

Verhaal dat mij verteld is erachter, is dan ook dat die twee vakken voorwaarts bij je eerste beweging met die pion eigenlijk diefstal is van 1 stap, de tegenstander die er een pion goed voor heeft staan (dus ernaast) kan ervoor kiezen (alleen direct na je diefstal) je niet weg te laten komen met de diefstal en slaat in dat geval door de pion te verzetten naar het vakje waar hij zonder defstal had moeten staan.


Wil wel testen hoor

[Reactie gewijzigd op dinsdag 04 november 2014 14:39]


Door Tweakers user sanderev66, dinsdag 04 november 2014 14:57

In een opening meer dan 1 zet met één Pion is officieel gezien al te veel ;)

En betreft het testen ga ik een kleine screening doen van de aanmeldingen (ook een beetje afhankelijk van het aantal aanmeldingen). Maar zoals aangegeven, daar binnenkort meer over.

[Reactie gewijzigd op dinsdag 04 november 2014 15:00]


Door Tweakers user kipusoep, dinsdag 04 november 2014 15:57

sanderev66 schreef op dinsdag 04 november 2014 @ 14:57:
En betreft het testen ga ik een kleine screening doen van de aanmeldingen (ook een beetje afhankelijk van het aantal aanmeldingen). Maar zoals aangegeven, daar binnenkort meer over.
Je doet nu net alsof je software de bom is en er super veel testers zullen zijn, maar dat is niet het geval.
Maak je beta gewoon open, zet je source op Github en gebruik de issue tracker aldaar, krijg je de meeste response mee.

Door Tweakers user sanderev66, woensdag 05 november 2014 07:26

kipusoep schreef op dinsdag 04 november 2014 @ 15:57:
[...]

Je doet nu net alsof je software de bom is en er super veel testers zullen zijn, maar dat is niet het geval.
Leuk dat je weer woorden, die ik NOOIT gezegd heb, in mijn mond gaat leggen!

Toch wil ik bepalen wie de beta mag testen. Ik ga een selectie van 10/20 testers maken. Of er moet echt een grote hoeveelheid inschrijvingen zijn.
Maak je beta gewoon open,
Dat heb ik vaak genoeg geprobeerd en we kennen allebei de gevolgen daarvan.
zet je source op Github en gebruik de issue tracker aldaar,
Nee, dát ga ik dus nooit doen. Maar dat moet je nu wel weten.
krijg je de meeste response mee.
Ik wil de beste response hebben, niet de meeste. 80% van de bulk van "de meeste" response is dubbel, reeds bekend of soms zelfs al gefixed in development. Ik wil de 20% die overblijft.

[Reactie gewijzigd op woensdag 05 november 2014 07:30]


Door Tweakers user kipusoep, woensdag 05 november 2014 08:37

sanderev66 schreef op woensdag 05 november 2014 @ 07:26:
[...]

Leuk dat je weer woorden, die ik NOOIT gezegd heb, in mijn mond gaat leggen!

Toch wil ik bepalen wie de beta mag testen. Ik ga een selectie van 10/20 testers maken. Of er moet echt een grote hoeveelheid inschrijvingen zijn.


[...]

Dat heb ik vaak genoeg geprobeerd en we kennen allebei de gevolgen daarvan.


[...]

Nee, dát ga ik dus nooit doen. Maar dat moet je nu wel weten.


[...]

Ik wil de beste response hebben, niet de meeste. 80% van de bulk van "de meeste" response is dubbel, reeds bekend of soms zelfs al gefixed in development. Ik wil de 20% die overblijft.
Prima, blijf je lekker eigenwijs en koppig doen, je komt jezelf nog wel een keer tegen...

Door Tweakers user sanderev66, woensdag 05 november 2014 09:10

kipusoep schreef op woensdag 05 november 2014 @ 08:37:
[...]

Prima, blijf je lekker eigenwijs en koppig doen, je komt jezelf nog wel een keer tegen...
Dat zal een erg interessante ontmoeting zijn!

En als je nu nog niet wist dat ik eigenwijs en koppig ben, dan moet je eens oudere tweakblogs nalezen. Het is nou eenmaal hoe ik ben, en ik ben er trots op. Dat ik weet wat ik wil en hoe ik het wil.

[Reactie gewijzigd op woensdag 05 november 2014 09:11]


Door Tweakers user Bart2005, woensdag 05 november 2014 09:50

Interessant. Heb me hier "heel vroeger" ook mee bezig gehouden.

https://chessprogramming.wikispaces.com/Kallisto


Kan je je code voor de rokade ook posten? Die is m.i. vele malen lastiger dan b.v. en-passant.

Door Tweakers user sanderev66, woensdag 05 november 2014 09:59

In King.cs:


C#:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
if (DefaultPosition)
            {
                //Short castle
                //King moves 2 >
                //Rook moves 2 <
                var rook1 = game.GetField(8, y).Piece as Rook;
                var rook2 = game.GetField(1, y).Piece as Rook;


                if (rook1 != null && rook1.DefaultPosition)
                {
                    var rookCastleField = game.GetField(x + 1, y);
                    var kingCastleField = game.GetField(x + 2, y);

                    if (rookCastleField.Piece == null && kingCastleField.Piece == null)
                    {
                        yield return new CastleMove(this, rook1, kingCastleField, rookCastleField, false);
                    }
                }

                //Long castle
                //King moves 2 <
                //Rook moves 3 >
                if (rook2 != null && rook2.DefaultPosition)
                {
                    var rookCastleField = game.GetField(x - 1, y);
                    var kingCastleField = game.GetField(x - 2, y);
                    var noneCastleField = game.GetField(x - 3, y);

                    if (rookCastleField.Piece == null && kingCastleField.Piece == null && noneCastleField.Piece == null)
                    {
                        yield return new CastleMove(this, rook2, kingCastleField, rookCastleField, true);
                    }
                }
            }



Dit controleert NIET of een rokade mag, enkel of die kan. De controle ofdat hij toegestaan is zit in Game, GameRules.

[Reactie gewijzigd op woensdag 05 november 2014 09:59]


Door Tweakers user Bart2005, woensdag 05 november 2014 10:53

kingCastleField.Piece == null... Daar staat de koning, toch?

Door Tweakers user Bart2005, woensdag 05 november 2014 11:31

Silent7 schreef op dinsdag 04 november 2014 @ 14:37:
[...]


Nou een heel stuk is wat ovedreven, 1 extra voorwaarts na je dubbele zet als eerste,

Verhaal dat mij verteld is erachter, is dan ook dat die twee vakken voorwaarts bij je eerste beweging met die pion eigenlijk diefstal is van 1 stap, de tegenstander die er een pion goed voor heeft staan (dus ernaast) kan ervoor kiezen (alleen direct na je diefstal) je niet weg te laten komen met de diefstal en slaat in dat geval door de pion te verzetten naar het vakje waar hij zonder defstal had moeten staan.


Wil wel testen hoor
Er gaan ook verhalen dat de regel bedacht is als een mogelijkheid om dichtgeschoven stellingen te kunnen vermijden en zo het spel dynamischer te maken. Lijkt me heel plausibel, in de praktijk werkt het ook zo.

Door Tweakers user sanderev66, woensdag 05 november 2014 12:09

Bart2005 schreef op woensdag 05 november 2014 @ 10:53:
kingCastleField.Piece == null... Daar staat de koning, toch?
Nee, dat is het veld waar de koning naartoe gaat. Wat niet zou kunnen als er bv een loper staat :p

Door Tweakers user Bart2005, woensdag 05 november 2014 12:48

Aha, dan is x het veld van de koning? Kan je ook getfield (5 zelfs zonder y) doen, dus absoluut, net als je met de torens doet. Rokade kan toch alleen als de koning op e1 staat.
Is maar ene detail, maakt verder niet zo veel uit.

Door Tweakers user sanderev66, woensdag 05 november 2014 12:54

Bart2005 schreef op woensdag 05 november 2014 @ 12:48:
Aha, dan is x het veld van de koning? Kan je ook getfield (5 zelfs zonder y) doen, dus absoluut, net als je met de torens doet. Rokade kan toch alleen als de koning op e1 staat.
Is maar ene detail, maakt verder niet zo veel uit.
Dat kan. Y is natuurlijk wel nodig gezien het ook op e8 kan (zwart). En ik heb sowieso y nodig om het veld te kunnen selecteren.

Daarbij ben ik uitgegaan van de stappen die genomen worden. x is de koning die verplaats 2 stappen naar links of rechts. De toren komt 1 plaats rechts of links van de koning te staan.

En bij lange rokade "springt" de toren nog één veld 3 velden vanaf de koning.

Door Tweakers user Bart2005, woensdag 05 november 2014 13:50

Ik weet natuurlijk niet hoe het project verder in elkaar zit, maar heb je een "legale zettengenerator" overwogen? Dus een black-box die in een positie x een lijst van alle legale zetten teruglevert. Is ook handig als je hem nog eens zelf wilt laten "denken".
Bovendien kun je dan handig testen of al je spelregel-logica foutloos werkt omdat het aantal legale zetten van veel posities bekend is (zoek maar eens op PERFT als je dat nog niet kent).

Door Tweakers user sanderev66, woensdag 05 november 2014 14:13

Je loopt nu een héél stuk op de planning vooruit ;)

Ik ga eerst voor een simpel werkend schaakspelletje. (Heb ik nu)
Deze komt in een gesloten beta. (binnenkort meer info)
Dan ga ik bugjes fixen / refactoren.
Dan komt de eerste versie. (grotendeels volledige UI, etc) Als in een lokaal 2 spelerspel.

Dit zal waarschijnlijk half/eind december zijn.

Daarna heb ik 2 wegen:
1. Netwerk multiplayer.
2. AI, API en SDK.

Ik moet nog gaan kijken naar wat ik als eerste ga doen.

[Reactie gewijzigd op woensdag 05 november 2014 14:29]


Door Tweakers user Bart2005, woensdag 05 november 2014 14:43

Nou, ik dacht dat het ook voor nu handig kon zijn, je stopt alle spelregellogica in 1 object en voor het spelen zelf hoef je alleen te kijken of de zet in de lijst van legale zetten voorkomt.

Als model is dat handig omdat je het ook voor andere bordspelen kunt gebruiken, dan verandert alleen het ene object wat de legale zettenlijst aanlevert.

Als je geen legale zettenlijst hebt (die je ergens mee kunt vergelijken) kun je volgens mij nooit "bewijzen" (mocht dat noodzakelijk zijn) dat het foutloos werkt. Omdat je nu eenmaal niet alle illegale zetten kunt proberen/testen.
Met een zettenlijst ("de whitelist") is alles wat daar niet in voorkomt per definitie niet legaal.

Misschien zie je dit helemaal niet als een probleem... dan ik ook niet :) .

Door Tweakers user sanderev66, donderdag 06 november 2014 11:55

Game & GameRules voeren de volledige controle uit of een zet legitiem is. Er zijn gewoonweg té veel mogelijke opstellingen mogelijk om die állemaal te whitelisten. Er hoeft maar één legitieme zet te zijn die niet in de whitelist staat en je kan je spel niet spelen.

Wel kan ik inbouwen dat je van een verzameling zetten kan zien welke zetten er toegestaan zijn. Maar dit is ingewikkeld, want je moet tot 2 niveau's diep gaan. Gezien je een zet kan doen waardoor je schaak zal staan, of een zet kan doen terwijl je schaak staat (maar dit niet oplost).

Dit laatste heb ik op de planning voor de AI-tak van de applicatie.

[Reactie gewijzigd op donderdag 06 november 2014 11:56]


Door Tweakers user jurroen, donderdag 06 november 2014 12:10

Toch weer MicroSE op tweakblogs? Ik moet eerlijk zeggen, soms is het wat lastig volgen, de ene keer neem je afscheid en dan ben je er weer.

Waar ik persoonlijk wel benieuwd naar ben, is omdat je een eigen framework hebt, hoe het qua veiligheid zit. Zijn er programma's die van het framework gebruik maken, die onder admin rechten draaien? En is security iets waarmee je tijdens het ontwikkelen rekening houdt?

Addendum: wel goed dat je inmiddels alle 'overbodige' copyright en registered trademark tekens hebt afgeschaft!

[Reactie gewijzigd op donderdag 06 november 2014 12:13]


Door Tweakers user sanderev66, donderdag 06 november 2014 12:17

jurroen schreef op donderdag 06 november 2014 @ 12:10:
Toch weer MicroSE op tweakblogs? Ik moet eerlijk zeggen, soms is het wat lastig volgen, de ene keer neem je afscheid en dan ben je er weer.
Ik vond het leuk om een verhaaltje over ontwikkeling te schrijven. Releases lopen via microse.nl. Niet via dit blog.
Waar ik persoonlijk wel benieuwd naar ben, is omdat je een eigen framework hebt, hoe het qua veiligheid zit. Zijn er programma's die van het framework gebruik maken, die onder admin rechten draaien? En is security iets waarmee je tijdens het ontwikkelen rekening houdt?
Al* mijn applicaties draaien op user-niveau. Daarbij is mijn framework een subframework voor .NET welke standaard veilig is. Het framework zelf heeft verder geen handelingen die een security risico kunnen vormen.

*) Alleen Connect vereist admin toegang, omdat deze programma's moet kunnen installeren en installaties van programma's moet controleren. Maw. toegang tot mappen van andere programma's.

Door Tweakers user Bart2005, donderdag 06 november 2014 12:46

sanderev66 schreef op donderdag 06 november 2014 @ 11:55:
Game & GameRules voeren de volledige controle uit of een zet legitiem is. Er zijn gewoonweg té veel mogelijke opstellingen mogelijk om die állemaal te whitelisten. Er hoeft maar één legitieme zet te zijn die niet in de whitelist staat en je kan je spel niet spelen.

Wel kan ik inbouwen dat je van een verzameling zetten kan zien welke zetten er toegestaan zijn. Maar dit is ingewikkeld, want je moet tot 2 niveau's diep gaan. Gezien je een zet kan doen waardoor je schaak zal staan, of een zet kan doen terwijl je schaak staat (maar dit niet oplost).

Dit laatste heb ik op de planning voor de AI-tak van de applicatie.
Nee hoor, in de beginstelling zijn dat er 20 voor wit.
Het gaat zo: je scant het bord voor witte stukken (als wit aan zet is) en kom je er 1 tegen dan genereer je voor het soort stuk de (semi-legale) zetten. Dan doe je de test of je na die zet schaak staat of schaak blijft staan (dat doe je nu voor de rokade w.s. ook al) en als dit niet zo is kan de zet aan de lijst van legale zetten toegevoegd worden.
Op deze manier staan alle mogelijke (legale) zetten in de whitelist als je alle stukken gescand hebt.

Ook al handig om, als je b.v. rechts klikt op een stuk om de legale mogelijkheden te displayen.

Door Tweakers user Bart2005, donderdag 06 november 2014 12:48

Of moet ik het zo begrijpen dat je nu gewoon illegale zetten kunt doen en dat dat ook gewenst is?

Door Tweakers user sanderev66, donderdag 06 november 2014 14:18

Bart2005 schreef op donderdag 06 november 2014 @ 12:48:
Of moet ik het zo begrijpen dat je nu gewoon illegale zetten kunt doen en dat dat ook gewenst is?
Nee, je kan nu geen illegale zetten doen.

Door Tweakers user sanderev66, maandag 10 november 2014 23:27

Ben al bezig met een speciale website voor beta-registraties.

Je kan straks hier jezelf registreren http://chessit.microse.nl.

Reageren is niet meer mogelijk