Hoi,

Het volgende wil ik gaan proberen: ik kies de locatie van een schaakstuk op het bord en de computer zegt en toont de mogelijke zetten die dat schaakstuk kan doen in die situatie.

Om dit voor elkaar te krijgen dacht ik dat het makkelijkst is dat ik de positie bepaal als (x,y) dus bijvoorbeeld (3,1) dus niet zoals bij een schaakbord dat de x-as gekenmerkt wordt door de letters a t/m h.


Probleem: Als ik een loper op (3,1) heb staan, hoe kan ik dan makkelijk de opdracht geven om te kijken naar welke positie hij kan. dus dat de pc berekent (3-1,1+1) en (3-2,1+2) enz.

Wie kan mij helpen? ?
- Wat ook nog een hele moeilijke is is wanneer iemand de koning zet, en je mag jezelf NIET schaak zetten, om te berekenen waar die koning dan wel heengezet mag worden.

Verder:
- Het script moet ook gaan zien wanneer het op een remise uit draait, bijvoorbeeld als de koning geen enkele zet meer kan doen, maar NIET schaak staat.
- Er moet rekening mee worden houden met de pionnen dat die alleen rechtuit mogen lopen, maar dan ook meteen weer diagonaal mogen slaan.
- Alleen paarden mogen over andere speelstukken heen springen. Voor de rest van de schaakstukken geld dat als er iets in de weg staat, dat ook die velden voor dat stuk niet bereikbaar zijn.

Dus, het is inderdaad moeilijk, en een beste hoeveelheid werk.
Eris schreef op 28.11.2006 22:15
[quote='Jan Koehoorn schreef op 28.11.2006 22:12']Het is ook wel moeilijk volgens mij. Ga maar na; een rokade mag alleen als:

1) de koning en de toren die gaat rokeren nog niet bewogen heeft
2) de koning niet schaak staat en niet schaak gestaan heeft
3) de toren waarnaar je wilt rokeren niet aangevallen staat
4) één van de velden tussen de koning en de toren waarnaar je wilt rokeren niet aangevallen staat

maak daar maar eens een functie voor ;-)
[/quote]
In eerste instantie is dit plan bedoelt om schaakproblemen op te lossen. Zowel tweezetten (wit mag een zet doen daarna zwart een tegenzet en de volgende zet van wit dan moet het mat zijn) als driezetten.
Ik weet dat het erg ingewikkeld en moeilijk gaat worden. Maar tevens is het een grote uitdaging voor me, zeker omdat ik nog een vrij amateur php'er ben. Kzie wel hoe ver het gaat lukken.

Verder heb ik geprobeerd de loper toe te voegen:
    <?php         case 'loper':
                for ($i = 0; $i < 8; $i++) {
                    array_push ($positions, $hor[$x - 1] . $ver[$y + 1]);
                }
                for ($j = 0; $j < 8; $j++) {
                    array_push ($positions, $hor[$x + 1] . $ver[$y + 1]);
                }
                for ($k = 0; $k < 8; $k++) {
                    array_push ($positions, $hor[$x - 1] . $ver[$y - 1]);
                }
				 for ($l = 0; $l < 8; $l++) {
                    array_push ($positions, $hor[$x + 1] . $ver[$y - 1]);
                }
				break;
?>
maar als resultaat krijg ik
Array
(
[0] => e6
[8] => g6
[16] => e4
[24] => g4
)

Wat heb ik verkeerd gedaan?
nogsteeds is het niet moeilijk.. gewoon per regel benaderen en samen voegen.. maar wel veel werk.. leuk probleem misschien ga ik der later ook nog wat mee doen.. ben nu eerst een multiplayer van freecell aan t maken :P en t lukt aardig..
ziet er ingewikkeld uit.. iig veel denkwerk voor de programmeur.(alle regels etc)

Leuk probleem. Ik ga er iig neit aan beginnen:P hou k helemaal geen vrijetijd meer over :)
De phphulper ZIM had weleens zoiets gemaakt geloof ik mischien zouw je hem even een PM kunnen sturen?

GR. mebus
Het leukst is om het juist zelf te maken. maar wat is er nu fout aan de volgende berekeningen voor de loper?

                for ($k = 0; $k < 8; $k++) {
                    array_push($positions, $hor[$x - $k] . $ver[$y - $k]);
                }
                                for ($l = 0; $l < 8; $l++) {
                    array_push ($positions, $hor[$x + $l] . $ver[$y - $l]);
                }
                for ($m = 0; $m < 8; $m++) {
                    array_push ($positions, $hor[$x - $m] . $ver[$y + $m]);
                }
                for ($n = 0; $n < 8; $n++) {
                    array_push ($positions, $hor[$x + $n] . $ver[$y + $n]);
                }

Reageren