Exemplo n.º 1
0
void new_ipobble_window()
{

	ipobble_gc = pz_get_gc(1);

	GrSetGCUseBackground(ipobble_gc, GR_TRUE);
	GrSetGCForeground(ipobble_gc, BLACK);
	GrSetGCBackground(ipobble_gc, WHITE);

	ipobble_wid = pz_new_window(0, HEADER_TOPLINE + 1,
			screen_info.cols,
			screen_info.rows - HEADER_TOPLINE - 1,
			ipobble_do_draw, ipobble_handle_event);

	GrSelectEvents(ipobble_wid, GR_EVENT_MASK_TIMER |
			GR_EVENT_MASK_EXPOSURE | GR_EVENT_MASK_KEY_UP |
			GR_EVENT_MASK_KEY_DOWN);
	if( screen_info.bpp > 2) {
	    ipodc=1;
	}
	
	score = 0;
	level = 0;
	game_status = GAME_STATUS_PLAY;
	ipobble_create_board(level);

	ipobble_timer_id = GrCreateTimer(ipobble_wid, DELTA_TIME);

	GrMapWindow(ipobble_wid);
	
	draw_first();
}
Exemplo n.º 2
0
void new_invaders_window()
{

	invaders_gc = pz_get_gc(1);

	GrSetGCUseBackground(invaders_gc, GR_TRUE);
	GrSetGCBackground(invaders_gc, GR_RGB(255,255,255));
	GrSetGCForeground(invaders_gc, GR_RGB(0,0,0));
	
	invaders_score_pix = GrNewPixmap(screen_info.cols, 13, 0);

	invaders_wid = pz_new_window(0,
				HEADER_TOPLINE + 1,
				screen_info.cols,
				screen_info.rows - HEADER_TOPLINE - 1,
				invaders_do_draw,
				invaders_handle_event);

	GrSelectEvents(invaders_wid, GR_EVENT_MASK_TIMER |
			GR_EVENT_MASK_EXPOSURE | GR_EVENT_MASK_KEY_UP |
			GR_EVENT_MASK_KEY_DOWN);
	
	score = 0;
	level = 0;
	aliens_rows = (screen_info.rows - 40) / 20;	
	
	game_status = GAME_STATUS_PLAY;
	invaders_create_board(level);

	invaders_timer_id = GrCreateTimer(invaders_wid, 50);

	GrMapWindow(invaders_wid);
	
	draw_first();
}
Exemplo n.º 3
0
void text_field::change_data(char const *new_data, int new_cursor, // cursor==-1, does not change it.
                 int active, image *screen)
{
  if (strlen(format)<strlen(new_data))
    data=(char *)realloc(data,strlen(new_data));

  strcpy(data,new_data);
  if (new_cursor!=-1)
    cur=new_cursor;
  draw_first(screen);
  draw(active,screen);
}
Exemplo n.º 4
0
void button::handle_event(event &ev, image *screen, InputManager *im)
{
  if ((ev.type==EV_KEY && ev.key==13) || (ev.type==EV_MOUSE_BUTTON &&
                                         ev.mouse_button))
  {
    int  x1,y1,x2,y2;
    area(x1,y1,x2,y2);
    up=!up;
    draw_first(screen);
    draw(act,screen);
    wm->push_event(new event(id,(char *)this));
  }
}
Exemplo n.º 5
0
void tool_picker::remap(palette *pal, image *screen)
{
  delete map;
  map=new Filter(old_pal,pal);
  draw_first(screen);
}
Exemplo n.º 6
0
static int ipobble_handle_event(GR_EVENT *event)
{
	int ret = 0;
	static int paused = 0;
	
	if(game_status) {
		switch(event->type) {
		case ( GR_EVENT_TYPE_TIMER ):
			if (!paused)
				ipobble_Game_Loop();
			break;
		/* if in game there is 1 status: waiting for direction */
		case( GR_EVENT_TYPE_KEY_DOWN ):
			switch(event->keystroke.ch) {
			case '\r': /* push button : do fire! */
				if(ball_firing)
					break;
				do_fire();
				ret |= KEY_CLICK;
				break;

			case 'l':
				GrSetGCForeground(ipobble_gc, WHITE);
				me_draw(current_angle);
				draw_podzilla(podzilla_bmp_var);
				if(accel_status>0)
					accel_status++;
				else
					accel_status=1;
				current_angle = (current_angle >= 80) ? 80 :
					current_angle + delta_angle *
					(accel_status / 5 + 1);
				GrSetGCForeground(ipobble_gc, BLACK);
				podzilla_bmp_var = !podzilla_bmp_var;
				draw_podzilla(podzilla_bmp_var);
				me_draw(current_angle);
				ret |= KEY_CLICK;
				break;

			case 'r':
				GrSetGCForeground(ipobble_gc, WHITE);
				me_draw(current_angle);
				draw_podzilla(podzilla_bmp_var);
				if (accel_status < 0)
					accel_status--;
				else
					accel_status=-1;
				current_angle = (current_angle <= -80) ? -80 :
					current_angle + delta_angle *
					(accel_status / 5 - 1);
				GrSetGCForeground(ipobble_gc, BLACK);
				podzilla_bmp_var = !podzilla_bmp_var;
				draw_podzilla(podzilla_bmp_var);
				me_draw(current_angle);
				ret |= KEY_CLICK;
				break;	

			case 'm':
				/* if Menu Button then destroy all dynamically
				 * created */
				pz_close_window(ipobble_wid);
				GrDestroyTimer (ipobble_timer_id);
				GrDestroyGC(ipobble_gc);
				break;

			case 'h':
				paused = 1;
				break;
				
			default:
				ret |= KEY_UNUSED;
				break;
				
			}
			
			break;

		case( GR_EVENT_TYPE_KEY_UP ):
			if (event->keystroke.ch == 'h')
				paused = 0;	
			break;

		default:
			ret |= EVENT_UNUSED;
			break;
		}
		return ret;
	} /* if game status play */
	
	/* END OF GAME */
	
	if(onetime == 0){

		GrSetGCForeground(ipobble_gc, BLACK);
		GrText(ipobble_wid, ipobble_gc, screen_info.cols / 2 - 36,
				screen_info.rows / 2 - 24, "GAME OVER", -1,
				GR_TFASCII);
		gameover_waitcounter = 30;
	}
	onetime = 1;
	gameover_waitcounter--;
	switch(event->type) {
	case( GR_EVENT_TYPE_KEY_DOWN ):
		switch(event->keystroke.ch) {
		case '\r': /* push button */
			if(gameover_waitcounter <= 0){
				score = 0;
				GrSetGCForeground(ipobble_gc, WHITE);
				GrFillRect(ipobble_wid, ipobble_gc, 0, 0,
						screen_info.cols,
						screen_info.rows);
				GrSetGCForeground(ipobble_gc, BLACK);
				level = 0;
				score = 0;
				ipobble_create_board(level);
				game_status = GAME_STATUS_PLAY;
				draw_first();
				ret |= KEY_CLICK;
			}
			break;
				
		case 'm':
			/* if Menu Button then destroy all dynamically
			 * created */
			pz_close_window(ipobble_wid);
			GrDestroyTimer(ipobble_timer_id);
			GrDestroyGC(ipobble_gc);
			break;

		default:
			ret |= KEY_UNUSED;
			break;	
		}
		break;
	default:
		ret |= EVENT_UNUSED;
		break;
	}	
	return ret;
}
Exemplo n.º 7
0
static int invaders_handle_event(GR_EVENT *event)
{
	int ret = 0;
	static int paused;
	if(game_status) {
		switch(event->type) {
		case ( GR_EVENT_TYPE_TIMER ):
			if (!paused)
				invaders_Game_Loop();
			break;
		case( GR_EVENT_TYPE_KEY_DOWN ):
			switch(event->keystroke.ch) {
			case '\r': /* push button */
				if(me_firing < ME_MAX_FIRES) {
					me_firing++;
					myfire[me_firing - 1].posx = me_posx;
					myfire[me_firing - 1].posy = me_posy -4;
					myfire[me_firing - 1].dir = -2;
				}
				ret |= KEY_CLICK;
				break;

			case 'l':
				GrSetGCForeground(invaders_gc, GR_RGB(255,255,255));
				me_draw();
				GrSetGCForeground(invaders_gc, GR_RGB(0,0,0));

				if(me_still == 'l'){
					me_accel_counter++;
					me_accel = (me_accel_counter < 20) ?
						me_accel_counter / 5 : me_accel;
				} else {
					me_still = 'l';
					me_accel_counter = 0;
					me_accel = 2;
				}
				me_posx = (me_posx <= me_left) ? me_left :
					(me_posx - me_accel);
				me_draw();
				ret |= KEY_CLICK;
				break;
			case 'r':
				GrSetGCForeground(invaders_gc, GR_RGB(255,255,255));
				me_draw();
				GrSetGCForeground(invaders_gc, GR_RGB(0,0,0));

				if(me_still == 'r'){
					me_accel_counter++;
					me_accel = (me_accel_counter < 20) ?
						me_accel_counter / 5 : me_accel;
				} else {
					me_still = 'r';
					me_accel_counter = 0;
					me_accel = 2;
				}
				me_posx = (me_posx >= me_right) ? me_right :
					me_posx + me_accel;
				me_draw();
				ret |= KEY_CLICK;
				break;	
			case 'm':
				/* if Menu Button destroy all dynamically
				 * created */
				pz_close_window(invaders_wid);
				GrDestroyWindow(invaders_score_pix);
				GrDestroyTimer (invaders_timer_id);
				GrDestroyGC(invaders_gc);
				break;
			case 'h':
				paused = 1;
				break;
			default:
				me_still = 0; /* for what key? */
				ret |= KEY_UNUSED; /* right? */
				break;
			}
			break;
		case( GR_EVENT_TYPE_KEY_UP ):
			switch(event->keystroke.ch) {
			case 'h': /* push button */
				paused = 0;
				break;
			default:
				ret |= KEY_UNUSED;
			}
			break;
		default:
			ret |= KEY_UNUSED;
		}
		return ret;
	}/* if game status play */
	
	/* END OF GAME */
	if(onetime == 0){
		char game_over[] = "GAME OVER";
		int x = screen_info.cols / 2;
		int y = ((screen_info.rows - 21) / 4) * 3;
		int xp = x - (vector_string_pixel_width(game_over, 1, 2) / 2);
		int yp = y - 8;
		GrSetGCForeground(invaders_gc, GR_RGB(255,255,255));
		GrFillRect(invaders_wid, invaders_gc, xp - 2, yp - 2,
				(x - xp + 2) * 2, (y - yp + 2) * 2);
		GrSetGCForeground(invaders_gc, GR_RGB(0,0,0));
		vector_render_string(invaders_wid, invaders_gc,
				game_over, 1, 2,
				xp, yp);
		gameover_waitcounter = 30;
	}
	onetime = 1;
	gameover_waitcounter--;
	switch(event->type) {
	case( GR_EVENT_TYPE_KEY_DOWN ):
		switch(event->keystroke.ch) {
		case '\r': /* push button */
			if(gameover_waitcounter <= 0) {
				score = 0;
				GrSetGCForeground(invaders_gc, GR_RGB(255,255,255));
				GrFillRect(invaders_wid,invaders_gc,
					0, 0, screen_info.cols,
					screen_info.rows);
				GrSetGCForeground(invaders_gc, GR_RGB(0,0,0));
				level = 0;
				score = 0;
				invaders_create_board(level);
				game_status=GAME_STATUS_PLAY;
				draw_first();
			}
			ret |= KEY_CLICK;
			break;
				
		case 'm':
			/* if Menu Button then destroy all
			 * dynamically created */
			pz_close_window(invaders_wid);
			GrDestroyWindow(invaders_score_pix);
			GrDestroyTimer(invaders_timer_id);
			GrDestroyGC(invaders_gc);
			break;
		default:
			ret |= KEY_UNUSED;
			break;	
		}
		break;
	default:
		ret |= EVENT_UNUSED;
		break;
	}
	return ret;
}
Exemplo n.º 8
0
static void fire_update()
{
	int i = 0;
	int rowhit, colhit;
	while(i < me_firing) {
		myfire[i].posy += myfire[i].dir;
		/* test if hit something */
		if(get_rowcol(myfire[i].posx, myfire[i].posy,
					&rowhit, &colhit)) {
			if(alien_status[rowhit + colhit * aliens_rows] > 0) {
				/* when hit, fire out, destroy it
				 * (for now not animation) */
				myfire_delete(i);
				GrSetGCForeground(invaders_gc, GR_RGB(255,255,255));
				draw_alien(colhit,rowhit,itest);
				Dprintf("hit %d,%d,%d\n", colhit,rowhit,itest);
				Dprintf(" %d,%d\n",alien_maxx-alien_minx,
						cell_maxx - cell_minx);
				GrSetGCForeground(invaders_gc, GR_RGB(0,0,0));	
				alien_status[rowhit + colhit * aliens_rows] = 0;
				score += colhit * 2;
				update_score();
				aliens_left -= 1;
				if(aliens_left <= 0) {
					level++;
					invaders_create_board(level);
					draw_first();
					return;
				}
				continue;
			}
		}
		/* test if out board */
		if(myfire[i].posy < board_top) {
			myfire_delete(i);
			i--;
		}
		i++;
	}
	
	i = 0;
	while(i < alien_firing) {
		alienfire[i].posy += alienfire[i].dir;
		Dprintf("alienfire pos %d\n", alienfire[i].posy);
		/* test if hit me */
		if(alienfire[i].posy < (me_posy + ME_HEIGHT) &&
			alienfire[i].posy >= me_posy &&
			alienfire[i].posx >= me_posx &&
			alienfire[i].posx <= me_posx + ME_WIDTH) {
			/* End of game */
			game_status = GAME_STATUS_END;
			return;
		}
		/* test if out board */
		if(alienfire[i].posy >= board_bottom) {
			alienfire_delete(i);
			i--;
		}
		i++;
	}
}