Files
WIR-MACHEN-ALLE-ARM/Casino/CSH Promts.txt
T
2026-09-14 14:57:19 +02:00

235 lines
17 KiB
Plaintext

-moin mein bester ich möchte gerade eine slot maschiene bauen in wpf und c# wie würdest du das jetzt animieren
-also boss wir pullen uns die img datein aus der datenbank und aktuell ist das der code für slots
public Slots()
{
InitializeComponent();
}
private void LoadCard(int Bild)
{
Database db = new Database();
byte[] img = db.GetCardImage(Bild);//2-10
Bild_11.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;
}
und das window ist
<Window x:Class="Casino.Slots"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:Casino"
mc:Ignorable="d"
Title="Slots" Height="1080" Width="1980">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="100"></ColumnDefinition>
<ColumnDefinition Width="280"></ColumnDefinition>
<ColumnDefinition Width="20"></ColumnDefinition>
<ColumnDefinition Width="280"></ColumnDefinition>
<ColumnDefinition Width="20"></ColumnDefinition>
<ColumnDefinition Width="280"></ColumnDefinition>
<ColumnDefinition Width="20"></ColumnDefinition>
<ColumnDefinition Width="280"></ColumnDefinition>
<ColumnDefinition Width="20"></ColumnDefinition>
<ColumnDefinition Width="280"></ColumnDefinition>
<ColumnDefinition Width="20"></ColumnDefinition>
<ColumnDefinition Width="280"></ColumnDefinition>
<ColumnDefinition Width="100"></ColumnDefinition>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="70"></RowDefinition>
<RowDefinition Height="270"></RowDefinition>
<RowDefinition Height="270"></RowDefinition>
<RowDefinition Height="270"></RowDefinition>
<RowDefinition Height="200"></RowDefinition>
</Grid.RowDefinitions>
<Image Grid.Column="1" Grid.Row="1" x:Name="Bild_11"/>
<Image Grid.Column="3" Grid.Row="1" x:Name="Bild_12"/>
<Image Grid.Column="5" Grid.Row="1" x:Name="Bild_13"/>
<Image Grid.Column="7" Grid.Row="1" x:Name="Bild_14"/>
<Image Grid.Column="9" Grid.Row="1" x:Name="Bild_15"/>
<Image Grid.Column="11" Grid.Row="1" x:Name="Bild_16"/>
<Image Grid.Column="1" Grid.Row="2" x:Name="Bild_21"/>
<Image Grid.Column="3" Grid.Row="2" x:Name="Bild_22"/>
<Image Grid.Column="5" Grid.Row="2" x:Name="Bild_23"/>
<Image Grid.Column="7" Grid.Row="2" x:Name="Bild_24"/>
<Image Grid.Column="9" Grid.Row="2" x:Name="Bild_25"/>
<Image Grid.Column="11" Grid.Row="2" x:Name="Bild_26"/>
<Image Grid.Column="1" Grid.Row="3" x:Name="Bild_31"/>
<Image Grid.Column="3" Grid.Row="3" x:Name="Bild_32"/>
<Image Grid.Column="5" Grid.Row="3" x:Name="Bild_33"/>
<Image Grid.Column="7" Grid.Row="3" x:Name="Bild_34"/>
<Image Grid.Column="9" Grid.Row="3" x:Name="Bild_35"/>
<Image Grid.Column="11" Grid.Row="3" x:Name="Bild_36"/>
</Grid>
</Window>
-boss wie soll ich await nutzen ohne die click methode zu einer task machen🤬😩😩😩
-also ich hab jetzt das mal gebaut aber das programm hängt sich auf kannste mir bei der fehler suche helfen
private async Task Spin()
{
users[MainWindow.currentUser].Geld += 100;
for (int i = 0; i < 50; i++)
{
int[,] currentSlot = new int[6, 3];
for (int j = 6; j<_bilder.Count;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[1, j] = currentSlot[0, j];
LoadCard(_bilder[j + 12], currentSlot[1, j]);
currentSlot[2, j] = currentSlot[1, j];
LoadCard(_bilder[j + 6], currentSlot[0, j]);
currentSlot[0, j] = randomBild;
LoadCard(_bilder[j], randomBild);
}
await Task.Delay(70);
}
await Task.Delay(70);
}
}
-so kollege ich möchte jetzt an ändern das geld abgezogen wird das funktioniert aber nicht wirklich weil das in wpf nicht aktualisiert wird aktuell nutze ich den textblock
<TextBlock x:Name="Konto" Grid.Column="12" Grid.Row="4" Height="30" Width="100" Margin="0,100,0,0" Background="DarkRed" Foreground="Silver" TextAlignment="Right" FontSize="25" Text="{Binding Path=Geld }"/>
wenn ich jetzt users[MainWindow.currentUser].Geld += 100; mache wird das geld tarzächlich addiert das hab ich mir in der konsole ausgeben lassen
was denkst du könnte der fehler sein
-also das erste hab ich soweit ich weiß nicht das zweite hätte ich nicht gedacht das ich das brauche da users eine observablecollection ist
-so boss hab den einfachen weg gewählt und es einfach manuell aktuallisiert jetzt muss ich den wert nur noch in der datenbank ändern ich würde dir einfach eine unserer methoden geben und du schreibst du um
public byte[] GetSound(int id)
{
byte[] soundBytes = null;
using (MySqlConnection conn = new MySqlConnection(myConnectionString))
{
conn.Open();
using (MySqlCommand cmd = new MySqlCommand("SELECT sound FROM Sounds WHERE id = @id",conn))
{
cmd.Parameters.AddWithValue("@id", id);
using (MySqlDataReader reader = cmd.ExecuteReader())
{
if (reader.Read())
{
soundBytes = (byte[])reader["sound"];
}
}
}
}
return soundBytes;
}
mach ein void draus namens UpdateGeld mit parameter id und geld beides int. und es soll das geld des users mit der id aus dem parameter mit dem geld aus dem parameter ersetzt werden
-wofür steht das m hinter den zahlen und was passiert wenn man das m nicht beim einsatz hinschreibt gibt es dann überhaupt ein gewinn?
-Warum werden die konstanten für in einer reihe nicht benutz? denn so muss ich ja immer im code gucken wo das hochgezählt wird. wird nur in der check win mit den zahlen gearbeitet oder gibt es mehrere stellen?
-so boss wir wollen jetzt hintergrund musik einbiden wir haben bereits eine methode für einfache sound
public void PlaySound(byte[] audioBlob)
{
string tempFile = System.IO.Path.Combine(
System.IO.Path.GetTempPath(),
Guid.NewGuid() + ".mp3");
File.WriteAllBytes(tempFile, audioBlob);
player.Open(new Uri(tempFile));
player.Play();
}
jetzt soll zusätzlich kommen das der sound sich loopen soll also wenn er endet soll er nochmal abgespielt werden und das für immer. der sound soll sich nicht überlappen weil er ja sonst schlecht klingt
-wir haben einen eigene klasse für sounds ist das egal ob ich die methoden jetzt nicht in slots lege oder auslager. die methode für loopingsounds hab ich jetzt mal in die klasse gelegt aber sie brauch die methode player_Mediaended also sag an was in slots kann und was in die audioplayer methode kann
-so boss das letzt für heute es geht jetzt darum passwörter zu verschlüsseln die in wpf sollte ich ja per passwortbox verschleiern aber jetzt muss ich ja ihrgendwie überprüfen ob das passwort richtig ist und dafür müsste ich das passwort ja entschlüsseln und verschlüsseln in der Datenbank
-also boss kleine frage ich habe eine txt box die ich in der cs datei von dem fenster nicht finden kann hier ist die box
<TextBox x:Name="TxtBet" Height="40" Width="192" Background="DimGray" Foreground="White" FontSize="18" TextAlignment="Center" VerticalContentAlignment="Center" PreviewTextInput="TxtBet_PreviewTextInput" PreviewKeyDown="TxtBet_PreviewKeyDown" DataObject.Pasting="TxtBet_Pasting"/>
ist daran was falsch?
-boss etwas längere aufgabe für dich lass dir ruhig etwas zeit ich hab hier gleich eine xaml und die dazugehörige cs bitte schreib alles so um das erstens das spiel funktioniert und der code einfacher z.B. kein doppelter code übersichtlich sollte es am besten auch noch sein das spiel geht wie folgt:
man wird gefragt ob rot oder schwarz man drückt den button dann sieht man ob man richtig gelegen hat
wenn ja soll der cash out button aktuallisiert werden und die nächste frage kommen wenn nicht kurz warten neu starten die 2. frage ist ob höher oder niedriger du weißt denke ich mal was kommt es wird gezeigt dann kommt die 3. frage ob innerhalb der karten oder außerhalb wenn richtig kommt die frage welches symbol die letzte karte hat also die vier karo, herz, kreuz und piek wenn richtig wird automatisch gecashoutet und nach kurzer zeit wird eine neue runde gestartet was nich funktioniert ist:
Das geld wird komischerweiße nicht abgezogen.
Der Cashout button gibt noch die falschen werte an und wenn man ihn drück passiert auch nichts
-boss etwas längere aufgabe für dich lass dir ruhig etwas zeit ich hab hier gleich eine xaml und die dazugehörige cs bitte schreib alles so um das erstens das spiel funktioniert und der code einfacher z.B. kein doppelter code übersichtlich sollte es am besten auch noch sein das spiel geht wie folgt:man wird gefragt ob rot oder schwarz man drückt den button dann sieht man ob man richtig gelegen hatwenn ja soll der cash out button aktuallisiert werden und die nächste frage kommen wenn nicht kurz warten neu starten die 2. frage ist ob höher oder niedriger du weißt denke ich mal was kommt es wird gezeigt dann kommt die 3. frage ob innerhalb der karten oder außerhalb wenn richtig kommt die frage welches symbol die letzte karte hat also die vier karo, herz, kreuz und piek wenn richtig wird automatisch gecashoutet und nach kurzer zeit wird eine neue runde gestartet was nich funktioniert ist:Das geld wird komischerweiße nicht abgezogen.Der Cashout button gibt noch die falschen werte an und wenn man ihn drück passiert auch nichts <br> <br> Hier noch die xaml: <Window x:Class="Casino.Busfahrer" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:local="clr-namespace:Casino" mc:Ignorable="d" Title="Bus Driver" Height="1080" Width="1960" WindowState="Maximized" WindowStyle="None" Background="#2C3E50"> <Grid> <Grid.ColumnDefinitions> <ColumnDefinition Width="100"/> <ColumnDefinition Width="280"/> <ColumnDefinition Width="20"/> <ColumnDefinition Width="280"/> <ColumnDefinition Width="20"/> <ColumnDefinition Width="280"/> <ColumnDefinition Width="20"/> <ColumnDefinition Width="280"/> <ColumnDefinition Width="20"/> <ColumnDefinition Width="280"/> <ColumnDefinition Width="20"/> <ColumnDefinition Width="280"/> <ColumnDefinition Width="100"/> </Grid.ColumnDefinitions> <Grid.RowDefinitions> <RowDefinition Height="70"/> <RowDefinition Height="270"/> <RowDefinition Height="270"/> <!-- Cards row --> <RowDefinition Height="270"/> <!-- Buttons row --> <RowDefinition Height="200"/> </Grid.RowDefinitions> <!-- Main Menu Button top left --> <Button Grid.Column="0" Grid.Row="0" Content="Main Menu" HorizontalAlignment="Center" VerticalAlignment="Center" Click="Hauptmenue" Width="100" Height="40"/> <!-- CARDS (Row 2) --> <Image Grid.Column="3" Grid.Row="2" x:Name="Bild_1" Margin="5" Stretch="Uniform"/> <Image Grid.Column="5" Grid.Row="2" x:Name="Bild_2" Margin="5" Stretch="Uniform"/> <Image Grid.Column="7" Grid.Row="2" x:Name="Bild_3" Margin="5" Stretch="Uniform"/> <Image Grid.Column="9" Grid.Row="2" x:Name="Bild_4" Margin="5" Stretch="Uniform"/> <!-- BUTTONS BELOW CARDS (Row 3) --> <!-- Round 1: Red / Black --> <StackPanel x:Name="PanelRedBlack" Grid.Row="3" Grid.Column="3" Grid.ColumnSpan="7" Orientation="Horizontal" HorizontalAlignment="Center" VerticalAlignment="Top" Margin="0,20,0,0"> <Button x:Name="BtnRed" Content="Red" Width="120" Height="50" Margin="10" Background="#E74C3C" Foreground="White" FontSize="18" FontWeight="Bold" Click="BtnRed_Click"/> <Button x:Name="BtnBlack" Content="Black" Width="120" Height="50" Margin="10" Background="#2C3E50" Foreground="White" FontSize="18" FontWeight="Bold" Click="BtnBlack_Click"/> </StackPanel> <!-- Round 2: Higher / Lower --> <StackPanel x:Name="PanelHigherLower" Grid.Row="3" Grid.Column="3" Grid.ColumnSpan="7" Orientation="Horizontal" HorizontalAlignment="Center" VerticalAlignment="Top" Margin="0,20,0,0" Visibility="Collapsed"> <Button x:Name="BtnHigher" Content="Higher" Width="120" Height="50" Margin="10" Background="#2ECC71" Foreground="White" FontSize="18" FontWeight="Bold" Click="BtnHigher_Click"/> <Button x:Name="BtnLower" Content="Lower" Width="120" Height="50" Margin="10" Background="#E67E22" Foreground="White" FontSize="18" FontWeight="Bold" Click="BtnLower_Click"/> </StackPanel> <!-- Round 3: Inside / Outside --> <StackPanel x:Name="PanelInsideOutside" Grid.Row="3" Grid.Column="3" Grid.ColumnSpan="7" Orientation="Horizontal" HorizontalAlignment="Center" VerticalAlignment="Top" Margin="0,20,0,0" Visibility="Collapsed"> <Button x:Name="BtnInside" Content="Inside" Width="130" Height="50" Margin="10" Background="#9B59B6" Foreground="White" FontSize="18" FontWeight="Bold" Click="BtnInside_Click"/> <Button x:Name="BtnOutside" Content="Outside" Width="130" Height="50" Margin="10" Background="#3498DB" Foreground="White" FontSize="18" FontWeight="Bold" Click="BtnOutside_Click"/> </StackPanel> <!-- Round 4: Suit selection --> <StackPanel x:Name="PanelSuit" Grid.Row="3" Grid.Column="3" Grid.ColumnSpan="7" Orientation="Horizontal" HorizontalAlignment="Center" VerticalAlignment="Top" Margin="0,20,0,0" Visibility="Collapsed"> <Button x:Name="BtnHearts" Content="♥ Hearts" Width="110" Height="50" Margin="5" Background="#E74C3C" Foreground="White" FontSize="16" FontWeight="Bold" Click="BtnSuit_Click" Tag="Hearts"/> <Button x:Name="BtnDiamonds" Content="♦ Diamonds" Width="110" Height="50" Margin="5" Background="#E74C3C" Foreground="White" FontSize="16" FontWeight="Bold" Click="BtnSuit_Click" Tag="Diamonds"/> <Button x:Name="BtnSpades" Content="♠ Spades" Width="110" Height="50" Margin="5" Background="#2C3E50" Foreground="White" FontSize="16" FontWeight="Bold" Click="BtnSuit_Click" Tag="Spades"/> <Button x:Name="BtnClubs" Content="♣ Clubs" Width="110" Height="50" Margin="5" Background="#2C3E50" Foreground="White" FontSize="16" FontWeight="Bold" Click="BtnSuit_Click" Tag="Clubs"/> </StackPanel> <!-- Cash Out / Start / Next Buttons --> <StackPanel Grid.Row="3" Grid.Column="3" Grid.ColumnSpan="7" Orientation="Horizontal" HorizontalAlignment="Center" VerticalAlignment="Bottom" Margin="0,0,0,20"> <Button x:Name="BtnCashOut" Content="Cash Out (0.00)" Width="180" Height="50" Margin="10" Background="#27AE60" Foreground="White" FontSize="16" FontWeight="Bold" Click="BtnCashOut_Click" Visibility="Collapsed"/> <Button x:Name="BtnStart" Content="Start New Game" Width="180" Height="50" Margin="10" Background="#1ABC9C" Foreground="White" FontSize="16" FontWeight="Bold" Click="BtnStart_Click"/> </StackPanel> <!-- Bet Input and Current Win Text Display --> <StackPanel Grid.Column="5" Grid.ColumnSpan="3" Grid.Row="4" Orientation="Vertical" HorizontalAlignment="Center" VerticalAlignment="Center"> <TextBlock x:Name="Txteinsatztext" Text="Einsatz" Foreground="White" FontSize="14" HorizontalAlignment="Center" Margin="0,0,0,5"/> <TextBox x:Name="TxtBet" Height="40" Width="192" Background="DimGray" Foreground="White" FontSize="18" TextAlignment="Center" VerticalContentAlignment="Center" PreviewTextInput="TxtBet_PreviewTextInput" PreviewKeyDown="TxtBet_PreviewKeyDown" DataObject.Pasting="TxtBet_Pasting"/> </StackPanel> <TextBlock Grid.Column="11" Grid.Row="4" Text="Konto" Margin="0,108,0,-8" Foreground="White" FontSize="14" HorizontalAlignment="Center"/> <TextBlock x:Name="Konto" Grid.Column="11" Grid.Row="4" Height="30" Width="100" Margin="90,133,90,37" Background="DarkRed" Foreground="Silver" TextAlignment="Right" FontSize="25" Text="{Binding Path=Geld }"/> </Grid> </Window>
-so mein bester für unsere database brauch ich jetzt ein insert befehl für user in die nutzer tabelle die user klasse sieht wie folgt aus:
public string ID { get; set; }
public string Name { get; set; }
public int Alter { get; set; }
public string Passwort { get; set; }
public decimal Geld { get; set; }
-Wie binde ich sound in WPF/C# mit hilfe von blob Dateien
-in variante 1 was ist mit path und file gemeint es wird versucht anzusprechen ist aber unbekannt
-er sagt mit path ist ein mehrdeutiger verweis welches sollte ich nehmen
-so boss ich würde jetzt gerne das sich die sounds nicht überlagern können dafür hab ich eine extra methode hinzugefügt die nicht nochmal ausgeführt werden kann sollange dieser sound läuft hast ne idee