BHXSpecter

Lightcycle First Attempt (Unfinished)

Aug 12th, 2013
150
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 6.99 KB | None | 0 0
  1. #include <allegro5/allegro.h>
  2. #include <allegro5/allegro_primitives.h>
  3. #include <iostream>
  4. #include <vector>
  5.  
  6. using namespace std;
  7.  
  8. struct Cycle
  9. {
  10.     int x, y;
  11.     int r, g, b;
  12. };
  13.  
  14. const int SCREEN_W = 640;
  15. const int SCREEN_H = 480;
  16. const double FPS = 60.0;
  17. const int BXSTART = (SCREEN_W / 2) - 10;
  18. const int RXSTART = (SCREEN_W / 2) + 10;
  19. const int CYSTART = SCREEN_H / 2;
  20. const int DVEL = 1;
  21.  
  22. enum MYKEYS{ KEY_A, KEY_S, KEY_W, KEY_D, KEY_UP, KEY_DOWN, KEY_LEFT, KEY_RIGHT };
  23.  
  24. int main()
  25. {
  26.     int fps = 0, fps_accum = 0;
  27.     double fps_time = 0.0;
  28.  
  29.     Cycle blueCycle;
  30.     Cycle redCycle;
  31.  
  32.     blueCycle.x = BXSTART;
  33.     redCycle.x = RXSTART;
  34.  
  35.     blueCycle.y = CYSTART;
  36.     redCycle.y = CYSTART;
  37.  
  38.     blueCycle.r = 0;
  39.     blueCycle.g = 0;
  40.     blueCycle.b = 255;
  41.  
  42.     redCycle.r = 255;
  43.     redCycle.g = 0;
  44.     redCycle.b = 0;
  45.  
  46.     int redWall[SCREEN_W][SCREEN_H] = {0};
  47.     int blueWall[SCREEN_W][SCREEN_H] = {0};
  48.  
  49.     ALLEGRO_DISPLAY *display = NULL;
  50.     ALLEGRO_TIMER *timer = NULL;
  51.     ALLEGRO_EVENT_QUEUE *event_queue = NULL;
  52.  
  53.     bool key[8] = { false, false, false, false, false, false, false, false };
  54.     bool redraw = true;
  55.     bool doexit = false;
  56.  
  57.     al_init();
  58.     al_install_keyboard();
  59.     al_init_primitives_addon();
  60.     timer = al_create_timer(1.0 / FPS);
  61.     display = al_create_display(SCREEN_W, SCREEN_H);
  62.     event_queue = al_create_event_queue();
  63.  
  64.     al_register_event_source(event_queue, al_get_display_event_source(display));
  65.     al_register_event_source(event_queue, al_get_timer_event_source(timer));
  66.     al_register_event_source(event_queue, al_get_keyboard_event_source());
  67.  
  68.     al_clear_to_color(al_map_rgb(0, 0, 0));
  69.     al_flip_display();
  70.     al_start_timer(timer);
  71.  
  72.     while(!doexit)
  73.     {
  74.         ALLEGRO_EVENT ev;
  75.         al_wait_for_event(event_queue, &ev);
  76.  
  77.         if(ev.type == ALLEGRO_EVENT_TIMER)
  78.         {
  79.             redraw = true;
  80.             // logic goes here
  81.             if(key[KEY_A])
  82.             {
  83.                 blueCycle.x -= DVEL;
  84.  
  85.             }
  86.             if(key[KEY_D])
  87.             {
  88.                 blueCycle.x += DVEL;
  89.             }
  90.             if(key[KEY_W])
  91.             {
  92.                 blueCycle.y -= DVEL;
  93.             }
  94.             if(key[KEY_S])
  95.             {
  96.                 blueCycle.y += DVEL;
  97.             }
  98.             if(key[KEY_LEFT])
  99.             {
  100.                 redCycle.x -= DVEL;
  101.             }
  102.             if(key[KEY_RIGHT])
  103.             {
  104.                 redCycle.x += DVEL;
  105.             }
  106.             if(key[KEY_UP])
  107.             {
  108.                 redCycle.y -= DVEL;
  109.             }
  110.             if(key[KEY_DOWN])
  111.             {
  112.                 redCycle.y += DVEL;
  113.             }
  114.  
  115.             redWall[redCycle.x][redCycle.y] = 1;
  116.             blueWall[blueCycle.x][blueCycle.y] = 1;
  117.  
  118.             if(redWall[blueCycle.x][blueCycle.y] == 1 || blueCycle.x < 0 || blueCycle.x > SCREEN_W || blueCycle.y < 0 || blueCycle.y > SCREEN_H)
  119.             {
  120.                 cout << "Collision" << endl;
  121.                 al_clear_to_color(al_map_rgb(0, 0, 0));
  122.                 for(int i = 0; i <= SCREEN_W; i++)
  123.                 {
  124.                     for(int j = 0; j <= SCREEN_H; j++)
  125.                     {
  126.                         redWall[i][j] = 0;
  127.                     }
  128.                 }
  129.                 blueCycle.x = BXSTART;
  130.                 blueCycle.y = CYSTART;
  131.                 redCycle.x = RXSTART;
  132.                 redCycle.y = CYSTART;
  133.             }
  134.             if(blueWall[redCycle.x][redCycle.y] == 1 || redCycle.x < 0 || redCycle.x > SCREEN_W || redCycle.y < 0 || redCycle.y > SCREEN_H)
  135.             {
  136.                 cout << "Collision" << endl;
  137.                 al_clear_to_color(al_map_rgb(0, 0, 0));
  138.                 for (int i = 0; i <= SCREEN_W; i++)
  139.                 {
  140.                     for (int j = 0; j <= SCREEN_H; j++)
  141.                     {
  142.                         blueWall[i][j] = 0;
  143.                     }
  144.                 }
  145.                 blueCycle.x = BXSTART;
  146.                 blueCycle.y = CYSTART;
  147.                 redCycle.x = RXSTART;
  148.                 redCycle.y = CYSTART;
  149.             }
  150.  
  151.         }
  152.         else if(ev.type == ALLEGRO_EVENT_DISPLAY_CLOSE)
  153.         {
  154.             break;
  155.         }
  156.         else if(ev.type == ALLEGRO_EVENT_KEY_DOWN)
  157.         {
  158.             switch(ev.keyboard.keycode)
  159.             {
  160.                 case ALLEGRO_KEY_A:
  161.                     key[KEY_A] = true;
  162.                     break;
  163.                 case ALLEGRO_KEY_S:
  164.                     key[KEY_S] = true;
  165.                     break;
  166.                 case ALLEGRO_KEY_W:
  167.                     key[KEY_W] = true;
  168.                     break;
  169.                 case ALLEGRO_KEY_D:
  170.                     key[KEY_D] = true;
  171.                     break;
  172.                 case ALLEGRO_KEY_UP:
  173.                     key[KEY_UP] = true;
  174.                     break;
  175.                 case ALLEGRO_KEY_DOWN:
  176.                     key[KEY_DOWN] = true;
  177.                     break;
  178.                 case ALLEGRO_KEY_LEFT:
  179.                     key[KEY_LEFT] = true;
  180.                     break;
  181.                 case ALLEGRO_KEY_RIGHT:
  182.                     key[KEY_RIGHT] = true;
  183.                     break;
  184.             }
  185.         }
  186.         else if(ev.type == ALLEGRO_EVENT_KEY_UP)
  187.         {
  188.             switch(ev.keyboard.keycode)
  189.             {
  190.                 case ALLEGRO_KEY_A:
  191.                     key[KEY_A] = false;
  192.                     break;
  193.                 case ALLEGRO_KEY_S:
  194.                     key[KEY_S] = false;
  195.                     break;
  196.                 case ALLEGRO_KEY_W:
  197.                     key[KEY_W] = false;
  198.                     break;
  199.                 case ALLEGRO_KEY_D:
  200.                     key[KEY_D] = false;
  201.                     break;
  202.                 case ALLEGRO_KEY_UP:
  203.                     key[KEY_UP] = false;
  204.                     break;
  205.                 case ALLEGRO_KEY_DOWN:
  206.                     key[KEY_DOWN] = false;
  207.                     break;
  208.                 case ALLEGRO_KEY_LEFT:
  209.                     key[KEY_LEFT] = false;
  210.                     break;
  211.                 case ALLEGRO_KEY_RIGHT:
  212.                     key[KEY_RIGHT] = false;
  213.                     break;
  214.                 case ALLEGRO_KEY_ESCAPE:
  215.                     doexit = true;
  216.                     break;
  217.             }
  218.         }
  219.  
  220.         if(redraw && al_is_event_queue_empty(event_queue))
  221.         {
  222.             redraw = false;
  223.             double t = al_get_time();
  224.             //al_clear_to_color(al_map_rgb(0, 0, 0));
  225.             // draw code goes here
  226.             al_draw_pixel(blueCycle.x, blueCycle.y, al_map_rgb(blueCycle.r, blueCycle.g, blueCycle.b));
  227.             al_draw_pixel(redCycle.x, redCycle.y, al_map_rgb(redCycle.r, redCycle.g, redCycle.b));
  228.  
  229.             al_flip_display();
  230.  
  231.             fps_accum++;
  232.             if(t - fps_time >= 1)
  233.             {
  234.                 fps = fps_accum;
  235.                 fps_accum = 0;
  236.                 fps_time = t;
  237.             }
  238.         }
  239.     }
  240.  
  241.     return 0;
  242. }
Advertisement
Add Comment
Please, Sign In to add comment