Commit da72682e authored by M1888's avatar M1888

päiväkoodailut

parent 79d4500a
...@@ -27,8 +27,7 @@ ...@@ -27,8 +27,7 @@
</Style> </Style>
<Style TargetType="TextBox" x:Key="Lottonumero"> <Style TargetType="TextBox" x:Key="Lottonumero">
<Setter Property="Width" Value="50" /> <Setter Property="Width" Value="10" />
<Setter Property="MinWidth" Value="20"/>
<Setter Property="Margin" Value="3" /> <Setter Property="Margin" Value="3" />
</Style> </Style>
......
...@@ -73,7 +73,7 @@ ...@@ -73,7 +73,7 @@
<StackPanel> <StackPanel>
<DockPanel Margin="5"> <DockPanel Margin="5">
<Label>Vakiorivejä</Label> <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> </DockPanel>
<TextBlock Margin="25,-5,0,0">Montako vakioriviä haluat pelata?</TextBlock> <TextBlock Margin="25,-5,0,0">Montako vakioriviä haluat pelata?</TextBlock>
<Button Content="Aseta rivit" Width="100" x:Name="btnRivit" Click="BtnRivit_Click" /> <Button Content="Aseta rivit" Width="100" x:Name="btnRivit" Click="BtnRivit_Click" />
......
...@@ -59,5 +59,30 @@ namespace Lottokone ...@@ -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 @@ ...@@ -78,7 +78,13 @@
<Compile Include="Lottorivit.xaml.cs"> <Compile Include="Lottorivit.xaml.cs">
<DependentUpon>Lottorivit.xaml</DependentUpon> <DependentUpon>Lottorivit.xaml</DependentUpon>
</Compile> </Compile>
<Compile Include="Rikkaimmat.xaml.cs">
<DependentUpon>Rikkaimmat.xaml</DependentUpon>
</Compile>
<Compile Include="Settings.cs" /> <Compile Include="Settings.cs" />
<Compile Include="ViewModel\Nimigeneraattori.cs" />
<Compile Include="ViewModel\Riviapuri.cs" />
<Compile Include="ViewModel\Scoreboard.cs" />
<Compile Include="Voitto.xaml.cs"> <Compile Include="Voitto.xaml.cs">
<DependentUpon>Voitto.xaml</DependentUpon> <DependentUpon>Voitto.xaml</DependentUpon>
</Compile> </Compile>
...@@ -105,6 +111,10 @@ ...@@ -105,6 +111,10 @@
<DependentUpon>MainWindow.xaml</DependentUpon> <DependentUpon>MainWindow.xaml</DependentUpon>
<SubType>Code</SubType> <SubType>Code</SubType>
</Compile> </Compile>
<Page Include="Rikkaimmat.xaml">
<SubType>Designer</SubType>
<Generator>MSBuild:Compile</Generator>
</Page>
<Page Include="Voitto.xaml"> <Page Include="Voitto.xaml">
<SubType>Designer</SubType> <SubType>Designer</SubType>
<Generator>MSBuild:Compile</Generator> <Generator>MSBuild:Compile</Generator>
...@@ -138,6 +148,15 @@ ...@@ -138,6 +148,15 @@
<Generator>SettingsSingleFileGenerator</Generator> <Generator>SettingsSingleFileGenerator</Generator>
<LastGenOutput>Settings.Designer.cs</LastGenOutput> <LastGenOutput>Settings.Designer.cs</LastGenOutput>
</None> </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>
<ItemGroup> <ItemGroup>
<None Include="App.config" /> <None Include="App.config" />
...@@ -154,6 +173,9 @@ ...@@ -154,6 +173,9 @@
<Resource Include="Resources\lotto2.png" /> <Resource Include="Resources\lotto2.png" />
<Resource Include="Resources\lotto3.png" /> <Resource Include="Resources\lotto3.png" />
</ItemGroup> </ItemGroup>
<ItemGroup>
<Content Include="Resources\create-lotto.sql" />
</ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" /> <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')" /> <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"> <Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">
......
...@@ -7,11 +7,5 @@ ...@@ -7,11 +7,5 @@
mc:Ignorable="d" mc:Ignorable="d"
Title="Lottorivit" Height="450" Width="400"> Title="Lottorivit" Height="450" Width="400">
<Grid x:Name="grdRivit"> <Grid x:Name="grdRivit">
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto"/>
</Grid.ColumnDefinitions>
</Grid> </Grid>
</Window> </Window>
using System; using Lottokone.Model;
using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq; using System.Linq;
using System.Text; using System.Text;
...@@ -23,58 +24,129 @@ namespace Lottokone ...@@ -23,58 +24,129 @@ namespace Lottokone
private Button btnSave; private Button btnSave;
private Label lblInfo; 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() public Lottorivit()
{ {
InitializeComponent(); InitializeComponent();
NaytaKontrollit(); 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++) for (int i = 0; i < Properties.Settings.Default.Vakiorivit; i++)
{ {
StackPanel rivi = new StackPanel(); numerot.Add(new List<TextBox>());
rivi.Orientation = Orientation.Horizontal; grdRivit.RowDefinitions.Add(new RowDefinition());
rivi.Name = $"spRivi{i}";
Grid.SetRow(rivi, i);
Label l = new Label(); Label l = new Label();
l.Content = $"Rivi {i}: "; l.Content = $"Rivi {i+1}";
rivi.Children.Add(l); Grid.SetRow(l, i);
Grid.SetColumn(l, 0);
grdRivit.Children.Add(l);
for (int j = 0; j < 7; j++) for (int j = 0; j < 7; j++)
{ {
TextBox tb = new TextBox(); TextBox tb = new TextBox();
tb.Style = Resources["Lottonumero"] as Style; 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; tb.TextChanged += txbChanged;
Grid.SetColumn(tb, j); tb.Text = rivit[i].Numerot[j].ToString();
rivi.Children.Add(tb); 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) 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) public void txbChanged(object sender, TextChangedEventArgs e)
......
...@@ -7,14 +7,15 @@ ...@@ -7,14 +7,15 @@
mc:Ignorable="d" mc:Ignorable="d"
Title="Lottokone" Height="450" Width="950" Background="Black"> Title="Lottokone" Height="450" Width="950" Background="Black">
<StackPanel Orientation="Horizontal"> <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="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="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="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="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>
<StackPanel Height="400"> <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 Vuosi}" ContentStringFormat="Vuosi: {0}"/>
<Label Style="{StaticResource Isompi}" Content="{Binding Viikko}" ContentStringFormat="Viikko: {0}"/> <Label Style="{StaticResource Isompi}" Content="{Binding Viikko}" ContentStringFormat="Viikko: {0}"/>
<Label Style="{StaticResource Isompi}" Content="{Binding Rivimaara}" ContentStringFormat="Rivejä: {0:N0}"/> <Label Style="{StaticResource Isompi}" Content="{Binding Rivimaara}" ContentStringFormat="Rivejä: {0:N0}"/>
...@@ -29,10 +30,11 @@ ...@@ -29,10 +30,11 @@
<ListView Height="350" Width="300" x:Name="lstStatus" ItemsSource="{Binding Value, UpdateSourceTrigger=PropertyChanged}" Opacity="0.7"/> <ListView Height="350" Width="300" x:Name="lstStatus" ItemsSource="{Binding Value, UpdateSourceTrigger=PropertyChanged}" Opacity="0.7"/>
</StackPanel> </StackPanel>
<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 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 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>
<StackPanel Width="300"> <StackPanel Width="300">
<Label Style="{StaticResource Isompi}" Foreground="White" Content="Omat voitot:" Margin="0,100,0,0"/> <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; ...@@ -9,6 +9,7 @@ using System.Runtime.CompilerServices;
using System.Text; using System.Text;
using System.Threading; using System.Threading;
using System.Threading.Tasks; using System.Threading.Tasks;
using Medallion;
namespace Lottokone.Model namespace Lottokone.Model
...@@ -79,6 +80,10 @@ namespace Lottokone.Model ...@@ -79,6 +80,10 @@ namespace Lottokone.Model
public ConcurrentBag<Pelaaja> Pelaajat { get; set; } 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 // Tässä pidetään joka kierroksella jaettujen eri voittoluokkien
// palkkioiden määrät. // palkkioiden määrät.
private int[] voitot; private int[] voitot;
...@@ -192,6 +197,15 @@ namespace Lottokone.Model ...@@ -192,6 +197,15 @@ namespace Lottokone.Model
Status = "Veikkaus: Pelaa maltilla :):):):)"; Status = "Veikkaus: Pelaa maltilla :):):):)";
stopwatch = Stopwatch.StartNew(); 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); LisaaPelaajia(Properties.Settings.Default.Pelaajia, Properties.Settings.Default.Riveja);
stopwatch.Stop(); stopwatch.Stop();
Status = $"Lisätty {Pelaajat.Count():N0} pelaajaa ({stopwatch.ElapsedMilliseconds}ms)"; Status = $"Lisätty {Pelaajat.Count():N0} pelaajaa ({stopwatch.ElapsedMilliseconds}ms)";
...@@ -201,7 +215,9 @@ namespace Lottokone.Model ...@@ -201,7 +215,9 @@ namespace Lottokone.Model
{ {
for (int i = 0; i < pelaajia; i++) 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 ...@@ -259,7 +275,7 @@ namespace Lottokone.Model
// kunnes voittajien määrä on selvillä. // kunnes voittajien määrä on selvillä.
case 3: case 3:
// kolme oikein, niin tarvitaan vielä lisänumero // 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 // Pottia voi käsitellä useampi säie samaan aikaan, siksi
// System.Threading.Intelocked.Add() joka on atominen operaatio // System.Threading.Intelocked.Add() joka on atominen operaatio
...@@ -334,7 +350,7 @@ namespace Lottokone.Model ...@@ -334,7 +350,7 @@ namespace Lottokone.Model
} }
} }
if(!oikein6_1.IsEmpty) if (!oikein6_1.IsEmpty)
{ {
int voittajia = oikein6_1.Count(); int voittajia = oikein6_1.Count();
voitot[1] = (int)((potti / 100) * 3.8) / voittajia; voitot[1] = (int)((potti / 100) * 3.8) / voittajia;
...@@ -364,7 +380,7 @@ namespace Lottokone.Model ...@@ -364,7 +380,7 @@ namespace Lottokone.Model
else else
{ {
// n. 20 miljoonaa lienee hyvä maksimi päävoitto // 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); voitot[0] = (int)(voitot[0] * 1.07);
} }
RaisePropertyChanged("Voitot"); RaisePropertyChanged("Voitot");
......
...@@ -8,8 +8,6 @@ namespace Lottokone.Model ...@@ -8,8 +8,6 @@ namespace Lottokone.Model
{ {
public class Lottorivi : Rivi public class Lottorivi : Rivi
{ {
public short Viikko { get; set; }
// Viikkoja, montako voimassa. 0 = ikuinen // Viikkoja, montako voimassa. 0 = ikuinen
public int Voimassa { get; set; } public int Voimassa { get; set; }
......
...@@ -12,7 +12,7 @@ namespace Lottokone.Model ...@@ -12,7 +12,7 @@ namespace Lottokone.Model
{ {
public event PropertyChangedEventHandler PropertyChanged; public event PropertyChangedEventHandler PropertyChanged;
// Pelaajan nimi. Ei pakollinen // Pelaajan nimi.
private string nimi; private string nimi;
public string Nimi public string Nimi
{ {
...@@ -29,18 +29,40 @@ namespace Lottokone.Model ...@@ -29,18 +29,40 @@ namespace Lottokone.Model
// Tilin saldo. Nollista lähdetään. // Tilin saldo. Nollista lähdetään.
private int saldo; private int saldo;
public int Saldo { public int Saldo
{
get get
{ {
return saldo; return saldo;
} }
set set
{ {
// jos määrä oli positiivinen, lisätään se voittoihin
if(value - saldo > 0)
{
Voitot += (uint)(value - saldo);
}
saldo = value; saldo = value;
RaisePropertyChanged(); RaisePropertyChanged();
} }
} }
// Kaikki pelaajan saamat voitot. Pelkkää plussaa.
private uint voitot;
public uint Voitot
{
get
{
return voitot;
}
set
{
voitot = value;
RaisePropertyChanged();
}
}
// Lista lottoriveistä // Lista lottoriveistä
public List<Lottorivi> Rivit { get; set; } public List<Lottorivi> Rivit { get; set; }
...@@ -66,6 +88,7 @@ namespace Lottokone.Model ...@@ -66,6 +88,7 @@ namespace Lottokone.Model
public Pelaaja() public Pelaaja()
{ {
Saldo = 0; Saldo = 0;
Voitot = 0;
Rivit = new List<Lottorivi>(); Rivit = new List<Lottorivi>();
Riveja = 0; Riveja = 0;
} }
...@@ -84,6 +107,11 @@ namespace Lottokone.Model ...@@ -84,6 +107,11 @@ namespace Lottokone.Model
} }
} }
public Pelaaja(string nimi, int riveja, int voimassa) : this(riveja, voimassa)
{
Nimi = nimi;
}
public void Tick() public void Tick()
{ {
// Veloitetaan lottorivien hinta tililtä. // Veloitetaan lottorivien hinta tililtä.
...@@ -122,5 +150,10 @@ namespace Lottokone.Model ...@@ -122,5 +150,10 @@ namespace Lottokone.Model
if (PropertyChanged != null) if (PropertyChanged != null)
PropertyChanged(this, new PropertyChangedEventArgs(propertyName)); PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
} }
public override string ToString()
{
return $"{Saldo:C0}: {Nimi}";
}
} }
} }
...@@ -23,7 +23,7 @@ namespace Lottokone.Model ...@@ -23,7 +23,7 @@ namespace Lottokone.Model
// arvotaan voittoriville vielä lisänumero // arvotaan voittoriville vielä lisänumero
do { do {
Lisanumero = (short)Rand.Next(0, 41); Lisanumero = (short)Rand.Next(1, 41);
} while (Numerot.Contains(Lisanumero)); } while (Numerot.Contains(Lisanumero));
} }
......
...@@ -8,8 +8,8 @@ ...@@ -8,8 +8,8 @@
// </auto-generated> // </auto-generated>
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
namespace Lottokone.Properties namespace Lottokone.Properties {
{ using System;
/// <summary> /// <summary>
...@@ -19,31 +19,26 @@ namespace Lottokone.Properties ...@@ -19,31 +19,26 @@ namespace Lottokone.Properties
// class via a tool like ResGen or Visual Studio. // class via a tool like ResGen or Visual Studio.
// To add or remove a member, edit your .ResX file then rerun ResGen // To add or remove a member, edit your .ResX file then rerun ResGen
// with the /str option, or rebuild your VS project. // 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.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
internal class Resources internal class Resources {
{
private static global::System.Resources.ResourceManager resourceMan; private static global::System.Resources.ResourceManager resourceMan;
private static global::System.Globalization.CultureInfo resourceCulture; private static global::System.Globalization.CultureInfo resourceCulture;
[global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
internal Resources() internal Resources() {
{
} }
/// <summary> /// <summary>
/// Returns the cached ResourceManager instance used by this class. /// Returns the cached ResourceManager instance used by this class.
/// </summary> /// </summary>
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
internal static global::System.Resources.ResourceManager ResourceManager internal static global::System.Resources.ResourceManager ResourceManager {
{ get {
get if (object.ReferenceEquals(resourceMan, null)) {
{
if ((resourceMan == null))
{
global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("Lottokone.Properties.Resources", typeof(Resources).Assembly); global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("Lottokone.Properties.Resources", typeof(Resources).Assembly);
resourceMan = temp; resourceMan = temp;
} }
...@@ -56,16 +51,22 @@ namespace Lottokone.Properties ...@@ -56,16 +51,22 @@ namespace Lottokone.Properties
/// resource lookups using this strongly typed resource class. /// resource lookups using this strongly typed resource class.
/// </summary> /// </summary>
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
internal static global::System.Globalization.CultureInfo Culture internal static global::System.Globalization.CultureInfo Culture {
{ get {
get
{
return resourceCulture; return resourceCulture;
} }
set set {
{
resourceCulture = value; 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);
}
}
} }
} }