| Make gnuski into gnuskii. - gnuskii - GNUSki improved for ascii skiing experien… | |
| git clone git://bitreich.org/gnuskii git://enlrupgkhuxnvlhsf6lc3fziv5h2hhfrinws… | |
| Log | |
| Files | |
| Refs | |
| Tags | |
| README | |
| LICENSE | |
| --- | |
| commit c8f10d133d57af101e0beece67f9c5902ce0ca1a | |
| parent 11cc620aa0c6b69f1540219053d5078bdc8a8990 | |
| Author: Christoph Lohmann <[email protected]> | |
| Date: Wed, 19 Nov 2025 18:39:58 +0100 | |
| Make gnuski into gnuskii. | |
| * Apply bitreich changes. | |
| * Add info for control. | |
| * Add bigfoot, snowman and jump feature. | |
| Diffstat: | |
| M src/Makefile | 2 +- | |
| M src/main.c | 35 +++++++++++++++++++++++++----… | |
| M src/objects.c | 55 ++++++++++++++++++++++++++++-… | |
| M src/objects.h | 3 ++- | |
| M src/readme | 2 +- | |
| 5 files changed, 82 insertions(+), 15 deletions(-) | |
| --- | |
| diff --git a/src/Makefile b/src/Makefile | |
| @@ -1,6 +1,6 @@ | |
| CC=gcc | |
| FLAGS=-O2 -o gnuski | |
| -LIBS=-lncurses | |
| +LIBS=-lncurses -ltinfo | |
| FILES=main.c objects.c | |
| all: | |
| diff --git a/src/main.c b/src/main.c | |
| @@ -25,7 +25,7 @@ | |
| #include <unistd.h> | |
| #include <ncurses.h> | |
| -#define MAX_OBJECTS 300 | |
| +#define MAX_OBJECTS 128 | |
| int main (int argc, char* argv[]) | |
| { | |
| @@ -47,13 +47,26 @@ int main (int argc, char* argv[]) | |
| /* Create objects */ | |
| player = makeObject (skier, maxCols/2, maxRows/2); | |
| - for (i = 0; i < MAX_OBJECTS; i++) | |
| + for (i = 0; i < MAX_OBJECTS; i++) { | |
| objects[i] = makeObject (rand () % 3+1, | |
| rand () % maxCols, | |
| rand () % (maxRows*4 + maxRows/2)); | |
| + } | |
| + | |
| + objects[rand() % MAX_OBJECTS] = makeObject (bigfoot, | |
| + rand () % maxCols, | |
| + rand () % (maxRows*4 + maxRows/2)); | |
| + objects[rand() % MAX_OBJECTS] = makeObject (snowman, | |
| + rand () % maxCols, | |
| + rand () % (maxRows*4 + maxRows/2)); | |
| /* Menu will go here */ | |
| printw ("GNUSki 0.3 - Skifree clone using NCurses, licensed under the GNU GP… | |
| + printw ("left, h, h - lean left\n"); | |
| + printw ("right, L, l - lean right\n"); | |
| + printw ("up, K, k - slow down\n"); | |
| + printw ("down, J, j - speed up\n"); | |
| + printw ("space - go into trick mode (beware, you can't move)\n"); | |
| printw ("Press any key to start..."); | |
| refresh (); | |
| getch (); | |
| @@ -63,25 +76,28 @@ int main (int argc, char* argv[]) | |
| switch (c) | |
| { | |
| case KEY_LEFT: case 'h': case 'H': | |
| + if (player.trick) break; | |
| facing[0] = '4'; | |
| facing[1] = '2'; | |
| break; | |
| - | |
| case KEY_RIGHT: case 'l': case 'L': | |
| + if (player.trick) break; | |
| facing[0] = '3'; | |
| facing[1] = '1'; | |
| break; | |
| - | |
| case KEY_UP: case 'k': case 'K': | |
| + if (player.trick) break; | |
| if (speed > 0) | |
| speed--; | |
| break; | |
| - | |
| case KEY_DOWN: case 'j': case 'J': | |
| + if (player.trick) break; | |
| if (speed < 4) | |
| speed++; | |
| break; | |
| - | |
| + case ' ': | |
| + player.trick++; | |
| + break; | |
| case 'Q': case 'q': | |
| state = lose; | |
| break; | |
| @@ -111,10 +127,15 @@ int main (int argc, char* argv[]) | |
| draw (objects[i], facing[1]); | |
| } | |
| draw (player, facing[0]); | |
| + if (player.trick) { | |
| + style += 1; | |
| + player.trick -= 0.10; | |
| + if (player.trick < 0) player.trick = 0; | |
| + } | |
| printw ("Time: 0:00:00.00\n"); | |
| printw ("Dist: %02im\n", distance); | |
| printw ("Speed: %02im/s\n", speed); | |
| - printw ("Style: %4i", style); | |
| + printw ("Style: %4i (trick = %.2f%%)", style, player.trick*100); | |
| distance += speed; | |
| frame_counter++; | |
| refresh (); | |
| diff --git a/src/objects.c b/src/objects.c | |
| @@ -30,8 +30,14 @@ setupColors () | |
| exit (1); | |
| } | |
| start_color (); | |
| + /* tree */ | |
| init_pair (1, COLOR_GREEN, COLOR_BLACK); | |
| + /* rock */ | |
| init_pair (2, COLOR_WHITE, COLOR_BLACK); | |
| + /* bigfoot */ | |
| + init_pair (3, COLOR_BLUE, COLOR_BLACK); | |
| + /* snowman */ | |
| + init_pair (4, COLOR_CYAN, COLOR_BLACK); | |
| } | |
| struct Object | |
| @@ -41,6 +47,7 @@ makeObject (enum objectType type, int x, int y) | |
| o.type = type; | |
| o.x = x; | |
| o.y = y; | |
| + o.trick = 0; | |
| return o; | |
| } | |
| @@ -78,25 +85,40 @@ draw (struct Object o, char facing) | |
| case 'n': | |
| case 's': | |
| move (o.y, o.x); | |
| - printw ("||"); | |
| + if (o.trick) | |
| + printw ("@@"); | |
| + else | |
| + printw ("||"); | |
| break; | |
| case 'w': | |
| move (o.y, o.x); | |
| - printw ("=="); | |
| + if (o.trick) | |
| + printw ("@@"); | |
| + else | |
| + printw ("=="); | |
| break; | |
| case 'e': | |
| move (o.y, o.x+1); | |
| - printw ("=="); | |
| + if (o.trick) | |
| + printw ("@@"); | |
| + else | |
| + printw ("=="); | |
| break; | |
| case '1': | |
| case '3': | |
| move (o.y, o.x); | |
| - printw ("\\\\"); | |
| + if (o.trick) | |
| + printw ("@@"); | |
| + else | |
| + printw ("\\\\"); | |
| break; | |
| case '2': | |
| case '4': | |
| move (o.y, o.x); | |
| - printw ("//"); | |
| + if (o.trick) | |
| + printw ("@@"); | |
| + else | |
| + printw ("//"); | |
| break; | |
| } | |
| break; | |
| @@ -119,6 +141,27 @@ draw (struct Object o, char facing) | |
| case hill: | |
| move (o.y, o.x); | |
| printw ("/^\\"); | |
| + break; | |
| + case bigfoot: | |
| + attron (COLOR_PAIR(3)); | |
| + move (o.y, o.x); | |
| + printw (" O "); | |
| + move (o.y+1, o.x); | |
| + printw ("\\|/"); | |
| + move (o.y+2, o.x); | |
| + printw ("/ \\"); | |
| + attroff (COLOR_PAIR(3)); | |
| + break; | |
| + case snowman: | |
| + attron (COLOR_PAIR(4)); | |
| + move (o.y, o.x); | |
| + printw (" o "); | |
| + move (o.y+1, o.x); | |
| + printw ("\\O/"); | |
| + move (o.y+2, o.x); | |
| + printw (" O "); | |
| + attroff (COLOR_PAIR(4)); | |
| + break; | |
| case none: default: | |
| break; | |
| } | |
| @@ -131,6 +174,8 @@ collision (struct Object player, struct Object target) | |
| switch (target.type) | |
| { | |
| case tree: | |
| + case bigfoot: | |
| + case snowman: | |
| return player.y == target.y+2 && player.x == target.x+1; | |
| break; | |
| case rock: | |
| diff --git a/src/objects.h b/src/objects.h | |
| @@ -25,12 +25,13 @@ | |
| #include <stdlib.h> | |
| #include <ncurses.h> | |
| -enum objectType { none, tree, rock, hill, skier, bigfoot }; | |
| +enum objectType { none, tree, rock, hill, skier, bigfoot, snowman }; | |
| struct Object | |
| { | |
| enum objectType type; | |
| int x, y; | |
| + float trick; | |
| }; | |
| struct Object makeObject (enum objectType type, int x, int y); | |
| diff --git a/src/readme b/src/readme | |
| @@ -15,7 +15,7 @@ Left, H, h - lean to the left | |
| Right, L, l - lean to the right | |
| Up, K, k - slow down | |
| Down, J, j - speed up | |
| -Space - trick (not available just yet) | |
| +Space - trick | |
| == For Programmers == | |