A top-down space game with a focus on exploration and collection

Dependencies:   N5110 mbed

Committer:
The_Jackal
Date:
Wed Jun 08 14:54:59 2016 +0000
Revision:
1:6a8aedb2ff69
Parent:
0:7a4b26a3aef5
Initial release

Who changed what in which revision?

UserRevisionLine numberNew contents of line
The_Jackal 1:6a8aedb2ff69 1 /**
The_Jackal 1:6a8aedb2ff69 2 @file main.cpp
The_Jackal 1:6a8aedb2ff69 3 @brief Main file containing the code for the game.
The_Jackal 1:6a8aedb2ff69 4 @brief Revision 1.0.2
The_Jackal 1:6a8aedb2ff69 5 @author Jack A. Townsend
The_Jackal 1:6a8aedb2ff69 6 @date June 2016
The_Jackal 1:6a8aedb2ff69 7 */
The_Jackal 0:7a4b26a3aef5 8 #include "mbed.h"
The_Jackal 0:7a4b26a3aef5 9 #include "N5110.h"
The_Jackal 0:7a4b26a3aef5 10 #include "time.h"
The_Jackal 0:7a4b26a3aef5 11 #define SENS 0.4
The_Jackal 0:7a4b26a3aef5 12 #define XCALI 0.5
The_Jackal 0:7a4b26a3aef5 13 #define YCALI 0.5
The_Jackal 0:7a4b26a3aef5 14
The_Jackal 1:6a8aedb2ff69 15 /**
The_Jackal 1:6a8aedb2ff69 16 Allows transmission of information over USB via serial for debugging purposes
The_Jackal 1:6a8aedb2ff69 17 */
The_Jackal 0:7a4b26a3aef5 18 Serial pc(USBTX, USBRX);
The_Jackal 0:7a4b26a3aef5 19
The_Jackal 1:6a8aedb2ff69 20 /**
The_Jackal 1:6a8aedb2ff69 21 Sets the display pins for the N5110 LCD
The_Jackal 1:6a8aedb2ff69 22 */
The_Jackal 0:7a4b26a3aef5 23 N5110 lcd(PTE26,PTA0,PTC4,PTD0,PTD2,PTD1,PTC3);
The_Jackal 0:7a4b26a3aef5 24
The_Jackal 1:6a8aedb2ff69 25 /**
The_Jackal 1:6a8aedb2ff69 26 @namespace ticker1
The_Jackal 1:6a8aedb2ff69 27 @brief Ticker to allow for repeated interrupts within the code
The_Jackal 1:6a8aedb2ff69 28 @namespace ticker2
The_Jackal 1:6a8aedb2ff69 29 @brief Ticker to allow for repeated interrupts within the code
The_Jackal 1:6a8aedb2ff69 30 @namespace ticker3
The_Jackal 1:6a8aedb2ff69 31 @brief Ticker to allow for repeated interrupts within the code
The_Jackal 1:6a8aedb2ff69 32 */
The_Jackal 0:7a4b26a3aef5 33 Ticker ticker1;
The_Jackal 0:7a4b26a3aef5 34 Ticker ticker2;
The_Jackal 0:7a4b26a3aef5 35 Ticker ticker3;
The_Jackal 0:7a4b26a3aef5 36
The_Jackal 1:6a8aedb2ff69 37 /**
The_Jackal 1:6a8aedb2ff69 38 @namespace Button1
The_Jackal 1:6a8aedb2ff69 39 @brief Interrupt for Button 1
The_Jackal 1:6a8aedb2ff69 40 @namespace Button2
The_Jackal 1:6a8aedb2ff69 41 @brief Interrupt for Button 2
The_Jackal 1:6a8aedb2ff69 42 @namespace Button3
The_Jackal 1:6a8aedb2ff69 43 @brief Interrupt for Button 3
The_Jackal 1:6a8aedb2ff69 44 @namespace Button4
The_Jackal 1:6a8aedb2ff69 45 @brief Interrupt for Button 4
The_Jackal 1:6a8aedb2ff69 46 @namespace JoyButton
The_Jackal 1:6a8aedb2ff69 47 @brief Interrupt for the Joystick Button
The_Jackal 1:6a8aedb2ff69 48 */
The_Jackal 0:7a4b26a3aef5 49 InterruptIn Button1(PTB18);
The_Jackal 0:7a4b26a3aef5 50 InterruptIn Button2(PTB19);
The_Jackal 0:7a4b26a3aef5 51 InterruptIn Button3(PTC1);
The_Jackal 0:7a4b26a3aef5 52 InterruptIn Button4(PTC8);
The_Jackal 0:7a4b26a3aef5 53 InterruptIn JoyButton(PTB11);
The_Jackal 0:7a4b26a3aef5 54
The_Jackal 1:6a8aedb2ff69 55 /**
The_Jackal 1:6a8aedb2ff69 56 @namespace Pot
The_Jackal 1:6a8aedb2ff69 57 @brief Analog input for the Potentiometer
The_Jackal 1:6a8aedb2ff69 58 @namespace XJoy
The_Jackal 1:6a8aedb2ff69 59 @brief Analog input for the Joystick X-Axis
The_Jackal 1:6a8aedb2ff69 60 @namespace YJoy
The_Jackal 1:6a8aedb2ff69 61 @brief Analog input for the Joystick Y-Axis
The_Jackal 1:6a8aedb2ff69 62 */
The_Jackal 0:7a4b26a3aef5 63 AnalogIn Pot(PTB10);
The_Jackal 0:7a4b26a3aef5 64 AnalogIn XJoy(PTB2);
The_Jackal 0:7a4b26a3aef5 65 AnalogIn YJoy(PTB3);
The_Jackal 0:7a4b26a3aef5 66
The_Jackal 1:6a8aedb2ff69 67 /**
The_Jackal 1:6a8aedb2ff69 68 @namespace rled
The_Jackal 1:6a8aedb2ff69 69 @brief GPIO output for the red LED
The_Jackal 1:6a8aedb2ff69 70 @namespace yled
The_Jackal 1:6a8aedb2ff69 71 @brief GPIO output for the yellow LED
The_Jackal 1:6a8aedb2ff69 72 @namespace gled
The_Jackal 1:6a8aedb2ff69 73 @brief GPIO output for the green LED
The_Jackal 1:6a8aedb2ff69 74 */
The_Jackal 0:7a4b26a3aef5 75 DigitalOut rled(PTC10);
The_Jackal 0:7a4b26a3aef5 76 DigitalOut yled(PTC11);
The_Jackal 0:7a4b26a3aef5 77 DigitalOut gled(PTA1);
The_Jackal 0:7a4b26a3aef5 78
The_Jackal 1:6a8aedb2ff69 79 /**
The_Jackal 1:6a8aedb2ff69 80 @namespace flash
The_Jackal 1:6a8aedb2ff69 81 @brief PWM output for the flashing red LED
The_Jackal 1:6a8aedb2ff69 82 @namespace buzz
The_Jackal 1:6a8aedb2ff69 83 @brief PWM output for the piezo buzzer
The_Jackal 1:6a8aedb2ff69 84 */
The_Jackal 0:7a4b26a3aef5 85 PwmOut flash(PTC2);
The_Jackal 0:7a4b26a3aef5 86 PwmOut Buzz(PTA2);
The_Jackal 0:7a4b26a3aef5 87
The_Jackal 1:6a8aedb2ff69 88 /**
The_Jackal 1:6a8aedb2ff69 89 @namespace seed
The_Jackal 1:6a8aedb2ff69 90 @brief Holds seed data for map generation
The_Jackal 1:6a8aedb2ff69 91 */
The_Jackal 0:7a4b26a3aef5 92 int seed[10][12] = {
The_Jackal 0:7a4b26a3aef5 93 {13, 15, 1, 9, 2, 3, 0, 14, 7, 6, 12, 5},
The_Jackal 0:7a4b26a3aef5 94 {10, 0, 15, 3, 7, 2, 11, 12, 9, 8, 14, 5},
The_Jackal 0:7a4b26a3aef5 95 {8, 12, 15, 9, 7, 13, 14, 3, 5, 1, 4, 10},
The_Jackal 0:7a4b26a3aef5 96 {15, 14, 0, 2, 10, 9, 1, 7, 11, 8, 5, 6},
The_Jackal 0:7a4b26a3aef5 97 {11, 7, 13, 0, 15, 4, 12, 10, 8, 2, 14, 9},
The_Jackal 0:7a4b26a3aef5 98 {7, 8, 3, 12, 9, 11, 2, 5, 15, 13, 1, 6},
The_Jackal 0:7a4b26a3aef5 99 {7, 9, 6, 12, 3, 4, 10, 13, 1, 11, 15, 5},
The_Jackal 0:7a4b26a3aef5 100 {0, 5, 1, 2, 7, 11, 14, 6, 4, 15, 8, 10},
The_Jackal 0:7a4b26a3aef5 101 {14, 7, 10, 1, 0, 4, 2, 8, 11, 15, 13, 9},
The_Jackal 0:7a4b26a3aef5 102 {5, 6, 12, 2, 9, 14, 8, 15, 13, 1, 10, 6},
The_Jackal 0:7a4b26a3aef5 103 };
The_Jackal 0:7a4b26a3aef5 104
The_Jackal 1:6a8aedb2ff69 105
The_Jackal 1:6a8aedb2ff69 106 int mapdata [16][46][60] = {0}; /*!< Array for Map data*/
The_Jackal 0:7a4b26a3aef5 107
The_Jackal 1:6a8aedb2ff69 108 /**
The_Jackal 1:6a8aedb2ff69 109 @namespace objdata
The_Jackal 1:6a8aedb2ff69 110 @brief Holds sprite data for map generation
The_Jackal 1:6a8aedb2ff69 111 */
The_Jackal 0:7a4b26a3aef5 112 int objdata [5][12][12] = {{
The_Jackal 1:6a8aedb2ff69 113 ///Station sprite
The_Jackal 0:7a4b26a3aef5 114 {0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0},
The_Jackal 0:7a4b26a3aef5 115 {0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0},
The_Jackal 0:7a4b26a3aef5 116 {0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0},
The_Jackal 0:7a4b26a3aef5 117 {0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 1},
The_Jackal 0:7a4b26a3aef5 118 {0, 0, 0, 1, 1, 1, 0, 1, 1, 1, 1, 1},
The_Jackal 0:7a4b26a3aef5 119 {0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1},
The_Jackal 0:7a4b26a3aef5 120 {1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 0, 0},
The_Jackal 0:7a4b26a3aef5 121 {0, 0, 1, 1, 0, 1, 0, 0, 1, 1, 0, 0},
The_Jackal 0:7a4b26a3aef5 122 {0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0},
The_Jackal 0:7a4b26a3aef5 123 {0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0},
The_Jackal 0:7a4b26a3aef5 124 {0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0},
The_Jackal 0:7a4b26a3aef5 125 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}
The_Jackal 0:7a4b26a3aef5 126 },
The_Jackal 0:7a4b26a3aef5 127
The_Jackal 1:6a8aedb2ff69 128 ///Asteroid cluster sprite
The_Jackal 0:7a4b26a3aef5 129 { {0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0},
The_Jackal 0:7a4b26a3aef5 130 {0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0},
The_Jackal 0:7a4b26a3aef5 131 {1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0},
The_Jackal 0:7a4b26a3aef5 132 {0, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 0},
The_Jackal 0:7a4b26a3aef5 133 {0, 0, 1, 1, 0, 0, 0, 0, 1, 0, 1, 1},
The_Jackal 0:7a4b26a3aef5 134 {1, 0, 0, 0, 1, 0, 0, 1, 1, 1, 0, 1},
The_Jackal 0:7a4b26a3aef5 135 {0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1},
The_Jackal 0:7a4b26a3aef5 136 {0, 0, 1, 0, 0, 1, 0, 1, 1, 1, 1, 1},
The_Jackal 0:7a4b26a3aef5 137 {0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0},
The_Jackal 0:7a4b26a3aef5 138 {0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0},
The_Jackal 0:7a4b26a3aef5 139 {0, 0, 1, 1, 0, 1, 0, 1, 0, 0, 0, 0},
The_Jackal 0:7a4b26a3aef5 140 {0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0}
The_Jackal 0:7a4b26a3aef5 141 },
The_Jackal 0:7a4b26a3aef5 142
The_Jackal 1:6a8aedb2ff69 143 ///Planet sprite
The_Jackal 0:7a4b26a3aef5 144 { {0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0},
The_Jackal 0:7a4b26a3aef5 145 {0, 0, 1, 1, 0, 1, 0, 0, 1, 1, 0, 0},
The_Jackal 0:7a4b26a3aef5 146 {0, 1, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0},
The_Jackal 0:7a4b26a3aef5 147 {0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 1, 0},
The_Jackal 0:7a4b26a3aef5 148 {1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 1},
The_Jackal 0:7a4b26a3aef5 149 {1, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1},
The_Jackal 0:7a4b26a3aef5 150 {1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 1},
The_Jackal 0:7a4b26a3aef5 151 {1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1},
The_Jackal 0:7a4b26a3aef5 152 {0, 1, 0, 0, 1, 1, 0, 0, 1, 0, 1, 0},
The_Jackal 0:7a4b26a3aef5 153 {0, 1, 0, 0, 1, 0, 1, 1, 0, 1, 1, 0},
The_Jackal 0:7a4b26a3aef5 154 {0, 0, 1, 1, 0, 1, 1, 0, 1, 1, 0, 0},
The_Jackal 0:7a4b26a3aef5 155 {0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0}
The_Jackal 0:7a4b26a3aef5 156 },
The_Jackal 0:7a4b26a3aef5 157
The_Jackal 1:6a8aedb2ff69 158 ///Gas cloud sprite
The_Jackal 0:7a4b26a3aef5 159 { {0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0},
The_Jackal 0:7a4b26a3aef5 160 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
The_Jackal 0:7a4b26a3aef5 161 {0, 0, 1, 0, 0, 0, 1, 0, 0, 1, 0, 0},
The_Jackal 0:7a4b26a3aef5 162 {0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0},
The_Jackal 0:7a4b26a3aef5 163 {0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1},
The_Jackal 0:7a4b26a3aef5 164 {1, 0, 0, 1, 1, 1, 0, 1, 0, 0, 0, 0},
The_Jackal 0:7a4b26a3aef5 165 {0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 0, 1},
The_Jackal 0:7a4b26a3aef5 166 {0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0},
The_Jackal 0:7a4b26a3aef5 167 {0, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0},
The_Jackal 0:7a4b26a3aef5 168 {0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0},
The_Jackal 0:7a4b26a3aef5 169 {0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0},
The_Jackal 0:7a4b26a3aef5 170 {0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0}
The_Jackal 0:7a4b26a3aef5 171 },
The_Jackal 0:7a4b26a3aef5 172
The_Jackal 1:6a8aedb2ff69 173 ///Cargo icon
The_Jackal 0:7a4b26a3aef5 174 { {0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0},
The_Jackal 0:7a4b26a3aef5 175 {0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0},
The_Jackal 0:7a4b26a3aef5 176 {0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 1, 0},
The_Jackal 0:7a4b26a3aef5 177 {0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 1, 0},
The_Jackal 0:7a4b26a3aef5 178 {0, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 0},
The_Jackal 0:7a4b26a3aef5 179 {0, 1, 0, 1, 1, 0, 1, 0, 1, 0, 1, 0},
The_Jackal 0:7a4b26a3aef5 180 {0, 1, 1, 0, 0, 1, 1, 1, 0, 0, 1, 0},
The_Jackal 0:7a4b26a3aef5 181 {0, 1, 1, 0, 0, 0, 1, 0, 0, 1, 0, 0},
The_Jackal 0:7a4b26a3aef5 182 {0, 1, 1, 0, 0, 1, 1, 0, 1, 0, 0, 0},
The_Jackal 0:7a4b26a3aef5 183 {0, 1, 0, 1, 1, 0, 1, 1, 0, 0, 0, 0},
The_Jackal 0:7a4b26a3aef5 184 {1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1},
The_Jackal 0:7a4b26a3aef5 185 {1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1}
The_Jackal 0:7a4b26a3aef5 186 },
The_Jackal 0:7a4b26a3aef5 187 };
The_Jackal 1:6a8aedb2ff69 188 /**
The_Jackal 1:6a8aedb2ff69 189 @namespace ship
The_Jackal 1:6a8aedb2ff69 190 @brief Holds ship sprites in various rotations
The_Jackal 1:6a8aedb2ff69 191 */
The_Jackal 0:7a4b26a3aef5 192 int ship [4][4][4] = {
The_Jackal 0:7a4b26a3aef5 193 { {0, 1, 1, 0},
The_Jackal 0:7a4b26a3aef5 194 {0, 1, 1, 0},
The_Jackal 0:7a4b26a3aef5 195 {1, 0, 0, 1},
The_Jackal 0:7a4b26a3aef5 196 {1, 1, 1, 1}
The_Jackal 0:7a4b26a3aef5 197 },
The_Jackal 0:7a4b26a3aef5 198
The_Jackal 0:7a4b26a3aef5 199 { {1, 1, 0, 0},
The_Jackal 0:7a4b26a3aef5 200 {1, 0, 1, 1},
The_Jackal 0:7a4b26a3aef5 201 {1, 0, 1, 1},
The_Jackal 0:7a4b26a3aef5 202 {1, 1, 0, 0}
The_Jackal 0:7a4b26a3aef5 203 },
The_Jackal 0:7a4b26a3aef5 204
The_Jackal 0:7a4b26a3aef5 205 { {1, 1, 1, 1},
The_Jackal 0:7a4b26a3aef5 206 {1, 0, 0, 1},
The_Jackal 0:7a4b26a3aef5 207 {0, 1, 1, 0},
The_Jackal 0:7a4b26a3aef5 208 {0, 1, 1, 0}
The_Jackal 0:7a4b26a3aef5 209 },
The_Jackal 0:7a4b26a3aef5 210
The_Jackal 0:7a4b26a3aef5 211 { {0, 0, 1, 1},
The_Jackal 0:7a4b26a3aef5 212 {1, 1, 0, 1},
The_Jackal 0:7a4b26a3aef5 213 {1, 1, 0, 1},
The_Jackal 0:7a4b26a3aef5 214 {0, 0, 1, 1}
The_Jackal 0:7a4b26a3aef5 215 },
The_Jackal 0:7a4b26a3aef5 216 };
The_Jackal 1:6a8aedb2ff69 217 int ZPos = 0; /*!< Z-position of player in the arrays */
The_Jackal 1:6a8aedb2ff69 218 int XPos = 0; /*!< X-position of player in the arrays */
The_Jackal 1:6a8aedb2ff69 219 int YPos = 0; /*!< Y-position of player in the arrays */
The_Jackal 1:6a8aedb2ff69 220 int v = 0; /*!< Generic variable */
The_Jackal 1:6a8aedb2ff69 221 int i = 0; /*!< Generic variable */
The_Jackal 1:6a8aedb2ff69 222 int x = 0; /*!< Generic variable */
The_Jackal 1:6a8aedb2ff69 223 int y = 0; /*!< Generic variable */
The_Jackal 1:6a8aedb2ff69 224 int pixel = 0; /*!< Pixel variable used in drawing loops */
The_Jackal 1:6a8aedb2ff69 225 int s = 0; /*!< Generic variable */
The_Jackal 1:6a8aedb2ff69 226 int b = 0; /*!< Generic variable */
The_Jackal 1:6a8aedb2ff69 227 int joystate = 3; /*!< Joystick position */
The_Jackal 1:6a8aedb2ff69 228 int motion = 0; /*!< Motion detection result */
The_Jackal 1:6a8aedb2ff69 229 int clear = 1; /*!< Variable for ensuring ship pacement in free space */
The_Jackal 1:6a8aedb2ff69 230 int start = 1; /*!< Record of starting screen */
The_Jackal 1:6a8aedb2ff69 231 int cargo = 0; /*!< Cargo amount */
The_Jackal 1:6a8aedb2ff69 232 int life = 3; /*!< Life amount */
The_Jackal 1:6a8aedb2ff69 233 int g = 0; /*!< Generic variable */
The_Jackal 1:6a8aedb2ff69 234 double cash = 0; /*!< Cash amount */
The_Jackal 1:6a8aedb2ff69 235 int cost = 0; /*!< Repair cost amount */
The_Jackal 0:7a4b26a3aef5 236
The_Jackal 0:7a4b26a3aef5 237
The_Jackal 1:6a8aedb2ff69 238 volatile int butx_flag[4] = {0}; /*!<ISR flag for all main buttons */
The_Jackal 1:6a8aedb2ff69 239 volatile int butj_flag = 0; /*!<ISR flag for the joystick button */
The_Jackal 1:6a8aedb2ff69 240 volatile int refresh_flag = 0; /*!< ISR flag for screen refreshing */
The_Jackal 1:6a8aedb2ff69 241
The_Jackal 0:7a4b26a3aef5 242
The_Jackal 1:6a8aedb2ff69 243 void but1_isr(); /** Unset Button one flag */
The_Jackal 1:6a8aedb2ff69 244 void but2_isr(); /** Unset Button two flag */
The_Jackal 1:6a8aedb2ff69 245 void but3_isr(); /** Unset Button three flag */
The_Jackal 1:6a8aedb2ff69 246 void but4_isr(); /** Unset Button four flag */
The_Jackal 1:6a8aedb2ff69 247 void butj_isr(); /** Unset Joystick Button flag */
The_Jackal 1:6a8aedb2ff69 248 void refresh_isr(); /** Unset Refresh flag */
The_Jackal 1:6a8aedb2ff69 249
The_Jackal 0:7a4b26a3aef5 250
The_Jackal 0:7a4b26a3aef5 251
The_Jackal 1:6a8aedb2ff69 252 /**
The_Jackal 1:6a8aedb2ff69 253 Generates a new map based on the selected seed
The_Jackal 1:6a8aedb2ff69 254 */
The_Jackal 0:7a4b26a3aef5 255 void MapGen();
The_Jackal 1:6a8aedb2ff69 256 /**
The_Jackal 1:6a8aedb2ff69 257 Used in conjunction with MapGen, draws objects from the sprite data into the map data
The_Jackal 1:6a8aedb2ff69 258 */
The_Jackal 0:7a4b26a3aef5 259 void drawobj();
The_Jackal 1:6a8aedb2ff69 260 /**
The_Jackal 1:6a8aedb2ff69 261 Based on player location, draws the data from the map array onto the screen itself
The_Jackal 1:6a8aedb2ff69 262 */
The_Jackal 1:6a8aedb2ff69 263 void ScreenDraw();
The_Jackal 1:6a8aedb2ff69 264 /**
The_Jackal 1:6a8aedb2ff69 265 Runs the main game environment
The_Jackal 1:6a8aedb2ff69 266 */
The_Jackal 0:7a4b26a3aef5 267 void run1();
The_Jackal 1:6a8aedb2ff69 268 /**
The_Jackal 1:6a8aedb2ff69 269 Gets the positions of the joystick axes and the potentiometer, updates the appropriate variables
The_Jackal 1:6a8aedb2ff69 270 */
The_Jackal 1:6a8aedb2ff69 271 void ain();
The_Jackal 1:6a8aedb2ff69 272 /**
The_Jackal 1:6a8aedb2ff69 273 Updates the screen and handles ship rotation and movement detection/implementation
The_Jackal 1:6a8aedb2ff69 274 */
The_Jackal 1:6a8aedb2ff69 275 void refresh();
The_Jackal 1:6a8aedb2ff69 276 /**
The_Jackal 1:6a8aedb2ff69 277 Repositions the player
The_Jackal 1:6a8aedb2ff69 278 */
The_Jackal 1:6a8aedb2ff69 279 void reposition();
The_Jackal 1:6a8aedb2ff69 280 /**
The_Jackal 1:6a8aedb2ff69 281 Implements damage to the player
The_Jackal 1:6a8aedb2ff69 282 */
The_Jackal 1:6a8aedb2ff69 283 void Damage();
The_Jackal 1:6a8aedb2ff69 284 /**
The_Jackal 1:6a8aedb2ff69 285 Collision detection
The_Jackal 1:6a8aedb2ff69 286 */
The_Jackal 1:6a8aedb2ff69 287 void collision_check();
The_Jackal 1:6a8aedb2ff69 288 //defined in the code
The_Jackal 1:6a8aedb2ff69 289 int UI(int);
The_Jackal 1:6a8aedb2ff69 290 /**
The_Jackal 1:6a8aedb2ff69 291 Restarts map generation if a crash is detected
The_Jackal 1:6a8aedb2ff69 292 */
The_Jackal 1:6a8aedb2ff69 293 void crash();
The_Jackal 1:6a8aedb2ff69 294 /**
The_Jackal 1:6a8aedb2ff69 295 Starts the repair minigame
The_Jackal 1:6a8aedb2ff69 296 */
The_Jackal 1:6a8aedb2ff69 297 void repair();
The_Jackal 1:6a8aedb2ff69 298 /**
The_Jackal 1:6a8aedb2ff69 299 Returns to the main game
The_Jackal 1:6a8aedb2ff69 300 */
The_Jackal 0:7a4b26a3aef5 301 void Return();
The_Jackal 1:6a8aedb2ff69 302 //defined in the code
The_Jackal 0:7a4b26a3aef5 303 int reset(int);
The_Jackal 0:7a4b26a3aef5 304
The_Jackal 0:7a4b26a3aef5 305
The_Jackal 0:7a4b26a3aef5 306
The_Jackal 0:7a4b26a3aef5 307
The_Jackal 0:7a4b26a3aef5 308
The_Jackal 0:7a4b26a3aef5 309
The_Jackal 1:6a8aedb2ff69 310 /**
The_Jackal 1:6a8aedb2ff69 311 Initialises the display and interrupts, then launches the game
The_Jackal 1:6a8aedb2ff69 312 */
The_Jackal 0:7a4b26a3aef5 313 int main()
The_Jackal 0:7a4b26a3aef5 314 {
The_Jackal 0:7a4b26a3aef5 315
The_Jackal 1:6a8aedb2ff69 316 pc.printf("Main\n \n");
The_Jackal 0:7a4b26a3aef5 317 lcd.init(); //initialise display
The_Jackal 0:7a4b26a3aef5 318 srand(time(NULL)); //Set up rand function
The_Jackal 0:7a4b26a3aef5 319 JoyButton.rise(&butj_isr);
The_Jackal 0:7a4b26a3aef5 320 Button1.rise(&but1_isr);
The_Jackal 0:7a4b26a3aef5 321 Button2.rise(&but2_isr);
The_Jackal 0:7a4b26a3aef5 322 Button3.rise(&but3_isr);
The_Jackal 0:7a4b26a3aef5 323 Button4.rise(&but4_isr);
The_Jackal 0:7a4b26a3aef5 324 JoyButton.mode(PullDown);
The_Jackal 0:7a4b26a3aef5 325 Button1.mode(PullDown);
The_Jackal 0:7a4b26a3aef5 326 Button2.mode(PullDown);
The_Jackal 0:7a4b26a3aef5 327 Button3.mode(PullDown);
The_Jackal 0:7a4b26a3aef5 328 Button4.mode(PullDown);
The_Jackal 0:7a4b26a3aef5 329 lcd.printString("Jack",29,2);
The_Jackal 0:7a4b26a3aef5 330 lcd.printString("Townsend",17,3);
The_Jackal 0:7a4b26a3aef5 331 lcd.printString("2016 Leeds",12,4);
The_Jackal 0:7a4b26a3aef5 332 wait(3);
The_Jackal 0:7a4b26a3aef5 333 lcd.clear();
The_Jackal 1:6a8aedb2ff69 334 pc.printf("Display initialised\n \n");
The_Jackal 1:6a8aedb2ff69 335 pc.printf("Rand funct set\n \n");
The_Jackal 0:7a4b26a3aef5 336 UI(2);
The_Jackal 0:7a4b26a3aef5 337 }
The_Jackal 1:6a8aedb2ff69 338 /**
The_Jackal 1:6a8aedb2ff69 339 @brief Draws a user interface based on what is required by the game
The_Jackal 1:6a8aedb2ff69 340 @param t - Interface number
The_Jackal 1:6a8aedb2ff69 341 @Returns The interface that will be implemented
The_Jackal 1:6a8aedb2ff69 342 */
The_Jackal 0:7a4b26a3aef5 343 int UI(int t)
The_Jackal 0:7a4b26a3aef5 344 {
The_Jackal 0:7a4b26a3aef5 345 switch(t) {
The_Jackal 0:7a4b26a3aef5 346 case 0:
The_Jackal 0:7a4b26a3aef5 347 s = 4;
The_Jackal 0:7a4b26a3aef5 348 for (x = 0; x < 12; x++) {
The_Jackal 0:7a4b26a3aef5 349 for (y = 0; y < 12; y++) {
The_Jackal 0:7a4b26a3aef5 350 pixel = objdata [s][y][x];
The_Jackal 0:7a4b26a3aef5 351 if(pixel == 0) {
The_Jackal 0:7a4b26a3aef5 352 lcd.clearPixel(x+67,y+3);
The_Jackal 0:7a4b26a3aef5 353 } else {
The_Jackal 0:7a4b26a3aef5 354 lcd.setPixel(x+67,y+3);
The_Jackal 0:7a4b26a3aef5 355 }
The_Jackal 0:7a4b26a3aef5 356 }
The_Jackal 0:7a4b26a3aef5 357 }
The_Jackal 0:7a4b26a3aef5 358 lcd.drawRect(67,16,11,28,0);
The_Jackal 0:7a4b26a3aef5 359 break;
The_Jackal 0:7a4b26a3aef5 360 case 1:
The_Jackal 0:7a4b26a3aef5 361 ticker2.detach();
The_Jackal 0:7a4b26a3aef5 362 ticker1.detach();
The_Jackal 0:7a4b26a3aef5 363 lcd.inverseMode();
The_Jackal 0:7a4b26a3aef5 364 lcd.clear();
The_Jackal 0:7a4b26a3aef5 365 joystate = 3;
The_Jackal 0:7a4b26a3aef5 366 lcd.drawRect(0,0,83,47,0);
The_Jackal 0:7a4b26a3aef5 367 lcd.drawRect(2,2,79,43,0);
The_Jackal 0:7a4b26a3aef5 368 wait(0.5);
The_Jackal 0:7a4b26a3aef5 369 lcd.printString("STATION:",5,1);
The_Jackal 0:7a4b26a3aef5 370 wait(1);
The_Jackal 0:7a4b26a3aef5 371 lcd.printString("Sell Cargo",5,3);
The_Jackal 0:7a4b26a3aef5 372 wait(0.5);
The_Jackal 0:7a4b26a3aef5 373 lcd.printString("Repair",5,4);
The_Jackal 0:7a4b26a3aef5 374 wait(0.5);
The_Jackal 0:7a4b26a3aef5 375 x = 0;
The_Jackal 0:7a4b26a3aef5 376 y = 0;
The_Jackal 0:7a4b26a3aef5 377 ticker1.attach(&ain, 0.125);
The_Jackal 0:7a4b26a3aef5 378 while(x == 0) {
The_Jackal 0:7a4b26a3aef5 379 lcd.drawRect(66,23,10,17,2);
The_Jackal 0:7a4b26a3aef5 380 wait(0.2);
The_Jackal 0:7a4b26a3aef5 381 switch(joystate) {
The_Jackal 0:7a4b26a3aef5 382 case 3:
The_Jackal 0:7a4b26a3aef5 383 lcd.printChar('<',66,3);
The_Jackal 0:7a4b26a3aef5 384 y = 3;
The_Jackal 0:7a4b26a3aef5 385 break;
The_Jackal 0:7a4b26a3aef5 386 case 1:
The_Jackal 0:7a4b26a3aef5 387 lcd.printChar('<',66,4);
The_Jackal 0:7a4b26a3aef5 388 y = 4;
The_Jackal 0:7a4b26a3aef5 389 break;
The_Jackal 0:7a4b26a3aef5 390 case 2:
The_Jackal 0:7a4b26a3aef5 391 x = 1;
The_Jackal 0:7a4b26a3aef5 392 break;
The_Jackal 0:7a4b26a3aef5 393 case 0:
The_Jackal 0:7a4b26a3aef5 394 x = 1;
The_Jackal 0:7a4b26a3aef5 395 break;
The_Jackal 0:7a4b26a3aef5 396 }
The_Jackal 0:7a4b26a3aef5 397 wait(0.2);
The_Jackal 0:7a4b26a3aef5 398 }
The_Jackal 0:7a4b26a3aef5 399 ticker1.detach();
The_Jackal 0:7a4b26a3aef5 400 switch(y) {
The_Jackal 0:7a4b26a3aef5 401 case 3:
The_Jackal 0:7a4b26a3aef5 402 cash = cash + cargo;
The_Jackal 0:7a4b26a3aef5 403 cargo = 0;
The_Jackal 0:7a4b26a3aef5 404 Return();
The_Jackal 0:7a4b26a3aef5 405 break;
The_Jackal 0:7a4b26a3aef5 406 case 4:
The_Jackal 0:7a4b26a3aef5 407 cost = 3 - life;
The_Jackal 0:7a4b26a3aef5 408 if(cash < 50*cost) {
The_Jackal 0:7a4b26a3aef5 409 lcd.clear();
The_Jackal 0:7a4b26a3aef5 410 lcd.printString("Can't afford!",5,4);
The_Jackal 0:7a4b26a3aef5 411 wait(2);
The_Jackal 0:7a4b26a3aef5 412 Return();
The_Jackal 0:7a4b26a3aef5 413 } else {
The_Jackal 0:7a4b26a3aef5 414 cash = cash - 50*cost;
The_Jackal 0:7a4b26a3aef5 415 life = 3;
The_Jackal 0:7a4b26a3aef5 416 lcd.clear();
The_Jackal 0:7a4b26a3aef5 417 lcd.printString("Repaired!",5,4);
The_Jackal 0:7a4b26a3aef5 418 wait(2);
The_Jackal 0:7a4b26a3aef5 419 Return();
The_Jackal 0:7a4b26a3aef5 420 }
The_Jackal 0:7a4b26a3aef5 421 }
The_Jackal 0:7a4b26a3aef5 422 break;
The_Jackal 0:7a4b26a3aef5 423 case 2:
The_Jackal 0:7a4b26a3aef5 424 lcd.inverseMode();
The_Jackal 0:7a4b26a3aef5 425 lcd.clear();
The_Jackal 0:7a4b26a3aef5 426 joystate = 3;
The_Jackal 0:7a4b26a3aef5 427 lcd.drawRect(0,0,83,47,0);
The_Jackal 0:7a4b26a3aef5 428 lcd.drawRect(2,2,79,43,0);
The_Jackal 0:7a4b26a3aef5 429 wait(0.2);
The_Jackal 0:7a4b26a3aef5 430 lcd.printString("SpacE",27,1);
The_Jackal 0:7a4b26a3aef5 431 wait(0.4);
The_Jackal 0:7a4b26a3aef5 432 lcd.printString("-EXPLORER-",12,2);
The_Jackal 0:7a4b26a3aef5 433 wait(2);
The_Jackal 0:7a4b26a3aef5 434 lcd.printString("Start",5,3);
The_Jackal 0:7a4b26a3aef5 435 wait(0.5);
The_Jackal 0:7a4b26a3aef5 436 lcd.printString("Help",5,4);
The_Jackal 0:7a4b26a3aef5 437 x = 0;
The_Jackal 0:7a4b26a3aef5 438 y = 0;
The_Jackal 0:7a4b26a3aef5 439 ticker1.attach(&ain, 0.125);
The_Jackal 0:7a4b26a3aef5 440 while(x == 0) {
The_Jackal 0:7a4b26a3aef5 441 lcd.drawRect(38,23,20,17,2);
The_Jackal 0:7a4b26a3aef5 442 wait(0.2);
The_Jackal 0:7a4b26a3aef5 443 switch(joystate) {
The_Jackal 0:7a4b26a3aef5 444 case 3:
The_Jackal 0:7a4b26a3aef5 445 lcd.printChar('<',40,3);
The_Jackal 0:7a4b26a3aef5 446 y = 3;
The_Jackal 0:7a4b26a3aef5 447 break;
The_Jackal 0:7a4b26a3aef5 448 case 1:
The_Jackal 0:7a4b26a3aef5 449 lcd.printChar('<',40,4);
The_Jackal 0:7a4b26a3aef5 450 y = 4;
The_Jackal 0:7a4b26a3aef5 451 break;
The_Jackal 0:7a4b26a3aef5 452 case 2:
The_Jackal 0:7a4b26a3aef5 453 x = 1;
The_Jackal 0:7a4b26a3aef5 454 break;
The_Jackal 0:7a4b26a3aef5 455 case 0:
The_Jackal 0:7a4b26a3aef5 456 x = 1;
The_Jackal 0:7a4b26a3aef5 457 break;
The_Jackal 0:7a4b26a3aef5 458 }
The_Jackal 0:7a4b26a3aef5 459 wait(0.2);
The_Jackal 0:7a4b26a3aef5 460 }
The_Jackal 0:7a4b26a3aef5 461 ticker1.detach();
The_Jackal 0:7a4b26a3aef5 462 wait(0.2);
The_Jackal 0:7a4b26a3aef5 463 b = rand()%10;
The_Jackal 0:7a4b26a3aef5 464 UI(y);
The_Jackal 0:7a4b26a3aef5 465 break;
The_Jackal 0:7a4b26a3aef5 466 case 3:
The_Jackal 0:7a4b26a3aef5 467 lcd.clear();
The_Jackal 0:7a4b26a3aef5 468 lcd.normalMode();
The_Jackal 0:7a4b26a3aef5 469 lcd.printString("Loading...",4,10);
The_Jackal 0:7a4b26a3aef5 470 i=0;
The_Jackal 0:7a4b26a3aef5 471 ticker3.attach(&crash, 2.5);
The_Jackal 0:7a4b26a3aef5 472 i=1;
The_Jackal 0:7a4b26a3aef5 473 MapGen();
The_Jackal 1:6a8aedb2ff69 474 pc.printf("\nMap generated\n \n");
The_Jackal 0:7a4b26a3aef5 475 ScreenDraw();
The_Jackal 1:6a8aedb2ff69 476 pc.printf("Loading complete!\n");
The_Jackal 0:7a4b26a3aef5 477 break;
The_Jackal 0:7a4b26a3aef5 478 case 4:
The_Jackal 0:7a4b26a3aef5 479 lcd.clear();
The_Jackal 0:7a4b26a3aef5 480 lcd.printString("The aim is to",1,2);
The_Jackal 0:7a4b26a3aef5 481 wait(0.5);
The_Jackal 0:7a4b26a3aef5 482 lcd.printString("mine asteroids",1,3);
The_Jackal 0:7a4b26a3aef5 483 wait(0.5);
The_Jackal 0:7a4b26a3aef5 484 lcd.printString("to earn points",1,4);
The_Jackal 0:7a4b26a3aef5 485 wait(3);
The_Jackal 0:7a4b26a3aef5 486 lcd.clear();
The_Jackal 0:7a4b26a3aef5 487 lcd.printString("Your ship is",1,2);
The_Jackal 0:7a4b26a3aef5 488 wait(0.5);
The_Jackal 0:7a4b26a3aef5 489 lcd.printString("controlled w/",1,3);
The_Jackal 0:7a4b26a3aef5 490 wait(0.5);
The_Jackal 0:7a4b26a3aef5 491 lcd.printString("the joystick",1,4);
The_Jackal 0:7a4b26a3aef5 492 wait(3);
The_Jackal 0:7a4b26a3aef5 493 lcd.clear();
The_Jackal 0:7a4b26a3aef5 494 lcd.printString("Pressing the",1,2);
The_Jackal 0:7a4b26a3aef5 495 wait(0.5);
The_Jackal 0:7a4b26a3aef5 496 lcd.printString("stick fires",1,3);
The_Jackal 0:7a4b26a3aef5 497 wait(0.5);
The_Jackal 0:7a4b26a3aef5 498 lcd.printString("your laser",1,4);
The_Jackal 0:7a4b26a3aef5 499 wait(3);
The_Jackal 0:7a4b26a3aef5 500 lcd.clear();
The_Jackal 0:7a4b26a3aef5 501 lcd.printString("You will need",1,2);
The_Jackal 0:7a4b26a3aef5 502 wait(0.5);
The_Jackal 0:7a4b26a3aef5 503 lcd.printString("to search to",1,3);
The_Jackal 0:7a4b26a3aef5 504 wait(0.5);
The_Jackal 0:7a4b26a3aef5 505 lcd.printString("find asteroids",1,4);
The_Jackal 0:7a4b26a3aef5 506 wait(3);
The_Jackal 0:7a4b26a3aef5 507 lcd.clear();
The_Jackal 0:7a4b26a3aef5 508 lcd.printString("Luckily, you",1,2);
The_Jackal 0:7a4b26a3aef5 509 wait(0.5);
The_Jackal 0:7a4b26a3aef5 510 lcd.printString("can fly any",1,3);
The_Jackal 0:7a4b26a3aef5 511 wait(0.5);
The_Jackal 0:7a4b26a3aef5 512 lcd.printString("distance...",1,4);
The_Jackal 0:7a4b26a3aef5 513 wait(3);
The_Jackal 0:7a4b26a3aef5 514 lcd.clear();
The_Jackal 0:7a4b26a3aef5 515 lcd.printString("in any",1,2);
The_Jackal 0:7a4b26a3aef5 516 wait(0.5);
The_Jackal 0:7a4b26a3aef5 517 lcd.printString("direction!",1,3);
The_Jackal 0:7a4b26a3aef5 518 wait(2);
The_Jackal 0:7a4b26a3aef5 519 lcd.printString("However...",1,4);
The_Jackal 0:7a4b26a3aef5 520 wait(2);
The_Jackal 0:7a4b26a3aef5 521 lcd.clear();
The_Jackal 0:7a4b26a3aef5 522 lcd.printString("You MUST",1,2);
The_Jackal 0:7a4b26a3aef5 523 wait(0.5);
The_Jackal 0:7a4b26a3aef5 524 lcd.printString("not fly into",1,3);
The_Jackal 0:7a4b26a3aef5 525 wait(0.5);
The_Jackal 0:7a4b26a3aef5 526 lcd.printString("any objects!",1,4);
The_Jackal 0:7a4b26a3aef5 527 wait(3);
The_Jackal 0:7a4b26a3aef5 528 lcd.clear();
The_Jackal 0:7a4b26a3aef5 529 lcd.printString("If you are",1,2);
The_Jackal 0:7a4b26a3aef5 530 wait(0.5);
The_Jackal 0:7a4b26a3aef5 531 lcd.printString("on the same",1,3);
The_Jackal 0:7a4b26a3aef5 532 wait(0.5);
The_Jackal 0:7a4b26a3aef5 533 lcd.printString("screen as...",1,4);
The_Jackal 0:7a4b26a3aef5 534 wait(3);
The_Jackal 0:7a4b26a3aef5 535 lcd.clear();
The_Jackal 0:7a4b26a3aef5 536 lcd.printString("a station,",1,2);
The_Jackal 0:7a4b26a3aef5 537 wait(0.5);
The_Jackal 0:7a4b26a3aef5 538 lcd.printString("you can dock",1,3);
The_Jackal 0:7a4b26a3aef5 539 wait(0.5);
The_Jackal 0:7a4b26a3aef5 540 lcd.printString("w/ button 4",1,4);
The_Jackal 0:7a4b26a3aef5 541 wait(3);
The_Jackal 0:7a4b26a3aef5 542 lcd.clear();
The_Jackal 0:7a4b26a3aef5 543 lcd.printString("You can sell",1,2);
The_Jackal 0:7a4b26a3aef5 544 wait(0.5);
The_Jackal 0:7a4b26a3aef5 545 lcd.printString("ore and get",1,3);
The_Jackal 0:7a4b26a3aef5 546 wait(0.5);
The_Jackal 0:7a4b26a3aef5 547 lcd.printString("repairs",1,4);
The_Jackal 0:7a4b26a3aef5 548 wait(3);
The_Jackal 0:7a4b26a3aef5 549 lcd.clear();
The_Jackal 0:7a4b26a3aef5 550 lcd.printString("On the right",1,2);
The_Jackal 0:7a4b26a3aef5 551 wait(0.5);
The_Jackal 0:7a4b26a3aef5 552 lcd.printString("will be your",1,3);
The_Jackal 0:7a4b26a3aef5 553 wait(0.5);
The_Jackal 0:7a4b26a3aef5 554 lcd.printString("cargo bar",1,4);
The_Jackal 0:7a4b26a3aef5 555 wait(3);
The_Jackal 0:7a4b26a3aef5 556 lcd.clear();
The_Jackal 0:7a4b26a3aef5 557 lcd.printString("It shows you",1,2);
The_Jackal 0:7a4b26a3aef5 558 wait(0.5);
The_Jackal 0:7a4b26a3aef5 559 lcd.printString("how full the",1,3);
The_Jackal 0:7a4b26a3aef5 560 wait(0.5);
The_Jackal 0:7a4b26a3aef5 561 lcd.printString("ship is",1,4);
The_Jackal 0:7a4b26a3aef5 562 wait(3);
The_Jackal 0:7a4b26a3aef5 563 lcd.clear();
The_Jackal 0:7a4b26a3aef5 564 lcd.printString("Now get out",1,2);
The_Jackal 0:7a4b26a3aef5 565 wait(0.5);
The_Jackal 0:7a4b26a3aef5 566 lcd.printString("there and",1,3);
The_Jackal 0:7a4b26a3aef5 567 wait(0.5);
The_Jackal 0:7a4b26a3aef5 568 lcd.printString("EXPLORE!",1,4);
The_Jackal 0:7a4b26a3aef5 569 wait(5);
The_Jackal 0:7a4b26a3aef5 570 UI(2);
The_Jackal 0:7a4b26a3aef5 571 break;
The_Jackal 0:7a4b26a3aef5 572 case 5:
The_Jackal 0:7a4b26a3aef5 573 lcd.clear();
The_Jackal 0:7a4b26a3aef5 574 lcd.refresh();
The_Jackal 0:7a4b26a3aef5 575 lcd.printString("BOOM!",29,2);
The_Jackal 0:7a4b26a3aef5 576 wait(1);
The_Jackal 0:7a4b26a3aef5 577 lcd.printString("Game over",20,4);
The_Jackal 0:7a4b26a3aef5 578 wait(4);
The_Jackal 0:7a4b26a3aef5 579 UI(2);
The_Jackal 0:7a4b26a3aef5 580
The_Jackal 0:7a4b26a3aef5 581
The_Jackal 0:7a4b26a3aef5 582 }
The_Jackal 0:7a4b26a3aef5 583 }
The_Jackal 0:7a4b26a3aef5 584 void but1_isr()
The_Jackal 0:7a4b26a3aef5 585 {
The_Jackal 0:7a4b26a3aef5 586 butx_flag[3] = 1;
The_Jackal 0:7a4b26a3aef5 587 pc.printf("4\n");
The_Jackal 0:7a4b26a3aef5 588 }
The_Jackal 0:7a4b26a3aef5 589 void but2_isr()
The_Jackal 0:7a4b26a3aef5 590 {
The_Jackal 0:7a4b26a3aef5 591 butx_flag[0] = 1;
The_Jackal 0:7a4b26a3aef5 592 pc.printf("1\n");
The_Jackal 0:7a4b26a3aef5 593 }
The_Jackal 0:7a4b26a3aef5 594 void but3_isr()
The_Jackal 0:7a4b26a3aef5 595 {
The_Jackal 0:7a4b26a3aef5 596 butx_flag[1] = 1;
The_Jackal 0:7a4b26a3aef5 597 pc.printf("2\n");
The_Jackal 0:7a4b26a3aef5 598 }
The_Jackal 0:7a4b26a3aef5 599 void but4_isr()
The_Jackal 0:7a4b26a3aef5 600 {
The_Jackal 0:7a4b26a3aef5 601 butx_flag[2] = 1;
The_Jackal 0:7a4b26a3aef5 602 pc.printf("3\n");
The_Jackal 0:7a4b26a3aef5 603 }
The_Jackal 0:7a4b26a3aef5 604
The_Jackal 0:7a4b26a3aef5 605 void Return()
The_Jackal 0:7a4b26a3aef5 606 {
The_Jackal 0:7a4b26a3aef5 607 XPos = 24;
The_Jackal 0:7a4b26a3aef5 608 YPos = 20;
The_Jackal 0:7a4b26a3aef5 609 lcd.normalMode();
The_Jackal 0:7a4b26a3aef5 610 lcd.clear();
The_Jackal 0:7a4b26a3aef5 611 start = 1;
The_Jackal 0:7a4b26a3aef5 612 ScreenDraw();
The_Jackal 0:7a4b26a3aef5 613 }
The_Jackal 0:7a4b26a3aef5 614
The_Jackal 0:7a4b26a3aef5 615 void crash()
The_Jackal 0:7a4b26a3aef5 616 {
The_Jackal 0:7a4b26a3aef5 617 lcd.clear();
The_Jackal 0:7a4b26a3aef5 618 srand(b*20);
The_Jackal 0:7a4b26a3aef5 619 UI(3);
The_Jackal 0:7a4b26a3aef5 620 }
The_Jackal 0:7a4b26a3aef5 621
The_Jackal 0:7a4b26a3aef5 622
The_Jackal 0:7a4b26a3aef5 623 void butj_isr()
The_Jackal 0:7a4b26a3aef5 624 {
The_Jackal 0:7a4b26a3aef5 625 if(cargo < 53) {
The_Jackal 0:7a4b26a3aef5 626 butj_flag = 1;
The_Jackal 0:7a4b26a3aef5 627 } else {
The_Jackal 0:7a4b26a3aef5 628 butj_flag = 0;
The_Jackal 0:7a4b26a3aef5 629 }
The_Jackal 0:7a4b26a3aef5 630 }
The_Jackal 1:6a8aedb2ff69 631 /**
The_Jackal 1:6a8aedb2ff69 632 @brief Resets the selected flag
The_Jackal 1:6a8aedb2ff69 633 @param s - Flag selection
The_Jackal 1:6a8aedb2ff69 634 @returns a cleared flag
The_Jackal 1:6a8aedb2ff69 635 */
The_Jackal 0:7a4b26a3aef5 636 int reset(int s)
The_Jackal 0:7a4b26a3aef5 637 {
The_Jackal 0:7a4b26a3aef5 638 for(i=0; i<4; i++) {
The_Jackal 0:7a4b26a3aef5 639 butx_flag[i] = s;
The_Jackal 0:7a4b26a3aef5 640 }
The_Jackal 0:7a4b26a3aef5 641 }
The_Jackal 0:7a4b26a3aef5 642
The_Jackal 0:7a4b26a3aef5 643 void repair()
The_Jackal 0:7a4b26a3aef5 644 {
The_Jackal 0:7a4b26a3aef5 645 lcd.drawRect(0,0,60,48,2); //draws a blank rectangle to clear a specific area of screen
The_Jackal 0:7a4b26a3aef5 646 lcd.printString("DAMAGE",10,2);
The_Jackal 0:7a4b26a3aef5 647 lcd.printString("CRITICAL!",5,4);
The_Jackal 0:7a4b26a3aef5 648 wait(2);
The_Jackal 0:7a4b26a3aef5 649 reset(1);
The_Jackal 0:7a4b26a3aef5 650 lcd.clear();
The_Jackal 0:7a4b26a3aef5 651 lcd.printString("SYSTEMS:",2,0);
The_Jackal 0:7a4b26a3aef5 652 i=rand()%3+1; //generates a random number of faults (up to three)
The_Jackal 0:7a4b26a3aef5 653 for(y=0; y<i; y++) { //for these faults,
The_Jackal 0:7a4b26a3aef5 654 x=rand()%4+1; //generate a random fault number (out of 4 possible)
The_Jackal 0:7a4b26a3aef5 655 butx_flag[x-1] = 0; //set the appropriate flag to zero, depending on fault chosen
The_Jackal 0:7a4b26a3aef5 656 switch(x) { //displays the fault
The_Jackal 0:7a4b26a3aef5 657 case 1:
The_Jackal 0:7a4b26a3aef5 658 lcd.printString("!Reactor temp!",2,y+1);
The_Jackal 0:7a4b26a3aef5 659 break;
The_Jackal 0:7a4b26a3aef5 660 case 2:
The_Jackal 0:7a4b26a3aef5 661 lcd.printString("!Coolant leak!",2,y+1);
The_Jackal 0:7a4b26a3aef5 662 break;
The_Jackal 0:7a4b26a3aef5 663 case 3:
The_Jackal 0:7a4b26a3aef5 664 lcd.printString("!CO2 high!",2,y+1);
The_Jackal 0:7a4b26a3aef5 665 break;
The_Jackal 0:7a4b26a3aef5 666 case 4:
The_Jackal 0:7a4b26a3aef5 667 lcd.printString("!Hatch seal!",2,y+1);
The_Jackal 0:7a4b26a3aef5 668 break;
The_Jackal 0:7a4b26a3aef5 669 }
The_Jackal 0:7a4b26a3aef5 670 }
The_Jackal 0:7a4b26a3aef5 671 for(i=0; i<4; i++) { //loops until all flags are set to 1 by the user
The_Jackal 0:7a4b26a3aef5 672 if(butx_flag[i] != 1) {
The_Jackal 0:7a4b26a3aef5 673 i--;
The_Jackal 0:7a4b26a3aef5 674 }
The_Jackal 0:7a4b26a3aef5 675 wait(0.1);
The_Jackal 0:7a4b26a3aef5 676 pc.printf("Flags: %d %d %d %d\n",butx_flag[0], butx_flag[1], butx_flag[2], butx_flag[3]); //flag status for debugging
The_Jackal 0:7a4b26a3aef5 677 }
The_Jackal 0:7a4b26a3aef5 678
The_Jackal 0:7a4b26a3aef5 679
The_Jackal 0:7a4b26a3aef5 680 }
The_Jackal 0:7a4b26a3aef5 681
The_Jackal 0:7a4b26a3aef5 682 void collision_check()
The_Jackal 0:7a4b26a3aef5 683 {
The_Jackal 0:7a4b26a3aef5 684 switch(joystate) {
The_Jackal 0:7a4b26a3aef5 685 case 0:
The_Jackal 0:7a4b26a3aef5 686 for(y=-1; y<5; y++) {
The_Jackal 0:7a4b26a3aef5 687 if(lcd.getPixel(XPos-1,YPos+y) != 0) {
The_Jackal 0:7a4b26a3aef5 688 life--;
The_Jackal 0:7a4b26a3aef5 689 Damage();
The_Jackal 0:7a4b26a3aef5 690 }
The_Jackal 0:7a4b26a3aef5 691 }
The_Jackal 0:7a4b26a3aef5 692 break;
The_Jackal 0:7a4b26a3aef5 693 case 1:
The_Jackal 0:7a4b26a3aef5 694 for(x=-1; x<5; x++) {
The_Jackal 0:7a4b26a3aef5 695 if(lcd.getPixel(XPos+x,YPos+4) != 0) {
The_Jackal 0:7a4b26a3aef5 696 life--;
The_Jackal 0:7a4b26a3aef5 697 Damage();
The_Jackal 0:7a4b26a3aef5 698 }
The_Jackal 0:7a4b26a3aef5 699 }
The_Jackal 0:7a4b26a3aef5 700 break;
The_Jackal 0:7a4b26a3aef5 701 case 2:
The_Jackal 0:7a4b26a3aef5 702 for(y=-1; y<5; y++) {
The_Jackal 0:7a4b26a3aef5 703 if(lcd.getPixel(XPos+4,YPos+y) != 0) {
The_Jackal 0:7a4b26a3aef5 704 life--;
The_Jackal 0:7a4b26a3aef5 705 Damage();
The_Jackal 0:7a4b26a3aef5 706 }
The_Jackal 0:7a4b26a3aef5 707 }
The_Jackal 0:7a4b26a3aef5 708 break;
The_Jackal 0:7a4b26a3aef5 709 case 3:
The_Jackal 0:7a4b26a3aef5 710 for(x=-1; x<5; x++) {
The_Jackal 0:7a4b26a3aef5 711 if(lcd.getPixel(XPos+x,YPos-1) != 0) {
The_Jackal 0:7a4b26a3aef5 712 life--;
The_Jackal 0:7a4b26a3aef5 713 Damage();
The_Jackal 0:7a4b26a3aef5 714 }
The_Jackal 0:7a4b26a3aef5 715 }
The_Jackal 0:7a4b26a3aef5 716 break;
The_Jackal 0:7a4b26a3aef5 717 }
The_Jackal 0:7a4b26a3aef5 718 }
The_Jackal 0:7a4b26a3aef5 719
The_Jackal 0:7a4b26a3aef5 720
The_Jackal 0:7a4b26a3aef5 721 void Damage()
The_Jackal 0:7a4b26a3aef5 722 {
The_Jackal 0:7a4b26a3aef5 723 //Prevent tickers from interfering with the function
The_Jackal 0:7a4b26a3aef5 724 ticker1.detach();
The_Jackal 0:7a4b26a3aef5 725 ticker2.detach();
The_Jackal 0:7a4b26a3aef5 726 wait(0.5); //Allows user to react
The_Jackal 0:7a4b26a3aef5 727 if(life == 2) { //depending on the amount of life left, takes one life away per collision
The_Jackal 0:7a4b26a3aef5 728 gled = 1;
The_Jackal 0:7a4b26a3aef5 729 }
The_Jackal 0:7a4b26a3aef5 730 if(life == 1) {
The_Jackal 0:7a4b26a3aef5 731 yled = 1;
The_Jackal 0:7a4b26a3aef5 732 }
The_Jackal 0:7a4b26a3aef5 733 if(life == 0) { //when life becomes 0, the emergency repair minigame starts
The_Jackal 0:7a4b26a3aef5 734 rled = 1;
The_Jackal 0:7a4b26a3aef5 735 g++;
The_Jackal 0:7a4b26a3aef5 736 repair();
The_Jackal 0:7a4b26a3aef5 737 lcd.randomiseBuffer(); //generates static screens to simulate a software crash
The_Jackal 0:7a4b26a3aef5 738 lcd.refresh();
The_Jackal 0:7a4b26a3aef5 739 wait(0.2);
The_Jackal 0:7a4b26a3aef5 740 lcd.randomiseBuffer();
The_Jackal 0:7a4b26a3aef5 741 lcd.refresh();
The_Jackal 0:7a4b26a3aef5 742 wait(0.1);
The_Jackal 0:7a4b26a3aef5 743 lcd.clear();
The_Jackal 0:7a4b26a3aef5 744 lcd.printString("Rebooting...",2,0);
The_Jackal 0:7a4b26a3aef5 745 wait(0.2);
The_Jackal 0:7a4b26a3aef5 746 lcd.randomiseBuffer();
The_Jackal 0:7a4b26a3aef5 747 lcd.refresh();
The_Jackal 0:7a4b26a3aef5 748 wait(0.1);
The_Jackal 0:7a4b26a3aef5 749 lcd.clear();
The_Jackal 0:7a4b26a3aef5 750 lcd.printString("Rebooting...",2,0);
The_Jackal 0:7a4b26a3aef5 751 XPos = 24; //resets the player character position (avoids further collisions
The_Jackal 0:7a4b26a3aef5 752 YPos = 20;
The_Jackal 0:7a4b26a3aef5 753 wait(1.5);
The_Jackal 0:7a4b26a3aef5 754 lcd.clear();
The_Jackal 0:7a4b26a3aef5 755 reset(0);
The_Jackal 0:7a4b26a3aef5 756 switch(g) { //if g<2, the player is rewarded with one life. If g == 2, the player's ship explodes.
The_Jackal 0:7a4b26a3aef5 757 case 0:
The_Jackal 0:7a4b26a3aef5 758 case 1:
The_Jackal 0:7a4b26a3aef5 759 life++;
The_Jackal 0:7a4b26a3aef5 760 rled = 0;
The_Jackal 0:7a4b26a3aef5 761 ScreenDraw();
The_Jackal 0:7a4b26a3aef5 762 break;
The_Jackal 0:7a4b26a3aef5 763 case 2:
The_Jackal 0:7a4b26a3aef5 764 UI(5);
The_Jackal 0:7a4b26a3aef5 765 break;
The_Jackal 0:7a4b26a3aef5 766 }
The_Jackal 0:7a4b26a3aef5 767
The_Jackal 0:7a4b26a3aef5 768
The_Jackal 0:7a4b26a3aef5 769
The_Jackal 0:7a4b26a3aef5 770
The_Jackal 0:7a4b26a3aef5 771 }
The_Jackal 0:7a4b26a3aef5 772
The_Jackal 0:7a4b26a3aef5 773 ticker1.attach(&ain, 0.075); //tickers for the game are re-attached
The_Jackal 0:7a4b26a3aef5 774 ticker2.attach(&refresh_isr, 0.125);
The_Jackal 0:7a4b26a3aef5 775
The_Jackal 0:7a4b26a3aef5 776 }
The_Jackal 0:7a4b26a3aef5 777 void refresh()
The_Jackal 0:7a4b26a3aef5 778 {
The_Jackal 0:7a4b26a3aef5 779 lcd.refresh();
The_Jackal 1:6a8aedb2ff69 780 pc.printf("tick\n");
The_Jackal 0:7a4b26a3aef5 781
The_Jackal 0:7a4b26a3aef5 782
The_Jackal 0:7a4b26a3aef5 783 if(motion == 1) {
The_Jackal 0:7a4b26a3aef5 784 switch(joystate) {
The_Jackal 0:7a4b26a3aef5 785 case 0:
The_Jackal 0:7a4b26a3aef5 786 XPos--;
The_Jackal 0:7a4b26a3aef5 787 break;
The_Jackal 0:7a4b26a3aef5 788 case 1:
The_Jackal 0:7a4b26a3aef5 789 YPos++;
The_Jackal 0:7a4b26a3aef5 790 break;
The_Jackal 0:7a4b26a3aef5 791 case 2:
The_Jackal 0:7a4b26a3aef5 792 XPos++;
The_Jackal 0:7a4b26a3aef5 793 break;
The_Jackal 0:7a4b26a3aef5 794 case 3:
The_Jackal 0:7a4b26a3aef5 795 YPos--;
The_Jackal 0:7a4b26a3aef5 796 break;
The_Jackal 0:7a4b26a3aef5 797 }
The_Jackal 0:7a4b26a3aef5 798 }
The_Jackal 0:7a4b26a3aef5 799 if(butj_flag == 0) {
The_Jackal 0:7a4b26a3aef5 800 collision_check();
The_Jackal 0:7a4b26a3aef5 801 }
The_Jackal 0:7a4b26a3aef5 802
The_Jackal 0:7a4b26a3aef5 803 switch(motion) {
The_Jackal 0:7a4b26a3aef5 804 case 0:
The_Jackal 0:7a4b26a3aef5 805 break;
The_Jackal 0:7a4b26a3aef5 806 case 1:
The_Jackal 0:7a4b26a3aef5 807 for(y=-1; y<5; y++) {
The_Jackal 0:7a4b26a3aef5 808 for(x=-1; x<5; x++) {
The_Jackal 0:7a4b26a3aef5 809 lcd.clearPixel(XPos+x,YPos+y);
The_Jackal 0:7a4b26a3aef5 810 }
The_Jackal 0:7a4b26a3aef5 811 }
The_Jackal 0:7a4b26a3aef5 812 for(y=0; y<4; y++) {
The_Jackal 0:7a4b26a3aef5 813 for(x=0; x<4; x++) {
The_Jackal 0:7a4b26a3aef5 814 pixel = ship [joystate][x][y];
The_Jackal 0:7a4b26a3aef5 815 if(pixel == 0) {
The_Jackal 0:7a4b26a3aef5 816 lcd.clearPixel(XPos+x,YPos+y);
The_Jackal 0:7a4b26a3aef5 817 } else {
The_Jackal 0:7a4b26a3aef5 818 lcd.setPixel(XPos+x,YPos+y);
The_Jackal 0:7a4b26a3aef5 819 }
The_Jackal 0:7a4b26a3aef5 820 }
The_Jackal 0:7a4b26a3aef5 821
The_Jackal 0:7a4b26a3aef5 822 }
The_Jackal 0:7a4b26a3aef5 823
The_Jackal 0:7a4b26a3aef5 824 break;
The_Jackal 0:7a4b26a3aef5 825 }
The_Jackal 0:7a4b26a3aef5 826
The_Jackal 0:7a4b26a3aef5 827 }
The_Jackal 0:7a4b26a3aef5 828
The_Jackal 0:7a4b26a3aef5 829 void ain()
The_Jackal 0:7a4b26a3aef5 830 {
The_Jackal 0:7a4b26a3aef5 831 if(XJoy.read() > (1+SENS) * XCALI) {
The_Jackal 0:7a4b26a3aef5 832 joystate = 0;
The_Jackal 0:7a4b26a3aef5 833 motion = 1;
The_Jackal 0:7a4b26a3aef5 834 } else if(XJoy.read() < (1-SENS) * XCALI) {
The_Jackal 0:7a4b26a3aef5 835 joystate = 2;
The_Jackal 0:7a4b26a3aef5 836 motion = 1;
The_Jackal 0:7a4b26a3aef5 837 } else if(YJoy.read() > (1+SENS) * YCALI) {
The_Jackal 0:7a4b26a3aef5 838 joystate = 3;
The_Jackal 0:7a4b26a3aef5 839 motion = 1;
The_Jackal 0:7a4b26a3aef5 840 } else if(YJoy.read() < (1-SENS) * YCALI) {
The_Jackal 0:7a4b26a3aef5 841 joystate = 1;
The_Jackal 0:7a4b26a3aef5 842 motion = 1;
The_Jackal 0:7a4b26a3aef5 843 } else {
The_Jackal 0:7a4b26a3aef5 844 motion = 0;
The_Jackal 0:7a4b26a3aef5 845 }
The_Jackal 0:7a4b26a3aef5 846
The_Jackal 0:7a4b26a3aef5 847 }
The_Jackal 0:7a4b26a3aef5 848 void refresh_isr()
The_Jackal 0:7a4b26a3aef5 849 {
The_Jackal 0:7a4b26a3aef5 850 refresh_flag = 1;
The_Jackal 0:7a4b26a3aef5 851 }
The_Jackal 0:7a4b26a3aef5 852 void run1()
The_Jackal 0:7a4b26a3aef5 853 {
The_Jackal 0:7a4b26a3aef5 854 pc.printf("Screen %d \n", ZPos);
The_Jackal 0:7a4b26a3aef5 855 if(start == 1) {
The_Jackal 0:7a4b26a3aef5 856 for(y=-1; y<5; y++) {
The_Jackal 0:7a4b26a3aef5 857 for(x=-1; x<5; x++) {
The_Jackal 0:7a4b26a3aef5 858 pixel = lcd.getPixel(XPos+x,YPos+y);
The_Jackal 0:7a4b26a3aef5 859 if(pixel == 0) {
The_Jackal 0:7a4b26a3aef5 860 } else {
The_Jackal 0:7a4b26a3aef5 861 reposition();
The_Jackal 0:7a4b26a3aef5 862 }
The_Jackal 0:7a4b26a3aef5 863 }
The_Jackal 0:7a4b26a3aef5 864 }
The_Jackal 0:7a4b26a3aef5 865
The_Jackal 0:7a4b26a3aef5 866 } else {
The_Jackal 0:7a4b26a3aef5 867 }
The_Jackal 0:7a4b26a3aef5 868 start = 0;
The_Jackal 0:7a4b26a3aef5 869 for(y=0; y<4; y++) {
The_Jackal 0:7a4b26a3aef5 870 for(x=0; x<4; x++) {
The_Jackal 0:7a4b26a3aef5 871 pixel = ship [joystate][x][y];
The_Jackal 0:7a4b26a3aef5 872 if(pixel == 0) {
The_Jackal 0:7a4b26a3aef5 873 lcd.clearPixel(XPos+x,YPos+y);
The_Jackal 0:7a4b26a3aef5 874 } else {
The_Jackal 0:7a4b26a3aef5 875 lcd.setPixel(XPos+x,YPos+y);
The_Jackal 0:7a4b26a3aef5 876 }
The_Jackal 0:7a4b26a3aef5 877 }
The_Jackal 0:7a4b26a3aef5 878
The_Jackal 0:7a4b26a3aef5 879 }
The_Jackal 0:7a4b26a3aef5 880 UI(0);
The_Jackal 0:7a4b26a3aef5 881 lcd.refresh();
The_Jackal 0:7a4b26a3aef5 882 ticker3.detach();
The_Jackal 0:7a4b26a3aef5 883 ticker1.attach(&ain, 0.075);
The_Jackal 0:7a4b26a3aef5 884 ticker2.attach(&refresh_isr, 0.125);
The_Jackal 0:7a4b26a3aef5 885 while(1) {
The_Jackal 0:7a4b26a3aef5 886 if(refresh_flag == 1) {
The_Jackal 0:7a4b26a3aef5 887 refresh_flag--;
The_Jackal 0:7a4b26a3aef5 888 refresh();
The_Jackal 0:7a4b26a3aef5 889 }
The_Jackal 0:7a4b26a3aef5 890 if(ZPos == seed[b][11]) {
The_Jackal 0:7a4b26a3aef5 891 if(butx_flag[3]) {
The_Jackal 0:7a4b26a3aef5 892 butx_flag[3] = 0;
The_Jackal 0:7a4b26a3aef5 893 wait(0.5);
The_Jackal 0:7a4b26a3aef5 894 UI(1);
The_Jackal 0:7a4b26a3aef5 895 }
The_Jackal 0:7a4b26a3aef5 896 }
The_Jackal 0:7a4b26a3aef5 897 if(XPos > 55) {
The_Jackal 0:7a4b26a3aef5 898 ZPos = ZPos++;
The_Jackal 0:7a4b26a3aef5 899 XPos = 6;
The_Jackal 0:7a4b26a3aef5 900 ticker1.detach();
The_Jackal 0:7a4b26a3aef5 901 ticker2.detach();
The_Jackal 0:7a4b26a3aef5 902 ScreenDraw();
The_Jackal 0:7a4b26a3aef5 903 } else if(XPos < 4) {
The_Jackal 0:7a4b26a3aef5 904 ZPos = ZPos--;
The_Jackal 0:7a4b26a3aef5 905 XPos = 54;
The_Jackal 0:7a4b26a3aef5 906 ticker1.detach();
The_Jackal 0:7a4b26a3aef5 907 ticker2.detach();
The_Jackal 0:7a4b26a3aef5 908 ScreenDraw();
The_Jackal 0:7a4b26a3aef5 909 } else if (YPos > 41) {
The_Jackal 0:7a4b26a3aef5 910 ZPos = ZPos + 4;
The_Jackal 0:7a4b26a3aef5 911 YPos = 4;
The_Jackal 0:7a4b26a3aef5 912 ticker1.detach();
The_Jackal 0:7a4b26a3aef5 913 ticker2.detach();
The_Jackal 0:7a4b26a3aef5 914 ScreenDraw();
The_Jackal 0:7a4b26a3aef5 915 } else if(YPos < 4) {
The_Jackal 0:7a4b26a3aef5 916 ZPos = ZPos - 4;
The_Jackal 0:7a4b26a3aef5 917 YPos = 41;
The_Jackal 0:7a4b26a3aef5 918 ticker1.detach();
The_Jackal 0:7a4b26a3aef5 919 ticker2.detach();
The_Jackal 0:7a4b26a3aef5 920 ScreenDraw();
The_Jackal 0:7a4b26a3aef5 921 }
The_Jackal 0:7a4b26a3aef5 922 if(butj_flag == 1) {
The_Jackal 0:7a4b26a3aef5 923 butj_flag = 0;
The_Jackal 0:7a4b26a3aef5 924 wait(0.05);
The_Jackal 0:7a4b26a3aef5 925 switch(joystate) {
The_Jackal 0:7a4b26a3aef5 926 case 0:
The_Jackal 1:6a8aedb2ff69 927 for(x=2; x<12; x++) {
The_Jackal 0:7a4b26a3aef5 928 if(lcd.getPixel(XPos-x,YPos+2)!= 0) {
The_Jackal 0:7a4b26a3aef5 929 cargo++;
The_Jackal 0:7a4b26a3aef5 930 }
The_Jackal 0:7a4b26a3aef5 931 lcd.setPixel(XPos-x,YPos+2);
The_Jackal 0:7a4b26a3aef5 932 mapdata[ZPos][XPos-x][YPos+2] = 0;
The_Jackal 0:7a4b26a3aef5 933 }
The_Jackal 0:7a4b26a3aef5 934 lcd.refresh();
The_Jackal 0:7a4b26a3aef5 935 wait(0.075);
The_Jackal 1:6a8aedb2ff69 936 for(x=2; x<12; x++) {
The_Jackal 0:7a4b26a3aef5 937 lcd.clearPixel(XPos-x,YPos+2);
The_Jackal 0:7a4b26a3aef5 938 }
The_Jackal 0:7a4b26a3aef5 939 lcd.refresh();
The_Jackal 0:7a4b26a3aef5 940 break;
The_Jackal 0:7a4b26a3aef5 941 case 2:
The_Jackal 1:6a8aedb2ff69 942 for(x=5; x<15; x++) {
The_Jackal 0:7a4b26a3aef5 943 if(lcd.getPixel(XPos+x,YPos+1)!= 0) {
The_Jackal 0:7a4b26a3aef5 944 cargo++;
The_Jackal 0:7a4b26a3aef5 945 }
The_Jackal 0:7a4b26a3aef5 946 lcd.setPixel(XPos+x,YPos+1);
The_Jackal 0:7a4b26a3aef5 947 mapdata[ZPos][XPos+x][YPos+1] = 0;
The_Jackal 0:7a4b26a3aef5 948 }
The_Jackal 0:7a4b26a3aef5 949 lcd.refresh();
The_Jackal 0:7a4b26a3aef5 950 wait(0.075);
The_Jackal 1:6a8aedb2ff69 951 for(x=5; x<15; x++) {
The_Jackal 0:7a4b26a3aef5 952 lcd.clearPixel(XPos+x,YPos+1);
The_Jackal 0:7a4b26a3aef5 953 }
The_Jackal 0:7a4b26a3aef5 954 lcd.refresh();
The_Jackal 0:7a4b26a3aef5 955 break;
The_Jackal 0:7a4b26a3aef5 956 case 1:
The_Jackal 1:6a8aedb2ff69 957 for(y=5; y<15; y++) {
The_Jackal 0:7a4b26a3aef5 958 if(lcd.getPixel(XPos+2,YPos+y)!= 0) {
The_Jackal 0:7a4b26a3aef5 959 cargo++;
The_Jackal 0:7a4b26a3aef5 960 }
The_Jackal 0:7a4b26a3aef5 961 lcd.setPixel(XPos+2,YPos+y);
The_Jackal 0:7a4b26a3aef5 962 mapdata[ZPos][XPos+2][YPos+y] = 0;
The_Jackal 0:7a4b26a3aef5 963 }
The_Jackal 0:7a4b26a3aef5 964 lcd.refresh();
The_Jackal 0:7a4b26a3aef5 965 wait(0.075);
The_Jackal 1:6a8aedb2ff69 966 for(y=5; y<15; y++) {
The_Jackal 0:7a4b26a3aef5 967 lcd.clearPixel(XPos+2,YPos+y);
The_Jackal 0:7a4b26a3aef5 968 }
The_Jackal 0:7a4b26a3aef5 969 lcd.refresh();
The_Jackal 0:7a4b26a3aef5 970 break;
The_Jackal 0:7a4b26a3aef5 971 case 3:
The_Jackal 1:6a8aedb2ff69 972 for(y=2; y<12; y++) {
The_Jackal 0:7a4b26a3aef5 973 if(lcd.getPixel(XPos+1,YPos-y)!= 0) {
The_Jackal 0:7a4b26a3aef5 974 cargo++;
The_Jackal 0:7a4b26a3aef5 975 }
The_Jackal 0:7a4b26a3aef5 976 lcd.setPixel(XPos+1,YPos-y);
The_Jackal 0:7a4b26a3aef5 977 mapdata[ZPos][XPos+1][YPos-y] = 0;
The_Jackal 0:7a4b26a3aef5 978 }
The_Jackal 0:7a4b26a3aef5 979 lcd.refresh();
The_Jackal 0:7a4b26a3aef5 980 wait(0.075);
The_Jackal 1:6a8aedb2ff69 981 for(y=2; y<12; y++) {
The_Jackal 0:7a4b26a3aef5 982 lcd.clearPixel(XPos+1,YPos-y);
The_Jackal 0:7a4b26a3aef5 983 }
The_Jackal 0:7a4b26a3aef5 984 lcd.refresh();
The_Jackal 0:7a4b26a3aef5 985 break;
The_Jackal 0:7a4b26a3aef5 986
The_Jackal 0:7a4b26a3aef5 987 }
The_Jackal 0:7a4b26a3aef5 988 for(y=0; y<0.5f*cargo; y++) {
The_Jackal 0:7a4b26a3aef5 989 for(x=0; x<10; x++) {
The_Jackal 0:7a4b26a3aef5 990 lcd.setPixel(x+68,44-y);
The_Jackal 0:7a4b26a3aef5 991 }
The_Jackal 0:7a4b26a3aef5 992 pc.printf("Cargo: %d \n", cargo);
The_Jackal 0:7a4b26a3aef5 993 }
The_Jackal 0:7a4b26a3aef5 994
The_Jackal 0:7a4b26a3aef5 995 }
The_Jackal 0:7a4b26a3aef5 996 }
The_Jackal 0:7a4b26a3aef5 997 }
The_Jackal 0:7a4b26a3aef5 998 void drawobj()
The_Jackal 0:7a4b26a3aef5 999 {
The_Jackal 1:6a8aedb2ff69 1000 pc.printf("Drawing object at:\n \n");
The_Jackal 1:6a8aedb2ff69 1001 pc.printf("x %1d y %1d \n", XPos, YPos);
The_Jackal 1:6a8aedb2ff69 1002 pc.printf("on screen %1d \n \n \n", ZPos);
The_Jackal 0:7a4b26a3aef5 1003 for (y = 0; y < 12; y++) {
The_Jackal 0:7a4b26a3aef5 1004 for (x = 0; x < 12; x++) {
The_Jackal 0:7a4b26a3aef5 1005 mapdata [ZPos][XPos+x][YPos+y] = objdata [s][x][y];
The_Jackal 0:7a4b26a3aef5 1006 }
The_Jackal 0:7a4b26a3aef5 1007 }
The_Jackal 1:6a8aedb2ff69 1008 pc.printf("Draw Complete, v = %d \n", v);
The_Jackal 0:7a4b26a3aef5 1009 }
The_Jackal 0:7a4b26a3aef5 1010 void ScreenDraw()
The_Jackal 0:7a4b26a3aef5 1011 {
The_Jackal 0:7a4b26a3aef5 1012 volatile int butx_flag[4] = {0};
The_Jackal 1:6a8aedb2ff69 1013 pc.printf("Drawing screen\n \n");
The_Jackal 0:7a4b26a3aef5 1014 if(ZPos<0 | ZPos>15) {
The_Jackal 0:7a4b26a3aef5 1015 ZPos = rand()%16;
The_Jackal 0:7a4b26a3aef5 1016 }
The_Jackal 0:7a4b26a3aef5 1017 lcd.drawRect(0,0,83,47,0);
The_Jackal 0:7a4b26a3aef5 1018 for (y = 1; y < 47; y++) {
The_Jackal 0:7a4b26a3aef5 1019
The_Jackal 0:7a4b26a3aef5 1020 for (x = 1; x < 61; x++) {
The_Jackal 0:7a4b26a3aef5 1021
The_Jackal 0:7a4b26a3aef5 1022 pixel = mapdata [ZPos][y-1][x-1];
The_Jackal 0:7a4b26a3aef5 1023 if(pixel == 0) {
The_Jackal 0:7a4b26a3aef5 1024
The_Jackal 0:7a4b26a3aef5 1025 lcd.clearPixel(x,y);
The_Jackal 0:7a4b26a3aef5 1026 } else {
The_Jackal 0:7a4b26a3aef5 1027
The_Jackal 0:7a4b26a3aef5 1028 lcd.setPixel(x,y);
The_Jackal 0:7a4b26a3aef5 1029 }
The_Jackal 0:7a4b26a3aef5 1030 }
The_Jackal 0:7a4b26a3aef5 1031 }
The_Jackal 0:7a4b26a3aef5 1032 for (y = 0; y < 48; y++) {
The_Jackal 0:7a4b26a3aef5 1033 lcd.setPixel(61,y);
The_Jackal 0:7a4b26a3aef5 1034 lcd.setPixel(62,y);
The_Jackal 0:7a4b26a3aef5 1035 }
The_Jackal 1:6a8aedb2ff69 1036 pc.printf("\n");
The_Jackal 1:6a8aedb2ff69 1037 pc.printf("Buffer complete\n");
The_Jackal 0:7a4b26a3aef5 1038 lcd.refresh();
The_Jackal 1:6a8aedb2ff69 1039 pc.printf("Refreshed\n \n");
The_Jackal 0:7a4b26a3aef5 1040 run1();
The_Jackal 0:7a4b26a3aef5 1041
The_Jackal 0:7a4b26a3aef5 1042 }
The_Jackal 0:7a4b26a3aef5 1043 void reposition()
The_Jackal 0:7a4b26a3aef5 1044 {
The_Jackal 0:7a4b26a3aef5 1045 XPos = rand()%37 + 6;
The_Jackal 0:7a4b26a3aef5 1046 YPos = rand()%24 + 6;
The_Jackal 0:7a4b26a3aef5 1047 start = 1;
The_Jackal 0:7a4b26a3aef5 1048 }
The_Jackal 0:7a4b26a3aef5 1049
The_Jackal 0:7a4b26a3aef5 1050 void MapGen()
The_Jackal 0:7a4b26a3aef5 1051 {
The_Jackal 1:6a8aedb2ff69 1052 pc.printf("Generating map\n");
The_Jackal 0:7a4b26a3aef5 1053 //Array is already declared
The_Jackal 0:7a4b26a3aef5 1054 //Generate 15 background stars on each screen in random locations
The_Jackal 0:7a4b26a3aef5 1055 for(ZPos=0; ZPos<16; ZPos++) {
The_Jackal 0:7a4b26a3aef5 1056 for(v=0; v<10; v++) {
The_Jackal 0:7a4b26a3aef5 1057 XPos = rand()%46;
The_Jackal 0:7a4b26a3aef5 1058 YPos = rand()%60;
The_Jackal 0:7a4b26a3aef5 1059 mapdata[ZPos][XPos][YPos] = 1;
The_Jackal 0:7a4b26a3aef5 1060 }
The_Jackal 0:7a4b26a3aef5 1061
The_Jackal 0:7a4b26a3aef5 1062 }
The_Jackal 1:6a8aedb2ff69 1063 //pc.printf("160 Debris Generated\n");
The_Jackal 0:7a4b26a3aef5 1064 s = 2;
The_Jackal 0:7a4b26a3aef5 1065 //Generate 9 gas clouds on the map in random locations
The_Jackal 0:7a4b26a3aef5 1066 for(v=0; v<9; v++) {
The_Jackal 0:7a4b26a3aef5 1067 ZPos = rand()%16;
The_Jackal 0:7a4b26a3aef5 1068 XPos = rand()%37 + 6;
The_Jackal 0:7a4b26a3aef5 1069 YPos = rand()%24 + 6;
The_Jackal 0:7a4b26a3aef5 1070 drawobj();
The_Jackal 0:7a4b26a3aef5 1071
The_Jackal 0:7a4b26a3aef5 1072 }
The_Jackal 1:6a8aedb2ff69 1073 pc.printf("9 Gas Clouds Generated\n");
The_Jackal 0:7a4b26a3aef5 1074 s = 3;
The_Jackal 0:7a4b26a3aef5 1075 //Generate 6 planets on the map in seed locations
The_Jackal 0:7a4b26a3aef5 1076 for(v=0; v<6; v++) {
The_Jackal 0:7a4b26a3aef5 1077 ZPos = seed[b][v];
The_Jackal 0:7a4b26a3aef5 1078 XPos = rand()%37 + 6;
The_Jackal 0:7a4b26a3aef5 1079 YPos = rand()%24 + 6;
The_Jackal 0:7a4b26a3aef5 1080 drawobj();
The_Jackal 0:7a4b26a3aef5 1081
The_Jackal 0:7a4b26a3aef5 1082 }
The_Jackal 1:6a8aedb2ff69 1083 pc.printf("6 Planets Generated\n");
The_Jackal 0:7a4b26a3aef5 1084 s = 1;
The_Jackal 0:7a4b26a3aef5 1085 //Generate 5 asteroid clusters on the map in seed locations
The_Jackal 0:7a4b26a3aef5 1086 for(v=0; v<5; v++) {
The_Jackal 0:7a4b26a3aef5 1087 ZPos = seed[b][v+6];
The_Jackal 0:7a4b26a3aef5 1088 XPos = rand()%37 + 6;
The_Jackal 0:7a4b26a3aef5 1089 YPos = rand()%24 + 6;
The_Jackal 0:7a4b26a3aef5 1090 drawobj();
The_Jackal 0:7a4b26a3aef5 1091
The_Jackal 0:7a4b26a3aef5 1092 }
The_Jackal 1:6a8aedb2ff69 1093 pc.printf("5 Asteroid Clusters Generated\n");
The_Jackal 0:7a4b26a3aef5 1094
The_Jackal 0:7a4b26a3aef5 1095 //Generate one station on the map in a seed location
The_Jackal 0:7a4b26a3aef5 1096 s = 0;
The_Jackal 0:7a4b26a3aef5 1097 ZPos = seed[b][11];
The_Jackal 0:7a4b26a3aef5 1098 XPos = rand()%37 + 6;
The_Jackal 0:7a4b26a3aef5 1099 YPos = rand()%24 + 6;
The_Jackal 1:6a8aedb2ff69 1100 pc.printf("1 Station Generated\n");
The_Jackal 0:7a4b26a3aef5 1101 drawobj();
The_Jackal 0:7a4b26a3aef5 1102 //places the character
The_Jackal 0:7a4b26a3aef5 1103 XPos = 24;
The_Jackal 0:7a4b26a3aef5 1104 YPos = 20;
The_Jackal 0:7a4b26a3aef5 1105 }
The_Jackal 0:7a4b26a3aef5 1106