Plansza do gry zbudowana z kafelek

0

witam

najchetniej stworzyl bym niewielka plansze do gry ktorej kazdy kafelek taki 1x1 bedzie skladal sie z jednej klatki z jakas grafika i tak powiedzmy 2klatek wzdloz i dwadziescia wszerz i taka plansza i kazdy kwadrat planszy to osobny kafelek, moze byc ten sam ale zebym na kazdej pozycji ukladal go osobno. Jest taka mozliwosc w cpp ? A jesli nie to w terminalu plansza jakas i zeby po wejsciu na jakies pole tej planszy na innych polach tej planszy zmienialy sie znaki.

0

Po wejsciu na kafelek ma się coś wydarzyć.

Musisz zdefiniować postać jako jakąś bryłę, która będzie graczem, sprawdzać kolizje z innymi elementami i wywoływać określone reakcje.

Skorzystaj z silnika unreal engine dla c++ lub unity3d.

Matematycznie nie dasz rady zaimplementować kolizji, musisz z gotowców zrobić.

0

Nie wiem obejrzyj jakieś tutoriale na youtube i skopiuj elementy których potrzebujesz.

I unity3d jest do gier 2d platformówek jak i 3d to tylko ustawienie kamery odpowiednie zależy od tego co to ma być za gra.

0
#include <stdio.h>
#include <allegro5/allegro.h>
 
const float FPS = 60;
const int SCREEN_W = 640;
const int SCREEN_H = 480;
const int BOUNCER_SIZE = 32;

int main(int argc, char **argv){
   ALLEGRO_DISPLAY *display = NULL;
   ALLEGRO_EVENT_QUEUE *event_queue = NULL;
   ALLEGRO_TIMER *timer = NULL;
   ALLEGRO_BITMAP *bouncer = NULL;
   float bouncer_x = SCREEN_W / 2.0 - BOUNCER_SIZE / 2.0;
   float bouncer_y = SCREEN_H / 2.0 - BOUNCER_SIZE / 2.0;
   float bouncer_dx = -4.0, bouncer_dy = 4.0;
   bool redraw = true;
 
   if(!al_init()) {
      fprintf(stderr, "failed to initialize allegro!\n");
      return -1;
   }
 
   timer = al_create_timer(1.0 / FPS);
   if(!timer) {
      fprintf(stderr, "failed to create timer!\n");
      return -1;
   }
 
   display = al_create_display(SCREEN_W, SCREEN_H);
   if(!display) {
      fprintf(stderr, "failed to create display!\n");
      al_destroy_timer(timer);
      return -1;
   }

   bouncer = al_create_bitmap(BOUNCER_SIZE, BOUNCER_SIZE);
   if(!bouncer) {
      fprintf(stderr, "failed to create bouncer bitmap!\n");
      al_destroy_display(display);
      al_destroy_timer(timer);
      return -1;
   }

   al_set_target_bitmap(bouncer);

   al_clear_to_color(al_map_rgb(255, 0, 255));

   al_set_target_bitmap(al_get_backbuffer(display));
 
   event_queue = al_create_event_queue();
   if(!event_queue) {
      fprintf(stderr, "failed to create event_queue!\n");
      al_destroy_bitmap(bouncer);
      al_destroy_display(display);
      al_destroy_timer(timer);
      return -1;
   }
 
   al_register_event_source(event_queue, al_get_display_event_source(display));
 
   al_register_event_source(event_queue, al_get_timer_event_source(timer));
 
   al_clear_to_color(al_map_rgb(0,0,0));
 
   al_flip_display();
 
   al_start_timer(timer);
 
   while(1)
   {
      ALLEGRO_EVENT ev;
      al_wait_for_event(event_queue, &ev);
 
      if(ev.type == ALLEGRO_EVENT_TIMER) {
         if(bouncer_x < 0 || bouncer_x > SCREEN_W - BOUNCER_SIZE) {
            bouncer_dx = -bouncer_dx;
         }

         if(bouncer_y < 0 || bouncer_y > SCREEN_H - BOUNCER_SIZE) {
            bouncer_dy = -bouncer_dy;
         }

         bouncer_x += bouncer_dx;
         bouncer_y += bouncer_dy;

         redraw = true;
      }
      else if(ev.type == ALLEGRO_EVENT_DISPLAY_CLOSE) {
         break;
      }
 
      if(redraw && al_is_event_queue_empty(event_queue)) {
         redraw = false;

         al_clear_to_color(al_map_rgb(0,0,0));

         al_draw_bitmap(bouncer, bouncer_x, bouncer_y, 0);

         al_flip_display();
      }
   }
 
   al_destroy_bitmap(bouncer);
   al_destroy_timer(timer);
   al_destroy_display(display);
   al_destroy_event_queue(event_queue);
 
   return 0;
}

taki kod z biblioteka allegro znalazlem, wyglada bardzo dobrze, bo tutaj bryla porusza sie w czasie bez przerwy, cos takiego potrzebne by mi bylo, taka petla ktora bez przerwy liczy czas i z kazda sekunda aktualizuje, pozniej ta sekunde na milisekunde bd juz mogl zamienic, i np zeby zamiast ta bryla stala to w miejscu zeby jej kolory sie zmienialy w czasie, ale to juz dalbym rade zrobic, tylko zeby miec ta petle czasu, ze czas w tym programie caly czas biegnie, bryla caly czas sie porusza jak widzicie... Tylko nie wiem ktory kawalek tego kodu to wykonuje...

0

Chcę zbudować dom, kupiłem worek cementu, trochę cegieł, ale coś te cegły do siebie nie chcą się kleić! Cement się rozsypuje na boki, a mur wystarczy popchnąć, żeby się zawalił... Co robię źle? :(

Gościu! Na skróty tego nie zrobisz. Przejdź jakiś dobry tutorial od dechy do dechy, to wszystko się pojaśni...

0
żytkownik napisał(a):

taki kod (...) znalazlem, wyglada bardzo dobrze,

Nie.

0

No ale przynajmniej ta bryla porusza sie w czasie rzeczywistym, o to mi chodzi.

0

Przy pomocy smlf napisalem cos innego:

#include <stdio.h>
#include <SFML/Window.hpp>
#include <SFML/Graphics.hpp>

int main()
{
    sf::RenderWindow window(sf::VideoMode(200, 200), "SFML works!");
    sf::CircleShape octagon(40, 4);
    octagon.setFillColor(sf::Color::Green);

    while (window.isOpen())
    {
        sf::Event event;
        while (window.pollEvent(event))
        {
            if (event.type == sf::Event::Closed)
                window.close();
        }
       if (sf::Keyboard::isKeyPressed(sf::Keyboard::Left))
       octagon.move(-1, 0);
       if (sf::Keyboard::isKeyPressed(sf::Keyboard::Right))
       octagon.move(1,0);
       if (sf::Keyboard::isKeyPressed(sf::Keyboard::Up))
       octagon.move(0,-1);
       if (sf::Keyboard::isKeyPressed(sf::Keyboard::Down))
       octagon.move(0,1);
      {
        window.clear();
        window.draw(octagon);
        window.display();
      }
    }
    return 0;
}

I teraz chcialbym zeby przy tym jak oktagon wejdzie na okreslona pozycje zdarzyl sie jakis event. Tylko niezbyt wiem jak to zrobic. Moglby ktos pomoc ?

0
żytkownik napisał(a):

I teraz chcialbym zeby przy tym jak oktagon wejdzie na okreslona pozycje zdarzyl sie jakis event.

Po wykonaniu przesunięcia obiektu napisz warunek, w którym sprawdź jego pozycję i jeśli pasuje do wymagań to wykonaj jakiś kod. Trudno tutaj o bardziej szczegółowy opis – to zbyt proste zadanie.

0

ale chce zeby na okreslonej pozycji planszy pojawila sie jakas figura, jak okreslic ta pozycje ?

0
#include <stdio.h>
#include <SFML/Window.hpp>
#include <SFML/Graphics.hpp>

int main()
{

	int x = 0;
    int y = 0;
    
    int setfunc();



    sf::RenderWindow window(sf::VideoMode(100, 100), "SFML works!");
    sf::CircleShape octagon(40, 40);
    octagon.setFillColor(sf::Color::Green);

    while (window.isOpen())
    {
        sf::Event event;
        while (window.pollEvent(event))
        {
            if (event.type == sf::Event::Closed)
                window.close();
        }
       if (sf::Keyboard::isKeyPressed(sf::Keyboard::Left))
	   {
	   octagon.move(-1, 0);
       x++;
	   }
	   if (sf::Keyboard::isKeyPressed(sf::Keyboard::Right))
	   {
	   octagon.move(1,0);
	   x--;
	   }
	   if (sf::Keyboard::isKeyPressed(sf::Keyboard::Up))
	   octagon.move(0,-1);
	   if (sf::Keyboard::isKeyPressed(sf::Keyboard::Down))
	   octagon.move(0,1);
      }
int setfunc()
	{
	octagon.setPosition(50,50);
	return 0;
	}
	    if(x==10)
		setfunc();

        window.clear();
        window.draw(octagon);
        window.display();
      
    return 0;
}

nie wiem co z tym kodem nie tak ze nie chce sie skompilowac, chcialem zeby po spelnieniu pewnego warunku pojawial sie obrazek ale skompilowac sie nie chce...

2

Serio, przerób jakiś kurs, bo zabierasz się za grę a nie ogarniasz podstaw.

0

czego nie ogarniam ? przerobilem 3 kursy i c i c++, teraz chodzi o ta biblioteke... zeby mi sie pojawialo cos i znikalo, jezyki znam ale mam problem z tymi bibliotekami, pisze 2 lata w c a wiec nie bede pisal wiecej kursow, po prostu chce ogarnac ta biblioteke...

1

W C++ nie ma możliwości zagnieżdżania funkcji (nie mówię o lambdach).

0

no to nie wiem co mam zrobic... niby prosty program a mi nie wychodzi ;/

0

Zapisz się na bootcamp zamiast jakieś kursy samemu robić.

0

ja swoje kursy juz zrobilem teraz chce programowac

0

To programuj i rzadziej szukaj bezpośredniej pomocy ;)

0

no ale pomoc by sie przydala, zadanie nie jest trudne.

0

Wersja mocno prymitywna

void ChangeColorIfCircleIsInSpecialArea(sf::CircleShape& circle)
{
   const float& x = circle.getPosition().x;
   const float& y = circle.getPosition().y;
   if (x > 10.f && x < 20.f && y > 10.f && y < 20.f) {
      circle.setFillColor( sf::Color::Red );
   }
   else {
      circle.setFillColor( sf::Color::Blue );
   }
}
0

nie chce zeby kolo zmienialo kolor tylko zeby w pewnym miejscu mapy pojawil sie ksztalt

0

No to zadeklaruj drugi kształt oraz wartość logiczną określającą jego widoczność (domyślnie na false). Maluj ten kształt tylko i wyłącznie wtedy ,gdy zmienna przechowuje true. Po znalezieniu się pierwszego kształtu w zadanej pozycji, ustaw ową zmienną na true – i tyle.

Jak Ty przerabiałeś te kursy, skoro nie potrafisz posługiwać się zmiennymi i instrukcjami warunkowymi?

0

wszystko wlasciwie zrobione, tylko jeszcze zeby ten ksztalt znikal i pojawial sie w okreslonym okresie czasu, np co sekunde sie pojawial, po sekundzie znikal i po sekundzie znow pojawial

0

tylko tez chce zeby po tym jak pierwszy ksztalt znajdzie sie na danej pozycji to druga figura bedzie caly czas rysowana i zniknie dopiero gdy ksztalt wejdzie na inna okreslona pozycje. Bo takto pokazuje mi tylko ten ksztalt jak pierwsze figura jest na tej pozycji a ja chce zeby pokazywalo ten ksztalt od czasu wejscia pierwsza figura na dane pole az do wejscia nia na inne.

0

Każda figura ma swój stan. Każda figura ma swoją maszynę stanów (enum, switch, case) i może jednocześnie być tylko w jednym z tych stanóe. Figura najechana zmienia swój stan na NAJECHANA. W tym stanie sprawdza czy kolizja wciąż zachodzi. Jeśli nie, to zmienia swój stan na ZNIKNIĘTA. Przejścia między stanami mogą wpływać na zmienne, więc jeśli przechodzimy w stan ZNIKNIĘTA, to należy ukryć jej sprite'a.

0

No okej rozumiem, troche zbyt chaotycznie do tego sie zabralem... Bo wiecie, do tej pory uczylem sie samego jezyka, c,c++ oraz assemblera. tu jestesmy w temacie c++, i do tej pory uzywalem tylko biblioteki standardowej, pisalem jakies tam kalkulatory rozne, gry udalo mi sie kolko i krzyzyk z zaimplementowana sztuczna inteligencja do gry, calkiem dobra implementacje ponga oraz rozwiazywalem sporo, bo kilkadziesiat zadan na spoju, ale wszystko na bibliotece standardowej, do ponga tylko uzyłem ncurses, no a teraz chcialem cos takiego napisac graficznego i nie wiedzialem nic, ani jakiej biblioteki uzyc czy cos, chyba to zadanie nie jest jeszcze na moj poziom edukacji i chyba cos innego powinienem obrac, nie wiem jak sie poslugiwac tymi bibliotekami do programow graficznych...

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