Skocz do zawartości
  • 👋 Witaj na MPCForum!

    Przeglądasz forum jako gość, co oznacza, że wiele świetnych funkcji jest jeszcze przed Tobą! 😎

    • Pełny dostęp do działów i ukrytych treści
    • Możliwość pisania i odpowiadania w tematach
    • System prywatnych wiadomości
    • Zbieranie reputacji i rozwijanie swojego profilu
    • Członkostwo w jednej z największych społeczności graczy

    👉 Dołączenie zajmie Ci mniej niż minutę – a zyskasz znacznie więcej!

    Zarejestruj się teraz

Postać


Rekomendowane odpowiedzi

Opublikowano

Cześć. Przygotowuję się do przejścia z konsoli do SFML'a. Podstawy znam, wszystko co jest potrzebne do wytwarzania gier, ale gdy w konsoli zrobiłem grę pojawił się mały błąd. Chodzi o to, że postać się nie porusza.

 

//----Biblioteki----//
#include <iostream>
#include <windows.h>
#include <conio.h>

using namespace std;
/////////////////////

//----Global----//
char Level1[10][10] = {"#########", // Mapa (level 1)
	               "#       #",
                       "#       #",
                       "#       #",
                       "#       #",
                       "#       #",
                       "#       #",
                       "#       #",
                       "#@      #",
                       "#########",};
struct Player{
int x, y;
} gracz;

//----Logic----//
static void logic()
{
	int p_dX = 0; // delta gracza x, y
	int p_dY = 0;

	if(GetAsyncKeyState(VK_UP)    || 'w') { p_dY = -1; }
	if(GetAsyncKeyState(VK_DOWN)  || 's') { p_dY =  1; }
	if(GetAsyncKeyState(VK_LEFT)  || 'a') { p_dX = -1; }
	if(GetAsyncKeyState(VK_RIGHT) || 'd') { p_dX =  1; }

	int p_nX = gracz.x + p_dX; // nowa pozycja gracza
	int p_nY = gracz.y + p_dY;

	gracz.x = p_nX;
	gracz.y = p_nY;
}
/////////////////

//----Mapa----//
class map{
public:
	
	map() {
	for(int x = 0; x < 10; x++)
	{
		for(int y = 0; y < 10; y++)
		{
			switch(Level1[x][y])
			{
			case ' ': Level1[x][y] = 0; break;
			case '#': Level1[x][y] = 1; break;
			case '@': Level1[x][y] = 2; 
				      gracz.x = x;
					  gracz.y = y;      break;
			}
		
		}
	
	}
	}

	void Draw()
	{
		for(int x = 0; x < 10; x++)
		{
			for(int y = 0; y < 10; y++)
			{
			 switch(Level1[x][y])
			 {
			 case 0: cout << " "; break;
			 case 1: cout << "#"; break;
			 case 2: cout << "@"; break;
			 }
			}
			cout << endl;
		}
     
	}
};
///////////////
int main()
{
	
	map Level1;

	for(; // Pętla gry
	{
	 system("cls");
		Level1.Draw();
		logic();
	}
return 0;
}

 

 

Opublikowano
if(GetAsyncKeyState(VK_UP) || 'w') { p_dY = -1; }
if(GetAsyncKeyState(VK_DOWN) || 's') { p_dY = 1; }    
if(GetAsyncKeyState(VK_LEFT) || 'a') { p_dX = -1; }
if(GetAsyncKeyState(VK_RIGHT) || 'd') { p_dX = 1; }

Tutaj zawsze będzie true w tych warunkach. Więc i tak niezbyt fajnie będzie się poruszał.

 

Główny problem tkwi w tym, że nie uaktualniasz nigdzie mapy. Tzn zmieniasz tylko wartości oznaczające położenie gracza, ale nie nanosisz go na mape.

 

Po co taka zmiana jak poniżej?

switch(Level1[x][y])
{
case ' ': Level1[x][y] = 0; break;
case '#': Level1[x][y] = 1; break;
case '@': Level1[x][y] = 2;
gracz.x = x;
gracz.y = y; break;
}

to jest bez sensu

btw. Nazywaj tematy bardziej trafnie. Jakby potwór się nie ruszał to nazwał byś temat "Potwór"? Już lepiej stawiaj trzy kropki.

Zarchiwizowany

Ten temat przebywa obecnie w archiwum. Dodawanie nowych odpowiedzi zostało zablokowane.

×
×
  • Dodaj nową pozycję...