Advertisement
tamtamtamtam

snake2

Mar 18th, 2017
85
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 7.00 KB | None | 0 0
  1. #include "graphics.hpp"
  2. #include <vector>
  3. #include <time.h>
  4. #include <iostream>
  5. #include <cstdlib>
  6. #include <math.h>
  7. #include <sstream>
  8.  
  9. using namespace genv;
  10. using namespace std;
  11.  
  12.  
  13.  
  14. void torles()
  15. {
  16.     gout << move_to(0,0) << color(255,255,255) << box(600,600) << move_to(5,5) <<
  17.             color(0,0,0) << box(589,589) << color(255,255,255) << move_to(150,295) << box(300,10);
  18. }
  19.  
  20. struct fal
  21. {
  22.  
  23. private:
  24.     int fx1;
  25.     int fy1;
  26.     int fx2;
  27.     int fy2;
  28.  
  29. public:
  30.     fal():
  31.         fx1(150),
  32.         fy1(295),
  33.         fx2(450),
  34.         fy2(305)
  35.     {}
  36.  
  37.     bool nekimegy(int x, int y)
  38.     {
  39.         bool neki = false;
  40.         if(x >= fx1 && x <= fx2 && y >= fy1 && y <= fy2)
  41.         {
  42.             neki = true;
  43.         }
  44.         return neki;
  45.     }
  46.  
  47. };
  48.  
  49. void vege(int a)
  50. {
  51.  
  52.     string b;
  53.     stringstream ss;
  54.     ss << a;
  55.     ss >> b;
  56.  
  57.     gout.load_font("LiberationSans-Regular.ttf", 25, 15);
  58.     gout << move_to(245,175) << color(255,255,255) << text("GAME OVER");
  59.     gout << move_to(270, 220) << text("Score: ") << text(b);
  60.     gout.load_font("LiberationSans-Regular.ttf", 14, 10);
  61.     gout << move_to(200, 260) << text("(press ESC to quit, ENTER to play again)");
  62. }
  63.  
  64. struct pont
  65. {
  66.  
  67.     int px;
  68.     int py;
  69.  
  70. public:
  71.     pont():
  72.         px((rand()%582)+7),
  73.         py((rand()%582)+7)
  74.     {}
  75.  
  76.     void kiir(pont p)
  77.     {
  78.  
  79.         for (int i=-4; i<=4; i++)
  80.         {
  81.  
  82.             for (int j=-4; j<=4; j++)
  83.             {
  84.  
  85.                 if (i*i + j*j < 16)
  86.                 {
  87.  
  88.                     gout << move_to(p.px+i, p.py+j) << color(255,0,0) << box(1,1);
  89.                 }
  90.             }
  91.         }
  92.     }
  93.  
  94.     bool bennevan(int x, int y, pont p)
  95.     {
  96.  
  97.         bool benne = false;
  98.  
  99.         if((x-p.px)*(x-p.px) + (y-p.py)*(y-p.py) <= 16 || (x+10-p.px)*(x+10-p.px) + (y+10-p.py)*(y+10-p.py) <= 16 ||
  100.            (x+5-p.px)*(x+5-p.px) + (y+5-p.py)*(y+5-p.py) <= 16 || (x-p.px)*(x-p.px) + (y+10-p.py)*(y+10-p.py) <= 16 ||
  101.            (x+10-p.px)*(x+10-p.px) + (y-p.py)*(y-p.py) <= 16)
  102.         {
  103.  
  104.             benne = true;
  105.         }
  106.  
  107.         return benne;
  108.     }
  109.  
  110.     int random(pont p)
  111.     {
  112.  
  113.         p.px = (rand()%582)+7;
  114.         p.py = (rand()%582)+7;
  115.  
  116.     }
  117.  
  118. };
  119.  
  120. struct kigyo
  121. {
  122.  
  123.     int x;
  124.     int y;
  125.  
  126. public:
  127.     kigyo():
  128.         x(100),
  129.         y(100)
  130.     {}
  131.  
  132.     void mozgat(int a, int b)
  133.     {
  134.         gout << color(255,255,255) << move_to(x+a,y+b) << box(10,10);
  135.     }
  136.  
  137.     void rajzol(int v1, int v2)
  138.     {
  139.         gout << color(255,255,255) << move_to(v1, v2) << box(10,10);
  140.     }
  141.  
  142.     void kovet(kigyo k)
  143.     {
  144.         double dx = k.x-x;
  145.         double dy = k.y-y;
  146.         double norma = sqrt(dx*dx+dy*dy);
  147.         x+=dx/norma;
  148.         y+=dy/norma;
  149.     }
  150.     kigyo(double _x, double _y): x(_x), y(_y){}
  151. };
  152.  
  153. int main()
  154. {
  155.     gout.open(600,600);
  156.     event ev;
  157.     int menu=1;
  158.  
  159.     gout << color(255,0,0) << move_to(200,150) << box(200,50);
  160.     gout << move_to(280,175) << color(0,0,0) << text("PLAY");
  161.     gout << color(0,0,0) << move_to(200,250) << box(200,50);
  162.     gout << move_to(280,275) << color(255,255,255) << text("EXIT");
  163.  
  164.     while(gin >> ev)
  165.     {
  166.  
  167.         if(ev.keycode == key_escape)
  168.         {
  169.             return 0;
  170.         }
  171.  
  172.         if(ev.keycode == key_down)
  173.         {
  174.  
  175.             menu=2;
  176.  
  177.             if(ev.keycode == key_enter && menu == 2)
  178.             {
  179.                 return 0;
  180.             }
  181.             gout << color(0,0,0) << move_to(0,0) << box(600,600);
  182.             gout << color(0,0,0) << move_to(200,150) << box(200,50);
  183.             gout << move_to(280,175) << color(255,255,255) << text("PLAY");
  184.             gout << color(255,0,0) << move_to(200,250) << box(200,50);
  185.             gout << move_to(280,275) << color(0,0,0) << text("EXIT");
  186.         }
  187.  
  188.         if(ev.keycode == key_up)
  189.         {
  190.  
  191.             menu=1;
  192.             if(ev.keycode == key_enter && menu == 1)
  193.             {
  194.  
  195.             }
  196.             gout << color(0,0,0) << move_to(0,0) << box(600,600);
  197.             gout << color(255,0,0) << move_to(200,150) << box(200,50);
  198.             gout << move_to(280,175) << color(0,0,0) << text("PLAY");
  199.             gout << color(0,0,0) << move_to(200,250) << box(200,50);
  200.             gout << move_to(280,275) << color(255,255,255) << text("EXIT");
  201.         }
  202.  
  203.         if(ev.keycode == key_enter && menu == 1)
  204.         {
  205.  
  206.             gin.timer(10);
  207.             srand(time(0));
  208.             int score = 0;
  209.  
  210.             vector<kigyo> v;
  211.             kigyo k;
  212.             v.push_back(k);
  213.  
  214.             int a = 0;
  215.             int b = 1;
  216.  
  217.             pont p;
  218.             fal f;
  219.  
  220.             while(gin >> ev)
  221.             {
  222.  
  223.                 if(ev.keycode == key_escape)
  224.                 {
  225.                     return 0;
  226.                 }
  227.  
  228.                 if(ev.keycode == key_right)
  229.                 {
  230.                     a=1;
  231.                     b=0;
  232.                 }
  233.  
  234.                 if(ev.keycode == key_left)
  235.                 {
  236.                     a=-1;
  237.                     b=0;
  238.                 }
  239.  
  240.                 if(ev.keycode == key_down)
  241.                 {
  242.                     a=0;
  243.                     b=1;
  244.                 }
  245.  
  246.                 if(ev.keycode == key_up)
  247.                 {
  248.                     a=0;
  249.                     b=-1;
  250.                 }
  251.  
  252.                 for(int i = 0; i < v.size(); i++)
  253.                 {
  254.                 kigyo[i].kovet(v[(i+1)%v.size()]);
  255.                 kigyo[i].rajzol();
  256.                 }
  257.  
  258.                 if(p.bennevan(v[0].x, v[0].y, p))
  259.                 {
  260.                     score = score+100;
  261.                     torles();
  262.                     p.px = (rand()%582)+7;
  263.                     p.py = (rand()%582)+7;
  264.  
  265.                     v.push_back(k);
  266.                 }
  267.  
  268.                 if(ev.type == ev_timer)
  269.                 {
  270.  
  271.                     torles();
  272.  
  273.                     v[0].x=v[0].x+a;
  274.                     v[0].y=v[0].y+b;
  275.                     v[0].mozgat(a,b);
  276.  
  277.                     for(int o=1; o<=v.size(); o++)
  278.                     {
  279.                         v[o].x=v[o-1].x-10*a;
  280.                         v[o].y=v[o-1].y-10*b;
  281.                         v[o].rajzol(v[o-1].x, v[o-1].y);
  282.                     }
  283.  
  284.                     if(v[0].x >= 586 || v[0].y >= 586 || v[0].x <= 4 || v[0].y <= 4)
  285.                     {
  286.                         gout <<  color(0,0,0) << move_to(0,0) << box(600,600);
  287.                         vege(score);
  288.                         break;
  289.                     }
  290.  
  291.                     if(f.nekimegy(v[0].x, v[0].y))
  292.                     {
  293.                         gout <<  color(0,0,0) << move_to(0,0) << box(600,600);
  294.                         vege(score);
  295.                         break;
  296.                     }
  297.  
  298.                     p.kiir(p);
  299.  
  300.                 }
  301.  
  302.                 gout << refresh;
  303.  
  304.             }
  305.  
  306.         }
  307.  
  308.         if(ev.keycode == key_enter && menu == 2)
  309.         {
  310.             return 0;
  311.         }
  312.  
  313.         gout << refresh;
  314.  
  315.     }
  316.     return 0;
  317. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement