| Updated - gnuskii - GNUSki improved for ascii skiing experience. | |
| git clone git://bitreich.org/gnuskii git://enlrupgkhuxnvlhsf6lc3fziv5h2hhfrinws… | |
| Log | |
| Files | |
| Refs | |
| Tags | |
| README | |
| LICENSE | |
| --- | |
| commit 58a716472d07e93a4c838c7b0c4d3ccd126e0bc2 | |
| parent f177e638fea8b809781f0d6d110c2f3d00e22167 | |
| Author: Rudolf Olah <[email protected]> | |
| Date: Mon, 13 Jun 2005 10:27:58 -0400 | |
| Updated | |
| Diffstat: | |
| A src/main.cpp | 140 +++++++++++++++++++++++++++++… | |
| 1 file changed, 140 insertions(+), 0 deletions(-) | |
| --- | |
| diff --git a/src/main.cpp b/src/main.cpp | |
| @@ -0,0 +1,140 @@ | |
| +/******************************** | |
| +* SkiFree GNU * | |
| +* Rudolf Olah * | |
| +* Copyright 2005 * | |
| +* Released under the GNU GPL * | |
| +********************************/ | |
| +#include <curses.h> //Include curses stuff | |
| +#include <signal.h> | |
| +#include <stdlib.h> | |
| +#include <pthread.h> //Include posix thread stuff | |
| +#include "common.h" //Include common functions | |
| +#include "init.h" //Include initialization functions | |
| +#include "draw.h" //Include draw functions | |
| + | |
| +#define OBJ_NUM 30 | |
| +#define GAME_SPEED 2 | |
| + | |
| +void* timer(void* temp); | |
| +void* collideY(void* temp); | |
| + | |
| +//Global variables | |
| +bool collidex, collidey; | |
| +int ski_x, ski_y, ski_next_y; | |
| +int obj_x[OBJ_NUM], obj_y[OBJ_NUM]; | |
| + | |
| +int main(int argc, char** argv) | |
| +{ | |
| + char d; | |
| + int angle; | |
| + WINDOW *wnd = initStuff(wnd); | |
| + pthread_t moveThread, collideYThread; | |
| + int moveTRet, collideYRet; | |
| + | |
| + //Set starting skiDude position and angle | |
| + ski_x = 0; ski_y = 8; ski_next_y = 8; | |
| + angle = 2; | |
| + collidex = false; collidey = false; | |
| + //Make object x and y random | |
| + for (int i = 0; i < OBJ_NUM; i++) | |
| + { | |
| + obj_x[i] = rndInt(3,60); | |
| + obj_y[i] = rndInt(0,20); | |
| + }; | |
| + | |
| + clear(); | |
| + //Draw the ski dude | |
| + drawSkiDude(ski_y,ski_x,angle); | |
| + //Draw the trees | |
| + for (int i = 0; i < OBJ_NUM/2; i++) | |
| + drawTree(obj_x[i], obj_y[i]); | |
| + //Draw the rocks | |
| + for (int i = OBJ_NUM/2; i < OBJ_NUM; i++) | |
| + { | |
| + drawRock(obj_x[i], obj_y[i]); | |
| + }; | |
| + refresh(); | |
| + | |
| + //Start the threads | |
| + moveTRet = pthread_create(&moveThread,NULL,timer,NULL); | |
| + collideYRet = pthread_create(&collideYThread,NULL,collideY,NULL); | |
| + | |
| + while (!collidex && !collidey) | |
| + { | |
| + d = getch(); // input from keyboard | |
| + switch (d) | |
| + { | |
| + case KEY_UP: case '8': angle+=1; … | |
| + case KEY_RIGHT: case '5': … | |
| + case KEY_DOWN: case '2': angle-=1; … | |
| + case 'q': finish(0); break; // quit? | |
| + }; | |
| + | |
| + //Check angle bounds | |
| + if (angle > 4) | |
| + angle = 4; | |
| + if (angle < 0) | |
| + angle = 0; | |
| + | |
| + clear(); | |
| + | |
| + if (!collidex && !collidey) | |
| + drawSkiDude(ski_y,ski_x,angle); //Draw the ski dude | |
| + else | |
| + { | |
| + add(ski_x,ski_y,'X'); | |
| + break; | |
| + }; | |
| + | |
| + //Draw the trees | |
| + for (int i = 0; i < OBJ_NUM/2; i++) | |
| + drawTree(obj_x[i], obj_y[i]); | |
| + //Draw the rocks | |
| + for (int i = OBJ_NUM/2; i < OBJ_NUM; i++) | |
| + { | |
| + drawRock(obj_x[i], obj_y[i]); | |
| + }; | |
| + | |
| + //Make sure ski dude goes in the right direction | |
| + switch (angle) | |
| + { | |
| + case angle_l: | |
| + case angle_cl: ski_next_y = ski_y+1; bre… | |
| + case angle_r: | |
| + case angle_cr: ski_next_y = ski_y-1; bre… | |
| + }; | |
| + | |
| + if (!collidex && !collidey) | |
| + ski_y = ski_next_y; | |
| + //If ski dude is not complete left or right, add to the positi… | |
| + if (angle > angle_l && angle < angle_r) | |
| + ski_x++; | |
| + refresh(); | |
| + } | |
| + refresh(); | |
| + finish(0); | |
| + return 0; | |
| +}; | |
| + | |
| +void* timer(void* temp) | |
| +{ | |
| + //Check collisions with rocks | |
| + for (int i = OBJ_NUM/2; i < OBJ_NUM; i++) | |
| + { | |
| + if (ski_x == obj_x[i]) | |
| + collidex = true; | |
| + }; | |
| + system("sleep 1"); | |
| + if (!collidex && !collidey) | |
| + ski_x++; | |
| +}; | |
| + | |
| +void* collideY(void* temp) | |
| +{ | |
| + //Check collisions with rocks | |
| + for (int i = OBJ_NUM/2; i < OBJ_NUM; i++) | |
| + { | |
| + if (ski_next_y == obj_y[i]) | |
| + collidey = true; | |
| + }; | |
| +}; |