Skip to content
Snippets Groups Projects
Commit 8f2fe450 authored by Korpela Enni's avatar Korpela Enni
Browse files

ht3

parent 864833de
Branches main
No related tags found
No related merge requests found
Showing
with 485 additions and 18 deletions
No preview for this file type
No preview for this file type
No preview for this file type
# Default ignored files
/shelf/
/workspace.xml
# Rider ignored files
/modules.xml
/.idea.Lentopeli.iml
/projectSettingsUpdater.xml
/contentModel.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="$PROJECT_DIR$/../.." vcs="Git" />
</component>
</project>
\ No newline at end of file
File added
Lentopeli/Lentopeli/Content/lentokone.png

127 KiB | W: | H:

Lentopeli/Lentopeli/Content/lentokone.png

46.8 KiB | W: | H:

Lentopeli/Lentopeli/Content/lentokone.png
Lentopeli/Lentopeli/Content/lentokone.png
Lentopeli/Lentopeli/Content/lentokone.png
Lentopeli/Lentopeli/Content/lentokone.png
  • 2-up
  • Swipe
  • Onion skin
Lentopeli/Lentopeli/Content/ukkospilvi.png

88.9 KiB

using System;
using System.Collections.Generic;
using Jypeli;
using Jypeli.Assets;
using Jypeli.Controls;
using Jypeli.Widgets;
namespace Lentopeli;
......@@ -10,23 +7,344 @@ namespace Lentopeli;
/// @author Enni Korpela
/// @version 02.03.2024
/// <summary>
/// tehdaan lentopeli, jossa lentokoneella yritetaan vaistella pilvia ja muita esteita
/// tehdään lentopeli, jossa lentokoneella yritetaan väistella pilvia ja kerätä mahdollisimman monta tähteä peräkkäin/yhteensä
/// </summary>
public class Lentopeli : PhysicsGame
{
public override void Begin ()
private static readonly string[] lines =
{
Camera.ZoomToLevel();
"----------------------------------------------------------------------------------------------------------------*",
" U U U T T T T U T T U T *",
" U T U T U U T U U U U *",
" P T U T T U T T U U T *",
" T U T T U U T T T U T *",
" U T U T U T U T *",
" T U U U T U T U T U T *",
"----------------------------------------------------------------------------------------------------------------*"
};
private static readonly int tileWidth = 800 / lines[0].Length;
private static readonly int tileHeight = 480 / lines.Length;
private DoubleMeter elamalaskuri;
private IntMeter pistelaskuri;
private PhysicsObject pelaaja;
private List<GameObject> liikutettavat = new List<GameObject>();
private int suunta = -3;
private double tuhoamisX;
private EasyHighScore topLista = new EasyHighScore();
private List<double> luvut = new List<double>();
private double streak;
/// <summary>
/// Aloitetaan peli, jossa lennetään lentokoneella pilvien läpi keräten tähtiä.
/// </summary>
public override void Begin()
{
LuoKentta();
Level.Background.Color = Color.LightBlue;
PhysicsObject pelaaja = new PhysicsObject(150, 150);
pelaaja.X = -450.0;
Camera.Zoom(2.5);
Camera.Follow(pelaaja);
LisaaNappaimet();
LuoElamalaskuri();
LuoPistelaskuri();
tuhoamisX = Level.Left;
Timer liikutusajastin = new Timer();
liikutusajastin.Interval = 0.05;
liikutusajastin.Timeout += LiikutaOlioita;
liikutusajastin.Start();
}
/// <summary>
/// Luodaan kenttä
/// </summary>
private void LuoKentta()
{
TileMap tiles = TileMap.FromStringArray(lines);
tiles.SetTileMethod('P', LisaaPelaaja);
tiles.SetTileMethod('U', LisaaPilvi);
tiles.SetTileMethod('T', LisaaTahti);
tiles.SetTileMethod('-', LisaaYlaAla);
tiles.SetTileMethod('*', LisaaReuna);
tiles.Execute(tileWidth, tileHeight);
}
/// <summary>
/// Lisätään peliin näppäimet, joilla ohjataan peliä.
/// </summary>
private void LisaaNappaimet()
{
Keyboard.Listen(Key.Escape, ButtonState.Pressed, ConfirmExit, "Lopeta peli");
Keyboard.Listen(Key.Up, ButtonState.Pressed, LennaYlos, "lentokone lentää ylös");
Keyboard.Listen(Key.Down, ButtonState.Pressed, ValuAlas, "lentokone valuu alas");
ControllerOne.Listen(Button.Back, ButtonState.Pressed, Exit, "Poistu pelistä");
PhoneBackButton.Listen(ConfirmExit, "Lopeta peli");
}
/// <summary>
/// Kun näppäin on painettuna lentokone nousee ylöspäin
/// </summary>
private void LennaYlos()
{
pelaaja.Move(new Vector(0, 100));
}
/// <summary>
/// kun painetaan alas näppäintä, lentokone valuu alaspäin
/// </summary>
private void ValuAlas()
{
pelaaja.Move(new Vector(0, -100));
}
/// <summary>
/// Liikutetaan kaikkia pilviä ja tähtiä oikealta vasemmalle, jotta näyttää kuin lentokone lentäisi koko ajan eteenpäin
/// </summary>
private void LiikutaOlioita()
{
for (int i = 0; i < liikutettavat.Count; i++)
{
GameObject olio = liikutettavat[i];
olio.X += suunta;
if (olio.X <= tuhoamisX)
{
olio.Destroy();
liikutettavat.Remove(olio);
}
}
}
/// <summary>
/// Lisätään pelaaja, eli lentokone
/// </summary>
/// <param name="paikka">mihin lentokone lisätään</param>
/// <param name="leveys">lentokoneen leveys</param>
/// <param name="korkeus">lentokoneen korkeus</param>
private void LisaaPelaaja(Vector paikka, double leveys, double korkeus)
{
pelaaja = new PhysicsObject(tileWidth / 0.3, tileHeight / 2.5);
pelaaja.Tag = "pelaaja";
pelaaja.Position = paikka;
pelaaja.Image = LoadImage("lentokone.png");
pelaaja.Shape = Shape.Circle;
pelaaja.CanRotate = false;
Add(pelaaja);
PhoneBackButton.Listen(ConfirmExit, "Lopeta peli");
Keyboard.Listen(Key.Escape, ButtonState.Pressed, ConfirmExit, "Lopeta peli");
AddCollisionHandler(pelaaja, "ukkospilvi", PelaajaOsuu);
AddCollisionHandler(pelaaja, "tahti", PisteetLisaa);
AddCollisionHandler(pelaaja, "reuna", LopetaPeli);
AddCollisionHandler(pelaaja, "seina", Kuolit);
}
/// <summary>
/// Lisätään ukkospilvi, johon lentokoneella ei saa osua.
/// </summary>
/// <param name="paikka">mihin pilvi lisätään</param>
/// <param name="leveys">pilven leveys</param>
/// <param name="korkeus">pilven korkeus</param>
private void LisaaPilvi(Vector paikka, double leveys, double korkeus)
{
PhysicsObject ukkospilvi = new PhysicsObject(tileWidth / 0.3, tileHeight / 2.6);
ukkospilvi.Tag = "ukkospilvi";
ukkospilvi.Position = paikka;
ukkospilvi.CanRotate = false;
ukkospilvi.Image = LoadImage("ukkospilvi.png");
ukkospilvi.Shape = Shape.Rectangle;
Add(ukkospilvi);
liikutettavat.Add(ukkospilvi);
}
/// <summary>
/// Tähden lisääminen peliin.
/// </summary>
/// <param name="paikka">mihin kohtaan tähti lisätään</param>
/// <param name="leveys">kuinka leveä tähti on</param>
/// <param name="korkeus">kuinka korkea on tähti</param>
private void LisaaTahti(Vector paikka, double leveys, double korkeus)
{
PhysicsObject tahti = new PhysicsObject(tileWidth / 0.5, tileHeight / 3.4);
tahti.Tag = "tahti";
tahti.Position = paikka;
tahti.Shape = Shape.Star;
tahti.Color = Color.Gold;
Add(tahti);
liikutettavat.Add(tahti);
}
/// <summary>
/// Lisätään pelin loppuun reuna, johon kun osutaan pelin ensimmäinen taso loppuu.
/// </summary>
/// <param name="paikka">Mihin reuna sijoitetaan</param>
/// <param name="leveys">kuinka leveä reuna on</param>
/// <param name="korkeus">reunan korkeus</param>
private void LisaaReuna(Vector paikka, double leveys, double korkeus)
{
PhysicsObject reuna = PhysicsObject.CreateStaticObject(leveys, korkeus);
reuna.Tag = "reuna";
reuna.Position = paikka;
reuna.Color = Color.Blue;
Add(reuna);
liikutettavat.Add(reuna);
}
/// <summary>
/// Lisätään ylä ja alareuna erikseen, sillä tähän osuessa peli päättyy, mutta ei voi päästtä ennätyslistalle vaan peli on over.
/// </summary>
/// <param name="paikka">paikka</param>
/// <param name="leveys">kohteen leveys</param>
/// <param name="korkeus">korkeus</param>
private void LisaaYlaAla(Vector paikka, double leveys, double korkeus)
{
PhysicsObject seina = PhysicsObject.CreateStaticObject(leveys, korkeus/3);
seina.Tag = "seina";
seina.Position = paikka;
seina.Color = Color.Blue;
Add(seina);
liikutettavat.Add(seina);
}
/// <summary>
/// LAsketaan elämät. Aluksi elämiä on kolme, ja ne vähenevät aina kun osuu pilveen
/// </summary>
void LuoElamalaskuri()
{
elamalaskuri = new DoubleMeter(3);
elamalaskuri.MaxValue = 3;
elamalaskuri.LowerLimit += ElamaLoppui;
ProgressBar elamapalkki = new ProgressBar(150, 20);
elamapalkki.X = Screen.Left + 150;
elamapalkki.Y = Screen.Top - 20;
elamapalkki.BarColor = Color.Gold;
elamapalkki.BorderColor = Color.Black;
elamapalkki.BindTo(elamalaskuri);
Add(elamapalkki);
}
/// <summary>
/// Pistelaskuri, joka laskee kerätyt tähdet
/// </summary>
void LuoPistelaskuri()
{
pistelaskuri = new IntMeter(0);
Label pistenaytto = new Label();
pistenaytto.Title = "Pisteet: ";
pistenaytto.X = Screen.Left + 100;
pistenaytto.Y = Screen.Top - 100;
pistenaytto.TextColor = Color.Black;
pistenaytto.Color = Color.White;
pistenaytto.BindTo(pistelaskuri);
Add(pistenaytto);
}
/// <summary>
/// Mikäli pelaaja osuu kohteeseen, vähennetään se hänen elämästää
/// </summary>
/// <param name="lentokone">lentokone</param>
/// <param name="kohde">ukkospilvi</param>
private void PelaajaOsuu(PhysicsObject lentokone, PhysicsObject kohde)
{
kohde.Destroy();
luvut.Add(streak);
streak = 0;
elamalaskuri.Value -= 1;
}
/// <summary>
/// Kun osutaan tähteen pisteet kasvaa
/// </summary>
/// <param name="lentokone"></param>
/// <param name="kohde"></param>
private void PisteetLisaa(PhysicsObject lentokone, PhysicsObject kohde)
{
kohde.Destroy();
streak += 1;
pistelaskuri.Value += 1;
}
/// <summary>
/// kun lentokone osuu päätyyn niin peli loppuu ja lasketaan streak, k-a ja yhteispisteet
/// </summary>
/// <param name="lentokone"></param>
/// <param name="kohde"></param>
private void LopetaPeli(PhysicsObject lentokone, PhysicsObject kohde)
{
ClearAll();
MessageDisplay.Add($"Sait pisteitä: {pistelaskuri}. Pisin streak:{Streak(luvut)}. Streak keskiarvo:{StreakKA(luvut)}.");
topLista.EnterAndShow(pistelaskuri.Value);
}
/// <summary>
/// kun osuu reunaan niin kuolee ja kerrotgtaan paljon sai pisteitä
/// </summary>
/// <param name="lentokone"></param>
/// <param name="kohde"></param>
void Kuolit(PhysicsObject lentokone, PhysicsObject kohde)
{
ClearAll();
MessageDisplay.Add($"Kuolit. Sait pisteitä: {pistelaskuri}.");
topLista.Show();
}
/// <summary>
/// Elämät loppui kesken kun osuit liian usein ukkospilviin
/// </summary>
void ElamaLoppui()
{
ClearAll();
MessageDisplay.Add($"Elämäsi loppui osuessasi pilviin. Sait pisteitä: {pistelaskuri}. Yritä uudestaan :)");
topLista.Show();
}
/// <summary>
/// Lasketaan streak keski-arvo. Streak tarkoittaa pituutta kuinka usein peräkkäin kerätty tähtiä osumatta pilviin
/// </summary>
/// <param name="luvutKA">streak taulukon luvut</param>
/// <returns>palauttaa streakien keski-arvon</returns>
private double StreakKA(List<double> luvutKA)
{
double ka = 0;
foreach (double luku in luvutKA)
{
ka = ka + luku;
}
return ka/luvutKA.Count;
}
/// <summary>
/// Laskee kuinka monta kertaa peräkkäin osutaan tähtiin osumatta kertaakaan pilviin
/// </summary>
/// <param name="luvutstreak"> listaan kootut streak numerot</param>
/// <returns>palauttaa suurimman arvon streak listasta</returns>
private double Streak(List<double> luvutstreak)
{
double suurin = 0;
foreach (double luku in luvutstreak)
{
if (luku > suurin) suurin = luku;
}
return suurin;
}
}
\ No newline at end of file
......@@ -10,14 +10,13 @@
<PackageReference Include="Jypeli.FarseerPhysics.NET" Version="2.*"/>
</ItemGroup>
<ItemGroup>
<Folder Include="Content\" />
</ItemGroup>
<ItemGroup>
<None Update="Content\lentokone.png">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</None>
<None Update="Content\ukkospilvi.png">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</None>
</ItemGroup>
</Project>
# Default ignored files
/shelf/
/workspace.xml
# Rider ignored files
/projectSettingsUpdater.xml
/.idea.Testi.iml
/modules.xml
/contentModel.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="$PROJECT_DIR$/.." vcs="Git" />
</component>
</project>
\ No newline at end of file

Microsoft Visual Studio Solution File, Format Version 12.00
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Testi", "Testi\Testi.csproj", "{0CF4C0ED-224E-41D7-9EF2-E4FDD1B11C00}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "TestiTest", "TestiTest/TestiTest.csproj", "{9A3D19B0-6130-413E-948B-ECB7537D04A9}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
Release|Any CPU = Release|Any CPU
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{0CF4C0ED-224E-41D7-9EF2-E4FDD1B11C00}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{0CF4C0ED-224E-41D7-9EF2-E4FDD1B11C00}.Debug|Any CPU.Build.0 = Debug|Any CPU
{0CF4C0ED-224E-41D7-9EF2-E4FDD1B11C00}.Release|Any CPU.ActiveCfg = Release|Any CPU
{0CF4C0ED-224E-41D7-9EF2-E4FDD1B11C00}.Release|Any CPU.Build.0 = Release|Any CPU
{9A3D19B0-6130-413E-948B-ECB7537D04A9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{9A3D19B0-6130-413E-948B-ECB7537D04A9}.Debug|Any CPU.Build.0 = Debug|Any CPU
{9A3D19B0-6130-413E-948B-ECB7537D04A9}.Release|Any CPU.ActiveCfg = Release|Any CPU
{9A3D19B0-6130-413E-948B-ECB7537D04A9}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
EndGlobal

Microsoft Visual Studio Solution File, Format Version 12.00
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Testi", "Testi\Testi.csproj", "{0CF4C0ED-224E-41D7-9EF2-E4FDD1B11C00}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
Release|Any CPU = Release|Any CPU
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{0CF4C0ED-224E-41D7-9EF2-E4FDD1B11C00}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{0CF4C0ED-224E-41D7-9EF2-E4FDD1B11C00}.Debug|Any CPU.Build.0 = Debug|Any CPU
{0CF4C0ED-224E-41D7-9EF2-E4FDD1B11C00}.Release|Any CPU.ActiveCfg = Release|Any CPU
{0CF4C0ED-224E-41D7-9EF2-E4FDD1B11C00}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
EndGlobal
using System;
using System.Text;
using System.Linq;
using System.Collections.Generic;
using System.Data;
/// @author Omanimi
/// @version 19.03.2024
/// <summary>
///
/// </summary>
public class Testi
{
/// <summary>
/// Lasketaan kahden luvun summa
/// </summary>
public static void Main()
{
Summa(4, 5);
Console.WriteLine("Summa on:" + Summa(4,5));
}
/// <summary>
/// Lasketaan yhteenlasku
/// </summary>
/// <param name="a"> ensimmäinen luku</param>
/// <param name="b"> toinen luku</param>
/// <returns>palauttaa kahden luvun summan</returns>
/// <example>
/// <pre name="test">
/// Summa(0, 1) === 1;
/// Summa(2, 3) === 5;
/// Summa(0, 8) === 8;
/// </pre>
/// </example>
public static int Summa(int a, int b)
{
return a+b;
}
}
\ No newline at end of file
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>net7.0</TargetFramework>
<ExternalConsole>true</ExternalConsole>
</PropertyGroup>
</Project>
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