// Created by Michael Gorman on 11/9/12. // Copyright (c) 2012 Michael Gorman. All rights reserved. // #include #include #include #include #include #include using namespace std; int input; char askYesNo(string question); class SpaceShip //class definition -- defines a new type { public: SpaceShip(int power = 0, string sname = "", string cname = ""); string shipName; string m_computerName; int m_power; int m_apower; int m_speed; int m_engines; int m_shields; int m_weapons; int m_x; int m_y; int m_z; //3d for the future. int m_cx; int m_cy; void LaunchPrep(); // member function prototype void Flight(); void Charts(); void Movement(string moveCommand); void doMovement(); }; SpaceShip::SpaceShip(int power, string sname, string cname): m_apower(power), m_power(power), m_computerName(cname), m_speed(0), m_engines(0), m_shields(0), m_weapons(0) {} void SpaceShip::LaunchPrep() // member function definition { string shipControl = ""; while (shipControl != "q") { cout << "\nHello! I'm the Ship's Computer. You may call me " << m_computerName << "\n\n"; while (true) { char startShip = askYesNo("Shall I start all the automated ship systems?"); if (startShip == 'y') break; } Sleep(500); cout << "\n."; Sleep(500); cout << "\n.."; Sleep(500); cout << "\n..."; Sleep(500); cout << "\n...."; Sleep(500); cout << "\n....."; Sleep(500); cout << "\n......" << endl; Sleep(500); cout << m_computerName << ": Okay, we're ready for launch preperation." << endl; Sleep(500); while(true) { cout << m_computerName << ": \n\tShip's Status:\n\n"; cout << "\t\tTotal power: " << m_power << " Units | Available Power: " << m_apower << " Units" << endl; cout << "\t\tPower Unit Assignment: Engines: " << m_engines << " Shields: " << m_shields << " Weapons: " << m_weapons << endl; cout << m_computerName << ": How would you like to assign power?\n\t(E for engine, S for Shields and W for weapons): "; cin >> shipControl; if (shipControl == "e" || shipControl == "E") { m_engines += 1; m_apower -= 1; cout << m_computerName << ": Engines powered to: " << m_engines << endl; } if (shipControl == "s" || shipControl == "S") { m_shields += 1; m_apower -= 1; cout << m_computerName << ": Shields powered to: " << m_shields << endl;} if (shipControl == "w" || shipControl == "W") { m_weapons += 1; m_apower -= 1; cout << m_computerName << ": Weapons powered to: " << m_weapons << endl; } if (m_apower == 0) break; else if (shipControl != "w" && shipControl != "e" && shipControl != "s") cout << m_computerName << ": Sorry, that's not a valid system" << endl; } cout << m_computerName << ": The power levels have been assigned. Ship is ready for launch: "; cin >> shipControl; if (shipControl != "launch") cout << "Huh?"; else cout << "\nVROOOOOOM!" << endl; m_x = 12; m_y = 25; m_cx = m_x; m_cy = m_y; shipControl = "q"; } } void SpaceShip::Flight() { string flightCommand; time_t starttime, curtime; int done = 0; cout << m_computerName << ": Before you get too crazy, let me explain how flight works, it consits of these commands"; cout << "\n\tThrottle\tCourse\t\tJump"; cout << "\n\tCharts\t\tComms\t\t"; cout << "\n\tLock\t\tFire\t\tAutoFire"; cout << "\n\tLand\t\tPower\t\tEject"; char flightHelp = askYesNo("\n\nDo you need an explaination of each function? "); if (flightHelp == 'y') { cout << endl << m_computerName << ": Throttle allows input as a percentage, this makes piloting more \n\tsimple, I will handle the rest for the time being.\n\tWhen you're more comfortable we can go over using individual thrusters."; cout << endl << m_computerName << ": Course is for plotting your destination. You'll do it with \n\tx, y and z coordinates. I handle the computation and\n\tspecifics for you."; cout << endl << m_computerName << ": Jump allows you activate your Ether Drive for faster travel.\n\tYou'll want to manually chart jumps around \n\tproblem areas."; cout << endl << m_computerName << ": Charts displays your Nav Computer."; cout << endl << m_computerName << ": Comms brings up the communication array"; cout << endl << m_computerName << ": Lock, Fire and Autofire allow you to target and attack."; cout << endl << m_computerName << ": Land allows me to compute trajectory and beging the landing sequence."; cout << endl << m_computerName << ": Power lets you tweak your previously set power distribution."; cout << endl << m_computerName << ": Eject, well just be sure you're ready for the consequences of\n\tbeing thrown into space..."; } cout << endl << m_computerName << ": That should be everything you need to get started."; while(true) { cout << "\n<(Speed: " << m_speed << " Coordinates: " << m_x << "x " << m_y << "y)> "; time(&starttime); do { time(&curtime); if(_kbhit()) { cin >> flightCommand; if (flightCommand == "charts") SpaceShip::Charts(); if (flightCommand == "throttle") SpaceShip::Movement("throttle"); if (flightCommand == "course") SpaceShip::Movement("course"); } } while((curtime - starttime) < 5); if (m_speed > 0) SpaceShip::doMovement(); } } void SpaceShip::Charts() { char space[150][150]; for(int i = (m_x -10);i < (m_x + 10);i++) //row by 80. { for(int j = (m_y - 20);j < (m_y + 20);j++) //columns by 100. { space[i][j]='.'; space[m_x][m_y]='^'; space[10][20]='*'; space[12][24]='O'; cout << space[i][j]; } cout << endl; } return 0; } void SpaceShip::doMovement() { if (m_cx > m_x) m_x += 1; if (m_cx < m_x) m_x -= 1; if (m_cy > m_y) m_y += 1; if (m_cy < m_y) m_y -= 1; } void SpaceShip::Movement(string moveCommand) { int throttle; int cx, cy; if (moveCommand == "throttle") { cout << "\nWhat percentage of throttle would you like to apply? "; cin >> throttle; m_speed = throttle; return; } if (moveCommand == "course") { cout << "\nWhat X coordinate would you like to set? "; cin >> cx; m_cx = cx; cout << "\nWhat Y coordinate would you like to set? "; cin >> cy; m_cy = cy; return; } } char askYesNo(string question) { char response; do { cout << question << " (y/n); "; cin >> response; } while (response != 'y' && response != 'n'); return response; } int main() { SpaceShip XGP(9, "The XGP", "Gillium"); SpaceShip XWING(4, "X-Wing", "R2D2"); SpaceShip ENTERPRISE(10, "The Enterprise", "Data"); SpaceShip DEATHSTAR(25, "The Death Star", "EVIL"); cout << "Welcome to the Gorman Space Simulator. The following ships are available for test flights:" << endl; cout << "\n\t1. The XGP"; cout << "\n\t2. An X-Wing Fighter"; cout << "\n\t3. The USS Enterprise"; cout << "\n\t4. The Death Star"; cout << "\nPlease input the number of the desired ship class: "; cin >> input; switch (input) { case 1: XGP.LaunchPrep(); XGP.Flight(); break; case 2: XWING.LaunchPrep(); XWING.Flight(); break; case 3: ENTERPRISE.LaunchPrep(); ENTERPRISE.Flight(); break; case 4: DEATHSTAR.LaunchPrep(); DEATHSTAR.Flight(); break; default: cout << "Something went wrong..."; break; } cout << "\nTakeoff complete!"; return 0; }