char *mouse_event(SDL_Event e) { if (e.type == SDL_MOUSEBUTTONDOWN) { if (e.button.button == SDL_BUTTON_LEFT) return (choose_level(e.button.x, e.button.y)); } return (NULL); }
void *OrderList_put(T ol, const void *key, void *value) { struct node **pp; struct node *p; assert(ol); int i; pp = ol->head; for(i = ol->level-1; i>=0; i--) { for(; pp[i] && ol->cmp(pp[i]->key,key) < 0; pp = pp[i]->links) ; ol->update[i] = &pp[i]; } ol->timestamp++; if (pp[0] && ol->cmp(key,pp[0]->key) == 0) { void *prev; prev = pp[0]->value; pp[0]->value = value; return prev; } else { int level = choose_level(ol->maxlevel); p = ALLOC(sizeof(*p) + level * sizeof(*p->links)); p->key = key; p->value = value; p->level = level; p->links = (struct node **)(p + 1); for(i = 0; i < min(level,ol->level); i++) { p->links[i] = *ol->update[i]; *ol->update[i] = p; } if (level > ol->level) { for(i = ol->level; i < level; i++) { ol->head[i] = p; p->links[i] = NULL; } ol->level = level; } ol->length++; return NULL; } }
int main() { int t; void gotoxy(int x, int y); void dwall(); void dwall1(); void dwall2(); void change(int t); void add(int x, int y); void move(); void choose_level(); void check_level(); void draw_extra_wall(int); void load_data(); void save_data(); void show_top_scores(); void dwall3(); load_data(); choose_level(); //dwall() and select speed add(2, 2); add(2, 3); add(2, 4); while (running) { t = _getch(); change(t); while(!kbhit()) { move(); Sleep(speed); /*用来控制蛇移动的速度*/ check_level(); /*change to next level if snake is long enough*/ score = 10 * node - 30; gotoxy(7, N + 1); printf("Your score is %d", score); gotoxy(0, 10); printf("your score is %d", score); } } save_data(); return 0; }
int main(int argc, char* argv[]) { bool finished; int ch; engine_t engine; /* Initialize */ rand_init(); /* must be called before engine_init () */ engine_init(&engine, score_function); /* must be called before using engine.curshape */ finished = shownext = FALSE; memset(shapecount, 0, NUMSHAPES * sizeof(int)); shapecount[engine.curshape]++; parse_options(argc,argv); /* must be called after initializing variables */ if (level < MINLEVEL) { choose_level(); } io_init(); drawbackground(); in_timeout(DELAY); /* Main loop */ do { /* draw shape */ showstatus(&engine); drawboard(engine.board); out_refresh(); /* Check if user pressed a key */ if ((ch = in_getch ()) != ERR) { switch (ch) { case 'j': case KEY_LEFT: engine_move(&engine,ACTION_LEFT); break; case 'k': case '\n': engine_move(&engine,ACTION_ROTATE); break; case 'l': case KEY_RIGHT: engine_move(&engine,ACTION_RIGHT); break; case ' ': case KEY_DOWN: engine_move(&engine,ACTION_DROP); break; /* show next piece */ case 's': shownext = TRUE; break; /* toggle dotted lines */ case 'd': dottedlines = !dottedlines; break; /* next level */ case 'a': case KEY_UP: if (level < MAXLEVEL) { level++; in_timeout(DELAY); } else out_beep(); break; /* quit */ case 'q': finished = TRUE; break; /* pause */ case 'p': out_setcolor(COLOR_WHITE,COLOR_BLACK); out_gotoxy((out_width() - 34) / 2,out_height() - 2); out_printf("Paused - Press any key to continue"); while ((ch = in_getch ()) == ERR) ; /* Wait for a key to be pressed */ in_flush(); /* Clear keyboard buffer */ out_gotoxy((out_width() - 34) / 2, out_height() - 2); out_printf(" "); break; /* unknown keypress */ default: out_beep(); } in_flush(); } else { switch (engine_evaluate(&engine)) { /* game over (board full) */ case -1: if ((level < MAXLEVEL) && ((engine.status.droppedlines / 10) > level)) level++; finished = TRUE; break; /* shape at bottom, next one released */ case 0: if ((level < MAXLEVEL) && ((engine.status.droppedlines / 10) > level)) { level++; in_timeout(DELAY); } shapecount[engine.curshape]++; break; /* shape moved down one line */ case 1: break; } } } while (!finished); /* Restore console settings and exit */ io_close(); /* Don't bother the player if he want's to quit */ if (ch != 'q') { showplayerstats(&engine); savescores(GETSCORE(engine.score)); } exit(EXIT_SUCCESS); }