O O O O
o o o o
o . . o
. .____. _______ .
._______________________.___________ | |__ .____. ____.___________.
| __ / ___ | __ /__|___ __/___|__ _ | | | __ |
| |_/ / _| | |/ / ___/ | __// |___ | |_/ |
| ______/|___________|____|_______|__________|_____| _____|_____ |
|____| /_________|
F O R .____.
.________________________ _____________._____________| |__
| __ / __ /_ __ | ____/____) __/______
| |_/ / |/ / _| | __/ | | |_/ /
. | ______/_____|___________________| | |____|___________/ .
|____| |____|
o . . o
o o P R E S E N T S o o
O O TINT / OS4 O O
PORTED BY ............ SPOT
SUPPLIED BY ... BILL MCEWEN
TYPE ................. GAME
--[ORIGINAL README]-------------------------------------------------------------
Many thanks to the authors of the original tetris(tm) on which this
game is based:
Alexey Pajitnov
Dmitry Pavlovsky
Vadim Gerasimov
Here are some links to pay tribute to their efforts:
http://vadim.www.media.mit.edu/Tetris.htm
http://www.geocities.com/Hollywood/2430/tetris.html
http://atarihq.com/tsr/special/tetrishist.html
As you'll see from those pages, there is a certain evil company prohibiting
software such as this. This is unfortunate and is also the reason why you
have to type tint each time you want to play the game instead
you-know-what :P
Here is a list of people who have written code for tint:
Robert Lemmen
Marcello Mamino
Thanks for your contributions.
ROTATION
--------
STEP 1:
Drop the rotate() functions and make a datastructure which holds all the
shapes (and their rotated versions).
typedef struct
{
int x,y;
} block_t;
typedef struct
{
int color;
int next;
block_t block[NUMSHAPES];
} shape_t;
We then just hold the current blocknumber, when we rotate it, we replace it
with it's the next field, and so on.
STEP 2:
Also, make the board a one-dimensional array and get rid of the block_t
structure. The shape_t structure should look like this then:
typedef struct
{
int next;
int block[NUMSHAPES];
} shape_t;
Just make a array with the initial 7 colors, and keep that color until the
next piece is chosen. This should prove to be the optimal solution.
SCORE
-----
Ok, here's what I could figure out and what I think should be used.
1. We count the number of lines that a piece drops when the user press SPACE,
2. Add 1 to that when we figure out that the block has come to rest,
3. Multiply above by the current level,
4. If "Show Next" is enabled, divide by two, else take as is, and add the
result to the score.
Of course, we should add 2 instead of 1 to prevent loss of precision in step
4, and the displayed score is then the score / 2.
TIMING
------
Here's what I'm going to use:
1. There is 9 levels, numbered from 1 to 9. We allow 1/level of a second to
pass before we drop each block one line.
2. After each ten lines that is removed, we increase the level automatically,
unless the player is already at the highest level (level 9). CAVEAT: If the
user starts at a higher level than one, we pretend he didn't when we come
to increasing levels, e.g. if he/she started at level 3, 30 lines must be
dropped before we go to level 4.
3. I still have to decide whether to use the BSD type delaying (the type I'm
currently using) or to do it the way I first did it (the signal handler
method). The question remains which one is the most playable and which
one is the most portable.
--------------------------------------------------------------------------------
| |