kisiel96 Opublikowano 31 Maja 2011 Zgłoś Opublikowano 31 Maja 2011 Witam ;] Jako, że mój kolega napisał prostą grę w C++, a ja jestem ambitny to nie chciałem być gorszy :P W związku z tym, że ostatnio w szkole na kole informatycznym mieliśmy zalążek Pascala, postanowiłem w tym języku napisać swoją grę. Aby się poduczyć skorzystałem z tego: http://turbopascal.skryptoteka.pl/ Nooo i to tyle wstępu. Teraz moje wypociny (kod jest trochę... Nieprzemyślany delikatnie mówiąc - tzn. zacząłem pisać grę zanim przeczytałem powyższy kurs i tego... No i zrobiłem parę błędów, które naprawie w kolejnych wersjach gry (między innymi chodzi mi o budowę kodu: oprę go o procedury). Jednak teraz potrzebuję kogoś kto powie mi dlaczego nie wyświetla ten kod zawartości pól (tzn. znaków X, O i nr pola). Aaa... I tego... Wieeem... Gra dla dwóch osób nie jest zbyt ambitna, ale już mam zarys w głowie sztucznej inteligencji dla "komputera") :P : program tictactoe; uses crt; var pole1,pole2,pole3,pole4,pole5,pole6,pole7,pole8,pole9:string[3]; idgracza,gdziepostawic,ktopierwszy:shortint; i:integer; begin clrscr; (*Zmienne*) pole1:='1'; pole2:='2'; pole3:='3'; pole4:='4'; pole5:='5'; pole6:='6'; pole7:='7'; pole8:='8'; pole9:='9'; idgracza:=0; gdziepostawic:=0; (*Komunikaty*) writeln('Zagraj w Kolko i krzyzyk'); writeln('Mapa i numery pol:'); writeln('1|2|3'); writeln('-|-|-'); writeln('4|5|6'); writeln('-|-|-'); writeln('7|8|9'); (*Losowanie pierwszego ruchu*) randomize; ktopierwszy:=random(1); if ktopierwszy = 0 then begin (*Petla - wprowadzenie znaku*) for i:=1 to 9 do begin (*Sprawdzenie wygranej*) if ((pole1 = 'X') and (pole2 = 'X') and (pole3 = 'X')) or ((pole4 = 'X') and (pole5 = 'X') and (pole6 = 'X')) or ((pole7 = 'X') and (pole8 = 'X') and (pole9 = 'X')) or ((pole1 = 'X') and (pole4 = 'X') and (pole7 = 'X')) or ((pole2 = 'X') and (pole5 = 'X') and (pole8 = 'X')) or ((pole3 = 'X') and (pole6 = 'X') and (pole9 = 'X')) or ((pole1 = 'X') and (pole5 = 'X') and (pole9 = 'X')) or ((pole3 = 'X') and (pole5 = 'X') and (pole7 = 'X')) then begin write('Wygral gracz X'); readln; halt; end; if idgracza = 0 then begin (*Wprowadzenie znaku*) writeln('Podaj nr pola, gdzie chcesz postawic X'); read(gdziepostawic); if gdziepostawic = 1 then pole1:='X'; if gdziepostawic = 2 then pole2:='X'; if gdziepostawic = 3 then pole3:='X'; if gdziepostawic = 4 then pole4:='X'; if gdziepostawic = 5 then pole5:='X'; if gdziepostawic = 6 then pole6:='X'; if gdziepostawic = 7 then pole7:='X'; if gdziepostawic = 8 then pole8:='X'; if gdziepostawic = 9 then pole9:='X'; read(pole1,pole2,pole3,pole4,pole5,pole6,pole7,pole8,pole9); writeln(pole1,'|',pole2,'|',pole3); writeln('-|-|-'); writeln(pole4,'|',pole5,'|',pole6); writeln('-|-|-'); writeln(pole7,'|',pole8,'|',pole9); read(pole1,pole2,pole3,pole4,pole5,pole6,pole7,pole8,pole9); {readln;} idgracza:=1 end; if idgracza = 1 then begin (*Wprowadzenie znaku*) writeln('Podaj nr pola, gdzie chcesz postawic O'); read(gdziepostawic); if gdziepostawic = 1 then pole1:='O'; if gdziepostawic = 2 then pole2:='O'; if gdziepostawic = 3 then pole3:='O'; if gdziepostawic = 4 then pole4:='O'; if gdziepostawic = 5 then pole5:='O'; if gdziepostawic = 6 then pole6:='O'; if gdziepostawic = 7 then pole7:='O'; if gdziepostawic = 8 then pole8:='O'; if gdziepostawic = 9 then pole9:='O'; read(pole1,pole2,pole3,pole4,pole5,pole6,pole7,pole8,pole9); writeln(pole1,'|',pole2,'|',pole3); writeln('-|-|-'); writeln(pole4,'|',pole5,'|',pole6); writeln('-|-|-'); writeln(pole7,'|',pole8,'|',pole9); read(pole1,pole2,pole3,pole4,pole5,pole6,pole7,pole8,pole9); {readln;} idgracza:=0 end; end; end; if ktopierwszy = 1 then begin (*Pętla - wprowadzenie znaku*) for i:=1 to 9 do begin (*Sprawdzenie wygranej*) if ((pole1 = 'O') and (pole2 = 'O') and (pole3 = 'O')) or ((pole4 = 'O') and (pole5 = 'O') and (pole6 = 'O')) or ((pole7 = 'O') and (pole8 = 'O') and (pole9 = 'O')) or ((pole1 = 'O') and (pole4 = 'O') and (pole7 = 'O')) or ((pole2 = 'O') and (pole5 = 'O') and (pole8 = 'O')) or ((pole3 = 'O') and (pole6 = 'O') and (pole9 = 'O')) or ((pole1 = 'O') and (pole5 = 'O') and (pole9 = 'O')) or ((pole3 = 'O') and (pole5 = 'O') and (pole7 = 'O')) then begin write('Wygral gracz O'); readln; halt; end; if idgracza = 0 then begin (*Wprowadzenie znaku*) writeln('Podaj nr pola, gdzie chcesz postawic O'); read(gdziepostawic); if gdziepostawic = 1 then pole1:='O'; if gdziepostawic = 2 then pole2:='O'; if gdziepostawic = 3 then pole3:='O'; if gdziepostawic = 4 then pole4:='O'; if gdziepostawic = 5 then pole5:='O'; if gdziepostawic = 6 then pole6:='O'; if gdziepostawic = 7 then pole7:='O'; if gdziepostawic = 8 then pole8:='O'; if gdziepostawic = 9 then pole9:='O'; read(pole1,pole2,pole3,pole4,pole5,pole6,pole7,pole8,pole9); writeln(pole1,'|',pole2,'|',pole3); writeln('-|-|-'); writeln(pole4,'|',pole5,'|',pole6); writeln('-|-|-'); writeln(pole7,'|',pole8,'|',pole9); read(pole1,pole2,pole3,pole4,pole5,pole6,pole7,pole8,pole9); {readln;} idgracza:=1 end; if idgracza = 1 then begin (*Wprowadzenie znaku*) writeln('Podaj nr pola, gdzie chcesz postawic X'); read(gdziepostawic); if gdziepostawic = 1 then pole1:='X'; if gdziepostawic = 2 then pole2:='X'; if gdziepostawic = 3 then pole3:='X'; if gdziepostawic = 4 then pole4:='X'; if gdziepostawic = 5 then pole5:='X'; if gdziepostawic = 6 then pole6:='X'; if gdziepostawic = 7 then pole7:='X'; if gdziepostawic = 8 then pole8:='X'; if gdziepostawic = 9 then pole9:='X'; read(pole1,pole2,pole3,pole4,pole5,pole6,pole7,pole8,pole9); writeln(pole1,'|',pole2,'|',pole3); writeln('-|-|-'); writeln(pole4,'|',pole5,'|',pole6); writeln('-|-|-'); writeln(pole7,'|',pole8,'|',pole9); read(pole1,pole2,pole3,pole4,pole5,pole6,pole7,pole8,pole9); {readln;} idgracza:=0 end; end; end; end. I tego... Na razie jest to wersja, która będzie działać w wierszu polecenia :P Noo i teraz proszę o pomoc, gdyż moja gra nie działa :P A ja nie wiem dlaczego :P Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
DeathTomahawk Opublikowano 31 Maja 2011 Zgłoś Opublikowano 31 Maja 2011 (edytowane) Poczytaj o tablicach i zastanów się jak cudownie może to skrócić twój kod. Ogólnie polecam wywalenie całego kodu i napisanie od nowa ;) Pozdrawiam Edytowane 31 Maja 2011 przez DeathTomahawk Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
kisiel96 Opublikowano 31 Maja 2011 Zgłoś Opublikowano 31 Maja 2011 (edytowane) Wiem, wiem - napisałem - kod jest mało przemyślany i ogólnie do d... Ale chodzi mi o to, przynajmniej uruchomić to co już napisałem, a potem "przeportować" na wersję optymalniejszą. Ogólnie gra ma dwa błędy: nie wyświetla zawartości pół (zmienne pole1 do pole9) oraz nie sprawdza kto wygrał (pewnie jest to związane z poprzednim błędem) Edit: Po za tym tablice tylko skróciły by kod tylko w miejscu "gdziepostawic" - bo w sprawdzaniu wygranej nic mi to nie da a w rysowaniu planszy też wiele to nie zmieni. Natomiast kotwice i procedury zamierzam zastosować w kolejnej wersji. Na razie potrzebuję by ta gra po prostu działała... Edytowane 31 Maja 2011 przez kisiel96 Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
XxZmijAxX Opublikowano 7 Czerwca 2011 Zgłoś Opublikowano 7 Czerwca 2011 Ogólnie to ten kod działa. Skompilował mi się poprawnie. Jednak są błędy w dalszej części tuż po podaniu pierwszego pola. Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...