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
» 2010-07-05 18:08:23
ale jak mam to wstawic do funkcji ?
Nic nie przychodzi mi do glowy
P-19512
ison
» 2010-07-05 18:20:10
podstawy C++

masz źle działającą funkcję:
C/C++
int random( int nMin, int nMax ) { return rand() % nMax + nMin; }

i działający kawałek kodu pana Piotra odpowiedzialny za losowanie liczby z danego przedziału
C/C++
int wylosowano = rand() %( losujMax - losujMin + 1 ) + losujMin;

tuż po słowie return w twojej funkcji wklejasz to co jest po znaku '=' w drugim kodzie. Zamieniasz nazwy zmiennych aby się zgadzały i otrzymujesz magiczną funkcję:
C/C++
int random( int nMin, int nMax ) { return rand() %( nMax - nMin + 1 ) + nMin; }
P-19513
maciejo
Temat założony przez niniejszego użytkownika
» 2010-07-05 19:20:52
Jeszcze jeden problem:
kawalek kodu z odejmowaniem wyglada tak :
C/C++
cout << "Wybrales atak mieczem" << endl;
opnowhp = ophp;
opnowhp = opnowhp - random( 0, herofizatk );
zabrales = ophp - opnowhp;
cout << "Zabrales przeciwnikowi " << zabrales << "HP." << endl;
kiedy to uruchamiam , to jest czarny ekran (getch , jakby bylo system("pause") to by czekalo na klawisz z komunikatem) a jak dalem na koniec main jeszcze kilka razy funkcje odpowiadajaca za walke to pisalo , ze liczba ujemna
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 herohp;
int heromaxmp = 70;
int heronowmp = 70;
int herofizatk;
int heromagatk;
int opmaxhp = 70;
int opnowhp = 70;
int ophp;
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 + 1 ) + 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;
            opnowhp = ophp;
            opnowhp = opnowhp - random( 0, herofizatk );
            zabrales = ophp - opnowhp;
            cout << "Zabrales przeciwnikowi " << zabrales << "HP." << endl;
            break;
        case 2: cout << "Wybrales atak magiczny" << endl;
            opnowhp = ophp;
            opnowhp = opnowhp - random( 0, heromagatk );
            zabrales = ophp - opnowhp;
            cout << "Zabrales przeciwnikowi " << zabrales << "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;
            heronowhp = herohp;
            heronowhp = heronowhp - random( 0, opfizatk );
            dostales = herohp - heronowhp;
            cout << "Komputer zabral ci " << dostales << "HP." << endl;
        }
        else
        {
            cout << "Komputer wybral atak magiczny" << endl;
            heronowhp = herohp;
            heronowhp = heronowhp - random( 0, opmagatk );
            dostales = herohp - heronowhp;
            cout << "Komputer zabral ci " << dostales << "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;
    }
    getch();
}
P-19515
ison
» 2010-07-05 19:29:51
teraz dopiero skompilowałem twój kod. To jest ta 'gra' którą widziałem na gamedev :D
nie wrzucaj tam projektu póki nie skończysz swojej gry chociażby w małym stopniu bo zaśmiecasz serwis

po pierwsze to zrób porządek w swoim kodzie, poczytaj o czymś takim jak programowanie obiektowe
po drugie nie każdemu się chce analizować długi mało wyraziście napisany kod


kiedy to uruchamiam , to jest czarny ekran (getch , jakby bylo system("pause") to by czekalo na klawisz z komunikatem) a jak dalem na koniec main jeszcze kilka razy funkcje odpowiadajaca za walke to pisalo , ze liczba ujemna
jaki czarny ekran? konsola z reguły jest czarna :p
o jaką liczbę ujemną ci chodzi?
jedyne co mi przychodzi na myśl to może to że funkcja getch(); nie zawsze działa na niektórych systemach. Jeśli zrozumiałem o co ci chodzi to zamiast
getch();
 daj
_getch();

P.S. do maciejo - mówi się 'jest napisane' a nie 'pisze'
P-19516
maciejo
Temat założony przez niniejszego użytkownika
» 2010-07-05 19:34:35
Co do tej liczby ujemnej daj przed getch taki napis: walka();
P-19517
ison
» 2010-07-05 19:40:13
nie wiem o który getch() ci chodzi ale to jest nie istotne, najpierw sam pomyśl nad kodem a potem dopiero zgłaszaj się tu z konkretnym problemem. To jest uciążliwe analizować tak długi kod zwłaszcza że nie opisałeś dokładnie problemu.
P-19518
maciejo
Temat założony przez niniejszego użytkownika
» 2010-07-05 19:46:14
Chodzi mi o to ze kiedy chce wykonac dzialanie :
heronowhp = heronowhp - random(0, opmagatk);
kompilator jakims cudem zyskuje z tego liczbe ujemna , a przeciez startowa wartosc zmiennych z hero wynosi 70 , a opmagatk moze wynosic max 30
P-19521
DejaVu
» 2010-07-05 19:48:15
1) udowodnij, że opmagatk: max = 30.
2) udowodnij, że funkcja random(0,30) zwraca zawsze liczbę w tym przedziale.
Jeżeli udowodnisz powyższe dwa punkty problem będziesz miał rozwiązany. Tak jak pisał poprzednik: posiedź, podłub i pomyśl :)

/edit:
Szczerze mówiąc nie dziwię się, że masz kwas:
C/C++
int herohp;
//...
heronowhp = herohp;
P-19523
1 « 2 » 3
Poprzednia strona Strona 2 z 3 Następna strona