aboutsummaryrefslogtreecommitdiffstats
path: root/YetiHack/src/YetiHack.cpp
diff options
context:
space:
mode:
authorRay Hogenson <rayhogenson@gmail.com>2012-01-10 15:24:39 -0900
committerRay Hogenson <rayhogenson@gmail.com>2012-01-10 15:24:39 -0900
commitc1d1a4cfb55e87fb4db68980b3af9c31fde363a9 (patch)
tree2d0f92a791c1151a9683788b808dd6eaf4857c2f /YetiHack/src/YetiHack.cpp
parentae0551652fa132bb512638433189c1290933164e (diff)
parent4e87a290412cea63f548760de6f4a91b1d1ba352 (diff)
downloadyetihack-c1d1a4cfb55e87fb4db68980b3af9c31fde363a9.tar.zst
Merge branch 'master' of github.com:rayhogenson/YetiHack
Diffstat (limited to 'YetiHack/src/YetiHack.cpp')
-rw-r--r--YetiHack/src/YetiHack.cpp407
1 files changed, 407 insertions, 0 deletions
diff --git a/YetiHack/src/YetiHack.cpp b/YetiHack/src/YetiHack.cpp
new file mode 100644
index 0000000..958c1ea
--- /dev/null
+++ b/YetiHack/src/YetiHack.cpp
@@ -0,0 +1,407 @@
+#include <iostream>
+#include <curses.h>
+#include <cstdlib>
+#include <time.h>
+#include <vector>
+#include <cstring>
+#include <fstream>
+#include <sstream>
+#include "yeti.h"
+#define Linux
+using namespace std;
+void endCurses();
+void startCurses();
+int wait(int);
+int start(int, bool, bool, double);
+void story();
+const char* convert(int);
+void menu(bool);
+
+void endCurses()
+{
+ if (!isendwin())
+ endwin();
+}
+void startCurses()
+{
+ initscr();
+ cbreak();
+ noecho();
+ intrflush(stdscr, false);
+ keypad(stdscr, true);
+}
+
+int wait(int seconds)
+{
+ int snum;
+ int initial = time(NULL);
+ do
+ {
+ snum = time(NULL) - initial;
+ } while (snum < seconds);
+}
+int start(int rate, bool immortal, bool story, double escapeturns)
+{
+ int x, y;
+ int sizex, sizey;
+ getmaxyx(stdscr,y,x);
+ escapeturns = escapeturns * x * y;
+ sizey = y - 3;
+ sizex = x;
+ char input;
+ int yetinum = 1;
+ x = 1;
+ y = 1;
+ vector<yeti> yetis;
+ yeti yeti1(sizex / 2, sizey / 2, sizex, sizey);
+ yetis.push_back(yeti1);
+ for (int i = 0; i < sizey; ++i)
+ {
+ for (int j = 0; j < sizex; ++j)
+ {
+ addch('.');
+ }
+ }
+ move(y - 1, x - 1);
+ addch('@');
+ for (int i = 0; i < yetinum; ++i)
+ {
+ move(yetis[i].ypos() - 1, yetis[i].xpos() - 1);
+ addch('y');
+ }
+ move(sizey, 0);
+ refresh();
+ int count = 0;
+ move(sizey + 1, 0);
+ addstr("count: 0");
+ while (!story || count < escapeturns)
+ {
+ input = getch();
+ move(y - 1, x - 1);
+ addch('.');
+ for (int i = 0; i < yetinum; ++i)
+ {
+ move(yetis[i].ypos() - 1, yetis[i].xpos() - 1);
+ addch('.');
+ }
+ if (input == '4')
+ {
+ --x;
+ }
+ else if (input == '7')
+ {
+ --x;
+ --y;
+ }
+ else if (input == '8')
+ {
+ --y;
+ }
+ else if (input == '9')
+ {
+ ++x;
+ --y;
+ }
+ else if (input == '6')
+ {
+ ++x;
+ }
+ else if (input == '3')
+ {
+ ++x;
+ ++y;
+ }
+ else if (input == '2')
+ {
+ ++y;
+ }
+ else if (input == '1')
+ {
+ ++y;
+ --x;
+ }
+ ++count;
+ // did you go off the side?
+ if (x < 1)
+ {
+ x = sizex;
+ }
+ if (x > sizex)
+ {
+ x = 1;
+ }
+ if (y < 1)
+ {
+ y = sizey;
+ }
+ if (y > sizey)
+ {
+ y = 1;
+ }
+ // begin yeti Ai
+ for(int i = 0; i < yetinum; ++i)
+ {
+ yetis[i].movetowards(x, y, yetis, i);
+ }
+ // End Yeti AI
+ for (int i = 0; i < yetinum; ++i)
+ {
+ if (x == yetis[i].xpos() && y == yetis[i].ypos() && !immortal)
+ {
+ if (story)
+ {
+ return 1;
+ }
+ for (int i = 0; i < yetinum; ++i)
+ {
+ move(yetis[i].ypos() - 1, yetis[i].xpos() - 1);
+ addch('y');
+ }
+ move(sizey, 0);
+ addstr("You Died!\n");
+ char buf[100];
+ for (int j = 0; j < 100; ++j)
+ {
+ buf[j] = ' ';
+ }
+ sprintf(buf, "You survived %d turns\n", count);
+ for(int j = 0; buf[j] != '\n'; ++j)
+ {
+ addch(buf[j]);
+ }
+ addstr("\nDo you want to play again?[y/n] ");
+ refresh();
+ char playagain = getch();
+ while (playagain != 'y' && playagain != 'n')
+ {
+ playagain = getch();
+ }
+ erase();
+ if (playagain == 'y')
+ {
+ #ifdef Windows
+ system("cls");
+ #endif
+ return 1;
+ }
+ else
+ {
+ endCurses();
+ #ifdef Windows
+ system("cls");
+ #endif
+ cout << "You survived " << count << " turns" << endl;
+ }
+ return 0;
+ }
+ }
+ for (int i = 0; i < yetinum; ++i)
+ {
+ move(yetis[i].ypos() - 1, yetis[i].xpos() - 1);
+ addch('y');
+ }
+ move(y - 1, x - 1);
+ addch('@');
+ move(sizey + 1, 7);
+ addstr(" ");
+ move(sizey + 1, 7);
+ addstr(convert(count));
+ move(sizey, 0);
+ addstr(" ");
+ move(sizey, 0);
+ refresh();
+ if (count % rate == 0)
+ {
+ move((sizey / 2) - 1,(sizex / 2) - 1);
+ addch('y');
+ move(sizey, 0);
+ addstr("A New Yeti Has Appeared!");
+ refresh();
+ ++yetinum;
+ yetis.push_back(yeti1);
+ }
+ }
+ addstr("\nYou Escaped!");
+ do
+ {
+ input = getch();
+ } while (input != '\n');
+ return 0;
+}
+
+void story()
+{
+ char input;
+ addstr("One day, you are ambushed by yetis!\n");
+ addstr("Press any key to fight them...\n");
+ refresh();
+ getch();
+ erase();
+ if (start(10, false, true, 0.0064020) == 1)
+ {
+ erase();
+ addstr("You died!");
+ do
+ {
+ input = getch();
+ } while (input != '\n');
+ return;
+ }
+ erase();
+ addstr("You escaped, unfortunately, they attack again.\n");
+ addstr("Press any key to fight them...\n");
+ refresh();
+ getch();
+ erase();
+ if (start(5, false, true, 0.012804) == 1)
+ {
+ erase();
+ addstr("You died!");
+ do
+ {
+ input = getch();
+ } while (input != '\n');
+ return;
+ }
+ erase();
+ addstr("Now, you are attacked a third time!\n");
+ addstr("Press any key to fight them...\n");
+ refresh();
+ getch();
+ erase();
+ if (start(2, false, true, 0.064020) == 1)
+ {
+ erase();
+ addstr("You died!");
+ do
+ {
+ input = getch();
+ } while (input != '\n');
+ return;
+ }
+ erase();
+ addstr("There sure are a lot of yetis, because you are attacked again!\n");
+ addstr("Press any key to fight them...\n");
+ refresh();
+ getch();
+ erase();
+ if (start(1, false, true, 0.10243) == 1)
+ {
+ erase();
+ addstr("You died!");
+ do
+ {
+ input = getch();
+ } while (input != '\n');
+ return;
+ }
+ erase();
+ addstr("One last fight.\n");
+ addstr("Press any key to fight them...\n");
+ refresh();
+ getch();
+ erase();
+ if (start(1, false, true, 0.12804) == 1)
+ {
+ erase();
+ addstr("You died!");
+ do
+ {
+ input = getch();
+ } while (input != '\n');
+ return;
+ }
+ erase();
+ addstr("You won!!!!");
+ getch();
+}
+
+const char* convert(int a)
+{
+ stringstream convert;
+ string out;
+ convert << a;
+ convert >> out;
+ const char* caout = out.c_str();
+ return caout;
+}
+
+void menu(bool immortal)
+{
+ int a = 100;
+ startCurses();
+ char input;
+ addstr("Welcome to yetihack!\n");
+ addstr("\t1. Arcade mode (classic)\n");
+ addstr("\t2. Story mode\n");
+ addstr("Select an option to proceed: ");
+ refresh();
+ echo();
+ input = getch();
+ noecho();
+ int rate = 0;
+ switch(input)
+ {
+ case '1':
+ addstr("\nEnter the yeti spawn rate: ");
+ refresh();
+ echo();
+ input = '0';
+ do
+ {
+ a = a + 1;
+ if (input == 7)
+ {
+ int x, y;
+ getyx(stdscr, y, x);
+ move(y, 0);
+ addstr(" ");
+ move(y, 0);
+ addstr("Enter the yeti spawn rate: ");
+ rate /= 10;
+ if (rate != 0)
+ {
+ addstr(convert(rate));
+ }
+ refresh();
+ input = getch();
+ }
+ else
+ {
+ rate *= 10;
+ rate += input - '0';
+ input = getch();
+ }
+ } while (input != '\n');
+ noecho();
+ erase();
+ while(start(rate, immortal, false, 0));
+ break;
+ case '2':
+ erase();
+ story();
+ break;
+ }
+ addstr(convert(a));
+}
+
+int main(int argc, char* argv[])
+{
+ /*startCurses();
+ while (true)
+ {
+ char input = getch();
+ int a = input;
+ addstr(convert(a));
+ }*/
+ bool immortal = false;
+ if (argc > 1 && strcmp(argv[1],"-c") == 0)
+ {
+ immortal = true;
+ }
+ srand(time(0));
+ menu(immortal);
+ endCurses();
+ return 0;
+}
+