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; }
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; }
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; }
/*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; }
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; };
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; }
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; }
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; }
// 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; }
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); } }
extern int line_pointAtExtremity(Line line, Point point) { return point_equals(line.points[0], point) || point_equals(line.points[LINE_LENGTH-1], point); }
bool tile_equals(struct tile const *tile, struct tile const *other) { return point_equals(tile->point, other->point) && tile->type == other->type; }