Quantcast
Channel: Tópicos
Viewing all articles
Browse latest Browse all 11336

Jogo do galo sem arrays

$
0
0
é para isso que o pessoal está aqui ... --------- só para curiosidade, uma solução bem mais simples (visto que já tens o teu programa a funcionar): #include <stdio.h> #include <string.h> #define PLAYER1 'X' #define PLAYER2 'O' typedef struct { struct { char col1, col2, col3; } line1; struct { char col1, col2, col3; } line2; struct { char col1, col2, col3; } line3; } Board; void printBoard (Board board) { printf(" | | \n" \ " %c | %c | %c \n" \ " | | \n" \ "-------------\n" \ " | | \n" \ " %c | %c | %c \n" \ " | | \n" \ "-------------\n" \ " | | \n" \ " %c | %c | %c \n" \ " | | \n\n", board.line1.col1, board.line1.col2, board.line1.col3, board.line2.col1, board.line2.col2, board.line2.col3, board.line3.col1, board.line3.col2, board.line3.col3); } int askPlay (char player) { int cell = 0; // no input validation ... this is going to be good printf("E a vez do %c jogar: \n", player); scanf(" %d", & cell); return cell - 1; } int validatePlay (Board board, int cell) { char * aux = (char *) & board; if (* (aux + (cell)) != ' ') { printf ("A celula ja se encontra seleccionada\n"); return 0; } return 1; } // lets not complicate even more by using pointer arguments Board doPlay (Board board, int cell, char player) { char * aux = (char *) & board; * (aux + (cell)) = player; return board; } int checkWin (Board board) { int aux; if ( ((aux = board.line1.col1 + board.line1.col2 + board.line1.col3) == PLAYER1 * 3) || (aux == PLAYER2 * 3) || ((aux = board.line2.col1 + board.line2.col2 + board.line2.col3) == PLAYER1 * 3) || (aux == PLAYER2 * 3) || ((aux = board.line3.col1 + board.line3.col2 + board.line3.col3) == PLAYER1 * 3) || (aux == PLAYER2 * 3) || ((aux = board.line1.col1 + board.line2.col1 + board.line3.col1) == PLAYER1 * 3) || (aux == PLAYER2 * 3) || ((aux = board.line1.col2 + board.line2.col2 + board.line3.col2) == PLAYER1 * 3) || (aux == PLAYER2 * 3) || ((aux = board.line1.col3 + board.line2.col3 + board.line3.col3) == PLAYER1 * 3) || (aux == PLAYER2 * 3) || ((aux = board.line1.col1 + board.line2.col2 + board.line3.col3) == PLAYER1 * 3) || (aux == PLAYER2 * 3) || ((aux = board.line1.col3 + board.line2.col2 + board.line3.col1) == PLAYER1 * 3) || (aux == PLAYER2 * 3)) return aux / 3; return 0; } int main (void) { Board board; char win = 0, validCells = 9, cell, player = PLAYER1; memset (& board, ' ', sizeof (board)); while (!win && validCells) { printBoard (board); cell = askPlay (player); if (validatePlay (board, cell)) { board = doPlay (board, cell, player); win = checkWin (board); if (win) { printBoard (board); printf ("O jogador %c ganhou ... parabens\n", win); } else { --validCells; player = player == PLAYER1 ? PLAYER2 : PLAYER1; } } } if (!win) { printBoard (board); printf ("... empate ... que seca ...\n"); } return 0; }

Viewing all articles
Browse latest Browse all 11336

Trending Articles