Ransom Conant / Mbed 2 deprecated MbedPacman

Dependencies:   4DGL-uLCD-SE mbed wave_player

Fork of PacMan_Skeleton_unlock by ECE 2035 TA

Committer:
conantina
Date:
Fri Feb 24 17:33:27 2017 +0000
Revision:
0:be33a1fad8c0
Child:
1:fbda247b843b
PacMan_Skeleton for student

Who changed what in which revision?

UserRevisionLine numberNew contents of line
conantina 0:be33a1fad8c0 1 /* Gatech ECE2035 2015 SPRING PAC MAN
conantina 0:be33a1fad8c0 2 * Copyright (c) 2015 Gatech ECE2035
conantina 0:be33a1fad8c0 3 *
conantina 0:be33a1fad8c0 4 * Permission is hereby granted, free of charge, to any person obtaining a copy
conantina 0:be33a1fad8c0 5 * of this software and associated documentation files (the "Software"), to deal
conantina 0:be33a1fad8c0 6 * in the Software without restriction, including without limitation the rights
conantina 0:be33a1fad8c0 7 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
conantina 0:be33a1fad8c0 8 * copies of the Software, and to permit persons to whom the Software is
conantina 0:be33a1fad8c0 9 * furnished to do so, subject to the following conditions:
conantina 0:be33a1fad8c0 10 *
conantina 0:be33a1fad8c0 11 * The above copyright notice and this permission notice shall be included in
conantina 0:be33a1fad8c0 12 * all copies or substantial portions of the Software.
conantina 0:be33a1fad8c0 13 *
conantina 0:be33a1fad8c0 14 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
conantina 0:be33a1fad8c0 15 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
conantina 0:be33a1fad8c0 16 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
conantina 0:be33a1fad8c0 17 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
conantina 0:be33a1fad8c0 18 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
conantina 0:be33a1fad8c0 19 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
conantina 0:be33a1fad8c0 20 * SOFTWARE.
conantina 0:be33a1fad8c0 21 */
conantina 0:be33a1fad8c0 22
conantina 0:be33a1fad8c0 23 #include "mbed.h"
conantina 0:be33a1fad8c0 24 #include "globals.h"
conantina 0:be33a1fad8c0 25 #include "map_public.h"
conantina 0:be33a1fad8c0 26 #include "pacman.h"
conantina 0:be33a1fad8c0 27
conantina 0:be33a1fad8c0 28 PLAYER pacman;
conantina 0:be33a1fad8c0 29 int score;
conantina 0:be33a1fad8c0 30
conantina 0:be33a1fad8c0 31 void pacman_init(int grid_x, int grid_y){
conantina 0:be33a1fad8c0 32 pacman.motion = PACMAN_HEADING_RIGHT;
conantina 0:be33a1fad8c0 33 pacman.status = PACMAN_WAIT_COMMAND;
conantina 0:be33a1fad8c0 34 pacman.grid_x = grid_x;
conantina 0:be33a1fad8c0 35 pacman.grid_y = grid_y;
conantina 0:be33a1fad8c0 36 map_eat_cookie(grid_x,grid_y); //clear the cookie on the grid.
conantina 0:be33a1fad8c0 37 pacman_draw();
conantina 0:be33a1fad8c0 38 score = 0;
conantina 0:be33a1fad8c0 39 uLCD.printf("score:%d",score);
conantina 0:be33a1fad8c0 40 }
conantina 0:be33a1fad8c0 41
conantina 0:be33a1fad8c0 42 void pacman_draw(void){
conantina 0:be33a1fad8c0 43 int x = pacman.grid_x;
conantina 0:be33a1fad8c0 44 int y = pacman.grid_y;
conantina 0:be33a1fad8c0 45 GRID grid_info = map_get_grid_status(x,y);
conantina 0:be33a1fad8c0 46 int screen_x = grid_info.x + GRID_RADIUS;
conantina 0:be33a1fad8c0 47 int screen_y = grid_info.y + GRID_RADIUS;
conantina 0:be33a1fad8c0 48 uLCD.filled_circle(screen_x, screen_y, GRID_RADIUS, PACMAN_COLOR);
conantina 0:be33a1fad8c0 49 //draw the mouth of Pacman
conantina 0:be33a1fad8c0 50 switch(pacman.motion){
conantina 0:be33a1fad8c0 51 case PACMAN_HEADING_RIGHT:
conantina 0:be33a1fad8c0 52 uLCD.filled_rectangle(screen_x,screen_y-1,screen_x+GRID_RADIUS,screen_y+1, BACKGROUND_COLOR);
conantina 0:be33a1fad8c0 53 break;
conantina 0:be33a1fad8c0 54 case PACMAN_HEADING_LEFT:
conantina 0:be33a1fad8c0 55 uLCD.filled_rectangle(screen_x-GRID_RADIUS,screen_y-1,screen_x,screen_y+1, BACKGROUND_COLOR);
conantina 0:be33a1fad8c0 56 break;
conantina 0:be33a1fad8c0 57 case PACMAN_HEADING_UP:
conantina 0:be33a1fad8c0 58 uLCD.filled_rectangle(screen_x-1,screen_y-GRID_RADIUS,screen_x+1,screen_y, BACKGROUND_COLOR);
conantina 0:be33a1fad8c0 59 break;
conantina 0:be33a1fad8c0 60 case PACMAN_HEADING_DOWN:
conantina 0:be33a1fad8c0 61 uLCD.filled_rectangle(screen_x-1,screen_y,screen_x+1,screen_y+GRID_RADIUS, BACKGROUND_COLOR);
conantina 0:be33a1fad8c0 62 break;
conantina 0:be33a1fad8c0 63 default: //head right
conantina 0:be33a1fad8c0 64 uLCD.filled_rectangle(screen_x,screen_y-1,screen_x+GRID_RADIUS,screen_y+1, BACKGROUND_COLOR);
conantina 0:be33a1fad8c0 65 break;
conantina 0:be33a1fad8c0 66 }
conantina 0:be33a1fad8c0 67 }
conantina 0:be33a1fad8c0 68
conantina 0:be33a1fad8c0 69 void pacman_clear(void){
conantina 0:be33a1fad8c0 70 int x = pacman.grid_x;
conantina 0:be33a1fad8c0 71 int y = pacman.grid_y;
conantina 0:be33a1fad8c0 72 GRID grid_info = map_get_grid_status(x,y);
conantina 0:be33a1fad8c0 73 uLCD.filled_rectangle(grid_info.x, grid_info.y, grid_info.x+GRID_SIZE-1, grid_info.y+GRID_SIZE-1, BACKGROUND_COLOR);
conantina 0:be33a1fad8c0 74 }
conantina 0:be33a1fad8c0 75
conantina 0:be33a1fad8c0 76 void pacman_set_action(PACMAN_MOTION motion){
conantina 0:be33a1fad8c0 77 if(motion == PACMAN_NO_UPDATE)
conantina 0:be33a1fad8c0 78 return;
conantina 0:be33a1fad8c0 79
conantina 0:be33a1fad8c0 80 pacman.motion = motion;
conantina 0:be33a1fad8c0 81 pacman.status = PACMAN_RUNNING;
conantina 0:be33a1fad8c0 82 }
conantina 0:be33a1fad8c0 83
conantina 0:be33a1fad8c0 84 void pacman_update_position(void){
conantina 0:be33a1fad8c0 85 GRID next_grid_info;
conantina 0:be33a1fad8c0 86 int x = pacman.grid_x;
conantina 0:be33a1fad8c0 87 int y = pacman.grid_y;
conantina 0:be33a1fad8c0 88 if(pacman.status==PACMAN_RUNNING){
conantina 0:be33a1fad8c0 89 switch(pacman.motion){
conantina 0:be33a1fad8c0 90 case PACMAN_HEADING_UP:
conantina 0:be33a1fad8c0 91 if(y==0)
conantina 0:be33a1fad8c0 92 y = NUM_GRID_Y-1;
conantina 0:be33a1fad8c0 93 else
conantina 0:be33a1fad8c0 94 y--;
conantina 0:be33a1fad8c0 95 break;
conantina 0:be33a1fad8c0 96 case PACMAN_HEADING_DOWN:
conantina 0:be33a1fad8c0 97 if(y==(NUM_GRID_Y-1))
conantina 0:be33a1fad8c0 98 y = 0;
conantina 0:be33a1fad8c0 99 else
conantina 0:be33a1fad8c0 100 y++;
conantina 0:be33a1fad8c0 101 break;
conantina 0:be33a1fad8c0 102 case PACMAN_HEADING_RIGHT:
conantina 0:be33a1fad8c0 103 if(x==NUM_GRID_X-1)
conantina 0:be33a1fad8c0 104 x = 0;
conantina 0:be33a1fad8c0 105 else
conantina 0:be33a1fad8c0 106 x++;
conantina 0:be33a1fad8c0 107 break;
conantina 0:be33a1fad8c0 108 case PACMAN_HEADING_LEFT:
conantina 0:be33a1fad8c0 109 if(x==0)
conantina 0:be33a1fad8c0 110 x = NUM_GRID_X-1;
conantina 0:be33a1fad8c0 111 else
conantina 0:be33a1fad8c0 112 x--;
conantina 0:be33a1fad8c0 113 break;
conantina 0:be33a1fad8c0 114 }
conantina 0:be33a1fad8c0 115 next_grid_info = map_get_grid_status(x,y);
conantina 0:be33a1fad8c0 116 if(next_grid_info.status==GRID_WALL){
conantina 0:be33a1fad8c0 117 pacman.status=PACMAN_WAIT_COMMAND;
conantina 0:be33a1fad8c0 118 }
conantina 0:be33a1fad8c0 119 else{
conantina 0:be33a1fad8c0 120 //clear the picture of previous
conantina 0:be33a1fad8c0 121 pacman_clear();
conantina 0:be33a1fad8c0 122 //update pacman position in map
conantina 0:be33a1fad8c0 123 pacman.grid_x = x;
conantina 0:be33a1fad8c0 124 pacman.grid_y = y;
conantina 0:be33a1fad8c0 125 pacman_draw();
conantina 0:be33a1fad8c0 126 if(next_grid_info.status>=GRID_COOKIE){
conantina 0:be33a1fad8c0 127 map_eat_cookie(x,y);
conantina 0:be33a1fad8c0 128 score++;
conantina 0:be33a1fad8c0 129 if(next_grid_info.status==GRID_SUPER_COOKIE) //one super cookie worth 5 points
conantina 0:be33a1fad8c0 130 score+=4;
conantina 0:be33a1fad8c0 131 uLCD.locate(0,0);
conantina 0:be33a1fad8c0 132 uLCD.printf("score:%d",score);
conantina 0:be33a1fad8c0 133 }
conantina 0:be33a1fad8c0 134 }
conantina 0:be33a1fad8c0 135 }
conantina 0:be33a1fad8c0 136
conantina 0:be33a1fad8c0 137 }