Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*Include statements: Iostream for console input/output, Iomanip for formatting,
- cctype for conversion of characters to uppercase,
- time.h for importing current system time.*/
- #include <iostream>
- #include <iomanip>
- #include <cctype>
- #include <time.h>
- using namespace std;
- // function prototypes
- char get_mode();
- int get_num_players();
- char print_menu(char ¤t_player, bool &quit_flag);
- void run_game(char game_board[], int player_positions[], char ¤t_player, \
- int ¤t_player_number, bool &quit_flag, char mode, bool &has_chute, \
- bool &has_ladder, int &landing_index, bool &win_flag, bool &hit_flag);
- char square_symbol(int pos, char game_board[]);
- int generate_roll(char mode);
- void move(int roll, int player_positions[], int current_player_number, \
- bool &has_chute, bool &has_ladder, int &landing_index, bool &win_flag);
- void activate_ladder();
- void activate_chute();
- void has_chute_or_ladder(bool &has_chute, bool &has_ladder, int &landing_index, int pos);
- void fill_arrays(char game_board[], char game_board_const[]);
- void hit_check(int ¤t_player_number, int player_positions[], int &original_position, bool &hit_flag);
- int main() {
- int num_players, current_player_number, landing_index;
- char player_letter[4] = { 'a','b','c','d', }, game_board[40] = {}, game_board_const[40] = {};
- int player_positions[4] = { -1, -1, -1, -1 }, last_positions[4] = { -1, -1, -1, -1 };
- char mode, user_selection = 'R', current_player, last_symbol = ' ';
- bool quit_flag = false, has_chute, has_ladder, win_flag = false, hit_flag = false;
- cout << "-----Chutes and ladders-----\n1, 2 3 go up, and #, $, and ^ go down\n";
- num_players = get_num_players();
- mode = get_mode();
- fill_arrays(game_board, game_board_const);
- while (win_flag == false){
- for (int i = 0; i < num_players; i++) {
- current_player = player_letter[i];
- current_player_number = i;
- last_positions[current_player_number] = player_positions[current_player_number];
- run_game(game_board, player_positions, current_player, current_player_number, quit_flag, mode, \
- has_chute, has_ladder, landing_index, win_flag);
- for (int j = 0; j < num_players; j++) {
- if (last_positions[j] > -1) {
- game_board[last_positions[j]] = game_board_copy[last_positions[j]];
- }
- }
- if (quit_flag == true) {
- cout << "Quitting...";
- break;
- }
- if (win_flag == true) {
- break;
- }
- }
- }
- return 0;
- }
- void run_game(char game_board[], int player_positions[], char ¤t_player, \
- int ¤t_player_number, bool &quit_flag, char mode, bool &has_chute, bool &has_ladder, int &landing_index, \
- bool &win_flag, bool &hit_flag) {
- char current_board_symbol, user_selection;
- int roll;
- for (int i = 1; i < 41; i++) {
- current_board_symbol = square_symbol(i - 1, game_board);
- cout << "| " << current_board_symbol << " ";
- if (i % 8 == 0)
- cout << "|" << endl;
- }
- cout << endl;
- user_selection = print_menu(current_player, quit_flag);
- roll = generate_roll(mode);
- // cout << "\nCurrent player number is: " << current_player_number << endl; // check player numbers
- move(roll, player_positions, current_player_number, has_chute, has_ladder, landing_index, win_flag);
- if (player_positions[current_player_number] > -1)
- game_board[player_positions[current_player_number]] = current_player;
- }
- int get_num_players(){
- int num_players;
- cout << "\nPlease enter how many players there will be: ";
- cin >> num_players;
- if (num_players > 4 || num_players < 2) {
- do {
- cout << "\nPlease enter between 2-4 players: ";
- cin >> num_players;
- } while (num_players > 4 || num_players < 2);
- }
- return num_players;
- }
- char get_mode() {
- char mode = 0;
- cout << "\nChoose which mode to play in \n(D)ebug mode\n(P)ower mode\
- \nAnything else will be regular mode\nEnter Mode: ";
- cin >> mode;
- mode = toupper(mode);
- if (mode != 'D' && mode != 'P')
- mode = 'R';
- return mode;
- }
- char print_menu(char ¤t_player, bool &quit_flag) {
- char user_selection;
- cout << "----Current player is "<< current_player << "----\n(R)oll\n(Q)uit\n";
- cin >> user_selection;
- user_selection = toupper(user_selection);
- if (user_selection != 'Q' && user_selection != 'R') {
- do {
- cout << "\nInvalid Selection!\n(R)oll\n(Q)uit\n";
- cin >> user_selection;
- user_selection = toupper(user_selection);
- } while (user_selection != 'R' && user_selection != 'Q');
- }
- if (user_selection == 'Q') {
- quit_flag = true;
- }
- return user_selection;
- }
- void fill_arrays(char game_board[], char game_board_const[]) {
- for (int i = 0; i < 40; i++) {
- if (i == 3 || i == 17)
- game_board[i] = '#';
- else if (i == 4 || i == 11)
- game_board[i] = '1';
- else if (i == 6 || i == 27)
- game_board[i] = '2';
- else if (i == 12 || i == 30)
- game_board[i] = '$';
- else if (i == 19 || i == 36)
- game_board[i] = '3';
- else if (i == 26 || i == 35)
- game_board[i] = '%';
- else
- game_board[i] = ' ';
- }
- for (int i = 0; i < 40; i++) {
- game_board_const[i] = game_board[i];
- }
- }
- char square_symbol(int pos, char game_board[]) {
- char current_symbol;
- if (game_board[pos] == 'a')
- current_symbol = 'a';
- else if (game_board[pos] == 'b')
- current_symbol = 'b';
- else if (game_board[pos] == 'c')
- current_symbol = 'c';
- else if (game_board[pos] == 'd')
- current_symbol = 'd';
- else if (game_board[pos] == ' ')
- current_symbol = ' ';
- else if (game_board[pos] == '1')
- current_symbol = '1';
- else if (game_board[pos] == '2')
- current_symbol = '2';
- else if (game_board[pos] == '3')
- current_symbol = '3';
- else if (game_board[pos] == '%')
- current_symbol = '%';
- else if (game_board[pos] == '#')
- current_symbol = '#';
- else if (game_board[pos] == '$')
- current_symbol = '$';
- return current_symbol;
- }
- int generate_roll(char mode) {
- int roll;
- if (mode == 'D') {
- srand(10);
- roll = rand()%6 + 1;
- cout << "\nRolled a " << roll << endl;
- }
- else if (mode == 'P') {
- srand(10);
- cout << "\nRoll: ";
- cin >> roll;
- }
- else {
- srand(time(NULL));
- roll = rand()%6 + 1;
- cout << "\nRolled a " << roll << endl;
- }
- return roll;
- }
- void move(int roll, int player_positions[], int current_player_number,\
- bool &has_chute, bool &has_ladder, int &landing_index, bool &win_flag){
- int original_position = player_positions[current_player_number];
- player_positions[current_player_number] += roll;
- has_chute_or_ladder(has_chute, has_ladder, landing_index, player_positions[current_player_number]);
- if (has_chute == true) {
- player_positions[current_player_number] = landing_index;
- activate_chute();
- }
- else if (has_ladder == true) {
- player_positions[current_player_number] = landing_index;
- activate_ladder();
- }
- hit_check(current_player_number, player_positions, original_position);
- if (player_positions[current_player_number] == 40) {
- win_flag = true;
- cout << "Player " << current_player_number + 1 << " wins!\n";
- }
- if (player_positions[current_player_number] > 40) {
- cout << "Rolled past the end of the board. You need an exact roll.\n";
- player_positions[current_player_number] = original_position;
- }
- if (hit_flag == true)
- game_board[player_positions[current_player_number]] = original_position;
- }
- void activate_ladder(){
- if (rand() % 2 < 1) {
- cout << "Oh no. You had to climb back up the board.\n";
- }
- else {
- cout << "Climbing up!\n";
- }
- }
- void activate_chute(){
- if (rand() % 2 < 1) {
- cout << "Going down!\n";
- }
- else {
- cout << "Wheeeeeeee!\n";
- }
- }
- void has_chute_or_ladder(bool &has_chute, bool &has_ladder, int &landing_index, int pos){
- if (pos == 11) {
- landing_index = 4;
- has_ladder = true;
- }
- else if (pos == 27) {
- landing_index = 6;
- has_ladder = true;
- }
- else if (pos == 36) {
- landing_index = 19;
- has_ladder = true;
- }
- else if (pos == 3) {
- landing_index = 17;
- has_chute = true;
- }
- else if (pos == 12) {
- landing_index = 30;
- has_chute = true;
- }
- else if (pos == 26) {
- landing_index = 35;
- has_chute = true;
- }
- else {
- has_chute = false;
- has_ladder = false;
- }
- }
- // REWRITE THIS ENTIRE FUNCTION - KILL ME NOW
- void hit_check(int ¤t_player_number, int player_positions[], int &original_position, bool &hit_flag) {
- if (current_player_number == 0) {
- if (player_positions[current_player_number] == player_positions[current_player_number + 1]) {
- cout << "Hit player b" << endl;
- player_positions[current_player_number] = original_position;
- hit_flag = true;
- }
- else if (player_positions[current_player_number] == player_positions[current_player_number + 2]) {
- cout << "Hit player c" << endl;
- player_positions[current_player_number] = original_position;
- hit_flag = true;
- }
- else if (player_positions[current_player_number] == player_positions[current_player_number + 3]) {
- cout << "Hit player d" << endl;
- player_positions[current_player_number] = original_position;
- hit_flag = true;
- }
- }
- else if (current_player_number == 1) {
- if (player_positions[current_player_number] == player_positions[current_player_number - 1]) {
- cout << "Hit player a" << endl;
- player_positions[current_player_number] = original_position;
- hit_flag = true;
- }
- else if (player_positions[current_player_number] == player_positions[current_player_number + 1]) {
- cout << "Hit player c" << endl;
- player_positions[current_player_number] = original_position;
- hit_flag = true;
- }
- else if (player_positions[current_player_number] == player_positions[current_player_number + 2]) {
- cout << "Hit player d" << endl;
- player_positions[current_player_number] = original_position;
- hit_flag = true;
- }
- }
- else if (current_player_number == 2) {
- if (player_positions[current_player_number] == player_positions[current_player_number - 2]) {
- cout << "Hit player a" << endl;
- player_positions[current_player_number] = original_position;
- hit_flag = true;
- }
- else if (player_positions[current_player_number] == player_positions[current_player_number - 1]) {
- cout << "Hit player b" << endl;
- player_positions[current_player_number] = original_position;
- hit_flag = true;
- }
- else if (player_positions[current_player_number] == player_positions[current_player_number + 1]) {
- cout << "Hit player d" << endl;
- player_positions[current_player_number] = original_position;
- hit_flag = true;
- }
- }
- else if (current_player_number == 3) {
- if (player_positions[current_player_number] == player_positions[current_player_number - 3]) {
- cout << "Hit player a" << endl;
- player_positions[current_player_number] = original_position;
- hit_flag = true;
- }
- else if (player_positions[current_player_number] == player_positions[current_player_number - 2]) {
- cout << "Hit player b" << endl;
- player_positions[current_player_number] = original_position;
- hit_flag = true;
- }
- else if (player_positions[current_player_number] == player_positions[current_player_number - 1]) {
- cout << "Hit player c" << endl;
- player_positions[current_player_number] = original_position;
- hit_flag = true;
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement