Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

Nelrim

Frischling

  • »Nelrim« ist der Autor dieses Themas

Beiträge: 33

Beruf: Entwicklungskonstrukteur

  • Private Nachricht senden

1

04.02.2008, 14:00

Anfänger stellt mal seine ersten Fragen. (Zeitnahmen in C++)

Hallo,

ich arbeite mich derzeit durch das Buch C++ für Spieleprogrammierer.
Bin in Kapitel 8 angelangt.

Ich kann noch nicht beurteilen inwieweit ich die Themen wirklich verinnerlicht habe - das mit den Zeigern bzw. den Referenzen ist mir schon noch etwas suspekt.

Das Singleton Dings verstehe ich auch nicht wirklich, ich habe zwar eine Vermutung, das es wohl irgendwie darum geht eine Art automatischen Klassenzeiger für Einweginstanzen zu bauen aber äh... :?:
Machen Klassen mit nur einer Instanz überhaupt Sinn?
Schätze diejenigen unter euch, die wissen wozu Singletons gut sind lachen jetzt mal laut.... ich sagte ja, ich habs nicht wirklich begriffen.


Deshalb werde ich ähnlich wie "raxor" jetzt auch erstmal anhalten im Buch und eine Art Erfolgskontrolle starten.

Dazu schweben mir einige mini-mini-spiele vor, für die ich allerdings eine Sache benötige, die bisher im Buch nicht behandelt wurde:

Zeit

Was ich brauche ist folgendes:

ich möchte das mein Programm die Zeit stoppt die zwischen einer Eingabeaufforderung und einer Eingabe mit "cin >> " vergeht.

Ich erwarte jetzt hier keinen fertigen Quellcode, es wäre einfach schön wenn ihr mich in die richtige Richtung stuppen könntet, also ein Stichwort oder einen Befehl (?) - ich werde dann heute nach Feierabend mal versuchen damit zu experimentieren.

Gruß Nelrim
Auch der längste Weg beginnt mit einem ersten Schritt.

David_pb

Community-Fossil

Beiträge: 3 886

Beruf: 3D Graphics Programmer

  • Private Nachricht senden

2

04.02.2008, 14:08

Ok, hier dein Stichwort: time().
@D13_Dreinig

Sicaine

unregistriert

3

04.02.2008, 14:08

Auch als Anfaenger solltest du in der Lage sein einen Threadtitel zu formulieren der dein Anliegen kurz und knapp beschreibt.

Um dich mal in die richtige Richtung zu stubsen:

1. nutz google: Keywords waeren in deinem Fall c++, timer, time, zeit, counter
2. nutz microsoft developer network: msdn.microsoft.com

Nelrim

Frischling

  • »Nelrim« ist der Autor dieses Themas

Beiträge: 33

Beruf: Entwicklungskonstrukteur

  • Private Nachricht senden

4

04.02.2008, 14:13

Zitat von »"Sicaine"«

Auch als Anfaenger solltest du in der Lage schreiben einen Threadtitel zu formulieren der dein Anliegen kurz und knapp beschreibt.



jo merci für den hinweis, ich hab den titel geändert.

Nelrim
Auch der längste Weg beginnt mit einem ersten Schritt.

5

04.02.2008, 14:33

Für Zeit ...
Header: <ctime> // c, weil es aus C übernommen wurde!
Funktion: time(), difftime

Beispiel:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
std::cout << "Bitte geben Sie in den nächsten 3 Sekunden etwas ein!" << std::endl;
// Anfangszeit stoppen

const std::time_t time_begin(std::time(NULL));
// Eingabe abfangen

std::string input;
std::getline(std::cin, input);
// Gucken wie lange es gedauert hat und ausgeben

const double time_spend(std::difftime(std::time(NULL), time_begin));
std::cout << (time_spend > 3.0 ? "Sie waren zu langsam!" : "Glück gehabt!") << std::endl;
...
Devil Entertainment :: Your education is our inspiration
Der Spieleprogrammierer :: Community Magazin
Merlin - A Legend awakes :: You are a dedicated C++ (DirectX) programmer and you have ability to work in a team? Contact us!
Siedler II.5 RttR :: The old settlers-style is comming back!

Also known as (D)Evil

David_pb

Community-Fossil

Beiträge: 3 886

Beruf: 3D Graphics Programmer

  • Private Nachricht senden

6

04.02.2008, 15:00

Zitat von »"Deviloper"«


C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
std::cout << "Bitte geben Sie in den nächsten 3 Sekunden etwas ein!" << std::endl;
// Anfangszeit stoppen

std::time_t time_begin(*std::time(NULL));
// Eingabe abfangen

std::string input;
std::getline(std::cin, input);
// Gucken wie lange es gedauert hat und ausgeben

const double time_spend(std::difftime(*std::time(NULL), time_begin));
std::cout << (time_spend > 3.0 ? "Sie waren zu langsam!" : "Glück gehabt!") << std::endl;
...


Die Frage ist nur: Wieso dereferenzierst du den Rückgabewert von "time()"? :)
@D13_Dreinig

7

04.02.2008, 15:01

Weil ich mich falsch erinnert habe :D Dachte es wäre ein std::time_t-Zeiger... okay korrigiert!
Devil Entertainment :: Your education is our inspiration
Der Spieleprogrammierer :: Community Magazin
Merlin - A Legend awakes :: You are a dedicated C++ (DirectX) programmer and you have ability to work in a team? Contact us!
Siedler II.5 RttR :: The old settlers-style is comming back!

Also known as (D)Evil

Nelrim

Frischling

  • »Nelrim« ist der Autor dieses Themas

Beiträge: 33

Beruf: Entwicklungskonstrukteur

  • Private Nachricht senden

8

05.02.2008, 00:45

Ersteinmal lieben Dank für die bisherige Hilfe!

Das mit der Zeitnahme habe ich jetzt irgendwie hinbekommen :) *freu* Mein Spielchen ermittelt jetzt schon brav die Durchschnittszeit die der Spieler für die Antworten braucht. Es ist zwar noch nicht alles so wie ich gerne will aber für Heute solls mal gut sein.

Über eine Sache bin ich aber gestolpert für die ich keine Ursache finde:

ich habe in meinem Spielchen ein Hauptmenü, ziemlich ähnlich dem, aus dem Zahlenraten Spiel... Auch mit einer "switch case" Auswahl innerhalb einer Do While schleife.

Seltsamerweise erscheint bei Eingabe von "4" nicht nur "bis zum nächsten mal" sondern auch der default case: "falsche eingabe".

ich versuch mal das hier reinzukopiern:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
    case ('3'):
        {
            Highscore();
        }break;

    default:
        {
            cout << "Falsche Eingabe" << endl;
        }
    }
    } while(Auswahl !=('4'));
    cout << "Bis zum naechsten mal!" << endl;


return 0;


bei case 1,2,3 funktioniert es normal, auch falsche eingaben werden schön abgefangen... aber wieso erscheint "falsche eingabe" wenn man 4 eingibt?
Auch der längste Weg beginnt mit einem ersten Schritt.

drakon

Supermoderator

Beiträge: 6 513

Wohnort: Schweiz

Beruf: Entrepreneur

  • Private Nachricht senden

Nelrim

Frischling

  • »Nelrim« ist der Autor dieses Themas

Beiträge: 33

Beruf: Entwicklungskonstrukteur

  • Private Nachricht senden

10

05.02.2008, 00:52

Zitat von »"drakon"«

Na, weil 4 ein "Default" ist.


oh man bin ich blöd!

:roll:

danke!

Nelrim
Auch der längste Weg beginnt mit einem ersten Schritt.

Werbeanzeige