Kaynağa Gözat

пофикшена авторизация

WoI 7 ay önce
ebeveyn
işleme
a59942f418

+ 10 - 10
WpfApp21Point/AuthWindow.xaml.cs

@@ -1,4 +1,5 @@
-using System;
+using Microsoft.EntityFrameworkCore;
+using System;
 using System.Collections.Generic;
 using System.Linq;
 using System.Text;
@@ -33,12 +34,9 @@ namespace WpfApp21Point
             {
                 if (GlobalData.DbConnect.Users.FirstOrDefault(x => x.UserName == UserName_TextBox.Text) == null)
                 {
-                    User user = new User()
-                    {
-                        Id = 1,
-                        UserName = UserName_TextBox.Text,
-                        UserCode = UserCode_TextBox.Password
-                    };
+                    User user = new User();
+                    user.UserName = UserName_TextBox.Text;
+                    user.UserCode = UserCode_TextBox.Password;
                     try
                     {
                         GlobalData.DbConnect.Users.Add(user);
@@ -46,9 +44,9 @@ namespace WpfApp21Point
                         GlobalData.User = GlobalData.DbConnect.Users.First(x => x.UserName == user.UserName);
                         this.Close();
                     }
-                    catch
+                    catch(Exception ex)
                     {
-                        MessageBox.Show("Что-то пошло не так. Попробуйте еще раз.");
+                        MessageBox.Show(ex.Message);
                     }
                 }
                 else
@@ -58,7 +56,9 @@ namespace WpfApp21Point
             }
             else if (EnterButton.Content.ToString() == "Войти")
             {
-                User? user = GlobalData.DbConnect.Users.FirstOrDefault(x => x.UserName == UserName_TextBox.Text && x.UserCode == UserCode_TextBox.Password);
+                User? user = GlobalData.DbConnect.Users
+                    .Include(u => u.GameParties)
+                    .FirstOrDefault(x => x.UserName == UserName_TextBox.Text && x.UserCode == UserCode_TextBox.Password);
                 if (user == null)
                 {
                     MessageBox.Show("Проверьте введенные данные.");

+ 13 - 0
WpfApp21Point/Classes/AdditionalGameParty.cs

@@ -0,0 +1,13 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace WpfApp21Point.Models
+{
+    public partial class GameParty
+    {
+        public string IsWinString => IsWin ? "Победа" : "Проигрыш";
+    }
+}

+ 2 - 1
WpfApp21Point/MainWindow.xaml

@@ -31,7 +31,8 @@
                 <TextBlock x:Name="UserName_TextBlock" Text="Имя игрока: " Style="{StaticResource ResultGameValue}"/>
                 <Button x:Name="UserRaiting" Padding="0 0 0 0"
                         Content="Посмотреть историю моих игр" Width="250"
-                        Style="{StaticResource OnGreenButton}" BorderBrush="{x:Null}" />
+                        Style="{StaticResource OnGreenButton}" BorderBrush="{x:Null}" 
+                        Click="UserRaiting_Click"/>
             </StackPanel>
             <StackPanel Orientation="Vertical" DockPanel.Dock="Top">
                 <TextBlock Margin="0 20 0 0" Text="Рейтинг игроков" Style="{StaticResource OnWhiteHeader}"/>

+ 8 - 0
WpfApp21Point/MainWindow.xaml.cs

@@ -30,6 +30,7 @@ namespace WpfApp21Point
             CheckAuth();
             ratingUser = GlobalData.DbConnect.Users
                 .Include(x => x.GameParties)
+                .Where(x=> x.GameParties.Count > 0)
                 .ToList().OrderByDescending(x => x.CountOfWin).Take(10).ToList();
             RatingTable.ItemsSource = ratingUser;
             StartTimer();
@@ -47,6 +48,7 @@ namespace WpfApp21Point
         {
             ratingUser = GlobalData.DbConnect.Users
                 .Include(x => x.GameParties)
+                .Where(x => x.GameParties.Count > 0)
                 .ToList().OrderByDescending(x => x.CountOfWin).Take(10).ToList();
             RatingTable.ItemsSource = ratingUser;
             StartTimer();
@@ -81,5 +83,11 @@ namespace WpfApp21Point
             RulesWindow rulesWindow = new();
             rulesWindow.Show();
         }
+
+        private void UserRaiting_Click(object sender, RoutedEventArgs e)
+        {
+            UserPartiesWindow userPartiesWindow = new();
+            userPartiesWindow.Show();
+        }
     }
 }

BIN
WpfApp21Point/Picture/AI/Гриффин.jpg


BIN
WpfApp21Point/Picture/AI/Мистер Исключительный.jpg


BIN
WpfApp21Point/Picture/AI/Пепе.jpg


BIN
WpfApp21Point/Picture/AI/Халк.png


BIN
WpfApp21Point/Picture/AI/Шрек.jpg


+ 25 - 23
WpfApp21Point/RulesWindow.xaml

@@ -5,43 +5,45 @@
         xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
         xmlns:local="clr-namespace:WpfApp21Point"
         mc:Ignorable="d"
-        Title="RulesWindow" Height="450" Width="800"
-        MinHeight="450" MinWidth="400">
+        Title="RulesWindow" Height="460" Width="800"
+        MinHeight="460" MinWidth="400">
     <Grid>
-        <StackPanel CanVerticallyScroll="True" VerticalAlignment="Center">
-            <TextBlock Text="Правила игры" Style="{StaticResource OnWhiteHeader}"
+        <ScrollViewer>
+            <StackPanel CanVerticallyScroll="True" ScrollViewer.VerticalScrollBarVisibility="Visible"
+                    VerticalAlignment="Center">
+                <TextBlock Text="Правила игры" Style="{StaticResource OnWhiteHeader}"
                 FontSize="25"/>
-            <TextBlock TextWrapping="WrapWithOverflow">
+                <TextBlock TextWrapping="WrapWithOverflow">
                 Игру всегда начинает игрок, нажимая на колоду в правой части стола.
                 Под колодой отображается количество очков игрока.
-            </TextBlock>
-            <TextBlock TextWrapping="WrapWithOverflow">
+                </TextBlock>
+                <TextBlock TextWrapping="WrapWithOverflow">
                 Игрок может остановить набор карт, нажав кнопку "Хватит" под колодой карт.
                 Это означает, что игра будет окончена, как только соперник доберет карты. 
                 После этого открываются карты соперника.
-            </TextBlock>
-            <TextBlock TextWrapping="WrapWithOverflow">
+                </TextBlock>
+                <TextBlock TextWrapping="WrapWithOverflow">
                 В игре участвуют карты от 6 до туза (стандартная колода из 36 карт).
-            </TextBlock>            
-            <TextBlock TextWrapping="WrapWithOverflow">
+                </TextBlock>
+                <TextBlock TextWrapping="WrapWithOverflow">
                 Цель игры: набрать 21 очко.
-            </TextBlock>
-            <TextBlock TextWrapping="WrapWithOverflow">
+                </TextBlock>
+                <TextBlock TextWrapping="WrapWithOverflow">
                 Стоимость карт в очках: туз — 11 очков, король — 4 очка, дама — 3 очка, валет — 2 очка, остальные — по номиналу.
-            </TextBlock>
-            <TextBlock TextWrapping="WrapWithOverflow">
+                </TextBlock>
+                <TextBlock TextWrapping="WrapWithOverflow">
                 Победа засчитывается, если игрок набрал 21 очко или если количество очков больше, 
-                чем у соперника, но меньше 21. Если очков игрока больше чем 21 — автоматически засчитывается проигрыш. 
-            </TextBlock>
-            <TextBlock TextWrapping="WrapWithOverflow">
+                чем у соперника, но меньше 21. Если очков игрока больше чем 21 — автоматически засчитывается проигрыш.
+                </TextBlock>
+                <TextBlock TextWrapping="WrapWithOverflow">
                 Если оба участника набрали очков больше, чем 21 — засчитывается как ничья (или же проигрыш).
                 При ведении таблицы результатов ничья считается как проигрыш.
-            </TextBlock>
-            <TextBlock TextWrapping="WrapWithOverflow">
+                </TextBlock>
+                <TextBlock TextWrapping="WrapWithOverflow">
                 Если оба участника набрали очков больше, чем 21 — засчитывается как ничья (или же проигрыш).
                 При ведении таблицы результатов ничья считается как проигрыш.
-            </TextBlock>
-
-        </StackPanel>
+                </TextBlock>
+            </StackPanel>
+        </ScrollViewer>
     </Grid>
 </Window>

+ 26 - 0
WpfApp21Point/UserPartiesWindow.xaml

@@ -0,0 +1,26 @@
+<Window x:Class="WpfApp21Point.UserPartiesWindow"
+        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:WpfApp21Point"
+        mc:Ignorable="d"
+        MinWidth="600"
+        Title="UserPartiesWindow" Height="450" Width="600">
+    <Grid>
+        <StackPanel Orientation="Vertical">
+            <TextBlock Text="Партии пользователя" Style="{StaticResource OnWhiteHeader}"
+                       FontSize="25"/>
+            <DataGrid x:Name="PartiesTable" AutoGenerateColumns="False" CanUserAddRows="False"
+                          ItemsSource="{Binding GameParties}" HorizontalAlignment="Center">
+                <DataGrid.Columns>
+                    <!--<DataGridTextColumn IsReadOnly="True" Binding="{Binding }" Header="Место"/>-->
+                    <DataGridTextColumn IsReadOnly="True" Binding="{Binding Date, StringFormat={}{0:G}}" Header="Дата игры"/>
+                    <DataGridTextColumn IsReadOnly="True" Binding="{Binding IsWinString}" Header="Результат"/>
+                    <DataGridTextColumn IsReadOnly="True" Binding="{Binding AmountOfPointsUser}" Header="Очки игрока"/>
+                    <DataGridTextColumn IsReadOnly="True" Binding="{Binding AmountOfPointsOpponent}" Header="Очки противника"/>
+                </DataGrid.Columns>
+            </DataGrid>
+        </StackPanel>
+    </Grid>
+</Window>

+ 29 - 0
WpfApp21Point/UserPartiesWindow.xaml.cs

@@ -0,0 +1,29 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+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;
+using WpfApp21Point.Classes;
+
+namespace WpfApp21Point
+{
+    /// <summary>
+    /// Логика взаимодействия для UserPartiesWindow.xaml
+    /// </summary>
+    public partial class UserPartiesWindow : Window
+    {
+        public UserPartiesWindow()
+        {
+            InitializeComponent();
+            DataContext = GlobalData.User;
+        }
+    }
+}