int has_overlapping_points(Point pointA, Point pointB, Point pointC){ if(are_points_equal(pointA, pointB)){ return 1; } if(are_points_equal(pointA, pointC)){ return 1; } if(are_points_equal(pointB, pointC)){ return 1; } return 0; }
int main(int argc, char *argv[]) { // 创建一个世界 WINDOW *world; // 创建一条蛇 Snake *snake; // 创建食物所在位置坐标 Point food_point; // 初始移动方向为向右 Direction direction = RIGHT; srand(time(NULL)); // curses库初始化 initscr(); /* 初始化屏幕 */ noecho(); /* 禁止输入字符getch读取回显 */ cbreak(); /* 关闭行缓冲 */ timeout(TICKRATE); /* 每隔TICKRATE的时间检测一次窗口读操作 */ keypad(stdscr, TRUE); /* 开启键盘的键区,可以使用方向键 */ curs_set(0); /* 禁止显示鼠标指针 */ refresh(); /* 刷新屏幕,准备重画 */ // 初始化世界 world = create_world(); // 以符号*界定世界窗口的边界 box(world, '|' , '-'); // 将世界窗口显示在终端上 wrefresh(world); // 蛇初始化 snake = snake_create(SNAKE_INITIAL_LENGTH); // 食物位置初始化 food_point = new_food_position(); int ch; // 因为没TICKRATE检测一次,并且设置了nodelay模式,getch不会 // 阻塞,每隔TICKRATE下述循环将被执行一次 while ((ch = getch()) != 'q') { // 每当检测到用户输入,重画世界 wclear(world); box(world, '|' , '-'); // 蛇移动,修改蛇的各个部分移动之后的坐标值 snake_move(snake, direction, WORLD_WIDTH, WORLD_HEIGHT); Point *snake_head = (Point *)snake->head->value; // 蛇如果吃掉了食物,在新位置生成新的食物 if (are_points_equal(food_point, *snake_head)) { food_point = new_food_position(); snake_add_part_to_tail(snake); } // 绘制出蛇以及食物 mvwaddch(world, food_point.y, food_point.x, '$'); draw_snake(world, snake); // 将当前绘制的窗口显示到终端 wrefresh(world); // 在nodelay模式下,getch读取不到字符则返回ERR if(ch != ERR) { // 修正移动方向 direction = direction_for_key(ch); } } ll_free_list(snake); delwin(world); endwin(); return 0; }