using System; using System.Collections.Generic; 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; using System.Windows.Data; using System.Windows.Documents; using System.Windows.Input; using System.Windows.Media; using System.Windows.Media.Imaging; using System.Windows.Shapes; namespace Casino { /// /// Interaktionslogik für Slots.xaml /// public partial class Slots : Window { private List _bilder; private Random _random = new Random(); Database db = new Database(); private List AlleBilder; ObservableCollection users = new ObservableCollection(); Audioplayer music = new Audioplayer(); 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; private int highestWin = 5; public Slots() { InitializeComponent(); users = db.GetUser(); _bilder = new List { Bild_11, Bild_12, Bild_13, Bild_14, Bild_15, Bild_16, Bild_21, Bild_22, Bild_23, Bild_24, Bild_25, Bild_26, Bild_31, Bild_32, Bild_33, Bild_34, Bild_35, Bild_36 }; AlleBilder = new List { db.GetCardImage(2),db.GetCardImage(3),db.GetCardImage(4), db.GetCardImage(5),db.GetCardImage(6),db.GetCardImage(7), db.GetCardImage(8),db.GetCardImage(9),db.GetCardImage(10), }; Konto.Text = users[MainWindow.currentUser].Geld.ToString(); music.PlayLoopingSound(db.GetSound(2)); } private void LoadCard(Image imageControl, int bildId) { byte[] img = AlleBilder.ElementAt(bildId); imageControl.Source = ByteArrayToImage(img); } private BitmapImage ByteArrayToImage(byte[] bytes) { BitmapImage image = new BitmapImage(); using (MemoryStream ms = new MemoryStream(bytes)) { image.BeginInit(); image.CacheOption = BitmapCacheOption.OnLoad; image.StreamSource = ms; image.EndInit(); } return image; } private async Task Spin() { for (int i = 0; i < 15; i++) { for (int j = 5; j>=0;j--) { int randomBild = _random.Next(0, AlleBilder.Count); 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); } } 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); /* catch (NullReferenceException) { MessageBox.Show( "Bitte ein Betrag eingeben", "Fehlermeldung 101", MessageBoxButton.OK, MessageBoxImage.Information); }*/ } private void Hauptmenue(object sender, RoutedEventArgs e) { music.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; highestWin++; } // 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; highestWin++; } // X + Rand Bonus if ( randGleich && x1 && x2 && board[0, 0] == board[0, 5] ) { multiplikator += X_UND_RAND; highestWin++; } // 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; highestWin++; } if (multiplikator != 0) PlayWinSound(); 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; highestWin++; } if (gleiche >= 5) { gewinn += FUENF; highestWin++; } if (gleiche >= 6) { gewinn += SECHS; highestWin++; } } 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() { audio.PlaySound(db.GetSound(highestWin)); highestWin = 5; } } }