1#include<allegro5/allegro.h>
2#include<allegro5/allegro_primitives.h>
3#include<allegro5/allegro_image.h>
4#include<iostream>
5using namespace std
;
6
7void render
()
8{
9 cout
<< endl
;
10}
11
12enum directions
{STILL, NORTH, NORTHEAST, EAST, SOUTHEAST, SOUTH, SOUTHWEST, WEST, NORTHWEST
};
13enum buttons
{NONE,ZERO,ONE,EIGHT,NINE
};
14
15int main
()
16{
17
18 float gameTime
= 0;
19 int frames
= 0;
20 int gameFPS
= 0;
21 if(!(al_init()))
22 cout
<< "Couldn't initialize Allegro." << cout
;
23 if(!(al_install_joystick()))
24 cout
<< "Couldn't install joystick." << endl
;
25 al_init_image_addon();
26 ALLEGRO_EVENT_QUEUE *event_queue
= NULL
;
27 event_queue
= al_create_event_queue();
28 if(!event_queue
)
29 cout
<< "al_create_event_queue failed." << endl
;
30 ALLEGRO_TIMER *timer
;
31 timer
= al_create_timer(1.
0/60);
32 al_register_event_source(event_queue,
al_get_timer_event_source(timer
));
33 al_start_timer(timer
);
34 gameTime
= al_current_time
();
35 al_register_event_source(event_queue,
al_get_joystick_event_source());
36 ALLEGRO_JOYSTICK* joy = al_get_joystick(0);
37 float ballposX
=0;
38 float ballposY
=0;
39 ALLEGRO_JOYSTICK_STATE jst
;
40 directions dir
= STILL
;
41 buttons button
= NONE
;
42 bool render
= false;
43 ALLEGRO_DISPLAY *display
= NULL
;
44 ALLEGRO_BITMAP *image
= NULL
;
45 ALLEGRO_BITMAP *texture
= NULL
;
46 texture
= al_load_bitmap("texture.jpg");
47 image
= al_load_bitmap("goldenball.png");
48 display
= al_create_display(1280,
720);
49 bool alive
= true;
50 while(alive
)
51 {
52 ALLEGRO_EVENT ev
;
53 al_wait_for_event(event_queue,
&ev
);
54 al_get_joystick_state(joy,
&jst
);
55 if (ev.type
== ALLEGRO_EVENT_JOYSTICK_AXIS
)
56 {
57 if ((jst.stick
[2].axis
[0] == 0) && (jst.stick
[2].axis
[1] == 0))
58 dir
= STILL
;
59 if ((jst.stick
[2].axis
[0] == 0) && (jst.stick
[2].axis
[1] == -1))
60 dir
= NORTH
;
61 if ((jst.stick
[2].axis
[0] == 1) && (jst.stick
[2].axis
[1] == -1))
62 dir
= NORTHEAST
;
63 if ((jst.stick
[2].axis
[0] == 1) && (jst.stick
[2].axis
[1] == 0))
64 dir
= EAST
;
65 if ((jst.stick
[2].axis
[0] == 1) && (jst.stick
[2].axis
[1] == 1))
66 dir
= SOUTHEAST
;
67 if ((jst.stick
[2].axis
[0] == 0) && (jst.stick
[2].axis
[1] == 1))
68 dir
= SOUTH
;
69 if ((jst.stick
[2].axis
[0] == -1) && (jst.stick
[2].axis
[1] == 1))
70 dir
= SOUTHWEST
;
71 if ((jst.stick
[2].axis
[0] == -1) && (jst.stick
[2].axis
[1] == 0))
72 dir
= WEST
;
73 if ((jst.stick
[2].axis
[0] == -1) && (jst.stick
[2].axis
[1] == -1))
74 dir
= NORTHWEST
;
75
76 }
77 if (ev.type
== ALLEGRO_EVENT_JOYSTICK_BUTTON_DOWN
)
78 {
79 if (jst.button
[0])
80 button
= ZERO
;
81 if (jst.button
[1])
82 button
= ONE
;
83 if (jst.button
[8])
84 button
= EIGHT
;
85 if (jst.button
[9])
86 button
= NINE
;
87 }
88 else if (ev.type
== ALLEGRO_EVENT_TIMER
)
89 {
90 render
= true;
91 frames
++;
92 if (al_current_time
() - gameTime
>= 1)
93 {
94 gameTime
= al_current_time
();
95 gameFPS
= frames
;
96 frames
= 0;
97 }
98 }
99 if (render
&& al_is_event_queue_empty(event_queue
))
100 {
101 render
= false;
102 switch (dir
)
103 {
104 case NORTH:
105 ballposY
-= 3;
106 break;
107 case NORTHEAST:
108 ballposY
-= 2;
109 ballposX
+= 2;
110 break;
111 case EAST:
112 ballposX
+= 3;
113 break;
114 case SOUTHEAST:
115 ballposY
+= 2;
116 ballposX
+= 2;
117 break;
118 case SOUTH:
119 ballposY
+= 3;
120 break;
121 case SOUTHWEST:
122 ballposX
-= 2;
123 ballposY
+= 2;
124 break;
125 case WEST:
126 ballposX
-= 3;
127 break;
128 case NORTHWEST:
129 ballposY
-= 2;
130 ballposX
-= 2;
131 break;
132 }
133 switch (button
)
134 {
135 case ZERO:
136 if (jst.button
[0])
137 image
= al_load_bitmap("goldenball.png");
138 break;
139 case ONE:
140 if (jst.button
[1])
141 image
= al_load_bitmap("silverball.png");
142 break;
143 case EIGHT:
144 if (jst.button
[8])
145 break;
146 case NINE:
147 if (jst.button
[9])
148 alive
= false;
149 break;
150 }
151
152
153// BTW I've tried this with a grid of 128x128 tiles. Both JPEG and pcx with identical results.
154 al_draw_bitmap(image, ballposX, ballposY,
0);
155 al_flip_display();
156 al_clear_to_color(al_map_rgb(0,
0,
0));
157 al_draw_bitmap(texture,
0,
0,
0);
158 }
159 }
160 al_destroy_bitmap(image
);
161 al_destroy_timer(timer
);
162 al_destroy_event_queue(event_queue
);
163 return 0;
164}