Tworzenie funkcji ItemCollected w C++

W poprzednim artykule widzieliśmy podstawowe pojęcia operatorów i warunkowe. W tym artykule zobaczymy te koncepcje w praktyce podczas implementowania funkcji ItemCollected () w klasie ATutoProjectGameMode C++.

Ta funkcja zostanie wywołana przez klasę TutoProjectCollectable, gdy gracz zbierze przedmiot w grze. W naszej grze przedmiot jest wizualnie reprezentowany przez posąg, ale w innym artykule zobaczymy, jak zmienić jego wygląd.

Funkcja ItemCollected() musi wykonywać następujące czynności:

  • Dodaje wartość do zmiennej Score , gdy gracz zbierze przedmiot, który zostanie obliczany za pomocą wyrażenia 10 x PlayerLevel.
  • Dodaje wartość 1 do zmiennej ItemCount, która przechowuje liczbę zebranych elementów.
  • Sprawdza, czy wartość zmiennej ItemCount jest wielokrotnością 5. Jeśli to prawda, wykonuje następujące czynności:
    • Dodaje wartość 15 do zmiennej Time.
    • Dodaje wartość 1 do zmiennej PlayerLevel, przy czym maksymalna wartość zmiennej PlayerLevel jest ograniczona do 5.

Za każde 5 zebranych przedmiotów gracz podnosi poziom i zyskuje 15 sekund czasu.

Deklaracja funkcji ItemCollected() jest wykonywana w pliku nagłówkowym TutoProjectGameMode.h poniżej deklaracji funkcji StartGame(), jak pokazano na poniższym fragmencie kodu. Funkcja ItemCollected() jest publiczna, ponieważ będzie wywoływana przez inną klasę C ++.

...

UCLASS(minimalapi)
class ATutoProjectGameMode : public AGameModeBase
{
	GENERATED_BODY()

public:
	ATutoProjectGameMode();

	void StartGame();

	void ItemCollected();

...

Używam wielokropka () aby wskazać, że wyświetlany kod źródłowy nie jest kompletny

Treść funkcji ItemCollected () należy umieścić w pliku TutoProjectGameMode.cpp poniżej funkcji BeginPlay():

...

void ATutoProjectGameMode::BeginPlay()
{
	Super::BeginPlay();

	StartGame();
}

void ATutoProjectGameMode::ItemCollected()
{
	Score += PlayerLevel * 10;
	ItemCount++;

	if (ItemCount % 5 == 0)
	{
		Time += 15;

		if (PlayerLevel < 5)
		{
			PlayerLevel++;
		}
	}
}

Przyjrzyjmy się każdej akcji wykonywanej przez funkcję ItemCollected() wraz z odpowiadającym jej kodem źródłowym.

  • Dodaje do wartości zmiennej Score punkty uzyskane, gdy gracz zbierze przedmiot, które są obliczane za pomocą wyrażenia 10 x PlayerLevel.
Score += PlayerLevel * 10;

Używam skrótu operatora +=, który jest operatorem arytmetycznym razem z operatorem przypisania. Operator += dodaje wynik wyrażenia po prawej stronie do bieżącej wartości zmiennej Score.

Jedną z zalet języka C ++ w stosunku do Blueprints jest pisanie wyrażeń. Złożone wyrażenia można zapisać w jednym wierszu kodu C ++, podczas gdy w Blueprints to samo wyrażenie będzie wymagało od nas napisania wielu węzłów Blueprints.

  • Dodaje wartość 1 do zmiennej ItemCount, która przechowuje liczbę zebranych elementów.
ItemCount++;

Używam operatora incremental ++, który dodaje 1 do bieżącej wartości zmiennej ItemCount.

  • Sprawdza, czy wartość zmiennej ItemCount jest wielokrotnością 5. Jeśli prawda, wykonuje poniższe czynności.
if (ItemCount % 5 == 0)

Blok kodu poniżej warunku if, który jest ujęty w nawiasy klamrowe {}, zostanie wykonany tylko wtedy, gdy wynik wyrażenia w nawiasach jest prawdziwy. W wyrażeniu używam operatora %, który zwraca pozostałą część dzielenia. Operator % jest znany jako Modulo. Gdy ItemCount ma wartość będącą wielokrotnością 5, to pozostała część dzielenia przez 5 wynosi 0. Operator % ma pierwszeństwo przed operatorem “==”, więc pozostała część dzielenia jest wykonywana przed porównaniem z 0.

  • Dodaje wartość 15 do zmiennej Time.
Time += 15;

Ta linia daje graczowi kolejne 15 sekund czasu gry.

  • Dodaje wartość 1 do zmiennej PlayerLevel, przy czym maksymalna wartość zmiennej PlayerLevel jest ograniczona do 5.
if (PlayerLevel < 5)
{
	PlayerLevel++;
}

Używam warunku if, aby zapobiec osiągnięciu wyższego poziomu w PlayerLevel niż 5.


Źródło:https://romeroblueprints.blogspot.com/2020/08/creating-itemcollected-function-in-c.html