//Tärningsspel av Jocke "Firetech" Andersson, Skrivet 30-31/8 -2004 och Inspirerat av Ulrik Nilsson.
//Licens: GNU GPL.
#include <iostream>
#include <time.h>
#include <stdlib.h>
#include <string>
#include "..\pause.h"
using namespace std;

int random(int lowest_number, int highest_number)
{
  int range = highest_number - lowest_number + 1;
  return lowest_number + int(range * rand()/(RAND_MAX + 1.0));
}


void print_die(int number)
{
  string die;
  int dir = random(1,2);
  for (int line = 1;line <= 5;line++) {
    die = "     ";
    if ((line == 1) || (line == 5)) {
      die = "  -----  ";
    } else {
      switch (number)
      {
        case 1:
          if (line == 3) {
            die = "  *  ";
          }
          break;
        case 2:
          if (dir == 2) {
            if (line == 2)  {
            die = "*    ";
            } else if (line == 4) {
              die = "    *";
            }
          } else {
            if (line == 2)  {
              die = "    *";
            } else if (line == 4) {
              die = "*    ";
            }
          }
          break;
        case 3:
          if (dir == 2) {
            if (line == 2) {
              die = "*    ";
            } else if (line == 3) {
              die = "  *  ";
            } else if (line == 4) {
              die = "    *";
            }
          } else {
            if (line == 2) {
              die = "    *";
            } else if (line == 3) {
              die = "  *  ";
            } else if (line == 4) {
              die = "*    ";
            }
          }
          break;
        case 4:
          if ((line == 2) || (line == 4)) {
            die = "*   *";
          }
          break;
        case 5:
          if ((line == 2) || (line == 4)) {
            die = "*   *";
          } else if (line == 3) {
            die = "  *  ";
          }
          break;
        case 6:
          die = "*   *";
          break;
        default:
          die = "";
      }
    }
    if ((die != "") && (line >= 2) && (line <= 4)) {
      cout << " |" << die << "| ";
    } else {
      cout << die;
    }
    cout << endl;
  }
}

int game(int value)
{
  int tval, lval = 0;
  bool a_cont;
  string cont;
  while (true) {
    tval = random(1,6);
    print_die(tval);
    cout << "Du slog en " << tval << ":a";
    if (tval != 1) {
      lval += tval;
      cout << endl << "Din po\x84ngsumma f\x94r denna omg\x86ngen \x84r nu " << lval  << ". Du har nu totalt " << lval+value  << " po\x84ng." << endl;
    } else {
      cout << endl << "Du f\x94rlorar denna omg\x86ngens po\x84ng. Du har nu totalt " << value  << " po\x84ng." << endl << endl;
      pause();
      return value;
    }
    if (value + lval >= 100) {
      return value + lval;
    }
    a_cont = true;
    while (a_cont) {
      cout << "Vill du forts\x84tta sl\x86 t\x84rningen? (J/N) ";
      cin >> cont;
      if ((cont[0] == 'N') || (cont[0] == 'n')) {
        return value + lval;
      } else if ((cont[0] != 'J') && (cont[0] != 'j')) {
        cout << "Felaktigt svar! (" << cont[0] << ")" << endl;
      } else {
        a_cont = false;
      }
    }
    cout << endl;
  }
}

void main(void)
{
  int as, i;
  bool cont, sname, cont_game;
  char name[71];
  string ngame;
  srand(time(NULL));
  cont_game = true;
  while (cont_game) {
    system("CLS");
    const string title("T\x84rningsspel av Jocke \"Firetech\" Andersson - Version 1.3.4.3"), tuline(title.size(),'=');
    cout << title << endl << tuline << endl << endl;
    cont = true;
    while (cont) {
      cout << "Antal spelare: ";
      cin >> as;
      if (as <= 1) {
        cout << "Minst tv\x86 spelare!" << endl;
      } else if (as >= 21) {
          cout << "Max 20 spelare!" << endl;
      } else {
        cont = false;
      }
    }
    int* plyrs_val = new int[as];
    string* plyrs_nam = new string[as];
    as--;
    cout << endl << "(Max 70 tecken per namn. F\x94r l\x86nga namn avkortas automatiskt.)" << endl;
    for (i = 0;i <= as;i++) {
      cont = true;
      while (cont) {
        cout << "Ange namn p\x86 spelare " << i + 1 << ": ";
        cin.ignore(100,'\n');
        cin.get(name,71);
        if (name[0] == '\0') {
          cout << "Du m\x86ste ange ett namn!" << endl;
          cin.clear();
        } else {
          sname = false;
          for (int j = 0;j <= i-1 && !sname;j++) {
            if (name == plyrs_nam[j]) {
              cout << "Du f\x86r inte ha samma namn som n\x86gon annan!" << endl;
              sname = true;
            }
          }
          if (!sname) {
            cont = false;
          }
        }
      }
      plyrs_nam[i] = name;
      plyrs_val[i] = 0;
    }
    cin.ignore(100,'\n');
    cout << endl;
    cont = true;
    while (cont) {
      for (i = 0;i <= as && cont;i++) {
        system("CLS");
        string line(plyrs_nam[i].size() + 6,'=');
        cout << plyrs_nam[i] << "'s tur" << endl << line << endl;
        plyrs_val[i] = game(plyrs_val[i]);
        if (plyrs_val[i] >= 100) {
          cout << endl << line << endl << plyrs_nam[i] << " vann!" << endl << line << endl << endl;
          cont = false;
        }
      }
    }
    cont = true;
    while (cont) {
      cout << "Nytt spel? (J/N) ";
      cin >> ngame;
      if ((ngame[0] == 'N') || (ngame[0] == 'n')) {
        cont_game = false;
        cont = false;
      } else if ((ngame[0] != 'J') && (ngame[0] != 'j')) {
        cout << "Felaktigt svar! (" << ngame[0] << ")" << endl;
      } else {
        cont_game = true;
        cont = false;
      }
    }
  }
}

