Ransom Conant / Mbed 2 deprecated MbedPacman

Dependencies:   4DGL-uLCD-SE mbed wave_player

Fork of PacMan_Skeleton_unlock by ECE 2035 TA

Committer:
rconant6
Date:
Thu Mar 29 05:05:51 2018 +0000
Revision:
1:fbda247b843b
Parent:
0:be33a1fad8c0
Adding files;

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;
rconant6 1:fbda247b843b 29
rconant6 1:fbda247b843b 30
rconant6 1:fbda247b843b 31 int score, highscore;
conantina 0:be33a1fad8c0 32
rconant6 1:fbda247b843b 33 void pacman_add_score(int add){
rconant6 1:fbda247b843b 34 score += add;
rconant6 1:fbda247b843b 35 }
rconant6 1:fbda247b843b 36 int pacman_get_x(void){
rconant6 1:fbda247b843b 37 return pacman.grid_x;
rconant6 1:fbda247b843b 38 }
rconant6 1:fbda247b843b 39
rconant6 1:fbda247b843b 40 int pacman_get_y(void){
rconant6 1:fbda247b843b 41 return pacman.grid_y;
rconant6 1:fbda247b843b 42 }
rconant6 1:fbda247b843b 43
rconant6 1:fbda247b843b 44 void pacman_reset_score(void){
rconant6 1:fbda247b843b 45 score = 0;
rconant6 1:fbda247b843b 46 uLCD.locate(0,0);
rconant6 1:fbda247b843b 47 uLCD.printf("score:%d",score);
rconant6 1:fbda247b843b 48 }
conantina 0:be33a1fad8c0 49 void pacman_init(int grid_x, int grid_y){
conantina 0:be33a1fad8c0 50 pacman.motion = PACMAN_HEADING_RIGHT;
conantina 0:be33a1fad8c0 51 pacman.status = PACMAN_WAIT_COMMAND;
conantina 0:be33a1fad8c0 52 pacman.grid_x = grid_x;
conantina 0:be33a1fad8c0 53 pacman.grid_y = grid_y;
conantina 0:be33a1fad8c0 54 map_eat_cookie(grid_x,grid_y); //clear the cookie on the grid.
conantina 0:be33a1fad8c0 55 pacman_draw();
rconant6 1:fbda247b843b 56 uLCD.locate(0,0);
conantina 0:be33a1fad8c0 57 uLCD.printf("score:%d",score);
rconant6 1:fbda247b843b 58 uLCD.locate(9,1);
rconant6 1:fbda247b843b 59 uLCD.printf("best:%d",highscore);
conantina 0:be33a1fad8c0 60 }
conantina 0:be33a1fad8c0 61
conantina 0:be33a1fad8c0 62 void pacman_draw(void){
conantina 0:be33a1fad8c0 63 int x = pacman.grid_x;
conantina 0:be33a1fad8c0 64 int y = pacman.grid_y;
conantina 0:be33a1fad8c0 65 GRID grid_info = map_get_grid_status(x,y);
conantina 0:be33a1fad8c0 66 int screen_x = grid_info.x + GRID_RADIUS;
conantina 0:be33a1fad8c0 67 int screen_y = grid_info.y + GRID_RADIUS;
conantina 0:be33a1fad8c0 68 uLCD.filled_circle(screen_x, screen_y, GRID_RADIUS, PACMAN_COLOR);
conantina 0:be33a1fad8c0 69 //draw the mouth of Pacman
conantina 0:be33a1fad8c0 70 switch(pacman.motion){
conantina 0:be33a1fad8c0 71 case PACMAN_HEADING_RIGHT:
conantina 0:be33a1fad8c0 72 uLCD.filled_rectangle(screen_x,screen_y-1,screen_x+GRID_RADIUS,screen_y+1, BACKGROUND_COLOR);
conantina 0:be33a1fad8c0 73 break;
conantina 0:be33a1fad8c0 74 case PACMAN_HEADING_LEFT:
conantina 0:be33a1fad8c0 75 uLCD.filled_rectangle(screen_x-GRID_RADIUS,screen_y-1,screen_x,screen_y+1, BACKGROUND_COLOR);
conantina 0:be33a1fad8c0 76 break;
conantina 0:be33a1fad8c0 77 case PACMAN_HEADING_UP:
conantina 0:be33a1fad8c0 78 uLCD.filled_rectangle(screen_x-1,screen_y-GRID_RADIUS,screen_x+1,screen_y, BACKGROUND_COLOR);
conantina 0:be33a1fad8c0 79 break;
conantina 0:be33a1fad8c0 80 case PACMAN_HEADING_DOWN:
conantina 0:be33a1fad8c0 81 uLCD.filled_rectangle(screen_x-1,screen_y,screen_x+1,screen_y+GRID_RADIUS, BACKGROUND_COLOR);
conantina 0:be33a1fad8c0 82 break;
conantina 0:be33a1fad8c0 83 default: //head right
conantina 0:be33a1fad8c0 84 uLCD.filled_rectangle(screen_x,screen_y-1,screen_x+GRID_RADIUS,screen_y+1, BACKGROUND_COLOR);
conantina 0:be33a1fad8c0 85 break;
conantina 0:be33a1fad8c0 86 }
conantina 0:be33a1fad8c0 87 }
conantina 0:be33a1fad8c0 88
conantina 0:be33a1fad8c0 89 void pacman_clear(void){
conantina 0:be33a1fad8c0 90 int x = pacman.grid_x;
conantina 0:be33a1fad8c0 91 int y = pacman.grid_y;
conantina 0:be33a1fad8c0 92 GRID grid_info = map_get_grid_status(x,y);
conantina 0:be33a1fad8c0 93 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 94 }
conantina 0:be33a1fad8c0 95
conantina 0:be33a1fad8c0 96 void pacman_set_action(PACMAN_MOTION motion){
conantina 0:be33a1fad8c0 97 if(motion == PACMAN_NO_UPDATE)
conantina 0:be33a1fad8c0 98 return;
conantina 0:be33a1fad8c0 99
conantina 0:be33a1fad8c0 100 pacman.motion = motion;
conantina 0:be33a1fad8c0 101 pacman.status = PACMAN_RUNNING;
conantina 0:be33a1fad8c0 102 }
conantina 0:be33a1fad8c0 103
rconant6 1:fbda247b843b 104 int pacman_update_position(int level){
conantina 0:be33a1fad8c0 105 GRID next_grid_info;
conantina 0:be33a1fad8c0 106 int x = pacman.grid_x;
conantina 0:be33a1fad8c0 107 int y = pacman.grid_y;
rconant6 1:fbda247b843b 108 int value = 0;
conantina 0:be33a1fad8c0 109 if(pacman.status==PACMAN_RUNNING){
conantina 0:be33a1fad8c0 110 switch(pacman.motion){
conantina 0:be33a1fad8c0 111 case PACMAN_HEADING_UP:
conantina 0:be33a1fad8c0 112 if(y==0)
conantina 0:be33a1fad8c0 113 y = NUM_GRID_Y-1;
conantina 0:be33a1fad8c0 114 else
conantina 0:be33a1fad8c0 115 y--;
conantina 0:be33a1fad8c0 116 break;
conantina 0:be33a1fad8c0 117 case PACMAN_HEADING_DOWN:
conantina 0:be33a1fad8c0 118 if(y==(NUM_GRID_Y-1))
conantina 0:be33a1fad8c0 119 y = 0;
conantina 0:be33a1fad8c0 120 else
conantina 0:be33a1fad8c0 121 y++;
conantina 0:be33a1fad8c0 122 break;
conantina 0:be33a1fad8c0 123 case PACMAN_HEADING_RIGHT:
conantina 0:be33a1fad8c0 124 if(x==NUM_GRID_X-1)
conantina 0:be33a1fad8c0 125 x = 0;
conantina 0:be33a1fad8c0 126 else
conantina 0:be33a1fad8c0 127 x++;
conantina 0:be33a1fad8c0 128 break;
conantina 0:be33a1fad8c0 129 case PACMAN_HEADING_LEFT:
conantina 0:be33a1fad8c0 130 if(x==0)
conantina 0:be33a1fad8c0 131 x = NUM_GRID_X-1;
conantina 0:be33a1fad8c0 132 else
conantina 0:be33a1fad8c0 133 x--;
conantina 0:be33a1fad8c0 134 break;
conantina 0:be33a1fad8c0 135 }
conantina 0:be33a1fad8c0 136 next_grid_info = map_get_grid_status(x,y);
conantina 0:be33a1fad8c0 137 if(next_grid_info.status==GRID_WALL){
conantina 0:be33a1fad8c0 138 pacman.status=PACMAN_WAIT_COMMAND;
conantina 0:be33a1fad8c0 139 }
conantina 0:be33a1fad8c0 140 else{
conantina 0:be33a1fad8c0 141 //clear the picture of previous
conantina 0:be33a1fad8c0 142 pacman_clear();
conantina 0:be33a1fad8c0 143 //update pacman position in map
conantina 0:be33a1fad8c0 144 pacman.grid_x = x;
conantina 0:be33a1fad8c0 145 pacman.grid_y = y;
conantina 0:be33a1fad8c0 146 pacman_draw();
conantina 0:be33a1fad8c0 147 if(next_grid_info.status>=GRID_COOKIE){
conantina 0:be33a1fad8c0 148 map_eat_cookie(x,y);
conantina 0:be33a1fad8c0 149 score++;
rconant6 1:fbda247b843b 150 if(next_grid_info.status==GRID_SUPER_COOKIE){ //one super cookie worth 5 points
conantina 0:be33a1fad8c0 151 score+=4;
rconant6 1:fbda247b843b 152
rconant6 1:fbda247b843b 153 if(level <= 4)
rconant6 1:fbda247b843b 154 value = (5000-(1000*level));
rconant6 1:fbda247b843b 155 else
rconant6 1:fbda247b843b 156 value = 1000;
rconant6 1:fbda247b843b 157
rconant6 1:fbda247b843b 158 }
conantina 0:be33a1fad8c0 159 uLCD.locate(0,0);
conantina 0:be33a1fad8c0 160 uLCD.printf("score:%d",score);
rconant6 1:fbda247b843b 161 if(score > highscore)
rconant6 1:fbda247b843b 162 highscore = score;
rconant6 1:fbda247b843b 163 uLCD.locate(9,1);
rconant6 1:fbda247b843b 164 uLCD.printf("best:%d",highscore);
rconant6 1:fbda247b843b 165
conantina 0:be33a1fad8c0 166 }
conantina 0:be33a1fad8c0 167 }
conantina 0:be33a1fad8c0 168 }
rconant6 1:fbda247b843b 169 return value;
conantina 0:be33a1fad8c0 170 }