Napiši program, ki simulira met igralne kocke. Program naj rezultat meta prikaže kot pike na ploskvi kocke. Program naj beleži vodi statistiko metov in statistiko prikazuje v stoplčnem diagramu.
Opis problema
Napiši program, ki simulira met igralne kocke. Program naj rezultat meta prikaže kot pike na ploskvi kocke. Program naj beleži vodi statistiko metov in statistiko prikazuje v stoplčnem diagramu.
Rešitev problema
Problem moramo rešiti s pomočjo grafičnega vmesnika v C#. Najprej si izberemo del okna, kjer se bo kocka izrisala. Izbrani del označimo s platnom (angl. panel), saj želimo prikazovali slike kocke na tem platnu. Nato si izberemo del okna kjer bomo izrisali graf s pomočjo orodja graf (angl. chart). Potrebujemo samo še gumb, ki bo simuliral met kocke.
Ob kliku na gumb Vrži kocko se nam s pomočjo generatorja naključnih števil generira število med 1 in 6, ki bo predstavljalo število pik na kocki. Nato glede na to število izrišemo pravilno sliko kocke na platnu. Povečati moramo pa tudi ustrezen števec posameznih rezultatov meta. Graf nato ponovno narišemo.
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace IgralnaKocka
{
public partial class KockaGUI : Form
{
#region slikeKocke
Image enaPika = Image.FromFile("dice-1.jpg");
Image dvePiki = Image.FromFile("dice-2.jpg");
Image triPike = Image.FromFile("dice-3.jpg");
Image stiriPike = Image.FromFile("dice-4.jpg");
Image petPik = Image.FromFile("dice-5.jpg");
Image sestPik = Image.FromFile("dice-6.jpg");
#endregion
#region privatneSpremenljivke
private int _stevilo;
private int[] stevecMetov = new int[6];
private string[] legenda = { "enke", "dvojke", "trojke", "stirke", "petke", "sestke" };
#endregion
#region klasicneSpremenljivke
public int Stevilo
{
get { return _stevilo; }
set
{
_stevilo = value;
chrtGraf.Visible = true; //graf prikažemo šele ko vržemo prvo kocko
}
}
#endregion
public static Random nakljGen = new Random();
public KockaGUI()
{
InitializeComponent();
NovoStevilo();
}
private void KockaGUI_Load(object sender, EventArgs e)
{
Text = "Igralna kocka";
chrtGraf.Visible = false;
chrtGraf.ChartAreas[0].AxisY.Interval = 1; //nastavimo interval za y os
}
private void btnVrzi_Click(object sender, EventArgs e)
{
int stevilo = nakljGen.Next(1,7);
Stevilo = stevilo;
NovoStevilo(Stevilo);
stevecMetov[stevilo - 1] = stevecMetov[stevilo - 1] + 1; //povečamo vrednost na ustrezni lokaciji za 1
pnlIzris.Invalidate();
}
private void NovoStevilo(int stevilo=0)
{
if (stevilo == 0)
lblIzpisR.Text = "";
else
lblIzpisR.Text = "Vrgel si: " + stevilo;
}
private void pnlIzris_Paint(object sender, PaintEventArgs e)
{
Point sredina = new Point(pnlIzris.Width/4,pnlIzris.Height/4);
switch (_stevilo)
{
//prikažemo ustrezno sliko (glede na met kocke)
case 1:
e.Graphics.DrawImage(enaPika,sredina);
break;
case 2:
e.Graphics.DrawImage(dvePiki,sredina);
break;
case 3:
e.Graphics.DrawImage(triPike,sredina);
break;
case 4:
e.Graphics.DrawImage(stiriPike,sredina);
break;
case 5:
e.Graphics.DrawImage(petPik,sredina);
break;
case 6:
e.Graphics.DrawImage(sestPik,sredina);
break;
}
//narišemo graf
for (int i = 0; i < legenda.Length; i++)
{
chrtGraf.Series[legenda[i]].Points.Clear();
chrtGraf.Series[legenda[i]].Points.Add(stevecMetov[i]);
}
}
private void KockaGUI_Resize(object sender, EventArgs e)
{
pnlIzris.Invalidate();
}
}
}
|
Testni primer - wink