Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

[C++] Błąd podczas wyświetlania tekstu w konsoli

Ostatnio zmodyfikowano 2010-07-05 21:21
Autor Wiadomość
maciejo
Temat założony przez niniejszego użytkownika
[C++] Błąd podczas wyświetlania tekstu w konsoli
» 2010-07-04 15:48:09
Mam problem , otóż napisałem gierkę , właściwie połowę i kiedy dodałem napis do wyświetlenia nic się nie dzieje (po uruchomieniu), tzn. wszystko co było przedtem działa dobrze , ale ten napis się nie wyświetla daję kod :
C/C++
#include <cstdlib>
#include <iostream>
#include <ctime>
#include <conio.h>
#include <stdlib.h>
#include <windows.h>
#include <string>

using namespace std;

int wybor;
string imie;
int zrobic;
int klasa;
int heromaxhp = 70;
int heronowhp;
int heromaxmp = 70;
int heronowmp;
int herofizatk;
int heromagatk;
int opmaxhp = 70;
int opnowhp;
int opmaxmp = 70;
int opnowmp;
int opfizatk;
int opmagatk;

int random( int nMin, int nMax ) { return rand() % nMax + nMin; }

int main( int argc, char * argv[] )
{
    SetConsoleTextAttribute( GetStdHandle( STD_OUTPUT_HANDLE ), 11 );
    cout << "\n\n\n\t\t\tFight 0.01 by maciejo54" << endl; //Intro
    cout << "\n\n\t\tNacisnij dowolny klawisz aby kontynuowac";
    getch();
    system( "cls" );
    SetConsoleTextAttribute( GetStdHandle( STD_OUTPUT_HANDLE ), 15 );
    cout << "-----Menu-----" << endl; //menu
    cout << "1.Nowa gra" << endl;
    cout << "2.Wyjscie" << endl;
    cin >> wybor;
    switch( wybor )
    {
    case 1: system( "cls" ); //Nowa gra
        cout << "Wpisz swoje imie" << endl;
        cin >> imie;
        system( "cls" );
        cout << "Witaj " << imie << "!" << endl;
        cout << "Co chcesz teraz zrobic?" << endl;
        cout << "1.Wybrac klase\n2.Wyjsc" << endl;
        cin >> zrobic;
        switch( zrobic )
        {
        case 1: cout << "Wolisz maga(1) , czy rycerza(2)?" << endl; //wybór klasy
            cin >> klasa; break;
            switch( klasa )
            {
            case 1: herofizatk = 6; //0-6
                heromagatk = 30; //15-30
                system( "cls" );
                cout << "Jestes magiem" << endl; //tego nie wyświetla
                break;
            case 2: herofizatk = 30; //15-30
                heromagatk = 6; //0-6
                system( "cls" );
                cout << "Jestes rycerzem" << endl; //tego tez nie
                break;
                default: cout << "Nieznana opcja" << endl; break;
            }
            cout << "Walke czas zaczac" << endl;
        case 2: EXIT_SUCCESS; break;
        default: cout << "Nieznana opcja" << endl; break;
        }
        break;
    case 2: EXIT_SUCCESS; break;
    }
    system( "PAUSE" );
    return EXIT_SUCCESS;
}
Proszę o szybką pomoc
P-19449
dmx81
» 2010-07-04 16:04:50
szybka odpowiedz - po pierwszym case - usunalem break'a i dziala - break ci przerywal wykonanie dalszych instrukcji - pomoglo? bo mi tak i napis sie wyswietla
P-19450
dmx81
» 2010-07-04 16:09:09
ps1. po szybkiej odpowiedzi wolniejsza podpowiedz :) tego breaka umiesc na koncu pierwszego CASE1, mam nadzieje ze sam sie domysliles, ale wole napisac, zeby odpowiedz byla kompletna

ps2. wybralem rycerza (dla sprobowania tez maga).... ale co dalej, gdzie ci przeciwnicy:D:D:D, gdzie ta piekna muzyczka w tle? ;P


PS3. !!!!   zanim umiescisz kod, napisz przed nim cos takiego :
[c o d e  s r c = " C + + "] tutaj wklejasz kod [ /c o d e ]  no i usuwasz po jednej spacji - bo inaczej by sie podpowiedz nie wyswietlila....

P-19451
maciejo
Temat założony przez niniejszego użytkownika
» 2010-07-05 13:23:12
Dzięki za odpowiedz , jakos musialem przeoczyc tego breaka
PS. Jak skoncze to tu wstawie :D
PS2. gre oczywiscie
P-19486
maciejo
Temat założony przez niniejszego użytkownika
» 2010-07-05 16:44:44
P-19502
maciejo
Temat założony przez niniejszego użytkownika
» 2010-07-05 16:45:28
P-19503
maciejo
Temat założony przez niniejszego użytkownika
» 2010-07-05 16:46:41
Noooooooo... nie znowu mam problem : zakladajac drugi temat myslalem ze sie go jakos rozwiaze , ale jednak nie znalazlem odpowiedzi , wiec czekam na nia tutaj , chodzi mi o losowanie zadanych obrazen po tych napisach typu "wybrales atak mieczem"
daje kod:
C/C++
#include <cstdlib>
#include <iostream>
#include <ctime>
#include <conio.h>
#include <stdlib.h>
#include <windows.h>
#include <string>

using namespace std;

int wybor;
string imie;
int zrobic;
int klasa;
int heromaxhp = 70;
int heronowhp = 70;
int heromaxmp = 70;
int heronowmp = 70;
int herofizatk;
int heromagatk;
int opmaxhp = 70;
int opnowhp = 70;
int opmaxmp = 70;
int opnowmp = 70;
int opfizatk;
int opmagatk;
int lokacja;
string op;
int atak;
int dostales;
int zabrales;

int random( int nMin, int nMax ) { return rand() % nMax + nMin; }

int walka()
{
    do
    {
        srand( static_cast < unsigned int >( time( NULL ) ) );
        cout << imie << "\t\t\t\t" << op << endl;
        cout << "HP\t\t\t\tHP" << endl;
        cout << heronowhp << "/" << heromaxhp << "\t\t\t\t" << opnowhp << "/" << opmaxhp << endl;
        cout << "MP\t\t\t\tMP" << endl;
        cout << heronowmp << "/" << heromaxmp << "\t\t\t\t" << opnowmp << "/" << opmaxmp << endl;
        cout << "Max. obrazenia fizyczne\t\tMax. obrazenia fizyczne" << endl;
        cout << herofizatk << "\t\t\t\t" << opfizatk << endl;
        cout << "Max. obrazenia magiczne\t\tMax. obrazenia magiczne" << endl;
        cout << heromagatk << "\t\t\t\t" << opmagatk << endl << endl << endl;
        cout << "Twoj ruch" << endl;
        cout << "Co robic?" << endl;
        cout << "1.Atak mieczem" << endl;
        cout << "2.Atak magiczny" << endl;
        cin >> atak;
        switch( atak )
        {
        case 1: cout << "Wybrales atak mieczem" << endl;
            cout << "Zabrales przeciwnikowi " << random( 0, herofizatk ) << "HP." << endl;
            break;
        case 2: cout << "Wybrales atak magiczny" << endl;
            cout << "Zabrales przeciwnikowi " << random( 0, heromagatk ) << "HP." << endl;
            break;
            default: cout << "Nieznana opcja" << endl;
            break;
        }
        cout << "Ruch komputera" << endl;
        int akcja = rand() % 2 + 1;
        if( akcja == 1 )
        {
            cout << "Komputer wybral atak mieczem" << endl;
            cout << "Komputer zabral ci " << random( 0, opfizatk ) << "HP." << endl;
        }
        else
        {
            cout << "Komputer wybral atak magiczny" << endl;
            cout << "Komputer zabral ci " << random( 0, opmagatk ) << "HP." << endl;
        }
        cout << "Nacisnij cos zeby kontynuowac" << endl;
        getch();
        system( "cls" );
    } while( heronowhp > 0 || opnowhp > 0 );
   
}

int powyborze()
{
    cout << "Wybierz miejsce walki :" << endl;
    cout << "1.Las" << endl;
    cout << "2.Miasto" << endl;
    cin >> lokacja;
    switch( lokacja )
    {
    case 1: system( "cls" );
        cout << "Wybrales las" << endl;
        cout << "Twoim przeciwnikiem bedzie bandyta" << endl;
        op = "Bandyta";
        opfizatk = 30; //0-30
        opmagatk = 6; //0-6
        walka();
        break;
    case 2: system( "cls" );
        cout << "Wybrales miasto" << endl;
        cout << "Twoim przeciwnikiem bedzie czarodziej" << endl;
        op = "Czarodziej";
        opfizatk = 6; //0-6
        opmagatk = 30; //0-30
        walka();
        break;
        default: cout << "Nieznana opcja" << endl;
    }
}

int main( int argc, char * argv[] )
{
    SetConsoleTextAttribute( GetStdHandle( STD_OUTPUT_HANDLE ), 11 );
    cout << "\n\n\n\t\t\tFight 0.01 by maciejo54" << endl; //Intro
    cout << "\n\n\t\tNacisnij dowolny klawisz aby kontynuowac";
    getch();
    system( "cls" );
    SetConsoleTextAttribute( GetStdHandle( STD_OUTPUT_HANDLE ), 15 );
    cout << "-----Menu-----" << endl; //menu
    cout << "1.Nowa gra" << endl;
    cout << "2.Wyjscie" << endl;
    cin >> wybor;
    switch( wybor )
    {
    case 1: system( "cls" ); //Nowa gra
        cout << "Wpisz swoje imie" << endl;
        cin >> imie;
        system( "cls" );
        cout << "Witaj " << imie << "!" << endl;
        cout << "Co chcesz teraz zrobic?" << endl;
        cout << "1.Wybrac klase\n2.Wyjsc" << endl;
        cin >> zrobic;
        switch( zrobic )
        {
        case 1: cout << "Wolisz maga(1) , czy rycerza(2)?" << endl; //wybór klasy
            cin >> klasa;
            switch( klasa )
            {
            case 1: herofizatk = 6; //0-6
                heromagatk = 30; //0-30
                system( "cls" );
                cout << "Jestes magiem" << endl; //tego nie wyświetla
                break;
            case 2: herofizatk = 30; //0-30
                heromagatk = 6; //0-6
                system( "cls" );
                cout << "Jestes rycerzem" << endl; //tego tez nie
                break;
                default: cout << "Nieznana opcja" << endl; break;
            }
            powyborze();
            break;
        case 2: EXIT_SUCCESS; break;
        default: cout << "Nieznana opcja" << endl; break;
        }
        break;
    case 2: EXIT_SUCCESS; break;
    default: cout << "Nieznana opcja" << endl;
    }
    system( "PAUSE" );
    return EXIT_SUCCESS;
}
PS. Przepraszam za kilka postow pod rzad , ale cos mi sie z kompem stalo i zamiast edytowac zrobil nowa wiadomosc
P-19504
ison
» 2010-07-05 17:45:18
przecież w poprzednim temacie było już wszystko wytłumaczone...

napisałeś sobie funkcję
C/C++
int random( int nMin, int nMax ) { return rand() % nMax + nMin; }
która jest zła... przykładowo nMin=3, nMax=5 czyli chcesz wylosować liczbę z przedziału 3;5
funkcja rand() zwróci 104 co w wyniku dzielenia modulo przez nMax czyli 5 da liczbę 4, twój program doda do niej jeszcze nMin czyli 3 i zwróci w wyniku 7 co jest błędnym wynikiem

w poprzednim temacie dostałeś gotowy kod od pana Piotra
C/C++
int wylosowano = rand() %( losujMax - losujMin + 1 ) + losujMin;

wstaw go sobie tylko do funkcji i po problemie
P-19509
« 1 » 2 3
  Strona 1 z 3 Następna strona