» »

C++ šahovske pozicije

C++ šahovske pozicije

Matko88 ::

Pozdravljeni!

Sem spet nazaj...
Kot ste že ugotovili sem z FERI-ja (Računalništvo in Informacijske tehnologije, FERI-mb) in sem spet v težavah!
Imam nalogo, za katero nevem kako naj se je lotim! Seveda jo moram napisati v C++ kar je večji problem saj na internetu ne najdem neke uporabne kode, ki bi jo lahko vključil. Evo nalogo:


Napišite strukturo, ki omogoča predstavitev šahovske pozicije. Vsaka šahovska pozicija vsebuje naslednje informacije:

* položaj figur (uporabite lahko na primer: char figure[8][8]),
* kdo je na potezi,
* možnosti rokade,
* polje za en passant,
* število polpotez od zadnje poteze jemanja ali poteze, kjer premikamo kmeta (ugotavljanje pravila 50 potez) in
* številka poteze.


Napišite naslednje funkcije

* void print(pozicija p); // Funkcija na zaslon izpiše podano pozicijo
* void fen2position(char fen[], position& p); // Funkcija nastavi pozicijo, glede na podani niz, ki je v obliki fen zapisa
* void position2fen(position p, char fen[]); // Funkcija podano pozicijo preoblikuje v fen obliko in shrani v podani niz.

Opis oblike fen zapisa, najdete tukaj.

V glavnem programu prikažite delovanje funkcij.


Nasvet:

cat test.epd

8/8/8/1r1B3R/3K1k2/8/8/8 b - - 0 175

Če fen zapišete v datoteke test.epd, lahko pozicijo prikažete:

xboard -lpf test.epd





Primer izpisa pozicije za zgornji fen:
#_#_#_#_
_#_#_#_#
#_#_#_#_
_r_B_#_R
#_#K#k#_
_#_#_#_#
#_#_#_#_
_#_#_#_#

Na potezi: Črni
Možnost rokade: - -
En passant: -
Poteze: 175
Polpoteze: 0


Do sedaj mi je še bilo razumljivo vendar ta šahovski "programček" pa mi res dela težave, zato bi bil hvaležen, če bi mi kdorkoli pomagal z kakršnimikoli nasveti.

Thomas ::

> * polje za en passant,

Tole je že total brezveze. Al pa uvedi še "polje za promocijo dame"!

Ve se, kje kmet jemlje en passnt, ve se, kje postane kmet kraljica, ve se, kje kmet nikoli biti ne more (na obeh skrajnih liniojah). To z zapisom pozicije nima nobene zveze. Najprej mau popucaj samo nalogo, preden jo rešuješ. Al pa un, ki jo je zadal.
Man muss immer generalisieren - Carl Jacobi

Matko88 ::

ja saj v tem je največji problem! če bi jaz lahko kako navodilo "pozabo" al pa bi ga priredil po svoje bi bilo dost lažje, tak pa se mormo držat navodil! kaj mi lahko kak drugače še pomagaš prosim kr nevem niti kak bi naj to potem zgledlo(v kodi)!

darkolord ::

> Ve se, kje kmet jemlje en passant

Samo na podlagi ene pozicije se tega NE ve. Lahko je bil kmet premaknjen dvakrat po eno polje ali enkrat po dve

Thomas ::

To je že dodatna informacija. To ni informacija o poziciji, pač pa o tem, katere pozicije smejo izhajati iz nje.

Isto je z informacijo o možnosti rošade. To je info o naslednjih možnih pozicijah.

Isto o tem "pravilu 50 potez".

Samo, po tej logiki bi rabil še to, če ni že remi zaradi dosedanjega ponavljanja potez.

Drži?
Man muss immer generalisieren - Carl Jacobi

nastyboy ::

Včasih je boljše pri napredovanju kmeta namesto kraljice vzeti skakača.

LP

Keki ::

Pri tej nalogi ni potrebno naredit nič drugega kot prebrat string s cin.getline kot naprimer ta: 8/8/8/1r1B3R/3K1k2/8/8/8 b - - 0 175

Pri tem moreš vedet kaj pomeni kateri del stringa(wikipedija). Recimo 175 pomeni da je to 175ta poteza, b pomeni da je na vrsti beli, 8/ pomeni da je vrstica prazna... 0 je število polpotez itd itd...

in ga pretvorit v pozicijo(hint: naloga izriši šahovnico) pri tem ne rabiš nič druga ko da se preko stringa sprehodiš z zanko in gledaš kaj je kje in pol to pomečeš na šahovnico(polje 8x8)
V drugi funkciji pa pač prikažeš kak bi ti ko že maš izrisano pozicijo le-to pretvoro nazaj v ta string(obratna operacija). To je to gl&hf
http://www.alfakan.si/
http://mihajerot.si/

Zgodovina sprememb…

  • spremenilo: Keki ()

Thomas ::

Ja. Ampak če prfox ne zna zadati naloge, si odgovora niti ne zasluži.

Še več. Če mu daješ odgovore na nepravilno zastavljeno nalogo, oba izpadeta bedaka.
Man muss immer generalisieren - Carl Jacobi


Vredno ogleda ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

Šahovski problem - mat v dveh potezah (strani: 1 2 3 4 )

Oddelek: Znanost in tehnologija
19119498 (7941) msjr
»

Igra šah

Oddelek: Programiranje
283614 (2785) mallard
»

Thomasov problem (strani: 1 2 3 )

Oddelek: Znanost in tehnologija
1319500 (5317) Pixy222
»

[C++]Tezava s strukturo

Oddelek: Programiranje
9920 (920) Keki
»

Kasparov vs. Fritz 8 (strani: 1 2 3 4 5 6 )

Oddelek: Znanost in tehnologija
27317396 (14310) Thomas

Več podobnih tem