ECE 2036 Project

Dependencies:   mbed wave_player 4DGL-uLCD-SE

Committer:
rconnorlawson
Date:
Fri Nov 03 18:48:48 2017 +0000
Revision:
0:cf4396614a79
Child:
2:2042f29de6b7
Emptied shell code (including doubly linked list) and added comments for all the functionality.;

Who changed what in which revision?

UserRevisionLine numberNew contents of line
rconnorlawson 0:cf4396614a79 1 /* Gatech ECE2035 2017 FALL MAZE RUNNER
rconnorlawson 0:cf4396614a79 2 * Copyright (c) 2017 Gatech ECE2035
rconnorlawson 0:cf4396614a79 3 *
rconnorlawson 0:cf4396614a79 4 * Permission is hereby granted, free of charge, to any person obtaining a copy
rconnorlawson 0:cf4396614a79 5 * of this software and associated documentation files (the "Software"), to deal
rconnorlawson 0:cf4396614a79 6 * in the Software without restriction, including without limitation the rights
rconnorlawson 0:cf4396614a79 7 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
rconnorlawson 0:cf4396614a79 8 * copies of the Software, and to permit persons to whom the Software is
rconnorlawson 0:cf4396614a79 9 * furnished to do so, subject to the following conditions:
rconnorlawson 0:cf4396614a79 10 *
rconnorlawson 0:cf4396614a79 11 * The above copyright notice and this permission notice shall be included in
rconnorlawson 0:cf4396614a79 12 * all copies or substantial portions of the Software.
rconnorlawson 0:cf4396614a79 13 *
rconnorlawson 0:cf4396614a79 14 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
rconnorlawson 0:cf4396614a79 15 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
rconnorlawson 0:cf4396614a79 16 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
rconnorlawson 0:cf4396614a79 17 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
rconnorlawson 0:cf4396614a79 18 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
rconnorlawson 0:cf4396614a79 19 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
rconnorlawson 0:cf4396614a79 20 * SOFTWARE.
rconnorlawson 0:cf4396614a79 21 */
rconnorlawson 0:cf4396614a79 22
rconnorlawson 0:cf4396614a79 23 // Include header files for platform
rconnorlawson 0:cf4396614a79 24 #include "mbed.h"
rconnorlawson 0:cf4396614a79 25
rconnorlawson 0:cf4396614a79 26 // Include header files for pacman project
rconnorlawson 0:cf4396614a79 27 #include "globals.h"
rconnorlawson 0:cf4396614a79 28 #include "math_extra.h"
rconnorlawson 0:cf4396614a79 29 #include "physics.h"
rconnorlawson 0:cf4396614a79 30 #include "game.h"
rconnorlawson 0:cf4396614a79 31 #include "wall.h"
rconnorlawson 0:cf4396614a79 32 #include "doublely_linked_list.h"
rconnorlawson 0:cf4396614a79 33
rconnorlawson 0:cf4396614a79 34 // Hardware initialization
rconnorlawson 0:cf4396614a79 35 DigitalIn left_pb(p21); // push button
rconnorlawson 0:cf4396614a79 36 DigitalIn right_pb(p22); // push button
rconnorlawson 0:cf4396614a79 37 DigitalIn up_pb(p23); // push button
rconnorlawson 0:cf4396614a79 38 DigitalIn down_pb(p24); // push button
rconnorlawson 0:cf4396614a79 39 uLCD_4DGL uLCD(p9,p10,p11); // LCD (serial tx, serial rx, reset pin;)
rconnorlawson 0:cf4396614a79 40 Serial pc(USBTX,USBRX); // used by Accelerometer
rconnorlawson 0:cf4396614a79 41 MMA8452 acc(p28, p27, 100000); // Accelerometer
rconnorlawson 0:cf4396614a79 42 SDFileSystem sd(p5, p6, p7, p8, "sd"); // SD card and filesystem (mosi, miso, sck, cs)
rconnorlawson 0:cf4396614a79 43
rconnorlawson 0:cf4396614a79 44 // Level creation method declaration
rconnorlawson 0:cf4396614a79 45 DLinkedList* create_blank_level();
rconnorlawson 0:cf4396614a79 46
rconnorlawson 0:cf4396614a79 47 // Parameters. Declared in globals.h
rconnorlawson 0:cf4396614a79 48 const float mass = 0.001;
rconnorlawson 0:cf4396614a79 49 const int radius = 4;
rconnorlawson 0:cf4396614a79 50 const float bounce=0.5;
rconnorlawson 0:cf4396614a79 51
rconnorlawson 0:cf4396614a79 52 /** Main() is where you start your implementation */
rconnorlawson 0:cf4396614a79 53 int main()
rconnorlawson 0:cf4396614a79 54 {
rconnorlawson 0:cf4396614a79 55 ////////////////////////////
rconnorlawson 0:cf4396614a79 56 // Power-on initialization
rconnorlawson 0:cf4396614a79 57 ////////////////////////////
rconnorlawson 0:cf4396614a79 58 // Turn up the serial data rate so we don't lag
rconnorlawson 0:cf4396614a79 59 uLCD.baudrate(3000000);
rconnorlawson 0:cf4396614a79 60 pc.baud(115200);
rconnorlawson 0:cf4396614a79 61
rconnorlawson 0:cf4396614a79 62 // Initialize the buttons
rconnorlawson 0:cf4396614a79 63 // Each *_pb variable is 0 when pressed
rconnorlawson 0:cf4396614a79 64 left_pb.mode(PullUp);
rconnorlawson 0:cf4396614a79 65 right_pb.mode(PullUp);
rconnorlawson 0:cf4396614a79 66 up_pb.mode(PullUp);
rconnorlawson 0:cf4396614a79 67 down_pb.mode(PullUp);
rconnorlawson 0:cf4396614a79 68
rconnorlawson 0:cf4396614a79 69 // Other hardware initialization here (SD card, speaker, etc.)
rconnorlawson 0:cf4396614a79 70
rconnorlawson 0:cf4396614a79 71 ///////////////
rconnorlawson 0:cf4396614a79 72 // Reset loop
rconnorlawson 0:cf4396614a79 73 ///////////////
rconnorlawson 0:cf4396614a79 74 // This is where control between major phases of the game happens
rconnorlawson 0:cf4396614a79 75 // This is a good place to add choose levels, add the game menu, etc.
rconnorlawson 0:cf4396614a79 76 while(1)
rconnorlawson 0:cf4396614a79 77 {
rconnorlawson 0:cf4396614a79 78 // Initialze game state
rconnorlawson 0:cf4396614a79 79 DLinkedList* arena = create_blank_level();
rconnorlawson 0:cf4396614a79 80 Physics state = {0};
rconnorlawson 0:cf4396614a79 81 state.px = 64.0; // Position in the center of the screen
rconnorlawson 0:cf4396614a79 82 state.py = 64.0;
rconnorlawson 0:cf4396614a79 83 state.vx = 0.0; // Initially unmoving
rconnorlawson 0:cf4396614a79 84 state.vy = 0.0;
rconnorlawson 0:cf4396614a79 85
rconnorlawson 0:cf4396614a79 86 // Delegate to the game loop to execute the level
rconnorlawson 0:cf4396614a79 87 // run_game() is in game.cpp
rconnorlawson 0:cf4396614a79 88 run_game(arena, &state);
rconnorlawson 0:cf4396614a79 89
rconnorlawson 0:cf4396614a79 90 // Destory the arena and entities once we're done with the level
rconnorlawson 0:cf4396614a79 91 destroyList(arena);
rconnorlawson 0:cf4396614a79 92 }
rconnorlawson 0:cf4396614a79 93 }
rconnorlawson 0:cf4396614a79 94
rconnorlawson 0:cf4396614a79 95 /** Creates a level with only bounding walls and a ball. */
rconnorlawson 0:cf4396614a79 96 DLinkedList* create_blank_level()
rconnorlawson 0:cf4396614a79 97 {
rconnorlawson 0:cf4396614a79 98 DLinkedList* arena = create_dlinkedlist();
rconnorlawson 0:cf4396614a79 99
rconnorlawson 0:cf4396614a79 100 // Initialize the walls
rconnorlawson 0:cf4396614a79 101 Wall* walls[4];
rconnorlawson 0:cf4396614a79 102 walls[0] = create_wall(HORIZONTAL, 0, 0, 127, bounce); // top
rconnorlawson 0:cf4396614a79 103 walls[1] = create_wall(HORIZONTAL, 0, 127, 127, bounce);// bottom
rconnorlawson 0:cf4396614a79 104 walls[2] = create_wall(VERTICAL, 0, 0, 127, bounce); // left
rconnorlawson 0:cf4396614a79 105 walls[3] = create_wall(VERTICAL, 127, 0, 127, bounce); // right
rconnorlawson 0:cf4396614a79 106
rconnorlawson 0:cf4396614a79 107 // Add the walls to the arena
rconnorlawson 0:cf4396614a79 108 for (int i = 0; i < 4; i++)
rconnorlawson 0:cf4396614a79 109 insertTail(arena, (void*)walls[i]);
rconnorlawson 0:cf4396614a79 110
rconnorlawson 0:cf4396614a79 111 // Initialize the ball
rconnorlawson 0:cf4396614a79 112 Ball* ball = (Ball*) malloc(sizeof(Ball));
rconnorlawson 0:cf4396614a79 113 ball->type = BALL;
rconnorlawson 0:cf4396614a79 114 ball->x = 20;
rconnorlawson 0:cf4396614a79 115 ball->y = 20;
rconnorlawson 0:cf4396614a79 116
rconnorlawson 0:cf4396614a79 117 // Add ball to the arena
rconnorlawson 0:cf4396614a79 118 // NOTE: The ball should always be last in the arena list, so that the other
rconnorlawson 0:cf4396614a79 119 // ArenaElements have a chance to compute the Physics updates before the
rconnorlawson 0:cf4396614a79 120 // ball applies forward euler method.
rconnorlawson 0:cf4396614a79 121 insertTail(arena, (void*)ball);
rconnorlawson 0:cf4396614a79 122
rconnorlawson 0:cf4396614a79 123 return arena;
rconnorlawson 0:cf4396614a79 124 }