From c1989eec105c855fb895b5be3646b6c96f283268 Mon Sep 17 00:00:00 2001 From: wdlkmpx Date: Thu, 14 Jan 2021 21:01:44 +0800 Subject: [PATCH] game.c: consistent indentation --- src/game.c | 627 ++++++++++++++++++++++++++++------------------------- 1 file changed, 332 insertions(+), 295 deletions(-) diff --git a/src/game.c b/src/game.c index ebeb1b3..cf11172 100644 --- a/src/game.c +++ b/src/game.c @@ -21,11 +21,11 @@ typedef struct _GtkbGameRules GtkbGameRules; struct _GtkbGameRules { - gint width; /* width of the boards in "cells" */ - gint height; /* height of the boards in "cells" */ - gint colors; /* number of different colors */ - gint next; /* number of colors appearing on the next turn */ - gint destroy; /* number of same colors in line to destroy */ + gint width; /* width of the boards in "cells" */ + gint height; /* height of the boards in "cells" */ + gint colors; /* number of different colors */ + gint next; /* number of colors appearing on the next turn */ + gint destroy; /* number of same colors in line to destroy */ }; GtkbGameRules _rules = {9, 9, 7, 3, 5}; @@ -64,464 +64,501 @@ gint _hi_score_undo = -1; gint _actions_locked = 0; gint is_actions_locked(void) { - return _actions_locked; + return _actions_locked; } void lock_actions(gint lock) { - _actions_locked = lock; - menu_set_sensitive_all(1 - lock); + _actions_locked = lock; + menu_set_sensitive_all(1 - lock); } gint rules_get_width(void) { - return _rules.width; + return _rules.width; } gint rules_get_height(void) { - return _rules.height; + return _rules.height; } gint rules_get_colors(void) { - return _rules.colors; + return _rules.colors; } gint rules_get_next(void) { - return _rules.next; + return _rules.next; } gint rules_get_destroy(void) { - return _rules.destroy; + return _rules.destroy; } gint rules_get_classic_width(void) { - return _classic_rules.width; + return _classic_rules.width; } gint rules_get_classic_height(void) { - return _classic_rules.height; + return _classic_rules.height; } gint rules_get_classic_colors(void) { - return _classic_rules.colors; + return _classic_rules.colors; } gint rules_get_classic_next(void) { - return _classic_rules.next; + return _classic_rules.next; } gint rules_get_classic_destroy(void) { - return _classic_rules.destroy; + return _classic_rules.destroy; } void rules_set_width(gint width) { - _rules.width = width; + _rules.width = width; } void rules_set_height(gint height) { - _rules.height = height; + _rules.height = height; } void rules_set_colors(gint colors) { - _rules.colors = colors; + _rules.colors = colors; } void rules_set_next(gint next) { - _rules.next = next; + _rules.next = next; } void rules_set_destroy(gint destroy) { - _rules.destroy = destroy; + _rules.destroy = destroy; } void rules_set(gint width, gint height, gint colors, gint next, gint destroy) { - _rules.width = width; - _rules.height = height; - _rules.colors = colors; - _rules.next = next; - _rules.destroy = destroy; + _rules.width = width; + _rules.height = height; + _rules.colors = colors; + _rules.next = next; + _rules.destroy = destroy; } gboolean _rules_check_rules(GtkbGameRules r) { - if((r.width < 4 || r.width > 99) || - (r.height < 4 || r.height > 99) || - (r.colors < 3 || r.colors > 99) || - (r.next < 2 || r.next > 99) || - (r.destroy < 3 || r.destroy > 99)) - return 0; - return 1; + if ((r.width < 4 || r.width > 99) + || (r.height < 4 || r.height > 99) + || (r.colors < 3 || r.colors > 99) + || (r.next < 2 || r.next > 99) + || (r.destroy < 3 || r.destroy > 99)) + { + return 0; + } + return 1; } gchar *_rules_to_str(GtkbGameRules r) { - if(!_rules_check_rules(r)) - return NULL; - return g_strdup_printf(_save_fmt, r.width, r.height, r.colors, r.next, r.destroy); + if (!_rules_check_rules(r)) { + return NULL; + } + return g_strdup_printf(_save_fmt, r.width, r.height, r.colors, r.next, r.destroy); } gchar *rules_get_classic_as_str() { - return _rules_to_str(_classic_rules); + return _rules_to_str(_classic_rules); } gchar *rules_get_as_str() { - return _rules_to_str(_rules); + return _rules_to_str(_rules); } gint rules_get_str_len(void) { - return _save_fmt_len; + return _save_fmt_len; } gboolean rules_check_str(gchar *rstr) { - GtkbGameRules r; + GtkbGameRules r; - if(strlen(rstr) != _save_fmt_len || - strstr(rstr, " ") || - strstr(rstr, "\t") || - strstr(rstr, "\r") || - strstr(rstr, "\n") || - sscanf(rstr, _save_fmt, &r.width, &r.height, &r.colors, &r.next, &r.destroy) != 5 || - !_rules_check_rules(r)) - return 0; - - return 1; + if (strlen(rstr) != _save_fmt_len || + strstr(rstr, " ") || + strstr(rstr, "\t") || + strstr(rstr, "\r") || + strstr(rstr, "\n") || + sscanf(rstr, _save_fmt, &r.width, &r.height, &r.colors, &r.next, &r.destroy) != 5 || + !_rules_check_rules(r)) + { + return 0; + } + return 1; } gboolean rules_get_from_str(gchar *s, gint *width, gint *height, gint *colors, gint *next, gint *destroy) { - if(!rules_check_str(s)) - return 0; - sscanf(s, _save_fmt, width, height, colors, next, destroy); - return 1; + if (!rules_check_str(s)) { + return 0; + } + sscanf(s, _save_fmt, width, height, colors, next, destroy); + return 1; } gchar *rules_conv_3_0_to_str(gchar *w, gchar *h, gchar *c, gchar *n, gchar *d) { - GtkbGameRules r; + GtkbGameRules r; - if(!w[0] || !h[0] || !c[0] || !n[0] || !d[0]) - return NULL; + if (!w[0] || !h[0] || !c[0] || !n[0] || !d[0]) { + return NULL; + } + r.width = strtol(w, NULL, 10); + r.height = strtol(h, NULL, 10); + r.colors = strtol(c, NULL, 10); + r.next = strtol(n, NULL, 10); + r.destroy = strtol(d, NULL, 10); - r.width = strtol(w, NULL, 10); - r.height = strtol(h, NULL, 10); - r.colors = strtol(c, NULL, 10); - r.next = strtol(n, NULL, 10); - r.destroy = strtol(d, NULL, 10); - - return _rules_to_str(r); + return _rules_to_str(r); } gboolean rules_is_current_str(gchar *r) { - gboolean rval = 0; - gchar *cur = _rules_to_str(_rules); + gboolean rval = 0; + gchar *cur = _rules_to_str(_rules); - if(strcmp(r, cur) == 0) - rval = 1; - g_free(cur); + if (strcmp(r, cur) == 0) { + rval = 1; + } + g_free(cur); - return rval; + return rval; } gint game_get_score(void) { - return _score; + return _score; } void game_set_score(gint score) { - _score = score; + _score = score; } gint game_get_hi_score(void) { - return _hi_score; + return _hi_score; } void game_set_hi_score(gint score) { - _hi_score = score; + _hi_score = score; } void game_save_state_for_undo(void) { - memcpy(_board_undo, _board, sizeof(gint) * _rules.width * _rules.height); - memcpy(_next_colors_undo, _next_colors, sizeof(gint) * _rules.next); - _score_undo = _score; - _hi_score_undo = _hi_score; + memcpy(_board_undo, _board, sizeof(gint) * _rules.width * _rules.height); + memcpy(_next_colors_undo, _next_colors, sizeof(gint) * _rules.next); + _score_undo = _score; + _hi_score_undo = _hi_score; } void game_restore_state_from_undo(void) { - if(_score_undo == -1 || _hi_score_undo == -1) - /* cannot undo */ - return; - memcpy(_board, _board_undo, sizeof(gint) * _rules.width * _rules.height); - memcpy(_next_colors, _next_colors_undo, sizeof(gint) * _rules.next); - _score = _score_undo; - _hi_score = _hi_score_undo; + if (_score_undo == -1 || _hi_score_undo == -1) { + /* cannot undo */ + return; + } + memcpy(_board, _board_undo, sizeof(gint) * _rules.width * _rules.height); + memcpy(_next_colors, _next_colors_undo, sizeof(gint) * _rules.next); + _score = _score_undo; + _hi_score = _hi_score_undo; } -void game_init_game(gint *balls, gint *nextballs) { - if(_board) - g_free(_board); - if(_board_undo) - g_free(_board_undo); - if(_board_destroys) - g_free(_board_destroys); - if(_next_colors) - g_free(_next_colors); - if(_next_colors_undo) - g_free(_next_colors_undo); - _board = g_malloc0(sizeof(gint) * _rules.width * _rules.height); - _board_destroys = g_malloc0(sizeof(gint) * _rules.width * _rules.height); - if(balls) { - memcpy(_board, balls, sizeof(gint) * _rules.width * _rules.height); - } - _board_undo = g_malloc0(sizeof(gint) * _rules.width * _rules.height); - _next_colors = g_malloc0(sizeof(gint) * _rules.next); - if(nextballs) { - memcpy(_next_colors, nextballs, sizeof(gint) * _rules.next); - } - _next_colors_undo = g_malloc0(sizeof(gint) * _rules.next); - _score = 0; - _score_undo = -1; - _hi_score_undo = -1; +void game_init_game(gint *balls, gint *nextballs) +{ + if (_board) { + g_free(_board); + } + if (_board_undo) { + g_free(_board_undo); + } + if (_board_destroys) { + g_free(_board_destroys); + } + if (_next_colors) { + g_free(_next_colors); + } + if (_next_colors_undo) { + g_free(_next_colors_undo); + } + _board = g_malloc0(sizeof(gint) * _rules.width * _rules.height); + _board_destroys = g_malloc0(sizeof(gint) * _rules.width * _rules.height); + if (balls) { + memcpy(_board, balls, sizeof(gint) * _rules.width * _rules.height); + } + _board_undo = g_malloc0(sizeof(gint) * _rules.width * _rules.height); + _next_colors = g_malloc0(sizeof(gint) * _rules.next); + if (nextballs) { + memcpy(_next_colors, nextballs, sizeof(gint) * _rules.next); + } + _next_colors_undo = g_malloc0(sizeof(gint) * _rules.next); + _score = 0; + _score_undo = -1; + _hi_score_undo = -1; } gint game_count_free_cells(void) { - gint i, counter = 0; - gint *bp = _board; + gint i, counter = 0; + gint *bp = _board; - for(i = 0; i < _rules.width * _rules.height; i++) - if(*bp++ == 0) - counter++; - - return counter; + for (i = 0; i < _rules.width * _rules.height; i++) { + if (*bp++ == 0) + counter++; + } + return counter; } gint *game_get_board_as_int_arr(void) { - gint *b; + gint *b; - b = g_malloc(sizeof(gint) * _rules.width * _rules.height); - memcpy(b, _board, sizeof(gint) * _rules.width * _rules.height); - return b; + b = g_malloc(sizeof(gint) * _rules.width * _rules.height); + memcpy(b, _board, sizeof(gint) * _rules.width * _rules.height); + return b; } gint *game_get_next_as_int_arr(void) { - gint *n; + gint *n; - n = g_malloc(sizeof(gint) * _rules.next); - memcpy(n, _next_colors, sizeof(gint) * _rules.next); - return n; + n = g_malloc(sizeof(gint) * _rules.next); + memcpy(n, _next_colors, sizeof(gint) * _rules.next); + return n; } gint board_get_at_node(gint node) { - if(node >= _rules.width * _rules.height) - return 0; - return _board[node]; + if (node >= _rules.width * _rules.height) { + return 0; + } + return _board[node]; } gint board_get_at_xy(gint x, gint y) { - if(x >= _rules.width || y > _rules.height) - return 0; - return _board[y * _rules.width + x]; + if (x >= _rules.width || y > _rules.height) { + return 0; + } + return _board[y * _rules.width + x]; } gint board_get_destroy_at_xy(gint x, gint y) { - if(x >= _rules.width || y > _rules.height) - return 0; - return _board_destroys[y * _rules.width + x]; + if (x >= _rules.width || y > _rules.height) { + return 0; + } + return _board_destroys[y * _rules.width + x]; } void board_set_at_node(gint node, gint col) { - if(node >= _rules.width * _rules.height) - return; - _board[node] = col; + if (node >= _rules.width * _rules.height) { + return; + } + _board[node] = col; } void board_set_at_xy(gint x, gint y, gint col) { - if(x >= _rules.width || y > _rules.height) - return; - _board[y * _rules.width + x] = col; + if (x >= _rules.width || y > _rules.height) { + return; + } + _board[y * _rules.width + x] = col; } gint next_get(gint num) { - if(num >= _rules.next) - return 0; - return _next_colors[num]; + if (num >= _rules.next) { + return 0; + } + return _next_colors[num]; } void next_set(gint num, gint col) { - if(num >= _rules.next) - return; - _next_colors[num] = col; + if (num >= _rules.next) { + return; + } + _next_colors[num] = col; } void timer_start(void) { - _timer_start_time = time(NULL); + _timer_start_time = time(NULL); } gboolean timer_is_running(void) { - if(_timer_start_time == -1 || _timer_limit <= 0) - return 0; - return 1; + if (_timer_start_time == -1 || _timer_limit <= 0) { + return 0; + } + return 1; } gboolean timer_is_expired(void) { - time_t nowt = time(NULL); + time_t nowt = time(NULL); - if(nowt - _timer_start_time >= _timer_limit) - return 1; - return 0; + if (nowt - _timer_start_time >= _timer_limit) { + return 1; + } + return 0; } gint timer_get_remaining(void) { - time_t nowt = time(NULL); + time_t nowt = time (NULL); - return _timer_limit + _timer_start_time - nowt; + return _timer_limit + _timer_start_time - nowt; } void timer_set_limit(gint limit) { - _timer_limit =limit; + _timer_limit =limit; } gint timer_get_limit(void) { - return _timer_limit; + return _timer_limit; } struct gtkb_animarray { - gint color, x, y, phase, time; + gint color, x, y, phase, time; }; -int animsort(const void *a, const void *b) { - if(((const struct gtkb_animarray *)a)->time == ((const struct gtkb_animarray *)b)->time) return 0; - if(((const struct gtkb_animarray *)a)->time > ((const struct gtkb_animarray *)b)->time) return 1; - return -1; +int animsort(const void *a, const void *b) +{ + if (((const struct gtkb_animarray *)a)->time == ((const struct gtkb_animarray *)b)->time) { + return 0; + } + if (((const struct gtkb_animarray *)a)->time > ((const struct gtkb_animarray *)b)->time) { + return 1; + } + return -1; } -gint game_destroy_lines(gboolean count_score) { - gint x, y, i, j; - gint *del, have_del = 0; - if(rules_get_width() < rules_get_destroy() && - rules_get_height() < rules_get_destroy()) { /* destroy is impossible */ - return 0; - } +gint game_destroy_lines(gboolean count_score) +{ + gint x, y, i, j; + gint *del, have_del = 0; - del = g_malloc0(rules_get_width() * rules_get_height() * sizeof(gint)); + if (rules_get_width() < rules_get_destroy() && + rules_get_height() < rules_get_destroy()) { /* destroy is impossible */ + return 0; + } - for(y = 0; y < rules_get_height(); y++) { - for(x = 0; x < rules_get_width(); x++) { - if(board_get_at_xy(x, y) != 0) { - /* horizontal */ - if(rules_get_width() - x >= rules_get_destroy()) { - for(i = 1; - i < rules_get_width() - x && - board_get_at_xy(x + i, y) == board_get_at_xy(x, y); - i++); - if(i >= rules_get_destroy()) { - have_del = 1; - for(j = 0; j < i; j ++) { - del[y * rules_get_width() + x + j] = 1; - } - } - } - /* vertical */ - if(rules_get_height() - y >= rules_get_destroy()) { - for(i = 1; - i < rules_get_height() - y && - board_get_at_xy(x, y + i) == board_get_at_xy(x, y); - i++); - if(i >= rules_get_destroy()) { - have_del = 1; - for(j = 0; j < i; j ++) { - del[(y + j) * rules_get_width() + x] = 1; - } - } - } - /* diagonal left -> right */ - if(rules_get_width() - x >= rules_get_destroy() && - rules_get_height() - y >= rules_get_destroy()) { - for(i = 1; - i < rules_get_width() - x && - i < rules_get_height() - y && - board_get_at_xy(x + i, y + i) == board_get_at_xy(x, y); - i++); - if(i >= rules_get_destroy()) { - have_del = 1; - for(j = 0; j < i; j ++) { - del[(y + j) * rules_get_width() + x + j] = 1; - } - } - } - /* diagonal right -> left */ - if(x + 1 >= rules_get_destroy() && - rules_get_height() - y >= rules_get_destroy()) { - for(i = 1; - i <= x && - i < rules_get_height() - y && - board_get_at_xy(x - i, y + i) == board_get_at_xy(x, y); - i++); - if(i >= rules_get_destroy()) { - have_del = 1; - for(j = 0; j < i; j ++) { - del[(y + j) * rules_get_width() + x - j] = 1; - } - } - } - } - } - } - i = 0; - if(have_del) { - if(pref_get_show_destroy()) { - gint animcadres = 0, animpos = 0, animtime; - struct gtkb_animarray *animarray; - struct timeval tvs, tve; + del = g_malloc0(rules_get_width() * rules_get_height() * sizeof(gint)); - animarray = g_new0(struct gtkb_animarray, rules_get_width() * rules_get_height() * gtkbTheme->maxdestphases); - for(y = 0; y < rules_get_height(); y++) { - for(x = 0; x < rules_get_width(); x++) { - if(del[y * rules_get_width() + x] == 1) { - gint color = board_get_at_xy(x, y); + for (y = 0; y < rules_get_height(); y++) + { + for (x = 0; x < rules_get_width(); x++) + { + if (board_get_at_xy(x, y) != 0) { + /* horizontal */ + if (rules_get_width() - x >= rules_get_destroy()) { + for (i = 1; + i < rules_get_width() - x && + board_get_at_xy(x + i, y) == board_get_at_xy(x, y); + i++); + if (i >= rules_get_destroy()) { + have_del = 1; + for (j = 0; j < i; j ++) { + del[y * rules_get_width() + x + j] = 1; + } + } + } + /* vertical */ + if (rules_get_height() - y >= rules_get_destroy()) { + for (i = 1; + i < rules_get_height() - y && + board_get_at_xy(x, y + i) == board_get_at_xy(x, y); + i++); + if (i >= rules_get_destroy()) { + have_del = 1; + for (j = 0; j < i; j ++) { + del[(y + j) * rules_get_width() + x] = 1; + } + } + } + /* diagonal left -> right */ + if (rules_get_width() - x >= rules_get_destroy() && + rules_get_height() - y >= rules_get_destroy()) { + for (i = 1; + i < rules_get_width() - x && + i < rules_get_height() - y && + board_get_at_xy(x + i, y + i) == board_get_at_xy(x, y); + i++); + if (i >= rules_get_destroy()) { + have_del = 1; + for (j = 0; j < i; j ++) { + del[(y + j) * rules_get_width() + x + j] = 1; + } + } + } + /* diagonal right -> left */ + if (x + 1 >= rules_get_destroy() && + rules_get_height() - y >= rules_get_destroy()) { + for (i = 1; + i <= x && + i < rules_get_height() - y && + board_get_at_xy(x - i, y + i) == board_get_at_xy(x, y); + i++); + if (i >= rules_get_destroy()) { + have_del = 1; + for (j = 0; j < i; j ++) { + del[(y + j) * rules_get_width() + x - j] = 1; + } + } + } + } + } + } - animcadres += gtkbTheme->balls[color - 1].destroyphases + 1; - for(j = 0, animtime = 0; j <= gtkbTheme->balls[color - 1].destroyphases; j++) { - if(j != gtkbTheme->balls[color - 1].destroyphases) { - animarray[animpos].color = color; - animarray[animpos].phase = j; - animtime += gtkbTheme->balls[color - 1].destroydelays[j]; - } else { - animarray[animpos].color = 0; - animarray[animpos].phase = 0; - } - animarray[animpos].x = x; - animarray[animpos].y = y; - animarray[animpos].time = animtime; - animpos++; - } - } - } - } - qsort(animarray, animcadres, sizeof(struct gtkb_animarray), animsort); - lock_actions(1); - draw_board(); - for(animtime = 0, i = 0; i < animcadres;) { - gettimeofday(&tvs, NULL); - gint isav = i; - for(; animtime == animarray[i].time && i < animcadres; i++) { - draw_ball(animarray[i].color, animarray[i].x, animarray[i].y, 0, animarray[i].phase + 1); - _board_destroys[animarray[i].y * rules_get_width() + animarray[i].x] = animarray[i].phase + 1; - } - do { - gtk_main_iteration_do(0); - gettimeofday(&tve, NULL); - } while((tve.tv_sec - tvs.tv_sec) * 1000000 + tve.tv_usec - tvs.tv_usec < (animarray[i].time - animtime) * 1000); - animtime = animarray[isav].time; - } - g_free(animarray); - memset(_board_destroys, 0, rules_get_width() * rules_get_height() * sizeof(gint)); - lock_actions(0); - } + i = 0; + if (have_del) + { + if (pref_get_show_destroy()) + { + gint animcadres = 0, animpos = 0, animtime; + struct gtkb_animarray *animarray; + struct timeval tvs, tve; - for(i = 0, y = 0; y < rules_get_height(); y++) { - for(x = 0; x < rules_get_width(); x++) { - if(del[y * rules_get_width() + x] == 1) { - i++; - board_set_at_xy(x, y, 0); - } - } - } - } + animarray = g_new0(struct gtkb_animarray, rules_get_width() * rules_get_height() * gtkbTheme->maxdestphases); + for (y = 0; y < rules_get_height(); y++) + { + for (x = 0; x < rules_get_width(); x++) + { + if (del[y * rules_get_width() + x] == 1) { + gint color = board_get_at_xy(x, y); - g_free(del); - return i; + animcadres += gtkbTheme->balls[color - 1].destroyphases + 1; + for (j = 0, animtime = 0; j <= gtkbTheme->balls[color - 1].destroyphases; j++) { + if (j != gtkbTheme->balls[color - 1].destroyphases) { + animarray[animpos].color = color; + animarray[animpos].phase = j; + animtime += gtkbTheme->balls[color - 1].destroydelays[j]; + } else { + animarray[animpos].color = 0; + animarray[animpos].phase = 0; + } + animarray[animpos].x = x; + animarray[animpos].y = y; + animarray[animpos].time = animtime; + animpos++; + } + } + } + } + qsort(animarray, animcadres, sizeof(struct gtkb_animarray), animsort); + lock_actions(1); + draw_board(); + for (animtime = 0, i = 0; i < animcadres;) + { + gettimeofday(&tvs, NULL); + gint isav = i; + for (; animtime == animarray[i].time && i < animcadres; i++) { + draw_ball(animarray[i].color, animarray[i].x, animarray[i].y, 0, animarray[i].phase + 1); + _board_destroys[animarray[i].y * rules_get_width() + animarray[i].x] = animarray[i].phase + 1; + } + do { + gtk_main_iteration_do(0); + gettimeofday(&tve, NULL); + } while((tve.tv_sec - tvs.tv_sec) * 1000000 + tve.tv_usec - tvs.tv_usec < (animarray[i].time - animtime) * 1000); + animtime = animarray[isav].time; + } + g_free(animarray); + memset(_board_destroys, 0, rules_get_width() * rules_get_height() * sizeof(gint)); + lock_actions(0); + } + + for (i = 0, y = 0; y < rules_get_height(); y++) { + for (x = 0; x < rules_get_width(); x++) { + if (del[y * rules_get_width() + x] == 1) { + i++; + board_set_at_xy(x, y, 0); + } + } + } + } + + g_free(del); + return i; }