示例#1
0
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());
}
示例#2
0
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);

}
示例#3
0
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);
}
示例#4
0
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);
    
}
示例#5
0
文件: main.cpp 项目: henriquesa/pong
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);
}
示例#6
0
文件: Color.cpp 项目: ArekX/RAGE
		void Color::from_html(char *html)
		{
			RAGE_CHECK_DISPOSED(disposed);
			
			color = al_color_html(html);
		}
示例#7
0
void al_color_html_w(char const *string, ALLEGRO_COLOR *color)
{
	*color = al_color_html(string);
}