Introduction
Introduction Statistics Contact Development Disclaimer Help
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 ==
You are viewing proxied material from bitreich.org. The copyright of proxied material belongs to its original authors. Any comments or complaints in relation to proxied material should be directed to the original authors of the content concerned. Please see the disclaimer for more details.