void Object::generate_error_bitmap() { if(testBit(ISMEM_BITMAP)) { bitmap = create_memory_bitmap(); } else { bitmap = al_create_bitmap(w, h); } ALLEGRO_COLOR background = al_color_html("#3f51b5"); ALLEGRO_COLOR shadow = al_color_html("#1a237e"); ALLEGRO_COLOR sign = al_color_html("#ffeb3b"); al_set_target_bitmap(bitmap); al_clear_to_color(background); // Shadow (3 triangles) al_draw_filled_triangle(w / 2.0f, h / 4.0f, w, (h * 3.0f) / 4.0f, w / 2.0f, h, shadow); al_draw_filled_triangle(w, (h * 3.0f) / 4.0f, w, h, w / 2.0f, h, shadow); al_draw_filled_triangle(w / 2.0f, h / 4.0f, w / 2.0f, h, w / 4.0f, (h * 3.0f) / 4.0f, shadow); // Alert sign triangle al_draw_filled_triangle(w / 2.0f, h / 4.0f, ((w * 3.0f) / 4), ((h * 3.0f) / 4.0f), w / 4.0f, ((h * 3.0f) / 4.0f), sign); // Exclamation point al_draw_filled_rectangle((w * 15.0f) / 32.0f, ((h * 14.0f) / 32.0f), ((w * 17.0f) / 32.0f), ((h * 19.0f) / 32.0f), background); al_draw_filled_rectangle((w * 15.0f) / 32.0f, (h * 5.0f) / 8.0f, (w * 17.0f) / 32.0f, (h * 11.0f) / 16.0f, background); al_set_target_backbuffer(al_get_current_display()); }
void draw_title(void) { ALLEGRO_FONT *font = NULL; int w; int dw = (al_get_display_width(al_get_current_display()))/4; int dh = (al_get_display_height(al_get_current_display())) / 4; int fonth = dh*0.4; if (!(font = load_font_mem(text_font_mem, TEXT_FONT_FILE, -fonth))) { fprintf(stderr, "Error loading font %s.\n", TEXT_FONT_FILE); return; } al_clear_to_color(BLACK_COLOR); for (w = 0; w<150; w++) { al_draw_filled_rectangle(w+dw, w / 2 + dh, 2*dw - w+dw, 2*dh - w / 2+dh, al_map_rgba_f(0.03, 0.01, 0.01, 0.04)); } al_draw_rectangle(dw, dh, dw+2*dw, dh+2*dh, al_map_rgba_f(.4, .15, .1, 1), 3); w = al_get_text_width(font, "WATSON"); al_draw_textf(font, al_color_html("#576220"), (2*dw - w) / 2+dw, (2*dh - fonth) / 2+dh, ALLEGRO_ALIGN_LEFT, "WATSON"); al_draw_textf(font, al_color_html("#F0C010"), (2*dw - w) / 2 - (fonth*1.0/64)+dw, (2*dh - fonth) / 2 - (fonth*3.0/64)+dh, ALLEGRO_ALIGN_LEFT, "WATSON"); al_destroy_font(font); }
int update_bitmaps(Game *g, Board *b){ int i, j, s; ALLEGRO_BITMAP *dispbuf = al_get_target_bitmap(); al_set_target_bitmap(NULL); // reload text fonts // estimate font size for panel: if(!(b->text_font = load_font_mem(text_font_mem, TEXT_FONT_FILE, -min(b->info_panel.h/2.2, sqrt(b->info_panel.w*b->info_panel.h)/10))) ){ fprintf(stderr, "Error loading font %s.\n", TEXT_FONT_FILE); } // update buttons and timer bmps b->time_bmp = al_create_bitmap(b->time_panel.b[0]->w, b->time_panel.b[0]->h); al_set_target_bitmap(b->time_bmp); al_clear_to_color(b->time_panel.b[0]->bg_color); // this should go here, but by android problems we have to recreate the bitmap on every new text drawing: // b->info_text_bmp = al_create_bitmap(b->info_panel.w, b->info_panel.h); for(i=0; i<4; i++){ b->button_bmp_scaled[i] = scaled_clone_bitmap(b->button_bmp[i], b->time_panel.b[i+1]->w, b->time_panel.b[i+1]->h); } al_set_target_bitmap(dispbuf); if (b->type_of_tiles == 0) { // use font bitmaps return update_font_bitmaps(g, b); } // else update normal bitmaps: al_set_target_bitmap(NULL); s=min(b->panel.b[0]->b[0]->w, b->panel.b[0]->b[0]->h); for(i=0;i<b->h;i++){ for(j=0;j<b->n;j++){ b->guess_bmp[i][j] = al_create_bitmap(b->panel.b[0]->b[0]->w, b->panel.b[0]->b[0]->h); b->panel_tile_bmp[i][j] = al_create_bitmap(b->panel_tile_size,b->panel_tile_size); b->clue_unit_bmp[i][j] = al_create_bitmap(b->clue_unit_size, b->clue_unit_size); if(!b->guess_bmp[i][j] || !b->panel_tile_bmp[i][j] || !b->clue_unit_bmp[i][j]){ fprintf(stderr, "Error creating bitmap.\n"); return -1; } // guessed bitmaps al_set_target_bitmap(b->guess_bmp[i][j]); if(b->type_of_tiles != 2) // not classic tiles al_clear_to_color(al_color_html(CLUE_BG_COLOR_BMP[i])); else al_clear_to_color(b->panel.b[0]->b[0]->bg_color); if(TILE_SHADOWS) draw_shadow(b->panel.b[0]->b[0]->w, b->panel.b[0]->b[0]->h,2); else al_draw_rectangle(.5,.5,b->panel.b[0]->b[0]->w-.5, b->panel.b[0]->b[0]->h-.5, TILE_GENERAL_BD_COLOR,1); al_draw_scaled_bitmap(basic_bmp[i][j], 0, 0, al_get_bitmap_width(basic_bmp[i][j]), al_get_bitmap_height(basic_bmp[i][j]), (b->panel.b[0]->b[0]->w-s)/2, (b->panel.b[0]->b[0]->h-s)/2, s, s, 0); // panel bitmaps al_set_target_bitmap(b->panel_tile_bmp[i][j]); al_clear_to_color(al_color_html(CLUE_BG_COLOR_BMP[i])); if(TILE_SHADOWS) draw_shadow(b->panel_tile_size, b->panel_tile_size,1); else al_draw_rectangle(.5,.5,b->panel_tile_size-.5,b->panel_tile_size-.5, TILE_GENERAL_BD_COLOR,1); al_draw_scaled_bitmap(basic_bmp[i][j], 0, 0, al_get_bitmap_width(basic_bmp[i][j]), al_get_bitmap_height(basic_bmp[i][j]), 0, 0, b->panel_tile_size, b->panel_tile_size,0); // clue unit tile bitmaps al_set_target_bitmap(b->clue_unit_bmp[i][j]); al_clear_to_color(al_color_html(CLUE_BG_COLOR_BMP[i])); if(TILE_SHADOWS) draw_shadow(b->clue_unit_size,b->clue_unit_size,2); else al_draw_rectangle(.5,.5,b->clue_unit_size-.5, b->clue_unit_size-.5, TILE_GENERAL_BD_COLOR,1); al_draw_scaled_bitmap(basic_bmp[i][j], 0, 0, al_get_bitmap_width(basic_bmp[i][j]), al_get_bitmap_height(basic_bmp[i][j]), 0, 0, b->clue_unit_size, b->clue_unit_size,0); } } if(b->type_of_tiles != 2) { if(draw_symbols(g,b)) return -1; } else { if(draw_classic_symbols(g,b)) return -1; } al_set_target_bitmap(dispbuf); // create clue tile bmps return make_clue_bitmaps(g, b); }
int update_font_bitmaps(Game *g, Board *b){ int i, j, s; float FONT_FACTOR=1; ALLEGRO_FONT *tile_font1, *tile_font2, *tile_font3; ALLEGRO_BITMAP *dispbuf = al_get_target_bitmap(); int bbx, bby, bbw, bbh; al_set_target_bitmap(NULL); s=min(b->panel.b[0]->b[0]->w, b->panel.b[0]->b[0]->h); tile_font1 = load_font_mem(tile_font_mem, TILE_FONT_FILE, -s*FONT_FACTOR); tile_font2 = load_font_mem(tile_font_mem, TILE_FONT_FILE, -b->panel_tile_size*FONT_FACTOR); tile_font3 = load_font_mem(tile_font_mem, TILE_FONT_FILE, -b->clue_unit_size*FONT_FACTOR); if(!tile_font1 || !tile_font2 || !tile_font3) { fprintf(stderr, "Error loading tile font file %s.\n", TILE_FONT_FILE); return -1; } for(i=0;i<b->h;i++){ for(j=0;j<b->n;j++){ b->guess_bmp[i][j] = al_create_bitmap(b->panel.b[0]->b[0]->w, b->panel.b[0]->b[0]->h); b->panel_tile_bmp[i][j] = al_create_bitmap(b->panel_tile_size,b->panel_tile_size); b->clue_unit_bmp[i][j] = al_create_bitmap(b->clue_unit_size, b->clue_unit_size); if(!b->guess_bmp[i][j] || !b->panel_tile_bmp[i][j] || !b->clue_unit_bmp[i][j]){ fprintf(stderr, "Error creating bitmap.\n"); return -1; } // guessed bitmaps al_set_target_bitmap(b->guess_bmp[i][j]); al_clear_to_color(al_color_html(CLUE_BG_COLOR[i])); al_get_glyph_dimensions(tile_font1, CLUE_CODE[i][j][0], &bbx, &bby, &bbw, &bbh); if(GLYPH_SHADOWS){ al_draw_glyph(tile_font1, DARK_GREY_COLOR, (b->panel.b[0]->b[0]->w-bbw)/2 -bbx +1,(b->panel.b[0]->b[0]->h-bbh)/2-bby+1, CLUE_CODE[i][j][0]); } al_draw_glyph(tile_font1, al_color_html(CLUE_FG_COLOR[i]), (b->panel.b[0]->b[0]->w-bbw)/2 -bbx,(b->panel.b[0]->b[0]->h-bbh)/2-bby, CLUE_CODE[i][j][0]); // this draws a border for all tiles, independent of the "bd" setting in b if(TILE_SHADOWS) draw_shadow(b->panel.b[0]->b[0]->w, b->panel.b[0]->b[0]->h,2); else al_draw_rectangle(.5,.5,b->panel.b[0]->b[0]->w-.5, b->panel.b[0]->b[0]->h-.5, TILE_GENERAL_BD_COLOR,1); // panel bitmaps al_set_target_bitmap(b->panel_tile_bmp[i][j]); al_clear_to_color(al_color_html(CLUE_BG_COLOR[i])); al_get_glyph_dimensions(tile_font2, CLUE_CODE[i][j][0], &bbx, &bby, &bbw, &bbh); if(GLYPH_SHADOWS){ al_draw_glyph(tile_font2, DARK_GREY_COLOR,(b->panel_tile_size -bbw)/2-bbx+1, (b->panel_tile_size - bbh)/2-bby+1, CLUE_CODE[i][j][0]); } al_draw_glyph(tile_font2, al_color_html(CLUE_FG_COLOR[i]),(b->panel_tile_size -bbw)/2-bbx, (b->panel_tile_size - bbh)/2-bby, CLUE_CODE[i][j][0]); if(TILE_SHADOWS) draw_shadow(b->panel_tile_size, b->panel_tile_size,2); else al_draw_rectangle(.5,.5,b->panel_tile_size-.5,b->panel_tile_size-.5, TILE_GENERAL_BD_COLOR,1); // clue unit tile bitmaps al_set_target_bitmap(b->clue_unit_bmp[i][j]); al_clear_to_color(al_color_html(CLUE_BG_COLOR[i])); al_get_glyph_dimensions(tile_font3, CLUE_CODE[i][j][0], &bbx, &bby, &bbw, &bbh); if(GLYPH_SHADOWS){ al_draw_glyph(tile_font3, DARK_GREY_COLOR, (b->clue_unit_size-bbw)/2 -bbx +1,(b->clue_unit_size-bbh)/2-bby+1, CLUE_CODE[i][j][0]); } al_draw_glyph(tile_font3, al_color_html(CLUE_FG_COLOR[i]), (b->clue_unit_size-bbw)/2 -bbx,(b->clue_unit_size-bbh)/2-bby, CLUE_CODE[i][j][0]); if(TILE_SHADOWS) draw_shadow(b->clue_unit_size,b->clue_unit_size,2); else al_draw_rectangle(.5,.5,b->clue_unit_size-.5, b->clue_unit_size-.5, TILE_GENERAL_BD_COLOR,1); } } if(draw_symbols(g, b)) return -1; al_destroy_font(tile_font1); al_destroy_font(tile_font2); al_destroy_font(tile_font3); al_set_target_backbuffer(al_get_current_display()); // create clue tile bmps al_set_target_bitmap(dispbuf); return make_clue_bitmaps(g, b); }
void multiPlayer() { ALLEGRO_BITMAP *rightPlayer = NULL; ALLEGRO_BITMAP *leftPlayer = NULL; ALLEGRO_BITMAP *ball = NULL; ALLEGRO_BITMAP *canvas = NULL, *mp1wins = NULL, *mp2wins = NULL; canvas = al_load_bitmap("canvas.bmp"); mp1wins = al_load_bitmap("mpp1.bmp"); mp2wins = al_load_bitmap("mpp2.bmp"); rightPlayer = al_create_bitmap(PLAYER_WIDTH, PLAYER_HEIGHT); leftPlayer = al_create_bitmap(PLAYER_WIDTH, PLAYER_HEIGHT); ball = al_create_bitmap(BALL_SIZE, BALL_SIZE); bool refresh = false, exit = false, keyUp = false, keyDown = false, keyW = false, keyS = false; float rightX = 700, rightY = 250, leftX = 100, leftY = 250, ballX = 393, ballY = 43, ballXSpeed = speed, ballYSpeed = speed * -1; while (!exit) { al_draw_bitmap(canvas, 0, 0, 0); ALLEGRO_EVENT ev; al_wait_for_event(eventQueue, &ev); switch (ev.type) { case ALLEGRO_EVENT_TIMER: if (keyUp && rightY >= 23) { rightY -= speed; } if (keyDown && rightY <= SCREEN_H - PLAYER_HEIGHT - 23){ rightY += speed; } if (keyW && leftY >= 23) { leftY -= speed; } if (keyS && leftY <= SCREEN_H - PLAYER_HEIGHT - 23){ leftY += speed; } if (ballX < 30 || ballX > SCREEN_W - (BALL_SIZE + 23)) { ballXSpeed = -ballXSpeed; } if (ballY < 30 || ballY > SCREEN_H - (BALL_SIZE + 23)) { ballYSpeed = -ballYSpeed; } if (ballX - speed <= leftX + PLAYER_WIDTH + 6) { //only x axis calc if (ballY >= leftY - 2 && ballY <= leftY + PLAYER_HEIGHT) { ballXSpeed = -ballXSpeed; al_play_sample(hitSound, 1.0, 0.0, 1.0, ALLEGRO_PLAYMODE_ONCE, NULL); } else { //Player 2 won al_draw_bitmap(mp2wins, 0, 0, 0); al_flip_display(); al_play_sample(yaySound, 1.0, 0.0, 1.0, ALLEGRO_PLAYMODE_ONCE, NULL); do al_wait_for_event(eventQueue, &ev); while (ev.type != ALLEGRO_EVENT_KEY_DOWN); exit = true; } } if (ballX + speed > rightX - PLAYER_WIDTH / 2) { //only x axis calc if (ballY >= rightY - 2 && ballY <= rightY + PLAYER_HEIGHT) { ballXSpeed = -ballXSpeed; al_play_sample(hitSound, 1.0, 0.0, 1.0, ALLEGRO_PLAYMODE_ONCE, NULL); } else { //Player 1 won al_draw_bitmap(mp1wins, 0, 0, 0); al_flip_display(); al_play_sample(yaySound, 1.0, 0.0, 1.0, ALLEGRO_PLAYMODE_ONCE, NULL); do al_wait_for_event(eventQueue, &ev); while (ev.type != ALLEGRO_EVENT_KEY_DOWN); exit = true; } } ballX += ballXSpeed; ballY += ballYSpeed; refresh = true; break; case ALLEGRO_EVENT_KEY_DOWN: switch (ev.keyboard.keycode) { case ALLEGRO_KEY_UP: keyUp = true; break; case ALLEGRO_KEY_DOWN: keyDown = true; break; case ALLEGRO_KEY_W: keyW = true; break; case ALLEGRO_KEY_S: keyS = true; break; case ALLEGRO_KEY_ESCAPE: exit = true; refresh = false; break; } break; case ALLEGRO_EVENT_KEY_UP: switch (ev.keyboard.keycode) { case ALLEGRO_KEY_UP: keyUp = false; break; case ALLEGRO_KEY_DOWN: keyDown = false; break; case ALLEGRO_KEY_W: keyW = false; break; case ALLEGRO_KEY_S: keyS = false; break; } break; } if (refresh){ refresh = false; // Draw right player al_draw_filled_rectangle(rightX, rightY, rightX + PLAYER_WIDTH, rightY + PLAYER_HEIGHT, al_color_html("ffffff")); // Draw left player al_draw_filled_rectangle(leftX, leftY, leftX + PLAYER_WIDTH, leftY + PLAYER_HEIGHT, al_color_html("ffffff")); // Draw ball al_draw_filled_circle(ballX, ballY, BALL_SIZE, al_color_html("ffffff")); al_flip_display(); } } al_destroy_bitmap(rightPlayer); al_destroy_bitmap(leftPlayer); al_destroy_bitmap(ball); al_destroy_bitmap(mp1wins); al_destroy_bitmap(mp2wins); al_destroy_bitmap(canvas); }
void Color::from_html(char *html) { RAGE_CHECK_DISPOSED(disposed); color = al_color_html(html); }
void al_color_html_w(char const *string, ALLEGRO_COLOR *color) { *color = al_color_html(string); }