Gra Puzzle

dział ogólny

Gra Puzzle

Nowy postprzez gregory » środa, 14 lipca 2010, 17:56

Witam
Postanowiłem sobie dla treningu napisać grę puzzle, właściwie to bardziej taka układanka. Póki co wygląda to tak -> http://img46.imageshack.us/i/vvvt.png/
Jak widać na załączonym screenie, gra będzie polegać na złożeniu obrazka z części. W tym oknie jest komponent typu Panel, a na nim cztery komponenty Image, przy czym każdy we właściwości Picture zawiera jedną z części obrazka. Niestety nie mam pomysłu jakbym mógł przesuwać lub przeciągać w pionie bądź poziomie poszczególne kawałki obrazka by je zamieniać miejscami, aż do poprawnego ułożenia ilustracji. W dodatku przydała by się wskazówka jak sprawdzić czy obrazek jest ułożony poprawnie. Póki co mam na myśli to aby sprawdzać położenie Left i Top komponentów Image. Proszę o pomoc.
Avatar użytkownika
gregory
Bladawiec
Bladawiec
 
Posty: 26
Dołączył(a): środa, 17 lutego 2010, 17:36
Podziękował : 8
Otrzymał podziękowań: 0
System operacyjny: Windows 7
Kompilator: C++ Builder
Gadu Gadu: 0
    Windows XPFirefox

Re: Gra Puzzle

Nowy postprzez Cyfrowy Baron » czwartek, 15 lipca 2010, 09:06

Twój problem polega na tym, że poza pomysłem nie masz nic, w czym można by Tobie pomóc. Nie wiem, czy znajdzie się ktoś, kto będzie chciał napisać za Ciebie ten program.

Na początek powinieneś od czegoś zacząć, czyli stworzyć jakiś kod, który coś robi i jeżeli natkniesz się na problem wtedy dopiero na forum i konkretne pytanie.

Tej gry nie da się napisać opierając się tylko na obiektach typu TImage, w zasadzie to wystarczy jeden Image, który posłuży za powierzchnię do rysowania. Ja zacząłbym od stworzenia klasy, która sterowałaby pojedynczym elementem - klockiem, wtedy w oparciu o taką klasę można by stworzyć wiele klocków, które zapamiętywałby swój układ i położenie. Poza tym sugerowałbym napisać to w DirectDraw. Przy czterech klockach standardowe GDI się sprawdzi, ale jeżeli będziesz chciał stworzyć puzzle zawierające kilkadziesiąt klocków to może być problem.
Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4716
Dołączył(a): niedziela, 13 lipca 2008, 15:17
Podziękował : 12
Otrzymał podziękowań: 442
System operacyjny: Windows 7 x64 SP1
Kompilator: Embarcadero RAD Studio XE2
C++ Builder XE2 Update 4
SKYPE: cyfbar
Gadu Gadu: 0
    Windows XPFirefox

Re: Gra Puzzle

Nowy postprzez gregory » sobota, 17 lipca 2010, 13:14

Dzięki za odpowiedź. Chodziło mi właśnie o to czy da się coś takiego napisać za pomocą Buildera i VCL czy trzeba użyć czegoś innego. W każdym razie nie chodziło mi by ktoś mi to napisał. Niestety nie znam w pełni WinApi, a tym bardziej DirectDraw. Nie wiem czy w przyszłości mi się to przyda więc póki co się tego nie uczyłem. Poczytałem trochę w Twoim serwisie o przeciąganiu elementów w dziale Porady->Grafika i udało mi się osiągnąć zamierzony cel. Jakby to komuś się przydało to wstawiam kod:
KOD cpp:     UKRYJ  
void __fastcall TForm2::ReplaceObject(TObject *Source, TImage *image, int X, int Y)                     //dodatkowa metoda zamieniająca miejscami dane elementy
{
    X = dynamic_cast<TImage *>(Source)->Left;
    Y = dynamic_cast<TImage *>(Source)->Top;
    dynamic_cast<TImage *>(Source)->Left = image->Left;
    dynamic_cast<TImage *>(Source)->Top = image->Top;
    image->Left = X;
    image->Top = Y;

}
void __fastcall TForm2::Image1DragOver(TObject *Sender, TObject *Source,
      int X, int Y, TDragState State, bool &Accept)
{
    Accept = Source->ClassNameIs("TImage");
}
//---------------------------------------------------------------------------

void __fastcall TForm2::Image1DragDrop(TObject *Sender, TObject *Source,
      int X, int Y)
{
    ReplaceObject(Source, dynamic_cast<TImage *>(Sender), 0, 0);

}

Mam jeszcze pytanie. Program ten zawiera 3 formy, klika przycisków, 4 obiekty typu TImage, takie tam etykiety itp. Po uruchomieniu program zajmuje aż 6 MB w pamięci. Czyt to normalne? Może da się go jakoś zoptymalizować.
Avatar użytkownika
gregory
Bladawiec
Bladawiec
 
Posty: 26
Dołączył(a): środa, 17 lutego 2010, 17:36
Podziękował : 8
Otrzymał podziękowań: 0
System operacyjny: Windows 7
Kompilator: C++ Builder
Gadu Gadu: 0
    Windows XPFirefox

Re: Gra Puzzle

Nowy postprzez polymorphism » sobota, 17 lipca 2010, 13:29

Chodziło mi właśnie o to czy da się coś takiego napisać za pomocą Buildera i VCL czy trzeba użyć czegoś innego.

Da się.

Niestety nie znam w pełni WinApi, a tym bardziej DirectDraw. Nie wiem czy w przyszłości mi się to przyda więc póki co się tego nie uczyłem.

A propos GDI i DirectDraw była dyskusja wydzielona z tego wątku -> link. Obie biblioteki warto znać chociaż trochę, ze szczególnym naciskiem na GDI.

Po uruchomieniu program zajmuje aż 6 MB w pamięci. Czyt to normalne?

Tak. 6MB to niedużo.

___
p.s. No no, są w końcu tagi dla C++ (i nie tylko). Very good ;)
C++ Reference - opis wszystkich klas STL-a i funkcji C.
Avatar użytkownika
polymorphism
Doświadczony Programista ● Moderator
Doświadczony Programista ● Moderator
 
Posty: 2156
Dołączył(a): piątek, 19 grudnia 2008, 13:04
Podziękował : 0
Otrzymał podziękowań: 200
System operacyjny: Windows 8.1
Windows 10
Linux Mint 21.1
Kompilator: Visual Studio
Visual Studio Code
MSYS2 (MinGW, clang)
g++
clang
Gadu Gadu: 0
    Windows XPFirefox

Re: Gra Puzzle

Nowy postprzez Cyfrowy Baron » sobota, 17 lipca 2010, 14:02

Wprowadziłeś mnie w błąd tym tytułem wątku, nie tworzysz gry puzzle, lecz układankę. Puzzle to zbiór losowo porozrzucanych elementów z których trzeba złożyć planszę, a Ty chcesz zrobić układankę, czyli planszę zawierającą wszystkie elementy, ale porozkładane losowo. Do tego zadania najlepiej byłoby wykorzystać obiekt typu TStringGrid, a jeszcze lepiej TDrawGrid gdyż te obiekty zawierają wiele komórek, więc stworzenie dużej układanki będzie proste.
Sądziłem również, że chcesz wizualizować przeciąganie czyli gracz chwyta klocek, a jego przeciąganie jest widoczne, czyli klocek podąża wraz z myszką, no ale to jest już nieco bardziej skomplikowane.
Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4716
Dołączył(a): niedziela, 13 lipca 2008, 15:17
Podziękował : 12
Otrzymał podziękowań: 442
System operacyjny: Windows 7 x64 SP1
Kompilator: Embarcadero RAD Studio XE2
C++ Builder XE2 Update 4
SKYPE: cyfbar
Gadu Gadu: 0
    Windows XPFirefox


  • Podobne tematy
    Odpowiedzi
    Wyświetlone
    Ostatni post

Powrót do Ogólne problemy z programowaniem

Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zalogowanych użytkowników i 6 gości