Obsah fóra
PravidláRegistrovaťPrihlásenie




Odpovedať na tému [ 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
Príspevok NapísalOffline : 22.05.2016 16:27

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
Bydlisko: Košice - ok...
Príspevok NapísalOffline : 22.05.2016 22:54

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
Príspevok Napísal autor témyOffline : 22.05.2016 23:29

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
Bydlisko: Košice - ok...
Príspevok NapísalOffline : 22.05.2016 23:30

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
Príspevok Napísal autor témyOffline : 22.05.2016 23:31

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
Bydlisko: Košice - ok...
Príspevok NapísalOffline : 22.05.2016 23:33

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
Príspevok Napísal autor témyOffline : 22.05.2016 23:39

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
Bydlisko: Košice - ok...
Príspevok NapísalOffline : 22.05.2016 23:41

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
Príspevok Napísal autor témyOffline : 22.05.2016 23:45

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
Bydlisko: Košice - ok...
Príspevok NapísalOffline : 23.05.2016 11:57

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
Príspevok Napísal autor témyOffline : 23.05.2016 12:39

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
Bydlisko: Košice - ok...
Príspevok NapísalOffline : 23.05.2016 12:40

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
Príspevok Napísal autor témyOffline : 23.05.2016 13:17

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


Odpovedať na tému [ Príspevkov: 13 ] 


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

756

03.06.2011 17:52

tomas0620 Zobrazenie posledných príspevkov

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

v PC zostavy

25

1056

03.06.2008 22:29

luboxxx Zobrazenie posledných príspevkov

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

3615

22.01.2014 7:26

don jebot Zobrazenie posledných príspevkov

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

v Modifikácie, návody a projekty

5

1287

11.02.2007 21:50

Shark NX Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. Môj prvý PC

v PC zostavy

2

339

22.02.2018 21:49

EXIREXT Zobrazenie posledných príspevkov

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

v Webdesign

28

1673

26.04.2008 21:08

lio Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. Môj prvý mix

v Krčma

16

1404

18.02.2012 17:46

Qpkqkma Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. Môj prvý Notebook

v Notebooky a netbooky

17

1566

01.12.2008 23:33

Skladateľ Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. Môj prvý CASE

v Modifikácie, návody a projekty

1

786

17.11.2010 10:23

shiro Zobrazenie posledných príspevkov

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

2977

17.01.2013 22:48

AdamiX Zobrazenie posledných príspevkov

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

v Webdesign

25

1906

26.11.2006 19:45

Apparel Zobrazenie posledných príspevkov

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

v PC zostavy

15

677

12.12.2015 13:53

vaci Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. Môj prvý redakčný systém

v Webdesign

4

866

06.05.2010 22:03

M4jco Zobrazenie posledných príspevkov

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

v AMD čipové sady

4

272

06.05.2023 23:08

Cecekhunter Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. Moj prvy PC 700E +- bez LCD

v PC zostavy

8

665

19.12.2010 13:14

Poko Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. OOP C++ a par errorov

v Assembler, C, C++, Pascal, Java

4

795

30.05.2008 12:31

Axio Zobrazenie posledných príspevkov


Nemôžete zakladať nové témy v tomto fóre
Nemôžete odpovedať na témy v tomto fóre
Nemôžete upravovať svoje príspevky v tomto fóre
Nemôžete mazať svoje príspevky v tomto fóre

Skočiť na:  

Powered by phpBB Jarvis © 2005 - 2024 PCforum, webhosting by WebSupport, secured by GeoTrust, edited by JanoF
Ako väčšina webových stránok aj my používame cookies. Zotrvaním na webovej stránke súhlasíte, že ich môžeme používať.
Všeobecné podmienky, spracovanie osobných údajov a pravidlá fóra