#include "jwindow.h" #include "jthread.h" #include "joptions.h" #include "iostream" #include "vector" class Robot : public jgui::Component { private: double angle; int steps; public: Robot() { angle = M_PI; } virtual ~Robot() { } void MoveForward(int n) { steps = n; } virtual void Paint(jgui::Graphics *g) { angle += 0.04; double cangle = cos(angle), sangle = sin(angle); int x = 400, y = 400, w = 64, h = 64; int size = 32; g->SetColor(0x00, 0x00, 0x00, 0xff); g->DrawRectangle(x, y, w, h); jgui::jpoint_t ph[] = { {(int)(size*cos(angle+M_PI/2)), (int)(size*sin(angle+M_PI/2))}, {(int)(2*size*cos(angle)), (int)(2*size*sin(angle))}, {(int)(size*cos(angle+3*M_PI/2)), (int)(size*sin(angle+3*M_PI/2))}, }; g->DrawPolygon(x-(int)(2*size*cos(angle))/2, y-(int)(2*size*sin(angle))/2, ph, 3, true); } }; class Arena : public jgui::Window, public jthread::Thread { private: public: Arena(): jgui::Window(0, 0, 1920, 1080) { Show(); } virtual ~Arena() { } virtual void Paint(jgui::Graphics *g) { jgui::Window::Paint(g); for (std::vector::iterator i=_components.begin(); i!=_components.end(); i++) { (*i)->Paint(g); } g->Flip(); } virtual void Run() { while (true) { Repaint(); } } }; class SimpleRobot : public Robot { private: public: SimpleRobot() { } virtual ~SimpleRobot() { } }; int main(int argc, char **argv) { jcommon::Options o(argc, argv); o.SetOptions("h"); if (o.ExistsOption("h") == true) { std::cout << ".. Robot Arena .." << std::endl; std::cout << "version 0.01 alpha" << std::endl; return 0; } Arena arena; arena.Add(new SimpleRobot()); arena.Run(); return 0; }