рд▓рд┐рдЯрд┐рд▓ рдмреНрд░реЗрд╡ рдЕрд░реНрдХрд╛рдиреЙрдЗрдб (рднрд╛рдЧ 2 - YAML)

рд╣рдорд╛рд░реЗ рдЫреЛрдЯреЗ (рд▓реЗрдХрд┐рди рдмрд╣реБрдд рдмрд╣рд╛рджреБрд░) arcanoid рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХрд╣рд╛рдиреА рдЬрд╛рд░реА рд░рдЦрддреЗ рд╣реБрдП, рдореИрдВ YAML рдЬреИрд╕реА рдЕрджреНрднреБрдд рднрд╛рд╖рд╛ рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ред рдХреЛрдИ рднреА, рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рд╕рдмрд╕реЗ рд╕рд░рд▓, рдЧреЗрдо рдХреЛ рдмрд╣реБрдд рд╕рд╛рд░реЗ рдбреЗрдЯрд╛ рдХреЛ рд╕реНрдЯреЛрд░ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рдЬреИрд╕реЗ: рд╕реНрддрд░реЛрдВ рдХрд╛ рд╡рд┐рд╡рд░рдг, рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдХреА рд╡рд░реНрддрдорд╛рди рд╕реНрдерд┐рддрд┐, рдЙрдкрд▓рдмреНрдзрд┐рдпреЛрдВ рдХреА рд╕реВрдЪреА рдЖрджрд┐ред рдпрд╣ рд╡рд╛рдВрдЫрдиреАрдп рд╣реИ рдХрд┐ рдпрд╣ рд╕рдм рдорд╛рдирд╡-рдкрдардиреАрдп рдФрд░ рдЖрд╕рд╛рдиреА рд╕реЗ рд╕рдВрдкрд╛рджрди рдпреЛрдЧреНрдп рд░реВрдк рдореЗрдВ рд░рдЦрд╛ рдЬрд╛рдПред рдкрд░рдВрдкрд░рд╛рдЧрдд рд░реВрдк рд╕реЗ, XML рдХрд╛ рдЙрдкрдпреЛрдЧ рдЗрди рдЙрджреНрджреЗрд╢реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдмрд╣реБрдд рд╣реА рдХреНрд░рд┐рдпрд╛рддреНрдордХ рд╣реИ рдФрд░ рдореИрдиреНрдпреБрдЕрд▓ рд╕рдВрдкрд╛рджрди рдХреЗ рд▓рд┐рдП рдЗрд╕реЗ рд╢рд╛рдпрдж рд╣реА рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдорд╛рдирд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

YAML рдЕрдзрд┐рдХ рд╕рдВрдХреНрд╖рд┐рдкреНрдд рд╣реИ, рдФрд░ рдЖрдЬ, рд╣рдо рд╕реАрдЦреЗрдВрдЧреЗ рдХрд┐ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреИрд╕реЗ рдХрд░реЗрдВред

рд╢реБрд░реБрдЖрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рддрдп рдХрд░реЗрдВрдЧреЗ рдХрд┐ рд╣рдореЗрдВ YAML рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреНрдпреЛрдВ рд╣реИред рдореЗрд░рд╛ рдорд╛рдирдирд╛ тАЛтАЛрд╣реИ рдХрд┐, рдЕрдиреНрдп рдмрд╛рддреЛрдВ рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЗрд╕рдореЗрдВ рд╕реНрддрд░реЛрдВ рдХреЗ рд╡рд┐рд╡рд░рдг рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдирд╛ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реЛрдЧрд╛, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЗрд╕ рд░реВрдк рдореЗрдВ:

level.json
{ board: { width: 320 }, types: { odd: { inner_color: 0xffffff00, outer_color: 0xff50ff00, width: 40, height: 20 }, even: { inner_color: 0xff1010ff, outer_color: 0xffffffff, width: 40, height: 20 } }, level: [ { type: odd, x: 50, y: 30 }, { type: even, x: 94, y: 30 }, { type: odd, x: 138, y: 30 }, { type: even, x: 182, y: 30 }, { type: odd, x: 226, y: 30 }, { type: even, x: 270, y: 30 }, { type: even, x: 50, y: 54 }, { type: odd, x: 94, y: 54 }, { type: even, x: 138, y: 54 }, { type: odd, x: 182, y: 54 }, { type: even, x: 226, y: 54 }, { type: odd, x: 270, y: 54 }, { type: odd, x: 50, y: 78 }, { type: even, x: 94, y: 78 }, { type: odd, x: 138, y: 78 }, { type: even, x: 182, y: 78 }, { type: odd, x: 226, y: 78 }, { type: even, x: 270, y: 78 }, { type: even, x: 50, y: 102 }, { type: odd, x: 94, y: 102 }, { type: even, x: 138, y: 102 }, { type: odd, x: 182, y: 102 }, { type: even, x: 226, y: 102 }, { type: odd, x: 270, y: 102 } ] } 


рдмрд╕ рдЧреБрд╕реНрд╕реЗ рдореЗрдВ рдЪрд┐рд▓реНрд▓рд╛рдУ рдордд "рдЙрдиреНрд╣реЛрдВрдиреЗ рд╣рдореЗрдВ рдзреЛрдЦрд╛ рджрд┐рдпрд╛!"ред рд╣рд╛рдБ, рдпрд╣ JSON рд╣реИ ред рдЕрдЪреНрдЫреА рдЦрдмрд░ рдпрд╣ рд╣реИ рдХрд┐ рдпрд╣ YAML рднреА рд╣реИред рдпрд╣ рд╕рд┐рд░реНрдл рдЗрддрдирд╛ рд╣реИ рдХрд┐ JSON YAML рдХрд╛ рд╕рдмрд╕реЗрдЯ рд╣реИ рдФрд░ рдХрд┐рд╕реА JSON рд╡рд┐рд╡рд░рдг рдХреЛ YAML рдкрд╛рд░реНрд╕рд░ рджреНрд╡рд╛рд░рд╛ рд╕рдорд╕реНрдпрд╛ рдХреЗ рдмрд┐рдирд╛ рдкрд╛рд░реНрд╕ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред JSON рдереЛрдбрд╝рд╛ рдЕрдзрд┐рдХ рд╕рдВрд╢реНрд▓рд┐рд╖реНрдЯ рд░реВрдк рд╕реЗ рдордЬрдмреВрдд рдФрд░ рдереЛрдбрд╝рд╛ рдХрдо рд╕рдВрдХреНрд╖рд┐рдкреНрдд рд╣реИ (рд▓реЗрдХрд┐рди рдЕрднреА рднреА XML рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдЕрдзрд┐рдХ рд╕рдВрдХреНрд╖рд┐рдкреНрдд рд╣реИ)ред

рдЬреИрд╕рд╛ рдХрд┐ shokoladko рдиреЗ рд╕рд╣реА рдЯрд┐рдкреНрдкрдгреА рдХреА рд╣реИ, рдиреАрдЪреЗ рджреА рдЧрдИ рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдореЗрдВ, YAML рд╕рдВрд╕реНрдХрд░рдг рд╕рдВрдкрд╛рджрди рдХреЗ рд▓рд┐рдП рдХрд╛рдлреА рдЫреЛрдЯрд╛ рдФрд░ рдЕрдзрд┐рдХ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реЛрдЧрд╛ (рд╕реВрдЪреА рдЖрдЗрдЯрдореЛрдВ рдХреЛ рдЕрд▓рдЧ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдЕрд▓реНрдкрд╡рд┐рд░рд╛рдореЛрдВ рдХреА рдЕрдиреБрдкрд╕реНрдерд┐рддрд┐ рдХреЗ рдХрд╛рд░рдг)ред рдпрд╣рд╛рдБ рдпрд╣ рдХреИрд╕рд╛ рджрд┐рдЦреЗрдЧрд╛:

level.yaml
 board: width: 320 types: odd: inner_color: 0xffffff00 outer_color: 0xff50ff00 width: 40 height: 20 even: inner_color: 0xff1010ff outer_color: 0xffffffff width: 40 height: 20 level: - type: odd x: 50 y: 30 - type: even x: 94 y: 30 - type: odd x: 138 y: 30 - type: even x: 182 y: 30 - type: odd x: 226 y: 30 - type: even x: 270 y: 30 - type: even x: 50 y: 54 - type: odd x: 94 y: 54 - type: even x: 138 y: 54 - type: odd x: 182 y: 54 - type: even x: 226 y: 54 - type: odd x: 270 y: 54 - type: odd x: 50 y: 78 - type: even x: 94 y: 78 - type: odd x: 138 y: 78 - type: even x: 182 y: 78 - type: odd x: 226 y: 78 - type: even x: 270 y: 78 - type: even x: 50 y: 102 - type: odd x: 94 y: 102 - type: even x: 138 y: 102 - type: odd x: 182 y: 102 - type: even x: 226 y: 102 - type: odd x: 270 y: 102 


рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, YAML рд╕рдВрдмрдВрдзрдкрд░рдХ рдбреЗрдЯрд╛ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИред рд╡рд┐рд╡рд░рдг рдореЗрдВ 'рдФрд░' рд╡рд░реНрдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ, рдПрдХ "рд▓рдВрдЧрд░" рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЬрд┐рд╕реЗ рдмрд╛рдж рдореЗрдВ "рдЙрдкрдирд╛рдо" ('*' рдЪрд░рд┐рддреНрд░) рджреНрд╡рд╛рд░рд╛ рдХрд┐рдП рдЧрдП рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрди рдкреНрд░рджрд░реНрд╢рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕ рддрд░рд╣, рдкреБрдирд░рд╛рд╡рд░реНрддреА рд╕рдВрд░рдЪрдирд╛рдПрдВ рд╡реНрдпрдХреНрдд рдХреА рдЬрд╛ рд╕рдХрддреА рд╣реИрдВред

рд▓реЗрдХрд┐рди рдкрд░реНрдпрд╛рдкреНрдд рд╕рд┐рджреНрдзрд╛рдВрдд, рдЪрд▓реЛ рд╡реНрдпрд╛рдкрд╛рд░ рдХреЗ рд▓рд┐рдП рдиреАрдЪреЗ рдЙрддрд░реЛред рд╣рдо YAML рдХреЛ рдкрд╛рд░реНрд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрдВрдЯрд░рдиреЗрдЯ рдкрд░ рдХрд┐рд╕реА рднреА рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЛ рдвреВрдВрдврддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕реЗ рдЕрдкрдиреЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ рдПрдореНрдмреЗрдб рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВред рд╡реИрд╕реЗ, рд╣рдордиреЗ рдЬреЛ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдЪреБрдирд╛ рдерд╛, рд╡рд╣ рдХрд┐рд░рд┐рд▓ рд╕рд┐рдореЛрдиреЛрд╡ рджреНрд╡рд╛рд░рд╛ рд╡рд┐рдХрд╕рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ рдФрд░ рдЗрд╕реЗ рдПрдордЖрдИрдЯреА рд▓рд╛рдЗрд╕реЗрдВрд╕ рдХреЗ рддрд╣рдд рд╕реНрд╡рддрдВрддреНрд░ рд░реВрдк рд╕реЗ рд╡рд┐рддрд░рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ (рдЬреЛ рдХрд┐ рдкреБрд╕реНрддрдХрд╛рд▓рдп рд╡рд┐рд╡рд░рдг рдкреГрд╖реНрда рдХреЗ рдХреЙрдкреАрд░рд╛рдЗрдЯ рдЕрдиреБрднрд╛рдЧ рдореЗрдВ рдкрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ)ред

рд╣рдо рдХреЗрд╡рд▓ рдореБрд░рдмреНрдмрд╛ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ mkb рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд╕рднреА рдЖрд╡рд╢реНрдпрдХ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рд╢рд╛рдорд┐рд▓ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдпрд╣ рдмрд╣реБрдд рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдирд╣реАрдВ рд╣реЛрдЧрд╛ред рдореЗрд░рд╛ рд╕реБрдЭрд╛рд╡ рд╣реИ рдХрд┐ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЛ рдореБрд░рдмреНрдмрд╛ рдХреЗ рдЙрдкрдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рдбрд┐рдЬрд╛рдЗрди рдХрд┐рдпрд╛ рдЬрд╛рдП, рдХреНрдпреЛрдВрдХрд┐ рдорд░рдорд╛рд▓рд╛рдбреЗ рдкреИрдХреЗрдЬ рдореЗрдВ рдРрд╕реЗ рдбрд┐рдЬрд╛рдЗрди рдХреЗ рдмрд╣реБрдд рд╕рд╛рд░реЗ рдЙрджрд╛рд╣рд░рдг рд╣реИрдВред рд╣рдо yaml рдлрд╝реЛрд▓реНрдбрд░ рдмрдирд╛рддреЗ рд╣реИрдВ рдФрд░ рдЙрд╕рдореЗрдВ рдирд┐рдореНрди рд╕рд╛рдордЧреНрд░реА рдХреА mkf рдлрд╝рд╛рдЗрд▓ рд░рдЦрддреЗ рд╣реИрдВ:

yaml.mkf
 includepath h includepath source files { (h) yaml.h config.h (source) yaml_private.h api.c dumper.c emitter.c loader.c parser.c reader.c scanner.c writer.c } 


рд╣рдо рдЙрдкрдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛рдПрдБ рдмрдирд╛рддреЗ рд╣реИрдВ рдФрд░ рдЙрдирдореЗрдВ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЗ рд╕реНрд░реЛрдд рдЧреНрд░рдВрдереЛрдВ рдХреЛ mkf рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдЙрдирдХреЗ рд╕реНрдерд╛рди рдХреЗ рд╡рд┐рд╡рд░рдг рдХреЗ рдЕрдиреБрд╕рд╛рд░ рд░рдЦрддреЗ рд╣реИрдВред рд╡рд╣ рд╕рдм рд╣реИред рд╣рдордиреЗ рдПрдХ рдкреВрд░реНрдг рд╡рд┐рдХрд╕рд┐рдд рдорд╛рд░реНрдорд▓реЗрдб рдореЙрдбреНрдпреВрд▓ рдмрдирд╛рдпрд╛ рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рд╣рдо рдЕрдкрдиреА рдХрд┐рд╕реА рднреА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рдЖрд╕рд╛рдиреА рд╕реЗ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдЪрд▓реЛ рдЗрд╕реЗ рдХрд░рддреЗ рд╣реИрдВ:

arcanoid.mkb
 #!/usr/bin/env mkb options { module_path="../yaml" } subprojects { iwgl yaml } 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) Board.cpp Board.h Bricks.cpp Bricks.h Ball.cpp Ball.h [Data] (data) } assets { (data) level.json (data-ram/data-gles1, data/data-gles1) } 


рдЕрдм, YAML рдореЙрдбреНрдпреВрд▓ рдкрд░рд┐рдпреЛрдЬрдирд╛ рд╕реЗ рдЬреБрдбрд╝рд╛ рд╣реБрдЖ рд╣реИ рдФрд░ рд╣рдореЗрдВ рдпрд╣ рдЬрд╛рдирдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдбреЗрдЯрд╛ рдХреЛ рдХреИрд╕реЗ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПред рдмреЛрд░реНрдб рдореЗрдВ рдХрдИ рдмрджрд▓рд╛рд╡ рдХрд░рдирд╛ рдХрд╛рдлреА рд╣реИ:

Board.h
 #ifndef _BOARD_H_ #define _BOARD_H_ #include <yaml.h> #include <vector> #include <String> #include "Bricks.h" #include "Ball.h" #define MAX_NAME_SZ 100 using namespace std; enum EBrickMask { ebmX = 0x01, ebmY = 0x02, ebmComplete = 0x03, ebmWidth = 0x04, ebmHeight = 0x08, ebmIColor = 0x10, ebmOColor = 0x20 }; class Board { private: struct Type { Type(const char* s, const char* n, const char* v): s(s), n(n), v(v) {} Type(const Type& p): s(ps), n(pn), v(pv) {} string s, n, v; }; Bricks bricks; Ball ball; yaml_parser_t parser; yaml_event_t event; vector<string> scopes; vector<Type> types; char currName[MAX_NAME_SZ]; int brickMask; int brickX, brickY, brickW, brickH, brickIC, brickOC; bool isTypeScope; void load(); void clear(); void notify(); const char* getScopeName(); void setProperty(const char* scope, const char* name, const char* value); void closeTag(const char* scope); int fromNum(const char* s); public: Board(): scopes(), types() {} void init(); void refresh(); void update() {} typedef vector<string>::iterator SIter; typedef vector<Type>::iterator TIter; }; #endif // _BOARD_H_ 


Board.cpp
 #include "Board.h" #include "Desktop.h" const char* BOARD_SCOPE = "board"; const char* LEVEL_SCOPE = "level"; const char* TYPE_SCOPE = "types"; const char* TYPE_PROPERTY = "type"; const char* WIDTH_PROPERTY = "width"; const char* HEIGHT_PROPERTY = "height"; const char* IC_PROPERTY = "inner_color"; const char* OC_PROPERTY = "outer_color"; const char* X_PROPERTY = "x"; const char* Y_PROPERTY = "y"; void Board::init() { load(); ball.init(); } void Board::clear() { bricks.clear(); scopes.clear(); memset(currName, 0, sizeof(currName)); types.clear(); } void Board::load() { clear(); yaml_parser_initialize(&parser); FILE *input = fopen("level.json", "rb"); yaml_parser_set_input_file(&parser, input); int done = 0; while (!done) { if (!yaml_parser_parse(&parser, &event)) { break; } notify(); done = (event.type == YAML_STREAM_END_EVENT); yaml_event_delete(&event); } yaml_parser_delete(&parser); fclose(input); } void Board::notify() { switch (event.type) { case YAML_MAPPING_START_EVENT: case YAML_SEQUENCE_START_EVENT: scopes.push_back(currName); memset(currName, 0, sizeof(currName)); break; case YAML_MAPPING_END_EVENT: closeTag(getScopeName()); case YAML_SEQUENCE_END_EVENT: scopes.pop_back(); break; case YAML_SCALAR_EVENT: if (currName[0] == 0) { strncpy(currName, (const char*)event.data.scalar.value, sizeof(currName)-1); break; } setProperty(getScopeName(), currName, (const char*)event.data.scalar.value); memset(currName, 0, sizeof(currName)); break; default: break; } } const char* Board::getScopeName() { const char* r = NULL; isTypeScope = false; for (SIter p = scopes.begin(); p !=scopes.end(); ++p) { if (!(*p).empty()) { if (strcmp((*p).c_str(), TYPE_SCOPE) == 0) { isTypeScope = true; continue; } r = (*p).c_str(); } } return r; } int Board::fromNum(const char* s) { int r = 0; int x = 10; for (size_t i = 0; i < strlen(s); i++) { switch (s[i]) { case 'x': case 'X': x = 16; break; case 'a': case 'b': case 'c': case 'd': case 'e': case 'f': x = 16; r *= x; r += s[i] - 'a' + 10; break; case 'A': case 'B': case 'C': case 'D': case 'E': case 'F': x = 16; r *= x; r += s[i] - 'A' + 10; break; default: r *= x; r += s[i] - '0'; break; } } return r; } void Board::setProperty(const char* scope, const char* name, const char* value) { if (scope == NULL) return; if (isTypeScope) { types.push_back(Type(scope, name, value)); return; } if (strcmp(scope, BOARD_SCOPE) == 0) { if (strcmp(name, WIDTH_PROPERTY) == 0) { desktop.setVSize(fromNum(value)); } } if (strcmp(scope, LEVEL_SCOPE) == 0) { if (strcmp(name, TYPE_PROPERTY) == 0) { for (TIter p = types.begin(); p != types.end(); ++p) { if (strcmp(value, p->s.c_str()) == 0) { setProperty(scope, p->n.c_str(), p->v.c_str()); } } } if (strcmp(name, X_PROPERTY) == 0) { brickMask |= ebmX; brickX = fromNum(value); } if (strcmp(name, Y_PROPERTY) == 0) { brickMask |= ebmY; brickY = fromNum(value); } if (strcmp(name, WIDTH_PROPERTY) == 0) { brickMask |= ebmWidth; brickW = fromNum(value); } if (strcmp(name, HEIGHT_PROPERTY) == 0) { brickMask |= ebmHeight; brickH = fromNum(value); } if (strcmp(name, IC_PROPERTY) == 0) { brickMask |= ebmIColor; brickIC = fromNum(value); } if (strcmp(name, OC_PROPERTY) == 0) { brickMask |= ebmOColor; brickOC = fromNum(value); } } } void Board::closeTag(const char* scope) { if (scope == NULL) return; if (strcmp(scope, LEVEL_SCOPE) == 0) { if ((brickMask & ebmComplete) == ebmComplete) { Bricks::SBrick b(desktop.toRSize(brickX), desktop.toRSize(brickY)); if ((brickMask & ebmWidth) != 0) { b.hw = desktop.toRSize(brickW) / 2; } if ((brickMask & ebmHeight) != 0) { b.hh = desktop.toRSize(brickH) / 2; } if ((brickMask & ebmIColor) != 0) { b.ic = brickIC; } if ((brickMask & ebmOColor) != 0) { b.oc = brickOC; } bricks.add(b); } brickMask = 0; } } void Board::refresh() { bricks.refresh(); ball.refresh(); } 


рдпрд╣ рд╕рдм рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ? рд╕реНрддрд░ рд╡рд┐рд╡рд░рдг рдХреЗ рд╕рд╛рде рдлрд╛рдЗрд▓ рд▓реЛрдб рд╡рд┐рдзрд┐ рдореЗрдВ рдкрдврд╝реА рдЬрд╛рддреА рд╣реИред рдЙрд╕рдХреЗ рдмрд╛рдж, рд╣рдо рдкрд╛рд░реНрд╕рд░ рдлрд╝рдВрдХреНрд╢рди yaml_parser_parse рдХреЛ рд▓реВрдк рдореЗрдВ рдХрд╣рддреЗ рд╣реИрдВ, рдЬреЛ рд╣реЛрдиреЗ рд╡рд╛рд▓реА рдкрд╛рд░реНрд╕рд┐рдВрдЧ рдШрдЯрдирд╛рдУрдВ рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░рддреЗ рд╣реИрдВред рдпрд╣ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдмрд▓реНрдХрд┐ рдЖрджрд┐рдо рд╣реИред рдХреБрдЫ рдкреБрдирд░реБрджреНрдзрд╛рд░ рдХреЗрд╡рд▓ "рдкреНрд░рдХрд╛рд░" рдЕрдиреБрднрд╛рдЧ рдХреА рд╕рд╛рдордЧреНрд░реА рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдХреЗ рдкреЗрд╢ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред рдЗрд╕рдореЗрдВ, рд╣рдо рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдХреЗ "рдЯреЗрдореНрдкреНрд▓реЗрдЯ" рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддреЗ рд╣реИрдВ, рдЬрд┐рд╕реЗ рдмрд╛рдж рдореЗрдВ рд╣рдо "рдкреНрд░рдХрд╛рд░" рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЗ рдорд╛рди рдХреЗ рд░реВрдк рдореЗрдВ рд╕рдВрдмрдВрдзрд┐рдд рдкреНрд░рдХрд╛рд░ рдХреЗ рдирд╛рдо рдХреЛ рдЬреЛрдбрд╝рдХрд░ "рдИрдВрдЯреЛрдВ" рдХреЗ рд╡рд┐рд╡рд░рдг рдореЗрдВ рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВред

"рдмреЛрд░реНрдб" рдЕрдиреБрднрд╛рдЧ рдореЗрдВ, рд╣рдо рдмреЛрд░реНрдб рдХреА рдЪреМрдбрд╝рд╛рдИ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддреЗ рд╣реИрдВред рдЕрдиреНрдп рд╕рднреА рдЖрдХрд╛рд░, рд╕реНрддрд░ рдХреЗ рд╡рд┐рд╡рд░рдг рдореЗрдВ, рдЗрд╕рдХреЗ рд╕рд╛рдкреЗрдХреНрд╖ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдП рдЧрдП рд╣реИрдВред рдореИрдВ рдЗрд╕ рддрдереНрдп рдкрд░ рдЖрдкрдХрд╛ рдзреНрдпрд╛рди рдЖрдХрд░реНрд╖рд┐рдд рдХрд░рддрд╛ рд╣реВрдВ рдХрд┐ рд╣рдореЗрдВ рд╕реНрддрд░ рд╡рд┐рд╡рд░рдг рдореЗрдВ рдмреЛрд░реНрдб рдХреА рдКрдВрдЪрд╛рдИ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред рдКрд░реНрдзреНрд╡рд╛рдзрд░ рдЖрдпрд╛рдо рдХреНрд╖реИрддрд┐рдЬ рдЖрдпрд╛рдореЛрдВ рдХреЗ рд╕рдорд╛рди рдЕрдиреБрдкрд╛рдд рдореЗрдВ рдкреБрдирд░реНрдЧрдгрдирд╛ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред рдЗрд╕ рдкреНрд░рдХрд╛рд░, рд╣рдо рдпрд╣ рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рд╕реНрдХреНрд░реАрди рдХреА рдЪреМрдбрд╝рд╛рдИ рдФрд░ рдКрдВрдЪрд╛рдИ рдХреЗ рд╡рд┐рднрд┐рдиреНрди рдЕрдиреБрдкрд╛рддреЛрдВ рдХреЗ рд╕рд╛рде рдЙрдкрдХрд░рдгреЛрдВ рдкрд░ рд╕реНрддрд░ рд▓рдЧрднрдЧ рд╕рдорд╛рди рджрд┐рдЦрддрд╛ рд╣реИ (рдЕрдВрддрд░ рдХрд┐рд╕реА рднреА рд╕реНрддрд░ рдкрд░ рдЙрдкрд▓рдмреНрдз рдЦрд╛рд▓реА рдХреНрд╖реЗрддреНрд░ рдореЗрдВ "рдЦреЛ рдЧрдпрд╛" рд╣реИ)ред

рдирд┐рд╖реНрдкрд╛рджрди рдкрд░ рдХрд╛рд░реНрдпрдХреНрд░рдо рдЪрд▓рд╛рдирд╛, рд╣рдо рджреЗрдЦреЗрдВрдЧреЗ рдХрд┐ рд╣рдорд╛рд░рд╛ рдбреЗрдЯрд╛ рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рд▓реЛрдб рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ:

рдЫрд╡рд┐

рдпрд╣ рдзреНрдпрд╛рди рд░рдЦрдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ рдХрд┐ рд▓рд┐рдмреИрдордПрд▓ рдХреА рдХреНрд╖рдорддрд╛рдПрдВ рдпрд╛рд░рд┐рд╕рдо рдлрд╛рдЗрд▓ рдкрд╛рд░реНрд╕ рдХрд░рдиреЗ рддрдХ рд╕реАрдорд┐рдд рдирд╣реАрдВ рд╣реИрдВред рдЗрд╕рдХреЗ рд╕рд╛рде, рд╣рдо рдЦреБрдж рдХреЛ YAML рдлрд╛рдЗрд▓реЗрдВ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ, рдЙрдирдореЗрдВ рдмрдЪрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЧреЗрдо рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдХреА рд╡рд░реНрддрдорд╛рди рд╕реНрдерд┐рддрд┐ред рдпрд╣ рдХреИрд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЗрд╕рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдкреБрд╕реНрддрдХрд╛рд▓рдп рд╡рд┐рд╡рд░рдг рдкреГрд╖реНрда рдкрд░ рдЙрдкрд▓рдмреНрдз рд╣реИред DataDirIsRAM рдХреЛ рд╕реЗрдЯ рдХрд░рдиреЗ рд╕реЗ рд╣рдореЗрдВ рдбрд┐рд╡рд╛рдЗрд╕ рдХреЗ рдлрд╛рдЗрд▓ рд╕рд┐рд╕реНрдЯрдо рдореЗрдВ рдлрд╛рдЗрд▓ рд╕реЗрд╡ рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдорд┐рд▓реЗрдЧреА:

 [S3E] SysGlesVersion=1 DispFixRot=FixedPortrait DataDirIsRAM=1 

рд╡рд╣ рд╕рдм рд╣реИред YAML рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдореЙрдбреНрдпреВрд▓ GitHub рдкрд░ рдкреЛрд╕реНрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ ред

рдЕрдЧрд▓реЗ рд▓реЗрдЦ рдореЗрдВ, рд╣рдо рд╕реАрдЦреЗрдВрдЧреЗ рдХрд┐ рдмреЙрдХреНрд╕ 2 рдбреА рдХреЗ рд╕рд╛рде рдХреИрд╕реЗ рдХрд╛рдо рдХрд┐рдпрд╛ рдЬрд╛рдПред

Source: https://habr.com/ru/post/In166357/


All Articles