Igra štiri v vrsto

Igra štiri v vrsto

Avtor: Matic Pogladič

Besedilo naloge

Napiši program, s katerim lahko dva igralca igrata igro štiri v vrsto

Ideja rešitve

Ustvaril bom Windows Form Application. Naredil panel, na katerega bom izrisal 7*6 število praznih krogcev. Nad tem bom naredil še en panel, ki bo "metalno polje", torej bo ob kliku sprožilo met žetona. Naredil bom matriko 7*6, ki bo napolnjena z 0. Igralca jo bosta ob kliku polnila z 1 ali 2. Računalnik bo preverjal, če so že 4 v vrsti.

Koda v 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 Štiri_v_vrsto
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();

        }

        //ali je na vrsti prvi igralec
        private bool prvi = true;

        //tabela tabel, inicializirana z ničlami
        //polni se z enkami ali dvojkami
        private int[][] tabela = new int[][]
            {
                new int[] {0,0,0,0,0,0,0},
                new int[] {0,0,0,0,0,0,0},
                new int[] {0,0,0,0,0,0,0},
                new int[] {0,0,0,0,0,0,0},
                new int[] {0,0,0,0,0,0,0},
                new int[] {0,0,0,0,0,0,0}
            };

        private void panel1_Paint(object sender, PaintEventArgs e)
        {
            Graphics g = this.panel1.CreateGraphics();

            //izris vseh praznih polj
            for (int i = 0; i < 7; i++)
            {
                for (int j = 0; j < 6; j++)
                {
                    g.FillEllipse(Brushes.White, i*panel1.Width/7, j*50, 50, 50);
                }
            }
        }

        private void panel2_Paint(object sender, PaintEventArgs e)
        {
            Graphics g = this.panel2.CreateGraphics();

            //izris mej polj, kjer se klika
            for (int i = 1; i < 7; i++)
            {
                g.DrawLine(new Pen(Brushes.Black), new Point(i * panel1.Width / 7, panel2.Height), new Point(i * panel1.Width / 7, 0));
            }

        }

        private void panel2_MouseClick(object sender, MouseEventArgs e)
        {

            Graphics g = this.panel1.CreateGraphics();
            int sirina = e.Location.X / 50;

            //polnjenje tabele in izris tabele v pobarvane kroge

            //gre po stolpcih
            for (int i = 0; i < 7; i++)
            {
                //če je stolpec že poln
                if (tabela[tabela.Length - 1][sirina] != 0)
                {
                    MessageBox.Show("Ne gre!");
                    break;
                }

                //če je stolpec še prezen
                if (i == 0 && tabela[i][sirina] == 0)
                {
                    //če je prvi igralec na vrsti
                    if (prvi)
                    {
                        //na ustrezno mesto v tabelo napolni z 1
                        tabela[0][sirina] = 1;
                        //izris
                        g.FillEllipse(Brushes.Yellow,sirina*50, 250, 50, 50);
                        besedilo.Text = "Na vrsti je drugi igralec";
                        prvi = false;
                        break;
                    }
                    //drugi igralec
                    else
                    {

                        tabela[0][sirina] = 2;
                        g.FillEllipse(Brushes.Red, sirina*50, 250, 50, 50);
                        besedilo.Text = "Na vrsti je prvi igralec";
                        prvi = true;
                        break;
                    }
                }

                //ko je prvi element enak 0, ga zamenja z 1 ali 2 in izriše krog
                if (tabela[i][sirina] == 0)
                {
                    if (prvi)
                    {
                        tabela[i][sirina] = 1;
                        g.FillEllipse(Brushes.Yellow, sirina * 50, 250 - i*50, 50, 50);
                        besedilo.Text = "Na vrsti je drugi igralec";
                        prvi = false;
                        break;
                    }
                    else
                    {
                        tabela[i][sirina] = 2;
                        g.FillEllipse(Brushes.Red, sirina * 50,250 -  i * 50, 50, 50);
                        besedilo.Text = "Na vrsti je prvi igralec";
                        prvi = true;
                        break;
                    }
                }

            }

            //preverjanje zmage po vrsticah
            foreach (var item in tabela)
            {
                for (int i = 0; i < item.Length - 3; i++)
                {
                    if (item[i] == item[i + 1] && item[i] == item[i + 2] && item[i] == item[i + 3] && item[i] != 0)
                    {
                        //končno okno
                        var result = MessageBox.Show("Zmagal si!\nNova igra?", "Konec igre", MessageBoxButtons.YesNo);

                        switch (result)
                        {
                            case DialogResult.Yes:   // Če pritisne YES
                                Application.Restart();
                                break;
                            case DialogResult.No:    // Če pritisne NO
                                Application.Exit();
                                break;
                            default:                 // Za vsak slučaj
                                MessageBox.Show("Nekaj pritisni!");
                                break;
                        }
                    }
                }
            }

            //preverjanje zmage po stolpcih
            for (int i = 0; i < 7; i++)
            {
                for (int j = 0; j < 3; j++)
                {
                    if (tabela[j][i] == tabela[j + 1][i] && tabela[j][i] == tabela[j + 2][i] && tabela[j][i] == tabela[j + 3][i] && tabela[j][i] != 0)
                    {
                        //končno okno
                        var result = MessageBox.Show("Zmagal si!\nNova igra?", "Konec igre", MessageBoxButtons.YesNo);

                        switch (result)
                        {
                            case DialogResult.Yes:   // Če pritisne YES
                                Application.Restart();
                                break;
                            case DialogResult.No:    // Če pritisne NO
                                Application.Exit();
                                break;
                            default:                  // Za vsak slučaj
                                MessageBox.Show("Nekaj pritisni!");
                                break;
                        }
                    }
                }

            }

            //preverjanje zmage po diagonali
            for (int i = 0; i < 3; i++)
            {
                for (int j = 0; j < 4; j++)
                {

                    if (tabela[i][j] == tabela[i + 1][j + 1] && tabela[i][j] == tabela[i + 2][j + 2] && tabela[i][j] == tabela[i + 3][j + 3] && tabela[i][j] != 0)
                    {
                        //končno okno
                        var result = MessageBox.Show("Zmagal si!\nNova igra?", "Konec igre", MessageBoxButtons.YesNo);

                        switch (result)
                        {
                            case DialogResult.Yes:   // Če pritisne YES
                                Application.Restart();
                                break;
                            case DialogResult.No:    // Če pritisne NO
                                Application.Exit();
                                break;
                            default:                 // Za vsak slučaj
                                MessageBox.Show("Nekaj pritisni!");
                                break;
                        }
                    }

                }
            }

            //preverjanje zmage druga diagonala
            for (int i = 0; i < 3; i++)
            {
                for (int j = 6; j > 2; j--)
                {
                    if (tabela[i][j] == tabela[i + 1][j - 1] && tabela[i][j] == tabela[i + 2][j - 2] && tabela[i][j] == tabela[i + 3][j - 3] && tabela[i][j] != 0)
                    {
                        //končno okno
                        var result = MessageBox.Show("Zmagal si!\nNova igra?", "Konec igre", MessageBoxButtons.YesNo);

                        switch (result)
                        {
                            case DialogResult.Yes:   // Če pritisne YES
                                Application.Restart();
                                break;
                            case DialogResult.No:    // Če pritisne NO
                                Application.Exit();
                                break;
                            default:                 // Za vsak slučaj
                                MessageBox.Show("Nekaj pritisni!");
                                break;
                        }

                    }
                }
            }




        }

    }
}

Testni primeri

0%
0%