ELEC2645 (2015/16)
/
Space_Explorer
A top-down space game with a focus on exploration and collection
Diff: main.cpp
- Revision:
- 0:7a4b26a3aef5
- Child:
- 1:6a8aedb2ff69
diff -r 000000000000 -r 7a4b26a3aef5 main.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/main.cpp Fri May 13 13:30:32 2016 +0000 @@ -0,0 +1,1023 @@ +//Include libraries +#include "mbed.h" +#include "N5110.h" +#include "time.h" +#define SENS 0.4 +#define XCALI 0.5 +#define YCALI 0.5 + +//set up serial connection +Serial pc(USBTX, USBRX); + +//Set display pins +N5110 lcd(PTE26,PTA0,PTC4,PTD0,PTD2,PTD1,PTC3); + +//Set tickers +Ticker ticker1; +Ticker ticker2; +Ticker ticker3; + +//Set interrupts +InterruptIn Button1(PTB18); +InterruptIn Button2(PTB19); +InterruptIn Button3(PTC1); +InterruptIn Button4(PTC8); +InterruptIn JoyButton(PTB11); + +//Set Analog Inputs +AnalogIn Pot(PTB10); +AnalogIn XJoy(PTB2); +AnalogIn YJoy(PTB3); + +//Set Digital Outputs +DigitalOut rled(PTC10); +DigitalOut yled(PTC11); +DigitalOut gled(PTA1); + +//Set Pwm Outputs +PwmOut flash(PTC2); +PwmOut Buzz(PTA2); + +//Set up the seeds array +int seed[10][12] = { + {13, 15, 1, 9, 2, 3, 0, 14, 7, 6, 12, 5}, + {10, 0, 15, 3, 7, 2, 11, 12, 9, 8, 14, 5}, + {8, 12, 15, 9, 7, 13, 14, 3, 5, 1, 4, 10}, + {15, 14, 0, 2, 10, 9, 1, 7, 11, 8, 5, 6}, + {11, 7, 13, 0, 15, 4, 12, 10, 8, 2, 14, 9}, + {7, 8, 3, 12, 9, 11, 2, 5, 15, 13, 1, 6}, + {7, 9, 6, 12, 3, 4, 10, 13, 1, 11, 15, 5}, + {0, 5, 1, 2, 7, 11, 14, 6, 4, 15, 8, 10}, + {14, 7, 10, 1, 0, 4, 2, 8, 11, 15, 13, 9}, + {5, 6, 12, 2, 9, 14, 8, 15, 13, 1, 10, 6}, +}; + +//Set up the map data array +int mapdata [16][46][60] = {0}; + +//set up the screenframe array +int frame [1][48][84] = {0}; + +//Set up the sprite arrays +int objdata [5][12][12] = {{ + //Station sprite + {0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0}, + {0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0}, + {0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0}, + {0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 1}, + {0, 0, 0, 1, 1, 1, 0, 1, 1, 1, 1, 1}, + {0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1}, + {1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 0, 0}, + {0, 0, 1, 1, 0, 1, 0, 0, 1, 1, 0, 0}, + {0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0}, + {0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0}, + {0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0}, + {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} + }, + + //Asteroid cluster sprite + { {0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0}, + {0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0}, + {1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0}, + {0, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 0}, + {0, 0, 1, 1, 0, 0, 0, 0, 1, 0, 1, 1}, + {1, 0, 0, 0, 1, 0, 0, 1, 1, 1, 0, 1}, + {0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1}, + {0, 0, 1, 0, 0, 1, 0, 1, 1, 1, 1, 1}, + {0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0}, + {0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0}, + {0, 0, 1, 1, 0, 1, 0, 1, 0, 0, 0, 0}, + {0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0} + }, + + //Planet sprite + { {0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0}, + {0, 0, 1, 1, 0, 1, 0, 0, 1, 1, 0, 0}, + {0, 1, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0}, + {0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 1, 0}, + {1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 1}, + {1, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1}, + {1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 1}, + {1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1}, + {0, 1, 0, 0, 1, 1, 0, 0, 1, 0, 1, 0}, + {0, 1, 0, 0, 1, 0, 1, 1, 0, 1, 1, 0}, + {0, 0, 1, 1, 0, 1, 1, 0, 1, 1, 0, 0}, + {0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0} + }, + + //Gas cloud sprite + { {0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0}, + {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + {0, 0, 1, 0, 0, 0, 1, 0, 0, 1, 0, 0}, + {0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0}, + {0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1}, + {1, 0, 0, 1, 1, 1, 0, 1, 0, 0, 0, 0}, + {0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 0, 1}, + {0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0}, + {0, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0}, + {0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0}, + {0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0}, + {0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0} + }, + + //Cargo icon + { {0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0}, + {0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0}, + {0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 1, 0}, + {0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 1, 0}, + {0, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 0}, + {0, 1, 0, 1, 1, 0, 1, 0, 1, 0, 1, 0}, + {0, 1, 1, 0, 0, 1, 1, 1, 0, 0, 1, 0}, + {0, 1, 1, 0, 0, 0, 1, 0, 0, 1, 0, 0}, + {0, 1, 1, 0, 0, 1, 1, 0, 1, 0, 0, 0}, + {0, 1, 0, 1, 1, 0, 1, 1, 0, 0, 0, 0}, + {1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1}, + {1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1} + }, +}; + +int ship [4][4][4] = { + { {0, 1, 1, 0}, + {0, 1, 1, 0}, + {1, 0, 0, 1}, + {1, 1, 1, 1} + }, + + { {1, 1, 0, 0}, + {1, 0, 1, 1}, + {1, 0, 1, 1}, + {1, 1, 0, 0} + }, + + { {1, 1, 1, 1}, + {1, 0, 0, 1}, + {0, 1, 1, 0}, + {0, 1, 1, 0} + }, + + { {0, 0, 1, 1}, + {1, 1, 0, 1}, + {1, 1, 0, 1}, + {0, 0, 1, 1} + }, +}; +//Set up ints and floats +int ZPos = 0; +int XPos = 0; +int YPos = 0; +int v = 0; +int i = 0; +int x = 0; +int y = 0; +int pixel = 0; +int s = 0; +int b = 0; +int joystate = 3; +int motion = 0; +int clear = 1; +int start = 1; +int cargo = 0; +int scan = 0; +int life = 3; +int g = 0; +double cash = 0; +int cost = 0; + +//initialise isr variables +volatile int butx_flag[4] = {0}; +volatile int butj_flag = 0; +volatile int refresh_flag = 0; + +//Declare isrs + +void but1_isr(); +void but2_isr(); +void but3_isr(); +void but4_isr(); +void butj_isr(); +void refresh_isr(); + + +//Declare Functions +//Generates map at init +void MapGen(); +//Draws objects +void drawobj(); +//Updates the screen with sprites +void ScreenDraw(); +//Runs the game environment +void run1(); +//Runs the ship menu +void run2(); +//determines analog positions +void ain(); +//refreshes the screen +void refresh(); +//repositions the player if blocked +void reposition(); +//Damage taken +void Damage(); +//checks for collisions before moving +void collision_check(); +//Draws the user interface + menu functions +int UI(int); +//reloads if a crash is detected +void crash(); +//repair minigame +void repair(); +//return to main game +void Return(); +//resets the button flags +int reset(int); + + + + + + + +int main() +{ + + //pc.printf("Main\n \n"); + lcd.init(); //initialise display + srand(time(NULL)); //Set up rand function + JoyButton.rise(&butj_isr); + Button1.rise(&but1_isr); + Button2.rise(&but2_isr); + Button3.rise(&but3_isr); + Button4.rise(&but4_isr); + JoyButton.mode(PullDown); + Button1.mode(PullDown); + Button2.mode(PullDown); + Button3.mode(PullDown); + Button4.mode(PullDown); + lcd.printString("Jack",29,2); + lcd.printString("Townsend",17,3); + lcd.printString("2016 Leeds",12,4); + wait(3); + lcd.clear(); + //pc.printf("Display initialised\n \n"); + //pc.printf("Rand funct set\n \n"); + UI(2); +} +int UI(int t) +{ + switch(t) { + case 0: + s = 4; + for (x = 0; x < 12; x++) { + for (y = 0; y < 12; y++) { + pixel = objdata [s][y][x]; + if(pixel == 0) { + lcd.clearPixel(x+67,y+3); + } else { + lcd.setPixel(x+67,y+3); + } + } + } + lcd.drawRect(67,16,11,28,0); + break; + case 1: + ticker2.detach(); + ticker1.detach(); + lcd.inverseMode(); + lcd.clear(); + joystate = 3; + lcd.drawRect(0,0,83,47,0); + lcd.drawRect(2,2,79,43,0); + wait(0.5); + lcd.printString("STATION:",5,1); + wait(1); + lcd.printString("Sell Cargo",5,3); + wait(0.5); + lcd.printString("Repair",5,4); + wait(0.5); + x = 0; + y = 0; + ticker1.attach(&ain, 0.125); + while(x == 0) { + lcd.drawRect(66,23,10,17,2); + wait(0.2); + switch(joystate) { + case 3: + lcd.printChar('<',66,3); + y = 3; + break; + case 1: + lcd.printChar('<',66,4); + y = 4; + break; + case 2: + x = 1; + break; + case 0: + x = 1; + break; + } + wait(0.2); + } + ticker1.detach(); + switch(y) { + case 3: + cash = cash + cargo; + cargo = 0; + Return(); + break; + case 4: + cost = 3 - life; + if(cash < 50*cost) { + lcd.clear(); + lcd.printString("Can't afford!",5,4); + wait(2); + Return(); + } else { + cash = cash - 50*cost; + life = 3; + lcd.clear(); + lcd.printString("Repaired!",5,4); + wait(2); + Return(); + } + } + break; + case 2: + lcd.inverseMode(); + lcd.clear(); + joystate = 3; + lcd.drawRect(0,0,83,47,0); + lcd.drawRect(2,2,79,43,0); + wait(0.2); + lcd.printString("SpacE",27,1); + wait(0.4); + lcd.printString("-EXPLORER-",12,2); + wait(2); + lcd.printString("Start",5,3); + wait(0.5); + lcd.printString("Help",5,4); + x = 0; + y = 0; + ticker1.attach(&ain, 0.125); + while(x == 0) { + lcd.drawRect(38,23,20,17,2); + wait(0.2); + switch(joystate) { + case 3: + lcd.printChar('<',40,3); + y = 3; + break; + case 1: + lcd.printChar('<',40,4); + y = 4; + break; + case 2: + x = 1; + break; + case 0: + x = 1; + break; + } + wait(0.2); + } + ticker1.detach(); + wait(0.2); + b = rand()%10; + UI(y); + break; + case 3: + lcd.clear(); + lcd.normalMode(); + lcd.printString("Loading...",4,10); + i=0; + ticker3.attach(&crash, 2.5); + i=1; + MapGen(); + //pc.printf("\nMap generated\n \n"); + ScreenDraw(); + //pc.printf("Loading complete!\n"); + break; + case 4: + lcd.clear(); + lcd.printString("The aim is to",1,2); + wait(0.5); + lcd.printString("mine asteroids",1,3); + wait(0.5); + lcd.printString("to earn points",1,4); + wait(3); + lcd.clear(); + lcd.printString("Your ship is",1,2); + wait(0.5); + lcd.printString("controlled w/",1,3); + wait(0.5); + lcd.printString("the joystick",1,4); + wait(3); + lcd.clear(); + lcd.printString("Pressing the",1,2); + wait(0.5); + lcd.printString("stick fires",1,3); + wait(0.5); + lcd.printString("your laser",1,4); + wait(3); + lcd.clear(); + lcd.printString("You will need",1,2); + wait(0.5); + lcd.printString("to search to",1,3); + wait(0.5); + lcd.printString("find asteroids",1,4); + wait(3); + lcd.clear(); + lcd.printString("Luckily, you",1,2); + wait(0.5); + lcd.printString("can fly any",1,3); + wait(0.5); + lcd.printString("distance...",1,4); + wait(3); + lcd.clear(); + lcd.printString("in any",1,2); + wait(0.5); + lcd.printString("direction!",1,3); + wait(2); + lcd.printString("However...",1,4); + wait(2); + lcd.clear(); + lcd.printString("You MUST",1,2); + wait(0.5); + lcd.printString("not fly into",1,3); + wait(0.5); + lcd.printString("any objects!",1,4); + wait(3); + lcd.clear(); + lcd.printString("If you are",1,2); + wait(0.5); + lcd.printString("on the same",1,3); + wait(0.5); + lcd.printString("screen as...",1,4); + wait(3); + lcd.clear(); + lcd.printString("a station,",1,2); + wait(0.5); + lcd.printString("you can dock",1,3); + wait(0.5); + lcd.printString("w/ button 4",1,4); + wait(3); + lcd.clear(); + lcd.printString("You can sell",1,2); + wait(0.5); + lcd.printString("ore and get",1,3); + wait(0.5); + lcd.printString("repairs",1,4); + wait(3); + lcd.clear(); + lcd.printString("On the right",1,2); + wait(0.5); + lcd.printString("will be your",1,3); + wait(0.5); + lcd.printString("cargo bar",1,4); + wait(3); + lcd.clear(); + lcd.printString("It shows you",1,2); + wait(0.5); + lcd.printString("how full the",1,3); + wait(0.5); + lcd.printString("ship is",1,4); + wait(3); + lcd.clear(); + lcd.printString("Now get out",1,2); + wait(0.5); + lcd.printString("there and",1,3); + wait(0.5); + lcd.printString("EXPLORE!",1,4); + wait(5); + UI(2); + break; + case 5: + lcd.clear(); + lcd.refresh(); + lcd.printString("BOOM!",29,2); + wait(1); + lcd.printString("Game over",20,4); + wait(4); + UI(2); + + + } +} +void but1_isr() +{ + butx_flag[3] = 1; + pc.printf("4\n"); +} +void but2_isr() +{ + butx_flag[0] = 1; + pc.printf("1\n"); +} +void but3_isr() +{ + butx_flag[1] = 1; + pc.printf("2\n"); +} +void but4_isr() +{ + butx_flag[2] = 1; + pc.printf("3\n"); +} + +void Return() +{ + XPos = 24; + YPos = 20; + lcd.normalMode(); + lcd.clear(); + start = 1; + ScreenDraw(); +} + +void crash() +{ + lcd.clear(); + srand(b*20); + UI(3); +} + + +void butj_isr() +{ + if(cargo < 53) { + butj_flag = 1; + } else { + butj_flag = 0; + } +} + +int reset(int s) +{ + for(i=0; i<4; i++) { + butx_flag[i] = s; + } +} + +void repair() +{ + lcd.drawRect(0,0,60,48,2); //draws a blank rectangle to clear a specific area of screen + lcd.printString("DAMAGE",10,2); + lcd.printString("CRITICAL!",5,4); + wait(2); + reset(1); + lcd.clear(); + lcd.printString("SYSTEMS:",2,0); + i=rand()%3+1; //generates a random number of faults (up to three) + for(y=0; y<i; y++) { //for these faults, + x=rand()%4+1; //generate a random fault number (out of 4 possible) + butx_flag[x-1] = 0; //set the appropriate flag to zero, depending on fault chosen + switch(x) { //displays the fault + case 1: + lcd.printString("!Reactor temp!",2,y+1); + break; + case 2: + lcd.printString("!Coolant leak!",2,y+1); + break; + case 3: + lcd.printString("!CO2 high!",2,y+1); + break; + case 4: + lcd.printString("!Hatch seal!",2,y+1); + break; + } + } + for(i=0; i<4; i++) { //loops until all flags are set to 1 by the user + if(butx_flag[i] != 1) { + i--; + } + wait(0.1); + pc.printf("Flags: %d %d %d %d\n",butx_flag[0], butx_flag[1], butx_flag[2], butx_flag[3]); //flag status for debugging + } + + +} + +void collision_check() +{ + switch(joystate) { + case 0: + for(y=-1; y<5; y++) { + if(lcd.getPixel(XPos-1,YPos+y) != 0) { + life--; + Damage(); + } + } + break; + case 1: + for(x=-1; x<5; x++) { + if(lcd.getPixel(XPos+x,YPos+4) != 0) { + life--; + Damage(); + } + } + break; + case 2: + for(y=-1; y<5; y++) { + if(lcd.getPixel(XPos+4,YPos+y) != 0) { + life--; + Damage(); + } + } + break; + case 3: + for(x=-1; x<5; x++) { + if(lcd.getPixel(XPos+x,YPos-1) != 0) { + life--; + Damage(); + } + } + break; + } +} + + +void Damage() +{ + //Prevent tickers from interfering with the function + ticker1.detach(); + ticker2.detach(); + wait(0.5); //Allows user to react + if(life == 2) { //depending on the amount of life left, takes one life away per collision + gled = 1; + } + if(life == 1) { + yled = 1; + } + if(life == 0) { //when life becomes 0, the emergency repair minigame starts + rled = 1; + g++; + repair(); + lcd.randomiseBuffer(); //generates static screens to simulate a software crash + lcd.refresh(); + wait(0.2); + lcd.randomiseBuffer(); + lcd.refresh(); + wait(0.1); + lcd.clear(); + lcd.printString("Rebooting...",2,0); + wait(0.2); + lcd.randomiseBuffer(); + lcd.refresh(); + wait(0.1); + lcd.clear(); + lcd.printString("Rebooting...",2,0); + XPos = 24; //resets the player character position (avoids further collisions + YPos = 20; + wait(1.5); + lcd.clear(); + reset(0); + switch(g) { //if g<2, the player is rewarded with one life. If g == 2, the player's ship explodes. + case 0: + case 1: + life++; + rled = 0; + ScreenDraw(); + break; + case 2: + UI(5); + break; + } + + + + + } + + ticker1.attach(&ain, 0.075); //tickers for the game are re-attached + ticker2.attach(&refresh_isr, 0.125); + +} +void refresh() +{ + lcd.refresh(); + //pc.printf("tick\n"); + + + if(motion == 1) { + switch(joystate) { + case 0: + XPos--; + break; + case 1: + YPos++; + break; + case 2: + XPos++; + break; + case 3: + YPos--; + break; + } + } + if(butj_flag == 0) { + collision_check(); + } + + switch(motion) { + case 0: + break; + case 1: + for(y=-1; y<5; y++) { + for(x=-1; x<5; x++) { + lcd.clearPixel(XPos+x,YPos+y); + } + } + for(y=0; y<4; y++) { + for(x=0; x<4; x++) { + pixel = ship [joystate][x][y]; + if(pixel == 0) { + lcd.clearPixel(XPos+x,YPos+y); + } else { + lcd.setPixel(XPos+x,YPos+y); + } + } + + } + + break; + } + +} + +void ain() +{ + if(XJoy.read() > (1+SENS) * XCALI) { + joystate = 0; + motion = 1; + } else if(XJoy.read() < (1-SENS) * XCALI) { + joystate = 2; + motion = 1; + } else if(YJoy.read() > (1+SENS) * YCALI) { + joystate = 3; + motion = 1; + } else if(YJoy.read() < (1-SENS) * YCALI) { + joystate = 1; + motion = 1; + } else { + motion = 0; + } + +} +void refresh_isr() +{ + refresh_flag = 1; +} +void run1() +{ + pc.printf("Screen %d \n", ZPos); + if(start == 1) { + for(y=-1; y<5; y++) { + for(x=-1; x<5; x++) { + pixel = lcd.getPixel(XPos+x,YPos+y); + if(pixel == 0) { + } else { + reposition(); + } + } + } + + } else { + } + start = 0; + for(y=0; y<4; y++) { + for(x=0; x<4; x++) { + pixel = ship [joystate][x][y]; + if(pixel == 0) { + lcd.clearPixel(XPos+x,YPos+y); + } else { + lcd.setPixel(XPos+x,YPos+y); + } + } + + } + UI(0); + lcd.refresh(); + ticker3.detach(); + ticker1.attach(&ain, 0.075); + ticker2.attach(&refresh_isr, 0.125); + while(1) { + if(refresh_flag == 1) { + refresh_flag--; + refresh(); + } + if(ZPos == seed[b][11]) { + if(butx_flag[3]) { + butx_flag[3] = 0; + wait(0.5); + UI(1); + } + } + if(XPos > 55) { + ZPos = ZPos++; + XPos = 6; + ticker1.detach(); + ticker2.detach(); + ScreenDraw(); + } else if(XPos < 4) { + ZPos = ZPos--; + XPos = 54; + ticker1.detach(); + ticker2.detach(); + ScreenDraw(); + } else if (YPos > 41) { + ZPos = ZPos + 4; + YPos = 4; + ticker1.detach(); + ticker2.detach(); + ScreenDraw(); + } else if(YPos < 4) { + ZPos = ZPos - 4; + YPos = 41; + ticker1.detach(); + ticker2.detach(); + ScreenDraw(); + } + if(butj_flag == 1) { + butj_flag = 0; + wait(0.05); + switch(joystate) { + case 0: + for(x=2; x<9; x++) { + if(lcd.getPixel(XPos-x,YPos+2)!= 0) { + cargo++; + } + lcd.setPixel(XPos-x,YPos+2); + mapdata[ZPos][XPos-x][YPos+2] = 0; + } + lcd.refresh(); + wait(0.075); + for(x=2; x<9; x++) { + lcd.clearPixel(XPos-x,YPos+2); + } + lcd.refresh(); + break; + case 2: + for(x=5; x<12; x++) { + if(lcd.getPixel(XPos+x,YPos+1)!= 0) { + cargo++; + } + lcd.setPixel(XPos+x,YPos+1); + mapdata[ZPos][XPos+x][YPos+1] = 0; + } + lcd.refresh(); + wait(0.075); + for(x=5; x<12; x++) { + lcd.clearPixel(XPos+x,YPos+1); + } + lcd.refresh(); + break; + case 1: + for(y=5; y<12; y++) { + if(lcd.getPixel(XPos+2,YPos+y)!= 0) { + cargo++; + } + lcd.setPixel(XPos+2,YPos+y); + mapdata[ZPos][XPos+2][YPos+y] = 0; + } + lcd.refresh(); + wait(0.075); + for(y=5; y<12; y++) { + lcd.clearPixel(XPos+2,YPos+y); + } + lcd.refresh(); + break; + case 3: + for(y=2; y<9; y++) { + if(lcd.getPixel(XPos+1,YPos-y)!= 0) { + cargo++; + } + lcd.setPixel(XPos+1,YPos-y); + mapdata[ZPos][XPos+1][YPos-y] = 0; + } + lcd.refresh(); + wait(0.075); + for(y=2; y<9; y++) { + lcd.clearPixel(XPos+1,YPos-y); + } + lcd.refresh(); + break; + + } + for(y=0; y<0.5f*cargo; y++) { + for(x=0; x<10; x++) { + lcd.setPixel(x+68,44-y); + } + pc.printf("Cargo: %d \n", cargo); + } + + } + } +} +void drawobj() +{ + //pc.printf("Drawing object at:\n \n"); + //pc.printf("x %1d y %1d \n", XPos, YPos); + //pc.printf("on screen %1d \n \n \n", ZPos); + for (y = 0; y < 12; y++) { + for (x = 0; x < 12; x++) { + mapdata [ZPos][XPos+x][YPos+y] = objdata [s][x][y]; + } + } + //pc.printf("Draw Complete, v = %d \n", v); +} +void ScreenDraw() +{ + volatile int butx_flag[4] = {0}; + //pc.printf("Drawing screen\n \n"); + if(ZPos<0 | ZPos>15) { + ZPos = rand()%16; + } + lcd.drawRect(0,0,83,47,0); + for (y = 1; y < 47; y++) { + + for (x = 1; x < 61; x++) { + + pixel = mapdata [ZPos][y-1][x-1]; + if(pixel == 0) { + + lcd.clearPixel(x,y); + } else { + + lcd.setPixel(x,y); + } + } + } + for (y = 0; y < 48; y++) { + lcd.setPixel(61,y); + lcd.setPixel(62,y); + } + //pc.printf("\n"); + //pc.printf("Buffer complete\n"); + lcd.refresh(); + //pc.printf("Refreshed\n \n"); + run1(); + +} +void reposition() +{ + XPos = rand()%37 + 6; + YPos = rand()%24 + 6; + start = 1; +} + +void MapGen() +{ + //pc.printf("Generating map\n"); + //Array is already declared + //Generate 15 background stars on each screen in random locations + for(ZPos=0; ZPos<16; ZPos++) { + for(v=0; v<10; v++) { + XPos = rand()%46; + YPos = rand()%60; + mapdata[ZPos][XPos][YPos] = 1; + } + + } + ////////pc.printf("160 Debris Generated\n"); + s = 2; + //Generate 9 gas clouds on the map in random locations + for(v=0; v<9; v++) { + ZPos = rand()%16; + XPos = rand()%37 + 6; + YPos = rand()%24 + 6; + drawobj(); + + } + ////pc.printf("9 Gas Clouds Generated\n"); + s = 3; + //Generate 6 planets on the map in seed locations + for(v=0; v<6; v++) { + ZPos = seed[b][v]; + XPos = rand()%37 + 6; + YPos = rand()%24 + 6; + drawobj(); + + } + ////pc.printf("6 Planets Generated\n"); + s = 1; + //Generate 5 asteroid clusters on the map in seed locations + for(v=0; v<5; v++) { + ZPos = seed[b][v+6]; + XPos = rand()%37 + 6; + YPos = rand()%24 + 6; + drawobj(); + + } + //pc.printf("5 Asteroid Clusters Generated\n"); + + //Generate one station on the map in a seed location + s = 0; + ZPos = seed[b][11]; + XPos = rand()%37 + 6; + YPos = rand()%24 + 6; + //pc.printf("1 Station Generated\n"); + drawobj(); + //places the character + XPos = 24; + YPos = 20; +} +