diff --git a/Casino/Audioplayer.cs b/Casino/Audioplayer.cs
index 41023a3..732abf4 100644
--- a/Casino/Audioplayer.cs
+++ b/Casino/Audioplayer.cs
@@ -13,6 +13,8 @@ namespace Casino
{
private readonly MediaPlayer player = new MediaPlayer();
+ public Audioplayer() { player.MediaEnded += Player_MediaEnded; }
+
public void PlaySound(byte[] audioBlob)
{
string tempFile = System.IO.Path.Combine(
@@ -27,29 +29,31 @@ namespace Casino
player.Play();
}
- private bool isPlaying = false;
- private readonly MediaPlayer musicPlayer = new();
-
- public void PlayMusic(byte[] audioBlob)
+ private void Player_MediaEnded(object? sender, EventArgs e)
{
- if (isPlaying)
- return;
-
- isPlaying = true;
+ player.Position = TimeSpan.Zero;
+ player.Play();
+ }
+ public void PlayLoopingSound(byte[] audioBlob)
+ {
string tempFile = System.IO.Path.Combine(
System.IO.Path.GetTempPath(),
- Guid.NewGuid() + ".mp3");
+ "background.mp3");
- System.IO.File.WriteAllBytes(tempFile, audioBlob);
+ File.WriteAllBytes(tempFile, audioBlob);
- musicPlayer.MediaEnded += (s, e) =>
- {
- isPlaying = false;
- };
+ player.Open(new Uri(tempFile));
- musicPlayer.Open(new Uri(tempFile));
- musicPlayer.Play();
+ player.MediaEnded -= Player_MediaEnded;
+ player.MediaEnded += Player_MediaEnded;
+
+ player.Play();
+ }
+
+ public void Stop()
+ {
+ player.Stop();
}
- }
+}
}
diff --git a/Casino/Database.cs b/Casino/Database.cs
index 5b865bc..7a378a0 100644
--- a/Casino/Database.cs
+++ b/Casino/Database.cs
@@ -157,6 +157,22 @@ namespace Casino
return soundBytes;
}
+ public void UpdateGeld(string id, decimal geld)
+ {
+ using (MySqlConnection conn = new MySqlConnection(myConnectionString))
+ {
+ conn.Open();
+
+ using (MySqlCommand cmd = new MySqlCommand(
+ "UPDATE Nutzer SET Geld = @geld WHERE id = @id", conn))
+ {
+ cmd.Parameters.AddWithValue("@geld", geld);
+ cmd.Parameters.AddWithValue("@id", id);
+
+ cmd.ExecuteNonQuery();
+ }
+ }
+ }
}
}
diff --git a/Casino/MainWindow.xaml b/Casino/MainWindow.xaml
index d7533fb..8797d74 100644
--- a/Casino/MainWindow.xaml
+++ b/Casino/MainWindow.xaml
@@ -18,7 +18,6 @@
-
diff --git a/Casino/MainWindow.xaml.cs b/Casino/MainWindow.xaml.cs
index 3509d65..9876235 100644
--- a/Casino/MainWindow.xaml.cs
+++ b/Casino/MainWindow.xaml.cs
@@ -28,13 +28,6 @@ namespace Casino
slotsWindow.Show();
}
- private void Sound_Click(object sender, RoutedEventArgs e)
- {
- Database data = new Database();
- byte[] blobData = data.GetSound(1);
- var audioService = new Audioplayer();
- audioService.PlayMusic(blobData);
- }
private void Blackjack_Click(object sender, RoutedEventArgs e)
{
diff --git a/Casino/Slot System.cs b/Casino/Slot System.cs
deleted file mode 100644
index 0cf6c52..0000000
--- a/Casino/Slot System.cs
+++ /dev/null
@@ -1,44 +0,0 @@
-using System;
-using System.CodeDom.Compiler;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-
-namespace Casino
-{
- public class Slot_System
- {
- int[,] slots = new int[3, 6];
- bool fertig = false;
-
- public bool getFertig () { return fertig; }
-
- public async Task roll()
- {
- int counter =0;
- while (counter<15) {
- for (int i = 0; i < slots.GetLength(1); i++)
- {
- slots[2, i] = slots[1, i];
- slots[1, i] = slots[0, i];
- slots[0, i] = randomize();
-
- }
- counter++;
- await Task.Delay(1000);
- }
- fertig = true;
- }
-
-
-
- private int randomize()
- {
- Random ran = new Random();
- int temp = ran.Next(2, 11);
-
- return 0;
- }
- }
-}
diff --git a/Casino/Slots.xaml b/Casino/Slots.xaml
index 9787a1b..0dd8206 100644
--- a/Casino/Slots.xaml
+++ b/Casino/Slots.xaml
@@ -62,7 +62,9 @@
-
+
+
+
diff --git a/Casino/Slots.xaml.cs b/Casino/Slots.xaml.cs
index da31e4e..5060db3 100644
--- a/Casino/Slots.xaml.cs
+++ b/Casino/Slots.xaml.cs
@@ -4,6 +4,7 @@ using System.Collections.ObjectModel;
using System.IO;
using System.Linq;
using System.Text;
+using System.Text.RegularExpressions;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
@@ -27,6 +28,20 @@ namespace Casino
Database db = new Database();
private List AlleBilder;
ObservableCollection users = new ObservableCollection();
+ Audioplayer audio = new Audioplayer();
+ private int[,] currentSlot = new int[3, 6];
+
+
+ const decimal DREI = 1.25m;
+ const decimal VIER = 0.75m;
+ const decimal FUENF = 2.25m;
+ const decimal SECHS = 6.75m;
+
+ const decimal X_MUSTER = 13.00m;
+ const decimal RAND = 18.00m;
+ const decimal X_UND_RAND = 25.00m;
+ const decimal FULLBOARD = 50.00m;
+
public Slots()
{
@@ -48,7 +63,7 @@ namespace Casino
};
Konto.Text = users[MainWindow.currentUser].Geld.ToString();
-
+ audio.PlayLoopingSound(db.GetSound(2));
}
@@ -72,29 +87,236 @@ namespace Casino
}
private async Task Spin()
{
- users[MainWindow.currentUser].Geld += 100;
- for (int i = 0; i < 50; i++)
+ for (int i = 0; i < 15; i++)
{
- foreach (var image in _bilder)
+
+ for (int j = 5; j>=0;j--)
{
int randomBild = _random.Next(0, AlleBilder.Count);
- LoadCard(image, randomBild);
- }
+ if (i == 0)
+ {
+ currentSlot[0,j] = randomBild;
+ LoadCard(_bilder[j], randomBild);
+ }
+ else if (i == 1)
+ {
+ currentSlot[1, j] = currentSlot[0, j];
+ LoadCard(_bilder[j + 6], currentSlot[0,j]);
+ currentSlot[0, j] = randomBild;
+ LoadCard(_bilder[j], randomBild);
+ }
+ else
+ {
+ currentSlot[2, j] = currentSlot[1, j];
+ LoadCard(_bilder[j + 12], currentSlot[1, j]);
+ currentSlot[1, j] = currentSlot[0, j];
+ LoadCard(_bilder[j + 6], currentSlot[0, j]);
+ currentSlot[0, j] = randomBild;
+ LoadCard(_bilder[j], randomBild);
+ }
+
+
+
+
+ }
+ await Task.Delay(150);
- await Task.Delay(70);
}
}
private async void Spin(object sender, RoutedEventArgs e)
{
+ int einsatz = Convert.ToInt32(einsatzFeld.Text);
+ users[MainWindow.currentUser].Geld-=einsatz;
+ Konto.Text = users[MainWindow.currentUser].Geld.ToString();
await Spin();
+ users[MainWindow.currentUser].Geld += CheckWin(currentSlot,einsatz);
+ Konto.Text = users[MainWindow.currentUser].Geld.ToString();
+ db.UpdateGeld(
+ users[MainWindow.currentUser].ID,
+ users[MainWindow.currentUser].Geld);
}
private void Hauptmenue(object sender, RoutedEventArgs e)
{
+ audio.Stop();
Close();
}
+
+
+ public decimal CheckWin(int[,] board, decimal einsatz)
+ {
+ decimal multiplikator = 0m;
+
+ // Waagerecht
+ for (int row = 0; row < 3; row++)
+ {
+ multiplikator += CheckLine(
+ board[row, 0],
+ board[row, 1],
+ board[row, 2],
+ board[row, 3],
+ board[row, 4],
+ board[row, 5]);
+ }
+
+ // Senkrecht
+ for (int col = 0; col < 6; col++)
+ {
+ multiplikator += CheckLine(
+ board[0, col],
+ board[1, col],
+ board[2, col]);
+ }
+
+ // X Muster
+ bool x1 =
+ board[0, 0] == board[1, 1] &&
+ board[1, 1] == board[2, 2];
+
+ bool x2 =
+ board[0, 5] == board[1, 4] &&
+ board[1, 4] == board[2, 3];
+
+ if (x1 && x2 &&
+ board[0, 0] == board[0, 5])
+ {
+ multiplikator += X_MUSTER;
+ }
+
+ // Rand
+ int randId = board[0, 0];
+
+ bool randGleich =
+ board[0, 0] == randId &&
+ board[0, 1] == randId &&
+ board[0, 2] == randId &&
+ board[0, 3] == randId &&
+ board[0, 4] == randId &&
+ board[0, 5] == randId &&
+ board[2, 0] == randId &&
+ board[2, 1] == randId &&
+ board[2, 2] == randId &&
+ board[2, 3] == randId &&
+ board[2, 4] == randId &&
+ board[2, 5] == randId &&
+ board[1, 0] == randId &&
+ board[1, 5] == randId;
+
+ if (randGleich)
+ {
+ multiplikator += RAND;
+ }
+
+ // X + Rand Bonus
+ if (
+ randGleich &&
+ x1 && x2 &&
+ board[0, 0] == board[0, 5]
+ )
+ {
+ multiplikator += X_UND_RAND;
+ }
+
+ // Fullboard
+ int first = board[0, 0];
+ bool fullBoard = true;
+
+ for (int r = 0; r < 3; r++)
+ {
+ for (int c = 0; c < 6; c++)
+ {
+ if (board[r, c] != first)
+ {
+ fullBoard = false;
+ break;
+ }
+ }
+ }
+
+ if (fullBoard)
+ {
+ multiplikator += FULLBOARD;
+ }
+
+ return einsatz * multiplikator;
+ }
+
+
+ private decimal CheckLine(params int[] werte)
+ {
+ decimal gewinn = 0;
+
+ int laenge = werte.Length;
+
+ for (int start = 0; start < laenge; start++)
+ {
+ int gleiche = 1;
+
+ for (int next = start + 1; next < laenge; next++)
+ {
+ if (werte[next] == werte[start])
+ gleiche++;
+ else
+ break;
+ }
+
+ if (gleiche >= 3)
+ gewinn += DREI;
+
+ if (gleiche >= 4)
+ gewinn += VIER;
+
+ if (gleiche >= 5)
+ gewinn += FUENF;
+
+ if (gleiche >= 6)
+ gewinn += SECHS;
+ }
+
+ return gewinn;
+ }
+
+
+
+ //Numberfield
+ private static readonly Regex _regex = new Regex("^[0-9]"); // Regex to match non-numeric input
+
+ //nur nummern
+ private void TextBox_PreviewTextInput(object sender, TextCompositionEventArgs e)
+ {
+ e.Handled = !_regex.IsMatch(e.Text);
+ }
+
+ // Keine Spaces
+ private void TextBox_PreviewKeyDown(object sender, KeyEventArgs e)
+ {
+ if (e.Key == Key.Space)
+ {
+ e.Handled = true;
+ }
+ }
+
+ //das man nichts reinkopieren kann außer Zahlen
+ private void TextBox_Pasting(object sender, DataObjectPastingEventArgs e)
+ {
+ if (e.DataObject.GetDataPresent(typeof(String)))
+ {
+ var text = (String)e.DataObject.GetData((typeof(String)));
+ if (!_regex.IsMatch((string)text))
+ {
+ e.CancelCommand();
+ }
+ }
+ }
+
+ void PlayWinSound()
+ {
+
+ }
}
+
+
}
diff --git a/Casino/User.cs b/Casino/User.cs
index 5d94c34..77f78a8 100644
--- a/Casino/User.cs
+++ b/Casino/User.cs
@@ -12,7 +12,7 @@ namespace Casino
public string Name { get; set; }
public int Alter { get; set; }
public string Passwort { get; set; }
- public int Geld { get; set; }
+ public decimal Geld { get; set; }
public User(string n, int a, string p)
{
ID = ID_Generation();