Skip to content
Snippets Groups Projects
Commit e08ca6f9 authored by Mäkinen Valtteri Väinö Viljami's avatar Mäkinen Valtteri Väinö Viljami
Browse files

Kappaleita luovat samankaltaiset aliohjelmat korvattu funktiolla, jonka kautta...

Kappaleita luovat samankaltaiset aliohjelmat korvattu funktiolla, jonka kautta uusia kappaleita on helppo lisätä.
parent d752c281
Branches main
No related tags found
No related merge requests found
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Diagnostics.CodeAnalysis;
using Jypeli; using Jypeli;
using Jypeli.Assets; using Jypeli.Assets;
using Jypeli.Controls; using Jypeli.Controls;
...@@ -8,7 +9,7 @@ using Jypeli.Widgets; ...@@ -8,7 +9,7 @@ using Jypeli.Widgets;
namespace JuustoSadePeli; namespace JuustoSadePeli;
/// @author Valtteri Mäkinen /// @author Valtteri Mäkinen
/// @version 23.11.2023 /// @version 5.12.2023
/// <summary> /// <summary>
/// JuustoSade pelissä ohjaat rottaa, joka yrittää syödä taivaalta putoavia juustokimpaleita. Taivaalta myös /// JuustoSade pelissä ohjaat rottaa, joka yrittää syödä taivaalta putoavia juustokimpaleita. Taivaalta myös
/// sataa homehtunutta juustoa ja myrkkyä, jotka pahentavat rotan nälkää. Pelissä pyrit selviämään mahdollisimman /// sataa homehtunutta juustoa ja myrkkyä, jotka pahentavat rotan nälkää. Pelissä pyrit selviämään mahdollisimman
...@@ -24,6 +25,7 @@ public class JuustoSadePeli : PhysicsGame ...@@ -24,6 +25,7 @@ public class JuustoSadePeli : PhysicsGame
private Timer homeJuustoLuoja; private Timer homeJuustoLuoja;
private Timer myrkkyLuoja; private Timer myrkkyLuoja;
private int[] huippupisteet = new int[5]; private int[] huippupisteet = new int[5];
private int juustoSyoty = 1;
public override void Begin() public override void Begin()
{ {
...@@ -40,12 +42,14 @@ public class JuustoSadePeli : PhysicsGame ...@@ -40,12 +42,14 @@ public class JuustoSadePeli : PhysicsGame
/// LuoKenttä tekee pelikentän perustan kuten reunat ja alkaa myös lisäämään säännöllisesti juustoa /// LuoKenttä tekee pelikentän perustan kuten reunat ja alkaa myös lisäämään säännöllisesti juustoa
/// homejuustoa ja myrkkyä putoamaan taivaalta. /// homejuustoa ja myrkkyä putoamaan taivaalta.
/// </summary> /// </summary>
public void LuoKentta() private void LuoKentta()
{ {
LuoRotta(); LuoRotta();
aikalaskuri = new Timer(); aikalaskuri = new Timer
aikalaskuri.Interval = 1; {
Interval = 1
};
aikalaskuri.Timeout += AikaKasvaa; aikalaskuri.Timeout += AikaKasvaa;
aikalaskuri.Start(); aikalaskuri.Start();
...@@ -64,18 +68,24 @@ public class JuustoSadePeli : PhysicsGame ...@@ -64,18 +68,24 @@ public class JuustoSadePeli : PhysicsGame
alaReuna.IsVisible = false; alaReuna.IsVisible = false;
alaReuna.KineticFriction = 0.0; alaReuna.KineticFriction = 0.0;
juustoLuoja = new Timer(); juustoLuoja = new Timer
juustoLuoja.Interval = 0.5; {
Interval = 0.5
};
juustoLuoja.Timeout += LuoJuusto; juustoLuoja.Timeout += LuoJuusto;
juustoLuoja.Start(); juustoLuoja.Start();
homeJuustoLuoja = new Timer(); homeJuustoLuoja = new Timer
homeJuustoLuoja.Interval = 1.0; {
Interval = 1.0
};
homeJuustoLuoja.Timeout += LuoHomeJuusto; homeJuustoLuoja.Timeout += LuoHomeJuusto;
homeJuustoLuoja.Start(); homeJuustoLuoja.Start();
myrkkyLuoja = new Timer(); myrkkyLuoja = new Timer
myrkkyLuoja.Interval = 2.0; {
Interval = 2.0
};
myrkkyLuoja.Timeout += LuoMyrkky; myrkkyLuoja.Timeout += LuoMyrkky;
myrkkyLuoja.Start(); myrkkyLuoja.Start();
} }
...@@ -84,7 +94,7 @@ public class JuustoSadePeli : PhysicsGame ...@@ -84,7 +94,7 @@ public class JuustoSadePeli : PhysicsGame
/// <summary> /// <summary>
/// Tätä voi kutsua peliOhi näkymään päästyä, jolloin peli alkaa alusta /// Tätä voi kutsua peliOhi näkymään päästyä, jolloin peli alkaa alusta
/// </summary> /// </summary>
public void AloitaUusiPeli() private void AloitaUusiPeli()
{ {
ClearAll(); ClearAll();
Begin(); Begin();
...@@ -94,7 +104,7 @@ public class JuustoSadePeli : PhysicsGame ...@@ -94,7 +104,7 @@ public class JuustoSadePeli : PhysicsGame
/// <summary> /// <summary>
/// Kutsutaan, kun nälkämittari on nollassa tai pistelaskuri sadassa. Päättää pelin ja avaa lopetusvalikon /// Kutsutaan, kun nälkämittari on nollassa tai pistelaskuri sadassa. Päättää pelin ja avaa lopetusvalikon
/// </summary> /// </summary>
public void PeliOhi() private void PeliOhi()
{ {
{ {
aikalaskuri.Stop(); aikalaskuri.Stop();
...@@ -102,7 +112,7 @@ public class JuustoSadePeli : PhysicsGame ...@@ -102,7 +112,7 @@ public class JuustoSadePeli : PhysicsGame
pisteLaskuri.Stop(); pisteLaskuri.Stop();
Huippupisteet(); Huippupisteet();
MultiSelectWindow peliLoppui = new MultiSelectWindow($"Peli pelin! Pisteesi: {pisteLaskuri.Value}", "Uusi peli", "Lopeta"); MultiSelectWindow peliLoppui = new MultiSelectWindow($"Peli ohi! Pisteesi: {pisteLaskuri.Value}", "Uusi peli", "Lopeta");
peliLoppui.AddItemHandler(1, Exit); peliLoppui.AddItemHandler(1, Exit);
peliLoppui.AddItemHandler(0, AloitaUusiPeli); peliLoppui.AddItemHandler(0, AloitaUusiPeli);
...@@ -121,7 +131,7 @@ public class JuustoSadePeli : PhysicsGame ...@@ -121,7 +131,7 @@ public class JuustoSadePeli : PhysicsGame
/// <summary> /// <summary>
/// Vertaa pelissä ansaittuja pisteitä aiemmin saatuihin pisteisiin ja tekee ajantasaisen huippupistetaulukon /// Vertaa pelissä ansaittuja pisteitä aiemmin saatuihin pisteisiin ja tekee ajantasaisen huippupistetaulukon
/// </summary> /// </summary>
public void Huippupisteet() private void Huippupisteet()
{ {
int pisteet = pisteLaskuri.Value; int pisteet = pisteLaskuri.Value;
...@@ -149,13 +159,13 @@ public class JuustoSadePeli : PhysicsGame ...@@ -149,13 +159,13 @@ public class JuustoSadePeli : PhysicsGame
/// Päivittää ja kirjoittaa huippupistetalukon tekstin /// Päivittää ja kirjoittaa huippupistetalukon tekstin
/// </summary> /// </summary>
/// <param name="huippupisteLabel">Huippupisteiden teksti</param> /// <param name="huippupisteLabel">Huippupisteiden teksti</param>
public void PaivitettuHuippupisteLabel(Label huippupisteLabel) private void PaivitettuHuippupisteLabel(Label huippupisteLabel)
{ {
string huippupisteTeksti = "Huippupisteet: "; string huippupisteTeksti = "Huippupisteet: ";
for (int i = 0; i < huippupisteet.Length; i++) for (int i = 0; i < huippupisteet.Length; i++)
{ {
huippupisteTeksti += huippupisteet[i].ToString() + " "; huippupisteTeksti += huippupisteet[i] + " ";
} }
huippupisteLabel.Text = huippupisteTeksti; huippupisteLabel.Text = huippupisteTeksti;
...@@ -165,7 +175,7 @@ public class JuustoSadePeli : PhysicsGame ...@@ -165,7 +175,7 @@ public class JuustoSadePeli : PhysicsGame
/// <summary> /// <summary>
/// AsetaOhjaimet määrittelee pelin ohjauksen. Tällä hetkellä vain rotan liikutuksen /// AsetaOhjaimet määrittelee pelin ohjauksen. Tällä hetkellä vain rotan liikutuksen
/// </summary> /// </summary>
public void AsetaOhjaimet() private void AsetaOhjaimet()
{ {
Keyboard.Listen(Key.Left, ButtonState.Down, LiikutaRottaa, "Liiku Vasemmalle", rotta, new Vector(-500.0, 0)); Keyboard.Listen(Key.Left, ButtonState.Down, LiikutaRottaa, "Liiku Vasemmalle", rotta, new Vector(-500.0, 0));
Keyboard.Listen(Key.Left, ButtonState.Released, PysaytaRotta, null, rotta); Keyboard.Listen(Key.Left, ButtonState.Released, PysaytaRotta, null, rotta);
...@@ -178,7 +188,7 @@ public class JuustoSadePeli : PhysicsGame ...@@ -178,7 +188,7 @@ public class JuustoSadePeli : PhysicsGame
/// Tekee "nälkämittarin" jonka saavuttaessa 0 peli loppuu. Laskee ajan kuluessa ja homejuustoa ja myrkkyä syödessä. /// Tekee "nälkämittarin" jonka saavuttaessa 0 peli loppuu. Laskee ajan kuluessa ja homejuustoa ja myrkkyä syödessä.
/// juuston syöminen kasvattaa /// juuston syöminen kasvattaa
/// </summary> /// </summary>
public void LuoNalkaMittari() private void LuoNalkaMittari()
{ {
nalkaMittari = new IntMeter(10); nalkaMittari = new IntMeter(10);
Label Nälkä = new Label(); Label Nälkä = new Label();
...@@ -195,15 +205,17 @@ public class JuustoSadePeli : PhysicsGame ...@@ -195,15 +205,17 @@ public class JuustoSadePeli : PhysicsGame
/// <summary> /// <summary>
/// Luo pistelaskurin joka selvittää kuinka hyvin pelaaja pelaa /// Luo pistelaskurin joka selvittää kuinka hyvin pelaaja pelaa
/// </summary> /// </summary>
public void LuoPisteLaskuri() private void LuoPisteLaskuri()
{ {
pisteLaskuri = new IntMeter(0); pisteLaskuri = new IntMeter(0);
Label Pisteet = new Label(); Label Pisteet = new Label
Pisteet.X = Screen.Right - 60; {
Pisteet.Y = Screen.Top - 15; X = Screen.Right - 60,
Pisteet.TextColor = Color.Black; Y = Screen.Top - 15,
Pisteet.Color = Color.White; TextColor = Color.Black,
Pisteet.Title = "Pisteet"; Color = Color.White,
Title = "Pisteet"
};
pisteLaskuri.AddOverTime(1, 1); pisteLaskuri.AddOverTime(1, 1);
pisteLaskuri.MaxValue = 100; pisteLaskuri.MaxValue = 100;
Pisteet.BindTo(pisteLaskuri); Pisteet.BindTo(pisteLaskuri);
...@@ -214,7 +226,7 @@ public class JuustoSadePeli : PhysicsGame ...@@ -214,7 +226,7 @@ public class JuustoSadePeli : PhysicsGame
/// <summary> /// <summary>
/// Päivittää mittareita, joka sekuntti ja tarkistaa voitetaanko tai hävitäänkö peli /// Päivittää mittareita, joka sekuntti ja tarkistaa voitetaanko tai hävitäänkö peli
/// </summary> /// </summary>
public void AikaKasvaa() private void AikaKasvaa()
{ {
nalkaMittari.Value -= 1; nalkaMittari.Value -= 1;
pisteLaskuri.Value += 1; pisteLaskuri.Value += 1;
...@@ -224,19 +236,20 @@ public class JuustoSadePeli : PhysicsGame ...@@ -224,19 +236,20 @@ public class JuustoSadePeli : PhysicsGame
PeliOhi(); PeliOhi();
} }
if (pisteLaskuri.Value >= 100) int pisteLaskurRaja = 100;
if (pisteLaskuri.Value >= pisteLaskurRaja)
{ {
PeliOhi(); PeliOhi();
} }
} }
/// <summary> /// <summary>
/// LuoRotta tekee pelattavan pelihahmon /// LuoRotta tekee pelattavan pelihahmon
/// </summary> /// </summary>
public void LuoRotta() private void LuoRotta()
{ {
rotta = new PhysicsObject(50, 20); rotta = new PhysicsObject(100, 50);
rotta.Shape = Shape.Triangle; rotta.Shape = Shape.Triangle;
rotta.Color = Color.Gray; rotta.Color = Color.Gray;
rotta.Mass = 10000; rotta.Mass = 10000;
...@@ -251,73 +264,93 @@ public class JuustoSadePeli : PhysicsGame ...@@ -251,73 +264,93 @@ public class JuustoSadePeli : PhysicsGame
/// </summary> /// </summary>
/// <param name="hahmo"></param> /// <param name="hahmo"></param>
/// <param name="suunta"></param> /// <param name="suunta"></param>
public void LiikutaRottaa(PhysicsObject hahmo, Vector suunta) private void LiikutaRottaa(PhysicsObject hahmo, Vector suunta)
{ {
hahmo.Velocity = suunta; hahmo.Velocity = suunta;
} }
/// <summary> /// <summary>
/// PysaytaRotta on aliohjelma, jota kutsutaan AsetaOhjaimissa, kun näppäimen painallus loppuu /// PysaytaRotta on aliohjelma, jota kutsutaan AsetaOhjaimissa, kun näppäimen painallus loppuu
/// </summary> /// </summary>
/// <param name="hahmo"></param> /// <param name="hahmo"></param>
public void PysaytaRotta(PhysicsObject hahmo) private void PysaytaRotta(PhysicsObject hahmo)
{ {
hahmo.Velocity = Vector.Zero; hahmo.Velocity = Vector.Zero;
} }
/// <summary>
/// LuoKappale palauttaa kappaleen, jolle on määritelty tarvittavat ominaisuudet
/// </summary>
/// <param name="tag">kappaleen tagi</param>
/// <param name="muoto">muoto</param>
/// <param name="color">vari</param>
/// <param name="massa">massa</param>
/// <param name="paikka">sijainti</param>
/// <returns></returns>
private PhysicsObject LuoKappale(string tag, Shape muoto, Color color, double massa, Vector paikka)
{
PhysicsObject kappale = new PhysicsObject(50, 50);
kappale.Shape = muoto;
kappale.Color = color;
kappale.Mass = massa;
kappale.Restitution = 0.0;
kappale.Position = paikka;
AddCollisionHandler(kappale, OsuMaahan);
Add(kappale);
kappale.Tag = tag;
return kappale;
}
/// <summary> /// <summary>
/// LuoJuusto tekee juustokappaleet, joita LuoKenttä pistää tulemaan ajastimella /// LuoJuusto tekee juustokappaleet, joita LuoKenttä pistää tulemaan ajastimella
/// </summary> /// </summary>
public void LuoJuusto() private void LuoJuusto()
{ {
PhysicsObject juusto = new PhysicsObject(50, 50); PhysicsObject juusto = LuoKappale("juusto", Shape.Triangle, Color.Yellow, 10, RandomGen.NextVector(Level.Left, Level.Right, Level.Top, Level.Top));
juusto.Shape = Shape.Triangle;
juusto.Color = Color.Yellow;
juusto.Mass = 10;
juusto.Restitution = 0.0;
juusto.Position = RandomGen.NextVector(Level.Left, Level.Right, Level.Top, Level.Top);
AddCollisionHandler(rotta, juusto, OsuJuustoon); AddCollisionHandler(rotta, juusto, OsuJuustoon);
AddCollisionHandler(juusto, OsuMaahan);
Add(juusto);
juusto.Tag = "juusto";
} }
/// <summary> /// <summary>
/// LuoHomeJuusto tekee juustokappaleet, joita LuoKenttä pistää tulemaan ajastimella /// LuoHomeJuusto tekee juustokappaleet, joita LuoKenttä pistää tulemaan ajastimella
/// </summary> /// </summary>
public void LuoHomeJuusto() private void LuoHomeJuusto()
{ {
PhysicsObject homeJuusto = new PhysicsObject(50, 50); PhysicsObject homeJuusto = LuoKappale("homeJuusto", Shape.Triangle, Color.Green, 10, RandomGen.NextVector(Level.Left, Level.Right, Level.Top, Level.Top));
homeJuusto.Shape = Shape.Triangle;
homeJuusto.Color = Color.Green;
homeJuusto.Mass = 10;
homeJuusto.Restitution = 0.0;
homeJuusto.Position = RandomGen.NextVector(Level.Left, Level.Right, Level.Top, Level.Top);
AddCollisionHandler(rotta, homeJuusto, OsuHomeJuustoon); AddCollisionHandler(rotta, homeJuusto, OsuHomeJuustoon);
AddCollisionHandler(homeJuusto, OsuMaahan);
Add(homeJuusto);
homeJuusto.Tag = "homeJuusto";
} }
/// <summary> /// <summary>
/// LuoMyrkky tekee myrkkykappaleet, joita LuoKenttä pistää tulemaan ajastimella /// LuoMyrkky tekee myrkkykappaleet, joita LuoKenttä pistää tulemaan ajastimella
/// </summary> /// </summary>
public void LuoMyrkky() private void LuoMyrkky()
{ {
PhysicsObject myrkky = new PhysicsObject(50, 50); PhysicsObject myrkky = LuoKappale("myrkky", Shape.Rectangle, Color.Black, 10, RandomGen.NextVector(Level.Left, Level.Right, Level.Top, Level.Top));
myrkky.Shape = Shape.Rectangle;
myrkky.Color = Color.Black;
myrkky.Mass = 10;
myrkky.Restitution = 0.0;
myrkky.Position = RandomGen.NextVector(Level.Left, Level.Right, Level.Top, Level.Top);
AddCollisionHandler(rotta, myrkky, OsuMyrkkyyn); AddCollisionHandler(rotta, myrkky, OsuMyrkkyyn);
AddCollisionHandler(myrkky, OsuMaahan); }
Add(myrkky);
myrkky.Tag = "myrkky";
/// <summary>
/// Muuttaa painovoimaa (Gravity Vektoria), jos rotta on törmännyt määritelytyyn määrään juusto kappaleita
/// </summary>
/// <param name="syotyja">kuinka monesti rotta on törmännyt juustoon</param>
/// <returns>uusi painovoima (Gravity)</returns>
private void RottaSyonytPaljon(int syotyja)
{
int painovoimanKasvuRajaEka = 20;
int painovoimanKasvuRajaToka = 40;
juustoSyoty++;
if (syotyja >= painovoimanKasvuRajaEka) Gravity = new Vector(0, -600);
if (syotyja >= painovoimanKasvuRajaToka) Gravity = new Vector(0, -800);
} }
...@@ -326,9 +359,10 @@ public class JuustoSadePeli : PhysicsGame ...@@ -326,9 +359,10 @@ public class JuustoSadePeli : PhysicsGame
/// </summary> /// </summary>
/// <param name="pelaaja">rotta</param> /// <param name="pelaaja">rotta</param>
/// <param name="juusto">juusto</param> /// <param name="juusto">juusto</param>
public void OsuJuustoon(PhysicsObject pelaaja, PhysicsObject juusto) private void OsuJuustoon(PhysicsObject pelaaja, PhysicsObject juusto)
{ {
juusto.Destroy(); juusto.Destroy();
RottaSyonytPaljon(juustoSyoty);
nalkaMittari.Value += 1; nalkaMittari.Value += 1;
pisteLaskuri.Value += 1; pisteLaskuri.Value += 1;
} }
...@@ -339,7 +373,7 @@ public class JuustoSadePeli : PhysicsGame ...@@ -339,7 +373,7 @@ public class JuustoSadePeli : PhysicsGame
/// </summary> /// </summary>
/// <param name="pelaaja">rotta</param> /// <param name="pelaaja">rotta</param>
/// <param name="homeJuusto">homeJuusto</param> /// <param name="homeJuusto">homeJuusto</param>
void OsuHomeJuustoon(PhysicsObject pelaaja, PhysicsObject homeJuusto) private void OsuHomeJuustoon(PhysicsObject pelaaja, PhysicsObject homeJuusto)
{ {
homeJuusto.Destroy(); homeJuusto.Destroy();
nalkaMittari.Value -= 3; nalkaMittari.Value -= 3;
...@@ -352,7 +386,7 @@ public class JuustoSadePeli : PhysicsGame ...@@ -352,7 +386,7 @@ public class JuustoSadePeli : PhysicsGame
/// </summary> /// </summary>
/// <param name="pelaaja">rotta</param> /// <param name="pelaaja">rotta</param>
/// <param name="myrkky">myrkky</param> /// <param name="myrkky">myrkky</param>
void OsuMyrkkyyn(PhysicsObject pelaaja, PhysicsObject myrkky) private void OsuMyrkkyyn(PhysicsObject pelaaja, PhysicsObject myrkky)
{ {
myrkky.Destroy(); myrkky.Destroy();
nalkaMittari.Value -= 10; nalkaMittari.Value -= 10;
...@@ -365,7 +399,7 @@ public class JuustoSadePeli : PhysicsGame ...@@ -365,7 +399,7 @@ public class JuustoSadePeli : PhysicsGame
/// </summary> /// </summary>
/// <param name="putoava">Putoava objekti</param> /// <param name="putoava">Putoava objekti</param>
/// <param name="alaReuna">Kentän alareuna</param> /// <param name="alaReuna">Kentän alareuna</param>
void OsuMaahan(PhysicsObject putoava, PhysicsObject alaReuna) private void OsuMaahan(PhysicsObject putoava, PhysicsObject alaReuna)
{ {
putoava.Destroy(); putoava.Destroy();
} }
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment