bool Enemy::Move() { FloatRect enemy = GetGlobalBounds(); if(status == DEAD && enemy.top < 721) sprite.move(0,3*speed); else if(status == GO_RIGHT && (enemy.left + enemy.width)< startx + movement) GoRight(); else if(status == GO_RIGHT && (enemy.left + enemy.width)>= startx + movement) GoLeft(); else if(status == GO_LEFT && enemy.left > startx) GoLeft(); else if(status == GO_LEFT && enemy.left <= startx) GoRight(); else return false; return true; }
void PlayerControl( int player ) { int a = player, b = player; bool moved = false; if( players == 1 ) { a = 0; b = 1; } if( hitKey[a].left || hitKey[b].left ) { if( GameTickCount() >= timeMove[player] ) { timeMove[player] += 12; if( CanGoLeft( player ) ) GoLeft( player ); } moved = true; } if( hitKey[a].right || hitKey[b].right ) { if( GameTickCount() >= timeMove[player] ) { timeMove[player] += 12; if( CanGoRight( player ) ) GoRight( player ); } moved = true; } if( !moved ) timeMove[player] = GameTickCount( ); if( hitKey[a].rotate == 1 || hitKey[b].rotate == 1 ) { if( CanRotate( player ) ) DoRotate( player ); } if( hitKey[a].drop == 1 || hitKey[b].drop == 1 ) { DoDrop( player ); } if( hitKey[a].drop == 0 && hitKey[b].drop == 0 ) { StopDrop( player ); } }
void AIControl( int player ) { if( timeAI[player] > GameTickCount() ) return; timeAI[player] += moveQuick[player]? character[player].speedRush: character[player].speedNormal; switch( RandomBefore( 2 ) ) { case 0: if( destinationR[player] != blobR[player] ) { if( CanRotate(player) ) { DoRotate( player ); } } break; case 1: if( destinationX[player] != blobX[player] ) { if( destinationX[player] > blobX[player] ) { if( CanGoRight( player ) ) GoRight( player ); } else { if( CanGoLeft( player ) ) GoLeft( player ); } } break; } if( destinationX[player] == blobX[player] && destinationR[player] == blobR[player] && RandomBefore( 100 ) < character[player].intellect ) { DoDrop( player ); } }
void Entity::SearchWay(double& next_x, double& next_y ){ for(int j=0; j<=3; ++j){ roll_die(); } int tmp=roll_die(); if(tmp==1){ GoRight(); } else if(tmp==2){ GoUp(); } else if(tmp==3){ GoLeft(); } else if(tmp==4){ GoDown(); } }
void Grapple::Refresh() { if (!attached) return ; if (move_left_pressed && !move_right_pressed) { GoLeft(); } else if (move_right_pressed && !move_left_pressed) { GoRight(); } if (move_up_pressed && !move_down_pressed) { GoUp(); } else if (move_down_pressed && !move_up_pressed) { GoDown(); } ActiveCharacter().SetMovement("ninja-rope"); ActiveCharacter().UpdatePosition(); }
static PRESULT tetris_key_proc(UINT32 vkey, UINT8 key_repeat_cnt, UINT8 key_status) { UINT8 back_saved; PRESULT ret = PROC_LOOP; if (key_status == PAN_KEY_PRESSED) { switch (vkey) { case V_KEY_UP: ChangeShape(&x, &y, &CurrentShape, &Status); break; case V_KEY_DOWN: GoDown(&x, &y, &CurrentShape, &Status); if (key_repeat_cnt == 0) { /* speed up drop speed */ osal_timer_set(GAME_CYCLIC_ID, 100); speed_up = TRUE; } break; case V_KEY_LEFT: GoLeft(&x, &y, &CurrentShape, &Status); break; case V_KEY_RIGHT: GoRight(&x, &y, &CurrentShape, &Status); break; case V_KEY_ENTER: if (playing == TRUE) { osal_timer_activate(GAME_CYCLIC_ID, FALSE); win_compopup_init(WIN_POPUP_TYPE_OK); win_compopup_set_frame(GET_MID_L(170), GET_MID_T(130), 170, 130); win_compopup_set_msg(NULL, NULL, RS_PAUSE); win_compopup_open_ext(&back_saved); osal_timer_activate(GAME_CYCLIC_ID, TRUE); } break; case V_KEY_MENU: case V_KEY_EXIT: if (playing == TRUE) { osal_timer_activate(GAME_CYCLIC_ID, FALSE); win_compopup_init(WIN_POPUP_TYPE_OKNO); //win_compopup_set_frame(GET_MID_L(250), GET_MID_T(130), 250, 130); win_compopup_set_frame(GET_MID_L(250), GET_MID_T(130), 320, 130); win_compopup_set_msg(NULL, NULL, RS_GAME_MSG_DO_YOU_QUIT); if (win_compopup_open_ext(&back_saved) == WIN_POP_CHOICE_YES) { playing = FALSE; tetris_init(); update_status(Speed, Erasered, TotalMark); tetris_redraw_main(); tetris_redraw_preview(); OSD_SetAttr((POBJECT_HEAD)&txt_start, C_ATTR_ACTIVE); OSD_ChangeFocus((POBJECT_HEAD)&game_con, 1, \ C_UPDATE_FOCUS | C_DRAW_SIGN_EVN_FLG); } else { osal_timer_activate(GAME_CYCLIC_ID, TRUE); } } break; default: ret = PROC_PASS; } } else if (key_status == PAN_KEY_RELEASE) { normal_speed(); } return ret; }
Walker & LineByLineWalker::operator -- () { GoLeft(); return *this; }
void AutoControl( int player ) { if( autoPattern ) { switch( autoPattern->command ) { case kMessage: StartBalloon( autoPattern->message ); autoPattern++; break; case kIdleTicks: if( !tutorialTime ) { tutorialTime = GameTickCount() + autoPattern->d1; } else { if( GameTickCount() >= tutorialTime ) { tutorialTime = 0; autoPattern++; } } break; case kRetrieve: if( role[player] == kWaitForRetrieval ) { nextA[player] = abs( autoPattern->d1 ); nextB[player] = abs( autoPattern->d2 ); nextM[player] = (autoPattern->d1 < 0); nextG[player] = (autoPattern->d1 == kBombBottom) && (autoPattern->d2 == kBombTop); if( !nextG[player] ) { nextA[player] = pieceMap[ nextA[player] ]; nextB[player] = pieceMap[ nextB[player] ]; } role[player] = kRetrieveBlobs; autoPattern++; } break; case kPosition: if( (role[player] != kFalling) || (blobX[player] == autoPattern->d1) ) { autoPattern++; } else if( GameTickCount() >= timeMove[player] ) { timeMove[player] = GameTickCount() + 12; if( blobX[player] > autoPattern->d1 ) { if( CanGoLeft( player ) ) GoLeft( player ); } else { if( CanGoRight( player ) ) GoRight( player ); } } break; case kSpin: if( role[player] != kFalling ) { autoPattern++; } else if( CanRotate( player ) ) { DoRotate( player ); autoPattern++; } break; case kBlockUntilLand: if( role[player] != kFalling ) { autoPattern++; } break; case kBlockUntilDrop: if( !dropping[player] ) DoDrop( player ); if( role[player] != kFalling ) { autoPattern++; } break; case kPunish: if( role[player] == kWaitForRetrieval ) { lockGrays[player] = autoPattern->d1; SetupGrays( player ); blobTime[player] = GameTickCount( ); role[player] = kDropGrays; autoPattern++; } break; case kComplete: EndTutorial( ); break; case kBlockUntilComplete: if( role[player] == kWaitForRetrieval ) { autoPattern++; } break; } } }
void DoRotate( int player ) { MBoolean possible; EraseSpriteBlobs( player ); blobR[player] = ( blobR[player] + 1 ) % 4; possible = CanMoveDirection( player, 0, halfway[player]? 1: 0 ); StartTweak( player, 0, 1, 0 ); // only rotates clockwise if( !possible ) { if( blobR[player] == downRotate ) { if( halfway[player] ) halfway[player] = false; else blobY[player]--; if( ++blobSpin[player] >= 4 ) { blobTime[player] = animTime[player] = GameTickCount( ); role[player] = kLockdownBlobs; anim[player] = 0; PlayStereoFrequency( player, kPlace, player ); } } if( blobR[player] == leftRotate ) { if( CanGoRight(player) ) GoRight( player ); else { blobR[player]++; StartTweak( player, 0, 2, 0 ); } } if( blobR[player] == rightRotate ) { if( CanGoLeft(player) ) GoLeft( player ); else { blobR[player]++; StartTweak( player, 0, 2, 0 ); if( !CanMoveDirection( player, 0, halfway[player]? 1: 0 ) ) { if( halfway[player] ) halfway[player] = false; else blobY[player]--; if( ++blobSpin[player] >= 4 ) { blobTime[player] = animTime[player] = GameTickCount( ); role[player] = kLockdownBlobs; anim[player] = 0; PlayStereoFrequency( player, kPlace, player ); } } } } } DrawSpriteBlobs( player, kNoSuction ); PlayStereo( player, kRotate ); }
/** * delete node for key * @param adress after node. * @return (true if node has been deleted) else return false */ bool BinaryTree::delNode(float value) { if (isEmpty()) { return false; } node **localRoot = nullptr; node *afterRoot=nullptr; try { localRoot = findParentBykey(value); if (*localRoot == nullptr) { throw true; } } catch (int) { return false; } if ((*localRoot)->right == nullptr) { if ((*localRoot)->left != nullptr) { *localRoot = (*localRoot)->left; return true; } else { afterRoot = *localRoot; *localRoot = nullptr; delete afterRoot; return true; } } else { if ((*localRoot)->right->left == nullptr) { afterRoot = *localRoot; *localRoot = (*localRoot)->right; (*localRoot)->left = afterRoot->left; delete afterRoot; return true; } else { afterRoot = *localRoot; *localRoot = GoLeft((*localRoot)->right); (*localRoot)->left = afterRoot->left; (*localRoot)->right = afterRoot->right; delete afterRoot; return true; } } return false; }
int Dungeon::Reaction() { if (!menuflag) { //マップの踏破 if (!(savedata->map_open_flag[floors - 1][pos_z][pos_x])) { savedata->map_open_flag[floors - 1][pos_z][pos_x] = 1; } if (!state) { if (Key_Input::buff_time[KEY_INPUT_LEFT]) //stateで管理しているため%X==1が必要ない { player->addWalkCount(1); state = 4; } else if (Key_Input::buff_time[KEY_INPUT_RIGHT]) { player->addWalkCount(1); state = 2; } else if (Key_Input::buff_time[KEY_INPUT_DOWN]) { player->addWalkCount(1); state = 3; } else if (Key_Input::buff_time[KEY_INPUT_A]) { for (int i = 0; !i; i++) //隣が壁なら移動しない { if (muki == 0 && (map_data[pos_z][pos_x] & 8)) { break; } if (muki == 1 && (map_data[pos_z][pos_x] & 1)) { break; } if (muki == 2 && (map_data[pos_z][pos_x] & 2)) { break; } if (muki == 3 && (map_data[pos_z][pos_x] & 4)) { break; } state = 6; } } else if (Key_Input::buff_time[KEY_INPUT_D]) { for (int i = 0; !i; i++) //隣が壁なら移動しない { if (muki == 0 && (map_data[pos_z][pos_x] & 2)) { break; } if (muki == 1 && (map_data[pos_z][pos_x] & 4)) { break; } if (muki == 2 && (map_data[pos_z][pos_x] & 8)) { break; } if (muki == 3 && (map_data[pos_z][pos_x] & 1)) { break; } state = 5; } } else if (Key_Input::buff_time[KEY_INPUT_UP]) { player->addWalkCount(1); for (int i = 0; !i; i++) { if (muki == 0 && (map_data[pos_z][pos_x] & 1)) { break; } if (muki == 1 && (map_data[pos_z][pos_x] & 2)) { break; } if (muki == 2 && (map_data[pos_z][pos_x] & 4)) { break; } if (muki == 3 && (map_data[pos_z][pos_x] & 8)) { break; } state = 1; } } else if (Key_Input::buff_time[KEY_INPUT_X] == 1) { menuflag = 1; //minimap_flag = !minimap_flag; //現状は表示/非表示のみ } } if (state) { switch (state) { case 1: //前進 GoForward(); break; //右転回 case 2: if (time < 50) { time += option->revolve_speed; Return_right(); } else { time = 0; state = 0; revflag++; } break; case 3: //下向き。2倍速で2回右転回 ReturnBack(); break; //左転回 case 4: ReturnLeft(); break; //Dボタン押し下時 case 5: GoRight(); break; //Aボタン押し下時 case 6: GoLeft(); break; //後退 case 8: GoBack(); break; default: break; } //歩き終わった場合のチェック if (!state) { if (!revflag) { state = 0; } else { revflag = 0; } } } } else { menu->Reaction(); } return 0; }