e87ac@efd.lth.se (Anders Carlsson) (05/02/90)
I don't know if anyone has already sent out fixes for xtetris, anyway:
The xtetris program in the R4/contrib distribution didn't work right
because of some bugs in the source code.
The bugs generated the following symptoms:
* The game ended immediately after it started, with only the first
block appearing on the screen.
* After fixing the above, I discoverd that the "Vertical Bar" was
impossible to move away from the left side of the game area, when
moved there.
* One of the dogleg figures was missing (dogleg left & dogleg right
were identical).
* when filling more than two rows at one time, e.g with a wertical bar,
the game stopped.
Oh, there are more bugs, but after fixing the few mentioned ones, the game is
possible to play, enjoy.
/Anders.
----------------------------------------------------------------------------
Festina lente; The Anders Carlsson snail: K{mmn{rsv{gen 8:171
world will wait email: e87ac@efd.lth.se S-222 45 Lund
for you. tel int: +46 46 188797 Sweden
----------------------------------------------------------------------------
--------------------- Cut Here ------------------
*** Tetris.c.orig Wed May 2 09:54:51 1990
--- Tetris.c Wed May 2 10:17:04 1990
***************
*** 55,62 ****
1, 1, 1, 0, 0, 0, 1, 0, 0, 0, /* 11 horiz T upside */
1, 1, 0, 0, 0, 0, 1, 1, 0, 0, /* 12 vertical dogleg left */
0, 1, 1, 0, 0, 1, 1, 0, 0, 0, /* 13 horiz dogleg left */
! 1, 1, 0, 0, 0, 0, 1, 1, 0, 0, /* 14 vertical dogleg right */
! 0, 1, 1, 0, 0, 1, 1, 0, 0, 0, /* 15 horiz dogleg right */
0, 1, 0, 1, 0, 1, 0, 1, 0, 0, /* 16 long bar (vert) */
0, 1, 0, 1, 0, 1, 0, 1, 0, 0, /* 17 long bar (horiz) */
1, 1, 0, 0, 0, 1, 1, 0, 0, 0, /* 18 dummy */
--- 55,62 ----
1, 1, 1, 0, 0, 0, 1, 0, 0, 0, /* 11 horiz T upside */
1, 1, 0, 0, 0, 0, 1, 1, 0, 0, /* 12 vertical dogleg left */
0, 1, 1, 0, 0, 1, 1, 0, 0, 0, /* 13 horiz dogleg left */
! 0, 1, 1, 0, 0, 1, 1, 0, 0, 0, /* 14 vertical dogleg right */
! 1, 1, 0, 0, 0, 0, 1, 1, 0, 0, /* 15 horiz dogleg right */
0, 1, 0, 1, 0, 1, 0, 1, 0, 0, /* 16 long bar (vert) */
0, 1, 0, 1, 0, 1, 0, 1, 0, 0, /* 17 long bar (horiz) */
1, 1, 0, 0, 0, 1, 1, 0, 0, 0, /* 18 dummy */
***************
*** 76,84 ****
offset(tetris.level), XtRImmediate, (caddr_t) 3},
{XtNcellSizeInPixels, XtCCellSizeInPixels, XtRInt, sizeof(int),
offset(tetris.cell_size_in_pixels), XtRImmediate, (caddr_t)DEFAULT_CELL_SIZE },
! {XtNpixmapWidthInCells, XtCPixmapWidthInCells, XtRDimension, sizeof(Dimension),
offset(tetris.pixmap_width_in_cells), XtRImmediate, (caddr_t)DEFAULT_PIXMAP_WIDTH },
! {XtNpixmapHeightInCells, XtCPixmapHeightInCells, XtRDimension, sizeof(Dimension),
offset(tetris.pixmap_height_in_cells), XtRImmediate, (caddr_t)DEFAULT_PIXMAP_HEIGHT },
{XtNdelay, XtCDelay, XtRInt, sizeof(int),
offset(tetris.delay), XtRImmediate, (caddr_t) DEFAULT_DELAY},
--- 76,84 ----
offset(tetris.level), XtRImmediate, (caddr_t) 3},
{XtNcellSizeInPixels, XtCCellSizeInPixels, XtRInt, sizeof(int),
offset(tetris.cell_size_in_pixels), XtRImmediate, (caddr_t)DEFAULT_CELL_SIZE },
! {XtNpixmapWidthInCells, XtCPixmapWidthInCells, XtRInt, sizeof(int),
offset(tetris.pixmap_width_in_cells), XtRImmediate, (caddr_t)DEFAULT_PIXMAP_WIDTH },
! {XtNpixmapHeightInCells, XtCPixmapHeightInCells, XtRInt, sizeof(int),
offset(tetris.pixmap_height_in_cells), XtRImmediate, (caddr_t)DEFAULT_PIXMAP_HEIGHT },
{XtNdelay, XtCDelay, XtRInt, sizeof(int),
offset(tetris.delay), XtRImmediate, (caddr_t) DEFAULT_DELAY},
***************
*** 533,539 ****
String *direction;
{
int i;
! int x, y, xoff;
if (*direction[0] == 'l') {
xoff = -1;
--- 533,539 ----
String *direction;
{
int i;
! int xoff;
if (*direction[0] == 'l') {
xoff = -1;
***************
*** 621,632 ****
return(False);
}
}
! else
if (w->tetris.cell[w->tetris.cur_x + (i % BLOCK_WIDTH)][w->tetris.cur_y + (i % BLOCK_LENGTH) + 1]) {
return(False);
}
}
}
}
static void
--- 621,633 ----
return(False);
}
}
! else /* even, vertical */
if (w->tetris.cell[w->tetris.cur_x + (i % BLOCK_WIDTH)][w->tetris.cur_y + (i % BLOCK_LENGTH) + 1]) {
return(False);
}
}
}
+ return(True);
}
static void
***************
*** 682,699 ****
if (crunched_row[0]) { /* some crunching to do */
/* now move down the array to reflect crunched rows */
for (j = 0; j < i; j++) { /* do up to 4 crunched rows */
! for (y = crunched_row[j]; y >= 0; y--) {
for (x = 0;x < w->tetris.pixmap_width_in_cells; x++) {
w->tetris.cell[x][y] = w->tetris.cell[x][y - 1];
}
}
}
- for (x = 0;x < w->tetris.pixmap_width_in_cells; x++) {
- w->tetris.cell[x][0] = 0;
- w->tetris.cell[x][1] = 0;
- }
}
- /* clear first two rows. For some reason they're full of garbarge */
}
Score(w)
--- 683,695 ----
if (crunched_row[0]) { /* some crunching to do */
/* now move down the array to reflect crunched rows */
for (j = 0; j < i; j++) { /* do up to 4 crunched rows */
! for (y = crunched_row[j]; y > 0; y--) {
for (x = 0;x < w->tetris.pixmap_width_in_cells; x++) {
w->tetris.cell[x][y] = w->tetris.cell[x][y - 1];
}
}
}
}
}
Score(w)
***************
*** 723,729 ****
w->tetris.cell[w->tetris.cur_x + xoffset][w->tetris.cur_y + yoffset] = True;
}
}
! if (w->tetris.cur_y < 3) { /* block ends up near top */
XtCallCallbacks(w, XtNgameover, w->tetris.score);
XtRemoveTimeOut(timer);
w->tetris.running = False; /* stop play */
--- 719,725 ----
w->tetris.cell[w->tetris.cur_x + xoffset][w->tetris.cur_y + yoffset] = True;
}
}
! if (w->tetris.cur_y < 1) { /* block ends up near top */
XtCallCallbacks(w, XtNgameover, w->tetris.score);
XtRemoveTimeOut(timer);
w->tetris.running = False; /* stop play */
*** TetrisP.h.old Sun Mar 25 16:12:48 1990
--- TetrisP.h Tue Apr 10 19:48:35 1990
***************
*** 41,48 ****
Pixel foreground;
XtCallbackList callback; /* application installed callback function(s) */
XtCallbackList gameover;
! Dimension pixmap_width_in_cells;
! Dimension pixmap_height_in_cells;
int cell_size_in_pixels;
int delay;
int level;
--- 41,48 ----
Pixel foreground;
XtCallbackList callback; /* application installed callback function(s) */
XtCallbackList gameover;
! int pixmap_width_in_cells;
! int pixmap_height_in_cells;
int cell_size_in_pixels;
int delay;
int level;
*** xtetris.c.old Sun Mar 25 16:12:48 1990
--- xtetris.c Tue Apr 10 19:49:06 1990
***************
*** 47,53 ****
#include "Tetris.h"
! Dimension pixmap_width_in_cells, pixmap_height_in_cells;
Widget topLevel, tetris, form, score_label, pause, pshell, highscoretop;
Widget initialShell, initialDialog, gameoverShell, gameoverDialog;
--- 47,53 ----
#include "Tetris.h"
! int pixmap_width_in_cells, pixmap_height_in_cells;
Widget topLevel, tetris, form, score_label, pause, pshell, highscoretop;
Widget initialShell, initialDialog, gameoverShell, gameoverDialog;