Igralna kocka

Igralna kocka

Avtor: Aleš Brelih

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.

Koda C#

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();
        }


    }
}

Izgled okna

(izgledOkna.bmp)
Izgled okna

Testni primer - wink

0%
0%