ebSkola

6.6 Noslēguma projekts: Puzzle spēle

Stundas uzdevums: Izveidot un publicēt pilnvērtīgu puzzle spēli ar visu apgūto.

SR 2.4.1. Problēmu dekompozīcija SR 2.4.7. UI SR 2.4.6. Plāno SR 3.1.4. Licences SR 2.4.3. Prototipu izstrāde un testēšana SR 2.4.8. Koda dokumentēšana un noformēšana SR 2.4.11. Standartizētas bibliotēkas un API

80 min plāns: Ievads un kritēriju pārruna (~10 min) · 1. uzdevums (~20 min) - izvēlies puzli un uztaisi laukumu · 2. uzdevums (~25 min) - uzraksti uzvaras noteikumu un līmeņus · 3. uzdevums (~20 min) - pievieno izvēlni, skaņu un eksportē · Iesniegšana (~5 min).

Pirms sāc: šis ir visa kursa noslēguma projekts. Izvēlies VIENU puzles veidu un uztaisi to pilnībā - labāk viena pabeigta spēle nekā trīs iesāktas. Izmanto visu, ko esi apguvis.

Teorija: Spēles apraksts

Puzzle spēle: spēlētājs risina sēriju problēmu, kā Sokoban, Tetris vai krāsu match-3.

Izvēlies vienu no opcijām (vai izveido savu):

  1. Sokoban - bīdi kastes uz mērķa vietām.
  2. Match-3 - savieno 3+ vienādas krāsas.
  3. Tetris klons - krītošie bloki.
  4. Sliding puzzle - 4×4 attēla mozaīka.

Prasības:

  • Sākuma menu, settings, augstākie rezultāti.
  • Vismaz 10 līmeņi (Sokoban) vai endless mode (Match-3, Tetris).
  • Audio: mūzika + 5+ SFX.
  • Animācijas/Tween efekti.
  • Save sistēma (highscore + progress).
  • Eksportēta kā desktop build un publicēta lejupielādējamā itch.io lapā.

Kā šo izmantot projektā

Atceries: ar redzamu efektu editorā nepietiek. Paskaidro, kura C# klase glabā stāvokli, kura metode to maina un kā Godot node struktūra izmanto šo kodu.

Pārbaudi: UI signāli, audio darbības, debug izvade un publicēšanas sagatave ir sasaistīta ar C# spēles stāvokli.

public class PolishCheckpoint
{
    public string Lesson = "6.6 Noslēguma projekts: Puzzle spēle";
    public bool UsesCSharp = true;
    public bool ConnectsUiSignals = true;
    public bool RoutesAudioEvents = true;
    public bool VerifiesExportBuild = true;
}

Praktiskie uzdevumi

1. uzdevums -

Izvēlies puzli un uztaisi laukumu

Beigās tev būs spēles laukums, ko var apskatīt un ar ko darboties.

  1. Izvēlies vienu variantu: Sokoban, Match-3, Tetris klons vai 4x4 mozaīka.
  2. Izveido README.md failā īsu laukuma plānu: kā izskatīsies laukums un kas ir uzvara.
  3. Izveido režģi ar int[,] grid = new int[Width, Height];.
  4. Attēlo režģi uz ekrāna ar TileMap vai ColorRect mezgliem.
  5. Pievieno vadību, kas maina režģa saturu.
  6. Palaid un pārbaudi, ka ekrāns atbilst režģa saturam.
  7. Pārliecinies, ka nevar izdarīt neatļautu gājienu.

Gatavs, kad: ekrānā redzamais laukums vienmēr atbilst režģa datiem, un neatļauts gājiens netiek pieņemts.

2. uzdevums -

Uzraksti uzvaras noteikumu un līmeņus

Beigās spēli varēs pabeigt un pāriet uz nākamo līmeni.

  1. Uzraksti metodi private bool IsSolved(), kas pārbauda uzvaras nosacījumu.
  2. Izsauc to pēc katra gājiena.
  3. Parādi uzvaras paziņojumu, kad tas atgriež true.
  4. Izveido vismaz trīs līmeņus - vai nu failā, vai kodā.
  5. Ielādē nākamo līmeni pēc uzvaras.
  6. Pievieno gājienu skaitītāju un pogu Sākt no jauna.
  7. Izej visus trīs līmeņus pēc kārtas.

Gatavs, kad: visus trīs līmeņus var atrisināt, uzvara tiek atpazīta pareizi, un restarta poga strādā.

3. uzdevums -

Pievieno izvēlni, skaņu un eksportē

Beigās tava spēle būs pabeigts, izdodams produkts.

  1. Pievieno sākuma izvēlni no 6.1 stundas.
  2. Pievieno skaņas efektu gājienam un uzvarai no 6.3 stundas.
  3. Pievieno animāciju uzvaras brīdim no 6.2 stundas.
  4. Saglabā labāko rezultātu ar 5.3 stundas SaveManager.
  5. Eksportē spēli kā desktop build pēc 6.5 stundas soļiem.
  6. Publicē ZIP arhīvu itch.io lapā un pārbaudi lejupielādi citā datorā.
  7. Veic commit un push ar visu projektu.

Gatavs, kad: spēle sākas ar izvēlni, skan skaņas, labākais rezultāts saglabājas, un publiskā lejupielādes saite strādā.

Papildu uzdevums - Pievieno padoma pogu

Ja pamatdarbs ir gatavs, palīdzi spēlētājam, kurš iestrēdzis.

  1. Uzraksti metodi, kas atrod vienu derīgu nākamo gājienu.
  2. Pievieno pogu Padoms, kas to izceļ uz ekrāna.
  3. Ierobežo padomu skaitu vienā līmenī.
  4. Parādi, cik padomu vēl atlicis.
  5. Pārbaudi, ka pēc padomu beigām poga vairs nedarbojas.

Gatavs, kad: padoma poga izceļ derīgu gājienu un pēc noteikta reižu skaita pārstāj darboties.

Ko sagatavo

Stundas mērķis: Tev ir pabeigta un publicēta puzles spēle: strādājošs laukums, pareizi atpazīta uzvara, vismaz trīs atrisināmi līmeņi, sākuma izvēlne, skaņa, saglabāts labākais rezultāts un publiska lejupielādes saite.

GitHub krātuvē jābūt:

  1. README.md ievietota publiskā lejupielādes saite uz spēli, kas strādā skolotāja datorā.
  2. Viss pirmkods ar C# skriptiem, scēnām un projekta failiem.
  3. README.md ievietota video saite, kurā izej vismaz vienu līmeni no sākuma izvēlnes līdz uzvarai.
  4. Īss apraksts (5-8 teikumi): kuru puzli izvēlējies, kā darbojas uzvaras pārbaude, kas bija visgrūtāk un kā to atrisināji.

Kā iesniedz: Veic commit un push. Skolotāja norādītajā vietā ievieto tikai GitHub krātuves saiti; visiem prasītajiem failiem, README.md pierakstiem un pierādījumiem jābūt pašā krātuvē.

Biežākās kļūdas

  • Build arhīvā trūkst failu: ZIP liec visu eksportēto mapi, ne tikai palaižamo failu.
  • Save fails neielādējas pēc eksportēšanas: Pārbaudi, vai tiek lietots user://, nevis projekta mape.
  • Vadība nav skaidra: Pievieno spēles lapā īsu taustiņu aprakstu un pārbaudi ar klasesbiedru.

Godot ekrānuzņēmumi

Match-3 puzzle game spēles aina: 8×8 grid ar krāsainām figūrām, score 1240, time 1:30, current chain bonus.
Match-3 puzzle game spēles aina: 8×8 grid ar krāsainām figūrām, score 1240, time 1:30, current chain bonus.
itch.io projekta lapa ar puzzle spēles aprakstu, ekrānuzņēmumiem un lejupielādes pogu.
itch.io projekta lapa ar puzzle spēles aprakstu, ekrānuzņēmumiem un lejupielādes pogu.
GitHub repository Releases lapa ar v1.0.0 release, attached desktop binaries un changelog notes.
GitHub repository Releases lapa ar v1.0.0 release, attached desktop binaries un changelog notes.

Koda piemērs (paplašināts)

using Godot;
using System;
using System.Collections.Generic;

// Match-3 spēles core
public partial class Match3Board : Node2D
{
    private const int Width = 8;
    private const int Height = 8;
    private readonly int[,] grid = new int[Width, Height];
    private readonly Random rng = new();

    public void Initialize()
    {
        for (int x = 0; x < Width; x++)
            for (int y = 0; y < Height; y++)
                grid[x, y] = rng.Next(0, 5);  // 5 colors
    }

    public List<Vector2I> FindMatches()
    {
        List<Vector2I> matches = new();
        for (int x = 0; x < Width; x++)
        {
            for (int y = 0; y < Height - 2; y++)
            {
                if (grid[x, y] == grid[x, y + 1] && grid[x, y + 1] == grid[x, y + 2])
                {
                    matches.Add(new Vector2I(x, y));
                    matches.Add(new Vector2I(x, y + 1));
                    matches.Add(new Vector2I(x, y + 2));
                }
            }
        }
        // similarly for horizontal
        return matches;
    }

    public void ClearAndDrop(List<Vector2I> matches)
    {
        // mark cleared, gravity, refill
    }
}
Pilnvērtīga match-3 spēle ar score, time, audio, tween animations un publicētu lejupielādējamu desktop versiju.