예제 #1
0
파일: game.c 프로젝트: zhiyb/Il-Matto
void game_slave(void)
{
	game.mode = 3;

init:
	game_init();
	tft_setZoom(2);
	RECTANGLE(GAME_S);
	STRING(GAME_S_STR);
	STRING(GAME_S_ORIE);

get:
	switch (ROE_get()) {
	case ROE_SW1:
	case ROE_SW2:
		SOUND(SOUND_CONF);
		while (ROE_get() != ROE_N);
		tft_setOrient(tft_getOrient() + 1);
		goto init;
	}
	switch (connect_read()) {
	case CONN_LEFT:
		connect_put(CONN_READY);
		game.mode = 2;
		goto init;
	case CONN_DETECT:
	case CONN_RIGHT:
		connect_put(CONN_READY);
		game.mode = 3;
		goto init;
	case CONN_START:
		box.dx = connect_get();
		connect_put(CONN_READY);
		box.dy = (box.dx >> 1) & 0x01;
		box.dx &= 0x01;
		box.e = 0;
		RECTANGLE_CLEAN(GAME_S);
		box_show(GAME_BGC);
		return;
	case CONN_SOUND:
		sound_freq(connect_get16());
	}
	goto get;
}
예제 #2
0
파일: util.c 프로젝트: EffeErre/goomwwm
// display a text message
void
message_box(int delay, int x, int y, char *fgc, char *bgc, char *bc, char *txt)
{
	workarea mon;
	monitor_dimensions_struts(x, y, &mon);
	if (fork())
		return;

	display = XOpenDisplay(0x0);

	box *b = box_create(root, BOX_OVERRIDE, 0, 0, 1, 1, config_title_bg);

	textbox *text =
	    textbox_create(b->window, TB_CENTER | TB_AUTOHEIGHT | TB_AUTOWIDTH,
	    8, 5, 1, 1, config_title_font, config_title_fg, config_title_bg,
	    txt, NULL);

	box_moveresize(b,
	    MIN(mon.x + mon.w - text->w - 26, MAX(mon.x + 26,
		    x - text->w / 2)), MIN(mon.y + mon.h - text->h - 20,
		MAX(mon.y + 20, y - text->h / 2)), text->w + 16, text->h + 10);

	XSelectInput(display, b->window, ExposureMask);

	textbox_show(text);
	box_show(b);

	double stamp = timestamp();
	while ((timestamp() - stamp) < (double) delay / 1000) {
		if (XPending(display)) {
			XEvent ev;
			XNextEvent(display, &ev);

			if (ev.type == Expose)
				textbox_draw(text);
		}
		usleep(10000);	// 10ms
	}

	textbox_free(text);
	box_free(b);

	exit(EXIT_SUCCESS);
}
예제 #3
0
파일: game.c 프로젝트: zhiyb/Il-Matto
uint8_t game_master(void)
{
	uint8_t index = 0;
	game.mode = 2;

init:
	game_init();
	tft_setZoom(2);
	RECTANGLE(GAME_M);
	STRING(GAME_M_STR);

list:
	SELECTION(index == 0, GAME_M_ORIE, GAME_M);
	SELECTION(index == 1, GAME_M_LEFT, GAME_M);
	SELECTION(index == 2, GAME_M_RIGHT, GAME_M);

get:
	switch (ROE_get()) {
	case ROE_SW1:
	case ROE_SW2:
		SOUND(SOUND_CONF);
		while (ROE_get() != ROE_N);
		goto enter;
	case ROE_CW1:
	case ROE_CW2:
		SOUND(SOUND_SELECT);
		if (index == 2)
			index = 0;
		else
			index++;
refresh:
		if (index == 1 && game.mode == 3) {
			game.mode = 2;
			connect_put(CONN_RIGHT);
			if (connect_get() != CONN_READY)
				goto clean;
			goto init;
		} else if (index == 2 && game.mode == 2) {
			game.mode = 3;
			connect_put(CONN_LEFT);
			if (connect_get() != CONN_READY)
				goto clean;
			goto init;
		}
		goto list;
	case ROE_CCW1:
	case ROE_CCW2:
		SOUND(SOUND_SELECT);
		if (index == 0)
			index = 2;
		else
			index--;
		goto refresh;
	}
	if (connect_read() == CONN_SOUND)
		sound_freq(connect_get16());
	goto get;

enter:
	if (index == 0) {
		tft_setOrient(tft_getOrient() + 1);
		goto init;
	}
	connect_put(CONN_START);
	connect_put(box.dy << 1 | box.dx);
	if (connect_get() != CONN_READY)
		goto clean;
	RECTANGLE_CLEAN(GAME_M);
	box_show(GAME_BGC);
	return 1;

clean:
	tft_fill(GAME_BGC);
	return 0;
}