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

Gon

Treue Seele

  • »Gon« ist der Autor dieses Themas

Beiträge: 262

Wohnort: Nahe München

Beruf: Schüler (9. Klasse Gymnasium)

  • Private Nachricht senden

1

16.07.2008, 13:48

Zeiten von einanander abziehen

hi,

also ich mach mal ein beispiel:

ich bin bei einem autorenn-spiel 1 minute, 23 sekunden und 456 tausendstel sekunden gefahren und es wird folgendermaßen gespeichert:
die anzahl der minuten (variable: int m_minuten) in die erste editbox (01), die anzahl der sekunden (int m_sekunden) in die zweite editbox (23) und die tausendstel (int m_tausendstel) in die dritte editbox (456).

nun gibt es einen rekord: 0 minuten, 56 sekunden und 789 tausendstel sekunden.
die minuten (int m_RECORDminuten) in die vierte editbox (00), die sekunden (int m_RECORDsekunden) in die fünfte (56) und die tausendstel (int m_RECORDtausendstel) in die sechste (789).

jetzt brauch ich eine formel mit den variablen, die die differenz der beiden zeiten ausrechnet. in diesem beispiel müsste da also stehen:

Quellcode

1
2
3
eigene zeit            differenz zu rekord zeit             rekordzeit 

01:23,456                    - 00:26,667                      00:56,789 


ich hab schon rumüberlegt, dass man alles in sekunden umwandelt und dann einfach abzieht, z. B.:

C-/C++-Quelltext

1
2
3
4
5
m_gesamtzeit = (m_minuten * 60) + (m_sekunden) + (m_tausendstel / 1000);

m_RECORDgesamtzeit = (m_RECORDminuten * 60) + (m_RECORDsekunden) + (m_RECORDtausendstel / 1000);

m_differenz = m_RECORDgesamtzeit - m_gesamtzeit;


dann erhält man nämlich bei diesem beispiel:
eigene zeit: (01 * 60) + (23) + (456 / 1000) = 83,456
rekord zeit: (00 * 60) + (56) + (789 / 1000) = 56,789
differenz: 56,789 - 83,456 = -26,677

nun habe ich aber das problem, die differenz (-26,677) wieder in die drei variablen (m_DIFminuten, m_DIFsekunden, m_DIFtausendstel) einzuteilen....


kann man das noch irgendwie anders machen?

ich hoffe, ihr könnt mir helfen,

vielen dank im voraus,

mfg Gon ;)

neido

Treue Seele

Beiträge: 225

Wohnort: Wien

  • Private Nachricht senden

2

16.07.2008, 13:52

Ich empfehle alles in millisekunden zu speichern und damit alles zu rechnen. Zur Ausgabe kann es ja dann einfach formatiert werden.

Falls du keine Idee hast wie, kleiner Tipp: verwende den Modulo-operator

drakon

Supermoderator

Beiträge: 6 513

Wohnort: Schweiz

Beruf: Entrepreneur

  • Private Nachricht senden

3

16.07.2008, 22:05

Ich würde dir auch empfehlen das alles in Milisekunden umzurechnen und dann wieder zurück.
Wenn das nicht in Frage kommt, würde ich dir empfehlen hald eine Klasse für dieses Format zu schreiben und dann kannst du das alles viel einfacher umsetzen, weil du keine einzelnen, rumschwirrenden Zahlen hast.

4

16.07.2008, 22:31

(min * 60 + sec) * 1000 + ms = ms_total
ms_total / 60000 = min
(ms_total - min * 60000) / 1000 = sec
(ms_total - min * 60000 - sec) = ms

...
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

Werbeanzeige