diff --git a/Financial_Freedom/Financial_Freedom/Data/toplistsave.txt b/Financial_Freedom/Financial_Freedom/Data/toplistsave.txt index 1bce4d67a7962f9177f065bfe7d86b925383e4ca..22e5108c733ca39682e053936109172e8ce43cc9 100644 --- a/Financial_Freedom/Financial_Freedom/Data/toplistsave.txt +++ b/Financial_Freedom/Financial_Freedom/Data/toplistsave.txt @@ -53,10 +53,10 @@ </Item> <Item Index="6" Type="Jypeli.ScoreItem, Jypeli, Version=11.3.7.0, Culture=neutral, PublicKeyToken=null"> <Field Name="Name" Type="System.String, System.Private.CoreLib, Version=8.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e"> - <Value>Jollu</Value> + <Value>-</Value> </Field> <Field Name="Score" Type="System.Double, System.Private.CoreLib, Version=8.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e"> - <Value>6969696969</Value> + <Value>0</Val3ue> </Field> </Item> <Item Index="7" Type="Jypeli.ScoreItem, Jypeli, Version=11.3.7.0, Culture=neutral, PublicKeyToken=null"> diff --git a/Financial_Freedom/Financial_Freedom/Financial_Freedom.cs b/Financial_Freedom/Financial_Freedom/Financial_Freedom.cs index dd2fabc7f3178b5de3d10c8ce066d73dd38f91d8..cd47c331f16d3f9ba5c05aed81396e9ff65dcc44 100644 --- a/Financial_Freedom/Financial_Freedom/Financial_Freedom.cs +++ b/Financial_Freedom/Financial_Freedom/Financial_Freedom.cs @@ -45,7 +45,6 @@ using Window = Jypeli.Window; namespace Financial_Freedom{ - public class Card // tehdään kortit { public string Suit { get; }// hakee pelikortin maan @@ -104,6 +103,9 @@ public class Financial_Freedom : PhysicsGame private List<Card> pelaajanKortit = new List<Card>(); // Pelaajan kortit kentäksi private List<Card> jakajanKortit; // Jakajan kortit kentäksi + private List<string> clickLog = new List<string>(); //ruletin panostuksen clikkailulogi + private GameObject doneButton = null; + private int peliKesken = 0; private double kerroinCF = 1; // Pelin kerroin, joka kasvaa voiton myötä @@ -118,7 +120,7 @@ public class Financial_Freedom : PhysicsGame private bool AloitusRaha = false; private Timer aikaLaskuri; private double lopetusAika; - private EasyHighScore topLista = new ("toplistsave.txt", 10); + private EasyHighScore topLista = new ("toplistsave.txt", 10, "-"); private bool voitto; @@ -276,7 +278,7 @@ public class Financial_Freedom : PhysicsGame { lopetusAika = aikaLaskuri.SecondCounter.Value; Console.WriteLine("lopetusaika on "+aikaLaskuri.SecondCounter.Value); - finalscore = Math.Round((highScore-1000)/lopetusAika, 2); + finalscore = Math.Round((highScore-1000)/(lopetusAika/10), 0); Console.WriteLine(highScore+"-1000 on "+ (highScore-1000)+" ja se jaetaan "+lopetusAika+" tulee "+((highScore-1000)/lopetusAika)); Console.WriteLine("finalscore: "+finalscore); } @@ -992,16 +994,7 @@ public class Financial_Freedom : PhysicsGame bjDoubled = false; } - Label uusi = new Label("Haluatko aloittaa uuden kierroksen samalla panoksella (n), vaihtaa panosta (p) vai poistua pelistä (0)?") - { - Color = Color.White, - Position = new Vector(0, -105), // Asetetaan sijainti - }; - Add(uusi); - peliKesken -= 1; - Keyboard.Listen(Key.P, ButtonState.Pressed, async () => await BlackJack(), "uus kiesi uudella panoksella"); // MUUTA MYÖHEMMIN KOSKA UUSI KIESI LUO UUDEN PAKAN - Keyboard.Listen(Key.N, ButtonState.Pressed, async () => await EnsimmäinenBJ(), "uus kiesi"); - TakaisinPV(); + endScreenBJ(); } else if (pelaajanSumma > 21) @@ -1012,16 +1005,7 @@ public class Financial_Freedom : PhysicsGame Position = new Vector(0, -75), // Asetetaan sijainti }; Add(tulosLabel); - Label uusi = new Label("Haluatko aloittaa uuden kierroksen samalla panoksella (n), vaihtaa panosta (p) vai poistua pelistä (0)?") - { - Color = Color.White, - Position = new Vector(0, -105), // Asetetaan sijainti - }; - Add(uusi); - peliKesken -= 1; - Keyboard.Listen(Key.P, ButtonState.Pressed, async () => await BlackJack(), "uus kiesi uudella panoksella"); // MUUTA MYÖHEMMIN KOSKA UUSI KIESI LUO UUDEN PAKAN - Keyboard.Listen(Key.N, ButtonState.Pressed, async () => await EnsimmäinenBJ(), "uus kiesi"); - TakaisinPV(); + endScreenBJ(); } else if (jakajanSumma == pelaajanSumma) @@ -1038,16 +1022,7 @@ public class Financial_Freedom : PhysicsGame pistelaskuri.Value += panos * yTs; bjDoubled = false; } - Label uusi = new Label("Haluatko aloittaa uuden kierroksen samalla panoksella (n), vaihtaa panosta (p) vai poistua pelistä (0)?") - { - Color = Color.White, - Position = new Vector(0, -105), // Asetetaan sijainti - }; - Add(uusi); - peliKesken -= 1; - Keyboard.Listen(Key.P, ButtonState.Pressed, async () => await BlackJack(), "uus kiesi uudella panoksella"); // MUUTA MYÖHEMMIN KOSKA UUSI KIESI LUO UUDEN PAKAN - Keyboard.Listen(Key.N, ButtonState.Pressed, async () => await EnsimmäinenBJ(), "uus kiesi"); - TakaisinPV(); + endScreenBJ(); } else if (jakajanSumma < pelaajanSumma && pelaajanSumma <= 21) @@ -1064,17 +1039,7 @@ public class Financial_Freedom : PhysicsGame pistelaskuri.Value += 2 * panos * yTs; bjDoubled = false; } - - Label uusi = new Label("Haluatko aloittaa uuden kierroksen samalla panoksella (n), vaihtaa panosta (p) vai poistua pelistä (0)?") - { - Color = Color.White, - Position = new Vector(0, -105), // Asetetaan sijainti - }; - Add(uusi); - peliKesken -= 1; - Keyboard.Listen(Key.P, ButtonState.Pressed, async () => await BlackJack(), "uus kiesi uudella panoksella"); // MUUTA MYÖHEMMIN KOSKA UUSI KIESI LUO UUDEN PAKAN - Keyboard.Listen(Key.N, ButtonState.Pressed, async () => await EnsimmäinenBJ(), "uus kiesi"); - TakaisinPV(); + endScreenBJ(); } else if (pelaajanSumma < jakajanSumma && jakajanSumma <= 21) @@ -1085,16 +1050,7 @@ public class Financial_Freedom : PhysicsGame Position = new Vector(0, -75), // Asetetaan sijainti }; Add(tulosLabel); - Label uusi = new Label("Haluatko aloittaa uuden kierroksen samalla panoksella (n), vaihtaa panosta (p) vai poistua pelistä (0)?") - { - Color = Color.White, - Position = new Vector(0, -105), // Asetetaan sijainti - }; - Add(uusi); - peliKesken -= 1; - Keyboard.Listen(Key.P, ButtonState.Pressed, async () => await BlackJack(), "uus kiesi uudella panoksella"); // MUUTA MYÖHEMMIN KOSKA UUSI KIESI LUO UUDEN PAKAN - Keyboard.Listen(Key.N, ButtonState.Pressed, async () => await EnsimmäinenBJ(), "uus kiesi"); - TakaisinPV(); + endScreenBJ(); } else if (pelaajanSumma <= 21 && jakajanSumma > 21) { @@ -1110,21 +1066,27 @@ public class Financial_Freedom : PhysicsGame pistelaskuri.Value += 2 * panos * yTs; bjDoubled = false; } - - Label uusi = new Label("Haluatko aloittaa uuden kierroksen samalla panoksella (n), vaihtaa panosta (p) vai poistua pelistä (0)?") - { - Color = Color.White, - Position = new Vector(0, -105), // Asetetaan sijainti - }; - Add(uusi); - peliKesken -= 1; - Keyboard.Listen(Key.P, ButtonState.Pressed, async () => await BlackJack(), "uus kiesi uudella panoksella"); // MUUTA MYÖHEMMIN KOSKA UUSI KIESI LUO UUDEN PAKAN - Keyboard.Listen(Key.N, ButtonState.Pressed, async () => await EnsimmäinenBJ(), "uus kiesi"); - TakaisinPV(); + + endScreenBJ(); + } TakaisinPV(); } + + public void endScreenBJ() + { + Label uusi = new Label("Haluatko aloittaa uuden kierroksen samalla panoksella (n), vaihtaa panosta (p) vai poistua pelistä (0)?") + { + Color = Color.White, + Position = new Vector(0, -105), // Asetetaan sijainti + }; + Add(uusi); + peliKesken -= 1; + Keyboard.Listen(Key.P, ButtonState.Pressed, async () => await BlackJack(), "uus kiesi uudella panoksella"); // MUUTA MYÖHEMMIN KOSKA UUSI KIESI LUO UUDEN PAKAN + Keyboard.Listen(Key.N, ButtonState.Pressed, async () => await EnsimmäinenBJ(), "uus kiesi"); + TakaisinPV(); + } // Luo korttipakka public List<Card> LuoPakka() // luo korttipakan no shit sherlock @@ -1143,7 +1105,7 @@ public class Financial_Freedom : PhysicsGame //sekoittaa pakan - public static void SekoitaPakka(List<Card> pakka) // oisko vaikka että sekoittaa pakan + public void SekoitaPakka(List<Card> pakka) // oisko vaikka että sekoittaa pakan { Random rand = new Random(); int n = pakka.Count; @@ -1373,7 +1335,7 @@ public class Financial_Freedom : PhysicsGame /// <param name="peli"></param> /// <param name="x">paikka x-akseliilla</param> /// <param name="y">paikka y-akselilla</param> - public static void EstePlinko(Game peli, double x,double y) + public void EstePlinko(Game peli, double x,double y) { PhysicsObject este = new PhysicsObject(10, 10, Shape.Circle, x, y ); este.Restitution = 0.5; @@ -1385,24 +1347,274 @@ public class Financial_Freedom : PhysicsGame public async Task Ruletti() { panosAsetettu = new TaskCompletionSource<bool>(false); + ClearGameObjects(); ClearControls(); Add(pistenaytto); await LisaaPanos(); - panosAsetettu.TrySetResult(true); - PhysicsObject p = new PhysicsObject(200, 300, Shape.Rectangle, 1, 200); - Add(p); + + await LuoPanostusAlue(); TakaisinPV(); } + + public async Task LuoPanostusAlue() + { + // Tyhjennetään välimuisti aina uuden alueen luomisen yhteydessä + if (clickLog.Count > 0) + { + clickLog.Clear(); + } + + // Nollataan valmis-nappi, jotta se luodaan uudelleen tarvittaessa + doneButton = null; + + ClearGameObjects(); + ClearControls(); + + // Tausta panostusalueelle + GameObject panostusAlue = new GameObject(Screen.Width / 4, Screen.Height / 2, Shape.Rectangle); + panostusAlue.Color = Color.DarkGreen; + panostusAlue.Position = new Vector(0,0); + Add(panostusAlue); + + // Grid-asetukset numeroiden nappeihin + int buttonSize = 50; + int padding = 5; + int buttonsPerRow = 6; // Nappeja per rivi + int totalButtons = 36; + + // Lasketaan gridin kokonaisleveys ja -korkeus + double gridWidth = buttonsPerRow * buttonSize + (buttonsPerRow - 1) * padding; + int totalRows = (totalButtons + buttonsPerRow - 1) / buttonsPerRow; // Pyöristys ylöspäin + double gridHeight = totalRows * buttonSize + (totalRows - 1) * padding; + + // Asetetaan gridin aloituskohta panostusalueen sisällä niin, että se on keskitetty + double startX = panostusAlue.Position.X - gridWidth / 2 + buttonSize / 2; + double startY = panostusAlue.Position.Y + panostusAlue.Height / 2 - gridHeight / 2 - buttonSize / 2; + + for (int i = 0; i < totalButtons; i++) + { + int currentNumber = i+1; // pitää skipata 0 toistaiseksi, niille myöhemmin omat napit + int row = i / buttonsPerRow; + int col = i % buttonsPerRow; + + // Lasketaan napin sijainti gridissä + double x = startX + col * (buttonSize + padding); + double y = startY - row * (buttonSize + padding); + + GameObject numeroPanos = new GameObject(buttonSize, buttonSize); + // Vaihdetaan väri parillisen ja parittoman mukaan + if (currentNumber < 11) + { + numeroPanos.Color = (currentNumber % 2 == 0) ? Color.Black : Color.Red; + } + else if (10 < currentNumber) + { + if (currentNumber < 29) + { + if (currentNumber < 19) + { + numeroPanos.Color = (currentNumber % 2 == 0) ? Color.Red : Color.Black; + } + else + { + numeroPanos.Color = (currentNumber % 2 == 0) ? Color.Black : Color.Red; + } + } + else + { + numeroPanos.Color = (currentNumber % 2 == 0) ? Color.Red : Color.Black; + } + } + + numeroPanos.Position = new Vector(x, y); + numeroPanos.Tag = currentNumber; + Add(numeroPanos); + + Label numeroLabel = new Label(buttonSize, buttonSize); + numeroLabel.Text = currentNumber.ToString(); + numeroLabel.TextColor = Color.White; + numeroLabel.Position = new Vector(x, y); + numeroPanos.Add(numeroLabel); + + // Rekisteröidään napin hiiriklikkaus käyttäen paikallista muuttujaa + Mouse.Listen(MouseButton.Left, ButtonState.Pressed, () => + { + if (numeroPanos.IsInside(Mouse.PositionOnScreen)) + { + // Tallennetaan vain numero välimuistiin + clickLog.Add(numeroPanos.Tag.ToString()); + AsetaPanos((int)numeroPanos.Tag); + if (doneButton == null) + { + CreateDoneButton(); + } + } + }, "Aseta panos numerolle " + currentNumber); + } + + GameObject gOPanos = new GameObject(150, 50); + gOPanos.Color = Color.LimeGreen; + // Asetetaan nappi hieman panostusalueen alapuolelle + gOPanos.Position = new Vector(-80, 140); + Add(gOPanos); + + Label gOLabel = new Label(150, 50); + gOLabel.Text = "0"; + gOLabel.TextColor = Color.White; + gOLabel.Position = new Vector(-80, 140); + gOPanos.Add(gOLabel); + + Mouse.Listen(MouseButton.Left, ButtonState.Pressed, () => + { + if (gOPanos.IsInside(Mouse.PositionOnScreen)) + { + // Tallennetaan nolla välimuistiin + clickLog.Add("0"); + AsetaPanosNollat("0"); + if (doneButton == null) + { + CreateDoneButton(); + } + } + }, "Aseta panos nollalle"); + + GameObject gO0Panos = new GameObject(150, 50); + gO0Panos.Color = Color.LimeGreen; + // Asetetaan nappi hieman panostusalueen alapuolelle + gO0Panos.Position = new Vector(80, 140); + Add(gO0Panos); + + Label gO0Label = new Label(150, 50); + gO0Label.Text = "00"; + gO0Label.TextColor = Color.White; + gO0Label.Position = new Vector(80, 140); + gO0Panos.Add(gO0Label); + + Mouse.Listen(MouseButton.Left, ButtonState.Pressed, () => + { + if (gO0Panos.IsInside(Mouse.PositionOnScreen)) + { + // Tallennetaan tuplanolla välimuistiin + clickLog.Add("00"); + AsetaPanosNollat("00"); + if (doneButton == null) + { + CreateDoneButton(); + } + } + }, "Aseta panos tuplanollalle"); + + GameObject punainenPanos = new GameObject(165, 60); + punainenPanos.Color = Color.Red; + // Asetetaan nappi hieman panostusalueen alapuolelle + punainenPanos.Position = new Vector(-85, 205); + Add(punainenPanos); + + Label punainenLabel = new Label(165, 60); + punainenLabel.Text = "Punainen"; + punainenLabel.TextColor = Color.White; + punainenLabel.Position = new Vector(-85, 205); + punainenPanos.Add(punainenLabel); + + Mouse.Listen(MouseButton.Left, ButtonState.Pressed, () => + { + if (punainenPanos.IsInside(Mouse.PositionOnScreen)) + { + // Tallennetaan värin nimi välimuistiin + clickLog.Add("Punainen"); + AsetaPanosVärille("Punainen"); + if (doneButton == null) + { + CreateDoneButton(); + } + } + }, "Aseta panos värille Punainen"); + + GameObject mustaPanos = new GameObject(165, 60); + mustaPanos.Color = Color.Black; + // Asetetaan nappi hieman panostusalueen alapuolelle + mustaPanos.Position = new Vector(85, 205); + Add(mustaPanos); + + Label mustaLabel = new Label(165, 60); + mustaLabel.Text = "Musta"; + mustaLabel.TextColor = Color.White; + mustaLabel.Position = new Vector(85, 205); + mustaPanos.Add(mustaLabel); + + Mouse.Listen(MouseButton.Left, ButtonState.Pressed, () => + { + if (mustaPanos.IsInside(Mouse.PositionOnScreen)) + { + // Tallennetaan värin nimi välimuistiin + clickLog.Add("Punainen"); + AsetaPanosVärille("Musta"); + if (doneButton == null) + { + CreateDoneButton(); + } + } + }, "Aseta panos värille Musta"); + + + } - public void RulettiPanos() + void CreateDoneButton() { + GameObject Done = new GameObject(150, 75); + Done.Color = Color.Green; + // Asetetaan nappi hieman panostusalueen alapuolelle + Done.Position = new Vector(350, -200); + Add(Done); + + Label DoneLabel = new Label(150, 75); + DoneLabel.Text = "Valmis"; + DoneLabel.TextColor = Color.White; + DoneLabel.Position = new Vector(350, -200); + Done.Add(DoneLabel); + Mouse.Listen(MouseButton.Left, ButtonState.Pressed, () => + { + if (Done.IsInside(Mouse.PositionOnScreen)) + { + MessageDisplay.Add($"Panokset on jaettu kohtiin: {clickLog}"); + RulettiPyöritys(); + } + }, "Aseta panos värille Musta"); + } + + void AsetaPanos(int numero) + { + MessageDisplay.Add($"Panos asetettu numeroon {numero}!"); } + void AsetaPanosVärille(string väri) + { + MessageDisplay.Add($"Panos asetettu värille {väri}!"); + } + + void AsetaPanosNollat(string nolla) + { + MessageDisplay.Add($"Panos asetettu numerolle {nolla}!"); + } + void RulettiPyöritys() + { + ClearGameObjects(); + ClearControls(); + int tulos; + MessageDisplay.Add($"Panokset on jaettu kohtiin: {clickLog}"); + RulettiAnimaatio(); + TakaisinPV(); + } + + void RulettiAnimaatio() + { + + } public async Task Slots() { @@ -1910,6 +2122,7 @@ public class Financial_Freedom : PhysicsGame TakaisinPV(); // Siirtyy takaisin pelinvalintaan }, "Ota rahat ja lopeta (P)"); } + void AddRaha() { @@ -1939,7 +2152,7 @@ public class Financial_Freedom : PhysicsGame /// <param name="height">logon korkeus</param> /// <param name="x">logon paikka</param> /// <param name="y">logon paikka</param> - public static void MiniPeliLogo(Game peli, double width, double height, double x, double y, string kuva, int order) + public void MiniPeliLogo(Game peli, double width, double height, double x, double y, string kuva, int order) { PhysicsObject p = new PhysicsObject(width, height, Shape.Rectangle, x, y); p.Image = LoadImage(kuva);