Skip to content
Snippets Groups Projects
Commit 96784b9c authored by Perkkiö Emil's avatar Perkkiö Emil
Browse files

poistettu ylimääräistä materiaalia

parent 0b754911
Branches main
No related tags found
No related merge requests found
Showing
with 128 additions and 915 deletions
......@@ -19,7 +19,7 @@ namespace SupraDrifting
public class SupraDrifting : PhysicsGame
{
private static readonly string[] Rata = {
private static readonly string[] RATA = {
" ",
" ",
" xxxxxxxxxxxxxxxxxxxxxxxxxx ",
......@@ -41,18 +41,18 @@ namespace SupraDrifting
" ",
};
private static readonly int tileWidth = 500 / Rata[0].Length;
private static readonly int tileHeight = 500 / Rata.Length;
private static readonly int tileWidth = 500 / RATA[0].Length;
private static readonly int tileHeight = 500 / RATA.Length;
private EasyHighScore TopAjat = new EasyHighScore();
toyota.image = C:\kurssit\ohj1\ht\SupraDrifting\SupraDrifting\Content\ToyotaSupra2.jpg;
//toyota.image = C:\kurssit\ohj1\ht\SupraDrifting\SupraDrifting\Content\ToyotaSupra2.jpg;
Automobile auto;
PhysicsObject reuna;
IntMeter kierroslaskuri;
PhysicsObject maaliviiva;
Timer aikalaskuri;
private Automobile auto;
private PhysicsObject reuna;
private IntMeter kierroslaskuri;
private PhysicsObject maaliviiva;
private Timer aikalaskuri;
//Image rajahdyskuva = LoadImage("explosion.png");
......@@ -64,11 +64,11 @@ namespace SupraDrifting
{
Level.Background.CreateGradient(Color.Green, Color.Wheat);
TileMap tiles = TileMap.FromStringArray(Rata);
TileMap tiles = TileMap.FromStringArray(RATA);
tiles.SetTileMethod('x', ReunanLuonti, Color.Wheat);
tiles.SetTileMethod('y', MaaliViiva, Color.White);
tiles.SetTileMethod('z', apuViiva, Color.Transparent);
tiles.SetTileMethod('z', ApuViiva, Color.Transparent);
tiles.Execute(tileWidth, tileHeight);
......@@ -87,7 +87,15 @@ namespace SupraDrifting
}
void apuViiva(Vector paikka, double leveys, double korkeus, Color vari)
/// <summary>
/// Luo apuviivan radan yläosioon, jonka kautta pelaajan kuuluu ajaa, jotta kierroslaskuriin tulee lisää kierroksia.
/// </summary>
/// <param name="paikka">apuviivan sijainti</param>
/// <param name="leveys">apuviivan leveys</param>
/// <param name="korkeus">apuviivan korkeus</param>
/// <param name="vari">apuviivan väri</param>
private void ApuViiva(Vector paikka, double leveys, double korkeus, Color vari) // Auttaa kierrosten laskennassa.
{
PhysicsObject apuViiva = new PhysicsObject(leveys - 1, korkeus - 1);
apuViiva.Position = paikka;
......@@ -97,8 +105,17 @@ namespace SupraDrifting
apuViiva.Tag = "apuViiva";
Add(apuViiva);
}
void ReunanLuonti(Vector paikka, double leveys, double korkeus, Color vari)
/// <summary>
/// Luo reunat kenttään.
/// </summary>
/// <param name="paikka">paikka, minne reuna sijoitetaan</param>
/// <param name="leveys">reunan leveys</param>
/// <param name="korkeus">reunan korkeus</param>
/// <param name="vari">reunan väri</param>
private void ReunanLuonti(Vector paikka, double leveys, double korkeus, Color vari)
{
PhysicsObject reuna = new PhysicsObject(leveys - 1, korkeus - 1);
reuna.Position = paikka;
......@@ -108,7 +125,15 @@ namespace SupraDrifting
Add(reuna);
}
void MaaliViiva(Vector paikka, double leveys, double korkeus, Color vari)
/// <summary>
/// Luo maaliviivan kentälle.
/// </summary>
/// <param name="paikka">paikka, minne maaliviiva luodaan</param>
/// <param name="leveys">maaliviivan leveys</param>
/// <param name="korkeus">maaliviivan korkeus</param>
/// <param name="vari">maaliviivan väri</param>
private void MaaliViiva(Vector paikka, double leveys, double korkeus, Color vari)
{
PhysicsObject maaliviiva = new PhysicsObject(leveys - 12, korkeus);
maaliviiva.Position = paikka;
......@@ -120,7 +145,14 @@ namespace SupraDrifting
Add(maaliviiva);
}
Automobile LuoAuto(double x, double y)
/// <summary>
/// Luo auton peliin Jypelin Automobile ominaisuuksilla.
/// </summary>
/// <param name="x">auton aloituspaikan x-koordinaatti</param>
/// <param name="y">auton aloituspaikan y-koordinaatti</param>
/// <returns></returns>
private Automobile LuoAuto(double x, double y)
{
Automobile auto = new Automobile(22.0, 22.0);
auto.X = x;
......@@ -133,7 +165,7 @@ namespace SupraDrifting
auto.ApplyTorque(100);
auto.MomentOfInertia = 20;
auto.Tag = 0;
auto.image = Toyota;
//auto.image = Toyota;
......@@ -143,11 +175,10 @@ namespace SupraDrifting
Vector oikealleNopeus = oikealle * Vector.DotProduct(auto.Velocity, oikealle);
auto.Velocity = eteenNopeus + oikealleNopeus * 0.6;
bool apuarvo = false;
AddCollisionHandler(auto, "reuna", Tormays);
AddCollisionHandler(auto, "maaliviiva", LisaaKierros);
AddCollisionHandler(auto, "apuViiva", apumuuttuja);
AddCollisionHandler(auto, "apuViiva", ApuviivaStatus);
Add(auto);
......@@ -157,7 +188,10 @@ namespace SupraDrifting
void Ohjaus()
/// <summary>
/// Asettaa autolle ohjauskomennot.
/// </summary>
private void Ohjaus()
{
Keyboard.Listen(Key.Up, ButtonState.Down, auto.Accelerate, null);
......@@ -168,7 +202,13 @@ namespace SupraDrifting
}
void Tormays(PhysicsObject hahmo, PhysicsObject reuna)
/// <summary>
/// Aliohjelma tuhoaa auton, kun auto törmää reunaan ja kutsuu sen jälkeen "AloitaALusta"-aliohjelmaa.
/// </summary>
/// <param name="hahmo">törmääjä eli tässä tapauksessa auto</param>
/// <param name="reuna">törmäyksen kohde</param>
private void Tormays(PhysicsObject hahmo, PhysicsObject reuna)
{
Automobile auto = hahmo as Automobile;
......@@ -182,7 +222,11 @@ namespace SupraDrifting
}
void LuoKierrosLaskuri()
/// <summary>
/// Luo kierroslaskurin kentän vasempaan yläreunaan.
/// </summary>
private void LuoKierrosLaskuri()
{
kierroslaskuri = new IntMeter(0);
......@@ -201,7 +245,12 @@ namespace SupraDrifting
}
void LuoAikalaskuri()
/// <summary>
/// Luo ajanottokellon kentän oikeaan yläreunaan.
/// </summary>
private void LuoAikalaskuri()
{
Timer aikalaskuri = new Timer();
aikalaskuri.Start();
......@@ -226,12 +275,19 @@ namespace SupraDrifting
}
void LisaaKierros(PhysicsObject hahmo, PhysicsObject reuna)
{
/// <summary>
/// Lisää kierroksen kierroslaskuriin, kun auto ylittää maaliviivan ja jos auto on ohittanut apuviivan radan toisella puolella.
/// </summary>
/// <param name="hahmo">tässä tapauksessa auto, joka ohittaa maaliviivan</param>
/// <param name="maaliviiva">maaliviiva, jonka auto ylittää</param>
private void LisaaKierros(PhysicsObject hahmo, PhysicsObject maaliviiva)
{
Automobile auto = hahmo as Automobile;
if (reuna.Tag.ToString() == "maaliviiva")
if (maaliviiva.Tag.ToString() == "maaliviiva")
{
if (auto.Tag.ToString() == "1")
{
......@@ -243,25 +299,44 @@ namespace SupraDrifting
}
}
void apumuuttuja (PhysicsObject hahmo, PhysicsObject reuna)
/// <summary>
/// Muuntaa auton Tagin 0 --> 1, jolloin auton ylittäessä maaliviivan kierroslaskuriin lisätään kierros.
/// Jos auto ylittää maaliviivan Tagin ollessa nolla, kierroslaskuriin ei lisätä kierrosta.
/// </summary>
/// <param name="hahmo">auto, jonka Tagi muutetaan</param>
/// <param name="reuna">Apuviiva radan yläreunassa</param>
private void ApuviivaStatus (PhysicsObject hahmo, PhysicsObject reuna)
{
Automobile auto = hahmo as Automobile;
auto.Tag = 1;
}
void VoittoViesti()
/// <summary>
/// Näyttää voittoviestin ja valikon, josta pelaaja voi yrittää peliä uudestaan tai poistua pelistä.
/// </summary>
private void VoittoViesti()
{
MessageDisplay.Add("Game Finished!");
//TopAjat.EnterAndShow(aikalaskuri.SecondCounter);
//TopAjat.HighScoreWindow.Closed += AloitaAlusta2;
ClearAll();
MultiSelectWindow valikko = new MultiSelectWindow("Game Finished!", "Try again", "Exit");
valikko.Color = Color.Green;
valikko.SetButtonTextColor(Color.Black);
Add(valikko);
valikko.AddItemHandler(0, YritaUudelleen);
valikko.AddItemHandler(1, Lopeta);
}
void AloitaPeli() //Peli alkaa. Luo laskurit sitten, kun alkuvalikosta painaa "Start game".
/// <summary>
/// Peli alkaa. Luo laskurit sitten, kun alkuvalikosta painaa "Start game".
/// </summary>
private void AloitaPeli()
{
LuoKierrosLaskuri();
LuoAikalaskuri();
......@@ -269,11 +344,14 @@ namespace SupraDrifting
}
void AloitaAlusta()
/// <summary>
/// Luo näytölle valikon, jossa voi lopettaa pelin tai yrittää uudelleen peliä.
/// </summary>
private void AloitaAlusta()
{
MessageDisplay.Add("Try Again!");
ClearAll();
MultiSelectWindow valikko = new MultiSelectWindow("Lobby", "Try again", "Exit");
MultiSelectWindow valikko = new MultiSelectWindow("Failed!", "Try again", "Exit");
valikko.Color = Color.Green;
valikko.SetButtonTextColor(Color.Black);
Add(valikko);
......@@ -281,22 +359,21 @@ namespace SupraDrifting
valikko.AddItemHandler(1, Lopeta);
}
void AloitaAlusta2(Window sender)
{
MultiSelectWindow valikko = new MultiSelectWindow("Lobby", "Try again", "Exit");
valikko.Color = Color.Green;
valikko.SetButtonTextColor(Color.Black);
Add(valikko);
valikko.AddItemHandler(0, YritaUudelleen);
valikko.AddItemHandler(1, Lopeta);
}
void YritaUudelleen() // Menee alkuvalikkoon, kun lobbyssa painaa "yritä uudelleen".
/// <summary>
/// Menee alkuvalikkoon, kun lobbyssa painaa "yritä uudelleen".
/// </summary>
private void YritaUudelleen()
{
Begin();
}
void Lopeta() //Poistuu pelistä, kun lobbyssa painaa "Exit".
/// <summary>
/// Poistuu pelistä, kun lobbyssa painaa "Exit".
/// </summary>
private void Lopeta()
{
Exit();
}
......@@ -305,4 +382,8 @@ namespace SupraDrifting
}
}
using Jypeli;
using Jypeli.Assets;
using Jypeli.Controls;
using Jypeli.Widgets;
using Jypeli.Effects;
using System;
using System.Collections.Generic;
using System.Runtime.CompilerServices;
namespace SupraDrifting
{
/// @author Emil Perkkiö
/// @version 13.12.2023
public class SupraDrifting : PhysicsGame
{
private static readonly string[] RATA = {
" ",
" ",
" xxxxxxxxxxxxxxxxxxxxxxxxxx ",
" x x z x ",
" x z x ",
" x xxx xxxx x ",
" x xxxxxxxxx x ",
" x x x ",
" x x x ",
" xxxxxxxxxx x x ",
" x x xxxxx ",
" x x x ",
" x xxxxxxxxx x ",
" x xx xxxx xx ",
" x y x ",
" x x y x ",
" xxxxxxxxxxxxxxxxxxxxxxxxxx ",
" ",
" ",
};
private static readonly int tileWidth = 500 / RATA[0].Length;
private static readonly int tileHeight = 500 / RATA.Length;
private EasyHighScore TopAjat = new EasyHighScore();
//toyota.image = C:\kurssit\ohj1\ht\SupraDrifting\SupraDrifting\Content\ToyotaSupra2.jpg;
private Automobile auto;
private PhysicsObject reuna;
private IntMeter kierroslaskuri;
private PhysicsObject maaliviiva;
private Timer aikalaskuri;
//Image rajahdyskuva = LoadImage("explosion.png");
public override void Begin()
{
Level.Background.CreateGradient(Color.Green, Color.Wheat);
TileMap tiles = TileMap.FromStringArray(RATA);
tiles.SetTileMethod('x', ReunanLuonti, Color.Wheat);
tiles.SetTileMethod('y', MaaliViiva, Color.White);
tiles.SetTileMethod('z', ApuViiva, Color.Transparent);
tiles.Execute(tileWidth, tileHeight);
MultiSelectWindow alkuvalikko = new MultiSelectWindow("Lobby", "Start game", "Exit");
alkuvalikko.Color = Color.Green;
alkuvalikko.SetButtonTextColor(Color.Black);
Add(alkuvalikko);
alkuvalikko.AddItemHandler(0, AloitaPeli);
alkuvalikko.AddItemHandler(1, Lopeta);
auto = LuoAuto(120, -140);
Ohjaus();
Level.CreateBorders();
Camera.ZoomToLevel();
}
/// <summary>
/// Luo apuviivan radan yläosioon, jonka kautta pelaajan kuuluu ajaa, jotta kierroslaskuriin tulee lisää kierroksia.
/// </summary>
/// <param name="paikka">apuviivan sijainti</param>
/// <param name="leveys">apuviivan leveys</param>
/// <param name="korkeus">apuviivan korkeus</param>
/// <param name="vari">apuviivan väri</param>
private void ApuViiva(Vector paikka, double leveys, double korkeus, Color vari) // Auttaa kierrosten laskennassa.
{
PhysicsObject apuViiva = new PhysicsObject(leveys - 1, korkeus - 1);
apuViiva.Position = paikka;
apuViiva.Color = vari;
apuViiva.IgnoresCollisionResponse = true;
apuViiva.CollisionIgnoreGroup = 1;
apuViiva.Tag = "apuViiva";
Add(apuViiva);
}
/// <summary>
/// Luo reunat kenttään.
/// </summary>
/// <param name="paikka">paikka, minne reuna sijoitetaan</param>
/// <param name="leveys">reunan leveys</param>
/// <param name="korkeus">reunan korkeus</param>
/// <param name="vari">reunan väri</param>
private void ReunanLuonti(Vector paikka, double leveys, double korkeus, Color vari)
{
PhysicsObject reuna = new PhysicsObject(leveys - 1, korkeus - 1);
reuna.Position = paikka;
reuna.Color = vari;
reuna.Mass = 20000;
reuna.Tag = "reuna";
Add(reuna);
}
/// <summary>
/// Luo maaliviivan kentälle.
/// </summary>
/// <param name="paikka">paikka, minne maaliviiva luodaan</param>
/// <param name="leveys">maaliviivan leveys</param>
/// <param name="korkeus">maaliviivan korkeus</param>
/// <param name="vari">maaliviivan väri</param>
private void MaaliViiva(Vector paikka, double leveys, double korkeus, Color vari)
{
PhysicsObject maaliviiva = new PhysicsObject(leveys - 12, korkeus);
maaliviiva.Position = paikka;
maaliviiva.Color = vari;
maaliviiva.IgnoresCollisionResponse = true;
maaliviiva.CollisionIgnoreGroup = 1;
maaliviiva.Tag = "maaliviiva";
Add(maaliviiva);
}
/// <summary>
/// Luo auton peliin Jypelin Automobile ominaisuuksilla.
/// </summary>
/// <param name="x">auton aloituspaikan x-koordinaatti</param>
/// <param name="y">auton aloituspaikan y-koordinaatti</param>
/// <returns></returns>
private Automobile LuoAuto(double x, double y)
{
Automobile auto = new Automobile(22.0, 22.0);
auto.X = x;
auto.Y = y;
auto.Acceleration = 50;
auto.BrakeDeceleration = 40;
auto.MaxVelocity = 55;
auto.Maneuverability = Angle.FromDegrees(300);
auto.Mass = 45;
auto.ApplyTorque(100);
auto.MomentOfInertia = 20;
auto.Tag = 0;
//auto.image = Toyota;
Vector eteen = new Vector(100, 0);
Vector oikealle = eteen.RightNormal;
Vector eteenNopeus = eteen * Vector.DotProduct(auto.Velocity, eteen);
Vector oikealleNopeus = oikealle * Vector.DotProduct(auto.Velocity, oikealle);
auto.Velocity = eteenNopeus + oikealleNopeus * 0.6;
AddCollisionHandler(auto, "reuna", Tormays);
AddCollisionHandler(auto, "maaliviiva", LisaaKierros);
AddCollisionHandler(auto, "apuViiva", ApuviivaStatus);
Add(auto);
return auto;
}
/// <summary>
/// Asettaa autolle ohjauskomennot.
/// </summary>
private void Ohjaus()
{
Keyboard.Listen(Key.Up, ButtonState.Down, auto.Accelerate, null);
Keyboard.Listen(Key.Up, ButtonState.Up, auto.Brake, null);
Keyboard.Listen(Key.Down, ButtonState.Down, auto.Reverse, null);
Keyboard.Listen(Key.Left, ButtonState.Down, () => auto.Turn(auto.Maneuverability, Time.SinceLastUpdate.TotalSeconds), null);
Keyboard.Listen(Key.Right, ButtonState.Down, () => auto.Turn(-auto.Maneuverability, Time.SinceLastUpdate.TotalSeconds), null);
}
/// <summary>
/// Aliohjelma tuhoaa auton, kun auto törmää reunaan ja kutsuu sen jälkeen "AloitaALusta"-aliohjelmaa.
/// </summary>
/// <param name="hahmo">törmääjä eli tässä tapauksessa auto</param>
/// <param name="reuna">törmäyksen kohde</param>
private void Tormays(PhysicsObject hahmo, PhysicsObject reuna)
{
Automobile auto = hahmo as Automobile;
if (reuna.Tag.ToString() == "reuna")
{
auto.Destroy();
}
AloitaAlusta();
}
/// <summary>
/// Luo kierroslaskurin kentän vasempaan yläreunaan.
/// </summary>
private void LuoKierrosLaskuri()
{
kierroslaskuri = new IntMeter(0);
Label kierroskentta = new Label();
kierroskentta.X = Screen.Left + 100;
kierroskentta.Y = Screen.Top - 100;
kierroskentta.TextColor = Color.Black;
kierroskentta.Color = Color.Transparent;
kierroskentta.Title = "Kierros: ";
kierroslaskuri.MaxValue = 3;
kierroslaskuri.UpperLimit += VoittoViesti;
kierroskentta.BindTo(kierroslaskuri);
Add(kierroskentta);
}
/// <summary>
/// Luo ajanottokellon kentän oikeaan yläreunaan.
/// </summary>
private void LuoAikalaskuri()
{
Timer aikalaskuri = new Timer();
aikalaskuri.Start();
Label aikanaytto = new Label();
aikanaytto.X = Screen.Right - 100;
aikanaytto.Y = Screen.Top - 100;
aikanaytto.TextColor = Color.Black;
aikanaytto.Color = Color.Transparent;
aikanaytto.Title = "Aika: ";
aikanaytto.DecimalPlaces = 1;
aikanaytto.BindTo(aikalaskuri.SecondCounter);
if (kierroslaskuri == kierroslaskuri.MaxValue)
{
aikalaskuri.Stop();
VoittoViesti();
}
Add(aikanaytto);
}
/// <summary>
/// Lisää kierroksen kierroslaskuriin, kun auto ylittää maaliviivan ja jos auto on ohittanut apuviivan radan toisella puolella.
/// </summary>
/// <param name="hahmo">tässä tapauksessa auto, joka ohittaa maaliviivan</param>
/// <param name="maaliviiva">maaliviiva, jonka auto ylittää</param>
private void LisaaKierros(PhysicsObject hahmo, PhysicsObject maaliviiva)
{
Automobile auto = hahmo as Automobile;
if (maaliviiva.Tag.ToString() == "maaliviiva")
{
if (auto.Tag.ToString() == "1")
{
kierroslaskuri.Value++;
auto.Tag = 0;
}
}
}
/// <summary>
/// Muuntaa auton Tagin 0 --> 1, jolloin auton ylittäessä maaliviivan kierroslaskuriin lisätään kierros.
/// Jos auto ylittää maaliviivan Tagin ollessa nolla, kierroslaskuriin ei lisätä kierrosta.
/// </summary>
/// <param name="hahmo">auto, jonka Tagi muutetaan</param>
/// <param name="reuna">Apuviiva radan yläreunassa</param>
private void ApuviivaStatus (PhysicsObject hahmo, PhysicsObject reuna)
{
Automobile auto = hahmo as Automobile;
auto.Tag = 1;
}
/// <summary>
/// Näyttää voittoviestin ja valikon, josta pelaaja voi yrittää peliä uudestaan tai poistua pelistä.
/// </summary>
private void VoittoViesti()
{
ClearAll();
MultiSelectWindow valikko = new MultiSelectWindow("Game Finished!", "Try again", "Exit");
valikko.Color = Color.Green;
valikko.SetButtonTextColor(Color.Black);
Add(valikko);
valikko.AddItemHandler(0, YritaUudelleen);
valikko.AddItemHandler(1, Lopeta);
}
/// <summary>
/// Peli alkaa. Luo laskurit sitten, kun alkuvalikosta painaa "Start game".
/// </summary>
private void AloitaPeli()
{
LuoKierrosLaskuri();
LuoAikalaskuri();
}
/// <summary>
/// Luo näytölle valikon, jossa voi lopettaa pelin tai yrittää uudelleen peliä.
/// </summary>
private void AloitaAlusta()
{
ClearAll();
MultiSelectWindow valikko = new MultiSelectWindow("Failed!", "Try again", "Exit");
valikko.Color = Color.Green;
valikko.SetButtonTextColor(Color.Black);
Add(valikko);
valikko.AddItemHandler(0, YritaUudelleen);
valikko.AddItemHandler(1, Lopeta);
}
/// <summary>
/// Menee alkuvalikkoon, kun lobbyssa painaa "yritä uudelleen".
/// </summary>
private void YritaUudelleen()
{
Begin();
}
/// <summary>
/// Poistuu pelistä, kun lobbyssa painaa "Exit".
/// </summary>
private void Lopeta()
{
Exit();
}
}
}
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>WinExe</OutputType>
<TargetFramework>net6.0</TargetFramework>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Jypeli.NET" Version="11.*" />
<PackageReference Include="Jypeli.FarseerPhysics.NET" Version="2.*" />
</ItemGroup>
<ItemGroup>
<Folder Include="NewFolder1\" />
<Folder Include="NewFolder2\" />
<Folder Include="NewFolder3\" />
<Folder Include="NewFolder\" />
</ItemGroup>
</Project>

Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio Version 17
VisualStudioVersion = 17.8.34330.188
MinimumVisualStudioVersion = 10.0.40219.1
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SupraDrifting", "SupraDrifting\SupraDrifting.csproj", "{73EA5C97-0519-4A9A-9168-C2CB9B8EEF3C}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
Release|Any CPU = Release|Any CPU
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{73EA5C97-0519-4A9A-9168-C2CB9B8EEF3C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{73EA5C97-0519-4A9A-9168-C2CB9B8EEF3C}.Debug|Any CPU.Build.0 = Debug|Any CPU
{73EA5C97-0519-4A9A-9168-C2CB9B8EEF3C}.Release|Any CPU.ActiveCfg = Release|Any CPU
{73EA5C97-0519-4A9A-9168-C2CB9B8EEF3C}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {EA2F1AFF-668D-48A8-83C7-8E008A62C7C6}
EndGlobalSection
EndGlobal
SupraDrifting/SupraDrifting/SupraDrifting/Content/ToyotaSupra2.jpg

11.3 KiB

SupraDrifting/SupraDrifting/SupraDrifting/Content/explosion.png

100 KiB

#region Using Statements
using System;
using System.Collections.Generic;
using System.Linq;
#endregion
namespace SupraDrifting
{
/// <summary>
/// The main class.
/// </summary>
public static class Program
{
/// <summary>
/// The main entry point for the application.
/// </summary>
[STAThread]
static void Main()
{
using var game = new SupraDrifting();
game.Run();
}
}
}
using Jypeli;
using Jypeli.Assets;
using Jypeli.Controls;
using Jypeli.Widgets;
using Jypeli.Effects;
using System;
using System.Collections.Generic;
using System.Runtime.CompilerServices;
namespace SupraDrifting
{
/// @author Emil Perkkiö
/// @version 13.12.2023
public class SupraDrifting : PhysicsGame
{
private static readonly string[] RATA = {
" ",
" ",
" xxxxxxxxxxxxxxxxxxxxxxxxxx ",
" x x z x ",
" x z x ",
" x xxx xxxx x ",
" x xxxxxxxxx x ",
" x x x ",
" x x x ",
" xxxxxxxxxx x x ",
" x x xxxxx ",
" x x x ",
" x xxxxxxxxx x ",
" x xx xxxx xx ",
" x y x ",
" x x y x ",
" xxxxxxxxxxxxxxxxxxxxxxxxxx ",
" ",
" ",
};
private static readonly int tileWidth = 500 / RATA[0].Length;
private static readonly int tileHeight = 500 / RATA.Length;
private EasyHighScore TopAjat = new EasyHighScore();
//toyota.image = C:\kurssit\ohj1\ht\SupraDrifting\SupraDrifting\Content\ToyotaSupra2.jpg;
private Automobile auto;
private PhysicsObject reuna;
private IntMeter kierroslaskuri;
private PhysicsObject maaliviiva;
private Timer aikalaskuri;
//Image rajahdyskuva = LoadImage("explosion.png");
public override void Begin()
{
Level.Background.CreateGradient(Color.Green, Color.Wheat);
TileMap tiles = TileMap.FromStringArray(RATA);
tiles.SetTileMethod('x', ReunanLuonti, Color.Wheat);
tiles.SetTileMethod('y', MaaliViiva, Color.White);
tiles.SetTileMethod('z', ApuViiva, Color.Transparent);
tiles.Execute(tileWidth, tileHeight);
MultiSelectWindow alkuvalikko = new MultiSelectWindow("Lobby", "Start game", "Exit");
alkuvalikko.Color = Color.Green;
alkuvalikko.SetButtonTextColor(Color.Black);
Add(alkuvalikko);
alkuvalikko.AddItemHandler(0, AloitaPeli);
alkuvalikko.AddItemHandler(1, Lopeta);
auto = LuoAuto(120, -140);
Ohjaus();
Level.CreateBorders();
Camera.ZoomToLevel();
}
/// <summary>
/// Luo apuviivan radan yläosioon, jonka kautta pelaajan kuuluu ajaa, jotta kierroslaskuriin tulee lisää kierroksia.
/// </summary>
/// <param name="paikka">apuviivan sijainti</param>
/// <param name="leveys">apuviivan leveys</param>
/// <param name="korkeus">apuviivan korkeus</param>
/// <param name="vari">apuviivan väri</param>
private void ApuViiva(Vector paikka, double leveys, double korkeus, Color vari) // Auttaa kierrosten laskennassa.
{
PhysicsObject apuViiva = new PhysicsObject(leveys - 1, korkeus - 1);
apuViiva.Position = paikka;
apuViiva.Color = vari;
apuViiva.IgnoresCollisionResponse = true;
apuViiva.CollisionIgnoreGroup = 1;
apuViiva.Tag = "apuViiva";
Add(apuViiva);
}
/// <summary>
/// Luo reunat kenttään.
/// </summary>
/// <param name="paikka">paikka, minne reuna sijoitetaan</param>
/// <param name="leveys">reunan leveys</param>
/// <param name="korkeus">reunan korkeus</param>
/// <param name="vari">reunan väri</param>
private void ReunanLuonti(Vector paikka, double leveys, double korkeus, Color vari)
{
PhysicsObject reuna = new PhysicsObject(leveys - 1, korkeus - 1);
reuna.Position = paikka;
reuna.Color = vari;
reuna.Mass = 20000;
reuna.Tag = "reuna";
Add(reuna);
}
/// <summary>
/// Luo maaliviivan kentälle.
/// </summary>
/// <param name="paikka">paikka, minne maaliviiva luodaan</param>
/// <param name="leveys">maaliviivan leveys</param>
/// <param name="korkeus">maaliviivan korkeus</param>
/// <param name="vari">maaliviivan väri</param>
private void MaaliViiva(Vector paikka, double leveys, double korkeus, Color vari)
{
PhysicsObject maaliviiva = new PhysicsObject(leveys - 12, korkeus);
maaliviiva.Position = paikka;
maaliviiva.Color = vari;
maaliviiva.IgnoresCollisionResponse = true;
maaliviiva.CollisionIgnoreGroup = 1;
maaliviiva.Tag = "maaliviiva";
Add(maaliviiva);
}
/// <summary>
/// Luo auton peliin Jypelin Automobile ominaisuuksilla.
/// </summary>
/// <param name="x">auton aloituspaikan x-koordinaatti</param>
/// <param name="y">auton aloituspaikan y-koordinaatti</param>
/// <returns></returns>
private Automobile LuoAuto(double x, double y)
{
Automobile auto = new Automobile(22.0, 22.0);
auto.X = x;
auto.Y = y;
auto.Acceleration = 50;
auto.BrakeDeceleration = 40;
auto.MaxVelocity = 55;
auto.Maneuverability = Angle.FromDegrees(300);
auto.Mass = 45;
auto.ApplyTorque(100);
auto.MomentOfInertia = 20;
auto.Tag = 0;
//auto.image = Toyota;
Vector eteen = new Vector(100, 0);
Vector oikealle = eteen.RightNormal;
Vector eteenNopeus = eteen * Vector.DotProduct(auto.Velocity, eteen);
Vector oikealleNopeus = oikealle * Vector.DotProduct(auto.Velocity, oikealle);
auto.Velocity = eteenNopeus + oikealleNopeus * 0.6;
AddCollisionHandler(auto, "reuna", Tormays);
AddCollisionHandler(auto, "maaliviiva", LisaaKierros);
AddCollisionHandler(auto, "apuViiva", ApuviivaStatus);
Add(auto);
return auto;
}
/// <summary>
/// Asettaa autolle ohjauskomennot.
/// </summary>
private void Ohjaus()
{
Keyboard.Listen(Key.Up, ButtonState.Down, auto.Accelerate, null);
Keyboard.Listen(Key.Up, ButtonState.Up, auto.Brake, null);
Keyboard.Listen(Key.Down, ButtonState.Down, auto.Reverse, null);
Keyboard.Listen(Key.Left, ButtonState.Down, () => auto.Turn(auto.Maneuverability, Time.SinceLastUpdate.TotalSeconds), null);
Keyboard.Listen(Key.Right, ButtonState.Down, () => auto.Turn(-auto.Maneuverability, Time.SinceLastUpdate.TotalSeconds), null);
}
/// <summary>
/// Aliohjelma tuhoaa auton, kun auto törmää reunaan ja kutsuu sen jälkeen "AloitaALusta"-aliohjelmaa.
/// </summary>
/// <param name="hahmo">törmääjä eli tässä tapauksessa auto</param>
/// <param name="reuna">törmäyksen kohde</param>
private void Tormays(PhysicsObject hahmo, PhysicsObject reuna)
{
Automobile auto = hahmo as Automobile;
if (reuna.Tag.ToString() == "reuna")
{
auto.Destroy();
}
AloitaAlusta();
}
/// <summary>
/// Luo kierroslaskurin kentän vasempaan yläreunaan.
/// </summary>
private void LuoKierrosLaskuri()
{
kierroslaskuri = new IntMeter(0);
Label kierroskentta = new Label();
kierroskentta.X = Screen.Left + 100;
kierroskentta.Y = Screen.Top - 100;
kierroskentta.TextColor = Color.Black;
kierroskentta.Color = Color.Transparent;
kierroskentta.Title = "Kierros: ";
kierroslaskuri.MaxValue = 3;
kierroslaskuri.UpperLimit += VoittoViesti;
kierroskentta.BindTo(kierroslaskuri);
Add(kierroskentta);
}
/// <summary>
/// Luo ajanottokellon kentän oikeaan yläreunaan.
/// </summary>
private void LuoAikalaskuri()
{
Timer aikalaskuri = new Timer();
aikalaskuri.Start();
Label aikanaytto = new Label();
aikanaytto.X = Screen.Right - 100;
aikanaytto.Y = Screen.Top - 100;
aikanaytto.TextColor = Color.Black;
aikanaytto.Color = Color.Transparent;
aikanaytto.Title = "Aika: ";
aikanaytto.DecimalPlaces = 1;
aikanaytto.BindTo(aikalaskuri.SecondCounter);
if (kierroslaskuri == kierroslaskuri.MaxValue)
{
aikalaskuri.Stop();
VoittoViesti();
}
Add(aikanaytto);
}
/// <summary>
/// Lisää kierroksen kierroslaskuriin, kun auto ylittää maaliviivan ja jos auto on ohittanut apuviivan radan toisella puolella.
/// </summary>
/// <param name="hahmo">tässä tapauksessa auto, joka ohittaa maaliviivan</param>
/// <param name="maaliviiva">maaliviiva, jonka auto ylittää</param>
private void LisaaKierros(PhysicsObject hahmo, PhysicsObject maaliviiva)
{
Automobile auto = hahmo as Automobile;
if (maaliviiva.Tag.ToString() == "maaliviiva")
{
if (auto.Tag.ToString() == "1")
{
kierroslaskuri.Value++;
auto.Tag = 0;
}
}
}
/// <summary>
/// Muuntaa auton Tagin 0 --> 1, jolloin auton ylittäessä maaliviivan kierroslaskuriin lisätään kierros.
/// Jos auto ylittää maaliviivan Tagin ollessa nolla, kierroslaskuriin ei lisätä kierrosta.
/// </summary>
/// <param name="hahmo">auto, jonka Tagi muutetaan</param>
/// <param name="reuna">Apuviiva radan yläreunassa</param>
private void ApuviivaStatus (PhysicsObject hahmo, PhysicsObject reuna)
{
Automobile auto = hahmo as Automobile;
auto.Tag = 1;
}
/// <summary>
/// Näyttää voittoviestin ja valikon, josta pelaaja voi yrittää peliä uudestaan tai poistua pelistä.
/// </summary>
private void VoittoViesti()
{
ClearAll();
MultiSelectWindow valikko = new MultiSelectWindow("Game Finished!", "Try again", "Exit");
valikko.Color = Color.Green;
valikko.SetButtonTextColor(Color.Black);
Add(valikko);
valikko.AddItemHandler(0, YritaUudelleen);
valikko.AddItemHandler(1, Lopeta);
}
/// <summary>
/// Peli alkaa. Luo laskurit sitten, kun alkuvalikosta painaa "Start game".
/// </summary>
private void AloitaPeli()
{
LuoKierrosLaskuri();
LuoAikalaskuri();
}
/// <summary>
/// Luo näytölle valikon, jossa voi lopettaa pelin tai yrittää uudelleen peliä.
/// </summary>
private void AloitaAlusta()
{
ClearAll();
MultiSelectWindow valikko = new MultiSelectWindow("Failed!", "Try again", "Exit");
valikko.Color = Color.Green;
valikko.SetButtonTextColor(Color.Black);
Add(valikko);
valikko.AddItemHandler(0, YritaUudelleen);
valikko.AddItemHandler(1, Lopeta);
}
/// <summary>
/// Menee alkuvalikkoon, kun lobbyssa painaa "yritä uudelleen".
/// </summary>
private void YritaUudelleen()
{
Begin();
}
/// <summary>
/// Poistuu pelistä, kun lobbyssa painaa "Exit".
/// </summary>
private void Lopeta()
{
Exit();
}
}
}
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>WinExe</OutputType>
<TargetFramework>net6.0</TargetFramework>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Jypeli.NET" Version="11.*" />
<PackageReference Include="Jypeli.FarseerPhysics.NET" Version="2.*" />
</ItemGroup>
<ItemGroup>
<Folder Include="NewFolder1\" />
<Folder Include="NewFolder2\" />
<Folder Include="NewFolder3\" />
<Folder Include="NewFolder\" />
</ItemGroup>
</Project>
SupraDrifting/SupraDrifting/SupraDrifting/ToyotaSupra.jpg

6.9 KiB

SupraDrifting/SupraDrifting/SupraDrifting/ToyotaSupra2.jpg

11.3 KiB

SupraDrifting/SupraDrifting/SupraDrifting/explosion.png

100 KiB

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