Added color to Blocks
This commit is contained in:
parent
32dbe48f04
commit
8163c92e01
Binary file not shown.
@ -1,21 +1,38 @@
|
|||||||
# Blocks
|
# Blocks
|
||||||
|
|
||||||
This is a clon (more or less) of SameGame, a tile-matching puzzle video game, originally released under the name Chain Shot! in 1985 by Kuniaki Moribe (Morisuke).
|
This is a clone (more or less) of SameGame, a tile-matching puzzle video game, originally released under the name Chain Shot! in 1985 by Kuniaki Moribe (Morisuke).
|
||||||
|
|
||||||
The goal of the game is to remove all the blocks of the board.
|
The goal of the game is to remove all the blocks of the board.
|
||||||
|
|
||||||
Copyright (c) 1999-2018 Miguel García / FloppySoftware
|
Copyright (c) 1999-2018 Miguel García / FloppySoftware
|
||||||
|
|
||||||
The file ``kslib.h`` has been modified for VT100 compatibility (insted of VT52) by me (Anna Christina Naß <acn@acn.wtf>.
|
The game has been modified for VT100 compatibility (insted of VT52) and got some color by me (Anna Christina Naß <acn@acn.wtf>.
|
||||||
|
|
||||||
Original Repository: https://github.com/MiguelVis/RetroProjects
|
Original Repository: https://github.com/MiguelVis/RetroProjects
|
||||||
Website: http://www.floppysoftware.es/blocks.html?path=cpm_projects|blocks
|
Website: http://www.floppysoftware.es/blocks.html?path=cpm_projects|blocks
|
||||||
|
|
||||||
The file ``BLOCKS.COM`` is the compiled game file.
|
The file ``BLOCKS.COM`` is the compiled game file.
|
||||||
|
|
||||||
## Commands
|
## The Game
|
||||||
|
|
||||||
Move the cursor using Q, O, P and A as shown on the screen.
|
Move the cursor using the numpad keys:
|
||||||
|
|
||||||
|
8
|
||||||
|
|
|
||||||
|
4 --+-- 6
|
||||||
|
|
|
||||||
|
2
|
||||||
|
|
||||||
|
Then select a blocks using ``W`` and remove the blocks using ``R``.
|
||||||
|
|
||||||
|
You can select just one block, or a group of blocks of the same type
|
||||||
|
|
||||||
|
If you are in the normal mode, you can place all the blocks against a side (top, bottom, left or right).
|
||||||
|
Select the side using the ``E``, ``S``, ``D`` or ``X`` key.
|
||||||
|
|
||||||
|
If you are in the automatic mode, the blocks rows will be placed on the bottom side of the board, and the columns will be placed on the middle of the board.
|
||||||
|
|
||||||
|
The special block **X**, multiplies that result by 10.
|
||||||
|
|
||||||
## Compile:
|
## Compile:
|
||||||
|
|
||||||
|
129
Blocks/blocks.c
129
Blocks/blocks.c
@ -21,6 +21,7 @@
|
|||||||
Revisions:
|
Revisions:
|
||||||
|
|
||||||
02 Jul 2012 : Generic CP/M version 1.0 for 24x80 VT52 screen.
|
02 Jul 2012 : Generic CP/M version 1.0 for 24x80 VT52 screen.
|
||||||
|
11 Mar 2020 : modified to VT100 version by acn@acn.wtf
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <mescc.h> /* MESCC header & runtime */
|
#include <mescc.h> /* MESCC header & runtime */
|
||||||
@ -62,17 +63,26 @@
|
|||||||
#define SCORE_ROW 2 /* Screen position for score info */
|
#define SCORE_ROW 2 /* Screen position for score info */
|
||||||
#define SCORE_COL 73 /* id */
|
#define SCORE_COL 73 /* id */
|
||||||
|
|
||||||
#define K_UP 'Q' /* Key up */
|
#define K_UP '8' /* Key up */
|
||||||
#define K_DOWN 'A' /* Key down */
|
#define K_DOWN '2' /* Key down */
|
||||||
#define K_LEFT 'O' /* Key left */
|
#define K_LEFT '4' /* Key left */
|
||||||
#define K_RIGHT 'P' /* Key right */
|
#define K_RIGHT '6' /* Key right */
|
||||||
#define K_EXIT 'X' /* Key exit */
|
#define K_EXIT 'Q' /* Key exit */
|
||||||
#define K_SELECT 'S' /* Key select */
|
#define K_SELECT 'W' /* Key select */
|
||||||
#define K_KILL 'K' /* Key kill */
|
#define K_KILL 'R' /* Key kill */
|
||||||
#define K_GRAV_UP '1' /* Key gravity up */
|
#define K_GRAV_UP 'E' /* Key gravity up */
|
||||||
#define K_GRAV_LEFT '2' /* Key gravity left */
|
#define K_GRAV_LEFT 'S' /* Key gravity left */
|
||||||
#define K_GRAV_RIGHT '3' /* Key gravity right */
|
#define K_GRAV_RIGHT 'D' /* Key gravity right */
|
||||||
#define K_GRAV_DOWN '4' /* Key gravity down */
|
#define K_GRAV_DOWN 'X' /* Key gravity down */
|
||||||
|
|
||||||
|
#define RESET "\e[0m" /* reset all attributes */
|
||||||
|
#define RED "\e[31m"
|
||||||
|
#define GREEN "\e[32m"
|
||||||
|
#define YELLOW "\e[33m"
|
||||||
|
#define BLUE "\e[34;1m"
|
||||||
|
#define MAGENTA "\e[35m"
|
||||||
|
#define CYAN "\e[36m"
|
||||||
|
#define WHITE "\e[37m"
|
||||||
|
|
||||||
/* VARIABLES
|
/* VARIABLES
|
||||||
*/
|
*/
|
||||||
@ -142,19 +152,22 @@ int argc, argv[];
|
|||||||
|
|
||||||
Menu()
|
Menu()
|
||||||
{
|
{
|
||||||
|
char str[80];
|
||||||
|
|
||||||
ScrClr(); ScrCurOff();
|
ScrClr(); ScrCurOff();
|
||||||
|
|
||||||
ScrTitle(0, "BLOCKS");
|
sprintf(str, "%sB%sl%so%sc%sk%ss%s", RED, GREEN, BLUE, CYAN, MAGENTA, WHITE, RESET); ScrOutStrRC(0, 37, str);
|
||||||
ScrTitle(1, "v1.0");
|
ScrTitle(1, "v1.1");
|
||||||
ScrTitle(3, "(c) 2012 FLOPPY SOFTWARE");
|
ScrTitle(3, "(c) 2012 Floppy Software");
|
||||||
|
ScrTitle(4, "VT-100 version (c) 2020 by acn@acn.wtf");
|
||||||
|
|
||||||
ScrOutStrRC( 6, 25, "1 : PLAY GAME IN NORMAL MODE");
|
ScrOutStrRC( 8, 25, "1 : Play game in normal mode");
|
||||||
ScrOutStrRC( 8, 25, "2 : PLAY GAME IN AUTOMATIC MODE");
|
ScrOutStrRC(10, 25, "2 : Play game in automatic mode");
|
||||||
ScrOutStrRC(10, 25, "3 : SHOW HELP");
|
ScrOutStrRC(12, 25, "3 : Show help");
|
||||||
|
|
||||||
ScrOutStrRC(12, 25, "X : EXIT GAME");
|
ScrOutStrRC(16, 25, "Q : Quit game");
|
||||||
|
|
||||||
ScrTitle(SCR_ROWS-2, "SELECT YOUR CHOICE");
|
ScrTitle(SCR_ROWS-2, "Select your choice");
|
||||||
|
|
||||||
randindex=0; /* This is used to generate a random number */
|
randindex=0; /* This is used to generate a random number */
|
||||||
|
|
||||||
@ -171,7 +184,7 @@ Menu()
|
|||||||
case '1' : automode=0; return 1;
|
case '1' : automode=0; return 1;
|
||||||
case '2' : automode=1; return 1;
|
case '2' : automode=1; return 1;
|
||||||
case '3' : Help(); return 2;
|
case '3' : Help(); return 2;
|
||||||
case 'X' : return 0;
|
case K_EXIT : return 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -183,22 +196,23 @@ Help()
|
|||||||
{
|
{
|
||||||
ScrClr();
|
ScrClr();
|
||||||
|
|
||||||
ScrTitle( 0, "BLOCKS");
|
ScrTitle( 0, "Blocks");
|
||||||
|
ScrTitle( 1, "------");
|
||||||
|
|
||||||
ScrTitle( 2, "The object of the game is to remove all the");
|
ScrTitle( 3, "The object of the game is to remove all the");
|
||||||
ScrTitle( 3, "blocks of the board.");
|
ScrTitle( 4, "blocks of the board.");
|
||||||
ScrTitle( 5, "You can select just one block, or a group of");
|
ScrTitle( 6, "You can select just one block, or a group of");
|
||||||
ScrTitle( 6, "blocks of the same type.");
|
ScrTitle( 7, "blocks of the same type.");
|
||||||
ScrTitle( 8, "Then, if you are in the normal mode, you can place all");
|
ScrTitle( 9, "Then, if you are in the normal mode, you can place all");
|
||||||
ScrTitle( 9, "the blocks against a side (top, bottom, left or right).");
|
ScrTitle(10, "the blocks against a side (top, bottom, left or right).");
|
||||||
ScrTitle(11, "If you are in the automatic mode, the blocks rows will be");
|
ScrTitle(12, "If you are in the automatic mode, the blocks rows will be");
|
||||||
ScrTitle(12, "placed on the bottom side of the board, and the columns");
|
ScrTitle(13, "placed on the bottom side of the board, and the columns");
|
||||||
ScrTitle(13, "will be placed on the middle of the board.");
|
ScrTitle(14, "will be placed on the middle of the board.");
|
||||||
ScrTitle(15, "The partial score is the square of the number of");
|
ScrTitle(16, "The partial score is the square of the number of");
|
||||||
ScrTitle(16, "blocks selected.");
|
ScrTitle(17, "blocks selected.");
|
||||||
ScrTitle(18, "The special block 'X', multiplies that result by 10.");
|
ScrTitle(19, "The special block 'X', multiplies that result by 10.");
|
||||||
ScrTitle(20, "Good luck!");
|
ScrTitle(21, "Good luck!");
|
||||||
ScrTitle(22, "PRESS ANY KEY");
|
ScrTitle(23, "PRESS ANY KEY");
|
||||||
|
|
||||||
KbdIn();
|
KbdIn();
|
||||||
}
|
}
|
||||||
@ -209,6 +223,7 @@ Help()
|
|||||||
Play()
|
Play()
|
||||||
{
|
{
|
||||||
int row, col, run, val, key;
|
int row, col, run, val, key;
|
||||||
|
char str[80];
|
||||||
|
|
||||||
/* SETUP VARIABLES & BOARD
|
/* SETUP VARIABLES & BOARD
|
||||||
*/
|
*/
|
||||||
@ -224,11 +239,12 @@ Play()
|
|||||||
|
|
||||||
ScrClr();
|
ScrClr();
|
||||||
|
|
||||||
ScrBox(0, 0, SCR_ROWS-1, SCR_COLS, NULL); ScrTitle(0, "| BLOCKS |");
|
ScrBox(0, 0, SCR_ROWS-1, SCR_COLS, NULL);
|
||||||
|
sprintf(str, "| %sB%sL%sO%sC%sK%sS%s |", RED, GREEN, BLUE, CYAN, MAGENTA, WHITE, RESET); ScrOutStrRC(0, 35, str);
|
||||||
|
|
||||||
ScrOutStrRC(LEVEL_ROW, LEVEL_COL, "BLOCKS"); PrintBlocks();
|
ScrOutStrRC(LEVEL_ROW, LEVEL_COL, "Blocks"); PrintBlocks();
|
||||||
|
|
||||||
ScrOutStrRC(SCORE_ROW, SCORE_COL, "SCORE"); PrintScore();
|
ScrOutStrRC(SCORE_ROW, SCORE_COL, "Score"); PrintScore();
|
||||||
|
|
||||||
|
|
||||||
ScrBox(BORDER_ROW, BORDER_COL, BOARD_ROWS*BLOCK_ROWS+2, BOARD_COLS*BLOCK_COLS+2, NULL);
|
ScrBox(BORDER_ROW, BORDER_COL, BOARD_ROWS*BLOCK_ROWS+2, BOARD_COLS*BLOCK_COLS+2, NULL);
|
||||||
@ -239,24 +255,21 @@ Play()
|
|||||||
|
|
||||||
if(!automode)
|
if(!automode)
|
||||||
{
|
{
|
||||||
scrTitle(BORDER_ROW-1, "1");
|
sprintf(str, "%c", K_GRAV_UP); ScrTitle(BORDER_ROW-1, str);
|
||||||
|
sprintf(str, "%c", K_GRAV_DOWN); ScrTitle(BORDER_ROW+BOARD_ROWS+2, str);
|
||||||
ScrTitle(BORDER_ROW+BOARD_ROWS+2, "4");
|
sprintf(str, "%c", K_GRAV_LEFT); ScrOutStrRC(BORDER_ROW+5, BORDER_COL-2, str);
|
||||||
|
sprintf(str, "%c", K_GRAV_RIGHT); ScrOutStrRC(BORDER_ROW+5, BORDER_COL+BOARD_COLS*BLOCK_COLS+3, str);
|
||||||
ScrOutStrRC(BORDER_ROW+5, BORDER_COL-2, "2");
|
|
||||||
|
|
||||||
ScrOutStrRC(BORDER_ROW+5, BORDER_COL+BOARD_COLS*BLOCK_COLS+3, "3");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
ScrOutStrRC(BORDER_ROW+3, 7, " Q");
|
sprintf(str, " %c", K_UP); ScrOutStrRC(BORDER_ROW+3, 7, str);
|
||||||
ScrOutStrRC(BORDER_ROW+4, 7, " |");
|
ScrOutStrRC(BORDER_ROW+4, 7, " |");
|
||||||
ScrOutStrRC(BORDER_ROW+5, 7, "O --x-- P");
|
sprintf(str, "%c --+-- %c", K_LEFT, K_RIGHT); ScrOutStrRC(BORDER_ROW+5, 7, str);
|
||||||
ScrOutStrRC(BORDER_ROW+6, 7, " |");
|
ScrOutStrRC(BORDER_ROW+6, 7, " |");
|
||||||
ScrOutStrRC(BORDER_ROW+7, 7, " A");
|
sprintf(str, " %c", K_DOWN); ScrOutStrRC(BORDER_ROW+7, 7, str);
|
||||||
|
|
||||||
ScrOutStrRC(BORDER_ROW+4, BORDER_COL+BOARD_COLS*BLOCK_COLS+8, "S> SELECT BLOCKS");
|
sprintf(str, "%c> Select blocks", K_SELECT); ScrOutStrRC(BORDER_ROW+4, BORDER_COL+BOARD_COLS*BLOCK_COLS+8, str);
|
||||||
ScrOutStrRC(BORDER_ROW+5, BORDER_COL+BOARD_COLS*BLOCK_COLS+8, "K> KILL BLOCKS");
|
sprintf(str, "%c> Kill blocks", K_KILL); ScrOutStrRC(BORDER_ROW+5, BORDER_COL+BOARD_COLS*BLOCK_COLS+8, str);
|
||||||
ScrOutStrRC(BORDER_ROW+6, BORDER_COL+BOARD_COLS*BLOCK_COLS+8, "X> EXIT");
|
sprintf(str, "%c> Quit", K_EXIT); ScrOutStrRC(BORDER_ROW+6, BORDER_COL+BOARD_COLS*BLOCK_COLS+8, str);
|
||||||
|
|
||||||
/* PLAY GAME
|
/* PLAY GAME
|
||||||
*/
|
*/
|
||||||
@ -582,13 +595,13 @@ int row, col;
|
|||||||
|
|
||||||
switch(GetBlock(row, col))
|
switch(GetBlock(row, col))
|
||||||
{
|
{
|
||||||
case '1' : ScrOut('$'); break;
|
case '1' : ScrOutStr(RED); ScrOut('$'); ScrOutStr(RESET); break;
|
||||||
case '2' : ScrOut('O'); break;
|
case '2' : ScrOutStr(GREEN); ScrOut('O'); ScrOutStr(RESET); break;
|
||||||
case '3' : ScrOut('+'); break;
|
case '3' : ScrOutStr(BLUE); ScrOut('+'); ScrOutStr(RESET); break;
|
||||||
case '4' : ScrOut('#'); break;
|
case '4' : ScrOutStr(MAGENTA); ScrOut('#'); ScrOutStr(RESET); break;
|
||||||
case 'X' : ScrOut('X'); break;
|
case 'X' : ScrOutStr(WHITE); ScrOut('X'); ScrOutStr(RESET); break;
|
||||||
case BLOCK_EMPTY : ScrOut(' '); break;
|
case BLOCK_EMPTY : ScrOutStr(RESET); ScrOut(' '); break;
|
||||||
default : ScrOut('?'); break;
|
default : ScrOutStr(RESET); ScrOut('?'); break;
|
||||||
}
|
}
|
||||||
|
|
||||||
ScrOut(selected ? ':' : ' ');
|
ScrOut(selected ? ':' : ' ');
|
||||||
|
Loading…
Reference in New Issue
Block a user