рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВрдиреЗ рдХрд╣рд╛, рдкрд╣рд▓реЗ рд╡рд░реНрдгрд┐рдд
рд░реВрдкрд░реЗрдЦрд╛ рдореЗрдВ рдкреВрд░реНрдгрд░реВрдкреЗрдг рдЦреЗрд▓ рдЗрдВрдЬрди рдорд╛рдиреЗ рдЬрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдХрдореА рд╣реИред рдЗрд╕рдореЗрдВ рднреМрддрд┐рдХреА рд╕рд┐рдореБрд▓реЗрд╢рди рдирд╣реАрдВ рд╣реИ; рдпрд╣ рдЧреНрд░рд╛рдлрд┐рдХреНрд╕ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдирдореНрдп рдФрд░ рддреЗрдЬ Iw2D рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рд╡рд╣ рд╕рднреА рдЬрд╛рдирддрд╛ рд╣реИ рдХрд┐ рдзреНрд╡рдирд┐ рдкреНрд░рднрд╛рд╡ рдХреЗ рд╕рд╛рде рд╕реНрдкреНрд░рд╛рдЗрдЯреНрд╕ рдХрд╛ 2 рдбреА рдПрдиреАрдореЗрд╢рди рдХреИрд╕реЗ рдХрд░рдирд╛ рд╣реИред рдХрд┐рд╕реА рднреА рддрд░рд╣ рдЕрдкрдиреЗ рдЖрдк рд╕реЗ рдКрдкрд░ рдмрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП, рдЬрд╛рд╣рд┐рд░ рд╣реИ, рдирдП рдЕрд╡рд╕рд░реЛрдВ рдХреЛ рдорд╛рд╕реНрдЯрд░ рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ, рд▓реЗрдХрд┐рди рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд┐рдирд╛ рдХрд┐рд╕реА рдЙрджреНрджреЗрд╢реНрдп рдХреЗ рдЙрдмрд╛рдК рдФрд░ рдирд┐рд░реНрдмрд╛рдз рд╣реИред
рд╣рдо рдПрдХ рд▓рдХреНрд╖реНрдп рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░реЗрдВрдЧреЗ, рдФрд░ рдкреНрд░рд╕рд┐рджреНрдз рдЧреЗрдо
рдЖрд░реНрдХрд╛рдиреЙрдЗрдб рдХрд╛ рдПрдХ рдЫреЛрдЯрд╛ рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рд╡рд┐рдХрд╕рд┐рдд рдХрд░реЗрдВрдЧреЗред рдХреЗ рд╕рд╛рде рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдЗрдП рд╕рдореНрдорд╛рдирд┐рдд
рдХреНрд░реИрдорд╛рд╕реНрдЯрд░ рдХреА
рд╕рд▓рд╛рд╣ рдкрд░ рдзреНрдпрд╛рди
рджреЗрдВ рдФрд░ рдпрд╣ рдЬрд╛рдирдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реЗрдВ рдХрд┐ IwGl рдХреНрдпрд╛ рд╣реИ рдФрд░ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреИрд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рд╕рдЪ рд╣реИ, рд╣рдо рдЖрдЬ рдШрди рдкрд░ рдмрдирд╛рд╡рдЯ рдХреЛ рдирд╣реАрдВ рдЦреАрдВрдЪреЗрдВрдЧреЗред рдЖрдкрдХреЛ рдПрдХ рд╕рд░рд▓ рд╕реЗ рд╢реБрд░реБрдЖрдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдФрд░ рдЖрдЬ рд╣рдо рд╕реАрдЦреЗрдВрдЧреЗ рдХрд┐ рддреНрд░рд┐рдХреЛрдг рдХреИрд╕реЗ рдмрдирд╛рдПрдВред
рдЗрд╕рд▓рд┐рдП, рд╣рдореЗрдВ рдУрдкрди рдЬреАрдПрд▓ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкрддрд╛ рд╣реИ рдХрд┐ рд╡рд╣ рддреНрд░рд┐рдХреЛрдг рдмрдирд╛ рд╕рдХрддрд╛ рд╣реИред рд╣рдо рдпрд╣ рднреА рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рд╡рд╣ рдЬрд╛рдирддрд╛ рд╣реИ рдХрд┐ рдХреИрд╕реЗ рдПрдХ рд╕реБрдВрджрд░ рдврд╛рд▓ рднрд░рдиреЗ рдХреЗ рд╕рд╛рде, рдЬрд▓реНрджреА рдФрд░ рдХрд╛рдлреА рдХреБрдЫред рдЬрд▓реНрджреА рд╕реЗ рдмрд╣реБрдд рд╕рд╛рд░реЗ рддреНрд░рд┐рднреБрдЬ рдмрдирд╛рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдиреЗ рдХреЗ рдХрд╛рд░рдг, рдЖрдк рдЕрдкрдиреА рдЗрдЪреНрдЫрд╛рдиреБрд╕рд╛рд░ рдХреБрдЫ рднреА рдЖрдХрд░реНрд╖рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдЪрд▓рд┐рдП рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ, рд╣рдореЗрд╢рд╛ рдХреА рддрд░рд╣ mkb рдлрд╛рдЗрд▓ рдХреЗ рд╕рд╛рде:
arcanoid.mkb#!/usr/bin/env mkb options { } subprojects { iwgl } includepath { ./source/Main ./source/Model } files { [Main] (source/Main) Main.cpp Main.h Quads.cpp Quads.h Desktop.cpp Desktop.h IO.cpp IO.h [Model] (source/Model) Bricks.cpp Bricks.h Ball.cpp Ball.h Board.cpp Board.h } assets { }
рдпрд╣рд╛рдВ рд╣рдо рдШреЛрд╖рдгрд╛ рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рд╣рдо рдЧреНрд░рд╛рдлрд┐рдХреНрд╕ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП IwGl рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдЗрд░рд╛рджрд╛ рд░рдЦрддреЗ рд╣реИрдВ, рдФрд░ рд╣рдо рдЙрд╕ рд╕реНрд░реЛрдд рдкрд╛рда рдХреЗ рд╕рд╛рде рдХрдИ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рднреА рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдЬрд┐рдиреНрд╣реЗрдВ рд╣рдо рдЖрдЬ рд▓рд┐рдЦрдиреЗ рдХрд╛ рдЗрд░рд╛рджрд╛ рд░рдЦрддреЗ рд╣реИрдВред
рдореБрдЦреНрдп рдореЙрдбреНрдпреВрд▓, рдкрд╛рд░рдВрдкрд░рд┐рдХ рд░реВрдк рд╕реЗ, рдЖрд╡реЗрджрди рдХреЗ рдореБрдЦреНрдп рдЪрдХреНрд░ рдХреЛ рд╢рд╛рдорд┐рд▓ рдХрд░реЗрдЧрд╛, рд╕рд╛рде рд╣реА рд╕рднреА рд╕рдмрд╕рд┐рд╕реНрдЯрдо рдХреЛ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝ рдФрд░ рдбреА-рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝ рдХрд░реЗрдЧрд╛ред
main.cpp #include "Main.h" #include "s3e.h" #include "IwGL.h" #include "Desktop.h" #include "IO.h" #include "Quads.h" #include "Board.h" Board board; void init() { desktop.init(); io.init(); quads.init(); board.init(); } void release() { io.release(); desktop.release(); } int main() { init(); { while (!s3eDeviceCheckQuitRequest()) { io.update(); if (io.isKeyDown(s3eKeyAbsBSK) || io.isKeyDown(s3eKeyBack)) break; quads.update(); desktop.update(); board.update(); board.refresh(); quads.refresh(); io.refresh(); desktop.refresh(); } } release(); return 0; }
рдореИрдВрдиреЗ рдкреВрд░реЗ рдореБрд░рдмреНрдмрд╛ рдХреЛрдб рдХреЛ рдЫрд┐рдкрд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА, рдЗрд╕реЗ рд╡рд┐рднрд┐рдиреНрди рдЙрдк-рдкреНрд░рдгрд╛рд▓рд┐рдпреЛрдВ рдореЗрдВ рдмрд┐рдЦреЗрд░ рджрд┐рдпрд╛ред рдЗрди рд╕рдмрд╕рд┐рд╕реНрдЯрдореЛрдВ рдореЗрдВ рд╕рдмрд╕реЗ рд╕рд░рд▓ IO рдореЙрдбреНрдпреВрд▓ рд╣реИред рдЙрдирдХрд╛ рдХрд╛рд░реНрдп, рдЖрдЬ рдХреЗ рд▓рд┐рдП, рдХреАрдмреЛрд░реНрдб рд░рд╛рдЬреНрдп рдХреА рдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ рд╣реИред рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВрдиреЗ рдкрд╣рд▓реЗ рдХрд╣рд╛ рдерд╛, рд╣рдореЗрдВ рдПрдВрдбреНрд░реЙрдЗрдб рдкреНрд▓реЗрдЯрдлреЙрд░реНрдо рдкрд░ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдкреВрд░рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП "рдмреИрдХ" рдмрдЯрди рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред
IO.h #ifndef _IO_H_ #define _IO_H_ class IO { public: void init() {} void release() {} void update(); void refresh() {} bool isKeyDown(s3eKey key) const; }; extern IO io; #endif
IO.cpp #include "s3e.h" #include "IO.h" IO io; void IO::update() { s3eKeyboardUpdate(); } bool IO::isKeyDown(s3eKey key) const { return (s3eKeyboardGetState(key) & S3E_KEY_STATE_DOWN) == S3E_KEY_STATE_DOWN; }
рдмреЛрд░рд┐рдВрдЧ рднрд╛рдЧ рд╕рдорд╛рдкреНрдд рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж, рд╣рдо рдбреЗрд╕реНрдХрдЯреЙрдк рдореЙрдбреНрдпреВрд▓ рдкрд░ рдЪрд▓рддреЗ рд╣реИрдВред рд╡рд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ IwGl рдлреНрд░реЗрдо рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рдореЗрдВ рд▓рдЧреЗ рд╣реБрдП рд╣реЛрдВрдЧреЗ, рд╕рд╛рде рд╣реА рдХреБрдЫ рдЕрдореВрд░реНрдд рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ (рдЬрд┐рд╕рдореЗрдВ рдореЙрдбрд▓ рдХрд╛рдо рдХрд░реЗрдЧрд╛) рдХреЛ рднреМрддрд┐рдХ рд░реВрдк рдореЗрдВ рдкреБрди: рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рдбрд┐рд╡рд╛рдЗрд╕ рдХреЗ рд╕реНрдХреНрд░реАрди рдЖрдХрд╛рд░ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдЬрд┐рд╕ рдкрд░ рд╣рдордиреЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд▓реЙрдиреНрдЪ рдХрд┐рдпрд╛ рдерд╛ред
Desktop.h #ifndef _DESKTOP_H_ #define _DESKTOP_H_ class Desktop { private: int width; int height; int vSize; int duration; public: void init(); void release(); void update(); void refresh(); int getWidth() const {return width;} int getHeight() const {return height;} void setVSize(int v) {vSize = v;} int toRSize(int x) const; }; extern Desktop desktop; #endif
Desktop.cpp #include "IwGL.h" #include "s3e.h" #include "Desktop.h" Desktop desktop; void Desktop::init() { IwGLInit(); glClearColor(0, 0, 0, 0); width = IwGLGetInt(IW_GL_WIDTH); height = IwGLGetInt(IW_GL_HEIGHT); vSize = 0; duration = 1000 / 60; } void Desktop::release() { IwGLTerminate(); } void Desktop::update() { glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glMatrixMode(GL_PROJECTION); glLoadIdentity(); glOrthof(0, (float)width, (float)height, 0, -10.0f, 10.0f); glViewport(0, 0, width, height); } void Desktop::refresh() { IwGLSwapBuffers(); s3eDeviceYield(duration); } int Desktop::toRSize(int x) const { if (vSize == 0) return x; return (x * width) / vSize; }
рд╕реНрдХреНрд░реАрди рдХреЗ рд▓рд┐рдП рддрд╛рд░реНрдХрд┐рдХ рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ рдкреБрдирд░реНрдЧрдгрдирд╛ рдХреЗ рд▓рд┐рдП рдХреЛрдб рдкрд░, рдЕрдм рдХреЗ рд▓рд┐рдП, рдЖрдк рдзреНрдпрд╛рди рдирд╣реАрдВ рджреЗ рд╕рдХрддреЗред рд╣рдореЗрдВ рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рддрдм рд╣реЛрдЧреА рдЬрдм рд╣рдо рд╕реАрдЦреЗрдВрдЧреЗ рдХрд┐ рдПрдХ рд╕реНрддрд░ рд╡рд┐рд╡рд░рдг рдХреИрд╕реЗ рдЕрдкрд▓реЛрдб рдХрд┐рдпрд╛ рдЬрд╛рдПред
рдЖрдкрдХреЛ рдзреНрдпрд╛рди рджреЗрдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рдЕрдкрдбреЗрдЯ рд╡рд┐рдзрд┐ рдореЗрдВ рдлреНрд░реЗрдо рдХреЛ рдХреИрд╕реЗ рдлрд┐рд░ рд╕реЗ рддреИрдпрд╛рд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЫрд╡рд┐ рд╢реБрд░реВ рдореЗрдВ рдПрдХ рдЫрд┐рдкреЗ рд╣реБрдП рдмрдлрд░ рдореЗрдВ рдмрдирд╛рдИ рдЧрдИ рд╣реИ, рдЬрд┐рд╕рдХреЗ рдмрд╛рдж рдЫрд┐рдкреЗ рд╣реБрдП рдФрд░ рджреГрд╢реНрдпрдорд╛рди рдмрдлрд╝рд░реНрд╕ рдХреЛ IwGLSwapBuffers рдХрд╣рдХрд░ рд╕реНрд╡рд┐рдЪ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд╕реНрдХреНрд░реАрди рдХреЛ рд╕рд╛рдл рдХрд░рдирд╛ рдФрд░ рдПрдХ 2 рдбреА рдЫрд╡рд┐ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреИрдорд░рд╛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдирд╛ рдЕрдкрдбреЗрдЯ рд╡рд┐рдзрд┐ рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ (рдореИрдВ рддреБрд░рдВрдд рдХрд╣рддрд╛ рд╣реВрдВ рдХрд┐ рдореИрдВрдиреЗ рдЗрд╕ рд╕рднреА рдХреЛрдб рдХреЛ рдорд╛рдирдХ рдЙрджрд╛рд╣рд░рдг IwGL / IwGLVirtualRes рдореЗрдВ рджреЗрдЦрд╛ рдерд╛)ред рдЬреЛ рдХрд╣рд╛ рдЧрдпрд╛ рд╣реИ рдЙрд╕рд╕реЗ рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд╣реИ рдХрд┐ рдХрд┐рд╕реА рднреА рдЖрджрд┐рдо рдЖрд░реЗрдЦрд┐рдд рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдЕрджреНрдпрддрди рд╡рд┐рдзрд┐ рдХреЛ рдХреЙрд▓ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рдФрд░ рд╕реНрдХреНрд░реАрди рдХреЛ рдлрд┐рд░ рд╕реЗ рддреИрдпрд╛рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рддрд╛рдЬрд╝рд╛ рд╣реЛрдиреЗ рдкрд░ рддрд╛рдЬрд╝рд╛ рдХрд░реЗрдВред
рджреВрд╕рд░рд╛ рдмрд┐рдВрджреБ рдЬреЛ рдореИрдВрдиреЗ IwGLVirtualRes рдореЗрдВ рджреЗрдЦрд╛ рдерд╛, рдЬрд▓реНрджреА рд╕реЗ рддреНрд░рд┐рдХреЛрдг рдХреА рдПрдХ рд╕рд░рдгреА рдХрд╛ рдЙрддреНрдкрд╛рджрди рдХрд░рдиреЗ рдХрд╛ рдПрдХ рддрд░реАрдХрд╛ рд╣реИред рдпрд╣ рдХрд╛рд░реНрдп рдХреНрд╡реИрдб рдореЙрдбреНрдпреВрд▓ рджреНрд╡рд╛рд░рд╛ рд╕рдВрднрд╛рд▓рд╛ рдЬрд╛рдПрдЧрд╛ред
Quads.h #ifndef _QUADS_H_ #define _QUADS_H_ #define MAX_QUADS 2000 class Quads { private: int16 Verts[MAX_QUADS * 4 * 2]; uint16 Inds[MAX_QUADS * 6]; uint32 Cols[MAX_QUADS * 4]; int outQuad; public: void init(); void update() {outQuad = 0;} void refresh(); int16* getQuadPoints(); uint32* getQuadCols(); }; extern Quads quads; #endif
Quads.cpp #include "IwGL.h" #include "s3e.h" #include "Quads.h" Quads quads; void Quads::init() { uint16* inds = Inds; for (int n = 0; n < MAX_QUADS; n++) { uint16 baseInd = n*4; //Triangle 1 *inds++ = baseInd; *inds++ = baseInd+1; *inds++ = baseInd+2; //Triangle 2 *inds++ = baseInd; *inds++ = baseInd+2; *inds++ = baseInd+3; } glVertexPointer(2, GL_SHORT, 0, Verts); glEnableClientState(GL_VERTEX_ARRAY); glColorPointer(4, GL_UNSIGNED_BYTE, 0, Cols); glEnableClientState(GL_COLOR_ARRAY); } void Quads::refresh() { glDrawElements(GL_TRIANGLES, outQuad*6, GL_UNSIGNED_SHORT, Inds); } int16* Quads::getQuadPoints() { if (outQuad >= MAX_QUADS) return NULL; return Verts + 2 * 4 * outQuad; } uint32* Quads::getQuadCols() { if (outQuad >= MAX_QUADS) return NULL; return Cols + 4 * outQuad++; }
рдХрд┐рд╕реА рднреА рдкреНрд░рджрд░реНрд╢рди рд╡рд╕реНрддреБ, рдЗрд╕рдХреЗ рдбреНрд░рд╛рдЗрдВрдЧ рдХреЗ рд▓рд┐рдП, рдХреНрд╡рд╛рдбреНрд╕ рдореЙрдбреНрдпреВрд▓ рд╕реЗ рддреНрд░рд┐рдХреЛрдг рдЬреЛрдбрд╝реЗ рдХреЗ рдПрдХ рд╕реЗрдЯ рдХрд╛ рдЕрдиреБрд░реЛрдз рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рддрджрдиреБрд╕рд╛рд░ рдЕрдкрдиреЗ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЛ рдмрджрд▓ рд╕рдХрддреЗ рд╣реИрдВред рдкреВрд░рд╛ рд╣реЛрдиреЗ рдкрд░, GlDrawElements рдХреЗ рд▓рд┐рдП рдПрдХ рдХреЙрд▓ рдХреЗ рд╕рд╛рде рдХреНрд╡рд╛рдбреНрд╕ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд┐рдП рдЧрдП рд╕рднреА рддреНрд░рд┐рдХреЛрдгреЛрдВ рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░реЗрдЧрд╛ред рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдмреНрд░рд┐рдХреНрд╕ рдореЙрдбреНрдпреВрд▓ рд╕реНрдХреНрд░реАрди рдкрд░ рдХрдИ рдЖрдпрддреЛрдВ рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реИред
Bricks.h #ifndef _BRICKS_H_ #define _BRICKS_H_ #include "IwGL.h" #include "s3e.h" #include "Desktop.h" #define BRICK_COLOR_1 0xffffff00 #define BRICK_COLOR_2 0xff50ff00 #define BRICK_HALF_WIDTH 20 #define BRICK_HALF_HEIGHT 10 #include <vector> using namespace std; class Bricks { private: struct SBrick { SBrick(int x, int y): x(x), y(y), hw(BRICK_HALF_WIDTH), hh(BRICK_HALF_HEIGHT), ic(BRICK_COLOR_1), oc(BRICK_COLOR_2) {} SBrick(const SBrick& p): x(px), y(py), hw(p.hw), hh(p.hh), ic(p.ic), oc(p.oc) {} int x, y, hw, hh, ic, oc; }; vector<SBrick> bricks; public: Bricks(): bricks() {} void refresh(); void clear(){bricks.clear();} void add(SBrick& b); typedef vector<SBrick>::iterator BIter; friend class Board; }; #endif // _BRICKS_H_
Bricks.cpp #include "Bricks.h" #include "Quads.h" void Bricks::refresh() { for (BIter p = bricks.begin(); p != bricks.end(); ++p) { CIwGLPoint point(p->x, p->y); point = IwGLTransform(point); int16* quadPoints = quads.getQuadPoints(); uint32* quadCols = quads.getQuadCols(); if ((quadPoints == NULL) || (quadCols == NULL)) break; *quadPoints++ = point.x - p->hw; *quadPoints++ = point.y + p->hh; *quadCols++ = p->ic; *quadPoints++ = point.x + p->hw; *quadPoints++ = point.y + p->hh; *quadCols++ = p->oc; *quadPoints++ = point.x + p->hw; *quadPoints++ = point.y - p->hh; *quadCols++ = p->ic; *quadPoints++ = point.x - p->hw; *quadPoints++ = point.y - p->hh; *quadCols++ = p->oc; } } void Bricks::add(SBrick& b) { bricks.push_back(b); }
рд╣рдо рдврд╛рд▓ рднрд░реЗ рдЖрдпрддреЛрдВ рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рджреЛ рд░рдВрдЧреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред
рдЕрдм рдЬрдм рд╣рдо рдЖрдпрддреЛрдВ рд╕реЗ рдирд┐рдкрдЯ рдЪреБрдХреЗ рд╣реИрдВ, рддреЛ рд╣рдорд╛рд░реЗ рд╕рд╛рдордиреЗ рдПрдХ рдФрд░ рджрд┐рд▓рдЪрд╕реНрдк рдХрд╛рдо рд╣реЛрдЧрд╛ред рд╣рдореЗрдВ рдПрдХ рдЧреЗрдВрдж рдХреЛ рдЖрдХрд░реНрд╖рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рддреНрд░рд┐рдХреЛрдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ (рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ, рдПрдХ рдЧреЗрдВрдж рдирд╣реАрдВ, рд▓реЗрдХрд┐рди рдПрдХ рдЧреЛрд▓, рдПрдХ рдЕрдЪреНрдЫрд╛ рдврд╛рд▓ рднрд░рдиреЗ рдХреЗ рд╕рд╛рде рдЬреЛ рдПрдХ рд╣рд╛рдЗрд▓рд╛рдЗрдЯ рджрд┐рдЦрд╛рддрд╛ рд╣реИ)ред
Ball.h #ifndef _BALL_H_ #define _BALL_H_ #include <vector> #include "IwGL.h" #include "s3e.h" #include "Desktop.h" #define MAX_SEGMENTS 7 #define BALL_COLOR_1 0x00000000 #define BALL_COLOR_2 0xffffffff #define BALL_RADIUS 15 using namespace std; class Ball { private: struct Offset { Offset(int dx, int dy): dx(dx), dy(dy) {} Offset(const Offset& p): dx(p.dx), dy(p.dy) {} int dx, dy; }; vector<Offset> offsets; int x; int y; public: void init(); void refresh(); virtual void setXY(int X, int Y); typedef vector<Offset>::iterator OIter; }; #endif // _BALL_H_
Ball.cpp #include "Ball.h" #include "Quads.h" #include "Desktop.h" #include <math.h> #define PI 3.14159265f void Ball::init(){ x = desktop.getWidth() / 2; y = desktop.getHeight()/ 2; float delta = PI / (float)MAX_SEGMENTS; float angle = delta / 2.0f; float r = (float)desktop.toRSize(BALL_RADIUS); for (int i = 0; i < MAX_SEGMENTS; i++) { offsets.push_back(Offset((int16)(cos(angle) * r), (int16)(sin(angle) * r))); angle = angle + delta; offsets.push_back(Offset((int16)(cos(angle) * r), (int16)(sin(angle) * r))); angle = angle + delta; offsets.push_back(Offset((int16)(cos(angle) * r), (int16)(sin(angle) * r))); } } void Ball::setXY(int X, int Y) { x = X; y = Y; } void Ball::refresh() { CIwGLPoint point(x, y); point = IwGLTransform(point); OIter o = offsets.begin(); int r = desktop.toRSize(BALL_RADIUS); for (int i = 0; i < MAX_SEGMENTS; i++) { int16* quadPoints = quads.getQuadPoints(); uint32* quadCols = quads.getQuadCols(); if ((quadPoints == NULL) || (quadCols == NULL)) break; *quadPoints++ = point.x + (r / 4); *quadPoints++ = point.y + (r / 4); *quadCols++ = BALL_COLOR_2; *quadPoints++ = point.x + o->dx; *quadPoints++ = point.y + o->dy; *quadCols++ = BALL_COLOR_1; o++; *quadPoints++ = point.x + o->dx; *quadPoints++ = point.y + o->dy; *quadCols++ = BALL_COLOR_1; o++; *quadPoints++ = point.x + o->dx; *quadPoints++ = point.y + o->dy; *quadCols++ = BALL_COLOR_1; o++; } }
рд╕реНрдХреВрд▓ рддреНрд░рд┐рдХреЛрдгрдорд┐рддрд┐ рдХреЗ рдкрд╛рдареНрдпрдХреНрд░рдо рдХреЛ рдпрд╛рдж рдХрд░рддреЗ рд╣реБрдП, рд╣рдо рд╕рд░реНрдХрд▓ рдХреЛ рдЦрдВрдбреЛрдВ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░рддреЗ рд╣реИрдВред рдЪрдХрд╛рдЪреМрдВрдз рдХрд╛ рдЕрдиреБрдХрд░рдг рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╕рд░реНрдХрд▓ рдХреЗ рдХреЗрдВрджреНрд░ рд╕реЗ рдиреАрдЪреЗ рдФрд░ рдиреАрдЪреЗ рд╕рднреА рдЦрдВрдбреЛрдВ рдХреЛ рдереЛрдбрд╝рд╛ рдКрдкрд░ рд▓реЗ рдЬрд╛рдПрдВред рдЦреИрд░, рдкреНрд░рддреНрдпреЗрдХ рд░рд┐рдбреНрд░рд╛ рдХреЗ рд╕рд╛рде рдЗрд╕ рд╕рднреА рддреНрд░рд┐рдХреЛрдгрдорд┐рддрд┐ рд╕реЗ рдирд┐рдкрдЯрдиреЗ рдХреЗ рд▓рд┐рдП рдирд╣реАрдВ, рд╣рдо рд╕рднреА рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ рдХреА рдЧрдгрдирд╛ рдПрдХ рдмрд╛рд░, рдЗрдирд┐рдЯ рд╡рд┐рдзрд┐ рдореЗрдВ рдХрд░рддреЗ рд╣реИрдВред
рд╢реЗрд╖ рдмреЛрд░реНрдб рдореЙрдбреНрдпреВрд▓ рдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдЕрдм рддрдХ, рддреБрдЪреНрдЫ рд╣реИред
Board.h #ifndef _BOARD_H_ #define _BOARD_H_ #include "Bricks.h" #include "Ball.h" class Board { private: Bricks bricks; Ball ball; public: void init(); void refresh(); void update() {} }; #endif
Board.cpp #include "Board.h" void Board::init() {
рдпрд╣ app.icf рдореЗрдВ рдЖрд╡рд╢реНрдпрдХ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрдиреА рд╣реБрдИ рд╣реИ:
[S3E] SysGlesVersion=1 DispFixRot=FixedPortrait DataDirIsRAM=1
рдФрд░ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╛рд░реНрдпрдХреНрд░рдо рдЪрд▓рд╛рдПрдБ:

рдЕрдЧрд▓реЗ
рд▓реЗрдЦ рдореЗрдВ , рд╣рдо рд╕реАрдЦреЗрдВрдЧреЗ рдХрд┐ рдПрдХ
YAML рдлрд╝рд╛рдЗрд▓ рд╕реЗ рд╕реНрддрд░реАрдп рд╡рд┐рд╡рд░рдг рдХреИрд╕реЗ рд▓реЛрдб рдХрд┐рдпрд╛ рдЬрд╛рдПред