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

Harjoitustyön toinen vaihe. Pelin päärakennuskappaleet lisätty.

parent a66ac3ec
No related branches found
No related tags found
No related merge requests found
# Default ignored files
/shelf/
/workspace.xml
# Rider ignored files
/.idea.ht.iml
/contentModel.xml
/projectSettingsUpdater.xml
/modules.xml
# Editor-based HTTP Client requests
/httpRequests/
# Datasource local storage ignored files
/dataSources/
/dataSources.local.xml
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="Encoding" addBOMForNewFiles="with BOM under Windows, with no BOM otherwise" />
</project>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="UserContentModel">
<attachedFolders />
<explicitIncludes />
<explicitExcludes />
</component>
</project>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="VcsDirectoryMappings">
<mapping directory="" vcs="Git" />
</component>
</project>
\ No newline at end of file
using System;
using System.Collections.Generic;
using Jypeli;
using Jypeli.Assets;
using Jypeli.Controls;
using Jypeli.Widgets;
namespace JuustoSadePeli;
/// @author Valtteri Mäkinen
/// @version 23.10.2023
/// <summary>
/// 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
/// kauan ennen, kuin nälkä lopulta tappaa rotan.
/// </summary>
public class JuustoSadePeli : PhysicsGame
{
private PhysicsObject rotta;
private IntMeter pistelaskuri;
private Timer juustoLuoja;
private Timer homeJuustoLuoja;
private Timer myrkkyLuoja;
public override void Begin()
{
Camera.ZoomToLevel();
Gravity = new Vector(0, -300);
LuoPistelaskuri();
LuoKentta();
AsetaOhjaimet();
}
/// <summary>
/// LuoKenttä tekee pelikentän perustan kuten reunat ja alkaa myös lisäämään säännöllisesti juustoa
/// homejuustoa ja myrkkyä putoamaan taivaalta.
/// </summary>
void LuoKentta()
{
LuoRotta();
PhysicsObject vasenReuna = Level.CreateLeftBorder();
vasenReuna.Restitution = 1.0;
vasenReuna.KineticFriction = 0.0;
vasenReuna.IsVisible = false;
PhysicsObject oikeaReuna = Level.CreateRightBorder();
oikeaReuna.Restitution = 1.0;
oikeaReuna.KineticFriction = 0.0;
oikeaReuna.IsVisible = false;
PhysicsObject alaReuna = Level.CreateBottomBorder();
alaReuna.Restitution = 1.0;
alaReuna.IsVisible = false;
alaReuna.KineticFriction = 0.0;
juustoLuoja = new Timer();
juustoLuoja.Interval = 2.0;
juustoLuoja.Timeout += LuoJuusto;
juustoLuoja.Start();
homeJuustoLuoja = new Timer();
homeJuustoLuoja.Interval = 5.0;
homeJuustoLuoja.Timeout += LuoHomeJuusto;
homeJuustoLuoja.Start();
myrkkyLuoja = new Timer();
myrkkyLuoja.Interval = 10.0;
myrkkyLuoja.Timeout += LuoMyrkky;
myrkkyLuoja.Start();
}
/// <summary>
/// AsetaOhjaimet määrittelee pelin ohjauksen. Tällä hetkellä vain rotan liikutuksen
/// </summary>
void AsetaOhjaimet()
{
Keyboard.Listen(Key.Left, ButtonState.Down, LiikutaRottaa, "Liiku Vasemmalle", rotta, new Vector(-200.0, 0));
Keyboard.Listen(Key.Left, ButtonState.Released, PysaytaRotta, null, rotta);
Keyboard.Listen(Key.Right, ButtonState.Down, LiikutaRottaa, "Liiku Oikealle", rotta, new Vector(200.0, 0));
Keyboard.Listen(Key.Right, ButtonState.Released, PysaytaRotta, null, rotta);
}
/// <summary>
/// LuoPisteLaskuri tekee myös nälkämittarina toimivan laskurin, joka kasvaa juustoon törmätessä
/// ja pienenee homejuuston/myrkkyyn törmätessä ja ajan kuluessa
/// </summary>
void LuoPistelaskuri()
{
pistelaskuri = new IntMeter(100);
Label pistenaytto = new Label();
pistenaytto.X = Screen.Left + 100;
pistenaytto.Y = Screen.Top - 100;
pistenaytto.TextColor = Color.Black;
pistenaytto.Color = Color.White;
pistenaytto.Title = "Nälkä";
pistenaytto.BindTo(pistelaskuri);
pistelaskuri.AddOverTime(-1, 1);
pistelaskuri.MinValue = 0;
Add(pistenaytto);
pistelaskuri.LowerLimit += Havisit;
}
/// <summary>
/// Havisit ohjelmaan täytyy tehdä käskyt sille, mitä tapahtuu, kun Pistelaskuri putoaa nollaan
/// </summary>
void Havisit()
{
}
/// <summary>
/// LuoRotta tekee pelattavan oelihahmon
/// </summary>
void LuoRotta()
{
rotta = new PhysicsObject(50, 50);
rotta.Shape = Shape.Circle;
rotta.Color = Color.Gray;
Add(rotta);
rotta.Position = new Vector(0, Level.Bottom);
}
/// <summary>
/// LiikutaRottaa antaa perussuunnat rotalle, jota käytetään AsetaOhjaimissa
/// </summary>
/// <param name="hahmo"></param>
/// <param name="suunta"></param>
void LiikutaRottaa(PhysicsObject hahmo, Vector suunta)
{
hahmo.Velocity = suunta;
}
/// <summary>
/// PysaytaRotta on aliohjelma, jota kutsutaan AsetaOhjaimissa, kun näppäimen painallus loppuu
/// </summary>
/// <param name="hahmo"></param>
void PysaytaRotta(PhysicsObject hahmo)
{
hahmo.Velocity = Vector.Zero;
}
/// <summary>
/// LuoJuusto tekee juustokappaleet, joita LuoKenttä pistää tulemaan ajastimella
/// </summary>
void LuoJuusto()
{
PhysicsObject juusto = new PhysicsObject(50, 50);
juusto.Shape = Shape.Triangle;
juusto.Color = Color.Yellow;
juusto.Mass = 10;
juusto.Position = RandomGen.NextVector(Screen.Left, Screen.Right, Screen.Top, Screen.Top);
Add(juusto);
juusto.Tag = "juusto";
}
/// <summary>
/// LuoHomeJuusto tekee juustokappaleet, joita LuoKenttä pistää tulemaan ajastimella
/// </summary>
void LuoHomeJuusto()
{
PhysicsObject homeJuusto = new PhysicsObject(50, 50);
homeJuusto.Shape = Shape.Triangle;
homeJuusto.Color = Color.Green;
homeJuusto.Mass = 10;
homeJuusto.Position = RandomGen.NextVector(Screen.Left, Screen.Right, Screen.Top, Screen.Top);
Add(homeJuusto);
homeJuusto.Tag = "homeJuusto";
}
/// <summary>
/// LuoMyrkky tekee myrkkykappaleet, joita LuoKenttä pistää tulemaan ajastimella
/// </summary>
void LuoMyrkky()
{
PhysicsObject myrkky = new PhysicsObject(50, 50);
myrkky.Shape = Shape.Triangle;
myrkky.Color = Color.Black;
myrkky.Mass = 10;
myrkky.Position = RandomGen.NextVector(Screen.Left, Screen.Right, Screen.Top, Screen.Top);
Add(myrkky);
myrkky.Tag = "myrkky";
}
}
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