adjusted controls and level speeds
This commit is contained in:
parent
b9614c669d
commit
9423737818
|
@ -30,8 +30,8 @@
|
|||
#define TETRIS_INPUT_GLIDE_CYCLES 75
|
||||
|
||||
// here you can adjust the delays (in loop cycles) for key repeat
|
||||
#define TETRIS_INPUT_REPEAT_INITIALDELAY 40
|
||||
#define TETRIS_INPUT_REPEAT_DELAY 10
|
||||
#define TETRIS_INPUT_REPEAT_INITIALDELAY 35
|
||||
#define TETRIS_INPUT_REPEAT_DELAY 5
|
||||
|
||||
// Here you can adjust the amount of loop cycles a command is ignored after
|
||||
// its button has been released (to reduce joystick chatter)
|
||||
|
@ -42,6 +42,10 @@
|
|||
#define TETRIS_INPUT_CHATTER_TICKS_DOWN 12
|
||||
#define TETRIS_INPUT_CHATTER_TICKS_DROP 24
|
||||
|
||||
// wait cycles per level (array of uint8_t)
|
||||
#define TETRIS_INPUT_LVL_CYCLES 200, 133, 100, 80, 66, 57, 50, 44, 40, 36, 33, \
|
||||
30, 28, 26, 25, 23, 22, 21, 20, 19, 18, 17, 16, 15, 14, 13, 12, 11, 10, 9
|
||||
|
||||
|
||||
/***************************
|
||||
* non-interface functions *
|
||||
|
@ -192,7 +196,7 @@ void tetris_input_destruct(tetris_input_t *pIn)
|
|||
* input related functions *
|
||||
***************************/
|
||||
|
||||
/* Function: retris_input_getCommand
|
||||
/* Function: tetris_input_getCommand
|
||||
* Description: retrieves commands from joystick or loop interval
|
||||
* Argument pIn: pointer to an input object
|
||||
* Argument nPace: falling pace (see definition of tetris_input_pace_t)
|
||||
|
@ -383,9 +387,26 @@ void tetris_input_setLevel(tetris_input_t *pIn,
|
|||
{
|
||||
assert(pIn != NULL);
|
||||
assert(nLvl <= TETRIS_INPUT_LEVELS - 1);
|
||||
|
||||
static const uint8_t nCycles[] = {TETRIS_INPUT_LVL_CYCLES};
|
||||
|
||||
if (pIn->nLevel != nLvl)
|
||||
{
|
||||
pIn->nLevel = nLvl;
|
||||
pIn->nMaxCycles = 400 / (nLvl + 2);
|
||||
pIn->nMaxCycles = nCycles[nLvl];
|
||||
}
|
||||
}
|
||||
|
||||
/* Function: tetris_input_resetDownKeyRepeat
|
||||
* Description: resets the key repeat count for the down key
|
||||
* Argument pIn: pointer to an input object
|
||||
* Return value: void
|
||||
*/
|
||||
void tetris_input_resetDownKeyRepeat(tetris_input_t *pIn)
|
||||
{
|
||||
assert(pIn != NULL);
|
||||
if (pIn->cmdLast == TETRIS_INCMD_DOWN)
|
||||
{
|
||||
pIn->nRepeatCount = -TETRIS_INPUT_REPEAT_INITIALDELAY;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -9,7 +9,7 @@
|
|||
***********/
|
||||
|
||||
// number of levels
|
||||
#define TETRIS_INPUT_LEVELS 20
|
||||
#define TETRIS_INPUT_LEVELS 30
|
||||
|
||||
|
||||
/*********
|
||||
|
@ -50,7 +50,7 @@ typedef struct tetris_input_t
|
|||
// set via the tetris_input_setLevel() function.
|
||||
uint8_t nMaxCycles;
|
||||
|
||||
// This counter keeps track of the number of loop cycles whoch have been
|
||||
// This counter keeps track of the number of loop cycles which have been
|
||||
// done since the last forced piece movement. It gets reset if it either
|
||||
// reaches a well defined value (causing a gravity command to be issued)
|
||||
// or the player has moved down the piece herself/himself.
|
||||
|
@ -63,7 +63,7 @@ typedef struct tetris_input_t
|
|||
// if that value is reached).
|
||||
int8_t nRepeatCount;
|
||||
|
||||
// Keeps track of the number loop cycles which have been run while in
|
||||
// Keeps track of the number of loop cycles which have been run while in
|
||||
// pause mode. As soon as a well defined value is reached, the game
|
||||
// continues (in case someone paused the game and forgot to resume it).
|
||||
uint16_t nPauseCount;
|
||||
|
@ -126,4 +126,11 @@ void tetris_input_setLevel(tetris_input_t *pIn,
|
|||
uint8_t nLvl);
|
||||
|
||||
|
||||
/* Function: tetris_input_resetDownKeyRepeat
|
||||
* Description: resets the key repeat count for the down key
|
||||
* Argument pIn: pointer to an input object
|
||||
* Return value: void
|
||||
*/
|
||||
void tetris_input_resetDownKeyRepeat(tetris_input_t *pIn);
|
||||
|
||||
#endif /*INPUT_H_*/
|
||||
|
|
|
@ -28,15 +28,15 @@
|
|||
uint16_t tetris_logic_nHighscore EEMEM;
|
||||
#endif
|
||||
|
||||
// MSB is leftmost pixel
|
||||
// MSB is leftmost pixel
|
||||
static uint8_t icon[8] PROGMEM =
|
||||
{0x0f, 0x0f, 0xc3, 0xdb, 0xdb, 0xc3, 0xf0, 0xf0}; // Tetris icon
|
||||
{0x0f, 0x0f, 0xc3, 0xdb, 0xdb, 0xc3, 0xf0, 0xf0}; // Tetris icon
|
||||
|
||||
void tetris();
|
||||
|
||||
game_descriptor_t tetris_game_descriptor __attribute__((section(".game_descriptors"))) ={
|
||||
&tetris,
|
||||
icon,
|
||||
&tetris,
|
||||
icon,
|
||||
};
|
||||
|
||||
|
||||
|
@ -93,6 +93,7 @@ void tetris_logic_saveHighscore(uint16_t nHighscore)
|
|||
#endif
|
||||
}
|
||||
|
||||
|
||||
/****************************
|
||||
* construction/destruction *
|
||||
****************************/
|
||||
|
@ -285,6 +286,9 @@ void tetris ()
|
|||
|
||||
// the piece has irrevocably hit the ground
|
||||
case TETRIS_PFS_DOCKED:
|
||||
// avoid accidentally issued "down" commands
|
||||
tetris_input_resetDownKeyRepeat(pIn);
|
||||
|
||||
// remove complete lines (if any)
|
||||
tetris_playfield_removeCompleteLines(pPl);
|
||||
|
||||
|
@ -292,6 +296,7 @@ void tetris ()
|
|||
// and whether the level gets changed
|
||||
tetris_logic_removedLines(pLogic, tetris_playfield_getRowMask(pPl));
|
||||
tetris_input_setLevel(pIn, tetris_logic_getLevel(pLogic));
|
||||
|
||||
break;
|
||||
|
||||
// avoid compiler warnings
|
||||
|
@ -475,4 +480,3 @@ tetris_piece_t* tetris_logic_getPreviewPiece(tetris_logic_t *pLogic)
|
|||
assert(pLogic != NULL);
|
||||
return pLogic->pPreviewPiece;
|
||||
}
|
||||
|
||||
|
|
|
@ -49,7 +49,7 @@ void tetris_piece_destruct(tetris_piece_t *pPc)
|
|||
****************************/
|
||||
|
||||
/* Function: tetris_piece_getBitmap
|
||||
* Description: returns bitfield representation of the piece
|
||||
* Description: returns bitfield representation of the piece
|
||||
* Argument pPc: piece from which the bitfield shuld be retrieved
|
||||
* Return value: bitfield representation of the piece
|
||||
* - nth nibble is nth row of the piece (from upper left)
|
||||
|
@ -62,7 +62,7 @@ uint16_t tetris_piece_getBitmap(tetris_piece_t *pPc)
|
|||
// Lookup table:
|
||||
// A value in an array represents a piece in a specific angle (rotating
|
||||
// clockwise from index 0).
|
||||
const static uint16_t piece[][4] PROGMEM =
|
||||
static const uint16_t piece[][4] PROGMEM =
|
||||
{{0x0F00, 0x2222, 0x0F00, 0x2222}, // LINE
|
||||
{0x4E00, 0x4640, 0x0E40, 0x4C40}, // T
|
||||
{0x0660, 0x0660, 0x0660, 0x0660}, // SQUARE
|
||||
|
|
|
@ -14,6 +14,7 @@
|
|||
|
||||
#define WAIT(ms) wait(ms)
|
||||
|
||||
|
||||
/***********
|
||||
* defines *
|
||||
***********/
|
||||
|
@ -409,7 +410,6 @@ void tetris_view_showResults(tetris_view_t *pV)
|
|||
snprintf(pszResults, 48 * sizeof(char),
|
||||
"</#Lines %u New Highscore %u", nLines, nScore);
|
||||
}
|
||||
|
||||
#ifdef SCROLLTEXT_SUPPORT
|
||||
scrolltext(pszResults);
|
||||
#endif
|
||||
|
|
Loading…
Reference in New Issue