#include <allegro.h>
#define MAX_X 600
#define MAX_Y 300
#define VMODE GFX_AUTODETECT
#define SOUND_CARD DIGI_AUTODETECT
#define MIDI_CARD MIDI_AUTODETECT
#define BOLA_W 10
#define BOLA_H 10
#define BOLA_COLOR 255,255,255
#define JOGADOR_W 5
#define JOGADOR_H 80
#define JOGADOR_COLOR 255,255,255
#define RISCO_W 2
#define RISCO_H MAX_Y
#define RISCO_COLOR 255,255,255
#define DIS_Y 130
#define DIS_X (MAX_X/2)-30
int BOLA_VELOCIDADE = 1;
int bola_x, bola_y;
int jogador1_x, jogador1_y;
int jogador2_x, jogador2_y;
int jogador1_pontos = 0, jogador2_pontos = 0;
int flagx, flagy, tempo, i1, i2;
int flag1 = 0, flag2 = 0;
int computador1 = 0;
int computador2 = 1;
int comp_posicao1;
int comp_posicao2;
int op=0;
int flagLogo = 0;
int audio = 1;
BITMAP *buffer;
BITMAP *buffer2;
BITMAP *buffer3;
BITMAP *buffer4;
BITMAP *logo;
SAMPLE *bolaA;
SAMPLE *jogadorA;
SAMPLE *perdeuA;
struct sprite {
int x, y;
int height, width;
float dx, dy;
BITMAP *img;
};
int colisao_jogador(struct sprite object1, struct sprite object2) {
int left1, left2;
int right1, right2;
int top1, top2;
int bottom1, bottom2;
left1 = object1.x;
left2 = object2.x;
right1 = object1.x + object1.width;
right2 = object2.x + object2.width;
top1 = object1.y;
top2 = object2.y;
bottom1 = object1.y + object1.height;
bottom2 = object2.y + object2.height;
if (bottom1 < top2) { return(0); }
if (top1 > bottom2) { return(0); }
if (right1 < left2) { return(0); }
if (left1 > right2) { return(0); }
return(1);
}
void mover_bola() {
tempo++;
if (tempo > BOLA_VELOCIDADE){
if(flagx==0 && bola_x <= (MAX_X + 150)){
bola_x++;
}else{
flagx=1;
if(flagx==1){
if(bola_x != -150){
bola_x--;
}else{
flagx=0;
}
}
}
switch(flagy){
case 1:
if(bola_y <= MAX_Y){
bola_y++;
}else{
flagy = 3;
if(audio == 1){
play_sample(bolaA, 555, 528, 1000, FALSE);
}
}
break;
case 2:
flagy = 3;
break;
case 3:
if(bola_y != 0){
bola_y--;
}else{
if(audio == 1){
play_sample(bolaA, 555, 528, 1000, FALSE);
}
flagy = 1;
}
break;
}
tempo = 0;
}
}
void move_computador1() {
comp_posicao1++;
if (comp_posicao1 > i1){
jogador1_y = bola_y-(JOGADOR_H/2)-i1;
comp_posicao1 = 0;
flag1 = 0;
flag2 = 0;
}
}
void move_computador2() {
comp_posicao2++;
if (comp_posicao2 > i2){
jogador2_y = bola_y-(JOGADOR_H/2)-i2;
comp_posicao2 = 0;
flag1 = 0;
flag2 = 0;
}
}
void verificaGanhador(){
if(bola_x <= -150 && flag1 == 0){
textout(screen, font, "Jogador 2 Ganhou!", (MAX_X/2)+130, (MAX_Y+10), makecol( 255, 0, 0));
jogador2_pontos++;
flag1 = 1;
flag2 = 0;
bola_x = (MAX_X - 30);
bola_y = (MAX_Y/2);
jogador1_y = (MAX_Y/2)-20;
jogador2_y = (MAX_Y/2)-20;
blit (buffer3, screen, 0, 0, (MAX_X/2)+10, (MAX_Y+10), 100, 20);
BOLA_VELOCIDADE = 1;
i1 = rand()%40;
i2 = rand()%40;
if(audio == 1){
play_sample(perdeuA, 555, 528, 1000, FALSE);
}
} else {
if(bola_x == (MAX_X+150) && flag2 == 0){
textout(screen, font, "Jogador 1 Ganhou!", (MAX_X/2)+130, (MAX_Y+10), makecol( 255, 0, 0));
jogador1_pontos++;
flag2 = 1;
flag1 = 0;
bola_x = 30;
bola_y = (MAX_Y/2);
jogador1_y = (MAX_Y/2)-20;
jogador2_y = (MAX_Y/2)-20;
blit (buffer3, screen, 0, 0, 10, (MAX_Y+10), 100, 20);
BOLA_VELOCIDADE = 1;
i1 = rand()%10;
i2 = rand()%10;
if(audio == 1){
play_sample(perdeuA, 555, 528, 1000, FALSE);
}
}
}
}
int main() {
struct sprite jogador1;
struct sprite jogador2;
struct sprite risco;
struct sprite riscoP;
struct sprite bola;
allegro_init();
install_keyboard();
install_mouse();
install_sound(SOUND_CARD, MIDI_CARD, NULL);
set_color_depth (16);
set_gfx_mode (GFX_AUTODETECT, MAX_X, MAX_Y+30, 0, 0);
tempo = 0;
jogador1.x = JOGADOR_W;
jogador1.y = JOGADOR_H;
jogador1.img = create_bitmap(JOGADOR_W,JOGADOR_H);
clear_to_color(jogador1.img, makecol(JOGADOR_COLOR));
jogador1.height = jogador1.img->h;
jogador1.width = jogador1.img->w;
jogador2.x = (MAX_X - (JOGADOR_W*2));
jogador2.y = JOGADOR_H;
jogador2.img = create_bitmap(JOGADOR_W,JOGADOR_H);
clear_to_color(jogador2.img, makecol(JOGADOR_COLOR));
jogador2.height = jogador2.img->h;
jogador2.width = jogador2.img->w;
risco.img = create_bitmap(RISCO_W,RISCO_H);
clear_to_color(risco.img, makecol(RISCO_COLOR));
riscoP.img = create_bitmap(MAX_X,RISCO_W);
clear_to_color(riscoP.img, makecol(RISCO_COLOR));
bola.x = BOLA_W;
bola.y = BOLA_H;
bola.img = create_bitmap(BOLA_W,BOLA_H);
clear_to_color(bola.img, makecol(BOLA_COLOR));
bola.height = bola.img->h;
bola.width = bola.img->w;
buffer = create_bitmap (MAX_X, MAX_Y+2);
buffer2 = create_bitmap (MAX_X, MAX_Y+100);
buffer3 = create_bitmap (MAX_X, MAX_Y+100);
buffer4 = create_bitmap (MAX_X, MAX_Y+100);
bolaA = load_sample("bola.wav");
jogadorA = load_sample("jogador.wav");
perdeuA = load_sample("perdeu.wav");
logo = load_bitmap("logo.bmp", NULL);
while (!key[KEY_ESC]){
if(key[KEY_1] || key[KEY_1_PAD]){
op = 1;
blit (buffer, screen, 0, 0, 0, 0, MAX_X, MAX_Y+2);
clear (buffer);
blit (buffer4, screen, 0, 0, MAX_X, MAX_Y+100, 300, 20);
clear (buffer4);
textout(screen, font, " ", 0, (MAX_Y+10), makecol( 255, 0, 0));
bola_x = 30;
bola_y = (MAX_Y/2);
jogador1_pontos = 0;
jogador2_pontos = 0;
jogador1_y = (MAX_Y/2)-20;
jogador2_y = (MAX_Y/2)-20;
computador2 = 1;
computador1 = 0;
}
if(key[KEY_0] || key[KEY_0_PAD]){
op = 0;
blit (buffer, screen, 0, 0, 0, 0, MAX_X, MAX_Y+2);
clear (buffer);
blit (buffer4, screen, 0, 0, MAX_X, MAX_Y+100, 300, 20);
clear (buffer4);
clear(buffer2);
clear(buffer3);
}
if(key[KEY_S]){
if(audio == 1){
audio = 0;
}else{
audio = 1;
}
}
if(key[KEY_P] && op == 3){
op = 1;
}
if(key[KEY_P] && op == 1){
op = 3;
}
if(flagLogo == 0){
draw_sprite(buffer, logo, DIS_X-180, DIS_Y-100);
flagLogo = 1;
blit (buffer, screen, 0, 0, 0, 0, MAX_X, MAX_Y+2);
clear (buffer);
}
if(op == 0){
draw_sprite(buffer, logo, DIS_X-180, DIS_Y-100);
textout(screen, font, "[", DIS_X-100, DIS_Y, makecol( 255, 255, 255));
textout(screen, font, "0", DIS_X-85, DIS_Y, makecol( 255, 0, 0));
textout(screen, font, "] Menu", DIS_X-69, DIS_Y, makecol( 255, 255, 255));
textout(screen, font, "[", DIS_X-100,(DIS_Y+10), makecol( 255, 255, 255));
textout(screen, font, "1", DIS_X-85,(DIS_Y+10), makecol( 255, 0, 0));
textout(screen, font, "] Novo jogo", DIS_X-69,(DIS_Y+10), makecol( 255, 255, 255));
textout(screen, font, "[", DIS_X-100,(DIS_Y+20), makecol( 255, 255, 255));
textout(screen, font, "F1", DIS_X-89,(DIS_Y+20), makecol( 255, 0, 0));
textout(screen, font, "] Liga/Desliga Computador01", DIS_X-69, (DIS_Y+20), makecol( 255, 255, 255));
textout(screen, font, "[", DIS_X-100,(DIS_Y+30), makecol( 255, 255, 255));
textout(screen, font, "F2", DIS_X-89,(DIS_Y+30), makecol( 255, 0, 0));
textout(screen, font, "] Liga/Desliga Computador02", DIS_X-69,(DIS_Y+30), makecol( 255, 255, 255));
textout(screen, font, "[", DIS_X-100,(DIS_Y+40), makecol( 255, 255, 255));
textout(screen, font, "S", DIS_X-85,(DIS_Y+40), makecol( 255, 0, 0));
if(audio == 1){
textout(screen, font, "] Liga/Desliga Som [ON ]", DIS_X-69,(DIS_Y+40), makecol( 255, 255, 255));
}else{
textout(screen, font, "] Liga/Desliga Som [OFF]", DIS_X-69,(DIS_Y+40), makecol( 255, 255, 255));
}
textout(screen, font, "[", DIS_X-100,(DIS_Y+50), makecol( 255, 255, 255));
textout(screen, font, "P", DIS_X-85,(DIS_Y+50), makecol( 255, 0, 0));
textout(screen, font, "] Pause", DIS_X-69,(DIS_Y+50), makecol( 255, 255, 255));
textout(screen, font, "[", DIS_X-100,(DIS_Y+60), makecol( 255, 255, 255));
textout(screen, font, "ESC", DIS_X-93,(DIS_Y+60), makecol( 255, 0, 0));
textout(screen, font, "] Sair", DIS_X-69,(DIS_Y+60), makecol( 255, 255, 255));
textout(screen, font, "v0.11 by Edson Kuzniewski (Br0w) / 2008-09-05", 0, (MAX_Y+10), makecol( 255, 0, 0));
}
if(op == 1){
bola.x = bola_x;
bola.y = bola_y;
if(computador1 == 0){
jogador1_x = jogador1.x;
jogador1_y = jogador1.y;
}else{
jogador1_x = jogador1.x;
jogador1.y = jogador1_y;
}
if(computador2 == 0){
jogador2_x = jogador2.x;
jogador2_y = jogador2.y;
}else{
jogador2_x = jogador2.x;
jogador2.y = jogador2_y;
}
if(computador1 == 0){
if (key[KEY_UP]) {
if (jogador1.y > 0) {
jogador1.y -= 2;
}
}
if (key[KEY_DOWN]) {
if (jogador1.y < MAX_Y-JOGADOR_H) {
jogador1.y += 2;
}
}
}else{
move_computador1();
}
if(key[KEY_F2]){
if(computador2 == 0){
computador2 = 1;
}else{
computador2 = 0;
}
}
if(key[KEY_F3]){
jogador2_y++;
}
if(key[KEY_F4]){
jogador2_y--;
}
if(key[KEY_F1]){
if(computador1 == 0){
computador1 = 1;
}else{
computador1 = 0;
}
}
if(computador2 == 0){
if (key[KEY_8_PAD] || mouse_b & 1) {
if (jogador2.y > 0) {
jogador2.y -= 2;
}
}
if (key[KEY_2_PAD] || mouse_b & 2) {
if (jogador2.y < MAX_Y-JOGADOR_H) {
jogador2.y += 2;
}
}
}else{
move_computador2();
}
if (colisao_jogador(jogador1, bola)) {
flagx=0;
flagy=rand()%3;
flag1 = 0;
flag2 = 0;
BOLA_VELOCIDADE = (rand()%5)*-1;
i1 = rand()%50;
i2 = rand()%50;
blit (buffer3, screen, 0, 0, MAX_X-200, 310, 300, 20);
if(audio == 1){
play_sample(jogadorA, 555, 528, 1000, FALSE);
}
}else{
if(colisao_jogador(jogador2, bola)){
flagx=1;
flagy=rand()%3;
flag1 = 0;
flag2 = 0;
BOLA_VELOCIDADE = (rand()%5)*-1;
i1 = rand()%40;
i2 = rand()%40;
blit (buffer3, screen, 0, 0, MAX_X-200, 310, 300, 20);
if(audio == 1){
play_sample(jogadorA, 555, 528, 1000, FALSE);
}
}
}
mover_bola();
draw_sprite (buffer, jogador1.img, jogador1.x, jogador1.y);
draw_sprite (buffer, jogador2.img, jogador2.x, jogador2.y);
draw_sprite (buffer, bola.img, bola.x, bola.y);
draw_sprite (buffer, risco.img, (MAX_X/2), 0);
draw_sprite (buffer, riscoP.img, 0, MAX_Y);
blit (buffer, screen, 0, 0, 0, 0, MAX_X, MAX_Y+2);
clear (buffer);
verificaGanhador();
textprintf_ex(screen, font, (MAX_X/2)+10, (MAX_Y+10), makecol(255, 100, 200), -1, "Pontos: %d", jogador2_pontos);
textprintf_ex(screen, font, 10, (MAX_Y+10), makecol(255, 100, 200), -1, "Pontos: %d", jogador1_pontos);
}
}
remove_sound();
fade_out(4);
allegro_exit();
return 0;
}
END_OF_MAIN();
♫ bola
♫ jogador
♫ bola
Show!