Commit da72682e authored by M1888's avatar M1888

päiväkoodailut

parent 79d4500a
......@@ -27,8 +27,7 @@
</Style>
<Style TargetType="TextBox" x:Key="Lottonumero">
<Setter Property="Width" Value="50" />
<Setter Property="MinWidth" Value="20"/>
<Setter Property="Width" Value="10" />
<Setter Property="Margin" Value="3" />
</Style>
......
......@@ -73,7 +73,7 @@
<StackPanel>
<DockPanel Margin="5">
<Label>Vakiorivejä</Label>
<TextBox Style="{StaticResource Asetusboksi}" x:Name="txbVakiorivit" Text="{Binding Vakiorivit, Mode=TwoWay}" TextChanged="txbChanged" />
<TextBox Style="{StaticResource Asetusboksi}" x:Name="txbVakiorivit" Text="{Binding Vakiorivit, Mode=TwoWay}" TextChanged="TxbVakiorivit_TextChanged" />
</DockPanel>
<TextBlock Margin="25,-5,0,0">Montako vakioriviä haluat pelata?</TextBlock>
<Button Content="Aseta rivit" Width="100" x:Name="btnRivit" Click="BtnRivit_Click" />
......
......@@ -59,5 +59,30 @@ namespace Lottokone
}
}
}
private void TxbVakiorivit_TextChanged(object sender, TextChangedEventArgs e)
{
TextBox tb = sender as TextBox;
if(tb != null)
{
bool ok = false;
if (int.TryParse(tb.Text, out int result))
{
if(result >= 0 && result <= 15)
ok = true;
}
if(!ok)
{
lblInfo.Content = "Vakiorivejä voi olla 0-15 kpl";
btnRivit.IsEnabled = false;
}
else
{
lblInfo.Content = "";
btnRivit.IsEnabled = true;
}
}
}
}
}
......@@ -78,7 +78,13 @@
<Compile Include="Lottorivit.xaml.cs">
<DependentUpon>Lottorivit.xaml</DependentUpon>
</Compile>
<Compile Include="Rikkaimmat.xaml.cs">
<DependentUpon>Rikkaimmat.xaml</DependentUpon>
</Compile>
<Compile Include="Settings.cs" />
<Compile Include="ViewModel\Nimigeneraattori.cs" />
<Compile Include="ViewModel\Riviapuri.cs" />
<Compile Include="ViewModel\Scoreboard.cs" />
<Compile Include="Voitto.xaml.cs">
<DependentUpon>Voitto.xaml</DependentUpon>
</Compile>
......@@ -105,6 +111,10 @@
<DependentUpon>MainWindow.xaml</DependentUpon>
<SubType>Code</SubType>
</Compile>
<Page Include="Rikkaimmat.xaml">
<SubType>Designer</SubType>
<Generator>MSBuild:Compile</Generator>
</Page>
<Page Include="Voitto.xaml">
<SubType>Designer</SubType>
<Generator>MSBuild:Compile</Generator>
......@@ -138,6 +148,15 @@
<Generator>SettingsSingleFileGenerator</Generator>
<LastGenOutput>Settings.Designer.cs</LastGenOutput>
</None>
<None Include="Resources\etunimet.csv">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</None>
<None Include="Resources\lotto.sqlite">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</None>
<None Include="Resources\sukunimet.csv">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</None>
</ItemGroup>
<ItemGroup>
<None Include="App.config" />
......@@ -154,6 +173,9 @@
<Resource Include="Resources\lotto2.png" />
<Resource Include="Resources\lotto3.png" />
</ItemGroup>
<ItemGroup>
<Content Include="Resources\create-lotto.sql" />
</ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
<Import Project="packages\System.Data.SQLite.Core.1.0.110.0\build\net46\System.Data.SQLite.Core.targets" Condition="Exists('packages\System.Data.SQLite.Core.1.0.110.0\build\net46\System.Data.SQLite.Core.targets')" />
<Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">
......
......@@ -7,11 +7,5 @@
mc:Ignorable="d"
Title="Lottorivit" Height="450" Width="400">
<Grid x:Name="grdRivit">
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto"/>
</Grid.ColumnDefinitions>
</Grid>
</Window>
using System;
using Lottokone.Model;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
......@@ -23,58 +24,129 @@ namespace Lottokone
private Button btnSave;
private Label lblInfo;
// Tähän listaan tehdään uusi lista jokaista lottoriviä varten.
// Siihen listaan sitten lisätään nuo kyseisen rivin TextBoxit, jotta ne saa
// käytyä myöhemmin järjestyksessä läpi, kun rivit tallentaa.
private List<List<TextBox>> numerot;
// Tähän haetaan kannasta tallennetut rivit, joilla täytetään kentät valmiiksi
private List<Lottorivi> rivit;
public Lottorivit()
{
InitializeComponent();
NaytaKontrollit();
}
public void NaytaKontrollit()
private void NaytaKontrollit()
{
this.Height = 80 + Properties.Settings.Default.Vakiorivit * 40;
numerot = new List<List<TextBox>>();
grdRivit.RowDefinitions.Add(new RowDefinition());
btnSave = new Button();
btnSave.Content = "Tallenna";
btnSave.Margin = new Thickness(5);
btnSave.Click += btnSave_Click;
Grid.SetRow(btnSave, Properties.Settings.Default.Vakiorivit);
Grid.SetColumnSpan(btnSave, 2);
grdRivit.Children.Add(btnSave);
grdRivit.RowDefinitions.Add(new RowDefinition());
lblInfo = new Label();
lblInfo.Style = Resources["Isompi"] as Style;
lblInfo.Margin = new Thickness(5);
Grid.SetRow(lblInfo, Properties.Settings.Default.Vakiorivit + 1);
Grid.SetColumnSpan(lblInfo, 8);
grdRivit.Children.Add(lblInfo);
try
{
rivit = ViewModel.Riviapuri.Lataa(Properties.Settings.Default.Vakiorivit);
}
catch (Exception ex)
{
MessageBox.Show($"Virhe: {ex.Message}");
}
for (int i = 0; i < 8; i++)
grdRivit.ColumnDefinitions.Add(new ColumnDefinition());
/*
StackPanel rivit = new StackPanel();
for (int i = 0; i < Properties.Settings.Default.Vakiorivit; i++)
{
StackPanel rivi = new StackPanel();
rivi.Orientation = Orientation.Horizontal;
rivi.Name = $"spRivi{i}";
Grid.SetRow(rivi, i);
numerot.Add(new List<TextBox>());
grdRivit.RowDefinitions.Add(new RowDefinition());
Label l = new Label();
l.Content = $"Rivi {i}: ";
rivi.Children.Add(l);
l.Content = $"Rivi {i+1}";
Grid.SetRow(l, i);
Grid.SetColumn(l, 0);
grdRivit.Children.Add(l);
for (int j = 0; j < 7; j++)
{
TextBox tb = new TextBox();
tb.Style = Resources["Lottonumero"] as Style;
tb.Width = 25;
tb.Height = 25;
tb.Margin = new Thickness(3, 0, 3, 0);
tb.VerticalAlignment = VerticalAlignment.Top;
tb.GotFocus += txbFocus;
tb.TextChanged += txbChanged;
Grid.SetColumn(tb, j);
rivi.Children.Add(tb);
tb.Text = rivit[i].Numerot[j].ToString();
Grid.SetRow(tb, i);
Grid.SetColumn(tb, j+1);
grdRivit.Children.Add(tb);
numerot[i].Add(tb);
}
}
rivit.Children.Add(rivi);
}
grdRivit.Children.Add(rivit);
StackPanel spAlarivi = new StackPanel();
Grid.SetRow(spAlarivi, Properties.Settings.Default.Vakiorivit);
btnSave = new Button();
btnSave.Content = "Tallenna";
btnSave.Click += btnSave_Click;
spAlarivi.Children.Add(btnSave);
lblInfo = new Label();
lblInfo.Style = Resources["Isompi"] as Style;
spAlarivi.Children.Add(lblInfo);
grdRivit.Children.Add(spAlarivi);*/
private void txbFocus(object sender, RoutedEventArgs e)
{
TextBox tb = sender as TextBox;
if(tb != null)
{
tb.SelectAll();
}
}
public void btnSave_Click(object sender, RoutedEventArgs e)
{
List<Rivi> rivit = new List<Rivi>();
foreach(List<TextBox> rivi in numerot)
{
short[] tmp = new short[7];
// tarvitaan myös indeksi, joten foreach ei käy
for(int i = 0; i < 7; i++)
{
if(short.TryParse(rivi[i].Text, out short s))
{
// tehdään vielä validaatio ennen tallennusta
if(s < 1 || s > 40)
{
lblInfo.Content = "Käytä vain numeroita 1-40";
return;
}
tmp[i] = s;
}
else
{
lblInfo.Content = "Käytä vain numeroita 1-40";
return;
}
}
rivit.Add(new Rivi(tmp));
}
try
{
ViewModel.Riviapuri.Tallenna(rivit);
this.Close();
}
catch (Exception ex)
{
lblInfo.Content = $"Virhe tallennettaessa rivejä: {ex.Message}";
}
}
public void txbChanged(object sender, TextChangedEventArgs e)
......
......@@ -7,14 +7,15 @@
mc:Ignorable="d"
Title="Lottokone" Height="450" Width="950" Background="Black">
<StackPanel Orientation="Horizontal">
<StackPanel Margin="0,10,0,0">
<StackPanel Margin="5,10,5,0">
<Button x:Name="btnNext" Margin="0,5,0,0" Content="Seuraava viikko" Click="btnNext_Click"/>
<Button x:Name="btnStart" Margin="0,5,0,0" Content="Käynnistä" Click="btnStart_Click"/>
<Button x:Name="btnStop" Margin="0,5,0,0" Content="Pysäytä" Click="btnStop_Click"/>
<Button x:Name="btnSettings" Margin="0,50,0,0" Content="Asetukset" Click="btnSettings_Click" />
<Button x:Name="btnRikkaimmat" Margin="0,10,0,0" Content="Rikkaimmat" Click="BtnRikkaimmat_Click" />
</StackPanel>
<StackPanel Height="400">
<StackPanel x:Name="spLotto" Width="250" Background="White" Opacity="0.6" VerticalAlignment="Top">
<StackPanel x:Name="spLotto" Width="250" Background="White" Opacity="0.7" VerticalAlignment="Top">
<Label Style="{StaticResource Isompi}" Content="{Binding Vuosi}" ContentStringFormat="Vuosi: {0}"/>
<Label Style="{StaticResource Isompi}" Content="{Binding Viikko}" ContentStringFormat="Viikko: {0}"/>
<Label Style="{StaticResource Isompi}" Content="{Binding Rivimaara}" ContentStringFormat="Rivejä: {0:N0}"/>
......@@ -29,10 +30,11 @@
<ListView Height="350" Width="300" x:Name="lstStatus" ItemsSource="{Binding Value, UpdateSourceTrigger=PropertyChanged}" Opacity="0.7"/>
</StackPanel>
<StackPanel>
<StackPanel x:Name="spPlayer" Width="300" Margin="5,0,0,0" Background="White" Opacity="0.8">
<StackPanel x:Name="spPlayer" Width="300" Margin="5,0,0,0" Background="White" Opacity="0.7">
<Label Style="{StaticResource Isompi}" Content="{Binding Nimi}" ContentStringFormat="Nimi: {0}" />
<Label Style="{StaticResource Isompi}" Content="{Binding Saldo}" ContentStringFormat="Tilin saldo: {0:C0}" />
<Label Style="{StaticResource Isompi}" Content="{Binding Riveja}" ContentStringFormat="Rivejä: {0:N0}" />
<Label Style="{StaticResource Isompi}" Content="{Binding Saldo}" ContentStringFormat="Tilin saldo: {0:C0}" />
<Label Style="{StaticResource Isompi}" Content="{Binding Voitot}" ContentStringFormat="Voitot yhteensä: {0:C0}" />
</StackPanel>
<StackPanel Width="300">
<Label Style="{StaticResource Isompi}" Foreground="White" Content="Omat voitot:" Margin="0,100,0,0"/>
......
This diff is collapsed.
......@@ -9,6 +9,7 @@ using System.Runtime.CompilerServices;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using Medallion;
namespace Lottokone.Model
......@@ -79,6 +80,10 @@ namespace Lottokone.Model
public ConcurrentBag<Pelaaja> Pelaajat { get; set; }
// Nämä voi olla pelkkiä listoja, koska threadeissa vain lueataan niistä.
public List<string> Etunimet { get; set; }
public List<string> Sukunimet { get; set; }
// Tässä pidetään joka kierroksella jaettujen eri voittoluokkien
// palkkioiden määrät.
private int[] voitot;
......@@ -192,6 +197,15 @@ namespace Lottokone.Model
Status = "Veikkaus: Pelaa maltilla :):):):)";
stopwatch = Stopwatch.StartNew();
try
{
Etunimet = ViewModel.Nimigeneraattori.Etunimet();
Sukunimet = ViewModel.Nimigeneraattori.Sukunimet();
}
catch (Exception ex)
{
Status = $"Nimien lataus epäonnistui: {ex.Message}";
}
LisaaPelaajia(Properties.Settings.Default.Pelaajia, Properties.Settings.Default.Riveja);
stopwatch.Stop();
Status = $"Lisätty {Pelaajat.Count():N0} pelaajaa ({stopwatch.ElapsedMilliseconds}ms)";
......@@ -201,7 +215,9 @@ namespace Lottokone.Model
{
for (int i = 0; i < pelaajia; i++)
{
Pelaajat.Add(new Pelaaja(riveja, Properties.Settings.Default.Voimassa));
Pelaajat.Add(new Pelaaja(
$"{Etunimet[Rand.Next(0, Etunimet.Count())]} {Sukunimet[Rand.Next(0, Sukunimet.Count())]}",
riveja, Properties.Settings.Default.Voimassa));
}
}
......@@ -259,7 +275,7 @@ namespace Lottokone.Model
// kunnes voittajien määrä on selvillä.
case 3:
// kolme oikein, niin tarvitaan vielä lisänumero
if(r.Numerot.Contains(Voittorivi.Lisanumero))
if (r.Numerot.Contains(Voittorivi.Lisanumero))
{
// Pottia voi käsitellä useampi säie samaan aikaan, siksi
// System.Threading.Intelocked.Add() joka on atominen operaatio
......@@ -334,7 +350,7 @@ namespace Lottokone.Model
}
}
if(!oikein6_1.IsEmpty)
if (!oikein6_1.IsEmpty)
{
int voittajia = oikein6_1.Count();
voitot[1] = (int)((potti / 100) * 3.8) / voittajia;
......@@ -364,7 +380,7 @@ namespace Lottokone.Model
else
{
// n. 20 miljoonaa lienee hyvä maksimi päävoitto
if(voitot[0] < 20_000_000)
if (voitot[0] < 20_000_000)
voitot[0] = (int)(voitot[0] * 1.07);
}
RaisePropertyChanged("Voitot");
......
......@@ -8,8 +8,6 @@ namespace Lottokone.Model
{
public class Lottorivi : Rivi
{
public short Viikko { get; set; }
// Viikkoja, montako voimassa. 0 = ikuinen
public int Voimassa { get; set; }
......
......@@ -12,7 +12,7 @@ namespace Lottokone.Model
{
public event PropertyChangedEventHandler PropertyChanged;
// Pelaajan nimi. Ei pakollinen
// Pelaajan nimi.
private string nimi;
public string Nimi
{
......@@ -29,18 +29,40 @@ namespace Lottokone.Model
// Tilin saldo. Nollista lähdetään.
private int saldo;
public int Saldo {
public int Saldo
{
get
{
return saldo;
}
set
{
// jos määrä oli positiivinen, lisätään se voittoihin
if(value - saldo > 0)
{
Voitot += (uint)(value - saldo);
}
saldo = value;
RaisePropertyChanged();
}
}
// Kaikki pelaajan saamat voitot. Pelkkää plussaa.
private uint voitot;
public uint Voitot
{
get
{
return voitot;
}
set
{
voitot = value;
RaisePropertyChanged();
}
}
// Lista lottoriveistä
public List<Lottorivi> Rivit { get; set; }
......@@ -66,6 +88,7 @@ namespace Lottokone.Model
public Pelaaja()
{
Saldo = 0;
Voitot = 0;
Rivit = new List<Lottorivi>();
Riveja = 0;
}
......@@ -84,6 +107,11 @@ namespace Lottokone.Model
}
}
public Pelaaja(string nimi, int riveja, int voimassa) : this(riveja, voimassa)
{
Nimi = nimi;
}
public void Tick()
{
// Veloitetaan lottorivien hinta tililtä.
......@@ -122,5 +150,10 @@ namespace Lottokone.Model
if (PropertyChanged != null)
PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
public override string ToString()
{
return $"{Saldo:C0}: {Nimi}";
}
}
}
......@@ -23,7 +23,7 @@ namespace Lottokone.Model
// arvotaan voittoriville vielä lisänumero
do {
Lisanumero = (short)Rand.Next(0, 41);
Lisanumero = (short)Rand.Next(1, 41);
} while (Numerot.Contains(Lisanumero));
}
......
......@@ -8,8 +8,8 @@
// </auto-generated>
//------------------------------------------------------------------------------
namespace Lottokone.Properties
{
namespace Lottokone.Properties {
using System;
/// <summary>
......@@ -19,31 +19,26 @@ namespace Lottokone.Properties
// class via a tool like ResGen or Visual Studio.
// To add or remove a member, edit your .ResX file then rerun ResGen
// with the /str option, or rebuild your VS project.
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")]
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "15.0.0.0")]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
internal class Resources
{
internal class Resources {
private static global::System.Resources.ResourceManager resourceMan;
private static global::System.Globalization.CultureInfo resourceCulture;
[global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
internal Resources()
{
internal Resources() {
}
/// <summary>
/// Returns the cached ResourceManager instance used by this class.
/// </summary>
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
internal static global::System.Resources.ResourceManager ResourceManager
{
get
{
if ((resourceMan == null))
{
internal static global::System.Resources.ResourceManager ResourceManager {
get {
if (object.ReferenceEquals(resourceMan, null)) {
global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("Lottokone.Properties.Resources", typeof(Resources).Assembly);
resourceMan = temp;
}
......@@ -56,16 +51,22 @@ namespace Lottokone.Properties
/// resource lookups using this strongly typed resource class.
/// </summary>
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
internal static global::System.Globalization.CultureInfo Culture
{
get
{
internal static global::System.Globalization.CultureInfo Culture {
get {
return resourceCulture;
}
set
{
set {
resourceCulture = value;
}
}
/// <summary>
/// Looks up a localized string similar to Data Source=Resources/lotto.sqlite;Version=3;.
/// </summary>
internal static string SqliteConnStr {
get {
return ResourceManager.GetString("SqliteConnStr", resourceCulture);
}
}
}
}
......@@ -46,7 +46,7 @@
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Serialization.Formatters.Binary.BinaryFormatter
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
......@@ -60,6 +60,7 @@
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
......@@ -68,9 +69,10 @@
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" />
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
......@@ -85,9 +87,10 @@
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" msdata:Ordinal="1" />
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
......@@ -109,9 +112,12 @@
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<data name="SqliteConnStr" xml:space="preserve">
<value>Data Source=Resources/lotto.sqlite;Version=3;</value>
</data>
</root>
\ No newline at end of file
CREATE TABLE IF NOT EXISTS Scoreboard (
Nimi VARCHAR(255),
Saldo INT,
Pvm DATETIME
);
CREATE TABLE IF NOT EXISTS Lottorivit (
id INT NOT NULL PRIMARY KEY,
n1 INT DEFAULT 1,
n2 INT DEFAULT 2,
n3 INT DEFAULT 3,
n4 INT DEFAULT 4,
n5 INT DEFAULT 5,
n6 INT DEFAULT 6,
n7 INT DEFAULT 7
);
INSERT INTO Lottorivit (id) VALUES
(1), (2), (3), (4), (5), (6), (7), (8),
(9), (10), (11), (12), (13), (14), (15);
Timo,Juha,Matti,Kari,Mikko,Antti,Jari,Jukka,Mika,Markku,Pekka,Hannu,Heikki,Seppo,Janne,Ari,Sami,Ville,Marko,Petri,Lauri,Jani,Erkki,Pentti,Jorma,Teemu,Harri,Eero,Jarmo,Jaakko,Raimo,Risto,Jussi,Pasi,Juho,Esa,Pertti,Niko,Jouni,Toni,Martti,Arto,Reijo,Veikko,Markus,Vesa,Tomi,Jouko,Tuomas,Aleksi,Olli,Esko,Kimmo,Joni,Tommi,Tero,Joonas,Henri,Eetu,Leo,Kalle,Ilkka,Jarkko,Paavo,Jesse,Pauli,Eino,Tuomo,Joona,Elias,Jere,Tapio,Mikael,Juuso,Veli,Matias,Onni,Keijo,Simo,Arttu,Jyrki,Lasse,Leevi,Juhani,Aki,Kai,Riku,Mauri,Toivo,Joel,Väinö,Niklas,Otto,Miika,Jarno,Kauko,Reino,Daniel,Niilo,Veeti,Jan,Rauno,Valtteri,Teuvo,Rasmus,Ossi,Roope,Olavi,Ismo,Santeri,Veijo,Tauno,Anssi,Anton,Oskari,Atte,Oliver,Aaro,Osmo,Miro,Vilho,Asko,Kalevi,Samuli,Samu,Aapo,Samuel,Emil,Tuukka,Lassi,Kim,Aimo,Taisto,Yrjö,Eemeli,Johan,Julius,Roni,Topi,Jimi,Konsta,Henry,Henrik,Aarne,Karl,Tarmo,Tapani,Miikka,Akseli,Tatu,Jyri,Mauno,Erik,Aatu,Sakari,Johannes,Viljo,Max,Alex,Tom,Patrik,Saku,Sauli,Vili,Ahti,Ilpo,Arvo,Eemil,Kaarlo,Kasper,Alpo,Viljami,Kaj,Lars,Oiva,Kristian,Rami,Veli-Matti,Benjamin,Eeli,Jonne,Unto,Peter,Iiro,Kyösti,Eelis,Miska,Lenni,Juha-Pekka,Jami,Topias,Heimo,Sampo,Jukka-Pekka,Nico,Sebastian,Aulis,Robert,Otso,Pyry,Luka,Hugo,Aaron,Teppo,Hans,Tony,Urho,Alexander,Sulo,Thomas,Aku,Petteri,Miko,Leif,Santtu,Ilari,Noel,Nooa,Perttu,Panu,Robin,Luukas,Veli-Pekka,Harry,Carl,Veikka,Voitto,Tomas,Peetu,Juha-Matti,Elmeri,Olli-Pekka,Jonas,Jasper,Rainer,John,Urpo,Ilmari,Terho,Lucas,Nils,Nuutti,Aatos,Antero,Christian,Oskar,Aarno,Paul,Tino,Lukas,Klaus,Joonatan,Teijo,Reima,Aarni,Anders,Aarre,Stefan,Joakim,Lari,Bengt,Hannes,Severi,Kaapo,Stig,Kasperi,Oscar,Tommy,Ari-Pekka,Justus,Alvar,Frans,Arvi,Axel,Rolf,Sisu,Jesper,Karri,Luca,William,Andreas,Sven,Marcus,Jori,Kalervo,Martin,Manu,Erno,Ali,Kurt,Elmo,Jerry,Jooa,Kimi,Mats,Tenho,Kenneth,Taneli,Ralf,Touko,Timi,Taavi,Jari-Pekka,Patrick,Vertti,Rauli,Simon,Viktor,Jonathan,Bo,Eemi,Per,Björn,Verneri,Milo,Fredrik,Felix,Raine,Jiri,Michael,Linus,Heino,Juhana,Mico,Kevin,Mohamed,Casper,Eerik,Kosti,Tuure,Dan,Ulf,Tobias,David,Jan-Erik,Sampsa,Mathias,Artturi,Niki,Helge,Edvin,Adam,Ville-Veikko,Armas,Christer,Magnus,Noah,Visa,Allan,Erkka,Jens,Auvo,Bror,Ilmo,Taito,Victor,Iikka,Eliel,Alf,Kjell,Jose,Tiitus,Roger,Krister,Joose,Ukko,Jalo,Sasu,Petrus,Jeremias,Valto,Albert,Teo,Niclas,Marco,Jussi-Pekka,Aleksanteri,Vesa-Matti,Leon,Waltteri,Altti,Göran,Jimmy,Antton,Jon,Okko,Kaarle,Nikolas,Isto,Jonatan,Niila,Filip,Börje,Jarl,Iivo,Ahmed,Johnny,Roy,Nicolas,Liam,Richard,Elia,Oula,Paulus,Noa,Iivari,Eric,Gabriel,Tor,Turo,Jim,Jonni,Venni,Torsti,Vincent,Dennis,Andrei,Tim,Ilja,Rene,Hemmo,Rafael,Christoffer,Mio,Nicholas,Aamos,Reko,Ben,Eevert,Isak,Mark,Håkan,Ensio,Åke,Hermanni,Bjarne,Jalmari,Atso,Sam,Petja,Theo,Adrian,Ville-Pekka,Frank,Jare,Nikolai,Kauno,Raino,Miki,Vesa-Pekka,Jasu,Usko,Pietari,Walter,Dani,Juri,Aron,Gunnar,Eppu,Mirko,Vladimir,Amos,Elis,Aapeli,Eljas,Antti-Jussi,Arno,Arne,Valter,Guy,Mohammad,Neo,Jaro,Aukusti,Kari-Pekka,Gustav,Kaius,Christopher,Georg,Pontus,Sten,Antti-Pekka,Pekko,Toimi,Omar,Einari,Aatto,Ronny,Boris,Aksel,Elliot,Arsi,Nicklas,Turkka,Aleksandr,Samppa,Kent,Into,Rune,Tage,Antto,André,Mattias,Ivan,Klas,Jakob,Sergei,Romeo,Kristoffer,Mohammed,Mikke,Soini,Asmo,Osku,Wille,Maxim,Nestori,Artur,Elmer,Jonny,Pavel,Bruno,Igor,Joa,Ibrahim,Arthur,Van,Nino,Uuno,Muhammad,Ruben,Ole,Vilppu,Matts,Orvo,Nikita,Abdirahman,Ville-Petteri,Wilhelm,Philip,Anttoni,Albin,Alvin,Pietu,Joosua,James,Amir,Svante,Aleksander,Karo,Mitja,Pete,Herman,Viljam,Lennart,Jacob,Roman,August,Aake,Valde,Kasimir,Maximilian,Esa-Pekka,Vihtori,Hannu-Pekka,Karim,Alfred,Denis,Pirkka,Jean,Arvid,Ville-Matti,Jari-Matti,Edward,Ove,Erkko,Valo,Ohto,Evert,Herkko,Jack,Aleksis,Marius,Mertsi,Einar,Jörgen,Per-Erik,Roland,Olof,Edvard,Petro,Asser,Sune,Iisakki,Gösta,Bernt,Ari-Matti,Masi,Aleksei,Nikke,Totti,Jason,Petter,Joshua,Torsten,Kaino,Benny,Birger,Joachim,Maunu,Jake,Verner,Aslak,Abdullahi,Kuisma,Rikhard,Juho-Pekka,Jaani,Oleg,Ivar,Julian,Rony,Berndt,Eeti,Timo-Pekka,Ernst,Mustafa,Jetro,Dimitri,Alvari,Konstantin,Ted,Dick,Karl-Erik,Immo,Peik,Maksim,Anselmi,Knut,Charles,Pessi,Manuel,Ian,Jone,Lars-Erik,Jasse,Carl-Johan,Miio,Sergey,Samir,Iisak,Dominic,Renne,Hassan,Wiljami,Mikhail,Mårten,Bertel,Kare,Anthony,Olli-Matti,Veini,Milton,Manne,Simeon,Ingmar,Eddie,Ronnie,Melvin,Wilmer,Casimir,Dmitri,Raul,Ola,Ahmad,Matthew,Alexandre,Alec,Conny,Staffan,Yngve,Edwin,Ville-Valtteri,Yusuf,Antonio,Kennet,Tore,Jermu,Joe,Jali,Kirill,Mike,Wäinö,Frej,Sture,Jani-Petteri,Caj,Kerkko,Olle,Rico,Rauni,Jaska,Aappo,Leonard,Benjam,Kuutti,Glenn,Holger,Sixten,Andrey,Hussein,Simo-Pekka,Miiko,Isac,Nemo,Jeremia,Ami,Aarto,Hamza,Huugo,Carlos,Mihail,Kristo,Jarko,Jesperi,Jusa,Ron,Terno,Sören,René,Mehmet,Hemmi,Sami-Pekka,Viggo,Helmer,Andrew,Fred,Remu,Atro,Marc,Micke,Karl-Johan,Valentin,Rudolf,Levi,Kari-Matti,Leonardo,Folke,Sami-Petteri,Alexey,Tristan,Kaspian,Aate,Abdi,Harald,Vilhelm,Said,Ismail,Gustaf,Ken,Ossian,Saska,Elja,Benjami,Zacharias,Dmitry,Kauri,Cristian,Artem,Jan-Peter,Rickard,Thor,Anas,Torbjörn,Jan-Mikael,Henrikki,Jani-Pekka,Amin,Alfons,Josef,Daniil,Juho-Matti,Khalid,Alexi,Mahamed,Uolevi,Esa-Matti,Uula,Sakke,Valeri,Aati,Matteus,Kusti,Miiro,Miklas,Risto-Matti,Joseph,Kullervo,Elo,Bertil,Niko-Petteri,Niilas,Hiski,Saul,Werner,Eikka,Lenny,Per-Olof,Jero,Liinus,Titus,Sulevi,Alvi,Jaajo,Ragnar,Kaj-Erik,Hasan,Akusti,Ryan,Alexei,Juan,Milan,Mitro,Janne-Pekka,Colin,Clas,Torolf,Abdul,Abdullah,Vadim,Misa,Jirka,Luke,Morris,Jyry,Anttu,Verne,Nathan,Vinski,Vikke,Greger,Matti-Pekka,Myrsky,Sven-Erik,Kustaa,Juha-Petri,Valtti,George,Sammy,Eeka,Muhammed,Elian,Jeremy,Eevertti,Jiro,Juhamatti,Theodor,Eduard,Miku,Ludvig,Riku-Pekka,Ahto,Charlie,Claes,Alexis,Edgar,Alpi,Ville-Markus,Juha-Petteri,Roberto,Curt,Micael,Werneri,Rabbe,Leino,Valle,Minh,Mikko-Pekka,Vidar,Jaan,Alan,Fabian,Jeri,Asla,Elvis,Vladislav,Juska,Valdemar,Pär,Roi,Tyko,Osman,Rufus,Tami,Thanh,Md.,Otava,Uljas,Hampus,Wiljam,Harto,Anatoli,Patric,Sean,Karlo,Evgeny,Silvo,Emir,Nils-Erik,Luis,Remi,Zakaria,Auno,Andre,Jussi-Petteri,Eerikki,Måns,Raoul,Aksu,Bo-Erik,Ture,Timothy,Jasperi,Weeti,Milko,Taavetti,Runar,Bilal,Mauritz,Arimo,Aale,Stanislav,Dylan,Jakke,Rolle,Kalle-Pekka,Miguel,Riki,Jaako,Olav,Toomas,Kosmo,Yasin,Finn,Riku-Petteri,Jouka,Jeremi,Emre,Emilio,Keimo,Chris,Carl-Erik,Tuisku,Jerker,Jan-Olof,Adnan,Eki,Deniz,Vili-Valtteri,Mario,Aleks,Asseri,Valtter,Kenny,Carlo,Vitali,Ethan,Pedro,Sakarias,Jan-Henrik,Lemmy,Evan,Eemu,Ari-Jukka,Kristofer,Jussa,Eero-Pekka,Elton,Ilyas,Semi,Matteo,Nestor,Claus,Pepe,Sameli,Pehr,Brian,Dante,Rurik,Aki-Petteri,Timur,Steven,Urmas,Ray,Selim,Mikki,Joni-Petteri,Jani-Matti,Eliot,Juuse,Wili,Lionel,Joni-Pekka,Niku,Jerri,Leonid,Emmanuel,Marlo,Emppu,Antti-Juhani,Joska,Stephen,Ronald,Alarik,Hans-Erik,Rayan,José,Wilho,Jamal,Nick,Dag,Joacim,Herbert,Ricardo,Tito,Nuuti,Abel,Uno,Rudi,Huuko,Marek,Ano,Veetu,Jooel,Ante,Jan-Kristian,Kian,Diego,Abdulkadir,Veli-Jussi,Jamiel,Jonah,Fjalar,Arman,Totte,Muhamed,Mika-Petteri,Nicky,Matthias,Michel,Alessandro,Taimo,Kaspar,Maximus,Isaac,Melker,Caspian,Jan-Eric,Pieti,Miikael,Malte,Antti-Ville,Jyri-Pekka,Reeti,Timmy,Ralph,Dominik,Oliwer,Carl-Gustav,Renny,Mika-Petri,Mehdi,Sven-Olof,Jamie,Caius,Reetu,Ekku,Otto-Ville,Ilya,Ilppo,Olli-Petteri,Louis,Tarvo,Hasse,Marlon,Raymond,Juho-Antti,Teodor,Justin,Riko,Leonel,Jona,Hamid,Josua,Elvin,Jan-Markus,Morgan,Tahvo,Jokke,Ruuben,Mahdi,Md,Quoc,Mohamad,Matvei,Murat,Nelson,Mika-Matti,Youssef,Pablo,Eskil,Miikkael,Karl-Gustav,Vilmer,Arian,Lenne,Ere,Mohamud,Yahya,Calle,Ahmet,Tero-Pekka,Jirko,Junnu,Bert,Armo,Aito,Arnold,Abbas,Harri-Pekka,Moritz,Riku-Matti,Aram,Alexandros,Helmeri,Eugen,Vieno,Stephan,Viking,Mahad,Hjalmar,Jukka-Matti,Juho-Petteri,Duc,Tomi-Pekka,Franz,Julle,Risto-Pekka,Nikolaos,Juhapekka,Jony,Malik,Musa,Janne-Petteri,Andy,Ludwig,Jussi-Matti,Hilding,Reh,Anthon,Andres,Mika-Pekka,Jordan,Kenth,Jan-Anders,Carl-Gustaf,Robi,Ollipekka,Launo,Vili-Petteri,Lenna,Carl-Henrik,Jerome,Veli-Jukka,Havu,Steve,Elof,Melwin,Masa,Nabil,Jukka-Petteri,Yahye,Andrea,Mici,Georgios,Anh,Josi,Trygve,Serguei,Ingvar,Konrad,Sander,Pauno,Imran,Valio,Zachary,Cay,Ilias,Karlos,Elijah
\ No newline at end of file
This diff is collapsed.
<Window x:Class="Lottokone.Rikkaimmat"
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:Lottokone"
mc:Ignorable="d"
Title="Rikkaimmat" Height="420" Width="900">
<Window.Background>
<ImageBrush ImageSource="Resources/lotto.png" Stretch="UniformToFill"/>
</Window.Background>
<DockPanel>
<StackPanel Width="300" DockPanel.Dock="Right">
<Label Style="{StaticResource Isompi}" Content="High score:"/>
<DataGrid x:Name="dgScoreboard" Opacity="0.8" IsReadOnly="True"></DataGrid>
</StackPanel>
<StackPanel Width="300" DockPanel.Dock="Right" HorizontalAlignment="Right">
<Label Style="{StaticResource Isompi}" Content="Rikkaimmat pelaajat:" Foreground="Black"/>
<ListView x:Name="lstRikkaimmat" Opacity="0.8"></ListView>
</StackPanel>
</DockPanel>
</Window>
using System;
using System.Collections.Concurrent;
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 Lottokone.Model;
namespace Lottokone
{
/// <summary>
/// Interaction logic for Rikkaimmat.xaml
/// </summary>
public partial class Rikkaimmat : Window
{
public Rikkaimmat(ConcurrentBag<Pelaaja> pelaajat)
{
InitializeComponent();
lstRikkaimmat.ItemsSource = pelaajat.OrderByDescending(p => p.Saldo).Take(15);
try
{
dgScoreboard.ItemsSource = ViewModel.Scoreboard.HaePelaajat();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
}
}
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Lottokone.ViewModel
{
public static class Nimigeneraattori
{
public const string Etunimipolku = @"Resources/etunimet.csv";
public const string Sukunimipolku = @"Resources/sukunimet.csv";
public static List<string> Etunimet()
{
try
{
// luetaan csv, katkotaan pilkun kohdalta, ja palautetaan listana
return new List<string>(File.ReadAllText(Etunimipolku).Split(',').ToArray());
}
catch
{
throw;
}
}