#include "defs.h" #define REALWHITE 0 Notify_value drop_block() { if (block_can_drop(display_shape_no, display_xpos, display_ypos, display_rot, displaygrid)) print_shape(display_shape_no, display_xpos, display_ypos++, display_rot, REALWHITE); else { if (display_ypos < 0) end_game(); else { score += shape[display_shape_no].pointv[display_rot]; store_shape(display_shape_no, display_xpos, display_ypos, display_rot); remove_full_lines(display_ypos); create_shape(); show_score(); show_next(); if (instantdrop || nodisplay) { start_timer(); } } } print_shape(display_shape_no, display_xpos, display_ypos, display_rot, shape[display_shape_no].color); draw_shadow(display_shape_no, display_xpos, display_ypos, display_rot, shape[display_shape_no].color); return (NOTIFY_DONE); } show_score() { char buf[BUFSIZ], buf1[BUFSIZ], buf2[BUFSIZ]; if (! noscores) { sprintf(buf, "Score: %d", score); xv_set(score_item, PANEL_LABEL_STRING, buf, 0); sprintf(buf1, "Level: %d", rows / 10); xv_set(level_item, PANEL_LABEL_STRING, buf1, 0); sprintf(buf2, "Rows : %d", rows); xv_set(rows_item, PANEL_LABEL_STRING, buf2, 0); if (starttime == 0) starttime = (int) time((time_t *) 0); sprintf(buf, "Time: %03d secs", (((int) time((time_t *) 0)) - starttime)); xv_set(time_item, PANEL_LABEL_STRING, buf, 0); } } void quit_proc() { clear_events(); stop_timer(); xv_destroy_safe(mainframe); } end_game() { int old_nodisplay = nodisplay; nodisplay = 0; show_score(); end_of_game = 1; clear_events(); stop_timer(); xv_set(game_over, XV_SHOW, TRUE, 0); if (signalEndOfGame) { struct timeval tv; tv.tv_sec = 0; tv.tv_usec = 300000; sleep(1); } update_highscore_table(); print_high_scores(); if (autorestart) { struct itimerval restart_time; restart_time.it_interval.tv_usec = 0; restart_time.it_interval.tv_sec = 0; restart_time.it_value.tv_usec = 0; restart_time.it_value.tv_sec = 4; notify_set_itimer_func(auto_restart_proc, auto_restart_proc, ITIMER_REAL, &restart_time, ITIMER_NULL); } nodisplay = old_nodisplay; } void restart_proc() { clear_events(); stop_timer(); init_all(); } void start_proc() { if (end_of_game) return; set_events(); start_timer(); if (starttime != 0) { /* update to removed paused time */ starttime += ((int)time((time_t *)0) - pausedtime); } } void pause_proc() { pausedtime = time((time_t *) 0); clear_events(); stop_timer(); } left_proc() { if (block_can_left(display_shape_no, display_xpos, display_ypos, display_rot)) { print_shape(display_shape_no, display_xpos, display_ypos, display_rot, REALWHITE); display_xpos--; print_shape(display_shape_no, display_xpos, display_ypos, display_rot, shape[display_shape_no].color); draw_shadow(display_shape_no, display_xpos, display_ypos, display_rot, shape[display_shape_no].color); } } right_proc() { if (block_can_right(display_shape_no, display_xpos, display_ypos, display_rot)) { print_shape(display_shape_no, display_xpos, display_ypos, display_rot, REALWHITE); display_xpos++; print_shape(display_shape_no, display_xpos, display_ypos, display_rot, shape[display_shape_no].color); draw_shadow(display_shape_no, display_xpos, display_ypos, display_rot, shape[display_shape_no].color); } } anti_proc() { int newrot; newrot = (display_rot + 3) % 4; if (check_rot(display_shape_no, display_xpos, display_ypos, newrot)) { print_shape(display_shape_no, display_xpos, display_ypos, display_rot, REALWHITE); display_rot = newrot; print_shape(display_shape_no, display_xpos, display_ypos, display_rot, shape[display_shape_no].color); draw_shadow(display_shape_no, display_xpos, display_ypos, display_rot, shape[display_shape_no].color); } } clock_proc() { int newrot; newrot = (display_rot + 1) % 4; if (check_rot(display_shape_no, display_xpos, display_ypos, newrot)) { print_shape(display_shape_no, display_xpos, display_ypos, display_rot, REALWHITE); display_rot = newrot; print_shape(display_shape_no, display_xpos, display_ypos, display_rot, shape[display_shape_no].color); draw_shadow(display_shape_no, display_xpos, display_ypos, display_rot, shape[display_shape_no].color); } } Notify_value real_fast_proc() { if (block_can_drop(display_shape_no, display_xpos, display_ypos, display_rot, displaygrid)) { print_shape(display_shape_no, display_xpos, display_ypos, display_rot, REALWHITE); } while (block_can_drop(display_shape_no, display_xpos, display_ypos, display_rot, displaygrid)) { display_ypos++; } print_shape(display_shape_no, display_xpos, display_ypos, display_rot, shape[display_shape_no].color); drop_block(); } Notify_value fast_proc() { while (block_can_drop(display_shape_no, display_xpos, display_ypos, display_rot, displaygrid)) { print_shape(display_shape_no, display_xpos, display_ypos, display_rot, REALWHITE); display_ypos++; print_shape(display_shape_no, display_xpos, display_ypos, display_rot, shape[display_shape_no].color); } } void done_proc() { xv_set(score_frame, WIN_SHOW, FALSE, 0); } Notify_value auto_restart_proc() { done_proc(); restart_proc(); start_proc(); }