Advertisement
EvgeniiKraaaaaaaav

test&game£start

Mar 12th, 2019
164
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 5.39 KB | None | 0 0
  1. //https://vk.com/evgenykravchenko0
  2.  
  3.                 ___                                        ___                   ___    
  4.                /  /\                  ___                 /  /\                 /  /\    
  5.               /  /:/_                /__/\               /  /:/_               /  /:/_  
  6.              /  /:/ /\               \  \:\             /  /:/ /\             /  /:/ /\  
  7.             /  /:/ /:/_               \  \:\           /  /:/_/::\           /  /:/ /:/_
  8.            /__/:/ /:/ /\          ___  \__\:\         /__/:/__\/\:\         /__/:/ /:/ /\
  9.            \  \:\/:/ /:/         /__/\ |  |:|         \  \:\ /~~/:/         \  \:\/:/ /:/
  10.             \  \::/ /:/          \  \:\|  |:|          \  \:\  /:/           \  \::/ /:/
  11.              \  \:\/:/            \  \:\__|:|           \  \:\/:/             \  \:\/:/  
  12.               \  \::/              \__\::::/             \  \::/               \  \::/  
  13.                \__\/                   ~~~~               \__\/                 \__\/    
  14.                             ___                                            
  15.                            /__/\                ___                 ___    
  16.                            \  \:\              /  /\               /  /\    
  17.                             \  \:\            /  /:/              /  /:/    
  18.                         _____\__\:\          /__/::\             /__/::\    
  19.                        /__/::::::::\         \__\/\:\__          \__\/\:\__
  20.                        \  \:\~~\~~\/            \  \:\/\            \  \:\/\
  21.                         \  \:\  ~~~              \__\::/             \__\::/
  22.                          \  \:\                  /__/:/              /__/:/
  23.                           \  \:\                 \__\/               \__\/  
  24.                            \__\/                      
  25.  
  26. #include <iostream>
  27. #include <whycpp/application_listener.h>
  28. #include <whycpp/palette.h>
  29. #include <whycpp/drawing.h>
  30. #include <whycpp/buttons.h>
  31. #include <whycpp/input.h>
  32. #include <whycpp/whycpp.h>
  33. #include <whycpp/time.h>
  34. #include <whycpp/lifecycle.h>
  35.  
  36. using namespace std;
  37.  
  38. class Hero {
  39. public:
  40.     float x;
  41.     float y;
  42.     int width;
  43.     int height;
  44.     float speedX = 1;
  45.     float speedY = 1;
  46.  
  47.     const RGBA color = PALETTE[3];
  48.  
  49.     Hero(int x, int y, int width, int height) : x(x), y(y), width(width), height(height) {}
  50.  
  51.     void Draw(Context &ctx) {
  52.       DrawRect(ctx, x , y , 10, 10, color);
  53.     }
  54.     void MoveRight(Context &ctx) {
  55.       if ( x < GetDisplayWidth(ctx) - 11)
  56.         x += speedX / 4;
  57.     }
  58.     void MoveLeft(Context &ctx) {
  59.       if (x > 0)
  60.         x -= speedX / 4;
  61.     }
  62.     void MoveUP(Context &ctx) {
  63.       if (y  > 0)
  64.       y -= speedY / 4;
  65.     }
  66.     void MoveDown(Context &ctx) {
  67.       if (y < GetDisplayHeight(ctx) - 11)
  68.       y += speedY / 4;
  69.     }
  70. };
  71.  
  72. class Ball {
  73. public:
  74.     bool isGameOver;
  75.     const shared_ptr<Hero> hero;
  76.  
  77.     float x;
  78.     float y;
  79.     int radius = 4;
  80.     const RGBA color = PALETTE[13];
  81.  
  82.     float speedX;
  83.     float speedY;
  84.  
  85.     Ball(int x, int y, int radius, float speedX, float speedY, const shared_ptr<Hero> hero)
  86.             : hero(hero), x(x), y(y), radius(radius), speedX(speedX), speedY(speedY) {}
  87.  
  88.     void Draw(Context &ctx) {
  89.       DrawRectFill(ctx, static_cast<int>(x - radius / 2), static_cast<int>(y - radius / 2), radius, radius, color);
  90.     }
  91.  
  92.     void Move(Context &ctx) {
  93.       CheckCollisions(ctx, x + speedX, y + speedY);
  94.       x += speedX;
  95.       y += speedY;
  96.     }
  97. private:
  98.     void CheckCollisions(Context &ctx, float _x, float _y) {
  99.       if (_y > GetDisplayHeight(ctx)) {
  100.         onGameOver();
  101.       }
  102.  
  103.       //Walls
  104.       if (_x < 0 || _x > GetDisplayWidth(ctx)) {
  105.         speedX *= -1;
  106.       }
  107.       if (_y < 0 || _y > GetDisplayHeight(ctx)) {
  108.         speedY *= -1;
  109.       }
  110.  
  111.       //Hero
  112.       auto hitY = (hero->y - hero->height / 2 - _y) < 0;
  113.       auto lx = hero->x - hero->width / 2;
  114.       auto rx = hero->x + hero->width / 2;
  115.       auto hitX = (lx < _x) && (rx > _x);
  116.  
  117.       if (hitX && hitY) {
  118.         speedY *= -1;
  119.       }
  120.     }
  121.  
  122.     void onGameOver() {
  123.       isGameOver = true;
  124.     }
  125. };
  126.  
  127. class Game : public ApplicationListener {
  128. public:
  129.     shared_ptr<Hero> hero;
  130.     shared_ptr<Ball> ball;
  131.     int ditch = 0;
  132.     bool configured = false;
  133.  
  134.     void OnCreate(Context &ctx) override {
  135.       auto w = GetDisplayWidth(ctx);
  136.       auto h = GetDisplayHeight(ctx);
  137.  
  138.       hero = make_shared<Hero>(w / 2, h - 10, 50, 6);
  139.       ball = make_shared<Ball>(w / 2, h / 2, 5, 0, 0, hero);
  140.     }
  141.  
  142.     void OnRender(Context &ctx) override {
  143.       if (!configured && IsClicked(ctx, Button::KEY_SPACE)) {
  144.         configured = true;
  145.         ball->speedX = 0.2;
  146.         ball->speedY = 0.2;
  147.       }
  148.  
  149.       if (ball->isGameOver) {
  150.         DrawClearScreen(ctx, PALETTE[++ditch % PALETTE_LEN]);
  151.         ExitApp(ctx);
  152.         return;
  153.       }
  154.  
  155.       DrawClearScreen(ctx, {255, 255, 255, 0});
  156.       hero->Draw(ctx);
  157.       if (IsPressed(ctx, Button::KEY_RIGHT)) {
  158.         hero->MoveRight(ctx);
  159.       }
  160.       if (IsPressed(ctx, Button::KEY_LEFT)) {
  161.         hero->MoveLeft(ctx);
  162.       }
  163.       if (IsPressed(ctx, Button::KEY_UP)) {
  164.         hero->MoveUP(ctx);
  165.       }
  166.       if (IsPressed(ctx, Button::KEY_DOWN)) {
  167.         hero->MoveDown(ctx);
  168.       }
  169.  
  170.       ball->Draw(ctx);
  171.       ball->Move(ctx);
  172.     }
  173. };
  174.  
  175. int main() {
  176.   RunApp<Game>();
  177. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement