Programmering i C - For loop - Matriser

Permalänk
Medlem

Programmering i C - For loop - Matriser

Hejsan!

Jag har till uppgift att göra ett litet spel som kallas teaser. Kort och gott ska jag tilldela en matris på 7x7 med två olika randomvärden.

Detta har jag gjort med srand(time(NULL)) vilket fungerar perfekt (Jag har så gott som gjort klart spelet).

Det enda jag undrar över är hur jag ändrar mina 1or och 2or till "*" och "-" beroende på dess värde.

Jag har vald att tilldela matrisens platser antingen en 1a eller en 2a men jag vill att istället för dessa ska alltså antingen "*" eller "-" visas.

{ for (int i = 0; i < 7; i++) { for (int j = 0; j < 7; j++) { session->board[i][j] = rand() % 2 + 1; } } // Här tilldelas alltså min matris med random nummer från 1-2. }

{ for (int i = 0; i < ROWS; i++) { for (int j = 0; j < COLUMNS; j++) { printf("%d ", session->board[i][j]); } printf("\n"); } /* Och här skriver jag ut matrisen. Allt fungerar perfekt. Men jag vill alltså byta ut dessa värden mot antingen "*" eller "-". */ }

Det är säkert en lätt lösning men jag är väldigt ny i detta och har just börjat detta program! Så alla tips är välkomna!

Edit:

En annan grej jag inte är klar med är att programmet ska kolla när spelet är slut, dvs när man klarat ut det.

Spelet är slut när bricka (4,4) skiljer sig från resten av spelet fältet i en matris på 7x7.

Jag antar att jag ska använda en nästlad (dubbel) for-loop för att loopa igenom matrisen men vet ej hur jag sedan skriver koden för att den ska veta om den brickan skiljer sig från resten.

Ett misslyckat försök var när jag gjorde en nästlad for-loop och den alltid sa att spelet var över (vilket jag förstår). För den tog bara första värdet och testade det mot mitten.

Om någon kanske kan peka mig lite i rätt riktning - eller kanske jag redan är det? Jag är inne på nästlad for-loop just nu men vet bara inte riktigt lösningen ännu!

mvh

Linus Forsgren

Permalänk
Medlem

Om din matris board innehåller chars så kan du ange teckenvärdena '*' och '-'

Vad gäller vinst. Loop igenom och kolla så att alla tecken är lika med tecknet i ruta [0][0]. (Förutom då du kollar mittenrutan, då ska den inte vara samma som ruta [0][0].

Permalänk
Hedersmedlem

Istället för att direkt skriva ut elementet skulle du till exempel kunna undersöka om det är 1 och i så fall skriva ut '*' (eller '-') eller annars skriva ut '-' (eller '*'). if-satser är du förmodligen redan bekant med.

Permalänk

En lösning på problemet: http://pastebin.com/HYTNxWqb

Permalänk
Medlem
Skrivet av Moberg:

Om din matris board innehåller chars så kan du ange teckenvärdena '*' och '-'

Vad gäller vinst. Loop igenom och kolla så att alla tecken är lika med tecknet i ruta [0][0]. (Förutom då du kollar mittenrutan, då ska den inte vara samma som ruta [0][0].

Ska kika mer på det där imorgon. Börjar bli lite sent! Tack och bock!

Skrivet av Elgot:

Istället för att direkt skriva ut elementet skulle du till exempel kunna undersöka om det är 1 och i så fall skriva ut '*' (eller '-') eller annars skriva ut '-' (eller '*'). if-satser är du förmodligen redan bekant med.

Detta löste mitt problem galant! Tack för tipset!

{ int rows = 7; int columns = 7; for (int i = 0; i < rows; i++) { for (int j = 0; j < columns; j++) { if (session->board[i][j] == 1) { printf("* "); } else { printf("- "); } } printf("\n"); } }

Skrivet av Anilusion:

Tack för tipset!

Permalänk
Medlem
Skrivet av Forsgren:

Detta löste mitt problem galant! Tack för tipset!

För att ge ett ytterligare tips (kanske överkurs?) så skulle jag nog rekommendera dig att kontrollera mot de specifika värdena som du har valt (1 eller 2) för att sedan inkludera ytterligare en else för att felkontrollera efter övriga värden (om nu något går fel i den första tilldelningen och det faktiskt lyckas bli någon cell med ett annorlunda värde) och isåfall skriva ut något felmeddelande av något slag. (samt/eller bara avbryta?)

Det kanske bara är jag iofs, har haft att göra med lite större system där man aldrig riktigt kan vara säker på vilka värden man har att göra med och där en korrekt felhantering är a och o.

Permalänk
Medlem
Skrivet av macke75:

För att ge ett ytterligare tips (kanske överkurs?) så skulle jag nog rekommendera dig att kontrollera mot de specifika värdena som du har valt (1 eller 2) för att sedan inkludera ytterligare en else för att felkontrollera efter övriga värden (om nu något går fel i den första tilldelningen och det faktiskt lyckas bli någon cell med ett annorlunda värde) och isåfall skriva ut något felmeddelande av något slag. (samt/eller bara avbryta?)

Det kanske bara är jag iofs, har haft att göra med lite större system där man aldrig riktigt kan vara säker på vilka värden man har att göra med och där en korrekt felhantering är a och o.

Det är väldigt hårt hur jag behöver följa specifikationen. Så vi har inte så stort utrymme till finare lösningar när det kommer till sådant. Jag förstår precis hur du menar samt hur jag ska implementera det! Så jag tackar för input!

Permalänk
Medlem
Skrivet av macke75:

För att ge ett ytterligare tips (kanske överkurs?) så skulle jag nog rekommendera dig att kontrollera mot de specifika värdena som du har valt (1 eller 2) för att sedan inkludera ytterligare en else för att felkontrollera efter övriga värden (om nu något går fel i den första tilldelningen och det faktiskt lyckas bli någon cell med ett annorlunda värde) och isåfall skriva ut något felmeddelande av något slag. (samt/eller bara avbryta?)

Det kanske bara är jag iofs, har haft att göra med lite större system där man aldrig riktigt kan vara säker på vilka värden man har att göra med och där en korrekt felhantering är a och o.

Värdet tilldelas med rand() % 2 + 1, vilket ger ett värde mellan 1 och 2. Det är onödigt att lägga in felkontroller för något som inte kan inträffa.

Visa signatur

Kom-pa-TI-bilitet