8-puzzle w c++

0

Mam do napisania projekt na zaliczenie.

Plansza gry podzielona jest na 9 pól (3x3). Zawiera cyfry od 1 do 8 oraz pole puste oznaczone jako 0. W jednym ruchu można zamienić pole puste z dowolnym sąsiadującym z nim. Kryterium wyboru ma być w przyszłości poziom drzewa+ilość klocków, które znajdują się nie na miejscu, ale jak na razie mój program zawiera tylko drugie kryterium. Niestety w pewnym momencie program "staje" i nie wczytuje nowej macierzy, zupełnie nie wiem dlaczego.

Proszę o wskazówki, jestem początkująca. Będę wdzięczna za każdą pomoc.

0

A masz wersję, która kompilowala by się bez błędów pod Visual Studio?

1> grafy.cpp
1>d:\work\vsnet\grafy\grafy\grafy.cpp(131): warning C4101: 'j' : unreferenced local variable
1>d:\work\vsnet\grafy\grafy\grafy.cpp(439): warning C4996: 'kbhit': The POSIX name for this item is deprecated. Instead, use the ISO C++ conformant name: _kbhit. See online help for details.
1> c:\program files (x86)\microsoft visual studio 10.0\vc\include\conio.h(130) : see declaration of 'kbhit'
1>d:\work\vsnet\grafy\grafy\grafy.cpp(173): warning C4101: 'archiwum' : unreferenced local variable
1>d:\work\vsnet\grafy\grafy\grafy.cpp(157): warning C4101: 'k' : unreferenced local variable
1>d:\work\vsnet\grafy\grafy\grafy.cpp(19): error C4716: 'przypisz' : must return a value
1>d:\work\vsnet\grafy\grafy\grafy.cpp(29): error C4716: 'przypisz2' : must return a value
1>d:\work\vsnet\grafy\grafy\grafy.cpp(73): error C4716: 'wyswietl' : must return a value
1>d:\work\vsnet\grafy\grafy\grafy.cpp(88): error C4716: 'wyswietlkolejke' : must return a value
1>d:\work\vsnet\grafy\grafy\grafy.cpp(107): error C4716: 'zapisz' : must return a value
1>d:\work\vsnet\grafy\grafy\grafy.cpp(147): error C4716: 'aktualizuj' : must return a value
1>d:\work\vsnet\grafy\grafy\grafy.cpp(170): error C2057: expected constant expression
1>d:\work\vsnet\grafy\grafy\grafy.cpp(170): error C2466: cannot allocate an array of constant size 0
1>d:\work\vsnet\grafy\grafy\grafy.cpp(170): error C2133: 'archiwum' : unknown size
1>d:\work\vsnet\grafy\grafy\grafy.cpp(171): error C2057: expected constant expression
1>d:\work\vsnet\grafy\grafy\grafy.cpp(171): error C2466: cannot allocate an array of constant size 0
1>d:\work\vsnet\grafy\grafy\grafy.cpp(171): error C2133: 'kolejka' : unknown size
1>d:\work\vsnet\grafy\grafy\grafy.cpp(176): warning C4700: uninitialized local variable 'i' used
1>d:\work\vsnet\grafy\grafy\grafy.cpp(177): warning C4700: uninitialized local variable 'j' used

0

O boże, wziąłbym się za naukę programowania. Nie przeanalizuje dlaczego ten kod nie działa, bo więcej czasu mi to zajmie niż napisanie go od nowa. Parę rzeczy do poprawienia przed możliwością analizy kodu:

  • Po pierwsze i najważniejsze nie powinien być to wiersz tablicy, tylko struktura. Uniemożliwiło mi to przeanalizowanie tego kodu pod względem poprawności, ponieważ nie będę ciągle zastanawiał się czym jest t[3]

  • Jeżeli nazwa identyfikatora składa się z więcej niż jednego wyrazu
    należy je wizualnie rozdzielić, naPrzykładTak, albo_tak.

  • W kodzie jest duża niekonsekwencja w stosowaniu wcięć i pozycji nawiasów klamrowych.

  • Funkcja przypisz: po co podajesz parametr e, wywalić z deklaracji.

  • Funkcja przypisz2: zmienne powinno się deklarować w jak najmniejszym zakresie, dodatkowo indeksy w pętli for jeżeli są jednoliterowe, to zwyczajowo używa się i oraz j (praktycznie jedyne miejsce gdzie można używać nazw zmiennych jednoliterowych).

  • Funkcja namiejscu jest niepotrzebnie skomplikowana, dałoby się tego uniknąć stosując strukturę jako wiersz tablicy, podobny problem jak w funkcji przypisz z przekazywaniem parametru x.

  • Czy nazwa namiejscu i namiejscukolejka dobrze pokazuje różnicę w funkcjonalności tych dwóch funkcji.

  • Da się wyrazić namiejscukolejka przez wywołanie funkcji na miejscu, spróbuj tak zrobić.

  • Co znaczą te magiczne liczby w funkcji zapisz?

  • Funkcja sprawdź: sizee - powinieneś używać albo samych polskich, albo samych angielskich nazw. Podstawową zasadą jest jednak poprawny zapis (choć są od tego wyjątki, np. słynny uniksowy creat)

  • Funkcja main jest zdecydowanie za duża, bez podzielenia na mniejsze elementy nie chce mi się jej analizować. Używane zmienne mają zbyt mało znaczące nazwy (co robi a,b,c,d,e,f,i,j,k,m,n,t?). Spróbuj zrobić ze switcha jakąś pętlę, programista nie powinien praktycznie nigdy kopiować i wklejać kodu w tym samym programie.

Jeżeli twój kod wygląda tak jak wygląda, to nikt Ci najprawdopodobniej nie pomoże w znalezieniu w nim błędu bez przepisania go w bardziej znośny sposób.

1 użytkowników online, w tym zalogowanych: 0, gości: 1