void Shred::RandomDrop(int num, const int kind, const int sub, const bool on_water) { while ( num-- ) { DropBlock(BlockManager::NewBlock(kind, sub), on_water); } }
void cBlockHandler::Check(cChunkInterface & a_ChunkInterface, cBlockPluginInterface & a_PluginInterface, int a_RelX, int a_RelY, int a_RelZ, cChunk & a_Chunk) { if (!CanBeAt(a_ChunkInterface, a_RelX, a_RelY, a_RelZ, a_Chunk)) { if (DoesDropOnUnsuitable()) { int BlockX = a_RelX + a_Chunk.GetPosX() * cChunkDef::Width; int BlockZ = a_RelZ + a_Chunk.GetPosZ() * cChunkDef::Width; DropBlock(a_ChunkInterface, *a_Chunk.GetWorld(), a_PluginInterface, nullptr, BlockX, a_RelY, BlockZ); } a_Chunk.SetBlock(a_RelX, a_RelY, a_RelZ, E_BLOCK_AIR, 0); } else { // Wake up the simulators for this block: int BlockX = a_RelX + a_Chunk.GetPosX() * cChunkDef::Width; int BlockZ = a_RelZ + a_Chunk.GetPosZ() * cChunkDef::Width; a_Chunk.GetWorld()->GetSimulatorManager()->WakeUp(BlockX, a_RelY, BlockZ, &a_Chunk); } }
void Shred::Dew(const int kind, const int sub) { DropBlock(BlockManager::NewBlock(kind, sub), true); }
int TetrisPlay(int param) { static int flag = 0; if(!flag){ flag = 1; InitialMatrix(); CreateBlock(&curBlock); // Create next block CreateBlock(&nextBlock); GetCurrentLine(curBlock.y); DisplayScoreLevel(); } //while(1) { int key; TetrisAction action; DebugDump(); // Check valid if(!CheckBlock(&curBlock,TA_None)){ // Game over printf("Game over!\n"); } key = GetKey(); switch(key){ case KEY_LEFT: action = TA_Left; score++; break; case KEY_RIGHT: action = TA_Right; score+=10; break; case KEY_UP: action = TA_Rotate; score+=100; break; case KEY_DOWN: action = TA_Down; score+=1000; break; case KEY_PAUSE: break; default: action = TA_Down; break; } if(CheckBlock(&curBlock,action)){ MoveBlock(&curBlock,action); }else if(action == TA_Down){ ScoreUp(DropBlock(&curBlock)); CopyBlock(&curBlock,&nextBlock); CreateBlock(&nextBlock); GetCurrentLine(curBlock.y); } } return 0; }