Esempio n. 1
0
void player_draw(Player* plr) {
	draw_enemies(plr->slaves);
	
	glPushMatrix();
		glTranslatef(creal(plr->pos), cimag(plr->pos), 0);
		
		if(plr->focus != 0) {
			glPushMatrix();
				glRotatef(global.frames*10, 0, 0, 1);
				glScalef(1, 1, 1);
				glColor4f(1,1,1,0.2);
				draw_texture(0, 0, "fairy_circle");
				glColor4f(1,1,1,1);
			glPopMatrix();
		}
					
		glDisable(GL_CULL_FACE);
		if(plr->dir) {
			glPushMatrix();
			glScalef(-1,1,1);
		}
		
		int clr_changed = 0;
		
		if(global.frames - abs(plr->recovery) < 0 && (global.frames/8)&1) {
			glColor4f(0.4,0.4,1,0.9);
			clr_changed = 1;
		}
				
		draw_animation_p(0, 0, !plr->moving, player_get_ani(plr->cha));
		
		if(clr_changed)
			glColor3f(1,1,1);
		
		if(plr->dir)
			glPopMatrix();
		
		glEnable(GL_CULL_FACE);
		
		if(plr->focus != 0) {
			glPushMatrix();
				glColor4f(1,1,1,fabs((float)plr->focus/30.0f));
				glRotatef(global.frames, 0, 0, -1);
				draw_texture(0, 0, "focus");
				glColor4f(1,1,1,1);
			glPopMatrix();
		}
		
	glPopMatrix();
}
Esempio n. 2
0
//------------------------------
// Drawing functions
//------------------------------
void draw_everything()
{
    // Fill the screen with black
    SDL_FillRect(screen,NULL, 0x000000);
    
    // Draw background
    draw_background();
    
    // Draw the title screen
    if(gamestate_title == true)
        draw_titlescreen();
    else
    {
        // Draw the game objects
        if(gamestate_over == false)
            draw_player();
        draw_enemies();
        draw_explosions();
        draw_lasers();
        draw_info();
        draw_statustext();
    }
}
Esempio n. 3
0
void episode_game::draw()
{
    glColor3f(1.f,1.f,1.f);
	
    _background.draw();
	
    //glEnable(GL_BLEND);
    //glBlendFunc(GL_ONE,GL_ONE_MINUS_SRC_ALPHA);
    //glShadeModel(GL_FLAT);
	
    draw_enemies();
	
	draw_main_character();
	
	draw_bullets();
	
	// draw explosions
	for(auto it = _explosions.begin(); it!=_explosions.end();++it)
	{
		(*it)->draw();
	}
	if(_character_explosion!=NULL)
	{
		_character_explosion->draw();
	}
	
	// bomb
	if(_bomb!=NULL)
	{
		_bomb->draw();
	}
	
	//glDisable(GL_BLEND);
	
	// energy
	_energy->draw();
}
Esempio n. 4
0
File: game.c Progetto: noox/Raketka
//funkce pro kresleni 
void draw_game() {
	float t;
	
	draw_stars();
	draw_enemies();
	draw_bullets();
	draw_particles();
	draw_bonuses();
	
	//mod pro koncovy screen hry
	if (playerdead) { 
		//smesovani barev
		glEnable(GL_BLEND);
		
		//vyber blendovaci funkce
		glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); 
		
		//zesednuti pozadi
		glColor4f(0, 0, 0, 0.6);
		glBegin(GL_QUADS);
		glVertex2f(-250, -350);
		glVertex2f(250, -350);
		glVertex2f(250, 350);
		glVertex2f(-250, 350);
		glEnd();
		
		glDisable(GL_BLEND);
		
		//kresleni statistik hry na konci hry
		glPushMatrix();
		glTranslatef(-240, 0, 0);
		glScalef(18, 18, 0);
		glColor3f(0, 1, 0);
		glPushMatrix();
			glTranslatef(2, 5, 0);
			glScalef(4, 4, 0);
			draw_string("GAME OVER");
			glColor3f(1, 1, 1);
			glTranslatef(0.03, 0.03, 0);
			draw_string("GAME OVER");
		glPopMatrix();
		draw_string("LEVEL");
		glTranslatef(3.5, 0, 0);
		draw_int(level);
		glTranslatef(-3.5, -1, 0);
		draw_string("SCORE");
		glTranslatef(3.5, 0, 0);
		draw_int(score);
		glTranslatef(-3.5, -5, 0);
		glPushMatrix();
			glTranslatef(0.3, -4, 0);
			glScalef(2, 2, 0);
			glColor3f(0, 1, 0);
			draw_string("PRESS FIRE TO RESTART");
		glPopMatrix();
		glPopMatrix();
	}
	else {
		//statistika hry v levem spodnim rohu
		glPushMatrix(); 
		glTranslatef(-240, -305, 0);
		glScalef(18, 18, 1);
		glColor3f(0, 1, 0);
		draw_string("POWER");
		glTranslatef(3.5, 0, 0);
		draw_int(plevel);
		glTranslatef(-3.5, -1, 0);
		draw_string("LEVEL");
		glTranslatef(3.5, 0, 0);
		draw_int(level);
		glTranslatef(-3.5, -1, 0);
		draw_string("SCORE");
		glTranslatef(3.5, 0, 0);
		draw_int(score);
		glPopMatrix();

		glTranslatef(posx, posy, 0);
		
		//raketka
		glBegin(GL_TRIANGLES); 
		glColor3f(0, 0, 1);
		glVertex2f(-20, -10);
		glColor3f(0.5, 0.5, 1);
		glVertex2f(0, 0);
		glVertex2f(0, 50);

		glVertex2f(0, 50);
		glVertex2f(0, 0);
		glColor3f(0, 0, 1);
		glVertex2f(20, -10);

		glColor3f(1, 0, 0);
		glVertex2f(0, 0);
		glColor3f(1, 1, 0);
		glVertex2f(-2.5, -6);
		glVertex2f(2.5, -6);
		glEnd();
		
		//pokud hrac sebere stitovy bonus
		if (shieldtimer>0) {
			//poslednich 5 vterin stit blika
			if (shieldtimer<5) 
				t=sinf(shieldtimer*20); 
			else t=1;
			
			glColor3f(0.3*t*t, 0.3*t*t, 0.6*t*t);
			
			//nakresleni trojuhelnikoveho stitu
			glBegin(GL_LINE_LOOP);
			glVertex2f(0, 55);
			glVertex2f(-25, -15);
			glVertex2f(25, -15);
			glEnd();
		}
	}
}
Esempio n. 5
0
File: main.cpp Progetto: Mjiig/LD24
int main()
{
	ALLEGRO_DISPLAY *display = NULL;
	ALLEGRO_EVENT_QUEUE *event_queue=NULL;
	ALLEGRO_TIMER *timer=NULL;
	ALLEGRO_FONT *font=NULL;
	bool keys[4]={false, false, false, false};
	bool redraw;
	enum tile map[50][30];
	struct player player;
	struct enemy enemies[100];
	int next;
	int selected_enemy=100;
	int level=1;
	int best=1;

	
	player.power=5;
	player.health=30;
	player.max_health=30;
	player.speed=2;
	player.x=0;
	player.y=0;
	player.turns_missed=0;
	player.kills=0;
	player.upgrades=4;

	if(!init(&display, &event_queue, &timer))
	{
		return 1;
	}

	init_map(map);

	init_enemies(enemies, map, 5);

	font=al_load_font("Xolonium-Regular.otf", 30, 0);

	while(42)
	{
		ALLEGRO_EVENT ev;
		al_wait_for_event(event_queue, &ev);

		if(ev.type == ALLEGRO_EVENT_TIMER)
		{
			redraw=true;
			next=select_mover(player, enemies);
			if(next==100)
			{
				if(move_player(&player, keys, map, enemies))
				{
					player.turns_missed=0;
					inc_turns(&player, enemies);
				}
			}
			else
			{
				int ret_x, ret_y;
				search(enemies[next].x, enemies[next].y, map, player.x, player.y, &ret_x, &ret_y);
				if(!is_player(ret_x, ret_y, player) && is_enemy(ret_x, ret_y, enemies)==100)
				{
					enemies[next].x=ret_x;
					enemies[next].y=ret_y;
				}
				if(is_player(ret_x, ret_y, player))
				{
					fight(&player, enemies, next);
				}
				enemies[next].turns_missed=0;
				inc_turns(&player, enemies);
				if(!(rand()%(150/level)))
				{
					breed(enemies, map);
				}
			}

			if(enemies[selected_enemy].health<=0)
			{
				selected_enemy=100;
			}

			if(all_enemies_dead(enemies))
			{
				level++;
				init_map(map);
				init_enemies(enemies, map, level*5);
				player.x=0;
				player.y=0;
				if(level>best)
				{
					best=level;
				}
			}

			if(player.health<=0)
			{
				level=1;
				init_map(map);
				init_enemies(enemies, map, level*5);
				player.power=5;
				player.health=30;
				player.max_health=30;
				player.speed=2;
				player.x=0;
				player.y=0;
				player.turns_missed=0;
				player.kills=0;
				player.upgrades=0;
			}
		}
		else if(ev.type==ALLEGRO_EVENT_DISPLAY_CLOSE)
		{
			break;
		}
		else if(ev.type == ALLEGRO_EVENT_KEY_DOWN)
		{
			switch(ev.keyboard.keycode)
			{
				case ALLEGRO_KEY_UP:
					keys[KEY_UP]=true;
					break;
				case ALLEGRO_KEY_DOWN:
					keys[KEY_DOWN]=true;
					break;
				case ALLEGRO_KEY_RIGHT:
					keys[KEY_RIGHT]=true;
					break;
				case ALLEGRO_KEY_LEFT:
					keys[KEY_LEFT]=true;
					break;
			}
		}
		else if(ev.type == ALLEGRO_EVENT_KEY_UP)
		{
			switch(ev.keyboard.keycode)
			{
				case ALLEGRO_KEY_UP:
					keys[KEY_UP]=false;
					break;
				case ALLEGRO_KEY_DOWN:
					keys[KEY_DOWN]=false;
					break;
				case ALLEGRO_KEY_RIGHT:
					keys[KEY_RIGHT]=false;
					break;
				case ALLEGRO_KEY_LEFT:
					keys[KEY_LEFT]=false;
					break;
			}
		}
		else if(ev.type == ALLEGRO_EVENT_MOUSE_BUTTON_DOWN)
		{
			int old_selected=selected_enemy;

			selected_enemy=is_enemy(ev.mouse.x/18, ev.mouse.y/18, enemies);

			if(selected_enemy==100)
				selected_enemy=old_selected;

			if(ev.mouse.x>900 && player.kills >= (player.upgrades * player.upgrades)/10)
			{
				bool change=false;
				if(ev.mouse.y>10 && ev.mouse.y<40)
				{
					player.max_health+=5;
					player.health=player.max_health;
					change=true;
				}
				else if(ev.mouse.y>50 && ev.mouse.y<80)
				{
					player.power+=2;
					change=true;
				}
				else if(ev.mouse.y>90 && ev.mouse.y<120)
				{
					player.speed+=1;
					change=true;
				}
				
				if(change)
				{
					player.upgrades+=1;
				}
			}
		}

		if(redraw && al_is_event_queue_empty(event_queue))
		{
			redraw=false;
			al_clear_to_color(al_map_rgb(255, 255, 255));
			draw_map(map);
			draw_enemies(enemies);
			al_draw_bitmap(player_img, player.x*18, player.y*18, 0);
			al_draw_textf(font, al_map_rgb(0, 255, 0), 950, 10, ALLEGRO_ALIGN_CENTRE, "%d", player.health);
			al_draw_textf(font, al_map_rgb(0, 255, 0), 950, 50, ALLEGRO_ALIGN_CENTRE, "%d", player.power);
			al_draw_textf(font, al_map_rgb(0, 255, 0), 950, 90, ALLEGRO_ALIGN_CENTRE, "%d", player.speed);
			al_draw_textf(font, al_map_rgb(0, 0, 255), 950, 150, ALLEGRO_ALIGN_CENTRE, "%d", player.kills);
			al_draw_textf(font, al_map_rgb(0, 0, 255), 950, 190, ALLEGRO_ALIGN_CENTRE, "%d", (player.upgrades*player.upgrades)/10);
			if(selected_enemy!=100)
			{
				al_draw_textf(font, al_map_rgb(255, 0, 0), 950, 250, ALLEGRO_ALIGN_CENTRE, "%d", enemies[selected_enemy].health);
				al_draw_textf(font, al_map_rgb(255, 0, 0), 950, 290, ALLEGRO_ALIGN_CENTRE, "%d", enemies[selected_enemy].power);
				al_draw_textf(font, al_map_rgb(255, 0, 0), 950, 330, ALLEGRO_ALIGN_CENTRE, "%d", enemies[selected_enemy].speed);
			}
			al_draw_textf(font, al_map_rgb(0, 0, 0), 950, 390, ALLEGRO_ALIGN_CENTRE, "%d", level);
			al_draw_textf(font, al_map_rgb(0, 0, 0), 950, 430, ALLEGRO_ALIGN_CENTRE, "%d", best);
			al_flip_display();
		}
	}

	return 0;
}