fixed: if a piece failed to rotate the bucket rotated nonetheless
This commit is contained in:
parent
8963b27a65
commit
28848358dd
|
@ -83,6 +83,9 @@ void tetris_main(tetris_variant_t const *const pVariantMethods)
|
||||||
tetris_view_setViewMode(pView, TETRIS_VIMO_RUNNING);
|
tetris_view_setViewMode(pView, TETRIS_VIMO_RUNNING);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// helper variable which tells us whether the last move was possible
|
||||||
|
uint8_t bMoveOk = 1;
|
||||||
|
|
||||||
// what we do depends on what the input module tells us
|
// what we do depends on what the input module tells us
|
||||||
switch (inCmd)
|
switch (inCmd)
|
||||||
{
|
{
|
||||||
|
@ -109,22 +112,22 @@ void tetris_main(tetris_variant_t const *const pVariantMethods)
|
||||||
|
|
||||||
// player shifted the piece to the left
|
// player shifted the piece to the left
|
||||||
case TETRIS_INCMD_LEFT:
|
case TETRIS_INCMD_LEFT:
|
||||||
tetris_bucket_movePiece(pBucket, TETRIS_BUD_LEFT);
|
bMoveOk = tetris_bucket_movePiece(pBucket, TETRIS_BUD_LEFT);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
// player shifted the piece to the right
|
// player shifted the piece to the right
|
||||||
case TETRIS_INCMD_RIGHT:
|
case TETRIS_INCMD_RIGHT:
|
||||||
tetris_bucket_movePiece(pBucket, TETRIS_BUD_RIGHT);
|
bMoveOk = tetris_bucket_movePiece(pBucket, TETRIS_BUD_RIGHT);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
// player rotated the piece clockwise
|
// player rotated the piece clockwise
|
||||||
case TETRIS_INCMD_ROT_CW:
|
case TETRIS_INCMD_ROT_CW:
|
||||||
tetris_bucket_rotatePiece(pBucket, TETRIS_PC_ROT_CW);
|
bMoveOk = tetris_bucket_rotatePiece(pBucket, TETRIS_PC_ROT_CW);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
// player rotated the piece counter clockwise
|
// player rotated the piece counter clockwise
|
||||||
case TETRIS_INCMD_ROT_CCW:
|
case TETRIS_INCMD_ROT_CCW:
|
||||||
tetris_bucket_rotatePiece(pBucket, TETRIS_PC_ROT_CCW);
|
bMoveOk = tetris_bucket_rotatePiece(pBucket, TETRIS_PC_ROT_CCW);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
// the player decided to make an immediate drop
|
// the player decided to make an immediate drop
|
||||||
|
@ -150,7 +153,7 @@ void tetris_main(tetris_variant_t const *const pVariantMethods)
|
||||||
}
|
}
|
||||||
|
|
||||||
// inform variant object about the user's last move
|
// inform variant object about the user's last move
|
||||||
pVariantMethods->setLastInput(pVariantData, inCmd);
|
pVariantMethods->setLastInput(pVariantData, inCmd, bMoveOk);
|
||||||
|
|
||||||
// inform the input module about the requested bearing of the
|
// inform the input module about the requested bearing of the
|
||||||
// variant object
|
// variant object
|
||||||
|
|
|
@ -73,21 +73,32 @@ tetris_highscore_index_t tetris_fp_getHighscoreIndex(void *pVariantData)
|
||||||
return TETRIS_HISCORE_FP;
|
return TETRIS_HISCORE_FP;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* change bearing depending on player's last input
|
||||||
|
* @param pVariantData the variant data object we want to modify
|
||||||
|
* @param inCmd the last issued command
|
||||||
|
* @param bMoveOk 1 if the last move was possible, otherwise 0
|
||||||
|
*/
|
||||||
void tetris_fp_setLastInput(void *pVariantData,
|
void tetris_fp_setLastInput(void *pVariantData,
|
||||||
tetris_input_command_t inCmd)
|
tetris_input_command_t inCmd,
|
||||||
|
uint8_t bMoveOk)
|
||||||
{
|
{
|
||||||
assert (pVariantData != NULL);
|
assert (pVariantData != NULL);
|
||||||
tetris_standard_variant_t *pStdVariant =
|
tetris_standard_variant_t *pStdVariant =
|
||||||
(tetris_standard_variant_t *)pVariantData;
|
(tetris_standard_variant_t *)pVariantData;
|
||||||
|
|
||||||
|
if (bMoveOk)
|
||||||
|
{
|
||||||
if (inCmd == TETRIS_INCMD_ROT_CW)
|
if (inCmd == TETRIS_INCMD_ROT_CW)
|
||||||
{
|
{
|
||||||
pStdVariant->nBearing += 1;
|
// piece rotated clockwise -> rotate bucket counter-clockwise
|
||||||
|
pStdVariant->nBearing += 3;
|
||||||
}
|
}
|
||||||
else if (inCmd == TETRIS_INCMD_ROT_CCW)
|
else if (inCmd == TETRIS_INCMD_ROT_CCW)
|
||||||
{
|
{
|
||||||
pStdVariant->nBearing += 3;
|
// piece rotated counter-clockwise -> rotate bucket clockwise
|
||||||
|
pStdVariant->nBearing += 1;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
pStdVariant->nBearing %= 4;
|
pStdVariant->nBearing %= 4;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue