[Ajuda] Segundos em minutos
#1

Eu tenho uma contagem regressiva aqui que й representada em segundos

pawn Код:
contagems[MAX_PLAYERS] = 120; ////no top


format(esc,sizeof(esc), "tempo: %d" ,contagems);
TextDrawSetString(TempoEscola[o], esc);
Ela aparece somente em segundos, como faзo pra transformar isso em minutos?
Ex:

Aparece 120 segundos
O que eu quero: 2:00

Qual a lуgica eu uso pra fazer isso?
Reply
#2

PHP код:
    UptimeSegundos++;
    
    if(
UptimeSegundos == 60)
    {
        
UptimeSegundos 0;
        
UptimeMinutos++;
        
        if(
UptimeMinutos == 60)
        {
            
UptimeMinutos 0;
            
UptimeHoras++;
        }
        
        if(
UptimeHoras == 24)
        {
            
UptimeHoras 0;
            
UptimeDias++;
        }
    } 
Este cуdigo й chamado segundo a segundo. Agora e sу tirar ideias daqui.
Reply
#3

Vocк pode utilizar o mйtodo do bruxo00, que й mais fбcil e prбtico, sendo que esse mйtodo й com segundos crescentes.

O mйtodo que utilizei no meu minigame de race e estarei te passando foi decrescente:

Код:
new Segundos[MAX_PLAYERS], Timer[MAX_PLAYERS], Tempo[MAX_PLAYERS] = 2; 

public OnGameModeInit()
{
	Timer[playerid] = SetTimerEx("ConverterSegundos", 100, true, "i", playerid);
	
	return 1;
}

forward ConverterSegundos(playerid);
public ConverterSegundos(playerid)
{
	Segundos[playerid] --;
	
	if(Tempo[playerid] == 0 && Segundos[playerid] == 0)
		return KillTimer(Timer[playerid]);
	
	if(Segundos[playerid] < 1)
		Segundos[playerid] = 59,
		Tempo[playerid] --;
	
	new Str[12];
	format(Str, sizeof Str, "%02i:%02i", Tempo[playerid], Segundos[playerid]);
	
	return 1;
}
Reply
#4

Quote:
Originally Posted by Kha
Посмотреть сообщение
Eu tenho uma contagem regressiva aqui que й representada em segundos

pawn Код:
contagems[MAX_PLAYERS] = 120; ////no top


format(esc,sizeof(esc), "tempo: %d" ,contagems);
TextDrawSetString(TempoEscola[o], esc);
Ela aparece somente em segundos, como faзo pra transformar isso em minutos?
Ex:

Aparece 120 segundos
O que eu quero: 2:00

Qual a lуgica eu uso pra fazer isso?
Os demais jб responderam com cуdigo, gostaria apenas de responder a duvida sobre a lуgica.

Se vocк for analisar a matemбtica bбsica por trбs desse seu problema, levando em consideraзгo que 1 min seja equivalente a 60 segundos, entгo:

sempre que quisermos transformar segundos em minutos, usamos: segundos / 60 = minutos
sempre que quisermos transformar minutos em segundos, usamos: minutos * 60 = segundos


Entгo pra esse seu problema temos:

120 (seg) / 60 (qtd_min) = 2 (min)


assim vocк consegue transformar os seus segundos em minutos, porйm vocк ainda precisa calcular a parte que vem depois dos 2 pontos, ou seja, caso seja 121 segundos, equivalente a 2 minutos e 1 segundo:

121 / 60 = 2 (min)
121 % 60 = 1 (seg)


Se vocк for passar isso pro pawn, vai ficar:
pawn Код:
new min, seg;
min = contagems[playerid] / 60;
seg = contagems[playerid] % 60;

printf("%02d:%02d", min, seg);
OBS: o cуdigo ficou bem menor do que oque foi postado pelos meninos acima, porque foi usado mais lуgica matemбtica do que estruturas computacionais, eu acho que esse devia ser o principio da programaзгo, vocк usar lуgica matemбtica para resolver o problema, porque se nгo vocк comeзa a gerar cуdigos lentos pro seu processador executar.


Se nгo me engano, a formataзгo fica assim, 02, para informar que vai preencher com 0 as 2 casas caso o valor nгo exista.


Caso reste alguma duvida sobre a lуgica, pode perguntar que eu ou os demais respondem.
Reply
#5

Cara, me esqueci completamente do %02d! Criei 4 condicionais sendo que nem precisaria usб-las, jб que essa funзгo jб iria fazer a conversгo.

Thx @ipsNan.
Reply
#6

Mais fбcil usar o que o Will disse.

Use esta funзгo:

PHP код:
SecondsToMinutes(seconds)
{
    new 
tempo[17]; 
    
format(temposizeof(tempo), "%02d:%02d"seconds 60seconds 60);
    return 
tempo;

uso:

SecondsToMinutes(60)

Resultado: 01:00
Reply
#7

PHP код:
#define minutos(%0) (1000 * %0 * 60)
#define horas(%0) (1000 * %0 * 60 * 60)
#define segundos(%0) (1000 * %0)
#define dias(%0) (1000 * %0 * 60 * 60  * 24)
#define semanas(%0) (1000 * %0 * 60 * 60  * 24 * 7)
#define meses(%0) (1000 * %0 * 60 * 60  * 24 * 30)
#define anos(%0) (1000 * %0 * 60 * 60  * 24 * 30 * 12)
#define decadas(%0) (1000 * %0 * 60 * 60  * 24 * 30 * 12 * 10)
#define seculos(%0) (1000 * %0 * 60 * 60  * 24 * 30 * 12 * 10 * 10) 
Reply
#8

Quote:
Originally Posted by SepZ
Посмотреть сообщение
pawn Код:
#define minutos(%0) (1000 * %0 * 60)
#define horas(%0) (1000 * %0 * 60 * 60)
#define segundos(%0) (1000 * %0)
#define dias(%0) (1000 * %0 * 60 * 60  * 24)
#define semanas(%0) (1000 * %0 * 60 * 60  * 24 * 7)
#define meses(%0) (1000 * %0 * 60 * 60  * 24 * 30)
#define anos(%0) (1000 * %0 * 60 * 60  * 24 * 30 * 12)
#define decadas(%0) (1000 * %0 * 60 * 60  * 24 * 30 * 12 * 10)
#define seculos(%0) (1000 * %0 * 60 * 60  * 24 * 30 * 12 * 10 * 10)
Cara, esses seus macros nгo atendem a necessidade do nosso colega...

Se ele inserir minutos(120), isso vai dar 7.200.000

e o resultado esperado por ele й 02:00, e nгo 7.200.000...
Reply
#9

@edit
tem razгo, nгo tinha interpretado direito.
Reply
#10

Obrigado pela ajuda utilizei "%02d", funcionou direitinho!
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)