Skip to content
Snippets Groups Projects
Commit 3854283c authored by Rönkä Riku Antti Oskari's avatar Rönkä Riku Antti Oskari
Browse files

Iso päivitys. Esteet taulukkomuodossa, toiminnallisuus paljon parempi, ja uusi puu esteenä

parent 4bedde17
No related branches found
No related tags found
No related merge requests found
Harjoitustyo/PinguLaskettelee/Content/puu.png

13.7 KiB

using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Net.NetworkInformation;
using Jypeli;
......@@ -8,6 +9,8 @@ using Jypeli.Controls;
using Jypeli.Widgets;
using SixLabors.ImageSharp.Processing.Processors.Filters;
// TODO ~ Poista ylimääräset using direktiivit
namespace PinguLaskettelee;
/// @author Riku Rönkä
......@@ -17,37 +20,63 @@ namespace PinguLaskettelee;
/// </summary>
public class PinguLaskettelee : PhysicsGame
{
// Pelin etenemisen nopeutta määrää laskuri
// Nämä rajoittavat laskurin
const int laskurinMaksimi = 3;
const int laskurinMinimi = 0;
/// Pingun kuvat eri tilanteissa
private static readonly Image pingunKuvaKolme = LoadImage("pinguKolme");
private static readonly Image pingunKuvaKaksi = LoadImage("pinguKaksi");
private static readonly Image pingunKuvaYksi = LoadImage("pinguYksi");
private static readonly Image pingunKuvaNolla = LoadImage("pinguNolla");
/// Kuvat esteistä
private static readonly Image kiviYksi = LoadImage("kivi");
private static readonly Image puuYksi = LoadImage("puu");
// Luodaan esteiden muodot kuvista.
// On ikävää, jos esteen muoto onkin erilainen, kun kuvasta päättelisi
private Shape kiviMuoto = Shape.FromImage(kiviYksi);
private Shape puuMuoto = Shape.FromImage(puuYksi);
private Shape pinguMuoto = Shape.FromImage(pingunKuvaKolme);
/// <summary>
/// TODO ~ NÄMÄ PITÄÄ MUISTAA MUUTTAA VAKIOIKSI, OSA SIIRRETTÄVÄ PELIN SISÄLLE
/// </summary>
private int sydamet = 3;
private int esteenNopeus = 300;
private int esteidenMaara = 0;
private int tuhottu = 0;
private double interval = 1;
private double kuljettuMatka = 0;
private PhysicsObject pingu;
private PhysicsObject kivi;
private PhysicsObject suksi;
private Timer ajastin;
private PhysicsObject[] este = new PhysicsObject[1000];
private double[] esteTiedot = new double[3];
private double[] pinguTiedot = new double[3];
public IntMeter sydanLaskuri;
/// <summary>
/// Pingun kuvat eri tilanteissa
/// </summary>
private static readonly Image pingunKuvaKolme = LoadImage("pinguKolme");
private static readonly Image pingunKuvaKaksi = LoadImage("pinguKaksi");
private static readonly Image pingunKuvaYksi = LoadImage("pinguYksi");
private static readonly Image pingunKuvaNolla = LoadImage("pinguNolla");
public IntMeter sydanLaskuri;
/// <summary>
/// Kuvat esteistä
/// Pääohjelma, joka aloittaa pelin.
/// Kutsuu LuoKentta aliohjelmaa, joka luo kentän, asettaa kameran, ja luo objektit.
/// </summary>
private static readonly Image kiviYksi = LoadImage("Kivi");
public override void Begin()
{
LuoKentta();
......@@ -55,11 +84,19 @@ public class PinguLaskettelee : PhysicsGame
}
/// <summary>
/// LuoKentta luo kentän reunat, taustavärin, Pingun
/// kameran, laskurin, ohjaimet, esteitä muutaman
/// </summary>
private void LuoKentta()
{
Level.CreateBorders();
Level.BackgroundColor = Color.White;
pingu = Pingu();
// Camera.FollowedObject = pingu; TODO ~ Tämä on ihan hieno!
LisaaLaskuri();
AsetaOhjaimet();
Update();
......@@ -73,8 +110,8 @@ public class PinguLaskettelee : PhysicsGame
private IntMeter LuoLaskuri()
{
IntMeter laskuri = new IntMeter(3);
laskuri.MaxValue = 3;
laskuri.MinValue = 0;
laskuri.MinValue = laskurinMinimi;
laskuri.MaxValue = laskurinMaksimi;
Label naytto = new Label();
naytto.BindTo(laskuri);
......@@ -96,7 +133,7 @@ public class PinguLaskettelee : PhysicsGame
}
private void LiikutaPingua(PhysicsObject pingu, Vector suunta, double kulmanopeus)
private void LiikutaPingua(PhysicsObject pelaaja, Vector suunta, double kulmanopeus)
{
pingu.Push(suunta);
}
......@@ -104,10 +141,11 @@ public class PinguLaskettelee : PhysicsGame
private void Update()
{
Timer ajastin = new Timer();
ajastin = new Timer();
ajastin.Interval = interval;
ajastin.Timeout += Laskin;
ajastin.Start();
}
......@@ -115,27 +153,34 @@ public class PinguLaskettelee : PhysicsGame
{
int random = RandomGen.NextInt(0, 100);
esteenNopeus += 10;
interval += 0.01;
if (sydamet == 0) esteenNopeus = 0;
Vector vektori = new Vector(0, esteenNopeus);
for (int i = 0; i < esteidenMaara; i++)
{
este[i].Velocity = vektori;
if (este[i].Y > 0) este[i].Destroy();
}
if (ajastin.Interval > 0.5) ajastin.Interval -= 0.01;
Console.WriteLine("AJASTIN "+ajastin.Interval);
Console.WriteLine("interval on "+interval);
kuljettuMatka += interval;
//Console.WriteLine(este[3].Y);
if (random < 75 && sydamet > 0)
{
int random2 = RandomGen.NextInt(3, 5);
for (int i = 0; i < random2; i++)
{
kivi = LuoEste();
esteTiedot[0]++;
if (kivi.Y > 0) kivi.Destroy();
// Console.WriteLine(esteTiedot[0]);
}
este = LuoEste(random2, 100);
esteTiedot[0]++;
}
if (random < 25 && sydamet < 3 && sydamet > 0)
{
suksi = LuoSuksi();
}
if (kuljettuMatka>100) StopAll();
//Console.WriteLine("kuljettu matka on "+kuljettuMatka);
//if (kuljettuMatka>10) sydamet = 0;
}
......@@ -148,8 +193,8 @@ public class PinguLaskettelee : PhysicsGame
pingu.X = 0;
pingu.Y = 0;
pingu.Image = pingunKuvaKolme;
pingu.RotateImage = true;
pingu.IgnoresCollisionResponse = true;
pingu.RotateImage = false;
pingu.IgnoresCollisionResponse = false;
pingu.MaxAngularVelocity = 2;
pingu.LinearDamping = 0.998;
//AddCollisionHandler(pingu, Tormays);
......@@ -160,22 +205,35 @@ public class PinguLaskettelee : PhysicsGame
}
private PhysicsObject LuoEste()
private PhysicsObject[] LuoEste(int montako, double koko)
{
int randomX = RandomGen.NextInt(-450, 450);
int randomY = RandomGen.NextInt(-850, -450);
Vector vektori = new Vector(0, esteenNopeus);
PhysicsObject este = new PhysicsObject(100, 100);
este.Shape = Shape.Circle;
este.Color = Color.Red;
este.X = randomX;
este.Y = randomY;
este.Velocity = vektori;
este.Tag = "este";
este.IgnoresCollisionResponse = true;
este.Image = kiviYksi;
Add(este);
esteidenMaara++;
for (int i = 0; i < montako; i++)
{
int randomX = RandomGen.NextInt(-450, 450);
int randomY = RandomGen.NextInt(-850, -450);
PhysicsObject kivi = new PhysicsObject(koko, koko);
kivi.Color = Color.Red;
kivi.X = randomX;
kivi.Y = randomY;
kivi.Velocity = vektori;
kivi.Tag = "este";
kivi.IgnoresCollisionResponse = true;
int mikaKuva = RandomGen.NextInt(1,3);
if (mikaKuva == 1)
{
kivi.Image = kiviYksi;
kivi.Shape = Shape.Circle;
}
else if (mikaKuva == 2)
{
kivi.Image = puuYksi;
kivi.Shape = Shape.Circle;
}
este[esteidenMaara] = kivi;
esteidenMaara++;
Add(kivi);
}
return este;
}
......@@ -185,18 +243,18 @@ public class PinguLaskettelee : PhysicsGame
int randomX = RandomGen.NextInt(-450, 450);
int randomY = RandomGen.NextInt(-850, -450);
Vector vektori = new Vector(0, esteenNopeus);
PhysicsObject este = new PhysicsObject(100, 100);
este.Shape = Shape.Circle;
este.Color = Color.Red;
este.X = randomX;
este.Y = randomY;
este.Velocity = vektori;
este.Tag = "suksi";
este.IgnoresCollisionResponse = true;
PhysicsObject suksi = new PhysicsObject(100, 100);
suksi.Shape = Shape.Circle;
suksi.Color = Color.Red;
suksi.X = randomX;
suksi.Y = randomY;
suksi.Velocity = vektori;
suksi.Tag = "suksi";
suksi.IgnoresCollisionResponse = true;
//este.Image = kiviYksi;
Add(este);
esteidenMaara++;
return este;
Add(suksi);
//esteidenMaara++;
return suksi;
}
/// <summary>
......@@ -205,29 +263,42 @@ public class PinguLaskettelee : PhysicsGame
/// nopeutta hidastetaan. Myös objektien luonnin tahtia hidastetaan.
/// Aliohjelma myös muuttaa Pingun ulkonäköä sydänten mukaan
/// </summary>
/// <param name="pingu"></param>
/// <param name="este"></param>
private void TormaysEste(PhysicsObject pingu, PhysicsObject este)
/// <param name="pelaaja"></param>
/// <param name="esteet"></param>
private void TormaysEste(PhysicsObject pelaaja, PhysicsObject esteet)
{
sydamet -= 1;
sydanLaskuri.Value = sydamet;
esteenNopeus -= 100;
Vector vektori = new Vector(0, esteenNopeus);
este.Velocity = vektori;
interval -= 0.5;
for (int i = 0; i < esteidenMaara; i++)
{
try
{
este[i].Velocity = vektori;
}
catch
{
este[esteidenMaara].Velocity = vektori;
}
}
ajastin.Interval = 1;
Console.WriteLine(sydamet);
este.Destroy();
esteet.Destroy();
if (sydamet == 2) pingu.Image = pingunKuvaKaksi;
if (sydamet == 1) pingu.Image = pingunKuvaYksi;
if (sydamet == 0)
{
StopAll();
este.Velocity = Vector.Zero;
for (int i = 0; i < esteidenMaara; i++)
{
este[i].Velocity = Vector.Zero;
StopAll();
}
pingu.LinearDamping = 100;
pingu.Image = pingunKuvaNolla;
MessageDisplay.Add($"Pingun after ski jäi nyt välistä");
// TulostaTiedot(esteTiedot, pinguTiedot)
//Console.WriteLine($"Esteiden määrä oli {esteidenMaara}");
// TODO ~ Tähän lisätään esteidenTiedot kutsu
}
}
......@@ -237,7 +308,7 @@ public class PinguLaskettelee : PhysicsGame
if (sydamet <= 3) sydamet += 1;
sydanLaskuri.Value = sydamet;
Console.WriteLine(sydamet);
suksi.Destroy();
//suksi.Destroy();
if (sydamet == 3) pingu.Image = pingunKuvaKolme;
if (sydamet == 2) pingu.Image = pingunKuvaKaksi;
if (sydamet == 1) pingu.Image = pingunKuvaYksi;
......@@ -256,6 +327,8 @@ public class PinguLaskettelee : PhysicsGame
private void TulostaTiedot(double[] esteTiedot, double[] pinguTiedot)
{
// TODO ~~ pitää lisätä toiminnot, jotta tiedot tulostetaan pelin lopussa
// Tätä kutsutaan sitten, kun sydamet on nollassa.
// Lisäisikö aloita uudestaan napin tänne?
}
}
\ No newline at end of file
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