Skip to content
Snippets Groups Projects
Commit ca5d4949 authored by Lehtinen Samuli Saul Abiel's avatar Lehtinen Samuli Saul Abiel
Browse files

Lisätty värikoodit jos vastaus oikein tai väärin.

parent 60c5e60e
No related branches found
No related tags found
No related merge requests found
......@@ -19,7 +19,7 @@ namespace haluatko_miljonaariksi
[STAThread]
static void Main()
{
using var game = new haluatko_miljonaariksi();
using var game = new haluatkoMiljonaariksi();
game.Run();
}
}
......
......@@ -16,22 +16,23 @@ namespace haluatko_miljonaariksi;
/// Haluatko Miljonaariksi - arvausvisassa arvaillaan oikeaa vastausta vaihtoehtojen a-d väliltä. Päästäkseen miljoonaan, käyttäjän on arvattava 14 kertaa oikein.
/// </summary>
public class haluatko_miljonaariksi : PhysicsGame
public class haluatko_Miljonaariksi : PhysicsGame
{
private static Random random = new Random();
private static string fifty = "50:50";
private static char[] vaihtoehdot = { 'A', 'B', 'C', 'D' };
private int[] voitot = { 100, 200, 300, 500, 1000, 2000, 5000, 10000, 20000, 50000, 100000, 250000, 500000, 1000000 };
private int taso = 0;
private int viimeinenTakuusumma = 0;
private int taso;
private int viimeinenTakuusumma;
private int vihjeidenMaara = 3;
private char oikeaVastaus;
private Label kysymysTeksti;
private Label[] vastausPainikkeet = new Label[4];
private Label infoTeksti;
private Label palkinto;
private Label oljenKorsi;
//private Label palkinto;
//private Label oljenKorsi;
private GameObject korostusRuutu;
//private Label fiftyOhje;
//private Label uudestaanTeksti;
......@@ -45,9 +46,10 @@ public class haluatko_miljonaariksi : PhysicsGame
Keyboard.Listen(Key.Escape, ButtonState.Pressed, ConfirmExit, "Lopeta peli");
}
// Luodaan pelin visuaalinen ilme
public void LuoPeliUI()
{
// Haluatko miljonääriksi renkaat
GameObject ulkorengas = new GameObject(350, 350, Shape.Circle);
ulkorengas.Y = 200;
ulkorengas.Color = Color.Yellow;
......@@ -57,12 +59,12 @@ public class haluatko_miljonaariksi : PhysicsGame
sisarengas.Y = 200;
sisarengas.Color = Color.DarkBlue;
Add(sisarengas);
// Seuraa palkintorakenteen etenemistä
korostusRuutu = new GameObject(100, 20); // Luo laatikko
korostusRuutu.Color = Color.SkyBlue; // Väri erottuu taustasta
korostusRuutu.Position = new Vector(-420, 310); // Sijoitetaan ensimmäisen palkinnon kohdalle
Add(korostusRuutu);
// Palkintorakenne vasemmalle ylös
Label palkinto = new Label
{
Text = "Palkintorakenne",
......@@ -72,7 +74,15 @@ public class haluatko_miljonaariksi : PhysicsGame
};
palkinto.Font.Size = 20;
Add(palkinto);
Label fiftyOhje = new Label
{
Text = "Käytä vihje välilyönnistä.",
TextColor = Color.White,
Position = new Vector(0, -350),
};
Add(fiftyOhje);
// Luodaan palkintorakenteen alle voittosummat
for (int i = 0; i < voitot.Length; i++)
{
Label voittoLabel = new Label
......@@ -85,7 +95,7 @@ public class haluatko_miljonaariksi : PhysicsGame
voittoLabel.Font.Size = 20;
Add(voittoLabel);
}
// Otsikko
Label otsikkoTeksti = new Label
{
Text = "Haluatko miljonaariksi",
......@@ -93,31 +103,28 @@ public class haluatko_miljonaariksi : PhysicsGame
Font = Font.DefaultBold,
Position = new Vector(0, 200)
};
otsikkoTeksti.Font.Size = 60;
otsikkoTeksti.Font.Size = 35;
Add(otsikkoTeksti);
// Käytetään EsitaKysymys-aliohjelmassa kysymystekstinä
kysymysTeksti = new Label
{
Text = "",
TextColor = Color.White,
Font = Font.DefaultBold,
Position = new Vector(0, 200)
Font = Font.DefaultBold
};
kysymysTeksti.Font.Size = 35;
Add(kysymysTeksti);
// käytetään EsitaKysymys-aliohjelmassa oljenkortena
infoTeksti = new Label
{
Text = "Onko oikea vastaus A, B, C vai D?",
Text = "",
TextColor = Color.Yellow,
Font = Font.DefaultBold,
Position = new Vector(0, -20)
Font = Font.DefaultBold
};
Add(infoTeksti);
// Luodaan vastauspainikkeet
for (int i = 0; i < 4; i++)
{
// Luodaan tausta vastauspainikkeelle
GameObject tausta = new GameObject(140, 50);
tausta.Position = new Vector(-80 + i * 190, -100);
tausta.Color = Color.SkyBlue;
......@@ -134,11 +141,11 @@ public class haluatko_miljonaariksi : PhysicsGame
};
Add(vastausPainikkeet[i]);
int index = i;
Keyboard.Listen((Key)(Key.A + i), ButtonState.Pressed, () => TarkistaVastaus(vaihtoehdot[index]),
Keyboard.Listen((Key.A + i), ButtonState.Pressed, () => TarkistaVastaus(vaihtoehdot[index]),
"Vastaus");
}
// 50:50 painike
GameObject fiftyTausta = new GameObject(100, 50);
fiftyTausta.Position = new Vector(0, -300);
fiftyTausta.Color = Color.SkyBlue;
......@@ -154,33 +161,45 @@ public class haluatko_miljonaariksi : PhysicsGame
Add(vihjePainike);
Keyboard.Listen(Key.Space, ButtonState.Pressed, KaytaVihje, "Käytä oljenkorsi");
}
// tarkistetaan vastaus
private void TarkistaVastaus(char valinta)
{
// Etsitään valittu painike
Label valittuPainike = vastausPainikkeet.FirstOrDefault(p => p.Text[0] == valinta);
if (valinta == oikeaVastaus)
if (valittuPainike != null)
{
taso++;
infoTeksti.Text = $"Oikein! Voitit {voitot[taso - 1]} taikarahaa.";
if (voitot[taso - 1] == 1000 || voitot[taso - 1] == 50000)
valittuPainike.Color = Color.Yellow; // Muutetaan valitun painikkeen väri keltaiseksi
}
// Oikea vastaus ratkeaa pienen odotuksen jälkeen.
Timer.SingleShot(1.0, () =>
{
if (valinta == oikeaVastaus)
{
viimeinenTakuusumma = voitot[taso - 1];
infoTeksti.Text += $"\nTakuusummasi on nyt {viimeinenTakuusumma} €.";
valittuPainike.Color = Color.Green;
taso++;
infoTeksti.Text = $"Oikein! Voitit {voitot[taso - 1]} taikarahaa.";
if (voitot[taso - 1] == 1000 || voitot[taso - 1] == 50000)
{
viimeinenTakuusumma = voitot[taso - 1];
infoTeksti.Text += $"\nTakuusummasi on nyt {viimeinenTakuusumma} €.";
}
if (taso < voitot.Length) // Varmistetaan, että ei mennä yli listan rajan
{
korostusRuutu.Y = 310 - (taso * 20); // Siirretään ruutua seuraavan palkintosumman kohdalle
}
Timer.SingleShot(2.0, EsitaKysymys);
}
if (taso < voitot.Length) // Varmistetaan, että ei mennä yli listan rajan
else
{
korostusRuutu.Y = 310 - (taso * 20); // Siirretään ruutua seuraavan palkintosumman kohdalle
valittuPainike.Color = Color.Red;
infoTeksti.Text = $"Väärin! Peli päättyi. Saat {viimeinenTakuusumma} taikarahaa.";
Timer.SingleShot(1.0, KysyUudestaan);
}
Timer.SingleShot(2.0, EsitaKysymys);
}
else
{
infoTeksti.Text = $"Väärin! Peli päättyi. Saat {viimeinenTakuusumma} taikarahaa.";
foreach (var btn in vastausPainikkeet) btn.IsVisible = false;
Timer.SingleShot(0.75, KysyUudestaan);
}
});
}
private void EsitaKysymys()
......@@ -200,7 +219,7 @@ public class haluatko_miljonaariksi : PhysicsGame
for (int i = 0; i < 4; i++)
{
vastausPainikkeet[i].Text = $"{vaihtoehdot[i]})";
vastausPainikkeet[i].Color = Color.White;
vastausPainikkeet[i].Color = Color.SkyBlue;
vastausPainikkeet[i].IsVisible = true;
}
}
......@@ -215,22 +234,21 @@ public class haluatko_miljonaariksi : PhysicsGame
vihjeidenMaara--;
infoTeksti.Text = $"50:50 vihje käytetty. Jäljellä {vihjeidenMaara}.";
char[] väärätVaihtoehdot = vaihtoehdot
.Where(v => v != oikeaVastaus) // Poistetaan oikea vastaus valikoimasta
.OrderBy(x => random.Next()) // Sekoitetaan
.Take(2) // Otetaan kaksi väärää vaihtoehtoa
.ToArray();
List<Label> vaaratPainikkeet = vastausPainikkeet
.Where(p => p.IsVisible && p.Text[0] != oikeaVastaus) // Vain näkyvät ja väärät vaihtoehdot
.OrderBy(x => random.Next()) // Sekoitetaan lista
.Take(2) // Otetaan kaksi väärää vastausta
.ToList();
// Piilotetaan nämä kaksi väärää vastausta
foreach (var btn in vastausPainikkeet)
// Piilotetaan ne
foreach (var painike in vaaratPainikkeet)
{
if (väärätVaihtoehdot.Contains(btn.Text[0]))
btn.IsVisible = false;
painike.IsVisible = false;
}
}
private void KysyUudestaan()
{
{
Label uudestaanTeksti = new Label("Haluatko yrittää uudestaan? (Y/N)")
{
TextColor = Color.White,
......
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