Ergebnis 1 bis 8 von 8

Hybrid-Darstellung

  1. #1
    Trojaner
    Registriert seit
    11.11.2008
    Beiträge
    99

    Ausrufezeichen C++ PlaySound in Consolen-Apllication ???

    Hallo ich hab mich lange nicht mehr gemeldet aber ich hab mal eine Frage wo ich einfach nicht mehr weiter komme.
    Ich arbeite gerade an einem Projekt...So ein Dungeon_Game ....
    Naja hab jedenfalls schon:
    monster.h,monster.cpp,soldat.h,soldat.cpp,main.cpp .
    Naja es gibt zwar noch so kleinere Probleme bei der Attack Funnktion,
    aber das schaff ich auch alleine.
    Wo ich jedoch am verzweifeln bin, ist der Sound.
    Ich hab mich mal schlau gemacht.....
    Es soll ja zwei möglichkeiten geben die für mich in Frage kommen...
    1. #include <windows.h>
    PlaySound(TEXT("music.wav"), NULL, SND_FILENAME);
    2. #include <mmsystem>
    sndPlaySound(""music.wav,NULL,SND_ASYNC)

    Ich bin auch schon ganz nah drann das zu schaffen jedoch gibt der Compiler jedes mal den einen Error aus,auch wenn ich das in einer API-Application ausführe:

    Compiler Error:
    [Linker error] undefined reference to `PlaySoundA@12'
    ld returned 1 exit status
    C:\Dokumente und Einstellungen\JOKO\Desktop\The Game\Makefile.win [Build Error] ["The] Error 1

    Ich werde daraus einfach nicht schlau...und in meinem Buch:
    C++ von A bis Z von Jürgen Wolf(sehr empfehlens wert)
    steht im Kapitel der Objektorientierten Programmierung auch nichts drüber.
    Danke schonmal für das Lesen des riesen Textes und im vorraus für alle Antworten(hoffe ich bekomme welche)

  2. #2
    Anfänger
    Registriert seit
    16.09.2008
    Beiträge
    22

    Standard

    Weiß jetzt auch nicht recht allerdings währe es nicht schlecht wenn du mal deinen Compiler und Code ausschnitt posten würdest.Auserdem kannst du auch "mciSendString" nutzen wenn das dich weiter bringt.:o

  3. #3
    Trojaner
    Registriert seit
    11.11.2008
    Beiträge
    99

    Standard

    Also ich hab den Dev C++ Compiler und
    Codeausschnitte...welche sollte ich denn da Posten?
    Hab übrigends auch noch eine "common_header.h" Datei...
    da hab ich halt alle Headers includiert die ich brauche

    #include "common_header.h"
    #include "monster.h"
    #include "soldat.h"
    using namespace std;

    int main(){

    int SoldatenWahl = 0;

    Sleep(3000);
    //PlaySound(TEXT("music.wav"), NULL, SND_FILENAME);
    do{
    system("CLS");
    cout<<"\t\t -------------The Game-------------"<<endl<<endl;

    cout<<"\t\t Wähle deinen Soldaten aus:"<<endl<<endl;

    cout<<"\t\t 1. \t\tJohn"<<endl;
    cout<<"\t\t 2. \t\tTommy"<<endl;
    cout<<"\t\t 3. \t\tJason"<<endl;
    cout<<"\t\t 4. \t\tJack"<<endl;
    cout<<"\t\t 5. \t\tSpiel Ende"<<endl;
    cin>>SoldatenWahl;
    if(SoldatenWahl > 4 && SoldatenWahl != 5 || SoldatenWahl <= 0){
    cout<<"Fehler bei der Eingabe...Bitte versuche es erneut...";
    getch();
    }

    if(SoldatenWahl == 5){
    exit (1);
    }

    switch(SoldatenWahl){
    case 1:
    Soldat John();
    cout<<"Du hast John gewählt"<<endl;
    break;
    case 2:
    Soldat Tommy();
    cout<<"Du hast Tommy gewählt"<<endl;
    break;
    case 3:
    Soldat Jason();
    cout<<"Du hast Jason gewählt"<<endl;
    break;
    case 4:
    Soldat Jack();
    cout<<"Du hast Jack gewählt"<<endl;
    break;
    }//Ende von switch



    getch();
    }while(SoldatenWahl = 0);




    return 0;
    }

    Das währe z.B meine main.cpp

  4. #4
    Der mit Anatidaephobie Avatar von blackberry
    Registriert seit
    11.07.2008
    Beiträge
    2.350

    Standard

    @nestee
    Der Sourcecode ist absolut unerheblich, die Fehlermeldung sagt bereits alles.
    Beim Compiler (bzw. IDE) hast du Recht, aber anhand der Fehlermeldung kann man die IDE als Dev-C++ und den Compiler als MinGW32 identifizieren.

    @joker
    Entschuldigung, dass ich erst jetzt etwas dazu sage, aber als ich es vorhin versucht habe war die Seite zu langsam um etwas abschicken zu können.

    Zitat Zitat von http://msdn.microsoft.com/en-us/library/ms712879.aspx
    Library: Use Winmm.lib.
    Bei Dev-C++:
    Projekt -> Projekt Optionen -> Parameter -> Bibliothek Hinzufügen

    Winmm.lib sollte sich in C:\Dev-Cpp\lib befinden.


    mfG. BlackBerry

    PDFTT cr3w a.E. — ReiDC0Re, lindor, Sera, berry
    please do feed the trolls crew and elk
    Ehrenwerte Mitglieder im Ruhestand: OpCodez, SFX.
    "Was sich blackberry gerade denkt" — Vorsicht! Frei laufender Wahnsinn!
    Zitat von fuckinghot19: "PS: Blackberry ist auf FH der Trollkönig ^^."
    An dieser Stelle danke ich all meinen Fans und Hatern gleichermaßen ^.^

  5. #5
    Trojaner
    Registriert seit
    11.11.2008
    Beiträge
    99

    Standard

    @ BlackBerry du brauchst dich garnicht zu entschuldigen...
    Mir ist was ganzschön peinliches passiert:o
    Ich war ebenfalls auf der Seite die du mir gepostet hast, bevor ich das hier reingepostet habe und hab net gesehen, dass unten steht welche libary zum Projekt hinzuzufügen ist.
    Also muss ich dir erstmal mein größten dank aussprechen für die Hilfe mit Winmm.lib,denn es klappt wunderbar.
    Mein zweiter dank gebührt dir ebenfalls weil ich jetzt mehr über die Seite weiß die wirklich hilfreich ist...
    Hab aber doch noch eine Frage....
    Weißt du wie ich den Sound im hintergrund abspielen lassen kann?

  6. #6
    Der mit Anatidaephobie Avatar von blackberry
    Registriert seit
    11.07.2008
    Beiträge
    2.350

    Standard

    Das sollte mit Threads möglich sein.
    Um einen simplen Thread zu erstellen benutzt man die Funktion CreateThread.
    Das ganze könnte so z.B. aussehen:

    Code:
    #include <windows.h>
    
    
    DWORD WINAPI PlaySoundThread(void *file)
    {
        PlaySound((const char *) file, NULL, SND_FILENAME);
        return 0;
    }
    
    int main(void)
    {
        /* [...] */
        CreateThread(0, 0, PlaySoundThread, "music.wav", 0, NULL);
        /* [...] */
        return 0;
    }
    (ich bin gerade mit Ubuntu online und konnte den Code also nicht testen)


    mfG. BlackBerry

    PDFTT cr3w a.E. — ReiDC0Re, lindor, Sera, berry
    please do feed the trolls crew and elk
    Ehrenwerte Mitglieder im Ruhestand: OpCodez, SFX.
    "Was sich blackberry gerade denkt" — Vorsicht! Frei laufender Wahnsinn!
    Zitat von fuckinghot19: "PS: Blackberry ist auf FH der Trollkönig ^^."
    An dieser Stelle danke ich all meinen Fans und Hatern gleichermaßen ^.^

  7. #7
    Trojaner
    Registriert seit
    11.11.2008
    Beiträge
    99

    Standard

    Code:
    #include "common_header.h"
    #include "monster.h"
    #include "soldat.h"
    using namespace std;
    
    DWORD WINAPI PlaySoundThread(void *file)
    {
        PlaySound((const char *) file, NULL, SND_FILENAME);
        return 0;
    }
    
    
    
    int main(){
        
        int AgentenWahl = 0;
    
        
        
        
        Monster Org(100, 100, 100);
        
        Sleep(3000);
        
    
    
        CreateThread(0, 0, PlaySoundThread, "music.wav", 0,);
    
        do{
        system("CLS");
        cout<<"\t\t     -------------The Game-------------"<<endl<<endl;
        
        cout<<"\t\t     Wähle deinen Agenten aus:"<<endl<<endl;
        
        cout<<"\t\t     1.     \t\tJohn"<<endl; 
        cout<<"\t\t     2.     \t\tTommy"<<endl; 
        cout<<"\t\t     3.     \t\tJason"<<endl; 
        cout<<"\t\t     4.     \t\tJack"<<endl; 
        cout<<"\t\t     5.     \t\tSpiel Ende"<<endl;
        cin>>AgentenWahl;
        if(AgentenWahl > 4 && AgentenWahl != 5 || AgentenWahl <= 0){
                        cout<<"Fehler bei der Eingabe...Bitte versuche es erneut...";
                        getch();
                        }
        
        if(AgentenWahl == 5){
                        exit (1);
                        }
        
        switch(AgentenWahl){
        case 1:                     
              Soldat John();                     
              cout<<"Du hast John gewählt"<<endl;
        break;
        case 2:
              Soldat Tommy();                     
              cout<<"Du hast Tommy gewählt"<<endl;
        break; 
        case 3:
              Soldat Jason();                     
              cout<<"Du hast Jason gewählt"<<endl;
        break;  
        case 4:
              Soldat Jack();
              cout<<"Du hast Jack gewählt"<<endl;
        break;
        }//Ende von switch
        
        
        
        getch();
        
        cout<<"Monsters Leben:"<<Org.get_Health()<<endl;
        cout<<"Monsters Mana :"<<Org.get_Mana()<<endl;
        cout<<"Monsters Särke:"<<Org.get_Strenght()<<endl;
        
        Org.Monster_Attack();
        Org.Monster_get_hit();
        
        }while(AgentenWahl = 0);
        
        
        
        
        return 0;
    }
    Das mein Code...der Error:
    C:\Dokumente und Einstellungen\JOKO\Desktop\The Game\main.cpp In function `int main()':
    27 C:\Dokumente und Einstellungen\JOKO\Desktop\The Game\main.cpp expected primary-expression before ')' token
    C:\Dokumente und Einstellungen\JOKO\Desktop\The Game\Makefile.win [Build Error] [main.o] Error 1

    Ich hab den Parameter NULL am ende von CreateThread ewggenommen,
    da er sonst den Fehler ausgegeben hat:

    27 C:\Dokumente und Einstellungen\JOKO\Desktop\The Game\main.cpp invalid conversion from `const void*' to `void*'

    27 C:\Dokumente und Einstellungen\JOKO\Desktop\The Game\main.cpp initializing argument 4 of `void* CreateThread(_SECURITY_ATTRIBUTES*, DWORD, DWORD (*)(void*), void*, DWORD, DWORD*)'

    Was bedeutet denn das jetzt wenn der Compiler primary expression erwartet vor irgendetwas?

  8. #8
    Der mit Anatidaephobie Avatar von blackberry
    Registriert seit
    11.07.2008
    Beiträge
    2.350

    Standard

    Du hast falsch kopiert.
    expected primary-expression before ')' token
    bedeutet, dass vor dem ) noch ein Ausdruck erwartet wird.
    CreateThread(0, 0, PlaySoundThread, "music.wav", 0,);
    Das Komma leitet einen solchen Ausdruck ein, welchen du jedoch nicht angegeben hast.
    Richtig wäre:
    CreateThread(0, 0, PlaySoundThread, "music.wav", 0, NULL);

    Der nächste Fehler war ein Fehler meinerseits.
    invalid conversion from `const void*' to `void*'
    Bedeutet, dass ein Cast erwartet wird.
    Traditionell in C macht man das mit (typbezeichner) (die Klammern gehören dazu).
    Folgende Anweisung sollte funktionieren:

    CreateThread(0, 0, PlaySoundThread, (void *) "music.wav", 0, NULL);

    PDFTT cr3w a.E. — ReiDC0Re, lindor, Sera, berry
    please do feed the trolls crew and elk
    Ehrenwerte Mitglieder im Ruhestand: OpCodez, SFX.
    "Was sich blackberry gerade denkt" — Vorsicht! Frei laufender Wahnsinn!
    Zitat von fuckinghot19: "PS: Blackberry ist auf FH der Trollkönig ^^."
    An dieser Stelle danke ich all meinen Fans und Hatern gleichermaßen ^.^

Stichworte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •