Igralna kocka

Igralna kocka

Avtor: Eva Janša

Igralna kocka-navodila in ideja

Navodilo za nalogo


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.

Ideja rešitve


Napisala sem program, ki na oknu prikaže met kocke. Osnovno okno je prikazano spodaj. Na platnu se izrisujejo ploskve kocke, glede na to kakšno število vržemo. Met kocke simuliramo s pritiskom na gumb Nov met. Na spodnji diagram pa se sproti izrisujejo stolpci, ki predstavljajo število posameznih metov števil na kocki.

(kocka_osn.png)
Osnovno okno programa

Koda

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;
using System.Collections;

namespace kocka
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
        //globalne spremenljivke

        //shranjujemo trenutni met
        public int trenMet;
        //v tabelo shranjujemo število posameznih metov po številkah na kocki
        public int[] tabMetov = new int[6];
        //naključni generator
        public Random g = new Random();

        /// <summary>
        /// metoda nam vrne naključno celo število med 1 in 6
        /// </summary>
        /// <returns></returns>
        public int MetKocke()
        {
            return g.Next(1, 7);
        }

        /// <summary>
        /// metoda se izvede, ko kliknemo na gumb Nov met
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void btt_met_Click(object sender, EventArgs e)
        {
            //vržemo kocko
            trenMet = MetKocke();
            //shranimo sliko
            Image i = Image.FromFile(trenMet.ToString() + ".jpg");
            //jo nastavimo za ozadje platna
            p_platno.BackgroundImage = i;
            //povečamo število metov v tabeli pri indeksu 0
            tabMetov[trenMet - 1] += 1;
            //spremenimo še napis
            lbl_meti.Text = "Vrgli ste število " + trenMet + ".";
            //in pa vrednost pri diagramu
            ch_meti.Series[trenMet.ToString()].Points.AddXY(trenMet, tabMetov[trenMet - 1]);
        }

        /// <summary>
        /// metoda se izvede, ko odpremo okno
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void Form1_Load(object sender, EventArgs e)
        {
            //ustvarimo novo območje za diagram
            ch_meti.ChartAreas.Add("area");
            //nastavimo izgled Y osi
            ch_meti.ChartAreas["area"].AxisY.Minimum = 0;
            ch_meti.ChartAreas["area"].AxisY.Interval = 5;
            //nastavimo še stolpce in njihovo višino
            for (int i = 1; i < 7; i++)
            {
                ch_meti.Series.Add(i.ToString());
                ch_meti.Series[i.ToString()].Points.AddXY(i, tabMetov[i-1]);
            }
        }
    }
}

Razlaga rešitve

V okolju Microsoft Visual C#, odpremo nov projekt tipa Windows Forms Application. Ko to naredimo, se nam prikaže okno, na katerega nato dodamo objekte, ki bodo na oknu prikazani. Te objekte dobimo v zavihku Toolbox. Najprej na platno dodamo napis(Label), potem gumb(Button), nato pa še platno(Panel) in diagram(Chart).
Vsakemu od objektov nato nastavimo še nekaj lastnosti. Te spreminajmo v zavihku Properties. Napis je na začetku prazen, prav tako platno, katerega ozadje smo nastavili na belo. Na gumb dodamo napis Nov met, ter iz diagrama pobrišemo privzete vrednosti.

Sedaj imamo okno pripravljeno na zagon. Napisati pa moramo še metode, ki bodo objekte spreminjale ob določenih akcijah na oknu. Zato se pomaknemo na zavihek Solution Explorer, kjer ob desnem kliku na datoteko Form1.cs izberemo View code. Odpre se nam okno, kamor lahko vpišemo kodo.
Najprej definiramo globalne spremenljivke. V prvo shranimo kaj smo trenutno vrgli. V drugi pa v tabeli hranimo število metov po posameznih številkah. Definiramo še naključni generator.
public int trenMet;
public int[] tabMetov = new int[6];
public Random g = new Random();


Naprej definiramo metodo s katero simuliramo met kocke. Vrnemo torej naključno število med 1 in 6.
public int MetKocke()
        {
            return g.Next(1, 7);
        }


Nato potrebujemo metodo, ki se izvrši, ko kliknemo na gumb.
private void btt_met_Click(object sender, EventArgs e)
Če kliknemo na gumb simuliramo met kocke. Zato najprej v globalno spremenljivko shranimo rezultat metode MetKocke.
    trenMet = MetKocke();
Nato preverimo kaj smo vrgli. Če vržemo 1, najprej shranimo sliko(Vir slik: Wiki). Nato to sliko nastavimo za novo ozadje platna. V tabeli metov povečamo število metov tega števila za 1. Spremenimo še napis in pa višino pripadajočega stolpca v diagramu.
//shranimo sliko
Image i = Image.FromFile(trenMet.ToString() + ".jpg");
//jo nastavimo za ozadje platna
p_platno.BackgroundImage = i;
//povečamo število metov v tabeli pri indeksu 0
tabMetov[trenMet - 1] += 1;
//spremenimo še napis
lbl_meti.Text = "Vrgli ste število " + trenMet + ".";
//in pa vrednost pri diagramu   ch_meti.Series[trenMet.ToString()].Points.AddXY(trenMet, tabMetov[trenMet - 1]);

Enako naredimo tudi za vsa druga vržena števila, le da tam spreminjamo pripadajoče število v tabeli in pripadajoči stolpec v diagramu.

Zadnja metoda se izvede, ko okno odpremo. V tej metodi diagramu nastavimo lastnosti.
private void Form1_Load(object sender, EventArgs e)
Najprej ustvarimo novo območje za diagram. Potem pa na tem območju nastavimo še minimum in interval za Y os.
ch_meti.ChartAreas.Add("area");
ch_meti.ChartAreas["area"].AxisY.Minimum = 0;
ch_meti.ChartAreas["area"].AxisY.Interval = 5;

Na koncu nastavimo še stolpce, za vsak stolpec pa še njegovo pozicijo in višino.
 for (int i = 1; i < 7; i++)
            {
                ch_meti.Series.Add(i.ToString());
                ch_meti.Series[i.ToString()].Points.AddXY(i, tabMetov[i-1]);
            }

Testni primeri

Ko zaženemo program dobimo začetno okno. Tako tudi ostane, če kocke ne vržemo nikoli. To pomeni, da nikoli ne pritisnemo gumba Nov met.

(kocka_osn.png)
Brez meta

Če kocko vržemo nekajkrat, se nam ob vsakem metu spreminja slika, hkrati pa tudi diagram.

(kocka_nekaj.png)
Nekaj metov

Če pa kocko vržemo velikokrat, se začne diagram spreminjati glede na višino najvišjega stolpca. Opazimo tudi, da stolpci začenjajo dobivati skoraj enako višino.

(kocka_veliko.png)
Veliko metov

Te testne primere sem izbrala, da si lahko ogledate, kako se spreminja platno, ko vržemo kocko in kako se spreminja diagram, če vržemo kocko večkrat.

Filmček

Viri

0%
0%