Eduardo Nava / Mbed 2 deprecated MazeRunner_Fall2017-shell

Dependencies:   4DGL-uLCD-SE mbed wave_player

Fork of MazeRunner_Fall2017-shell by ECE 2035 TA

Committer:
navaem
Date:
Fri Dec 29 15:32:31 2017 +0000
Revision:
1:2c6ae0fe9a2a
Parent:
0:cf4396614a79
December 29, 2017;

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"
navaem 1:2c6ae0fe9a2a 33 #include "menu.h"
navaem 1:2c6ae0fe9a2a 34 #include "arena.h"
navaem 1:2c6ae0fe9a2a 35
navaem 1:2c6ae0fe9a2a 36 #include<stdio.h>
rconnorlawson 0:cf4396614a79 37
rconnorlawson 0:cf4396614a79 38 // Hardware initialization
rconnorlawson 0:cf4396614a79 39 DigitalIn left_pb(p21); // push button
rconnorlawson 0:cf4396614a79 40 DigitalIn right_pb(p22); // push button
rconnorlawson 0:cf4396614a79 41 DigitalIn up_pb(p23); // push button
rconnorlawson 0:cf4396614a79 42 DigitalIn down_pb(p24); // push button
rconnorlawson 0:cf4396614a79 43 uLCD_4DGL uLCD(p9,p10,p11); // LCD (serial tx, serial rx, reset pin;)
rconnorlawson 0:cf4396614a79 44 Serial pc(USBTX,USBRX); // used by Accelerometer
rconnorlawson 0:cf4396614a79 45 MMA8452 acc(p28, p27, 100000); // Accelerometer
rconnorlawson 0:cf4396614a79 46 SDFileSystem sd(p5, p6, p7, p8, "sd"); // SD card and filesystem (mosi, miso, sck, cs)
rconnorlawson 0:cf4396614a79 47
navaem 1:2c6ae0fe9a2a 48 //speaker initialization
navaem 1:2c6ae0fe9a2a 49 AnalogOut DACout(p18);
navaem 1:2c6ae0fe9a2a 50
navaem 1:2c6ae0fe9a2a 51 //led initialization
navaem 1:2c6ae0fe9a2a 52 DigitalOut myled(p30);
navaem 1:2c6ae0fe9a2a 53
rconnorlawson 0:cf4396614a79 54 // Level creation method declaration
rconnorlawson 0:cf4396614a79 55 DLinkedList* create_blank_level();
rconnorlawson 0:cf4396614a79 56
rconnorlawson 0:cf4396614a79 57 // Parameters. Declared in globals.h
rconnorlawson 0:cf4396614a79 58 const float mass = 0.001;
rconnorlawson 0:cf4396614a79 59 const int radius = 4;
navaem 1:2c6ae0fe9a2a 60 const float bounce = 0.5;
navaem 1:2c6ae0fe9a2a 61 int gameDiff = 1;
navaem 1:2c6ae0fe9a2a 62 const double pi = 3.141592653589793238462;
navaem 1:2c6ae0fe9a2a 63
rconnorlawson 0:cf4396614a79 64
rconnorlawson 0:cf4396614a79 65 /** Main() is where you start your implementation */
rconnorlawson 0:cf4396614a79 66 int main()
rconnorlawson 0:cf4396614a79 67 {
rconnorlawson 0:cf4396614a79 68 ////////////////////////////
rconnorlawson 0:cf4396614a79 69 // Power-on initialization
rconnorlawson 0:cf4396614a79 70 ////////////////////////////
rconnorlawson 0:cf4396614a79 71 // Turn up the serial data rate so we don't lag
rconnorlawson 0:cf4396614a79 72 uLCD.baudrate(3000000);
rconnorlawson 0:cf4396614a79 73 pc.baud(115200);
rconnorlawson 0:cf4396614a79 74
rconnorlawson 0:cf4396614a79 75 // Initialize the buttons
rconnorlawson 0:cf4396614a79 76 // Each *_pb variable is 0 when pressed
rconnorlawson 0:cf4396614a79 77 left_pb.mode(PullUp);
rconnorlawson 0:cf4396614a79 78 right_pb.mode(PullUp);
rconnorlawson 0:cf4396614a79 79 up_pb.mode(PullUp);
rconnorlawson 0:cf4396614a79 80 down_pb.mode(PullUp);
rconnorlawson 0:cf4396614a79 81
rconnorlawson 0:cf4396614a79 82 // Other hardware initialization here (SD card, speaker, etc.)
rconnorlawson 0:cf4396614a79 83
rconnorlawson 0:cf4396614a79 84 ///////////////
rconnorlawson 0:cf4396614a79 85 // Reset loop
rconnorlawson 0:cf4396614a79 86 ///////////////
rconnorlawson 0:cf4396614a79 87 // This is where control between major phases of the game happens
rconnorlawson 0:cf4396614a79 88 // This is a good place to add choose levels, add the game menu, etc.
navaem 1:2c6ae0fe9a2a 89
navaem 1:2c6ae0fe9a2a 90 ////////////
navaem 1:2c6ae0fe9a2a 91 // Menu
navaem 1:2c6ae0fe9a2a 92 ////////////
navaem 1:2c6ae0fe9a2a 93 //this is where I will draw the menu and implement a loop to select choices.
navaem 1:2c6ae0fe9a2a 94 uLCD.background_color(BLACK);
navaem 1:2c6ae0fe9a2a 95 uLCD.cls();
navaem 1:2c6ae0fe9a2a 96
navaem 1:2c6ae0fe9a2a 97
navaem 1:2c6ae0fe9a2a 98 uLCD.locate(39,2);
navaem 1:2c6ae0fe9a2a 99 uLCD.printf("MAZERUNNER");
navaem 1:2c6ae0fe9a2a 100
navaem 1:2c6ae0fe9a2a 101
navaem 1:2c6ae0fe9a2a 102
navaem 1:2c6ae0fe9a2a 103 //classic button
navaem 1:2c6ae0fe9a2a 104 uLCD.filled_rectangle(13,42,113,60,GREEN);
navaem 1:2c6ae0fe9a2a 105 uLCD.rectangle(12,41,114,61,WHITE);
navaem 1:2c6ae0fe9a2a 106 uLCD.textbackground_color(GREEN);
navaem 1:2c6ae0fe9a2a 107 uLCD.text_string("CLASSIC", 3, 6, FONT_7X8, BLACK);
navaem 1:2c6ae0fe9a2a 108 wait(0.1);
navaem 1:2c6ae0fe9a2a 109
navaem 1:2c6ae0fe9a2a 110 //Level Select button
navaem 1:2c6ae0fe9a2a 111 uLCD.filled_rectangle(13,60+5,113,78+5,GREEN);
navaem 1:2c6ae0fe9a2a 112 uLCD.rectangle(12,59+5,114,79+5,LGREY);
navaem 1:2c6ae0fe9a2a 113 uLCD.text_string("LEVEL SELECT",3,9,FONT_7X8,BLACK);
navaem 1:2c6ae0fe9a2a 114 wait(0.1);
navaem 1:2c6ae0fe9a2a 115
navaem 1:2c6ae0fe9a2a 116 //options button
navaem 1:2c6ae0fe9a2a 117 uLCD.filled_rectangle(13,88,113,106,GREEN);
navaem 1:2c6ae0fe9a2a 118 uLCD.rectangle(12,87,114,87+20,LGREY);
navaem 1:2c6ae0fe9a2a 119 uLCD.text_string("DIFFICULTY",3,12,FONT_7X8,BLACK);
navaem 1:2c6ae0fe9a2a 120
navaem 1:2c6ae0fe9a2a 121 int *currSel = (int*)malloc(sizeof(int));
navaem 1:2c6ae0fe9a2a 122 int *changeSel = (int*)malloc(sizeof(int));
navaem 1:2c6ae0fe9a2a 123 int exitmenu = 1;
navaem 1:2c6ae0fe9a2a 124 *currSel = 0;
navaem 1:2c6ae0fe9a2a 125 *changeSel = 0;
navaem 1:2c6ae0fe9a2a 126 int *selPress = (int*)malloc(sizeof(int));
navaem 1:2c6ae0fe9a2a 127 int *upPress = (int*)malloc(sizeof(int));
navaem 1:2c6ae0fe9a2a 128 int *downPress = (int*)malloc(sizeof(int));
navaem 1:2c6ae0fe9a2a 129
navaem 1:2c6ae0fe9a2a 130
navaem 1:2c6ae0fe9a2a 131 DLinkedList* saves = create_dlinkedlist();
navaem 1:2c6ae0fe9a2a 132
navaem 1:2c6ae0fe9a2a 133 for(int i = 0; i < 6; i++) {
navaem 1:2c6ae0fe9a2a 134 insertHead(saves, NULL);
navaem 1:2c6ae0fe9a2a 135 }
navaem 1:2c6ae0fe9a2a 136
navaem 1:2c6ae0fe9a2a 137
navaem 1:2c6ae0fe9a2a 138
navaem 1:2c6ae0fe9a2a 139
navaem 1:2c6ae0fe9a2a 140 myled = 1;
navaem 1:2c6ae0fe9a2a 141 wait(0.2);
navaem 1:2c6ae0fe9a2a 142
navaem 1:2c6ae0fe9a2a 143
navaem 1:2c6ae0fe9a2a 144
navaem 1:2c6ae0fe9a2a 145
navaem 1:2c6ae0fe9a2a 146 while(exitmenu)
rconnorlawson 0:cf4396614a79 147 {
navaem 1:2c6ae0fe9a2a 148 *selPress = right_pb;
navaem 1:2c6ae0fe9a2a 149 *upPress = up_pb;
navaem 1:2c6ae0fe9a2a 150 *downPress = down_pb;
navaem 1:2c6ae0fe9a2a 151
navaem 1:2c6ae0fe9a2a 152 if (!*selPress){ //if selection button is pressed
navaem 1:2c6ae0fe9a2a 153
navaem 1:2c6ae0fe9a2a 154 switch (*currSel) {// see which option was chosen
navaem 1:2c6ae0fe9a2a 155 case 0:
navaem 1:2c6ae0fe9a2a 156 uLCD.cls();
navaem 1:2c6ae0fe9a2a 157 free(selPress);
navaem 1:2c6ae0fe9a2a 158 free(upPress);
navaem 1:2c6ae0fe9a2a 159 free(downPress);
navaem 1:2c6ae0fe9a2a 160 // Initialze game state
navaem 1:2c6ae0fe9a2a 161 DLinkedList* levelOne = createLevel1();
navaem 1:2c6ae0fe9a2a 162 DLinkedList* levelTwo = createLevel2();
navaem 1:2c6ae0fe9a2a 163 DLinkedList* levelThree = createLevel3();
navaem 1:2c6ae0fe9a2a 164 DLinkedList* arena = create_dlinkedlist();
navaem 1:2c6ae0fe9a2a 165 insertTail(arena,(void*)levelOne);
navaem 1:2c6ae0fe9a2a 166 insertTail(arena,(void*)levelTwo);
navaem 1:2c6ae0fe9a2a 167 insertTail(arena,(void*)levelThree);
navaem 1:2c6ae0fe9a2a 168 Physics state = {0};
navaem 1:2c6ae0fe9a2a 169 state.px = 20.0; // Position in the center of the screen
navaem 1:2c6ae0fe9a2a 170 state.py = 20.0;
navaem 1:2c6ae0fe9a2a 171 state.vx = 0.0; // Initially unmoving
navaem 1:2c6ae0fe9a2a 172 state.vy = 0.0;
navaem 1:2c6ae0fe9a2a 173
navaem 1:2c6ae0fe9a2a 174 // Delegate to the game loop to execute the level
navaem 1:2c6ae0fe9a2a 175 // run_game() is in game.cpp
navaem 1:2c6ae0fe9a2a 176 run_game((DLinkedList*)getHead(arena), &state, saves);
navaem 1:2c6ae0fe9a2a 177 run_game((DLinkedList*)getNext(arena), &state, saves);
navaem 1:2c6ae0fe9a2a 178 run_game((DLinkedList*)getNext(arena), &state, saves);
navaem 1:2c6ae0fe9a2a 179
navaem 1:2c6ae0fe9a2a 180 // Destory the arena and entities once we're done with the level
navaem 1:2c6ae0fe9a2a 181 destroyList(arena);
navaem 1:2c6ae0fe9a2a 182
navaem 1:2c6ae0fe9a2a 183 exitmenu = 0;
navaem 1:2c6ae0fe9a2a 184
navaem 1:2c6ae0fe9a2a 185
navaem 1:2c6ae0fe9a2a 186 break;
navaem 1:2c6ae0fe9a2a 187 case 1:
navaem 1:2c6ae0fe9a2a 188 //load level select menu
navaem 1:2c6ae0fe9a2a 189 //once the levels to play have been returned, initialize them
navaem 1:2c6ae0fe9a2a 190 //and run them
navaem 1:2c6ae0fe9a2a 191 DLinkedList* levels = runLevelSelectMenu();
navaem 1:2c6ae0fe9a2a 192 if (levels != NULL) {
navaem 1:2c6ae0fe9a2a 193 free(selPress);
navaem 1:2c6ae0fe9a2a 194 free(upPress);
navaem 1:2c6ae0fe9a2a 195 free(downPress);
navaem 1:2c6ae0fe9a2a 196 Physics state = {0};
navaem 1:2c6ae0fe9a2a 197 state.px = 20.0; // Position in the center of the screen
navaem 1:2c6ae0fe9a2a 198 state.py = 20.0;
navaem 1:2c6ae0fe9a2a 199 state.vx = 0.0; // Initially unmoving
navaem 1:2c6ae0fe9a2a 200 state.vy = 0.0;
navaem 1:2c6ae0fe9a2a 201
navaem 1:2c6ae0fe9a2a 202 run_game((DLinkedList*)getHead(levels),&state, saves);
navaem 1:2c6ae0fe9a2a 203 run_game((DLinkedList*)getNext(levels),&state, saves);
navaem 1:2c6ae0fe9a2a 204 if (getNext(levels)!= NULL)
navaem 1:2c6ae0fe9a2a 205 {
navaem 1:2c6ae0fe9a2a 206 run_game((DLinkedList*)getCurrent(levels),&state, saves);
navaem 1:2c6ae0fe9a2a 207 }
rconnorlawson 0:cf4396614a79 208
navaem 1:2c6ae0fe9a2a 209 // Destory the arena and entities once we're done with the game
navaem 1:2c6ae0fe9a2a 210 destroyList(levels);
navaem 1:2c6ae0fe9a2a 211 exitmenu = 0;
navaem 1:2c6ae0fe9a2a 212
navaem 1:2c6ae0fe9a2a 213 }
navaem 1:2c6ae0fe9a2a 214 *currSel = 0;
navaem 1:2c6ae0fe9a2a 215 *selPress = 1;
navaem 1:2c6ae0fe9a2a 216 break;
navaem 1:2c6ae0fe9a2a 217 case 2:
navaem 1:2c6ae0fe9a2a 218 //load difficulty menu
navaem 1:2c6ae0fe9a2a 219 //will return a 0,1, or 2 for changing the mass
navaem 1:2c6ae0fe9a2a 220 //more "massive" balls will accelerate slower
navaem 1:2c6ae0fe9a2a 221 int newDiff = runDifficultySelectMenu();
navaem 1:2c6ae0fe9a2a 222 if (newDiff == 0) {
navaem 1:2c6ae0fe9a2a 223 gameDiff = .1;
navaem 1:2c6ae0fe9a2a 224 } else if (newDiff == 2) {
navaem 1:2c6ae0fe9a2a 225 gameDiff = 2;
navaem 1:2c6ae0fe9a2a 226 } else {
navaem 1:2c6ae0fe9a2a 227 gameDiff = 1;
navaem 1:2c6ae0fe9a2a 228 }
navaem 1:2c6ae0fe9a2a 229 *currSel = 0;
navaem 1:2c6ae0fe9a2a 230 *selPress = 1;
navaem 1:2c6ae0fe9a2a 231 break;
navaem 1:2c6ae0fe9a2a 232 default:
navaem 1:2c6ae0fe9a2a 233 break;
navaem 1:2c6ae0fe9a2a 234 }
navaem 1:2c6ae0fe9a2a 235 }
navaem 1:2c6ae0fe9a2a 236
navaem 1:2c6ae0fe9a2a 237 //read the new currSel
navaem 1:2c6ae0fe9a2a 238 if (!*upPress&&!*downPress){
navaem 1:2c6ae0fe9a2a 239 continue;
navaem 1:2c6ae0fe9a2a 240 }else if(!*upPress) {
navaem 1:2c6ae0fe9a2a 241 if (*currSel!=0){
navaem 1:2c6ae0fe9a2a 242 (*currSel)--;
navaem 1:2c6ae0fe9a2a 243 *changeSel = 1;
navaem 1:2c6ae0fe9a2a 244 }
navaem 1:2c6ae0fe9a2a 245 }else if(!*downPress){
navaem 1:2c6ae0fe9a2a 246
navaem 1:2c6ae0fe9a2a 247 if (*currSel!=2){
navaem 1:2c6ae0fe9a2a 248 (*currSel)++;
navaem 1:2c6ae0fe9a2a 249 *changeSel = 1;
navaem 1:2c6ae0fe9a2a 250 }
navaem 1:2c6ae0fe9a2a 251 }else{
navaem 1:2c6ae0fe9a2a 252 continue;
navaem 1:2c6ae0fe9a2a 253 }
navaem 1:2c6ae0fe9a2a 254
navaem 1:2c6ae0fe9a2a 255
navaem 1:2c6ae0fe9a2a 256 if (*changeSel) {
navaem 1:2c6ae0fe9a2a 257 switch (*currSel) {
navaem 1:2c6ae0fe9a2a 258 case 0:
navaem 1:2c6ae0fe9a2a 259 uLCD.rectangle(12,41,114,61,WHITE);
navaem 1:2c6ae0fe9a2a 260 uLCD.rectangle(12,59+5,114,79+5,LGREY);
navaem 1:2c6ae0fe9a2a 261 uLCD.rectangle(12,87,114,87+20,LGREY);
navaem 1:2c6ae0fe9a2a 262 break;
navaem 1:2c6ae0fe9a2a 263 case 1:
navaem 1:2c6ae0fe9a2a 264 uLCD.rectangle(12,41,114,61,LGREY);
navaem 1:2c6ae0fe9a2a 265 uLCD.rectangle(12,59+5,114,79+5,WHITE);
navaem 1:2c6ae0fe9a2a 266 uLCD.rectangle(12,87,114,87+20,LGREY);
navaem 1:2c6ae0fe9a2a 267 break;
navaem 1:2c6ae0fe9a2a 268 case 2:
navaem 1:2c6ae0fe9a2a 269 uLCD.rectangle(12,41,114,61,LGREY);
navaem 1:2c6ae0fe9a2a 270 uLCD.rectangle(12,59+5,114,79+5,LGREY);
navaem 1:2c6ae0fe9a2a 271 uLCD.rectangle(12,87,114,87+20,WHITE);
navaem 1:2c6ae0fe9a2a 272 break;
navaem 1:2c6ae0fe9a2a 273 default:
navaem 1:2c6ae0fe9a2a 274 break;
navaem 1:2c6ae0fe9a2a 275 }
navaem 1:2c6ae0fe9a2a 276 }
navaem 1:2c6ae0fe9a2a 277 *changeSel = 0;
navaem 1:2c6ae0fe9a2a 278 wait(1);
navaem 1:2c6ae0fe9a2a 279 }
navaem 1:2c6ae0fe9a2a 280 uLCD.cls();
navaem 1:2c6ae0fe9a2a 281 uLCD.textbackground_color(BLACK);
navaem 1:2c6ae0fe9a2a 282 uLCD.text_string("GAME OVER",4,2,FONT_7X8,GREEN);
navaem 1:2c6ae0fe9a2a 283 for (int i = 0; i < 8000; i++){
navaem 1:2c6ae0fe9a2a 284 DACout.write_u16((uint16_t)2*65535*cos(2.0*pi*150.0*((double)i/8000.0)));
navaem 1:2c6ae0fe9a2a 285 }
navaem 1:2c6ae0fe9a2a 286 for (int i = 0; i < 2000; i++){
navaem 1:2c6ae0fe9a2a 287 DACout.write_u16((uint16_t)2*65535*cos(2.0*pi*183.0*((double)i/8000.0)));
navaem 1:2c6ae0fe9a2a 288 }
navaem 1:2c6ae0fe9a2a 289 for (int i = 0; i < 3000; i++){
navaem 1:2c6ae0fe9a2a 290 DACout.write_u16((uint16_t)2*65535*cos(2.0*pi*250.0*((double)i/8000.0)));
navaem 1:2c6ae0fe9a2a 291 }
navaem 1:2c6ae0fe9a2a 292
rconnorlawson 0:cf4396614a79 293
navaem 1:2c6ae0fe9a2a 294
navaem 1:2c6ae0fe9a2a 295
rconnorlawson 0:cf4396614a79 296 }
rconnorlawson 0:cf4396614a79 297
rconnorlawson 0:cf4396614a79 298 /** Creates a level with only bounding walls and a ball. */
rconnorlawson 0:cf4396614a79 299 DLinkedList* create_blank_level()
rconnorlawson 0:cf4396614a79 300 {
rconnorlawson 0:cf4396614a79 301 DLinkedList* arena = create_dlinkedlist();
rconnorlawson 0:cf4396614a79 302
rconnorlawson 0:cf4396614a79 303 // Initialize the walls
rconnorlawson 0:cf4396614a79 304 Wall* walls[4];
rconnorlawson 0:cf4396614a79 305 walls[0] = create_wall(HORIZONTAL, 0, 0, 127, bounce); // top
rconnorlawson 0:cf4396614a79 306 walls[1] = create_wall(HORIZONTAL, 0, 127, 127, bounce);// bottom
rconnorlawson 0:cf4396614a79 307 walls[2] = create_wall(VERTICAL, 0, 0, 127, bounce); // left
rconnorlawson 0:cf4396614a79 308 walls[3] = create_wall(VERTICAL, 127, 0, 127, bounce); // right
rconnorlawson 0:cf4396614a79 309
rconnorlawson 0:cf4396614a79 310 // Add the walls to the arena
rconnorlawson 0:cf4396614a79 311 for (int i = 0; i < 4; i++)
rconnorlawson 0:cf4396614a79 312 insertTail(arena, (void*)walls[i]);
rconnorlawson 0:cf4396614a79 313
rconnorlawson 0:cf4396614a79 314 // Initialize the ball
rconnorlawson 0:cf4396614a79 315 Ball* ball = (Ball*) malloc(sizeof(Ball));
rconnorlawson 0:cf4396614a79 316 ball->type = BALL;
rconnorlawson 0:cf4396614a79 317 ball->x = 20;
rconnorlawson 0:cf4396614a79 318 ball->y = 20;
rconnorlawson 0:cf4396614a79 319
rconnorlawson 0:cf4396614a79 320 // Add ball to the arena
rconnorlawson 0:cf4396614a79 321 // NOTE: The ball should always be last in the arena list, so that the other
rconnorlawson 0:cf4396614a79 322 // ArenaElements have a chance to compute the Physics updates before the
rconnorlawson 0:cf4396614a79 323 // ball applies forward euler method.
rconnorlawson 0:cf4396614a79 324 insertTail(arena, (void*)ball);
rconnorlawson 0:cf4396614a79 325
rconnorlawson 0:cf4396614a79 326 return arena;
rconnorlawson 0:cf4396614a79 327 }