6.6 Noslēguma projekts: Puzzle spēle
Stundas uzdevums: Izveidot un publicēt pilnvērtīgu puzzle spēli ar visu apgūto.
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):
- Sokoban - bīdi kastes uz mērķa vietām.
- Match-3 - savieno 3+ vienādas krāsas.
- Tetris klons - krītošie bloki.
- 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.
- Izvēlies vienu variantu: Sokoban, Match-3, Tetris klons vai 4x4 mozaīka.
- Izveido README.md failā īsu laukuma plānu: kā izskatīsies laukums un kas ir uzvara.
- Izveido režģi ar
int[,] grid = new int[Width, Height];. - Attēlo režģi uz ekrāna ar
TileMapvaiColorRectmezgliem. - Pievieno vadību, kas maina režģa saturu.
- Palaid un pārbaudi, ka ekrāns atbilst režģa saturam.
- 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.
- Uzraksti metodi
private bool IsSolved(), kas pārbauda uzvaras nosacījumu. - Izsauc to pēc katra gājiena.
- Parādi uzvaras paziņojumu, kad tas atgriež
true. - Izveido vismaz trīs līmeņus - vai nu failā, vai kodā.
- Ielādē nākamo līmeni pēc uzvaras.
- Pievieno gājienu skaitītāju un pogu Sākt no jauna.
- 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.
- Pievieno sākuma izvēlni no 6.1 stundas.
- Pievieno skaņas efektu gājienam un uzvarai no 6.3 stundas.
- Pievieno animāciju uzvaras brīdim no 6.2 stundas.
- Saglabā labāko rezultātu ar 5.3 stundas
SaveManager. - Eksportē spēli kā desktop build pēc 6.5 stundas soļiem.
- Publicē ZIP arhīvu itch.io lapā un pārbaudi lejupielādi citā datorā.
- 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.
- Uzraksti metodi, kas atrod vienu derīgu nākamo gājienu.
- Pievieno pogu Padoms, kas to izceļ uz ekrāna.
- Ierobežo padomu skaitu vienā līmenī.
- Parādi, cik padomu vēl atlicis.
- 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:
- README.md ievietota publiskā lejupielādes saite uz spēli, kas strādā skolotāja datorā.
- Viss pirmkods ar C# skriptiem, scēnām un projekta failiem.
- README.md ievietota video saite, kurā izej vismaz vienu līmeni no sākuma izvēlnes līdz uzvarai.
- Ī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
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
}
}