Exemplo n.º 1
0
extern int point_indexOf(Point* points, int nb, Point p) {
  int i;
  for(i=0; i<nb; ++i)
    if(point_equals(points[i], p))
      return i;
  return -1;
}
Exemplo n.º 2
0
extern int line_containsPoint(Line line, Point point) {
  int i;
  for(i=0; i<LINE_LENGTH; ++i)
    if(point_equals(point, line.points[i]))
      return TRUE;
  return FALSE;
}
Exemplo n.º 3
0
int points_contains(Points* points, Point point) {
	PointItem* pointItem;
	if (points->point == 0) return 0;
  pointItem = points->point;
	do {
		if (point_equals(pointItem->p, point)) return 1;
	} while ( (pointItem = pointItem->next) );
  return 0;
}
Exemplo n.º 4
0
/*Compara dos elementos*/
Bool elestack_equals(const EleStack *ppoint1, const EleStack *ppoint2){
	if(!ppoint1 || !ppoint2 || !ppoint1->point || !ppoint2->point){
		return FALSE;
	}
	if(point_equals (ppoint1->point, ppoint2->point)){
		return TRUE;
	}
	return FALSE;
}
Exemplo n.º 5
0
bool piece_equals(Piece *p1, Piece *p2)
{
	if (p1 == NULL || p2 == NULL) {
		return false; 
	}
	if (!point_equals((p1->center), (p2->center))) {
		return false; 
	}

	for (int i=0; i<4; i++) {
		Point *point1 = p1->blocks[i];
		Point *point2 = p2->blocks[i];
		if (!point_equals(point1, point2)){ 
			return false;
		}
	}
	return true;
};
Exemplo n.º 6
0
int collisionDetection(point position) {
    int count;
    int innerCount;
    for (count = 0; count < g_fruitCount; count++) {
        if (point_equals(g_fruits[count], position))return FRUIT;
    }
    for (count = 0; count < g_wallCount; count++) {
        for (innerCount = 0; innerCount < g_walls[count].length; innerCount++) {
            if (point_equals(g_walls[count].parts[innerCount], position))return WALL;
        }

    }
    for (count = 0; count < g_inhabitantCount; count++) {
        for(innerCount = 0; innerCount < g_inhabitants[count].length; innerCount++) {
            if (point_equals(g_inhabitants[count].body[innerCount], position) && g_inhabitants[count].alive)return INHABITANT;
        }

    }
    return EMPTY;
}
Exemplo n.º 7
0
int
triangle_coincident_points(Triangle *t1, Triangle *t2)
{
	Point *a[3] = {t1->p1, t1->p2, t1->p3};
	Point *b[3] = {t2->p1, t2->p2, t2->p3};
	int found = 0;
	int i;
	int j;
	for (i = 0; i < 3; i++) {
		for (j = 0; j < 3; j++) {
			if (point_equals(a[i], b[j])) {
				found++;
				break;
			}
		}
	} 
	return found;
}
Exemplo n.º 8
0
void points_remove(Points* points, Point point) {
	PointItem* pointItem, *previousPoint = 0;

    if (!points_contains(points,point)) return;
        
    int size = points_getSize(points);
    
    pointItem = points->point;
	do {
		if (point_equals(pointItem->p, point)) {
			if (previousPoint == 0)
				points->point = (size == 1) ? 0 : pointItem->next;
			else
        previousPoint->next = (pointItem->next != 0) ? pointItem->next : 0;
			break;
		}
		previousPoint = pointItem;
	} while ( (pointItem = pointItem->next) );
    
    return;
}
Exemplo n.º 9
0
// returns whether an item was picked up
int map_pickup_item(point *p)
{
	int item = map[point_mapindex(p)];
	map[point_mapindex(p)] = ITEM_NONE;

	// remove from the item list
	point_node *picked_up = items[item];
	point_node *prev = NULL;
	while (picked_up != NULL) {
		if (point_equals(&picked_up->p, p))
			break;
		prev = picked_up;
		picked_up = picked_up->next;
	}
	if (picked_up == NULL)
		return 0;
	if (prev)
		prev->next = picked_up->next;
	else
		items[item] = items[item]->next;
	free(picked_up);

	return item;
}
Exemplo n.º 10
0
void drawInhabitants() {

    //loop through all inhabitants (snakes)
    for(int iinhabitant = 0; iinhabitant < g_inhabitantCount; iinhabitant++) {
        inhabitant cinhabitant = g_inhabitants[iinhabitant];
        if(cinhabitant.alive) {
            attron(COLOR_PAIR(cinhabitant.colorpair));

            //loop through all parts of the snake
            //count backwards because the snake parts are saved in the array from tail to head
            for(int ipart = 0; ipart < cinhabitant.length; ipart++) {
                point cpart = cinhabitant.body[ipart];

                if(ipart == cinhabitant.length - 1) {
                    //draw head element
                    mvaddch(cpart.y, cpart.x, ACS_DIAMOND);
                } else if (ipart == 0) {
                    point cLastPart = cinhabitant.body[ipart+1];
                    if(point_equals(cLastPart, getNextField(DIRECTION_UP, cpart))
                            || point_equals(cLastPart, getNextField(DIRECTION_DOWN, cpart))) {
                        mvaddch(cpart.y, cpart.x, ACS_VLINE);
                    } else {
                        mvaddch(cpart.y, cpart.x, ACS_HLINE);
                    }
                } else {
                    //draw body element
                    point cNextPart = cinhabitant.body[ipart-1];
                    point cLastPart = cinhabitant.body[ipart+1];
                    //mvaddch(cpart.y, cpart.x, '~');

                    // draw top to down line
                    if((point_equals(cLastPart, getNextField(DIRECTION_UP, cpart)) || point_equals(cLastPart, getNextField(DIRECTION_DOWN, cpart)))
                            && (point_equals(cNextPart, getNextField(DIRECTION_UP, cpart)) || point_equals(cNextPart, getNextField(DIRECTION_DOWN, cpart)))) {
                        mvaddch(cpart.y, cpart.x, ACS_VLINE);

                        // draw left right element
                    } else  if((point_equals(cLastPart, getNextField(DIRECTION_LEFT, cpart)) || point_equals(cLastPart, getNextField(DIRECTION_RIGHT, cpart)))
                               && (point_equals(cNextPart, getNextField(DIRECTION_LEFT, cpart)) || point_equals(cNextPart, getNextField(DIRECTION_RIGHT, cpart)))) {
                        mvaddch(cpart.y, cpart.x, ACS_HLINE);

                        // draw top left element
                    } else  if((point_equals(cLastPart, getNextField(DIRECTION_UP, cpart)) || point_equals(cLastPart, getNextField(DIRECTION_LEFT, cpart)))
                               && (point_equals(cNextPart, getNextField(DIRECTION_UP, cpart)) || point_equals(cNextPart, getNextField(DIRECTION_LEFT, cpart)))) {
                        mvaddch(cpart.y, cpart.x, ACS_LRCORNER);

                        // drwa top right element
                    } else  if((point_equals(cLastPart, getNextField(DIRECTION_UP, cpart)) || point_equals(cLastPart, getNextField(DIRECTION_RIGHT, cpart)))
                               && (point_equals(cNextPart, getNextField(DIRECTION_UP, cpart)) || point_equals(cNextPart, getNextField(DIRECTION_RIGHT, cpart)))) {
                        mvaddch(cpart.y, cpart.x, ACS_LLCORNER);

                        // draw down left
                    } else  if((point_equals(cLastPart, getNextField(DIRECTION_DOWN, cpart)) || point_equals(cLastPart, getNextField(DIRECTION_LEFT, cpart)))
                               && (point_equals(cNextPart, getNextField(DIRECTION_DOWN, cpart)) || point_equals(cNextPart, getNextField(DIRECTION_LEFT, cpart)))) {
                        mvaddch(cpart.y, cpart.x, ACS_URCORNER);

                        // draw down right
                    } else  if((point_equals(cLastPart, getNextField(DIRECTION_DOWN, cpart)) || point_equals(cLastPart, getNextField(DIRECTION_RIGHT, cpart)))
                               && (point_equals(cNextPart, getNextField(DIRECTION_DOWN, cpart)) || point_equals(cNextPart, getNextField(DIRECTION_RIGHT, cpart)))) {
                        mvaddch(cpart.y, cpart.x, ACS_ULCORNER);

                        // draw
                    }

                }

            }
            attroff(COLOR_PAIR(cinhabitant.colorpair)); //end coloring
        }
        //draw points on bottom
        mvprintw(iinhabitant, g_confX+1, "Player %d: %d Punkte    ", iinhabitant, cinhabitant.points);
    }
}
Exemplo n.º 11
0
extern int line_pointAtExtremity(Line line, Point point) {
  return point_equals(line.points[0], point) || point_equals(line.points[LINE_LENGTH-1], point);
}
Exemplo n.º 12
0
bool
tile_equals(struct tile const *tile, struct tile const *other)
{
    return point_equals(tile->point, other->point)
        && tile->type == other->type;
}