Gå til innhold

Anbefalte innlegg

Hei, driver å programmerer 4 på rad spill, jeg har nettopp begynt med dette, jeg står helt fast ang firkanten. Jeg har nedretning og høyretetning. har sittet over flere dager med dette :/ håper noen kan hjelpe meg på veien.

 

public int xpos = 30;//X-verdien til øvre venstre hjørne
public int ypos = 30;//y-verdien til øvre venstre hjørne
public int size = 50; //Størrelsen på ruten
public string[,] tabell = new string[20, 20];
public string tegn = "X";
public string vinner = "";
public int rad;
public int kolonne;
public int mousex;
public int mousey;
public int antall;
public int antall2;
public int antall3;
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 anth = 0;
int antv = 0;
int retningned = 1;
int retninghøyre = 1;
int retningopp = 1;
if (y > 0)
{
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 - retningopp, y] && x >= 0 && y >= 0)
{
antup = antup + 1;
retningopp = + 1;
}
}
antall = antdown + 1 + antup;
antall2 = anth + 1 + antv;
antall3 = antup - 1 + antdown;
if (antall > 3)
{
MessageBox.Show("Vunnet retninghøyre");
}
else if (antall2 > 3)
{
MessageBox.Show("Vunnet retningned");
}
else if (antall3 > 3)
{
MessageBox.Show("vunnet opp");
}
}
har lagt til en word fil også hvis det er lettere å se. der lege hele.
håper på all hjelp :)

4pårad.docx

Lenke til kommentar
Videoannonse
Annonse

Her er et rent C-eksempel på sjekk på om siste plassering av en brikke fører til at spilleren har vunnet, kanskje du kan bruke det til noe.

int checkGame(int grid[][GRID_ROWS], int lastMove) {
  int result = PLAYER_NONE;
  int c, r, d1, d2;
  int player;

  for (r = GRID_ROWS-1; r >= 0; --r) {
    player = grid[lastMove][r];
    if (player != PLAYER_NONE) {
      if (r >= 3) {
        // check vertical direction
        if (grid[lastMove][r-1] == player &&
            grid[lastMove][r-2] == player &&
            grid[lastMove][r-3] == player)
          return player;
      }
      // check horizontal direction
      for (d1 = lastMove; d1 > 0; --d1)
        if (grid[d1-1][r] != player) break;
      for (d2 = lastMove; d2 < GRID_COLUMNS-1; ++d2)
        if (grid[d2+1][r] != player) break;
      if (d2 - d1 >= 3) return player;
      // check diagonal (upper-left to lower-right)
      for (d1 = lastMove; d1 > 0 && r+(lastMove-d1) < GRID_ROWS-1; --d1)
        if (grid[d1-1][r+(lastMove-d1)+1] != player) break;
      for (d2 = lastMove; d2 < GRID_COLUMNS-1 && r-(d2-lastMove) > 0; ++d2)
        if (grid[d2+1][r-(d2-lastMove)-1] != player) break;
      if (d2 - d1 >= 3) return player;
      // check diagonal (lower-left to upper-right)
      for (d1 = lastMove; d1 > 0 && r-(lastMove-d1) > 0; --d1)
        if (grid[d1-1][r-(lastMove-d1)-1] != player) break;
      for (d2 = lastMove; d2 < GRID_COLUMNS-1 && r+(d2-lastMove) < GRID_ROWS-1;
           ++d2)
        if (grid[d2+1][r+(d2-lastMove)+1] != player) break;
      if (d2 - d1 >= 3) return player;
      // no winner yet
      break;
    }
  }
  return PLAYER_NONE;
}

(lastMove er da kolonnen som det sist er plassert en brikke i).

  • Liker 1
Lenke til kommentar

har gjort om koden til sånn: if (y > 0)

{
tellervenstre = 1;
ut = false;
//antv = 0;
while (x > 0 && y >= 0 && ut == false)
{
if (tabell[x, y] == tabell[x - tellervenstre, y])
{
antv = antv + 1;
tellervenstre++;
posx = x - tellervenstre;
if (posx < 1) ut = true;
}
else
{
ut = true;
}
}
antall = antv + 1 + anth;
if (antall > 3)
{
MessageBox.Show("vunnet" + tegn);
}
//----------------------------------------------------------------
ut = false;
//anth = 1;
while (x < 6 && y >= 0 && ut == false)
{
if (tabell[x, y] == tabell[x + tellerhøyre, y])
{
anth = anth + 1;
tellerhøyre++;
posx = x + tellerhøyre;
if (posx < 1) ut = true;
}
else
{
ut = true;
}
}
antall2 = anth + 1 + antv;
if (antall2 > 3)
{
MessageBox.Show("vunnet");
}
}
}
hittil funker det høre og venstre, så skal prøve nedover og opp :) men takker også for hjelpen :)
Lenke til kommentar

...

hittil funker det høre og venstre, så skal prøve nedover og opp :) men takker også for hjelpen :)

Jeg synes du gjør det veldig tungvint, her er kode for å sjekke om posisjon (x, y) og plassene til høyre og venstre gjør at det dannes en rad med minst 4 like elementer i tabellen:

  // check horizontal direction
  // x = row, y = column
  int d1, d2;
  for (d1 = x; d1 > 0; d1--)
    if (table[d1-1][y] != table[x][y]) break;
  for (d2 = x; d2 < 6; d2++)
    if (table[d2+1][y] != table[x][y]) break;
  if (d2-d1 >= 3) ... // at least 4 in a row
Vedlagt ligger forøvrig et C-program (kun med kommandolinje-grensesnitt) som lar deg spille 4-på-rad (får dessverre ikke lov til å legge ved .c-filer(!), så jeg måtte putte fila i en .zip-fil).

connectfour.zip

Endret av jonny
Lenke til kommentar

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
×
×
  • Opprett ny...