[ Príspevkov: 13 ] 
AutorSpráva
Offline

Užívateľ
Užívateľ
Môj prvý OOP program v C++ - Problém

Registrovaný: 07.01.14
Prihlásený: 29.12.22
Príspevky: 41
Témy: 10 | 10

Pekný slnečný deň prajem. :) Robím malú konzolovú hru na princíp spoločenskej hry Room-25, resp. sa učím OOP v C++. Dávam dôraz na to slovo učím, tak ma nepucujte prosím za to, ako vyzerá kód. :D
Hra: Máme mapu o veľkosti 5x5 miestností a hráč začína v strede. Hráč má 50 ťahov na to, aby sa dostal von z areálu, teda do jednej z okrajových miestností. Každé dva ťahy sa miestnosti náhodne menia. Okrem cieľovej a začiatočnej. V hre sú miestnosti, ktoré vás okamžite zabijú, prázdne miestnosti, či miestnosti, ktoré vás zabijú až v ďalšom ťahu, ak z nej neodídete. Hráč môže spraviť v danom kole jednu z nasledujúcich možnosti: pozrieť sa do jednej z vedľajších miestností, presunúť sa do jednej z vedľajších miestností alebo ostať v miestnosti, v ktorej sa nachádza.
A problém - V triede map mám generátor mapy, ktorý má naplniť pole array_map[6][6] náhodnými číslami od 0 - 4. Každé číslo predstavuje nejaký typ miestnosti. No a toto pole má mať každé dva ťahy vygenerované iné hodnoty. Keď si nechám pole vypísať, tak všetko ide v poriadku. Ale ak sa chcem pozrieť do vedľajšej miestnosti alebo sa do nej presunúť, tak celú dobu hry sa v poli nachádzajú tie isté hodnoty, ktoré sa vygenerovali na začiatku hry. A ja už fakt neviem, čo mám zle. Moc by som bol vďačný, keby mi niekto poradil. :)

main.cpp
Spoiler: zobraziť
Kód:
#include <iostream>
#include <stdlib.h>
#include <cstdio>
#include <conio.h>
#include "map.h"
#include "player_position.h"

void clrscr() {
   system("cls");
}

using namespace std;
int turn = 1;

int main() {

    int _game;
    int b;
    int timer = 1;

    while(1) {
        map _map;
        player_position _player;
        /**/ _player.player_map_f();
        _player.show_player_position();
        while (turn != 51) {
                _game = _player.c_game();
                cout << "Game:" << _game << endl;
            if (_game == 1 || _game == 3 || _game == 4) { //stav hry
                if (_game != 3) { //ak nie sme v miestnosti s vychodom
                    if (_game == 4) {//kontrola, ci sme v miestnosti s kyselinou
                        timer++;
                    } else {
                        timer = 1;
                    }
                    cout << "Timer: " << timer << endl;
                    if (timer < 2) { //dve kola v kyselinovej miestnosti
                        if (turn % 2 == 0) {
                            _map.shuffle_rooms();
                        }
                        int btn = getch();
                        clrscr();
                        /** POHYB **/
                        if (btn == 'w') {
                            _player.go_up();
                            _player.show_player_position();
                            //_map.show_map();
                            cout << endl << endl;
                            turn++;
                        }
                        if (btn == 's') {
                            _player.go_down();
                            _player.show_player_position();
                            cout << endl << endl;
                            turn++;
                        }
                        if (btn == 'a') {
                            _player.go_left();
                            _player.show_player_position();
                            cout << endl << endl;
                            turn++;
                        }
                        if (btn == 'd') {
                            _player.go_right();
                            _player.show_player_position();
                            cout << endl << endl;
                            turn++;
                        }

                        /** NAZERANIE DO MIESTNOSTÍ **/
                        if (btn == 'i') {
                            _player.show_text(1);
                            _player.show_player_position();
                            cout << endl << endl;
                            turn++;
                        }
                        if (btn == 'k') {
                            _player.show_text(2);
                            _player.show_player_position();
                            cout << endl << endl;
                            turn++;
                        }
                        if (btn == 'j') {
                            _player.show_text(3);
                            _player.show_player_position();
                            cout << endl << endl;
                            turn++;
                        }
                        if (btn == 'l') {
                            _player.show_text(4);
                            _player.show_player_position();
                            cout << endl << endl;
                            turn++;
                        } else {
                            _player.show_player_position();
                            cout << endl << endl;
                            turn++;
                        }

                        cout << "Turn: " << turn << "/50" << endl;
                    } else {
                        cout << "Preco si neodisiel? Kyselina ta celeho rozleptala a na nasledky zranenii si umrel." << endl;
                        break;
                    }
                } else {
                    cout << "Vsade same svetlo a v miestnosti len jedny dvere. Zo zaujimavosti si ich hned otvoril." << endl << "-Slava! Konecne sa mi to podarilo! Som vonku!-" << endl;
                    break;
                }
            } else {
                cout << "Bol si usmrteny!" << endl;
                break;
            }
            if (turn == 51) {
            clrscr();
            cout << "-Co sa to deje?!-" << endl << "Pocujes otrasy vsade okolo seba. Dvere na vsetkych miestnostiach sa pomaly otvaraju a vidis v nich cervene svetlo." << endl << "-No do...-" << endl << "Vsetko spalene, neostal ani popol." << endl;
            }
        }

        cout << "Spustit novu hru? (Stlac Y pre novu hru a pre ukoncenie programu stlac inu lubovolnu klavesu.)" << endl;
        b = getch();
        if (b == 'y') {
            clrscr();
            turn = 1;
            timer = 1;
            _player.~player_position();
            _map.~map();

            continue;
        } else {
            break;
        }
    }
}

map.cpp
Spoiler: zobraziť
Kód:
#include <iostream>
#include <cstdlib>
#include <stdio.h>
#include "map.h"

using namespace std;


map::map() {
    if (first_turn == 1) {
        for (int i = 0; i < 5; i++) {
            for (int j = 0; j < 5; j++) {
                if (i == 2 && j == 2) {
                    array_map[i][j] = 99;
                }
                else if (i == 0 && j == 4) {
                    array_map[i][j] = 50;
                }
                else {
                    array_map[i][j] = random_room();
                }
            }
        }
    }
    first_turn == 0;
}

map::~map() {
    cout << "Objekt map zniceny." << endl;
}

int map::random_room() {
    return room_type = rand() % 5;
}

void map::shuffle_rooms() {
    for (int i = 0; i < 5; i++) {
        for (int j = 0; j < 5; j++) {
            if (i == 2 && j == 2) {
                array_map[i][j] = 99;
            }
            else if (i == 0 && j == 4) {
                array_map[i][j] = 50;
            }
            else {
                array_map[i][j] = random_room();
            }
        }
    }
}

int map::show_map() {
    for (int i = 0; i < 5; i++) {
        printf("\n");
        for (int j = 0; j < 5; j++) {
            printf("%d ", array_map[i][j]);
        }
    }
    return 0;
}

map.h
Spoiler: zobraziť
Kód:
#include <iostream>
#ifndef MAP_H
#define MAP_H

using namespace std;

class map {
    private:
        int first_turn = 1;

    public:
        int room_type;
        int array_map[6][6];

        map();
        virtual ~map();

        int random_room();
        int show_map();
        void shuffle_rooms();

    protected:
};

#endif // MAP_H

player_position.cpp
Spoiler: zobraziť
Kód:
#include <iostream>
#include <cstdlib>
#include <stdio.h>
#include "player_position.h"

using namespace std;

player_position::player_position() {
    position_x = 2;
    position_y = 2;
    game = 1;
}

player_position::~player_position() {
    position_x = 2;
    position_y = 2;
    game = 1;
    cout << "Objekt player zniceny." << endl;
}

int player_position::c_game(){
    return game;
}

void player_position::show_text() {
    if (array_map[position_x][position_y] == 0) {
        game = 0;
        cout << "Vkrocil si do ohnivej miestnosti a bol si spaleny na uhol!" << endl;
    }
    if (array_map[position_x][position_y] == 1) {
        game = 4;
        cout << "Vosiel si do dalsej miestnosti, no citis neprijemny pocit na kozi. Po chvilke zistis, ze na teba pada jemny kyselinotvorny prasok. Musis urychlene opustit tuto miestnost, inak v dalsom kole umires!" << endl;
    }
    if (array_map[position_x][position_y] == 2) {
        game = 1;
        cout << "Krasny je to pocit byt v tomto sialenom arealy v miestnosti, kde sa nic nedeje." << endl;
    }
    if (array_map[position_x][position_y] == 3) {
        game = 0;
        cout << "Ty blazon, preco si vkrocil do miestnosti plnej vody, ked nevies plavat?" << endl;
    }
    if (array_map[position_x][position_y] == 4) {
        game = 0;
        cout << "Elektricke vyboje nikdy nie su prijemne. A takto silne uz vonkoncom nie. Bohuzial si dostal zasah silnym elektrickym vybojom a okamzize si umrel." << endl;
    }
    if (array_map[position_x][position_y] == 50) {
        game = 3;
        cout << "Cesta von?" << endl;
    }
    if (array_map[position_x][position_y] == 99) {
        game = 1;
        cout << "Zase som v strede! Tato cesta bude nekonecna..." << endl;
    }
}

void player_position::show_text(int text_type) { //ukážka polymorfizmu
    if (text_type == 1) { //UP
        if (look_up() == 0) {
            cout << "Fuu, to je horko. (Vsade len ohen.) Vojst do tejto miestnosti by bola okamzita smrt." << endl;
        }
        if (look_up() == 1) {
            cout << "Hmm, je toto prazdna miestnost?" << endl;
        }
        if (look_up() == 2) {
            cout << "Hmm, je toto prazdna miestnost?" << endl;
        }
        if (look_up() == 3) {
            cout << "Voda, vsade voda! Preco som sa len nenaucil plavat." << endl;
        }
        if (look_up() == 4) {
            cout << "Bzzzzz, pozor! Elektrika. Takto silny vyboj by zabil aj slona!" << endl;
        }
        if (look_up() == 50) {
            cout << "Co to je? Prazdna miestnost, silne svetlo, jedny dvere. Dufam, ze to je cesta von!" << endl;
        }
        if (look_up() == 99) {
            cout << "Jee, spominam si. V tejto miestnosti som sa prebudil!" << endl;
        }
    }
    if (text_type == 2) { //DOWN
        if (look_down() == 0) {
            cout << "Hori ohnik hori... Sem zarucene vojst nechcem." << endl;
        }
        if (look_down() == 1) {
            cout << "Hmm, je toto prazdna miestnost?" << endl;
        }
        if (look_down() == 2) {
            cout << "Hmm, je toto prazdna miestnost?" << endl;
        }
        if (look_down() == 3) {
            cout << "Zblnk. Neviem plavat a tato miestnost je tak plna vody..." << endl;
        }
        if (look_down() == 4) {
            cout << "Otvoril si dvere do dalsej miestnosti a vsade okolo slahaju blesky a v rychlosti ich zavries zase spat. Uff, to bola tesnotka. Vojst dnu je smrt!" << endl;
        }
        if (look_down() == 50) {
            cout << "Otvoril si dvere, opatrne si nazrel a vo vnutri si zbadal jedny dvere s napisom EXIT! Cesta von!" << endl;
        }
        if (look_down() == 99) {
            cout << "Moje rozbite hodinky. Tie som nechal v miestnosti, kde som sa prebudil." << endl;
        }
    }
    if (text_type == 3) { //LEFT
        if (look_left() == 0) {
            cout << "Fuu, to je horko. (Vsade len ohen.) Vojst do tejto miestnosti by bola okamzita smrt." << endl;
        }
        if (look_left() == 1) {
            cout << "Hmm, je toto prazdna miestnost?" << endl;
        }
        if (look_left() == 2) {
            cout << "Hmm, je toto prazdna miestnost?" << endl;
        }
        if (look_left() == 3) {
            cout << "Voda, vsade voda! Preco som sa len nenaucil plavat." << endl;
        }
        if (look_left() == 4) {
            cout << "Bzzzzz, pozor! Elektrika. Takto silny vyboj by zabil aj slona!" << endl;
        }
        if (look_left() == 50) {
            cout << "Co to je? Prazdna miestnost, silne svetlo, jedny dvere. Dufam, ze to je cesta von!" << endl;
        }
        if (look_left() == 99) {
            cout << "Jee, spominam si. V tejto miestnosti som sa prebudil!" << endl;
        }
    }
    if (text_type == 4) { //RIGHT
        if (look_down() == 0) {
            cout << "Hori ohnik hori... Sem zarucene vojst nechcem." << endl;
        }
        if (look_down() == 1) {
            cout << "Hmm, je toto prazdna miestnost?" << endl;
        }
        if (look_down() == 2) {
            cout << "Hmm, je toto prazdna miestnost?" << endl;
        }
        if (look_down() == 3) {
            cout << "Zblnk. Neviem plavat a tato miestnost je tak plna vody..." << endl;
        }
        if (look_down() == 4) {
            cout << "Otvoril si dvere do dalsej miestnosti a vsade okolo slahaju blesky a v rychlosti ich zavries zase spat. Uff, to bola tesnotka. Vojst dnu je smrt!" << endl;
        }
        if (look_down() == 50) {
            cout << "Otvoril si dvere, opatrne si nazrel a vo vnutri si zbadal jedny dvere s napisom EXIT! Cesta von!" << endl;
        }
        if (look_down() == 99) {
            cout << "Moje rozbite hodinky. Tie som nechal v miestnosti, kde som sa prebudil." << endl;
        }
    }
}

void player_position::go_up() {
    if (position_x >= 0 && position_x <= 5) {
        p_p_x = position_x; p_p_y = position_y;
        position_x = position_x - 1;
        set_player_position(p_p_x, p_p_y);
        cout << "POSITION x: " << position_x << endl << "POSITION y: " << position_y << endl;
        show_text();
    } else {
        cout << "Davaj si vacsi pozor! Skoro si padol do prazdna!" << endl;
    }
}

void player_position::go_down() {
    if (position_x >= 0 && position_x <= 5) {
        p_p_x = position_x; p_p_y = position_y;
        position_x = position_x + 1;
        set_player_position(p_p_x, p_p_y);
        cout << "POSITION x: " << position_x << endl << "POSITION y: " << position_y << endl;
        show_text();
    } else {
        cout << "Davaj si vacsi pozor! Skoro si padol do prazdna!" << endl;
    }
}

void player_position::go_left() {
    if (position_y >= 0 && position_y <= 5) {
        p_p_x = position_x; p_p_y = position_y;
        position_y = position_y - 1;
        set_player_position(p_p_x, p_p_y);
        cout << "POSITION x: " << position_x << endl << "POSITION y: " << position_y << endl;
        show_text();
    } else {
        cout << "Davaj si vacsi pozor! Skoro si padol do prazdna!" << endl;
    }
}

void player_position::go_right() {
    if (position_y >= 0 && position_y <= 5) {
        p_p_x = position_x; p_p_y = position_y;
        position_y = position_y + 1;
        set_player_position(p_p_x, p_p_y);
        cout << "POSITION x: " << position_x << endl << "POSITION y: " << position_y << endl;
        show_text();
    } else {
        cout << "Davaj si vacsi pozor! Skoro si padol do prazdna!" << endl;
    }
}

int player_position::look_up() {
    return array_map[position_x-1][position_y];
}

int player_position::look_down() {
    return array_map[position_x+1][position_y];
}

int player_position::look_left() {
    return array_map[position_x][position_y-1];
}

int player_position::look_right() {
    return array_map[position_x][position_y+1];
}

void player_position::player_map_f() {
    for (int i = 0; i < 5; i++) {
        for (int j = 0; j < 5; j++) {
            player_map[i][j] = '#';
        }
    }
    player_map[2][2] = 'X';
}

void player_position::set_player_position(int previous_p_x, int previous_p_y) {
    player_map[position_x][position_y] = 'X';
    player_map[previous_p_x][previous_p_y] = '#';
}

void player_position::show_player_position() {
    for (int i = 0; i < 5; i++) {
        printf("\n");
        for (int j = 0; j < 5; j++) {
            printf("%c ", player_map[i][j]);
        }
    }
}

player_position.h
Spoiler: zobraziť
Kód:
#include <iostream>
#ifndef PLAYER_POSITION_H
#define PLAYER_POSITION_H
#include "map.h"


using namespace std;

class player_position : public map {
    private:
        int game;
        char player_map[6][6];
        int position_x;
        int position_y;
        int p_p_x;
        int p_p_y;

    public:
        player_position();
        virtual ~player_position();

        int c_game();

        void go_up();
        void go_down();
        void go_left();
        void go_right();

        int look_up();
        int look_down();
        int look_left();
        int look_right();

        void stay();

        void set_player_position(int previous_p_x, int previous_p_y);
        void show_player_position();
        void player_map_f();

        virtual void show_text();
        virtual void show_text(int text_type);

    protected:
};

#endif // MAP_H


Offline

Užívateľ
Užívateľ
Môj prvý OOP program v C++ - Problém

Registrovaný: 27.06.09
Prihlásený: 04.03.23
Príspevky: 332
Témy: 3 | 3
Bydlisko: Košice - ok...
NapísalOffline : 22.05.2016 22:54 | Môj prvý OOP program v C++ - Problém

shuffle_rooms() ti funguje...
tú dážďovku sa mi bars nechce lúštiť
//
v timer sa ti strieda 1 a 2
Kód:
if (timer < 2) { //dve kola v kyselinovej miestnosti
    if (turn % 2 == 0) {
        _map.shuffle_rooms();
    }

shuffle_rooms() volas len vtedy ked je timer 1 a este k tomu aj ked je turn delitelny dvojkou
//
a cely ten pohyb a nazeranie do miestnosti mas v timer < 2 ... to preco?
//
uz chapem
//
turn++; - by som vybral a vlozil za vsetky if, aby sa to v kazdom zbytocne neopakovalo, aj cout << endl << endl;
//
skus zmenit _map.shuffle_rooms(); na _player.shuffle_rooms();


_________________
GitHub: mfocko | mfocko.xyz
OSs: archLinux + fedora (+ Windows 10 Pro Insider Preview, only if needed)
Server: archLinux [nginx + Docker (GitLab) + SSH/SFTP + local mirror (FTP/rsync - archLinux, Fedora) + samba + transmission]
Offline

Užívateľ
Užívateľ
Môj prvý OOP program v C++ - Problém

Registrovaný: 07.01.14
Prihlásený: 29.12.22
Príspevky: 41
Témy: 10 | 10
Napísal autor témyOffline : 22.05.2016 23:29 | Môj prvý OOP program v C++ - Problém

Ten timer je premenná, do ktorej sa ukladá počet kôl strávených v miestnosti, ktorá ťa zabije až o 2 ťahy, resp. až ťah po tom, čo si sa rozhodol v nej ostať. Turn++ dobrý postreh. :)
No a tá podmienka, čo si napísal. shuffle_rooms() chcem zavolať každé dva ťahy.
Kód:
if (turn % 2 == 0) {
        _map.shuffle_rooms();
    }

Teda počítam hodnotu v turne ktorú vydelím dvoma a v prípade, ak je zvyšok po delení 0, tak sa majú zamiešať miestnosti. A to funguje. Pri vypísaní samotného pola sa hodnoty každé dva ťahy prehodia. Lenže, keď idem uskutočniť pohyb alebo chcem nazrieť do miestnosti, tak nech je 1. kolo alebo 27. kolo, vždy mi vypíše to isté, teda akoby sa to pole nemenilo pre triedu player_position (inak blbé meno triedy, presnejšie by bolo len player, ale to som si uvedomil až neskôr).


Offline

Užívateľ
Užívateľ
Môj prvý OOP program v C++ - Problém

Registrovaný: 27.06.09
Prihlásený: 04.03.23
Príspevky: 332
Témy: 3 | 3
Bydlisko: Košice - ok...
NapísalOffline : 22.05.2016 23:30 | Môj prvý OOP program v C++ - Problém

lebo sa ani nemeni
mas dva objekty, jeden je ten player a druhy je map
ty volas shuffle na map, a player si furt taha zo svojho pola


_________________
GitHub: mfocko | mfocko.xyz
OSs: archLinux + fedora (+ Windows 10 Pro Insider Preview, only if needed)
Server: archLinux [nginx + Docker (GitLab) + SSH/SFTP + local mirror (FTP/rsync - archLinux, Fedora) + samba + transmission]
Offline

Užívateľ
Užívateľ
Môj prvý OOP program v C++ - Problém

Registrovaný: 07.01.14
Prihlásený: 29.12.22
Príspevky: 41
Témy: 10 | 10
Napísal autor témyOffline : 22.05.2016 23:31 | Môj prvý OOP program v C++ - Problém

No ok, tak to mi vysvetli prečo. :D

Hej a k tomu poľu pristupujem už cez get_array_map(int x, int y)


Offline

Užívateľ
Užívateľ
Môj prvý OOP program v C++ - Problém

Registrovaný: 27.06.09
Prihlásený: 04.03.23
Príspevky: 332
Témy: 3 | 3
Bydlisko: Košice - ok...
NapísalOffline : 22.05.2016 23:33 | Môj prvý OOP program v C++ - Problém

teraz som to dopisal :D player je potomok map, ale oni nezdielaju rovnake pole... ked volas ten look_hore, dole, sikmo... on to porovnava s polom, ktore ma ulozene v player... ty menis to co je v map... to su dve rozdielne polia... PLAYER SI IDE AJ TAK SVOJE a na to v map ti kasle

// Spojený príspevok Ned 22.05.16 23:37

Kód:
if (timer < 2) { //dve kola v kyselinovej miestnosti
    if (turn % 2 == 0) {
        _player.shuffle_rooms();
    }

ten objekt typu _map aj so vsetkym co ho pouzivalo odmaz, je zbytocny


_________________
GitHub: mfocko | mfocko.xyz
OSs: archLinux + fedora (+ Windows 10 Pro Insider Preview, only if needed)
Server: archLinux [nginx + Docker (GitLab) + SSH/SFTP + local mirror (FTP/rsync - archLinux, Fedora) + samba + transmission]
Offline

Užívateľ
Užívateľ
Môj prvý OOP program v C++ - Problém

Registrovaný: 07.01.14
Prihlásený: 29.12.22
Príspevky: 41
Témy: 10 | 10
Napísal autor témyOffline : 22.05.2016 23:39 | Môj prvý OOP program v C++ - Problém

Teraz to vyzerá takto. Mal som aj takého tušáka, že si vytvára vlastné pole. Lenže keď som prirobil getter, tak to hnedé pomohlo. :D Robí to presne to isté.


main.cpp
Spoiler: zobraziť
Kód:
#include <iostream>
#include <stdlib.h>
#include <cstdio>
#include <conio.h>
#include "map.h"
#include "player_position.h"

void clrscr() {
   system("cls");
}

using namespace std;
int turn = 1;

int main() {




    int _game;
    int b;
    int timer = 1;

    while(1) {
        map _map;
        player_position _player;
        /**/ _player.player_map_f();
        _player.show_player_position();
        while (turn != 51) {
                _game = _player.c_game();
                cout << "Game:" << _game << endl;
            if (_game == 1 || _game == 3 || _game == 4) { //stav hry
                if (_game != 3) { //ak nie sme v miestnosti s vychodom
                    if (_game == 4) {//kontrola, ci sme v miestnosti s kyselinou
                        timer++;
                    } else {
                        timer = 1;
                    }
                    cout << "Timer: " << timer << endl;
                    if (timer < 2) { //dve kola v kyselinovej miestnosti
                        if (turn % 2 == 0) {
                            _map.shuffle_rooms();
                        }
                        int btn = getch();
                        clrscr();
                        /** POHYB **/
                        if (btn == 'w') {
                            _player.go_up();
                            _player.show_player_position();
                            //_map.show_map();
                            cout << endl << endl;
                            turn++;
                        } else if (btn == 's') {
                            _player.go_down();
                            _player.show_player_position();
                            cout << endl << endl;
                            turn++;
                        } else if (btn == 'a') {
                            _player.go_left();
                            _player.show_player_position();
                            cout << endl << endl;
                            turn++;
                        } else if (btn == 'd') {
                            _player.go_right();
                            _player.show_player_position();
                            cout << endl << endl;
                            turn++;
                        } else if (btn == 'i') {     /** NAZERANIE DO MIESTNOSTÍ **/
                            _player.show_text(1);
                            _player.show_player_position();
                            cout << endl << endl;
                            turn++;
                        } else if (btn == 'k') {
                            _player.show_text(2);
                            _player.show_player_position();
                            cout << endl << endl;
                            turn++;
                        } else if (btn == 'j') {
                            _player.show_text(3);
                            _player.show_player_position();
                            cout << endl << endl;
                            turn++;
                        } else if (btn == 'l') {
                            _player.show_text(4);
                            _player.show_player_position();
                            cout << endl << endl;
                            turn++;
                        } else {
                            _player.show_player_position();
                            cout << endl << endl;
                            turn++;
                        }

                        cout << "Turn: " << turn << "/50" << endl;
                    } else {
                        cout << "Preco si neodisiel? Kyselina ta celeho rozleptala a na nasledky zranenii si umrel." << endl;
                        break;
                    }
                } else {
                    cout << "Vsade same svetlo a v miestnosti len jedny dvere. Zo zaujimavosti si ich hned otvoril." << endl << "-Slava! Konecne sa mi to podarilo! Som vonku!-" << endl;
                    break;
                }
            } else {
                cout << "Bol si usmrteny!" << endl;
                break;
            }
            if (turn == 51) {
            clrscr();
            cout << "-Co sa to deje?!-" << endl << "Pocujes otrasy vsade okolo seba. Dvere na vsetkych miestnostiach sa pomaly otvaraju a vidis v nich cervene svetlo." << endl << "-No do...-" << endl << "Vsetko spalene, neostal ani popol." << endl;
            }
        }

        cout << "Spustit novu hru? (Stlac Y pre novu hru a pre ukoncenie programu stlac inu lubovolnu klavesu.)" << endl;
        b = getch();
        if (b == 'y') {
            clrscr();
            turn = 1;
            timer = 1;
            _player.~player_position();
            _map.~map();

            continue;
        } else {
            break;
        }
    }
}


map.cpp
Spoiler: zobraziť
Kód:
#include <iostream>
#include <cstdlib>
#include <stdio.h>
#include "map.h"

using namespace std;


map::map() {
    if (first_turn == 1) {
        for (int i = 0; i < 5; i++) {
            for (int j = 0; j < 5; j++) {
                if (i == 2 && j == 2) {
                    array_map[i][j] = 99;
                }
                else if (i == 0 && j == 4) {
                    array_map[i][j] = 50;
                }
                else {
                    array_map[i][j] = random_room();
                }
            }
        }
    }
    first_turn == 0;
}

map::~map() {
    cout << "Objekt map zniceny." << endl;
}

int map::random_room() {
    return room_type = rand() % 5;
}

void map::shuffle_rooms() {
    for (int i = 0; i < 5; i++) {
        for (int j = 0; j < 5; j++) {
            if (i == 2 && j == 2) {
                array_map[i][j] = 99;
            }
            else if (i == 0 && j == 4) {
                array_map[i][j] = 50;
            }
            else {
                array_map[i][j] = random_room();
            }
        }
    }
}

int map::show_map() {
    for (int i = 0; i < 5; i++) {
        printf("\n");
        for (int j = 0; j < 5; j++) {
            printf("%d ", array_map[i][j]);
        }
    }
    return 0;
}

int map::get_array_map(int x, int y) {
    return array_map[x][y];
}


player_position.cpp
Spoiler: zobraziť
Kód:
#include <iostream>
#include <cstdlib>
#include <stdio.h>
#include "player_position.h"

using namespace std;

player_position::player_position() {
    position_x = 2;
    position_y = 2;
    game = 1;
}

player_position::~player_position() {
    position_x = 2;
    position_y = 2;
    game = 1;
    cout << "Objekt player zniceny." << endl;
}

int player_position::c_game(){
    return game;
}

void player_position::show_text() {
    if (get_array_map(position_x, position_y) == 0) {
        game = 0;
        cout << "Vkrocil si do ohnivej miestnosti a bol si spaleny na uhol!" << endl;
    }
    if (get_array_map(position_x, position_y) == 1) {
        game = 4;
        cout << "Vosiel si do dalsej miestnosti, no citis neprijemny pocit na kozi. Po chvilke zistis, ze na teba pada jemny kyselinotvorny prasok. Musis urychlene opustit tuto miestnost, inak v dalsom kole umires!" << endl;
    }
    if (get_array_map(position_x, position_y) == 2) {
        game = 1;
        cout << "Krasny je to pocit byt v tomto sialenom arealy v miestnosti, kde sa nic nedeje." << endl;
    }
    if (get_array_map(position_x, position_y) == 3) {
        game = 0;
        cout << "Ty blazon, preco si vkrocil do miestnosti plnej vody, ked nevies plavat?" << endl;
    }
    if (get_array_map(position_x, position_y) == 4) {
        game = 0;
        cout << "Elektricke vyboje nikdy nie su prijemne. A takto silne uz vonkoncom nie. Bohuzial si dostal zasah silnym elektrickym vybojom a okamzize si umrel." << endl;
    }
    if (get_array_map(position_x, position_y) == 50) {
        game = 3;
        cout << "Cesta von?" << endl;
    }
    if (get_array_map(position_x, position_y) == 99) {
        game = 1;
        cout << "Zase som v strede! Tato cesta bude nekonecna..." << endl;
    }
}

void player_position::show_text(int text_type) { //ukážka polymorfizmu
    if (text_type == 1) { //UP
        if (look_up() == 0) {
            cout << "Fuu, to je horko. (Vsade len ohen.) Vojst do tejto miestnosti by bola okamzita smrt." << endl;
        }
        if (look_up() == 1) {
            cout << "Hmm, je toto prazdna miestnost?" << endl;
        }
        if (look_up() == 2) {
            cout << "Hmm, je toto prazdna miestnost?" << endl;
        }
        if (look_up() == 3) {
            cout << "Voda, vsade voda! Preco som sa len nenaucil plavat." << endl;
        }
        if (look_up() == 4) {
            cout << "Bzzzzz, pozor! Elektrika. Takto silny vyboj by zabil aj slona!" << endl;
        }
        if (look_up() == 50) {
            cout << "Co to je? Prazdna miestnost, silne svetlo, jedny dvere. Dufam, ze to je cesta von!" << endl;
        }
        if (look_up() == 99) {
            cout << "Jee, spominam si. V tejto miestnosti som sa prebudil!" << endl;
        }
    }
    if (text_type == 2) { //DOWN
        if (look_down() == 0) {
            cout << "Hori ohnik hori... Sem zarucene vojst nechcem." << endl;
        }
        if (look_down() == 1) {
            cout << "Hmm, je toto prazdna miestnost?" << endl;
        }
        if (look_down() == 2) {
            cout << "Hmm, je toto prazdna miestnost?" << endl;
        }
        if (look_down() == 3) {
            cout << "Zblnk. Neviem plavat a tato miestnost je tak plna vody..." << endl;
        }
        if (look_down() == 4) {
            cout << "Otvoril si dvere do dalsej miestnosti a vsade okolo slahaju blesky a v rychlosti ich zavries zase spat. Uff, to bola tesnotka. Vojst dnu je smrt!" << endl;
        }
        if (look_down() == 50) {
            cout << "Otvoril si dvere, opatrne si nazrel a vo vnutri si zbadal jedny dvere s napisom EXIT! Cesta von!" << endl;
        }
        if (look_down() == 99) {
            cout << "Moje rozbite hodinky. Tie som nechal v miestnosti, kde som sa prebudil." << endl;
        }
    }
    if (text_type == 3) { //LEFT
        if (look_left() == 0) {
            cout << "Fuu, to je horko. (Vsade len ohen.) Vojst do tejto miestnosti by bola okamzita smrt." << endl;
        }
        if (look_left() == 1) {
            cout << "Hmm, je toto prazdna miestnost?" << endl;
        }
        if (look_left() == 2) {
            cout << "Hmm, je toto prazdna miestnost?" << endl;
        }
        if (look_left() == 3) {
            cout << "Voda, vsade voda! Preco som sa len nenaucil plavat." << endl;
        }
        if (look_left() == 4) {
            cout << "Bzzzzz, pozor! Elektrika. Takto silny vyboj by zabil aj slona!" << endl;
        }
        if (look_left() == 50) {
            cout << "Co to je? Prazdna miestnost, silne svetlo, jedny dvere. Dufam, ze to je cesta von!" << endl;
        }
        if (look_left() == 99) {
            cout << "Jee, spominam si. V tejto miestnosti som sa prebudil!" << endl;
        }
    }
    if (text_type == 4) { //RIGHT
        if (look_down() == 0) {
            cout << "Hori ohnik hori... Sem zarucene vojst nechcem." << endl;
        }
        if (look_down() == 1) {
            cout << "Hmm, je toto prazdna miestnost?" << endl;
        }
        if (look_down() == 2) {
            cout << "Hmm, je toto prazdna miestnost?" << endl;
        }
        if (look_down() == 3) {
            cout << "Zblnk. Neviem plavat a tato miestnost je tak plna vody..." << endl;
        }
        if (look_down() == 4) {
            cout << "Otvoril si dvere do dalsej miestnosti a vsade okolo slahaju blesky a v rychlosti ich zavries zase spat. Uff, to bola tesnotka. Vojst dnu je smrt!" << endl;
        }
        if (look_down() == 50) {
            cout << "Otvoril si dvere, opatrne si nazrel a vo vnutri si zbadal jedny dvere s napisom EXIT! Cesta von!" << endl;
        }
        if (look_down() == 99) {
            cout << "Moje rozbite hodinky. Tie som nechal v miestnosti, kde som sa prebudil." << endl;
        }
    }
}

void player_position::go_up() {
    if (position_x >= 0 && position_x <= 5) {
        p_p_x = position_x; p_p_y = position_y;
        position_x = position_x - 1;
        set_player_position(p_p_x, p_p_y);
        cout << "POSITION x: " << position_x << endl << "POSITION y: " << position_y << endl;
        show_text();
    } else {
        cout << "Davaj si vacsi pozor! Skoro si padol do prazdna!" << endl;
    }
}

void player_position::go_down() {
    if (position_x >= 0 && position_x <= 5) {
        p_p_x = position_x; p_p_y = position_y;
        position_x = position_x + 1;
        set_player_position(p_p_x, p_p_y);
        cout << "POSITION x: " << position_x << endl << "POSITION y: " << position_y << endl;
        show_text();
    } else {
        cout << "Davaj si vacsi pozor! Skoro si padol do prazdna!" << endl;
    }
}

void player_position::go_left() {
    if (position_y >= 0 && position_y <= 5) {
        p_p_x = position_x; p_p_y = position_y;
        position_y = position_y - 1;
        set_player_position(p_p_x, p_p_y);
        cout << "POSITION x: " << position_x << endl << "POSITION y: " << position_y << endl;
        show_text();
    } else {
        cout << "Davaj si vacsi pozor! Skoro si padol do prazdna!" << endl;
    }
}

void player_position::go_right() {
    if (position_y >= 0 && position_y <= 5) {
        p_p_x = position_x; p_p_y = position_y;
        position_y = position_y + 1;
        set_player_position(p_p_x, p_p_y);
        cout << "POSITION x: " << position_x << endl << "POSITION y: " << position_y << endl;
        show_text();
    } else {
        cout << "Davaj si vacsi pozor! Skoro si padol do prazdna!" << endl;
    }
}

int player_position::look_up() {
    return get_array_map(position_x-1, position_y);
}

int player_position::look_down() {
    return get_array_map(position_x+1, position_y);
}

int player_position::look_left() {
    return get_array_map(position_x, position_y-1);
}

int player_position::look_right() {
    return get_array_map(position_x, position_y+1);
}

void player_position::player_map_f() {
    for (int i = 0; i < 5; i++) {
        for (int j = 0; j < 5; j++) {
            player_map[i][j] = '#';
        }
    }
    player_map[2][2] = 'X';
}

void player_position::set_player_position(int previous_p_x, int previous_p_y) {
    player_map[position_x][position_y] = 'X';
    player_map[previous_p_x][previous_p_y] = '#';
}

void player_position::show_player_position() {
    for (int i = 0; i < 5; i++) {
        printf("\n");
        for (int j = 0; j < 5; j++) {
            printf("%c ", player_map[i][j]);
        }
    }
}


Offline

Užívateľ
Užívateľ
Môj prvý OOP program v C++ - Problém

Registrovaný: 27.06.09
Prihlásený: 04.03.23
Príspevky: 332
Témy: 3 | 3
Bydlisko: Košice - ok...
NapísalOffline : 22.05.2016 23:41 | Môj prvý OOP program v C++ - Problém

preco tam mas stale map? :D


_________________
GitHub: mfocko | mfocko.xyz
OSs: archLinux + fedora (+ Windows 10 Pro Insider Preview, only if needed)
Server: archLinux [nginx + Docker (GitLab) + SSH/SFTP + local mirror (FTP/rsync - archLinux, Fedora) + samba + transmission]
Offline

Užívateľ
Užívateľ
Môj prvý OOP program v C++ - Problém

Registrovaný: 07.01.14
Prihlásený: 29.12.22
Príspevky: 41
Témy: 10 | 10
Napísal autor témyOffline : 22.05.2016 23:45 | Môj prvý OOP program v C++ - Problém

To som si neskoro pozrel, pardon. Už som to upravil. A ďakujem už to ide! :) Už len miestnosť, ktorá ma má zabiť neskôr ma zabije hneď. Idem hľadať chybu. Keby niečo, ozvem sa. Si božský človek! :D


Offline

Užívateľ
Užívateľ
Môj prvý OOP program v C++ - Problém

Registrovaný: 27.06.09
Prihlásený: 04.03.23
Príspevky: 332
Témy: 3 | 3
Bydlisko: Košice - ok...
NapísalOffline : 23.05.2016 11:57 | Môj prvý OOP program v C++ - Problém

inak neviem ako na windowse, ale mne na linuxe pri getchar() berie aj koniec riadku '\n' ako znak... nemáš s tým problém? :D treba buffer vyčistiť:
Kód:
while (getchar() != '\n');

//
Kód:
if (timer < 3) {}

na dve kola v kyselinovej miestnosti


_________________
GitHub: mfocko | mfocko.xyz
OSs: archLinux + fedora (+ Windows 10 Pro Insider Preview, only if needed)
Server: archLinux [nginx + Docker (GitLab) + SSH/SFTP + local mirror (FTP/rsync - archLinux, Fedora) + samba + transmission]
Offline

Užívateľ
Užívateľ
Môj prvý OOP program v C++ - Problém

Registrovaný: 07.01.14
Prihlásený: 29.12.22
Príspevky: 41
Témy: 10 | 10
Napísal autor témyOffline : 23.05.2016 12:39 | Môj prvý OOP program v C++ - Problém

Noo getchar() čaká na potvrdenie, ale getch() čaká len na znak. Nemám s tým problém veru. Funkciu máš definovanú v <conio.h>. :)


Offline

Užívateľ
Užívateľ
Môj prvý OOP program v C++ - Problém

Registrovaný: 27.06.09
Prihlásený: 04.03.23
Príspevky: 332
Témy: 3 | 3
Bydlisko: Košice - ok...
NapísalOffline : 23.05.2016 12:40 | Môj prvý OOP program v C++ - Problém

na linuxe asi nie :D


_________________
GitHub: mfocko | mfocko.xyz
OSs: archLinux + fedora (+ Windows 10 Pro Insider Preview, only if needed)
Server: archLinux [nginx + Docker (GitLab) + SSH/SFTP + local mirror (FTP/rsync - archLinux, Fedora) + samba + transmission]
Offline

Užívateľ
Užívateľ
Môj prvý OOP program v C++ - Problém

Registrovaný: 07.01.14
Prihlásený: 29.12.22
Príspevky: 41
Témy: 10 | 10
Napísal autor témyOffline : 23.05.2016 13:17 | Môj prvý OOP program v C++ - Problém

Skús si pozrieť toto. :)
http://stackoverflow.com/questions/7469139/what-is-equivalent-to-getch-getche-in-linux


 [ Príspevkov: 13 ] 


Môj prvý OOP program v C++ - Problém



Podobné témy

 Témy  Odpovede  Zobrazenia  Posledný príspevok 
V tomto fóre nie sú ďalšie neprečítané témy.

[Triangle] - Môj prvý Program

v Delphi, Visual Basic

1

786

03.06.2011 17:52

tomas0620

V tomto fóre nie sú ďalšie neprečítané témy.

Moj prvý design

[ Choď na stránku:Choď na stránku: 1, 2 ]

v Webdesign

37

3684

22.01.2014 7:26

don jebot

V tomto fóre nie sú ďalšie neprečítané témy.

Moj prvý casemod

v Modifikácie, návody a projekty

5

1321

11.02.2007 21:50

Shark NX

V tomto fóre nie sú ďalšie neprečítané témy.

Moj prvy web

v Webdesign

28

1736

26.04.2008 21:08

lio

V tomto fóre nie sú ďalšie neprečítané témy.

Môj prvý mix

v Krčma

16

1450

18.02.2012 17:46

Qpkqkma

V tomto fóre nie sú ďalšie neprečítané témy.

Môj prvý Notebook

v Notebooky a netbooky

17

1603

01.12.2008 23:33

Skladateľ

V tomto fóre nie sú ďalšie neprečítané témy.

Môj prvý CASE

v Modifikácie, návody a projekty

1

814

17.11.2010 10:23

shiro

V tomto fóre nie sú ďalšie neprečítané témy.

Môj prvý mod

[ Choď na stránku:Choď na stránku: 1, 2 ]

v Modifikácie, návody a projekty

44

3056

17.01.2013 22:48

AdamiX

V tomto fóre nie sú ďalšie neprečítané témy.

Moj prvy PC

v PC zostavy

25

1089

03.06.2008 22:29

luboxxx

V tomto fóre nie sú ďalšie neprečítané témy.

Môj prvý PC

v PC zostavy

2

381

22.02.2018 21:49

EXIREXT

V tomto fóre nie sú ďalšie neprečítané témy.

Moj prvy herny pc

v PC zostavy

15

746

12.12.2015 13:53

vaci

V tomto fóre nie sú ďalšie neprečítané témy.

Moj prvy amatersky web

v Webdesign

25

1939

26.11.2006 19:45

Apparel

V tomto fóre nie sú ďalšie neprečítané témy.

Môj prvý redakčný systém

v Webdesign

4

898

06.05.2010 22:03

M4jco

V tomto fóre nie sú ďalšie neprečítané témy.

Prvy moj update Biosu

v AMD čipové sady

4

327

06.05.2023 23:08

Cecekhunter

V tomto fóre nie sú ďalšie neprečítané témy.

Moj prvy PC 700E +- bez LCD

v PC zostavy

8

720

19.12.2010 13:14

Poko

V tomto fóre nie sú ďalšie neprečítané témy.

Môj PRVÝ casemod M@x.sK .. (rozpracovaný)

v Modifikácie, návody a projekty

28

4125

23.09.2008 13:23

lionkaufland



© 2005 - 2024 PCforum, edited by JanoF