Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // Pong Code
- #include <iostream>
- #include <allegro5/allegro.h>
- #include <allegro5/allegro_image.h>
- #include <allegro5/allegro_primitives.h>
- #include <allegro5/allegro_font.h>
- using namespace std;
- const int SCREEN_W = 640;
- const int SCREEN_H = 480;
- const float FPS = 60.0;
- const int START_X = SCREEN_W / 2;
- const int START_Y = SCREEN_H / 2;
- enum MYKEYS {
- KEY_W, KEY_S, KEY_UP, KEY_DOWN, KEY_M
- };
- int main()
- {
- ALLEGRO_DISPLAY *display = NULL;
- ALLEGRO_TIMER *timer = NULL;
- ALLEGRO_EVENT_QUEUE *event_queue = NULL;
- ALLEGRO_FONT *font = NULL;
- ALLEGRO_BITMAP *paddle1, *paddle2, *ball, *scrnshot;
- bool key[5] = { false, false, false, false, false };
- bool redraw = true;
- bool doexit = false;
- const int BSIZE = 32;
- int padW = 10, padH = 120;
- int pad1X = 10, pad1Y = SCREEN_H / 2 ;
- int pad2X = SCREEN_W -(10 + padW), pad2Y = SCREEN_H / 2;
- int ballX = START_X;
- int ballY = START_Y;
- int xVel = 4, yVel = 4;
- int p1Score = 0, p2Score = 0;
- int fps = 0, fps_accum = 0;
- double fps_time = 0;
- if(!al_init())
- {
- cout << "Failed to initialize allegro library.\n";
- return -1;
- }
- if(!al_install_keyboard())
- {
- cout << "Failed to install keyboard.\n";
- return -1;
- }
- if(!al_init_primitives_addon())
- {
- cout << "Failed to initialize primitives addon.\n";
- return -1;
- }
- al_init_image_addon();
- al_init_font_addon();
- timer = al_create_timer(1.0 / FPS);
- if(!timer)
- {
- cout << "Failed to create timer.\n";
- return -1;
- }
- display = al_create_display(SCREEN_W, SCREEN_H);
- if(!display)
- {
- cout << "Failed to create display.\n";
- return -1;
- }
- font = al_load_font("data/fixed_font.tga", 0, 0);
- if(!font)
- {
- cout << "Failed to load font.\n";
- return -1;
- }
- event_queue = al_create_event_queue();
- if(!event_queue)
- {
- cout << "Failed to create event queue.\n";
- return -1;
- }
- paddle1 = al_create_bitmap(padW, padH);
- al_set_target_bitmap(paddle1);
- al_clear_to_color(al_map_rgb(0, 191, 255));
- al_set_target_bitmap(al_get_backbuffer(display));
- paddle2 = al_create_bitmap(padW, padH);
- al_set_target_bitmap(paddle2);
- al_clear_to_color(al_map_rgb(0, 191, 255));
- al_set_target_bitmap(al_get_backbuffer(display));
- ball = al_create_bitmap(BSIZE, BSIZE);
- al_set_target_bitmap(ball);
- al_clear_to_color(al_map_rgb(255, 0, 255));
- al_set_target_bitmap(al_get_backbuffer(display));
- al_register_event_source(event_queue, al_get_display_event_source(display));
- al_register_event_source(event_queue, al_get_timer_event_source(timer));
- al_register_event_source(event_queue, al_get_keyboard_event_source());
- al_clear_to_color(al_map_rgb(0, 0, 0));
- al_flip_display();
- al_start_timer(timer);
- while(!doexit)
- {
- ALLEGRO_EVENT ev;
- al_wait_for_event(event_queue, &ev);
- if(ev.type == ALLEGRO_EVENT_TIMER)
- {
- // logic goes here
- if(ballX < 0 || ballX > SCREEN_W - BSIZE)
- {
- if(ballX < 0)p2Score++;
- if(ballX > SCREEN_W - BSIZE)p1Score++;
- ballX = START_X;
- ballY = START_Y;
- xVel = -xVel;
- yVel = -yVel;
- }
- if(ballY < 0 || ballY > SCREEN_H - BSIZE)
- yVel = -yVel;
- ballX += xVel;
- ballY += yVel;
- // collision detection
- if(pad1X + padW > ballX && pad1Y < ballY + BSIZE && pad1Y + padH > ballY)
- {
- xVel = -xVel;
- }
- if(pad2X < ballX + BSIZE && pad2Y < ballY + BSIZE && pad2Y + padH > ballY)
- {
- xVel = -xVel;
- }
- if(key[KEY_W] && pad1Y >= 0)
- pad1Y -= 5;
- if(key[KEY_S] && pad1Y <= SCREEN_H - padH)
- pad1Y += 5;
- if(key[KEY_UP] && pad2Y >= 0)
- pad2Y -= 5;
- if(key[KEY_DOWN] && pad2Y <= SCREEN_H - padH)
- pad2Y += 5;
- if(key[KEY_M])
- {
- scrnshot = al_create_sub_bitmap(al_get_backbuffer(display), 0, 0, SCREEN_W, SCREEN_H);
- al_save_bitmap("data/screens/scrnshot.png", scrnshot);
- }
- redraw = true;
- }
- else if(ev.type == ALLEGRO_EVENT_DISPLAY_CLOSE)
- {
- break;
- }
- else if(ev.type == ALLEGRO_EVENT_KEY_DOWN)
- {
- switch(ev.keyboard.keycode)
- {
- case ALLEGRO_KEY_W:
- key[KEY_W] = true;
- break;
- case ALLEGRO_KEY_S:
- key[KEY_S] = true;
- break;
- case ALLEGRO_KEY_UP:
- key[KEY_UP] = true;
- break;
- case ALLEGRO_KEY_DOWN:
- key[KEY_DOWN] = true;
- break;
- case ALLEGRO_KEY_M:
- key[KEY_M] = true;
- break;
- }
- }
- else if(ev.type == ALLEGRO_EVENT_KEY_UP)
- {
- switch(ev.keyboard.keycode)
- {
- case ALLEGRO_KEY_W:
- key[KEY_W] = false;
- break;
- case ALLEGRO_KEY_S:
- key[KEY_S] = false;
- break;
- case ALLEGRO_KEY_UP:
- key[KEY_UP] = false;
- break;
- case ALLEGRO_KEY_DOWN:
- key[KEY_DOWN] = false;
- break;
- case ALLEGRO_KEY_M:
- key[KEY_M] = false;
- break;
- case ALLEGRO_KEY_ESCAPE:
- doexit = true;
- break;
- }
- }
- if(redraw && al_is_event_queue_empty(event_queue))
- {
- // draw code goes here
- redraw = false;
- al_clear_to_color(al_map_rgb(0, 0, 0));
- double t = al_get_time();
- al_draw_bitmap(ball, ballX, ballY, 0);
- al_draw_bitmap(paddle1, pad1X, pad1Y, 0);
- al_draw_bitmap(paddle2, pad2X, pad2Y, 0);
- al_draw_filled_rounded_rectangle(4, 4, 100, 30, 8, 8, al_map_rgba(0, 0, 0, 200));
- al_draw_textf(font, al_map_rgb(255, 255, 255), 8, 8, 0, "FPS: %d", fps);
- al_draw_textf(font, al_map_rgb(255, 255, 255), SCREEN_W / 2, 10, ALLEGRO_ALIGN_CENTRE, "%d SCORE %d", p1Score, p2Score);
- al_flip_display();
- fps_accum++;
- if(t - fps_time >= 1)
- {
- fps = fps_accum;
- fps_accum = 0;
- fps_time = t;
- }
- }
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement