/* hooray */ void p_win(void) { morewait(); clearmsg(); print1("You won!"); morewait(); display_win(); endgraf(); exit(0); }
void gameloop(int nrow, int ncol) { timeout(1000 / SAMPLING_RATE); const clock_t checkpoint = (clock_t) (CLOCKS_PER_SEC/GAME_SPEED); clock_t last_update = clock(); struct snake * snake = new_snake(ncol/2, nrow/2); struct point food_pos = generate_food(nrow, ncol, snake); redraw(snake, food_pos); for (;;) { struct point tail_pos = snake->tail->pos; int ch; if ((ch = getch()) != ERR) { switch (ch) { case KEY_UP: case KEY_DOWN: case KEY_LEFT: case KEY_RIGHT: if (to_dir(ch) == reverse_dir(snake->heading)) { break; } else { snake->heading = to_dir(ch); step_snake(snake); tail_pos = snake->tail->pos; redraw(snake, food_pos); } break; default: break; } } if (clock() - last_update >= checkpoint) { step_snake(snake); tail_pos = snake->tail->pos; redraw(snake, food_pos); last_update = clock(); } if (point_equal(snake->head->pos, food_pos)) { grow_snake(snake, tail_pos); food_pos = generate_food(nrow, ncol, snake); redraw(snake, food_pos); } if (out_of_border(snake->head->pos, nrow, ncol) || eat_self(snake)) { display_lose(nrow, ncol); return; } if (snake->length == (nrow-2)*(ncol-2)) { display_win(nrow, ncol); return; } } }
int main(int argc, const char *argv[]) { int x_max,y_max; init_curses(); draw_bottom(); #ifdef debug fprintf(moon_log,"hello yaomoon\n"); #endif fill_state(); display_win(&state); fill_error(); display_win(&error); //wprintw(state.win,"%s %s\n","name","yaomoon"); //wrefresh(state.win); while(1); endwin(); return 0; }
void draw_bottom(void) { int y_max,x_max; getmaxyx(stdscr, y_max,x_max); //场景窗口 Create_win(&scene[0],y_max/3*2,x_max/3*2,1,0); //scene[0].win = subwin(stdscr,y_max/3*2,x_max/3*2,1,0); // 框条窗口 Create_win(&bar[0],1,x_max/3*2,0,0); //bar[0].win = subwin(stdscr,1,x_max/3*2,0,0); Create_win(&bar[1],1,0,y_max/3*2+1,0); //bar[1].win = subwin(stdscr,1,0,y_max/3*2+1,0); Create_win(&bar[2], y_max/3*2+1,2,0,x_max/3*2); //bar[2].win = subwin(stdscr,y_max/3*2+1,2,0,x_max/3*2); //状态窗口 Create_win(&state,y_max/3*2+1,x_max/3-1,0,x_max/3*2+1); //state.win = newwin(y_max/3*2+1,x_max/3-1,0,x_max/3*2+1); //error.win = newwin(y_max/3-1,0,y_max/3*2+2,0); Create_win(&error,y_max/3-1,0,y_max/3*2+2,0); wbkgd(scene[0].win,COLOR_PAIR(PANEL)); wbkgd(bar[0].win,COLOR_PAIR(BAR)); wbkgd(bar[1].win,COLOR_PAIR(BAR)); wbkgd(bar[2].win,COLOR_PAIR(BAR)); wbkgd(state.win,COLOR_PAIR(PANEL)); wbkgd(error.win,COLOR_PAIR(PANEL)); display_win(&scene[0]); display_win(&bar[0]); display_win(&bar[1]); display_win(&bar[2]); display_win(&state); display_win(&error); }