ebSkola

2.3 Punkti un atslēga

Stundas uzdevums: Pievieno punktus un atslēgu. Rezultātus pārbaudi Godot Output panelī.

SR 2.4.14. Vadības struktūras SR 2.4.13. Mainīgie

80 min plāns: Ievads (~10 min) · nosacījumi (~20 min) · priekšmetu loģika (~25 min) · cikla pārbaude (~20 min) · saglabāšana (~5 min).

Pirms sāc: turpini 2.2 projekta Player.cs. Šodien priekšmetus pārbaudīsim ar kodu; nākamajā stundā tos savāksim spēlē. Kustības kods paliek tajā pašā failā.

Pēc izmaiņām: saglabā failus. Ja mainīji C# kodu, Godot augšējā labajā stūrī nospied Build (āmura ikona). Tad palaid spēli. Pirms nākamā uzdevuma izlabo pirmo parādīto kļūdu.

Rezultātu skaties Output panelī

Šodien rediģēsi Player.cs, bet rezultātu lasīsi Godot loga apakšā: atver Output. Priekšmetus spēles laukumā pievienosim nākamajā stundā.

Kodā if nozīmē “ja”, else — “citādi”. Ar switch izvēlamies, ko dod katrs priekšmets. Ar foreach pārbaudām priekšmetus pa vienam.

_Ready() darbojas vienu reizi spēles sākumā. Tur ievietosim īsas pārbaudes un pēc tam tās izdzēsīsim.

1. uzdevums -

Palaid spēli un izlasi trīs dažādas ziņas

  1. FileSystem → Scripts atver Player.cs. Pirms faila pēdējās } pievieno zemāk doto pagaidu _Ready() daļu.
  2. Atstāj health = 100. Saglabā, Godot nospied Build un F5. Apakšā atver Output: tur jābūt ziņai “Viss kārtībā”.
  3. Apturi ar F8. Maini health uz 20, saglabā, nospied Build un palaid vēlreiz. Atkārto ar 0. README.md katram skaitlim pieraksti parādīto ziņu.
  4. Pēc pārbaudes izdzēs visu tikko pievienoto _Ready() daļu. Kustības kodu saglabā.
public override void _Ready()
{
    int health = 100;
    if (health <= 0)
        GD.Print("Spēle beigusies");
    else if (health < 30)
        GD.Print("Uzmanību!");
    else
        GD.Print("Viss kārtībā");
}

Gatavs, kad: 100 dod “Viss kārtībā”, 20 — brīdinājumu un 0 — “Spēle beigusies”.

2. uzdevums -

Pievieno spēlētājam punktus un atslēgu

  1. Atver zemāk esošo pilno Player.cs un ar to aizstāj esošā faila saturu. Tajā ir saglabāta kustība un pievienota punktu skaitīšana.
  2. Atrodi Score — punktu skaitu — un HasKey — vai atslēga jau iegūta. true nozīmē “jā”, false — “nē”.
  3. Atrodi OnPickup. Zem katra case redzams rezultāts: Coin dod 1 punktu, Gem — 5, Key piešķir atslēgu. PickupType faila sākumā ir šo trīs priekšmetu nosaukumu saraksts.
  4. Saglabā, nospied Build un palaid ar F5. Pārbaudi, ka varonis vēl kustas. Punktu ziņas parādīsies nākamajā uzdevumā.
2.3 Player.cs — pilns fails salīdzināšanai

Lejupielādēt Player.cs. Atver esošo tāda paša nosaukuma failu un aizstāj tā saturu ar šo kodu.

using Godot;

public enum PickupType { Coin, Gem, Key }

public partial class Player : CharacterBody2D
{
    [Export] public float Speed = 300.0f;

    public int Score { get; private set; } = 0;
    public bool HasKey { get; private set; } = false;
    public bool IsActive { get; set; } = true;

    public override void _PhysicsProcess(double delta)
    {
        Vector2 direction = Vector2.Zero;
        if (Input.IsActionPressed("move_left")) direction.X -= 1;
        if (Input.IsActionPressed("move_right")) direction.X += 1;
        if (Input.IsActionPressed("move_up")) direction.Y -= 1;
        if (Input.IsActionPressed("move_down")) direction.Y += 1;

        Velocity = direction.Normalized() * Speed;
        MoveAndSlide();
    }

    public void OnPickup(PickupType type)
    {
        if (!IsActive) return;

        switch (type)
        {
            case PickupType.Coin:
                Score += 1;
                break;
            case PickupType.Gem:
                Score += 5;
                break;
            case PickupType.Key:
                HasKey = true;
                break;
        }

        GD.Print($"Punkti: {Score}; atslēga: {HasKey}");
    }
}

Gatavs, kad: Build neparāda kļūdas un varonis joprojām kustas.

3. uzdevums -

Pārbaudi punktus Output panelī

  1. Player.cs pirms pēdējās } uz laiku pievieno zemāk doto _Ready() daļu. Tā izmēģinās divas monētas un atslēgu.
  2. Saglabā, nospied Build un F5. Atver Output: pēdējā punktu ziņā jābūt 2 punktiem un atslēga: True.
  3. Apturi spēli. Rindā PickupType[] items pirms }; pievieno , PickupType.Gem. Saglabā, nospied Build un palaid atkal. Tagad jābūt 7 punktiem un atslēgai.
  4. Uzņem Output ekrānuzņēmumu. Izdzēs visu pagaidu _Ready() daļu. Saglabā, nospied Build un palaid atkal: pārbaudes ziņām vairs nav jāparādās. Nākamajā stundā punktus iegūsi, savācot priekšmetus spēlē.
public override void _Ready()
{
    PickupType[] items = { PickupType.Coin, PickupType.Coin, PickupType.Key };
    foreach (PickupType item in items)
        OnPickup(item);

    if (HasKey)
        GD.Print("Atslēga ir — finišu varēs atvērt.");
    else
        GD.Print("Vēl jāatrod atslēga.");
}

Gatavs, kad: Output esi redzējis 2 un 7 punktus, pēc tam izdzēsis pagaidu pārbaudi.

Papildu uzdevums — sasaisti priekšmetus ar stāstu

README.md apraksti, ko tavā pasaulē nozīmēs Coin, Gem un Key: piemēram, sēklas, reta puķe un meža vārtu atslēga. Nosaukumus Coin, Gem un Key kodā pagaidām saglabā; izskatu un spēlētājam redzamos nosaukumus var mainīt.

Ko sagatavo

Stundas mērķis: kods pareizi pieskaita punktus un atceras iegūto atslēgu.

GitHub krātuvē jābūt:

  1. Player.cs ar kustību un punktu skaitīšanu, bez pagaidu _Ready() pārbaudes.
  2. README.md: ziņas pie 100, 20 un 0; Output ekrānuzņēmums ar punktu pārbaudi.

Saglabā visu projektu: project.godot, .csproj, scēnas, skriptus un izmantotos attēlus. .gitignore ieraksti .godot/, bin/ un obj/ katru savā rindā.

Kā iesniedz: saglabā izmaiņas Git un nosūti tās uz GitHub tāpat kā 1. tēmā (commit un push). Skolotāja norādītajā vietā iesniedz GitHub krātuves saiti; README.md un pārbaudes pierādījumiem jābūt krātuvē.

Ja kaut kas nestrādā

PazīmeKo pārbaudīt
Player vai PickupType jau definētsNeveido Player2.cs ar otru Player klasi. Aizstāj vai papildini esošo failu.
Kustība pazudusiAtjauno _PhysicsProcess; OnPickup ir jauna metode, nevis aizvietojums kustībai.
Spēle sākas ar atslēguNoņem 3. uzdevuma _Ready eksperimentu.
OnPickup nav pieejamsMetodei jābūt public, lai Pickup skripts nākamajā stundā to varētu izsaukt.