Spill i C#


7 innlegg i emnet

Skrevet (endret)

Hei driver å lager et 4 på rad spill og sitter fast. jeg får at det funker 4 på rad nedover men ikke skrått og bortover, jeg er ny på dette og har fått hjelp med koden, men skjønner ikke hvordan jeg får vinner bortover eller på skrått. dette er da koden:

  public partial class Form1 : Form
    {
        public int xpos = 150;//X-verdien til øvre venstre hjørne
        public int ypos = 150;//X-verdien til øvre venstre hjørne
        public int size = 50; //Størrelsen på ruten
        public string[,] tabell = new string[7, 7];
        public string tegn = "X";
        public string vinner="";
        public int rad;
        public int kolonne;
        public int mousex;
        public int mousey;
         
        


        public void sjekk_vinner()
        {
            //if (tabell[0, 0] == tabell[0, 1] && tabell[0, 0] == tabell[0, 2]) { if (tabell[0, 2] != "") { vinner = tabell[0, 1]; } }
            int x = kolonne;
            int y = rad;
            int antup=0;
            int antdown=0;
            int antall;
            int i = 1;
            if (y > 0)
            {
                while (tabell[x, y] == tabell[x, y - i] && x >= 0 && y >= 0)
                {
                    antup = antup + 1;
                    i++;
                }
            }
            antall = antup + 1 + antdown;
            if (antall>3)
            {
                MessageBox.Show("Vunnet");
            }
        }






        protected override void OnPaint(PaintEventArgs e)
        {
            base.OnPaint(e);
            Graphics dc = e.Graphics;
            Pen bluePen = new Pen(Color.Blue, 3);
            //dc.DrawRectangle(bluePen, xpos, ypos, 3 * size, 3 * size);
            //dc.DrawRectangle(bluePen, xpos + size, ypos, size, 3 * size);
            //dc.DrawRectangle(bluePen, xpos, ypos + size, 3 * size, size);
            Pen redPen = new Pen(Color.Red, 3);
            for (int i = 0; i < 7; i++)
            {
                for (int j = 0; j < 7; j++)
                {


                    dc.DrawRectangle(bluePen, xpos + size * i, ypos + size * j, size , size);
                }
                
            }




             for (int i = 0; i < 7; i++)
            {
                for (int j = 0; j < 7; j++)
                {
                    if (tabell[i, j] == "X")
                    {


                        dc.DrawLine(redPen, xpos + i * size, ypos + j * size, xpos + (i + 1) * size, ypos + (j + 1) * size);
                        dc.DrawLine(redPen, xpos + i * size, ypos + j * size+size, xpos + (i + 1) * size, ypos + j  * size);




                    }
                    else if (tabell[i, j] == "O")
                    {
                        dc.DrawEllipse(redPen, xpos + i * size, ypos + j * size, size, size);
                    }
                    sjekk_vinner();
                    if (vinner == "X")
                    {
                        dc.DrawLine(redPen, xpos , ypos , xpos + 3 * size, ypos +3* size);
                        dc.DrawLine(redPen, xpos + 3 * size, ypos , xpos + 3 * size, ypos);
                        
                    
                    }
                    else if (vinner == "O")
                    {
                        dc.DrawEllipse(redPen, xpos , ypos , size*4, size*4);


                    }
                    }
            }


              
           
          
        //Nå slutter onpaint
        }
                
     










        
        public Form1()
        {
            InitializeComponent();
        }


        private void Form1_Load(object sender, EventArgs e)
        {
            for (int i = 0; i < 7; i++)
            {
                for (int j = 0; j < 7; j++)
                {


                    tabell[i,j]="";


                }
            }
        


        }


        private void Form1_MouseClick(object sender, MouseEventArgs e)
        {
            kolonne = -1;
            rad = -1;
            mousex = e.X;
            mousey = e.Y;
            if (mousex > xpos)
                if (mousex < xpos + size)
                {
                    kolonne = 0;
                }
                else if (mousex < xpos + size * 2)
                {
                    kolonne = 1;
                }
                else if (mousex < xpos + size * 3)
                {
                    kolonne = 2;
                }
                else if (mousex < xpos + size * 4)
                {
                    kolonne = 3;
                }
                else if (mousex < xpos + size * 5)
                {
                    kolonne = 4;
                }
                else if (mousex < xpos + size * 6)
                {
                    kolonne = 5;
                }
                else if (mousex < xpos + size * 7)
                {
                    kolonne = 6;
                }
            if (mousey > ypos)
            {
                if (mousey < ypos + size)
                {
                    rad = 0;
                }
                else if (mousey < ypos + size * 2)
                {
                    rad = 1;
                }
                else if (mousey < ypos + size * 3)
                {
                    rad = 2;
                }
                else if (mousey < ypos + size * 4)
                {
                    rad = 3;
                }
                else if (mousey < ypos + size * 5)
                {
                    rad = 4;
                }
                else if (mousey < ypos + size * 6)
                {
                    rad = 5;
                }
                else if (mousey < ypos + size * 7)
                {
                    rad = 6;
                }
            }


            if (kolonne != -1 && rad != -1 && tabell[kolonne,rad]=="")
            {
                tabell[kolonne, rad] = tegn;
                if (tegn == "X")
                {
                    tegn = "O";
                }
                else
                {
                    tegn = "X";
                }
                


            }
             Refresh();
        }
    }
}

etter at jeg får en vinner nedover så kommer boksen opp med at du har vunnet, men når jeg klikker ok så bare repeterer den 30 ganger med ok.

hvis det er noe dere lurer på bare spør :)

Endret av Martin Aleksander
la til kode-tags
0

Del dette innlegget


Lenke til innlegg
Del på andre sider

Skrevet

etter at jeg får en vinner nedover så kommer boksen opp med at du har vunnet, men når jeg klikker ok så bare repeterer den 30 ganger med ok.

Vel, du gjør jo ingen sjekk for å forhindre at 'Vunnet-boksen' din ikke vises ved hver eneste refresh-rate.

Du kan gjøre dette ved å introdusere en global variabel, og en sjekk:

public boolean ferdig = false;

…

if (antall>3 && !ferdig){
   ferdig = true;
   MessageBox.Show("Vunnet");
}
0

Del dette innlegget


Lenke til innlegg
Del på andre sider

Skrevet (endret)

sånn nå er det fikset, etter jeg har vunnet kommer boksen bare engang. etter at jeg trykker ok, så rydder den ikke bordet men bare fortsetter på samme vinnebrett bare

Endret av Petter-
0

Del dette innlegget


Lenke til innlegg
Del på andre sider

Skrevet

sånn nå er det fikset, etter jeg har vunnet kommer boksen bare engang. etter at jeg trykker ok, så rydder den ikke bordet men bare fortsetter på samme vinnebrett bare

Du har fortalt at den skal 'rydde' bordet. Alt den gjør er å komme med en pop-up.

For at den skal 'rydde' bordet, så må du lage en funksjon som tilbakestiller alle variablene, og der etter få 'ok' knappen til å kjøre denne funksjonen.

0

Del dette innlegget


Lenke til innlegg
Del på andre sider

Skrevet (endret)

while (tabell[x, y] == tabell[x - retningned, y] && x >= 0 && y >= 0)

{
antdown = antdown + 1;
retningned++;
}
while (tabell[x, y] == tabell[x, y - retninghøyre] && x >= 0 && y >= 0)
{
anth = anth + 1;
retninghøyre++;
}
while (tabell[x, y] == tabell[x, + retningvenstre] && x >= 0 && y >= 0)
{
antv = antv + 1;
retningvenstre++;
}
}
antall = antdown + 1 + antup;
antall2 = anth + 1 + antv;
antall3 = antv + 1 + anth;
retning ned og retning høyre fungerer men ikke venstre da får jeg opp feilmelding som er gul: http://i61.tinypic.com/2enqa6o.jpg bildet er der
Endret av Petter-
0

Del dette innlegget


Lenke til innlegg
Del på andre sider

Skrevet

Bruk imgur.com eller bildr.no og link direkte til bilde neste gang.

For mye reklame og pop-ups på tinypic.

Problemet ditt er linje 52, og << tabell[x - retningned, y] >>.

Siden x kan være 0, og retningned er 1, så er det en mulighet for -1, noe som ikke går.

Du burde ikke få dette i linje 58 med << tabell[x, y - retninghøyre] >> pga linje 49 som gir y min lik 1.

Du vil vel å merke få en feil i linje 64 siden du har glemt << y >>.

0

Del dette innlegget


Lenke til innlegg
Del på andre sider

Skrevet

ok har rettet opp linje 64, er ny i dette her, men hva er muligheten til å få det til å funke?

0

Del dette innlegget


Lenke til innlegg
Del på andre sider

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!


Start en konto

Logg inn

Har du allerede en konto? Logg inn her.


Logg inn nå

  • Hvem er aktive   0 medlemmer

    Ingen innloggede medlemmer aktive