Radim zadatak za skolu, treba da napravim igru memorije kao Win Forms aplikaciju. Napravio sam pocetnu formu na kojoj se unosi ime igraca i bira tezina igre (16, 25 ili 36 polja). E sad, treba da napravim listu 5 najboljih rezultata (top scores), tako da se na pocetnoj formi ispise u obliku: ime igraca i broj osvojenih poena. Da li neko ima ideju kako bi ovo moglo da se realizuje? Padaju mi na pamet liste, pa da u listu ubacujem podatke o svakoj partiji i onda vrsim sortiranje, ali ne znam kako da ovo implementiram u programu.
Evo sta sam do sad uradio:
Ovo je pocetna forma:
Code:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace ************
{
public partial class Pocetna : Form
{
public Pocetna()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
var frm = new Igra4(txtIme.Text);
frm.Location = this.Location;
frm.StartPosition = FormStartPosition.Manual;
frm.FormClosing += delegate { this.Show(); };
frm.Show();
this.Hide();
}
private void button2_Click(object sender, EventArgs e)
{
var frm = new Igra5(txtIme.Text);
frm.Location = this.Location;
frm.StartPosition = FormStartPosition.Manual;
frm.FormClosing += delegate { this.Show(); };
frm.Show();
this.Hide();
}
private void button3_Click(object sender, EventArgs e)
{
var frm = new Igra6(txtIme.Text);
frm.Location = this.Location;
frm.StartPosition = FormStartPosition.Manual;
frm.FormClosing += delegate { this.Show(); };
frm.Show();
this.Hide();
}
}
}
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace ************
{
public partial class Pocetna : Form
{
public Pocetna()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
var frm = new Igra4(txtIme.Text);
frm.Location = this.Location;
frm.StartPosition = FormStartPosition.Manual;
frm.FormClosing += delegate { this.Show(); };
frm.Show();
this.Hide();
}
private void button2_Click(object sender, EventArgs e)
{
var frm = new Igra5(txtIme.Text);
frm.Location = this.Location;
frm.StartPosition = FormStartPosition.Manual;
frm.FormClosing += delegate { this.Show(); };
frm.Show();
this.Hide();
}
private void button3_Click(object sender, EventArgs e)
{
var frm = new Igra6(txtIme.Text);
frm.Location = this.Location;
frm.StartPosition = FormStartPosition.Manual;
frm.FormClosing += delegate { this.Show(); };
frm.Show();
this.Hide();
}
}
}
A ovo je forma koja se otvara za izabranu igru sa 16 polja:
Code:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace ***************
{
public partial class Igra4 : Form
{
Label prviKlik = null;
Label drugiKlik = null;
int poeni=0;
Random random = new Random();
List<string> icons = new List<string>()
{
"!", "!", "N", "N", ",", ",", "k", "k",
"b", "b", "v", "v", "w", "w", "z", "z"
};
private void UbaciIkone()
{
foreach (Control control in tableLayoutPanel1.Controls)
{
Label iconLabel = control as Label;
if (iconLabel != null)
{
int randomNumber = random.Next(icons.Count);
iconLabel.Text = icons[randomNumber];
iconLabel.ForeColor = iconLabel.BackColor;
icons.RemoveAt(randomNumber);
}
}
}
public Igra4(string strTxtIme)
{
InitializeComponent();
lblIme.Text = strTxtIme;
UbaciIkone();
}
private void label_Click(object sender, EventArgs e)
{
// Ukljucuje se tajmer samo kad se dve razlicite slike otvore
if (timer1.Enabled == true)
return;
Label clickedLabel = sender as Label;
if (clickedLabel != null)
{
// Ignorise se klik na vec kliknuto polje
if (clickedLabel.ForeColor == Color.Black)
return;
// Prvi klik je null, boja polja postaje crna
if (prviKlik == null)
{
prviKlik = clickedLabel;
prviKlik.ForeColor = Color.Black;
return;
}
// Drugi klik, boja polja postaje crna
drugiKlik = clickedLabel;
drugiKlik.ForeColor = Color.Black;
ProveriKraj();
if (prviKlik.Text == drugiKlik.Text)
{
prviKlik = null;
drugiKlik = null;
poeni += 10;
lblPoeni.Text = poeni.ToString();
return;
}
else
{
poeni -= 5;
lblPoeni.Text = poeni.ToString();
}
// Kliknuto je na dve razlicite ikone, ukljucuje se tajmer koji posle odbrojanog vremena ponovo sakriva ikone
timer1.Start();
}
}
private void timer1_Tick(object sender, EventArgs e)
{
timer1.Stop();
// Sakrivaju se obe ikone
prviKlik.ForeColor = prviKlik.BackColor;
drugiKlik.ForeColor = drugiKlik.BackColor ;
// Resetuje obe kliklnute ikone, tako da sledeci put krece ispocetka
prviKlik = null;
drugiKlik = null;
}
private void ProveriKraj()
{
// Petlja ide kroz sva polja i proverava da li se ikone poklapaju
foreach (Control control in tableLayoutPanel1.Controls)
{
Label iconLabel = control as Label;
if (iconLabel != null)
{
if (iconLabel.ForeColor == iconLabel.BackColor)
return;
}
}
// Nema neuparenih polja, sto znaci da je kraj igre
MessageBox.Show("Cestitamo! Osvojili ste " + poeni + " poena");
Close();
}
}
}
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace ***************
{
public partial class Igra4 : Form
{
Label prviKlik = null;
Label drugiKlik = null;
int poeni=0;
Random random = new Random();
List<string> icons = new List<string>()
{
"!", "!", "N", "N", ",", ",", "k", "k",
"b", "b", "v", "v", "w", "w", "z", "z"
};
private void UbaciIkone()
{
foreach (Control control in tableLayoutPanel1.Controls)
{
Label iconLabel = control as Label;
if (iconLabel != null)
{
int randomNumber = random.Next(icons.Count);
iconLabel.Text = icons[randomNumber];
iconLabel.ForeColor = iconLabel.BackColor;
icons.RemoveAt(randomNumber);
}
}
}
public Igra4(string strTxtIme)
{
InitializeComponent();
lblIme.Text = strTxtIme;
UbaciIkone();
}
private void label_Click(object sender, EventArgs e)
{
// Ukljucuje se tajmer samo kad se dve razlicite slike otvore
if (timer1.Enabled == true)
return;
Label clickedLabel = sender as Label;
if (clickedLabel != null)
{
// Ignorise se klik na vec kliknuto polje
if (clickedLabel.ForeColor == Color.Black)
return;
// Prvi klik je null, boja polja postaje crna
if (prviKlik == null)
{
prviKlik = clickedLabel;
prviKlik.ForeColor = Color.Black;
return;
}
// Drugi klik, boja polja postaje crna
drugiKlik = clickedLabel;
drugiKlik.ForeColor = Color.Black;
ProveriKraj();
if (prviKlik.Text == drugiKlik.Text)
{
prviKlik = null;
drugiKlik = null;
poeni += 10;
lblPoeni.Text = poeni.ToString();
return;
}
else
{
poeni -= 5;
lblPoeni.Text = poeni.ToString();
}
// Kliknuto je na dve razlicite ikone, ukljucuje se tajmer koji posle odbrojanog vremena ponovo sakriva ikone
timer1.Start();
}
}
private void timer1_Tick(object sender, EventArgs e)
{
timer1.Stop();
// Sakrivaju se obe ikone
prviKlik.ForeColor = prviKlik.BackColor;
drugiKlik.ForeColor = drugiKlik.BackColor ;
// Resetuje obe kliklnute ikone, tako da sledeci put krece ispocetka
prviKlik = null;
drugiKlik = null;
}
private void ProveriKraj()
{
// Petlja ide kroz sva polja i proverava da li se ikone poklapaju
foreach (Control control in tableLayoutPanel1.Controls)
{
Label iconLabel = control as Label;
if (iconLabel != null)
{
if (iconLabel.ForeColor == iconLabel.BackColor)
return;
}
}
// Nema neuparenih polja, sto znaci da je kraj igre
MessageBox.Show("Cestitamo! Osvojili ste " + poeni + " poena");
Close();
}
}
}
Hvala svima unapred