рдЖрдХрд╕реНрдорд┐рдХ рдпрд╛рдВрддреНрд░рд┐рдХреА

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

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

рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдЪрдХреНрд░


рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЛ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд░рдиреЗ рдХрд╛ рд╕рд╣реА рддрд░реАрдХрд╛ рдЪреБрдирдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдореБрдЦреНрдп рдЪрдХреНрд░ рдореЗрдВ рдкреНрд░рддрд┐рднрд╛рдЧрд┐рдпреЛрдВ рдкрд░ рдирд┐рд░реНрдгрдп рд▓реЗрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдХрд┐рд╕реА рднреА рдЖрдХрд╕реНрдорд┐рдХ (рдФрд░ рд╕рдмрд╕реЗ рдЧреИрд░-рдЖрдХрд╕реНрдорд┐рдХ) рдЦреЗрд▓ рдореЗрдВ рдЙрдирдореЗрдВ рд╕реЗ рдХрдо рд╕реЗ рдХрдо рддреАрди рд╣реИрдВ:

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

рд╡реЗ рдХрд┐рд╕ рддрд░рд╣ рдХреЗ рдкреНрд░рддрд┐рднрд╛рдЧреА рд╣реИрдВ?

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

рдирд┐рд░рдВрддрд░рддрд╛ рд╕рд┐рдореНрдпреБрд▓реЗрдЯрд░ рдПрдХ рд╕рд╣рд╛рдпрдХ рдлрд╝рдВрдХреНрд╢рди рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдореБрдЦреНрдп рдЙрджреНрджреЗрд╢реНрдп рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдирд╛ рд╣реИ рдХрд┐ рдЧреЗрдо рдЬрдирд░реЗрдЯрд░ рдХреЗ рдХреЙрд▓ рдХреЗ рдмреАрдЪ рдХреБрдЫ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдРрд╕реЗ рдЦреЗрд▓ рдХреЗ рдХреНрд╖рдг рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ:
рдЫрд╡рд┐

рдмрд╛рдПрдБ рдФрд░ рджрд╛рдПрдБ, рдЧреЗрдордкреНрд▓реЗ рдШрдбрд╝реА рдХреА рд▓рдЧрд╛рддрд╛рд░ рджреЛ рдХреЙрд▓ рджрд┐рдЦрд╛рдИ рдЬрд╛рддреА рд╣реИрдВред рдорд╛рди рд▓реАрдЬрд┐рдП рдХрд┐ рдкреАрд▓реЗ рд╕рд░реНрдХрд▓ рдХреА рдЧрддрд┐ = 3. рд╕рд░реНрдХрд▓ рдФрд░ рдЖрдпрдд рдХреЗ рдмреАрдЪ рдХреА рджреВрд░реА, рдЬреИрд╕рд╛ рдХрд┐ рдЖрдВрдХрдбрд╝реЗ рд╕реЗ рджреЗрдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, = 2. рдпрд╣ рдкрддрд╛ рдЪрд▓рддрд╛ рд╣реИ рдХрд┐ рд╕рд░реНрдХрд▓ рдФрд░ рдЖрдпрддрд╛рдХрд╛рд░ рдЯрдХрд░рд╛ рдирд╣реАрдВ рдЬрд╛рдПрдВрдЧреЗ рдпрджрд┐ рдЙрдирдХреА рдорджрдж рдирд╣реАрдВ рдХреА рдЬрд╛рддреА рд╣реИред рдирд┐рд░рдВрддрд░рддрд╛ рд╕рд┐рдореНрдпреБрд▓реЗрдЯрд░ рднреА рдпрд╣ рд╕рд╣рд╛рдпрддрд╛ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред

рджреГрд╢реНрдп рдкреНрд░рддрд┐рдкрд╛рджрди - рдпрд╣рд╛рдБ рд╕рдм рдХреБрдЫ рд╕реНрдкрд╖реНрдЯ рдкреНрд░рддреАрдд рд╣реЛрддрд╛ рд╣реИред рдпрд╣ рдПрдХ рдЕрд▓рдЧ рдЖрдЗрдЯрдо рд╣реИ, рдХреНрдпреЛрдВрдХрд┐:

рд▓реВрдк рдХреЛ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд░рдиреЗ рдХреЗ рд╕рдВрднрд╛рд╡рд┐рдд рддрд░реАрдХреЗ


рдкреНрд░рддреНрдпреЗрдХ рдкреНрд░рддрд┐рднрд╛рдЧреА рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрд▓рдЧ рдзрд╛рд░рд╛ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рддреБрд░рдВрдд рдореЗрд░реЗ рджрд┐рдорд╛рдЧ рдореЗрдВ рдЖрддрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдпрд╣ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдЗрд╖реНрдЯрддрдо рдирд╣реАрдВ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐:

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

рдЦреЗрд▓ рд╕реНрдЯреНрд░реАрдо


рдкреНрд░рд╡рд╛рд╣ рд╕рдВрд░рдЪрдирд╛ рдХреЛ рдЪрд┐рддреНрд░ рдореЗрдВ рджрд┐рдЦрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ:
рдЫрд╡рд┐

рдЕрдм рд╕реНрдкрд╖реНрдЯреАрдХрд░рдг рдХреЗ рд╕рд╛рде рдПрдХ рдЫреЛрдЯрд╛ рдХреЛрдбред
рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдЖрд╡реГрддреНрддрд┐рдпреЛрдВ рдХреЛ рд╕реЗрдЯ рдХрд░реЗрдВред рдореЛрдЯреЗ рддреМрд░ рдкрд░, рдХрд┐рддрдиреЗ рдПрдордПрд╕ рдХреЛ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рддрд░реНрдХ рдХреЗ рд▓рд┐рдП рдХреЙрд▓ рдХреЗ рдмреАрдЪ рдЧреБрдЬрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рдкреНрд░рддрд┐рдкрд╛рджрди:
рдХреЙрдкреА рд╕реЛрд░реНрд╕ | HTML рдХреЙрдкреА рдХрд░реЗрдВ
  1. // рдШрдбрд╝реА: FREQ - рддрд░реНрдХ, рдПрдлрдкреАрдПрд╕ - рдкреНрд░рддрд┐рдкрд╛рджрди
  2. const int FREQ = 1000/40; // 1000 / рдПрдлрдкреАрдПрд╕
  3. const int MAX_FPS = 1000/180;


рдФрд░ рдпрд╣рд╛рдВ рдореБрдЦреНрдп рд▓реВрдк рдХреЛрдб рд╣реИ - рд╕рднреА рдкреНрд░рддрд┐рднрд╛рдЧрд┐рдпреЛрдВ рдХреЛ рдХреЙрд▓ рдХреЗ рд╕рд╛рде, рд╕рдордп рдХреА рдЬрд╛рдВрдЪ рдЖрджрд┐ред
рдХреЙрдкреА рд╕реЛрд░реНрд╕ | HTML рдХреЙрдкреА рдХрд░реЗрдВ
  1. рдЬрдмрдХрд┐ ( рд╕рдЪ )
  2. {
  3. qint64 time_cur_tick = QDateTime :: currentMSecsSinceEpoch ();
  4. int numLoops = 0 ;
  5. рдмреВрд▓ рдлреБрдЯ = рд╕рдЪ;
  6. рдЬрдмрдХрд┐ ( time_prev_tick <time_cur_tick && numLoops <MAX_LOOPS )
  7. {
  8. // рдХреЙрд▓ рд▓реЙрдЬрд┐рдХ
  9. w-> UpdateLogic ( 1 / FREQ );
  10. рд╕рдВрдЦреНрдпрд╛;
  11. рдЕрдЧрд░ ( рдлреАрдЯ )
  12. {
  13. рдлреБрдЯ = рдЭреВрдареА;
  14. last_freq = time_cur_tick;
  15. }
  16. time_prev_tick + = FREQ;
  17. // рдЕрдзрд┐рдХ рд╕рдЯреАрдХ рд╕рдордп рдХреЗ рд▓рд┐рдП time_cur_tick рдЕрдкрдбреЗрдЯ рдХрд░реЗрдВ
  18. time_cur_tick = QDateTime :: currentMSecsSinceEpoch ();
  19. }
  20. time_tmp = QDateTime :: currentMSecsSinceEpoch ();
  21. w-> SimulateConsistLogic ( (рдлреНрд▓реЛрдЯ ) ( time_tmp - last_freq ) / FREQ);
  22. time_tmp = QDateTime :: currentMSecsSinceEpoch ();
  23. рдЕрдЧрд░ ( time_tmp - time_lastrender> = MAX_FPS &&
    w-> paint_mx.tryLock ( ))
  24. {
  25. time_lastrender = time_tmp;
  26. рдлреНрд▓реЛрдЯ рдлреНрд░реАрдХ_рдмрд┐рдЯ = 0 ;
  27. рдЕрдЧрд░ ( time_tmp! = last_freq )
  28. freq_bit = ( float ) ( time_tmp - last_freq ) / FREQ;
  29. emit signalGUI ( freq_bit );
  30. w-> paint_mx.unlock ();
  31. }
  32. }


(рдиреЛрдЯ - рдпрджрд┐ рдЖрдк рд╕реНрд░реЛрдд рдХреЛрдб рдХреЛ рджреЗрдЦрддреЗ рд╣реИрдВ - рд╡рд╣рд╛рдВ рд╕рдм рдХреБрдЫ рдереЛрдбрд╝рд╛ рдФрд░ рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рд╣реИред рдкреНрд░рддрд┐ рд╕реЗрдХрдВрдб рдХреА рдЧрд┐рдирддреА рдХреЗ рд▓рд┐рдП рдПрдХ рдлреНрд░реЗрдо рд╣реИ, рдШрд┐рд╕реА рд╣реБрдИ рдЬрд╛рдирдХрд╛рд░реА рдХрд╛ рдЙрддреНрдкрд╛рджрди, рдЖрджрд┐)

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

рдпрд╣ рд╕рдм рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ


рд╣рдорд╛рд░реЗ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рддреАрди рдкреНрд░рдХрд╛рд░ рдХреА рд╡рд╕реНрддреБрдПрдБ рд╣реИрдВ:

рдЙрдирдХреЗ рд▓рд┐рдП рд╕рдВрдмрдВрдзрд┐рдд рд╡рд░реНрдЧ (CShip, CBullet, CMeteorite) рдмрдирд╛рдП рдЬрд╛рддреЗ рд╣реИрдВред рдЧреЛрд▓рд┐рдпреЛрдВ рдФрд░ рдЙрд▓реНрдХрд╛рдкрд┐рдВрдбреЛрдВ рдХреЗ рд▓рд┐рдП, QVector рднрдВрдбрд╛рд░рдг рдХрдВрдЯреЗрдирд░ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рд╣реИрдВред
рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЗрдирдкреБрдЯ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, "рдЖрдВрджреЛрд▓рди рдХреА рджрд┐рд╢рд╛" рдХрд╛ рдПрдХ рд╕рд░рдгреА рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рдерд╛ рдФрд░ рдлрд╝рдВрдХреНрд╢рди keyReleaseEvent рдФрд░ keyPressEvent рдХреЛ рдлрд┐рд░ рд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛:
keyReleaseEvent рдпрд╣ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд╛рдВрдЪрддрд╛ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рдЬрд╛рд░реА рдХреА рдЧрдИ рдХреБрдВрдЬрд┐рдпреЛрдВ рдХреА рд╕рд░рдгреА рдореЗрдВ рдХреЛрдИ рдЬрд╛рд░реА рдХреБрдВрдЬреА рд╣реИ рдФрд░ рдпрджрд┐ рдХреЛрдИ рд╣реИ рддреЛ рдЙрд╕реЗ рд╣рдЯрд╛ рджреЗрддрд╛ рд╣реИред
keyPressEvent рддрджрдиреБрд╕рд╛рд░ рджрдмрд╛рдП рдЧрдП рдХреБрдВрдЬреА рдХреЛ рджрдмрд╛рдП рдЧрдП рдХреБрдВрдЬрд┐рдпреЛрдВ рдХреЗ рд╕рд░рдгреА рдореЗрдВ рдбрд╛рд▓ рджреЗрддрд╛ рд╣реИ (рдпрджрд┐ рдпрд╣ рд╡рд╣рд╛рдВ рдирд╣реАрдВ рд╣реИ)ред рдЗрд╕ рд╕рд░рдгреА рдХрд╛ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдЦреЗрд▓ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗ рдШрдбрд╝реА рдЬрдирд░реЗрдЯрд░ рдХреЗ рдХрд╛рд░реНрдп рдореЗрдВ рд╣реЛрддрд╛ рд╣реИред рдЦреЗрд▓ рдХреА рдЧрддрд┐рдорд╛рди рд╡рд╕реНрддреБрдПрдВ рд╣реИрдВ, рдЬрд╣рд╛рдЬ рдХреА рдЧрддрд┐ рдХреЗ рджреМрд░рд╛рди рдЬрдбрд╝рддрд╛ рдХреА рдЧрдгрдирд╛, рдЙрд▓реНрдХрд╛рдкрд┐рдВрдбреЛрдВ рдХрд╛ рдирд┐рд░реНрдорд╛рдг:
рдХреЙрдкреА рд╕реЛрд░реНрд╕ | HTML рдХреЙрдкреА рдХрд░реЗрдВ
  1. рд╢реВрдиреНрдп рдореЗрдирд╡реЙрдЗрдб :: рдЕрдкрдбреЗрдЯрд▓реЙрдЧрд┐рдХ ( рдлреНрд▓реЛрдЯ рдлрд╝рд╛рдЗрдо )
  2. {
  3. рдлреНрд▓реЛрдЯ рдЧрддрд┐ = 2 ;
  4. for ( int i = 0; рдореИрдВ <m_dir.size ( ); i ++)
  5. {
  6. рдЕрдЧрд░ ( m_dir [i] == MainWindow :: рдпреВрдкреА )
  7. рдЕрднрд┐рдиреЗрддрд╛ 1. рдЕрдиреНрдпрд╛рдп рдирд┐рд░реНрджреЗрд╢ ( QVector2D (0, -speed ));
  8. рдЕрдЧрд░ ( m_dir [i] == MainWindow :: DOWN )
  9. рдЕрднрд┐рдиреЗрддрд╛ 1. рдЕрдиреНрдпрд╛рдп рдирд┐рд░реНрджреЗрд╢ ( QVector2D (0, рдЧрддрд┐ ));
  10. рдЕрдЧрд░ ( m_dir [i] == MainWindow :: LEFT )
  11. рдЕрднрд┐рдиреЗрддрд╛ 1. рдЕрдиреНрдпрд╛рдп рдирд┐рд░реНрджреЗрд╢ ( QVector2D ( -рдПрд╕рдкреАрдб, 0 ));
  12. рдЕрдЧрд░ ( m_dir [i] == MainWindow :: RIGHT )
  13. рдЕрднрд┐рдиреЗрддрд╛ 1. рдЕрдиреНрдпрд╛рдп рдирд┐рд░реНрджреЗрд╢ ( QVector2D (рдЧрддрд┐, 0 ));
  14. рдЕрдЧрд░ ( m_dir [i] == MainWindow :: SPACE &&
    m_allowbullet == 0 )
  15. {
  16. m_bullets.push_back ( CBullet (actor1.getX ( ), actor1.getY () - 1 , QVector2D ( 0, -15 )));
  17. qDebug (QString ( "рдмреБрд▓реЗрдЯ рдЬреЛрдбрд╝реА рдЧрдИред Pos% 1" ) .arg ( m_bullets.size ( ) - 1 ) .toAscii ());
  18. m_allowbullet = 5 ;
  19. рдирд┐рдХрд╛рд▓ рджрд┐рдпрд╛ ++;
  20. }
  21. }
  22. actor1.step рджрд┐рд╢рд╛ ();
  23. рдмреВрд▓ dir_touched = false;
  24. for ( int i = 0; рдореИрдВ <m_dir.size ( ); i ++)
  25. {
  26. рдЕрдЧрд░ ( m_dir [i]! = MainWindow :: SPACE )
  27. {
  28. dir_touched = true;
  29. рддреЛрдбрд╝;
  30. }
  31. }
  32. рдЕрдЧрд░ ( dir_touched )
  33. {
  34. m_allowmove = 0 ;
  35. рдлреНрд▓реЛрдЯ рдЬрдбрд╝рддрд╛ = реж ред 5 ;
  36. рдЕрдЧрд░ ( рдЕрднрд┐рдиреЗрддрд╛ 1 .getSpeed тАЛтАЛ( ) < 0 ред 5 )
  37. рдЬрдбрд╝рддрд╛ = 1 ;
  38. actor1.adjustSpeed тАЛтАЛ( рдЬрдбрд╝рддрд╛ );
  39. }
  40. for ( int i = 0; рдореИрдВ <m_bullets.size ( ); i ++)
  41. m_bullets [ i ] .step рджрд┐рд╢рд╛ ();
  42. рдХреЗ рд▓рд┐рдП ( int x = 0; x <m_enemy1.size ( ); x ++)
  43. m_enemy1 [x] .step рджрд┐рд╢рд╛ ();
  44. CheckGameRules ();
  45. рдЕрдЧрд░ ( m_enemy1.size ( ) <max_enemy)
  46. {
  47. CMeteorite weather ( рдордХрд░) (field_ident + CMeteorite :: weather_size,
    field_ident + field_w - CMeteorite :: weather_size ),
  48. -рдореГрдВрдж ( 0, 20 ),
  49. QVector2D ( 0, 1 ));
  50. рдЬрдмрдХрд┐ ( рд╕рдЪ )
  51. {
  52. int i = 0 ;
  53. рдЬрдмрдХрд┐ ( i <m_enemy1.size ( ))
  54. {
  55. рдЕрдЧрд░ ( weather.getBoundsT ) ( ) .intersects ( m_enemy1 [i] .getBoundsT ( ))
  56. рддреЛрдбрд╝;
  57. рдореИрдВ ++;
  58. }
  59. рдЕрдЧрд░ ( i == m_enemy1.size ( ))
  60. рддреЛрдбрд╝;
  61. рдореМрд╕рдо = рд╕реАрдПрдордЯреЛрд░рд╛рдЗрдЯ ( рдордХрд░ (1, 100 ), -рдордВрджреНрд░ ( 0, 20 ),
  62. QVector2D ( 0, 1 ));
  63. }
  64. m_enemy1.push_back ( рдореМрд╕рдо );
  65. }
  66. UpdateBullet ();
  67. }

CheckGameRules рдлрд╝рдВрдХреНрд╢рди рдЧреЗрдо рдХреЗ рдирд┐рдпрдореЛрдВ рдХреА рдЬрд╛рдВрдЪ рдХрд░рддрд╛ рд╣реИ - рдЬреЛ рдХрд┐рд╕реА рдореЗрдВ рджреБрд░реНрдШрдЯрдирд╛рдЧреНрд░рд╕реНрдд рд╣реЛ рдЧрдпрд╛, рдЬреЛ рдЙрд╕рд╕реЗ рдЖрдЧреЗ рдирд┐рдХрд▓ рдЧрдпрд╛, рдФрд░ рдЗрд╕реА рддрд░рд╣ред рд╡реИрд╕реЗ, 2D рдореЗрдВ рдпрд╣ QPolygon, QRect classes рдФрд░ рдЙрдирдХреЗ рдЬреИрд╕реЗ рдЕрдиреНрдп рд▓реЛрдЧреЛрдВ рдХреЗ рдХрд╛рд░реНрдпреЛрдВ рджреНрд╡рд╛рд░рд╛ рдмрд╣реБрдд рдЖрд╕рд╛рдиреА рд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рдХреЙрдкреА рд╕реЛрд░реНрд╕ | HTML рдХреЙрдкреА рдХрд░реЗрдВ
  1. рд╢реВрдиреНрдп рдореЗрдирд╡реЙрдЗрдб :: рдЪреЗрдХрдЧреИрдоRules ( рдХреЙрдиреНрд╕реНрдЯ рдлреНрд▓реЛрдЯ рдлрд╝рд╛рдЗрдо )
  2. {
  3. рдлрд╝реАрд▓реНрдб рдлрд╝реАрд▓реНрдб рд╕рд╣реА рдХрд░реЗрдВ ( field_ident, field_ident,
    field_w,
    field_h );
  4. for ( int i = 0; рдореИрдВ <m_bullets.size ( ); i ++)
  5. {
  6. CBullet blt = m_bullets [ i ];
  7. рдлреНрд▓реЛрдЯ tx = 0 , ty = 0 ;
  8. blt.getTickCoords ( ftime, tx, ty );
  9. blt.setX ( tx );
  10. blt.setY ( ty );
  11. if ( field_rect.contains (m_bullets [i] .getX ( ), m_bul] [ i ] .getY ())ред
  12. {
  13. m_bullets.remove (i--);
  14. }
  15. рдЕрдиреНрдпрдерд╛
  16. {
  17. for ( int j = 0; j <m_enemy1.size ( ); j ++)
  18. {
  19. CMeteorite enm = m_enemy1 [j];
  20. рдлреНрд▓реЛрдЯ рдПрдЯреИрдХреНрд╕ = 0 , рдИрдЯреАрдЖрдИ = 0 ;
  21. enm.getTickCoords ( ftime, etx, ety );
  22. enm.setX ( etx );
  23. enm.setY ( ety );
  24. рдЕрдЧрд░ ( blt.checkCollision (enm.getBodyT ( )))
  25. {
  26. m_enemy1.remove ( j-- );
  27. m_bullets.remove (i--);
  28. рд╕реНрдХреЛрд░ ++;
  29. рддреЛрдбрд╝;
  30. }
  31. } // рдХреЗ рд▓рд┐рдП
  32. }
  33. }
  34. for ( int j = 0; j <m_enemy1.size ( ); j ++)
  35. {
  36. CMeteorite enm = m_enemy1 [j];
  37. рдЕрдЧрд░ ( field_rect.contains (enm.getBoundsT ( )) &&
  38. field_rectред bottomRight () .y () <enm.getBoundsT ()ред topLeft () .y ())
  39. {
  40. m_enemy1.remove ( j-- );
  41. }
  42. рдЕрдЧрд░ ( рдЕрднрд┐рдиреЗрддрд╛ 1 рдЪреЗрдХрдХреЙрд▓рд┐рд╢рди (enm.getBodyT ( )))
  43. {
  44. m_enemy1.remove ( j-- );
  45. рд╣рд┐рдЯреНрд╕ ++;
  46. }
  47. }
  48. рдЕрдЧрд░ ( field_rect.contains (actor1.getBoundsT ( ), true))
  49. {
  50. рдЬрдмрдХрд┐ ( field_rect.x ( )> = actor1.getBoundsT ()ред рдмрд╛рдПрдБ ()
  51. actor1.setX ( actor1.getX ( ) + 1 );
  52. рдЬрдмрдХрд┐ ( field_rect.x ( ) * 2 + field_rectред рдЪреМрдбрд╝рд╛рдИ () <= actor1.getBoundsT ()ред x () + actor1.getBoundsT ()ред рдЪреМрдбрд╝рд╛рдИ ()ред
  53. actor1.setX ( actor1.getX ( ) - 1 );
  54. рдЬрдмрдХрд┐ ( field_rect.top ( )> = actor1.getBoundsT ()ред рд╢реАрд░реНрд╖ ()
  55. actor1.setY ( actor1.getY ( ) + 1 );
  56. рдЬрдмрдХрд┐ ( field_rect.y ( ) * 2 + field_rect. height () <= actor1.getBoundsT ()ред y () + actor1.getBoundsT () ( рдКрдВрдЪрд╛рдИ ) ()ред
  57. actor1.setY ( actor1.getY ( ) - 1 );
  58. actor1.s рд╢реАрд░реНрд╖ ();
  59. }
  60. }


рддрджрдиреБрд╕рд╛рд░, рдирд┐рд░рдВрддрд░рддрд╛ рдХреЗ рд╕рд┐рдореНрдпреБрд▓реЗрдЯрд░ рдХрд╛ рдЖрд╣реНрд╡рд╛рди рдЕрдкрдорд╛рди рдХреЗ рд▓рд┐рдП рд╕рд░рд▓ рд╣реИред рдмрд╕ рдПрдХ рдЫреЛрдЯреЗ рд╕реЗ рдХрджрдо рдХреЗ рд╕рд╛рде, рд╣рдо рдЦреЗрд▓ рддрд░реНрдХ рдХреА рдЬрд╛рдБрдЪ рдХрд░рддреЗ рд╣реИрдВ:
рдХреЙрдкреА рд╕реЛрд░реНрд╕ | HTML рдХреЙрдкреА рдХрд░реЗрдВ
  1. рд╢реВрдиреНрдп рдореЗрдирд╡реЙрдЗрдб :: SimulateConsistLogic ( рдлреНрд▓реЛрдЯ рдлрд╝рд╛рдЗрдо )
  2. {
  3. рдХреЗ рд▓рд┐рдП ( рдлреНрд▓реЛрдЯ рдмреАрдЯреА = 0; рдмреАрдЯреА <рдлрд╝рд╛рдЗрдо; рдмреАрдЯреА = рдмреАрдЯреА + 0.1 )
  4. {
  5. CheckGameRules ( bt );
  6. }
  7. }


рд░реЗрдВрдбрд░рд┐рдВрдЧ рдЧреЗрдо рдлрд╝реАрд▓реНрдб рдХреЛ рдбреНрд░реЙ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЧреЗрдо рдЬрдирд░реЗрдЯрд░ рдШрдбрд╝реА рдХреЗ рдЕрдВрддрд┐рдо рдХреЙрд▓ рд╕реЗ рд╡рд░реНрддрдорд╛рди рдЗрдВрдбреЗрдВрдЯреЗрд╢рди рдХреЗ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд╕рд╛рде рд╕рднреА рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рдХреЗ рдбреНрд░реЙ () рдХреЙрд▓ рдХрд░рддрд╛ рд╣реИред рд╕реЗрд╡рд╛ рдХреА рдЬрд╛рдирдХрд╛рд░реА рдХрд╛ рдкреНрд▓рд╕ рдЙрддреНрдкрд╛рджрди:
рдХреЙрдкреА рд╕реЛрд░реНрд╕ | HTML рдХреЙрдкреА рдХрд░реЗрдВ
  1. рд╢реВрдиреНрдп рдореЗрдирд╡реВрдб :: рд░реЗрдВрдбрд░ ()
  2. {
  3. QPainter qpainter ( рдпрд╣ );
  4. const int bgw = 2 ;
  5. qpainter.setPen ( QPen (Qt :: black, bgw ));
  6. qpainter.setBrush ( QBrush (Qt :: darkGray ));
  7. qpainter.drawRect ( field_ident, field_ident,
    field_w + field_ident,
    field_h + field_ident );
  8. for ( int i = 0; рдореИрдВ <m_bullets.size ( ); i ++)
  9. {
  10. CBullet blt = m_bullets [ i ];
  11. blt.Draw ( qpainter, freq_bit );
  12. }
  13. for ( int i = 0; рдореИрдВ <m_enemy1.size ( ); i ++)
  14. {
  15. CMeteorite enm = m_enemy1 [ i ];
  16. enm.Draw ( qpainter, freq_bit );
  17. }
  18. actor1.Draw ( рдХреНрдпреВрдкреИрдВрдЯрд░, рдлреНрд░реАрдХ_рдмрд┐рдЯ );
  19. рдХреНрдпреВрдкреНрд▓реЗрдЯ рдкрд╛рд▓;
  20. qpainter.setBrush ( pal.brush (QPalette :: Window ));
  21. qpainter.setPen ( QPen (pal.color (QPalette :: Window ), 1 ));
  22. qpainter.drawRect ( field_ident - bgw / 2, 0,
    field_w + field_ident + bgw / 2,
    field_ident - bgw );
  23. qpainter.setPen ( QPen (Qt :: black, bgw ));
  24. qpainter.setBrush ( QBrush (Qt :: darkGray, Qt :: NoBrush ));
  25. qpainter.drawRect ( field_ident, field_ident,
    field_w + field_ident,
    field_h + field_ident );
  26. ui-> label_freq-> setText (QString ("% 1" ) .arg ( freq ) .toAscii ());
  27. ui-> label_fps-> setText (QString ("% 1" ) .arg ( рдПрдлрдкреАрдПрд╕ ) .toAscii ());
  28. ui-> label_speed-> setText (QString ("% 1" ) .arg ( actor1.getSpeed тАЛтАЛ( )) .toAscii ());
  29. ui-> label_score-> setText (QString ("% 1" ) .arg ( рд╕реНрдХреЛрд░ ) .toAscii ());
  30. ui-> label_fired-> setText (QString ("% 1" ) .arg ( рдирд┐рдХрд╛рд▓ рджрд┐рдпрд╛ рдЧрдпрд╛ ) .toAscii ());
  31. ui-> label_hits-> setText (QString ("% 1" ) .arg ( рд╣рд┐рдЯреНрд╕ ) .toAscii ());
  32. }


рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдмрд╛рдХреА рддреБрдЪреНрдЫ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рд╣реИред рдЖрд╡реЗрджрди рдХрдВрдХрд╛рд▓ рд╡рд┐рдЪреНрдЫрд┐рдиреНрди рд╣реИ, рдФрд░ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╡рд┐рд╡рд░рдг рд╕рдВрд▓рдЧреНрди рд╕реНрд░реЛрдд рдХреЛрдб рдореЗрдВ рдкрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк - рдореБрдЭреЗ рдЬреЛ рдорд┐рд▓рд╛, рдЙрд╕рдХреА рдЙрдкрд╕реНрдерд┐рддрд┐:
рдЫрд╡рд┐
рдпрд╣рд╛рдВ рдХреЗ рд╕реВрддреНрд░ рд╣рдо рддреАрд░ рдХреЗ рд╕рд╛рде рдЙрдбрд╝рддреЗ рд╣реИрдВ, рдПрдХ рд╕реНрдерд╛рди рдХреЗ рд╕рд╛рде рд╢реВрдЯ рдХрд░рддреЗ рд╣реИрдВред
рдЧреАрдереВрдм рдкрд░ рд╕реВрддреНрд░ ред

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


All Articles