Updated - gnuskii - GNUSki improved for ascii skiing experience.
(HTM) git clone git://bitreich.org/gnuskii git://enlrupgkhuxnvlhsf6lc3fziv5h2hhfrinws65d7roiv6bfj7d652fid.onion/gnuskii
(DIR) Log
(DIR) Files
(DIR) Refs
(DIR) Tags
(DIR) README
(DIR) LICENSE
---
(DIR) commit a71ace04b1cedf9855e9bf1c6bb8c2171c981f67
(DIR) parent b75e3a7e48d87f71654eb7cae6c4fafa34ab2875
(HTM) Author: Rudolf Olah <rudolf.olah.to@gmail.com>
Date: Thu, 31 May 2007 11:03:38 -0400
Updated
Diffstat:
A src/main.c | 132 +++++++++++++++++++++++++++++++
1 file changed, 132 insertions(+), 0 deletions(-)
---
(DIR) diff --git a/src/main.c b/src/main.c
@@ -0,0 +1,132 @@
+/* GNUSki - a clone of the old game Skifree where you race downhill
+ avoiding rocks and trees and try to score points by doing some
+ tricks.
+ Copyright (C) 2007 Rudolf Olah
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+*/
+
+#include "objects.h"
+#include <stdlib.h>
+#include <time.h>
+#include <stdio.h>
+#include <ncurses.h>
+
+#define MAX_OBJECTS 300
+#define REFRESH_RATE 5000
+
+int main (int argc, char* argv[])
+{
+ struct Object player, objects[MAX_OBJECTS];
+ unsigned int c = 0, i = 0, maxRows, maxCols, ticker = 0, score = 0,
+ distance = 0, speed = 1, style = 0;
+ enum mode {loop, lose, win} state = loop;
+ char facing[2] = {'s', 'n'}; /* Player facing, object facing */
+
+ srand ((unsigned)time (NULL)); /* Seed random-number generator */
+ initscr (); /* Start ncurses */
+ cbreak (); /* Allow control breaks (Ctrl+C) */
+ noecho (); /* Don't echo characters to screen */
+ keypad (stdscr, true); /* Allow cursor key usage */
+ curs_set (0); /* Hide the cursor */
+ getmaxyx (stdscr, maxRows, maxCols); /* Get coordinates of the terminal */
+ setupColors ();
+
+ /* Create objects */
+ player = makeObject (skier, maxCols/2, maxRows/2);
+ for (i = 0; i < MAX_OBJECTS; i++)
+ objects[i] = makeObject (rand () % 3+1,
+ rand () % maxCols,
+ rand () % (maxRows*4 + maxRows/2));
+
+ /* Menu will go here */
+ printw ("GNUSki 0.3 - Skifree clone using NCurses, licensed under the GNU GPL.\n");
+ printw ("Press any key to start...");
+ refresh ();
+ getch ();
+ nodelay (stdscr, true); /* No waiting for input from the user */
+ while (state == loop)
+ {
+ switch (c)
+ {
+ case KEY_LEFT: case 'h': case 'H':
+ facing[0] = '4';
+ facing[1] = '2';
+ break;
+
+ case KEY_RIGHT: case 'l': case 'L':
+ facing[0] = '3';
+ facing[1] = '1';
+ break;
+
+ case KEY_UP: case 'k': case 'K':
+ if (speed > 0)
+ speed--;
+ break;
+
+ case KEY_DOWN: case 'j': case 'J':
+ if (speed < 3)
+ speed++;
+ break;
+
+ case 'Q': case 'q':
+ state = lose;
+ break;
+ }
+
+ if (ticker == REFRESH_RATE)
+ {
+ clear ();
+ ticker = 0;
+
+ /* Check for collisions and draw the objects */
+ for (i = 0; i < MAX_OBJECTS; i++)
+ {
+ if (objects[i].type != none && collision (player, objects[i]))
+ state = lose;
+ moveObject (&objects[i], facing[1], speed);
+ if (objects[i].y < 0)
+ setPosition (&objects[i], rand () % (maxCols*2),
+ rand () % maxRows + maxRows);
+ if (objects[i].x > 2 && objects[i].x < maxCols-2
+ && objects[i].y > 2 && objects[i].y < maxRows-2)
+ draw (objects[i], facing[1]);
+ }
+ draw (player, facing[0]);
+ printw ("Time: 0:00:00.00\n");
+ printw ("Dist: %02im\n", distance);
+ printw ("Speed: %02im/s\n", speed);
+ printw ("Style: %4i", style);
+ distance += speed;
+ }
+ refresh ();
+ if (speed > 0)
+ ticker++;
+ c = getch ();
+ }
+ clear ();
+ if (state == win)
+ printw ("You won.");
+ else
+ printw ("You lost.");
+ printw ("Your score was %i. You traveled %im.\nPress any key to continue...",
+ distance+style, distance);
+ refresh ();
+ nodelay (stdscr, false);
+ getch ();
+
+ endwin ();
+ return 0;
+}