delorie.com/archives/browse.cgi   search  
Mail Archives: djgpp/2003/03/15/06:12:17

From: "Tim" <t DOT j DOT _no_spam AT btinternet DOT com>
Newsgroups: comp.os.msdos.djgpp
Subject: Re: help to move a mouse (Allegro)
Date: Sat, 15 Mar 2003 09:53:14 +0000 (UTC)
Organization: BT Openworld
Lines: 567
Message-ID: <b4ut69$1q1$1@sparta.btinternet.com>
References: <bba5ba7850bfcf7225d9122fe9aa63c6 DOT 113557 AT mygate DOT mailgate DOT org>
NNTP-Posting-Host: host217-39-45-113.in-addr.btopenworld.com
X-Trace: sparta.btinternet.com 1047721994 1857 217.39.45.113 (15 Mar 2003 09:53:14 GMT)
X-Complaints-To: news-complaints AT lists DOT btinternet DOT com
NNTP-Posting-Date: Sat, 15 Mar 2003 09:53:14 +0000 (UTC)
X-Newsreader: Microsoft Outlook Express 6.00.2720.3000
X-MSMail-Priority: Normal
X-Priority: 3
X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2600.0000
To: djgpp AT delorie DOT com
DJ-Gateway: from newsgroup comp.os.msdos.djgpp
Reply-To: djgpp AT delorie DOT com

I am not sure, but I thought you needed to install timers with allegro
before using the mouse.

Tim
"helen" <lab_darzo AT libero DOT it> wrote in message
news:bba5ba7850bfcf7225d9122fe9aa63c6 DOT 113557 AT mygate DOT mailgate DOT org...
> I have DJGPP under win2k and it works fine with Allegro too.
>
> I encountered this weird behaviour:
> the following works very well:
> ---
> /* muovere un oggetto con il mouse */
> #include <stdio.h>
> #include <allegro.h>
> // #include "0632.h"
> // #include "0632c.h"
>
> // Header for the Vivace example 51single
>
> extern int end_game;
>
> extern BITMAP *dblbuffer;
>
> int  main (void);
> void init(void);
> void input(void);
> void process(void);
> void output(void);
> void shutdown(void);
> void show_double_buffer(void);
>
> // fine 0632.h
>
> // Header containing standard reusable functions to move a circle -
> 0.632c.h
>
> typedef struct circle_t CIRCLE_T;
>
> struct circle_t {
>    int x,y,r;         // x, y, radius
>    int col;           // colour
>    int xs,ys;         // x speed, y speed
>    int dx,dy;         // drawn x, drawn y
>    };
>
> CIRCLE_T *circle_init(int new_x, int new_y, int new_radius,
>                       int new_col, int new_xs, int new_ys);
> void circle_destroy (CIRCLE_T *circle);
> void circle_draw (CIRCLE_T *circle, BITMAP *bmp);
> void circle_update (CIRCLE_T *circle);
> void circle_erase (CIRCLE_T *circle, BITMAP *bmp);
>
> // fine 0632c.h
>
> CIRCLE_T *circle_init(int new_x, int new_y, int new_radius,
>       int new_col, int new_xs, int new_ys)
> {
>     CIRCLE_T *temp;
>
>     // Allocate memory for the circle. If unsuccessful, return NULL.
>     temp = malloc(sizeof(CIRCLE_T));
>
>     if (!temp)
> return NULL;
>
>     temp->x = new_x;
>     temp->y = new_y;
>     temp->r = new_radius;
>     temp->col = new_col;
>     temp->xs = new_xs;
>     temp->ys = new_ys;
>     temp->dx = temp->dy = 0;
>
>     return temp;
> }
>
> void circle_destroy(CIRCLE_T * circle)
> {
>     if (circle)
> free(circle);
> }
>
> void circle_draw(CIRCLE_T * circle, BITMAP * bmp)
> {
>     circlefill(bmp, circle->x, circle->y, circle->r, circle->col);
>
>     circle->dx = circle->x;
>     circle->dy = circle->y;
> }
>
> void circle_update(CIRCLE_T * circle)
> {
>     // First we update the position of the circle...
>     circle->x += circle->xs;
>     circle->y += circle->ys;
>
>     // Now we see if it reached the maximum frame border
>
>     if (circle->x >= SCREEN_W)
> circle->x = SCREEN_W;
>
>     if (circle->y >= SCREEN_H)
> circle->y = SCREEN_H;
>
>     if (circle->x < 1)
> circle->x = 0;
>
>     if (circle->y < 1)
> circle->y = 0;
> }
>
> void circle_erase(CIRCLE_T * circle, BITMAP * bmp)
> {
>     circlefill(bmp, circle->dx, circle->dy, circle->r, 0);
> }
>
> // fine 0632c.c
>
> int end_game; /* flag we'll set to end the game */
> int pressed_fire_button; // This will help with the color feature
>
> BITMAP *dblbuffer;
>
> CIRCLE_T *moving_circle;
>
> int main(void)
> {
>     allegro_init(); /* initialise the Allegro library */
>     init(); /* initialise the game */
>
>     end_game = 0; /* reset flag */
>
>     do { /* loop */
> input(); /* get input */
> process(); /* process it */
> output(); /* give output */
>     } while (end_game == 0); /* until the flag is set */
>
>     shutdown(); /* shut down anything that needs it */
>     allegro_exit(); /* just for luck */
>     return 0; /* tell the OS that all went well */
> }
> END_OF_MAIN()
>
> void init(void)
> {
>     int i;
>
>     install_keyboard();
>
>     i = install_mouse();
>
>     if (i == -1) {
> printf("Sorry, didn't detect any mouse\n");
> exit(1);
>     }
>     if (set_gfx_mode(GFX_AUTODETECT, 320, 200, 0, 0) < 0) {
> printf("%s\n", allegro_error);
> exit(2);
>     }
>     dblbuffer = create_bitmap(SCREEN_W, SCREEN_H);
>     if (dblbuffer == NULL) {
> allegro_exit();
> printf("Sorry, not enough memory");
> exit(3);
>     }
>     clear(dblbuffer);
>
>     moving_circle = circle_init(SCREEN_W / 2, SCREEN_H / 2, 50, 3, 0,
> 0);
>     if (moving_circle == NULL) {
> allegro_exit();
> printf("Sorry, not enough memory");
> exit(4);
>     }
>     pressed_fire_button = 0;
>
>     circle_draw(moving_circle, dblbuffer);
>     show_double_buffer();
> }
>
> void input(void)
> {
>     int dx, dy;
>
>     if (key[KEY_ESC])
> end_game++;
>
>     get_mouse_mickeys(&dx, &dy);
>
>     if ((mouse_b & 1) != pressed_fire_button) {
> pressed_fire_button = moving_circle->col;
> while (pressed_fire_button == moving_circle->col)
>     moving_circle->col = rand() % 14;
>
> pressed_fire_button = mouse_b & 1;
>     }
>     moving_circle->xs += dx;
>     moving_circle->ys += dy;
> }
>
> void process(void)
> {
>     circle_update(moving_circle);
> }
>
> void output(void)
> {
>     circle_erase(moving_circle, dblbuffer);
>     circle_draw(moving_circle, dblbuffer);
>
>     show_double_buffer();
> }
>
> void shutdown(void)
> {
>     circle_destroy(moving_circle);
>     destroy_bitmap(dblbuffer);
> }
>
> void show_double_buffer(void)
> {
>     vsync();
>     blit(dblbuffer, screen, 0, 0, 0, 0, SCREEN_W, SCREEN_H);
> }
> ---------
> (END FIRST PRGM)
>
> then I downloaded the following for the mastermind game and the mouse
> won't move correctly !!! (i have the .dat and the .h correctly loaded
> and grabbed)
>
> /*------------------------MASTERMIND-----------------By Arthur
> Brochard*/
> #include <allegro.h>
> #include <stdlib.h>
> #include <time.h>
> #include "mastermind.h"
>
> DATAFILE *datafile;
> BITMAP *buffer;
> int code[4];                                    /*the secret code you
> have to guess*/
> int tab[8][4];                                  /*your 8 attempts*/
> int colors[6] = { 83, 82, 81, 53, 86, 54 };     /*the codes of the 6
> colors in the palette*/
> int bons[8];                                    /*for each guess, the
> number of colors which are
>            in the right position*/
>
> int mal[8];                                     /*for each guess, the
> number of colors which are
>           in the wrong position*/
> int essai=0;                                    /*number of the attempt
> 0 = first attempt*/
> int trou=0;                                     /*number of the hole  0
> = first hole*/
> int fin=0;                                      /* if the game is over,
> fin = 1 */
>
> void nouveau()                                  /*Initialization*/
> {
> int i,j;
>
> fin = trou = essai = 0;
> for(i=0;i<8;i++)
> {
> bons[i]=mal[i]=0;
> for(j=0;j<4;j++)
>           tab[i][j]=-1;
> }
> srand((unsigned) time(NULL) );
> for( i=0;i<4;i++ )
>   code[i] = rand() % 6;
>
> }
>
> void check()                                   /*checks how many
> mistakes there are*/
> {
> int i, j;
> int t[4];
> int c[4];
>
> for(i=0;i<4;i++)
> {
> t[i] = tab[essai][i];
> c[i] = code[i];
> if( t[i] == c[i] )
> {
> bons[essai]++;
> t[i] = c[i] = -i-10;
>
> }
> }
>
> if(bons[essai] == 4)
>   goto end;
>
> for( i=0;i<4;i++ )
> {
> for(j=0;j<4;j++)
> {
> if( i == j )
>   continue;
> if(t[i] == c[j])
>     {
>     mal[essai]++;
>     t[i] = c[j] = -i-1;
>     }
> }
> }
>
>     end : ;
> }
>
> void draw()        /*Draws everything on the screen*/
> {
> int i, j;
>
> blit( datafile[ECRAN].dat, buffer, 0, 0, 0, 0, 640, 480 );
>
> if(!fin)
> {
> blit( datafile[FLECHE].dat, buffer, 0, 0, 7, (35+essai*50), 25, 11 );
>         circle( buffer, (80+trou*30), (40+essai*50), 11, 91 );
>         }
>
> else
> {
> for(i=0;i<4;i++)
>   circlefill( buffer, (80+i*30), 440, 10, colors[(code[i])] );
>
> if(fin == 2)
>   textprintf_centre(buffer, font, 470, 285, 91, "CONGRATULATIONS !");
> else if(fin == 1)
> {
> textprintf_centre(buffer, font, 470, 285, 91, "GAME OVER !");
>     essai = 7;
> }
> }
>
>
> for(i=0;i<(essai+1);i++)
> {
>
> if( (i != essai) || (fin) )
> {
> textprintf(buffer, font, 220, (35+i*50), 81, "%d", bons[i]);
>     textprintf(buffer, font, 240, (35+i*50), 91, "%d", mal[i]);
> }
> for(j=0;j<4;j++)
> {
> if(tab[i][j] >= 0)
>   circlefill( buffer, (80+j*30), (40+i*50), 10, colors[(tab[i][j])]
> );
>         }
> }
>
> if( (mouse_x >= 410) && (mouse_x <= 530) )
> {
> if( (mouse_y >= 210) && (mouse_y <= 250) )
>   rect( buffer, 410, 210, 530, 250, 91);
> else if( (mouse_y >= 320) && (mouse_y <= 360) )
>   rect( buffer, 410, 320, 530, 360, 91);
> else if( (mouse_y >= 370) && (mouse_y <= 410) )
>   rect( buffer, 410, 370, 530, 410, 91);
> }
>
> show_mouse(buffer);
>
>         vsync();
> blit( buffer, screen, 0, 0, 0, 0, 640, 480 );
> }
>
>
> main()
> {
> int i, cond=0;
>
> if( allegro_init() != 0)
> {
> allegro_message("Failed to initialize Allegro\n");
> exit(-1);
> }
> //
>
> if (set_gfx_mode(GFX_SAFE, 640, 480, 0, 0) != 0) {
>       set_gfx_mode(GFX_TEXT, 0, 0, 0, 0);
>       allegro_message("Unable to set any graphic mode\n%s\n",
> allegro_error);
>       return 1;
>    }
> //
> //        if( set_gfx_mode( GFX_AUTODETECT, 640, 480, 0, 0 ) != 0 )
> // {
> // allegro_message("Failed to set graphics mode\n");
> // exit(-1);
> // }
>         if( install_mouse() == -1)
> {
> allegro_message("Failed to install the mouse\n");
> exit(-1);
> }
> if( install_keyboard() != 0)
> {
>    allegro_message("Failed to install the keyboard\n");
>    exit(-1);
> }
> datafile = load_datafile("mastermind.dat");
> if (!datafile)
> {
> allegro_message("Error : can't load 'mastermind.dat'\n");
> exit(-1);
> }
>
> set_pallete(datafile[PALETTE].dat);
>
> buffer = create_bitmap(640, 480);
> clear(buffer);
>
> set_mouse_sprite(datafile[SOURIS].dat);
>         position_mouse(200, 200);
> set_mouse_speed(1,1);
> text_mode(-5);
>
>         nouveau();
> while(1)
> {
> if(key[KEY_ESC])
> {
> allegro_exit();
> exit(0);
> }
>
> draw();
> if(mouse_b & 1)
> {
>
> /*If you select another hole*/
>                 if( (mouse_x >= 70) && (mouse_x <= 180) )
> {
> if( (mouse_y >= (30+50*essai)) && (mouse_y <= (50+50*essai)) )
> {
> for(i=0;i<4;i++)
> {
> if( (mouse_x >= (70+30*i)) && (mouse_x <= (90+30*i)) )
>   trou = i;
> }
> }
> }
>
> /*If you select a color*/
>                 else if( (mouse_x >= 420) && (mouse_x <= 520) )
> {
> if(mouse_x <= 440)
> {
> if( (mouse_y >= 130) && (mouse_y <= 150) )
>                                 {
> tab[essai][trou] = 2;
> if(trou < 3)
>   trou++;
> }
> else if( (mouse_y >= 170) && (mouse_y <= 190) )
> {
> tab[essai][trou] = 4;
> if(trou < 3)
>   trou++;
> }
> }
> else if(mouse_x >= 500)
> {
> if( (mouse_y >= 130) && (mouse_y <= 150) )
>                                 {
> tab[essai][trou] = 5;
> if(trou < 3)
>   trou++;
> }
> else if( (mouse_y >= 170) && (mouse_y <= 190) )
> {
> tab[essai][trou] = 1;
> if(trou < 3)
>   trou++;
> }
> }
> else if( (mouse_x >= 460) && (mouse_x <= 480) )
> {
> if( (mouse_y >= 130) && (mouse_y <= 150) )
>                                 {
> tab[essai][trou] = 3;
> if(trou < 3)
>   trou++;
> }
> else if( (mouse_y >= 170) && (mouse_y <= 190) )
> {
> tab[essai][trou] = 0;
> if(trou < 3)
>   trou++;
> }
> }
> }
>
> /*If you click 'OK'*/
>                 if( (mouse_x >= 410) && (mouse_x <= 530) )
>         {
>     if( (mouse_y >= 210) && (mouse_y <= 250) && (!fin) )
>     {
> for(i=0;i<4;i++)
> {
> if( tab[essai][i] != -1 )
>   cond++;
> }
>
> if( cond == 4 )
> {
>     check();
>     if(bons[essai] != 4)
>     {
> essai++;
>         trou=0;
>
>         if( essai == 8 )
>   fin = 1;
>     }
>     else if( bons[essai] == 4 )
>       fin = 2;
> }
> cond = 0;
>     }
>
>                     /*If you click 'New'*/
>                     else if( (mouse_y >= 320) && (mouse_y <= 360) )
>       nouveau();
>
>                     /*If you click 'Quit'*/
>                     else if( (mouse_y >= 370) && (mouse_y <= 410) )
>     {
> allegro_exit();
> exit(0);
>     }
>     }
>
> rest(220);
> }
>
> }
>
> }
>
> END_OF_MAIN();
> ---------------------------------------------
>
>
> WHAT'S WRONG HERE ABOUT THE MOUSE MOVING ??
> I really cannot see the problem here........
>
> helen
> [ bytes are just tears of programmers heaven]
>
>
>
>
>
> --
> Posted via Mailgate.ORG Server - http://www.Mailgate.ORG


- Raw text -


  webmaster     delorie software   privacy  
  Copyright © 2019   by DJ Delorie     Updated Jul 2019