2.6 Noslēguma projekts: Platformas spēle
Stundas uzdevums: Pievieno finišu un spēles tekstus. Izvēlies savu noformējumu un dod spēli izmēģināt klasesbiedram.
80 min plāns: Spēles prasības (~10 min) · finišs un teksti (~25 min) · savs dizains un stāsts (~20 min) · spēles pārbaude pārī (~20 min) · iesniegšana (~5 min).
Pirms sāc: atver Level1.tscn no 2.5: Player lec, savāc punktus un atslēgu. Turpini šo pašu līmeni. Šīs stundas pamatdarbs ir viens pabeigts līmenis ar tavu dizainu un stāstu.
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.
Kas jāredz gatavajā spēlē
Spēles logā ir vadības taustiņi, mērķis un punktu skaits. Varonis var pārvarēt trīs platformas, savākt piecus punktu priekšmetus un atslēgu.
Finišs ar atslēgu rāda uzvaru. Saskare ar bīstamo zonu vai kritiens aiz grīdas malas rāda zaudējumu. Ar R visu līmeni sāk no jauna: punkti ir 0 un priekšmeti atkal savās vietās.
Šodien Scene panelī pievienosi Finish (finišu), Hazard (bīstamo zonu) un HUD (spēles tekstus). Tos vadīs dotais Level.cs fails.
1. uzdevums -
Pievieno finišu, bīstamo zonu un tekstus
- Atver
Level1.tscn. Scene panelī atlasiLevel1, spied + un pievienoArea2D. Nosauc toFinish. Inspector sadaļā Transform → Position ievadi(850,590). - Atlasītajam
FinishpievienoCollisionShape2D: Shape → New RectangleShape2D, klikšķis uz formas, Size =(48,100). Atkal atlasi Finish un pievienoPolygon2Dar nosaukumuVisual: Data → Polygon punkti(-24,-50),(24,-50),(24,50),(-24,50). Pie Color izvēlies zaļu krāsu. - Atlasi
Level1un tāpat pievieno otruArea2Dar nosaukumuHazard. Tā Position =(440,625). Pievieno CollisionShape2D ar taisnstūra Size =(80,30)un sarkanu Visual ar punktiem(-40,-15),(40,-15),(40,15),(-40,15). - Pēc kārtas atlasi
FinishunHazard. Inspector sadaļā Collision ieslēdz tikai Layer 3 un Mask 2. Abiem pārbaudi ieslēgtu Monitoring. - Atlasi
Level1un ar + pievienoCanvasLayer, nosauc toHUD. Atlasi HUD un pievienoLabelar nosaukumuInstructions. Atkārto, lai zem HUD būtu arīStatusunMessage. Tie rādīs tekstu spēles logā. - Atlasi katru Label un Inspector sadaļā Layout → Transform ievadi zemāk tabulā doto Position un Size. Pie Autowrap Mode izvēlies Word Smart. Atver Theme Overrides → Font Sizes, ieslēdz Font Size un ieraksti
20. Laukā Text vari ierakstīt “Pārbaude”, lai tekstu uzreiz redzētu 2D skatā; palaižot spēli, kods to aizstās. - Ar labo peles pogu uz
Level1→ Attach Script. Izvēlies C# un ceļures://Scripts/Level.cs. Ievieto pilno kodu zemāk. Scene saraksta nosaukumiem precīzi jāsakrīt ar parādīto paraugu. - Saglabā un nospied Build, tad F5. Izmēģini finišu bez atslēgas un pēc tam ar atslēgu. Atsevišķos mēģinājumos pieskaries sarkanajai zonai un nokrīti aiz grīdas malas. Pēc katra iznākuma nospied R: jāatjaunojas gan varonim, gan priekšmetiem, gan punktiem.
| Label nosaukums | Position | Size |
|---|---|---|
| Instructions | (20,16) | (1240,48) |
| Status | (20,48) | (1240,48) |
| Message | (20,80) | (1240,48) |
Salīdzini ar Scene paneli: daļām ar atkāpi jāatrodas zem norādītā objekta. Ja kāda ir nepareizā vietā, pārvelc to uz vajadzīgo objektu.
Level1 (Node2D, Level.cs)
├── Player (no Player.tscn)
├── Ground, Platform1, Platform2, Platform3
├── Coin1, Coin2, Gem, Coin3, Coin4, Key (no Pickup.tscn)
├── Finish (Area2D + Visual + CollisionShape2D)
├── Hazard (Area2D + Visual + CollisionShape2D)
└── HUD (CanvasLayer)
├── Instructions (Label)
├── Status (Label)
└── Message (Label)
2.6 Level.cs — pilns fails salīdzināšanai
Lejupielādēt Level.cs. Atver esošo tāda paša nosaukuma failu un aizstāj tā saturu ar šo kodu.
using Godot;
public partial class Level : Node2D
{
[Export] public string GameTitle = "Bākas gaisma";
[Export] public string Mission = "Atrodi dzelteno atslēgu un sasniedz zaļo bāku. Izvairies no sarkanās bedres!";
[Export] public string WinText = "Bāka atkal spīd. Kuģi var atrast mājas!";
[Export] public string LoseText = "Ceļojums pārtrūka. Mēģini vēlreiz!";
[Export] public string LockedText = "Vispirms atrodi dzelteno atslēgu augšējā platformā.";
private Player player;
private Label status;
private Label message;
public bool GameEnded { get; private set; } = false;
public override void _Ready()
{
player = GetNode<Player>("Player");
status = GetNode<Label>("HUD/Status");
message = GetNode<Label>("HUD/Message");
GetNode<Label>("HUD/Instructions").Text =
$"{GameTitle} | A/D vai ←/→: kustība | Space: lēciens | R: sākt no jauna";
message.Text = Mission;
GetNode<Area2D>("Finish").BodyEntered += OnFinishEntered;
GetNode<Area2D>("Hazard").BodyEntered += OnHazardEntered;
UpdateHud();
}
public override void _Process(double delta)
{
if (Input.IsActionJustPressed("restart"))
{
GetTree().ReloadCurrentScene();
return;
}
if (!GameEnded && player.GlobalPosition.Y > 800)
EndGame(false);
UpdateHud();
}
private void UpdateHud()
{
string keyStatus = player.HasKey ? "ir" : "nav";
status.Text = $"Punkti: {player.Score} | Atslēga: {keyStatus}";
}
private void OnFinishEntered(Node2D body)
{
if (body != player || GameEnded) return;
if (player.HasKey)
EndGame(true);
else
message.Text = LockedText;
}
private void OnHazardEntered(Node2D body)
{
if (body == player) EndGame(false);
}
private void EndGame(bool won)
{
if (GameEnded) return;
GameEnded = true;
player.IsActive = false;
player.Velocity = Vector2.Zero;
message.Text = (won ? WinText : LoseText) + " | Nospied R, lai spēlētu vēlreiz.";
UpdateHud();
}
}
Gatavs, kad: spēlei ir sākums, uzvara, divi zaudējuma veidi un atkārtota spēle. Pēc uzvaras vai zaudējuma varonis nekustas un jaunus punktus iegūt nevar.
Atbalsts: pilns piemēra projekts
Ja esi iestrēdzis, izpako atsevišķā mapē, Godot .NET Project Manager izvēlies Import → project.godot, tad Build un F5. Piemēra .csproj ir sagatavots Godot 4.7.2 .NET un .NET 8. Ja skolā lieto citu Godot 4 .NET versiju, izveido tajā tukšu C# projektu un pārnes piemēra Scenes, Scripts un Input Map; saglabā savas versijas ģenerēto .csproj.
Salīdzini konkrēto nestrādājošo daļu ar savu projektu un izlabo to. Lejupielādētajā piemērā ir 2.5 pamatlēciens; savus ieviestos lēciena uzlabojumus saglabā. Piemēra gatavība neaizstāj tavas dizaina un stāsta izvēles. Piemēra palaišana un pārbaudes.
2. uzdevums -
Padari projektu par savu spēli
- Izvēlies nosaukumu un uzraksti trīs īsus teikumus: kas ir varonis, ko viņš vēlas un kāpēc. Piemēram: “Robots meklē enerģijas kodolu. Tam jāatjauno bāka. Bez gaismas kuģi nevar atrast mājas.” Izdomā savu stāstu.
- Scene panelī atlasi
Level1. Inspector laukā Game Title ieraksti spēles nosaukumu, Mission — mērķi, Win Text — uzvaras tekstu, Lose Text — zaudējuma tekstu, Locked Text — norādi, ja atslēgas vēl nav. Palaid ar F5 un pārbaudi tekstus. - Maini vismaz trīs spēles daļu izskatu. Piemēram, atver
Player.tscn, atlasiVisualun nomaini Color. Level1 cilnē tāpat vari mainīt platformu un finiša Visual krāsu vai Data → Polygon punktus. - Ja vēlies izmantot savu attēlu, projekta mapē izveido
Artun iekopē tajā PNG failu. Godot tas parādīsies FileSystem panelī. Attiecīgajam objektam ar + pievienoSprite2Dun no FileSystem ievelc PNG tā Inspector laukā Texture. Pielāgo Sprite2D Transform → Scale; veco Visual paslēp ar acs ikonu Scene panelī. Paša Player, Ground vai Pickup laukā Scale atstāj(1,1). Atlasi CollisionShape2D un pielāgo tā Shape izmēru attēlam. - Izvēlies, ko stāstā nozīmē punkti, atslēga un finišs. Ja atslēga tagad ir enerģijas kodols, failā
Level.csatrodi redzamo tekstuAtslēga:un nomaini to uzKodols:. Pielāgo arī Mission un Locked Text. NosaukumusHasKeyunPickupType.Keykodā atstāj. - Level1 cilnē atlasi vismaz vienu platformu vai priekšmetu un maini Transform → Position. Izspēlē visu ceļu vēlreiz. Pārbaudi, ka teksti ir salasāmi un finišu var atšķirt no bīstamās zonas. README.md īsi pamato trīs izskata izmaiņas; aizņemtiem attēliem norādi autoru un licenci.
Gatavs, kad: spēlē redzams tavs nosaukums, mērķis un trīs izskata izmaiņas. Esi pārvietojis vismaz vienu platformu vai priekšmetu un pārbaudījis, ka līmeni var iziet.
3. uzdevums -
Dod klasesbiedram izspēlēt un novērs atrastās kļūdas
- Dod klasesbiedram spēli bez mutiskiem norādījumiem. Viņam vadība un mērķis jāatrod spēles logā. Pieraksti vienu neskaidrību un vienu veiksmīgu dizaina izvēli.
- Veic visus zemāk norādītos testus. README.md pieraksti sagaidāmo un faktisko rezultātu, kā arī veikto labojumu, ja pārbaude neizdodas.
- Pēc dizaina izmaiņām pārbaudi sadursmju formas, atslēgas sasniedzamību, teksta salasāmību un finiša atpazīstamību. Salabo vismaz vienu atrasto problēmu vai īsteno testētāja ieteikumu.
- Saglabā visu projektu un pārbaudi to no atsevišķas kopijas bez
.godotmapes: Import, Build, F5. Tas atklāj trūkstošus attēlus vai nepareizus ceļus. - Ieraksti īsu demonstrāciju: mērķis un tavs dizains, priekšmeta savākšana, zaudējums un R, pēc tam atslēgas savākšana un uzvara. Saglabā Git un iesniedz krātuves saiti.
| Pārbaude | Sagaidāmais rezultāts |
|---|---|
| F5 no jauna | 0 punktu, nav atslēgas, visi priekšmeti atrodas līmenī, vadība un mērķis redzami. |
| Kustība un lēciens | A/D un bultiņas darbojas; varonis neiet cauri grīdai un nevar bezgalīgi lēkt gaisā. |
| Savākšana | Coin +1, Gem +5, Key maina atslēgas stāvokli; viens objekts pieskaita tikai vienreiz. |
| Finišs bez atslēgas | Uzvaras nav; spēlētājs saņem saprotamu norādi. |
| Finišs ar atslēgu | Parādās tava stāsta uzvaras teksts; kustība un savākšana apstājas. |
| Hazard un kritiens ārpus laukuma | Katrs atsevišķi rada zaudējumu ar redzamu atkārtotas spēles norādi. |
| R spēles laikā, pēc zaudējuma un pēc uzvaras | Sākuma pozīcija, 0 punktu, nav atslēgas, visi priekšmeti atjaunoti; atkārto vismaz divreiz. |
Gatavs, kad: cits cilvēks saprot un pabeidz spēli; visas pamatpārbaudes izpildās arī pēc pārstartēšanas.
Papildu uzdevums — uzlabo spēles tekstu izskatu
Scene panelī zem HUD atlasi Instructions, Status vai Message. Inspector sadaļā Theme Overrides → Colors ieslēdz Font Color un izvēlies krāsu. Sadaļā Font Sizes → Font Size pielāgo burtu izmēru.
Palaid spēli un pārbaudi garāko mērķa, uzvaras un zaudējuma tekstu. Ja rindas pārklājas, pielāgo Label laukus Layout → Transform → Position un Size.
Parādi savu spēli
Parādi spēles nosaukumu, varoni, mērķi un uzvaras tekstu. Paskaidro trīs savas izskata izvēles un vienu izmaiņu platformu vai priekšmetu novietojumā.
Pastāsti, ko klasesbiedrs saprata uzreiz, kur viņš apstājās un ko tu pēc pārbaudes uzlaboji.
Ko sagatavo
Stundas mērķis: klasesbiedrs bez tavas palīdzības saprot spēles mērķi, var uzvarēt un sākt no jauna.
GitHub krātuvē jābūt:
- Pilns projekts ar scēnām,
Player.cs,Pickup.cs,Level.csun izmantotajiem attēliem. - README.md: nosaukums, stāsta trīs teikumi, vadība, uzvaras/zaudējuma nosacījumi un palaišanas norādes ar Godot .NET versiju.
- Trīs pamatotas vizuālā dizaina izvēles, sava līmeņa izkārtojuma apraksts un izmantoto ārējo resursu avoti/licences.
- Aizpildītas pamatpārbaudes, klasesbiedra atsauksme, veiktais uzlabojums un demonstrācijas video vai saite uz to.
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īme | Ko pārbaudīt |
|---|---|
| Node not found | Scene panelī salīdzini nosaukumus un atkāpes ar paraugu. Pārbaudi arī lielos burtus vārdos HUD, Status, Message, Instructions, Player, Finish un Hazard. |
| Finišs vai bīstamā zona nereaģē | Scene panelī atlasi Finish vai Hazard: Inspector pārbaudi Collision → Mask 2 un ieslēgtu Monitoring. Zem tiem jābūt CollisionShape2D ar Shape. Pie Level1 jābūt Level.cs skriptam. |
| R neatjauno visu spēli | Project → Project Settings → Input Map pārbaudi restart → R. FileSystem ar labo pogu uz Level1.tscn → Set as Main Scene. Salīdzini Level.cs ar pilno failu. |
| Pēc uzvaras var turpināt vākt | Player kustībā un Pickup savākšanā jāpārbauda IsActive; salīdzini pilnos failus. |
| Pēc attēla maiņas sadursme ir nepareiza | Atlasi CollisionShape2D un pielāgo Shape izmēru un Transform → Position. Paša Player vai platformas Scale atstāj (1,1). |