#include "road_chunk.h" #include "road_segment.h" #include "intersection.h" #include "vehicle.h" #include "road_chunk_list.h" void initSimulation(RoadChunkList& cityMap); // * Main program contents: // * - Major program variables that persist throughout execution // * - Event loop that processes GP142 events, // * and updates variables and redraws the window as needed. until the user quits // int main() { // Event handling and menu items: bool quit = false; // = "user has selected quit" char keyPressed; // last keyboard character from key event int mouseX, mouseY; // x and y coordinates of latest mouse event GP142Display display; // our GP142 window display.clear (White); display.setAnimation (Run); RoadChunkList cityMap; initSimulation(cityMap); // // * Main event loop: // * ---- ----- ----- // * Wait for the next user action, decode it, and call an // * appropriate function to handle it. Repeat until the // * user selects quit. // while (!quit) { // perform appropriate action depending on kind of event switch (display.getNextEvent(mouseX, mouseY, keyPressed)) { case Quit: // Quit selected quit = true; break; case Mouse: // Mouse click. Not used in simulation break; case Periodic: // Handle timer tick: update all simulation objects. cityMap.tick(); break; default: // all other events we do not need to process break; } // Redraw everything... just the menu for now cityMap.draw(display); } return 0; } void initSimulation(RoadChunkList& cityMap) { Intersection *isec1, *isec2, *isec3, *isec4; RoadSegment *rs1, *rs2, *rs3, *rs4, *rs5, *rs6; isec1 = new Intersection(Position(0,0)); isec2 = new Intersection(Position(0,100)); isec3 = new Intersection(Position(0,200)); isec4 = new Intersection(Position(-100,100)); rs1 = new RoadSegment(); rs2 = new RoadSegment(); rs3 = new RoadSegment(); rs4 = new RoadSegment(); rs5 = new RoadSegment(); rs6 = new RoadSegment(); isec1->connectRoad(rs1, North, Exit); isec1->connectRoad(rs3, North, Entry); isec2->connectRoad(rs1, South, Entry); isec2->connectRoad(rs3, South, Exit); isec2->connectRoad(rs2, North, Exit); isec2->connectRoad(rs4, North, Entry); isec3->connectRoad(rs2, South, Entry); isec3->connectRoad(rs4, South, Exit); isec4->connectRoad(rs5, East, Exit); isec4->connectRoad(rs6, East, Entry); isec2->connectRoad(rs5, West, Entry); isec2->connectRoad(rs6, West, Exit); cityMap.addRoadChunk(rs1); cityMap.addRoadChunk(rs2); cityMap.addRoadChunk(rs3); cityMap.addRoadChunk(rs4); cityMap.addRoadChunk(rs5); cityMap.addRoadChunk(rs6); cityMap.addRoadChunk(isec1); cityMap.addRoadChunk(isec2); cityMap.addRoadChunk(isec3); cityMap.addRoadChunk(isec4); rs1->enqueue(new Vehicle); rs3->enqueue(new Vehicle); rs5->enqueue(new Vehicle); rs6->enqueue(new Vehicle); }