//키 입력받는 함수 void key_ent() { key = 0; if (kbhit()) { key = getch(); if (key == 224) { do { key = getch(); } while (key == 244); switch (key) { case DOWN: { check_crash(b_x, b_y + 1); if (crash_num == 1) move_block(DOWN); break; } case RIGHT: { check_crash(b_x + 1, b_y); if (crash_num == 1) move_block(RIGHT); break; } case LEFT: { check_crash(b_x - 1, b_y); if (crash_num == 1) move_block(LEFT); break; } case UP: { block_turn(temp); break; } default: break; } } else { } } fflush(stdin); }
/*响应方向事件*/ static void player_response_event(Player * player, IOOPS * io_ops) { int event; if ((event = rb_event(player)) < 0) return; switch (event) { case EVENT_UP: block_turn(player); set_glue_block(player, SOLIDIFY_TIME); break; case EVENT_DOWN: block_fall(player, BLOCK_MAP_H, 0); break; case EVENT_LEFT: block_left(player); set_glue_block(player, SOLIDIFY_TIME); break; case EVENT_RIGHT: block_right(player); set_glue_block(player, SOLIDIFY_TIME); break; case EVENT_SPACE: case EVENT_ESCAPE: break; } out_win_map(player, io_ops); return; }
//블럭 이동함수 void move_block(int key) { switch (key) { case DOWN: { //아래 for (int i = 0; i < 4; i++) { for (int j = 0; j < 4; j++) { if (temp[i][j] == -2) { main_org[b_y + i][b_x + j] = EMPTY; } } } for (int i = 0; i < 4; i++) { for (int j = 0; j < 4; j++) { if (temp[i][j] == -2) main_org[b_y + i + 1][b_x + j] = ACTIVE_BLOCK; //함수로 줄이기 } } b_y++; break; } case RIGHT: { //오른쪽 for (int i = 0; i < 4; i++) { for (int j = 0; j < 4; j++) { if (temp[i][j] == -2) { main_org[b_y + i][b_x + j] = EMPTY; } } } for (int i = 0; i < 4; i++) { for (int j = 0; j < 4; j++) { if (temp[i][j] == -2) main_org[b_y + i][b_x + j + 1] = ACTIVE_BLOCK; } } b_x++; break; } case LEFT: { //왼쪽 for (int i = 0; i < 4; i++) { for (int j = 0; j < 4; j++) { if (temp[i][j] == -2) { main_org[b_y + i][b_x + j] = EMPTY; } } } for (int i = 0; i < 4; i++) { for (int j = 0; j < 4; j++) { if (temp[i][j] == -2) main_org[b_y + i][b_x + j - 1] = ACTIVE_BLOCK; } } b_x--; break; } case UP: { //턴 block_turn(temp); break; } default: break; } }