Presentation is loading. Please wait.

Presentation is loading. Please wait.

1 CSE1301 Computer Programming: Lecture 24 - Supplement Teddy’s Modules.

Similar presentations


Presentation on theme: "1 CSE1301 Computer Programming: Lecture 24 - Supplement Teddy’s Modules."— Presentation transcript:

1 1 CSE1301 Computer Programming: Lecture 24 - Supplement Teddy’s Modules

2 2 module to mark/update board find called number on the board if ( number is on the board ) { mark the cell } if ( ( there is a row of marked cells ) or ( there is a column of marked cells ) or ( there is a diagonal of marked cells ) ) { set flag to indicate player is a winner } Algorithm : Update Player

3 3 Structure Chart : Update Player mark board check diagonals check rows check columns board called number, board true or false board true or false board true or false board player update player player

4 4 Structure Chart : Update Player mark board check diagonals check rows check columns board called number, board true or false board true or false board true or false board player update player player

5 5 /* * NAME: * void updateBoard (int number, BingoBoard *board) * * DESCRIPTION: * Marks the position of `number' on the board, if it is on * the board. * * PRE: * It assumes that `number' is within range 1 to MAX_VAL, * and that `board' points to a struct which has been * initialised appropriately so that every number appears * only at most once on the board. * * POST: * The instance pointed to by `board' is changed. * The cell which used to contain `number' is changed * to the special value MARKED_VAL. */ Module to mark cell: updateBoard() bingo-teddy/player.c

6 6 void updateBoard (int number, BingoBoard *board) { int row, col; /* Determine in which column the number would be. */ col = number / ( MAX_VAL / BOARD_DIM ); /* Look for the number in that column. */ for (row=0;row < BOARD_DIM; row++) { if (board->cell[row][col] == number) { board->cell[row][col] = MARKED_VAL; /* Since a number can appear only at most once on the board, * we can return to the calling function as soon as we have * found and marked the cell. */ return; }

7 7 #include #include "bingo.h" #include "board.c" #include "player.c" const int X = MARKED_VAL; int main() { /* We'll fill the board up just for testing. */ BingoBoard theBoard = {{ {1, 16, 31, 46, 61}, {2, 17, 32, 47, 62}, {3, 18, X, 48, 63}, {4, 19, 33, X, 64}, {5, 20, 34, 50, 65} }}; Test program for updateBoard() bingo-teddy/test-markcell.c

8 8 /* Case 1: The called number is on the board. */ updateBoard(3, &theBoard); printBoard(&theBoard); printf("\n"); updateBoard(31, &theBoard); printBoard(&theBoard); printf("\n"); /* Case 2: The called number is NOT on the board. */ updateBoard(6, &theBoard); printBoard(&theBoard); printf("\n"); updateBoard(30, &theBoard); printBoard(&theBoard); printf("\n"); return 0; }

9 9 Structure Chart : Update Player mark board check diagonals check rows check columns board called number, board true or false board true or false board true or false board player update player player

10 10 /* * NAME: * int checkBoardRows (BingoBoard *board) * * DESCRIPTION: * Check the board for a winning row; i.e. a row where * all the cells have been marked. * * PRE: * Assumes `board' contains only valid values, and that * a cell with value MARKED_VAL indicates that the cell * has been marked. `board' should be pointing to an * instance of a BingoBoard struct. * * POST: * Returns 1 if there is a winning row; 0 otherwise. * */ Module: checkBoardRows() bingo-teddy/player.c

11 11 int checkBoardRows (BingoBoard *board) { int row, col; int count; for (row=0; row < BOARD_DIM; row++) { /* Count the number of marked cells in current row. */ count = 0; for (col=0; col < BOARD_DIM; col++) { if (board->cell[row][col] == MARKED_VAL) { count++; } continued...

12 12 if (count == BOARD_DIM) { return 1; } return 0; } continuation...

13 13 #include #include "bingo.h" #include "board.c" #include "player.c" const int X = MARKED_VAL; int main() { /* We'll fill the board up just for testing. */ BingoBoard theBoard = {{ {1, 16, 31, 46, 61}, {2, 17, 32, 47, 62}, {3, 18, X, 48, 63}, {4, 19, 33, X, 64}, {5, 20, 34, 50, 65} }}; Test program for checkBoardRows() bingo-teddy/test-checkrow.c

14 14 /* Case 1: The board has no winning row. */ printBoard(&theBoard); printf("\n"); printf("Result is %d\n", checkBoardRows(&theBoard)); /* Case 2: The board has one winning row. */ updateBoard(3, &theBoard); updateBoard(18, &theBoard); updateBoard(48, &theBoard); updateBoard(63, &theBoard); printBoard(&theBoard); printf("\n"); printf("Result is %d\n", checkBoardRows(&theBoard)); return 0; }

15 15 Structure Chart : Update Player mark board check diagonals check rows check columns board called number, board true or false board true or false board true or false board player update player player checkBoardColums is similar to checkBoardRows.

16 16 Structure Chart : Update Player mark board check diagonals check rows check columns board called number, board true or false board true or false board true or false board player update player player I still have to give checkBoardDiagonals some thought, but updatePlayer needs to call this module. How can I continue?

17 17 /* * NAME: * int checkBoardDiagonals (BingoBoard *board) * * DESCRIPTION: * Check the board for a winning main diagonal; i.e. a * main diagonal (either upper-left to lower-right, or * lower-left to upper-right) where all the cells have * been marked. * * PRE: * Assumes `board' contains only valid values, and that * a cell with value MARKED_VAL indicates that the cell * has been marked. `board' should be pointing to * an instance of BingoBoard. * * POST: * Returns 1 if there is a winning diagonal; 0 otherwise. * */ Module: checkDiagonals() bingo-teddy/player.c

18 18 int checkBoardDiagonals (BingoBoard *board) { /* ** This is the dummy version of this function. ** ** Teddy hasn't figured this one out yet, so ** at the moment, this function always returns false. ** ** EXERCISE: Write the code for this function. */ return 0; }

19 19 Structure Chart : Update Player mark board check diagonals check rows check columns board called number, board true or false board true or false board true or false board player update player player Now I can work on updatePlayer even when checkDiagonal s is not yet finished.

20 20 /* * NAME: * void updatePlayer (int number, PlayerInfo *player) * * DESCRIPTION: * Given the number called by the Game Master, the player's * board is marked. It then checks if the board has a * winning row, column or diagonal. If so, a flag is set * to indicate that this player is a winner, and adds one * to the player's score. * * PRE: * `number' is assumed to be in the range 1 to MAX_VAL. * `player' should be a pointer to an instance of * PlayerInfo, which should have been initialised * using newPlayer(). * * POST: * Changes the record pointed to by `player' with the * player's updated board, win flag, and score. */ Module: updatePlayer() bingo-teddy/player.c

21 21 void updatePlayer (int number, PlayerInfo *player) { updateBoard(number, &(player->board)); if (checkBoardRows(&(player->board)) || checkBoardColumns(&(player->board)) || checkBoardDiagonals(&(player->board))) { player->isWinner = 1; }

22 22 #include #include "bingo.h" #include "board.c" #include "player.c” /* Teddy’s functions */ const int X = MARKED_VAL; int main() { Test program for updatePlayer() continued... bingo-teddy/test-player.c

23 23 /* We'll fill the player info up just for testing. */ PlayerInfo thePlayer = { /* board */ { {{1, 16, 31, 46, 61}, {2, 17, 32, 47, 62}, {3, 18, X, 48, 63}, {4, 19, 33, X, 64}, {5, 20, 34, 50, 65}} }, /* name */ "Teddy", /* isWinner */ 0 }; continued...

24 24 /* Case 1: The board has no winning row, column or diagonal. */ updatePlayer(48, &thePlayer); printBoard(&(thePlayer.board)); printf("\n"); printf("thePlayer.isWinner is %d\n\n", thePlayer.isWinner); /* Case 2: The board has one winning column, no winning row or diagonal. */ updateBoard(46, &(thePlayer.board)); updateBoard(47, &(thePlayer.board)); updatePlayer(50, &thePlayer); printBoard(&(thePlayer.board)); printf("\n"); printf("thePlayer.isWinner is %d\n\n", thePlayer.isWinner);

25 25 /* In preparation for testing the next case, change row 1 * column 4 back to 46 so we don't have a winning column, * and reset value of isWinner. */ thePlayer.board.cell[0][3] = 46; thePlayer.isWinner = 0; printBoard(&(thePlayer.board)); printf("\n"); printf("thePlayer.isWinner is %d\n\n", thePlayer.isWinner); /* Case 3: The board has one winning row, no winning column or diagonal. */ updateBoard(3, &(thePlayer.board)); updateBoard(18, &(thePlayer.board)); updatePlayer(63, &thePlayer); printBoard(&(thePlayer.board)); printf("\n"); printf("thePlayer.isWinner is %d\n\n", thePlayer.isWinner);

26 26 /* Case 4: Winning upper-left to lower-right diagonal. */ /*** EXERCISE ***/ /* Case 5: Winning lower-left to upper-right diagonal. */ /*** EXERCISE ***/ return 0; }


Download ppt "1 CSE1301 Computer Programming: Lecture 24 - Supplement Teddy’s Modules."

Similar presentations


Ads by Google