Petrus88 Skrevet 13. november 2014 Del Skrevet 13. november 2014 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
Sokkalf™ Skrevet 14. november 2014 Del Skrevet 14. november 2014 Dette er ikke C. Lenke til kommentar
Petrus88 Skrevet 14. november 2014 Forfatter Del Skrevet 14. november 2014 Visual C#! Lenke til kommentar
Zash Skrevet 14. november 2014 Del Skrevet 14. november 2014 Som er et .Net språk, så dette hører nok hjemme i den kategorien... Lenke til kommentar
jonny Skrevet 14. november 2014 Del Skrevet 14. november 2014 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). 1 Lenke til kommentar
helsten2 Skrevet 14. november 2014 Del Skrevet 14. november 2014 Du kan jo prøve Google... Se her f.eks. 1 Lenke til kommentar
Petrus88 Skrevet 14. november 2014 Forfatter Del Skrevet 14. november 2014 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
jonny Skrevet 14. november 2014 Del Skrevet 14. november 2014 (endret) ... 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 rowVedlagt 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 15. november 2014 av jonny Lenke til kommentar
Anbefalte innlegg
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 kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå