Skip to content
Snippets Groups Projects
Commit 0e432964 authored by Nyyssönen Karoliina Reeta's avatar Nyyssönen Karoliina Reeta
Browse files

Pelin päivitykset.

parent 3da2f593
Branches tyo8.2
Tags vaihe8.2
No related merge requests found
Showing
with 364 additions and 110 deletions
No preview for this file type
No preview for this file type
using System;
using System.Collections.Generic;
using Jypeli;
using Jypeli.Assets;
using Jypeli.Controls;
using Jypeli.Widgets;
namespace Salaman_kisa;
/// @author Omanimi
/// @version 26.02.2024
/// <summary>
///
/// </summary>
public class Salaman_kisa : PhysicsGame
{
Vector vasemmalle = new Vector(-1, 0); // Liikkuminen vasemmalle
Vector oikealle = new Vector(1, 0); // Liikkuminen oikealle
PhysicsObject salama;
private GameObject tiePala;
private double tieNopeus = -50; // Tiepalan nopeus y-suunnassa
private double pelaajanNopeus = 200;
private Image salamaKuva;
private Image kolikkoKuva;
public override void Begin()
{
salamaKuva = LoadImage("salama.jpeg");
kolikkoKuva = LoadImage("kolikko.png");
LuoKentta();
AsetaOhjaimet();
Camera.ZoomToLevel();
}
private void LuoKentta()
{
tiePala = new GameObject(500, 1000);
tiePala.Color = Color.DarkGray;
tiePala.Position = new Vector(0, 0);
Add(tiePala, -1);
salama = new PhysicsObject(50, 50);
salama.Image = salamaKuva;
salama.Tag = "salama";
salama.X = 0;
salama.Y = -200;
salama.Restitution = 1.0;
Add(salama, 1);
LisaaKolikko(RandomGen.NextDouble(-200, 200), RandomGen.NextDouble(-200, 200)); // Lisää kolikko satunnaiseen paikkaan
}
protected override void Update(Time time)
{
base.Update(time);
// Liikuta tiePala-alas
tiePala.Y += tieNopeus * time.SinceLastUpdate.TotalSeconds;
}
private void LisaaKolikko(double x, double y)
{
PhysicsObject kolikko = new PhysicsObject(30, 30);
kolikko.Image = kolikkoKuva;
kolikko.Tag = "kolikko";
kolikko.X = x;
kolikko.Y = y;
kolikko.Restitution = 1.0;
Add(kolikko);
}
void AsetaOhjaimet()
{
Keyboard.Listen(Key.Left, ButtonState.Down, LiikutaPelaajaa, "Pelaaja: Liikuta salamaa vasemmalle", salama, vasemmalle);
Keyboard.Listen(Key.Right, ButtonState.Down, LiikutaPelaajaa, "Pelaaja: Liikuta salamaa oikealle", salama, oikealle);
Keyboard.Listen(Key.Space, ButtonState.Pressed, StopMovement, "Pysäytä salaman liike", salama);
Keyboard.Listen(Key.F1, ButtonState.Pressed, ShowControlHelp, "Näytä ohjeet"); PhoneBackButton.Listen(ConfirmExit, "Lopeta peli");
Keyboard.Listen(Key.Escape, ButtonState.Pressed, ConfirmExit, "Lopeta peli");
}
void LiikutaPelaajaa(PhysicsObject salama, Vector suunta)
{
salama.Velocity = suunta * pelaajanNopeus;
}
void StopMovement(PhysicsObject salama)
{
// Aseta oliolle nopeudeksi nolla, jolloin se pysähtyy
salama.Velocity = Vector.Zero;
}
private void TörmäysKolikkoon(PhysicsObject salama, PhysicsObject kolikko)
{
// Tee jotain, kun salama törmää kolikkoon
}
}
File added
# Default ignored files
/shelf/
/workspace.xml
# Rider ignored files
/.idea.Salaman kisa.iml
/modules.xml
/contentModel.xml
/projectSettingsUpdater.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="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="$PROJECT_DIR$/../.." vcs="Git" />
</component>
</project>
\ No newline at end of file
No preview for this file type
suunnitelma/peli/Content/kuva2.jpg

7.41 KiB

suunnitelma/peli/Content/kuva3.jpg

14.3 KiB

File moved
using System;
using System.Collections.Generic;
using Jypeli;
using Jypeli.Assets;
using Jypeli.Controls;
using Jypeli.Widgets;
namespace Salaman_kisa;
/// @author Karoliina Nyyssönen
/// @version 09.05.2024
/// <summary>
/// Tämä on harjoitustyö kurssilla Ohjelmointi1.
/// Pelissä salama yrittää selvitä kilparadan läpi törmäämättä kartiohin ja keräämällä mahdollisimman monta kolikkoa.
/// Jokainen kartioon törmääminen vie yhden kolikosta ansaitun pisteen pois. Jos pisteet ovat -2, peli päättyy.
/// </summary>
public class Salaman_kisa : PhysicsGame
{
/// <summary>
/// Pääohjelma, joka pyörittää peliä.
/// </summary>
int scrollausnopeus = -1; // Taustakuvien liikkumisnopeus. Jos negatiivinen, liike ylhäältä alas.
List<GameObject> taustakuvat; //Lista, jonne taustakuvat tallennetaan.
Timer taustaAjastin = new Timer();
GameObject ekaTaustakuva;
Vector vasemmalle = new Vector(-1, 0); // Liikkuminen vasemmalle
Vector oikealle = new Vector(1, 0); // Liikkuminen oikealle
PhysicsObject salama;
//private PhysicsObject kolikko;
// private PhysicsObject kartio;
//private PhysicsObject kohde;
// private PhysicsObject maaliviiva;
private double pelaajanNopeus = 100; // Tällä voi muuttaa pelaajan liikenopeutta kentässä.
private Image salamaKuva; // Salaman eli pelaajan kuva.
private Image kolikkoKuva; // Kuva kolikosta.
private Image kartioKuva; // Kuvan kartiosta.
IntMeter pelaajanPisteet; // Pistelaskuri
public override void Begin()
{
salamaKuva = LoadImage("salama.jpeg");
kolikkoKuva = LoadImage("kolikko.png");
kartioKuva = LoadImage("kartio.png");
LuoTaustakuvat();
LuoKentta();
LisaaLaskurit();
AsetaOhjaimet();
Camera.Follow(salama); // Kamera seuraa salamaa ja pysyy sen tasolla.
Camera.ZoomFactor = 1.0;
Camera.StayInLevel = true;
}
void LuoTaustakuvat()
{
taustaAjastin = new Timer();
taustaAjastin.Interval = 0.01; // tällä voit myös säätää nopeutta
taustaAjastin.Timeout += LiikutaTaustaa;
taustaAjastin.Start();
taustakuvat = new List<GameObject>();
LisaaTaustakuva("kuva1", 1024, 768);
LisaaTaustakuva("kuva2", 1024, 768);
LisaaTaustakuva("kuva2", 1024, 768);
LisaaTaustakuva("kuva2", 1024, 768);
LisaaTaustakuva("kuva3", 1024, 768);
}
private void LuoKentta()
{
salama = new PhysicsObject(40, 40);
salama.Image = salamaKuva;
salama.Tag = "salama";
salama.X = 0;
salama.Y = -200; // Lähtöpaikka piirretyllä starttiviivalla.
salama.Restitution = 1.0;
salama.AngularDamping = 0.2;
salama.LinearDamping = 0.1;
AddCollisionHandler(salama, "kolikko", TormaaKolikkoon);
AddCollisionHandler(salama, "kartio", TormaaKartioon);
AddCollisionHandler(salama, "maali", TormaaMaaliviivaan);
Add(salama);
//Alla voi säätää kolikon paikkoja ja muuttaa pelin asetelmaa.
LisaaKolikko(-100, -150);
LisaaKolikko(0,-60);
LisaaKolikko(-100, 50);
LisaaKolikko(100,150);
LisaaKolikko(-100,200);
LisaaKolikko(100,250);
LisaaKolikko(-100,350);
LisaaKolikko(100, 500);
LisaaKolikko(-100, 600);
LisaaKolikko(-100, 700);
//Alla voi säätää kartioiden paikkoja ja muuttaa pelin asetelmia vaikeammaksi tai helpommaksi.
LisaaKartio(-50, -100);
LisaaKartio(25, 0);
LisaaKartio(-60, 100);
LisaaKartio(0, 200);
LisaaKartio(50, 300);
LisaaKartio(-40, 400);
LisaaKartio(20, 500);
LisaaKartio(-50, 600);
LisaaKartio(75, 650);
LisaaKartio(-10, 700);
LisaaMaali(0, 850); // Tällä on tähdätty maali Finish -linen kohdalle.
Pause(); // Peli on aluksi pausella, jotta kenttä ei skrollaa taustalla.
MessageDisplay.Add("Paina enter aloittaaksesi!");
MessageDisplay.Add("Ohjaa salamaa nuolinäppäimillä sivulle.");
MessageDisplay.Add("Kerää mahdollisimman monta kolikkoa.");
MessageDisplay.Add("Varo kartioita!");
}
void LisaaTaustakuva(string nimi, double leveys, double korkeus)
{
GameObject olio = new GameObject(leveys, korkeus);
olio.Image = LoadImage(nimi);
olio.X = 0;
Add( olio );
if (taustakuvat.Count > 0)
{
olio.Top = taustakuvat[taustakuvat.Count - 1].Bottom;
if (scrollausnopeus >= 0) ekaTaustakuva = olio;
}
else
{
olio.Top = Level.Top;
if (scrollausnopeus < 0) ekaTaustakuva = olio;
}
taustakuvat.Add(olio);
}
void LiikutaTaustaa()
{
foreach (GameObject taustakuva in taustakuvat)
{
taustakuva.Y += scrollausnopeus;
if (scrollausnopeus < 0 && taustakuva.Top < Level.Bottom)
{
taustakuva.Bottom = ekaTaustakuva.Top;
ekaTaustakuva = taustakuva;
}
else if (scrollausnopeus > 0 && taustakuva.Bottom > Level.Top)
{
taustakuva.Top = ekaTaustakuva.Bottom;
ekaTaustakuva = taustakuva;
}
}
}
private void LisaaKolikko(double x, double y)
{
PhysicsObject kolikko = new PhysicsObject(30, 30);
kolikko.Image = kolikkoKuva;
kolikko.Tag = "kolikko";
kolikko.X = x;
kolikko.Y = y;
kolikko.Restitution = 1.0;
kolikko.IgnoresCollisionResponse = true;
Add(kolikko);
}
void LisaaKartio (double x, double y)
{
PhysicsObject kartio = new PhysicsObject(40, 40, Shape.Rectangle);
kartio.Image = kartioKuva;
kartio.Position = new Vector(x, y);
kartio.Tag = "kartio";
kartio.Restitution = 0.8;
Add(kartio);
}
void LisaaMaali (double x, double y)
{
PhysicsObject maali = new PhysicsObject(100, 5);
maali.Tag = "maali";
maali.Color = Color.White;
maali.IgnoresCollisionResponse = true;
maali.X = x;
maali.Y = y;
Add(maali);
}
void UpdateKolikotKartiotJaMaali()
{
foreach (PhysicsObject kolikko in GetObjectsWithTag("kolikko"))
{
kolikko.Position += new Vector(0, scrollausnopeus);
}
foreach (PhysicsObject kartio in GetObjectsWithTag("kartio"))
{
kartio.Position += new Vector(0, scrollausnopeus);
}
foreach (PhysicsObject maali in GetObjectsWithTag("maali"))
{
maali.Position += new Vector(0, scrollausnopeus);
}
}
protected override void Update(Time time)
{
//Tällä saadaan kartiot, kolikot ja maali liikkumaan samaa tahtia kuin taustakuvat skrollaavat.
base.Update(time);
// Päivitä taustakuvien sijainti
LiikutaTaustaa();
// Päivitä kolikoiden ja kartioiden sijainti
UpdateKolikotKartiotJaMaali();
}
void AsetaOhjaimet()
{
Keyboard.Listen(Key.Left, ButtonState.Down, LiikutaPelaajaa, "Pelaaja: Liikuta salamaa vasemmalle", salama, vasemmalle);
Keyboard.Listen(Key.Right, ButtonState.Down, LiikutaPelaajaa, "Pelaaja: Liikuta salamaa oikealle", salama, oikealle);
Keyboard.Listen(Key.Enter, ButtonState.Pressed, Pause, "Pelaaja: Aloita peli");
Keyboard.Listen(Key.LeftShift, ButtonState.Down, AloitaAlusta, "Pelaaja: Aloita peli alusta.");
Keyboard.Listen(Key.Space, ButtonState.Pressed, StopMovement, "Pysäytä salaman liike", salama);
Keyboard.Listen(Key.F1, ButtonState.Pressed, ShowControlHelp, "Näytä ohjeet"); PhoneBackButton.Listen(ConfirmExit, "Lopeta peli");
Keyboard.Listen(Key.Escape, ButtonState.Pressed, ConfirmExit, "Lopeta peli");
}
void LiikutaPelaajaa(PhysicsObject salama, Vector suunta)
{
salama.Velocity = new Vector(suunta.X * pelaajanNopeus, salama.Velocity.Y);
}
void StopMovement(PhysicsObject salama)
{
// Aseta oliolle nopeudeksi nolla, jolloin se pysähtyy
salama.Velocity = Vector.Zero;
}
void TormaaKolikkoon (PhysicsObject salama, PhysicsObject kolikko)
{
MessageDisplay.Clear();
kolikko.Destroy();
salama.CanRotate = false;
pelaajanPisteet.Value += 1;
}
void TormaaKartioon (PhysicsObject salama, PhysicsObject kartio)
{
if (pelaajanPisteet.Value >=0)
{
pelaajanPisteet.Value += -1;
salama.CanRotate = true;
Remove(kartio);
}
else if (pelaajanPisteet.Value <= 0)
{
salama.Destroy();
Pause();
MessageDisplay.Add("Game over!");
//AloitaAlusta();
}
}
void TormaaMaaliviivaan (PhysicsObject salama, PhysicsObject maali)
{
Pause();
MessageDisplay.Add("Onneksi olkoon! Pääsit kentän läpi!");
MessageDisplay.Add("Paina LeftShift aloittaaksesi alusta!");
}
void AloitaAlusta()
{
ClearAll();
LuoTaustakuvat();
LuoKentta();
LisaaLaskurit();
AsetaOhjaimet();
}
void LisaaLaskurit()
{
pelaajanPisteet = LuoPisteLaskuri(Screen.Left + 100.0, Screen.Top - 100.0);
}
IntMeter LuoPisteLaskuri(double x, double y)
{
IntMeter laskuri = new IntMeter(0);
laskuri.MaxValue = 10;
laskuri.MinValue = -1;
Label naytto = new Label();
naytto.BindTo(laskuri);
naytto.X = x;
naytto.Y = y;
naytto.TextColor = Color.Black;
naytto.BorderColor = Level.Background.Color;
naytto.Color = Color.LightGray;
naytto.Title = "Pisteet: ";
Add(naytto);
return laskuri;
}
}
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