Mało czytelny jest Twój kod. Ale starasz się jakoś sensownie podzielić program, co jest na plus.
Rozważ, czy wyszukiwanie pozycji figury na podstawie przypisanego do niej znaku jest dobrym pomysłem (mówię tutaj o funkcji figura::pozycja()) - w zasadzie większość figur występuje w liczbie większej niż 1.
Naprawdę ciężko odnaleźć się w Twoim kodzie - analiza źródeł niestety nie pomaga. Po małej sesji debugowania: w funkcji figury1() masz taki zapis:
if(pionek1.wysokosc==1)
pionek1.ile=2;
W momencie wykonania tego fragmentu kodu, wartość pionek1.wysokosc wynosi 0, stąd pionek1.ile nie otrzymuje możliwości przesunięcia się o dwa pola.
Poza tym powinieneś po pierwszym ruchu usuwać możliwość tak dalekiej eskapady dla pionka. ;)