Beispiel #1
0
/* lose a point: noone gets it */
void player_lose_point(gint player_num, gint id)
{
	Player *player = player_get(player_num);
	Points *point;
	GList *list;
	/* look up the point in the list */
	for (list = player->points; list != NULL; list = g_list_next(list)) {
		point = list->data;
		if (point->id == id)
			break;
	}
	/* communication error: the point doesn't exist */
	if (list == NULL) {
		log_message(MSG_ERROR,
			    _("server asks to lose invalid point.\n"));
		return;
	}
	player->points = g_list_remove(player->points, point);
	player_modify_points(player_num, point, FALSE);
	/* tell the user the point is lost */
	log_message(MSG_INFO, _("%s lost %s.\n"), player->name,
		    point->name);
	/* free the memory */
	points_free(point);
	g_free(point);
}
Beispiel #2
0
/* this function is called when the game starts, to clean up from the
 * previous game. */
void player_reset(void)
{
	gint i, idx;

	/* remove all viewers */
	while (viewers != NULL) {
		Viewer *viewer = viewers->data;
		g_free(viewer->name);
		g_free(viewer->style);
		viewers = g_list_remove(viewers, viewer);
	}
	/* free player's memory */
	for (i = 0; i < MAX_PLAYERS; ++i) {
		if (players[i].name != NULL) {
			g_free(players[i].name);
			players[i].name = NULL;
		}
		if (players[i].style != NULL) {
			g_free(players[i].style);
			players[i].style = NULL;
		}
		while (players[i].points != NULL) {
			Points *points = players[i].points->data;
			players[i].points =
			    g_list_remove(players[i].points, points);
			points_free(points);
			g_free(points);
		}
		for (idx = 0; idx < G_N_ELEMENTS(players[i].statistics);
		     ++idx)
			players[i].statistics[idx] = 0;
	}
}
Beispiel #3
0
/**
* Handle operation on a point
* @param char* name points name
* @param char ope operateur: '=':= ; '+':+= ; '-':-=
* @param TPA_Expr** vals
**/
static int interp_pointsOperation(Points* points, char* name, char ope, TPA_Expr** vals) {
    Point point;
    int i, size = 0;
    TPA_Expr ** val = vals;

    // Calculate the size of our point vector
    while(*val != 0) {
        size++;
        val++;
    }

    point = point_init(size);
    for(i=0; i<size; i++)
        point.vect[i] = (char)(*vals[i]).val; // int that can contain 0,1,-1 (wildcard)

    switch(ope) {
        case '=':
            points_free(points);
            points_wildOp(points, point, '+');
            break;
        case '+':
        case '-':
						if (!points_fit(points, point)) return 0;
            points_wildOp(points, point, ope);
            break;
    }
    return 1;
}
Beispiel #4
0
extern void interp_free(Env* env) {
	int i;
	for(i=0; i<env->nbfunction; ++i)
		function_free(env->functions[i]);
	for(i=0; i<env->nbpoints; ++i)
		points_free(env->points[i]);
	free(env->functions);
	free(env->points);
  free(env);
}