La Ultima Esencia
Noticias:
 
*
Bienvenido(a), Visitante. Por favor, ingresa o regístrate. Diciembre 03, 2008, 09:59:58


Ingresar con nombre de usuario, contraseña y duración de la sesión


Páginas: [1]
  Imprimir  
Autor Tema: Limitar Valores  (Leído 253 veces)
0 Usuarios y 1 Visitante están viendo este tema.
Garlimidon
Grupo 2

Desconectado Desconectado

Mensajes: 650


Si tuviera cinco vidas para vivir...


« : Marzo 13, 2008, 15:08:59 »

Bueno, estoy haciendo un "proyecto" en batch. Básicamente, el usuario introduce el número de caras y el número de dados, y lo lanza. Ya está hecho, lo único que me faltaría es saber como cojones se hace para que el propio batch me de un valor entre 1 e i (siendo i el numero de caras)



Help me pleaseeee
En línea

Roses are #FF0000
Violets are #0000FF
All my base
Are belong to you
Elía
Visitante
« Respuesta #1 : Marzo 13, 2008, 17:29:30 »

¿Existe el random en batch? Supongo que sí, sería con eso
En línea
Garlimidon
Grupo 2

Desconectado Desconectado

Mensajes: 650


Si tuviera cinco vidas para vivir...


« Respuesta #2 : Marzo 13, 2008, 21:30:41 »

ya lo he conseguido.


Random existe en batch, pero da un valor entre 1 y 32767, y claro... un dado de 32767 caras no es muy util xDDDDD



Básicamente lo que he hecho es:


Código:
@echo off
title Dice Roller
color 2
title Garlimidon's Dice Roller
:title
cls
echo Bienvenido al Dice Roller de Garlimidon
echo Introduce el numero de caras
set /p caras=
echo Introduce el numero de dados
set /p dados=
set /a control=1
set /a bucle=0
set /a divisor=200
goto 1

:1
set /a bucle=%bucle% +%control%
echo resultado %bucle%:
:X
if %caras% LSS 10000 set n= %random%
if %caras% LSS 1000 set /a n= %random% / 10
if %caras% LSS 100 set /a n= %random% / 100
if %caras% LSS 10 set /a n= %random% / 1000
if %n% GTR %caras% goto X
echo %n%
if %bucle%==%dados% goto 2
goto 1

:2
echo Esos son tus resultados, pulsa cualquier tecla para borrarlos
pause > nul
cls
echo 1) Volver al menu
echo 2) Salir
set /p i=
if %i%==1 goto title
if %i%==2 goto exit

:exit
cls
echo Estas seguro de que quieres salir?
echo 1) Salir
echo 2) Volver al menu
set /p exit=
if %exit%==1 exit
if %exit%==2 goto title



Está currado. Lo más importante está en el periodo (:X - goto X)



Básicamente te va a preguntar las caras y el número de dados.

Tras preguntarte todo eso, lanza un valor al azar. Si es menor de 10, lo divide entre 1000 (es decir, si me das 32000 numeros, pasan a ser 32, de modo que va mucho más rápido), y da valores ahí hasta que salga uno menor que caras tenga el dado. Entonces, hace un echo con ese valor, y vuelve a iniciarse, sumando 1 a %bucle%. Cada valor que de, suma 1 a bucle, y cuando %bucle% tenga el mismo valor que %dados%, finaliza.

Además, para que quede más guay, he puesto que me de un "echo resultado %bucle%:" antes del correspondiente resultado. De este modo, cada vez que de un valor, suma uno a bucle, de modo que aparece "resultado 1", "resultado 2" etc etc etc...






Util para rolear xDDDD
« Última modificación: Marzo 13, 2008, 21:34:27 por Garlimidon » En línea

Roses are #FF0000
Violets are #0000FF
All my base
Are belong to you
siro
Master

Desconectado Desconectado

Mensajes: 524



« Respuesta #3 : Marzo 13, 2008, 22:03:08 »

mmm, si tienes la operación resto (de la división), puedes hacer: (numero hallado al azar) resto (numero de caras), lo que te dará un número al azar entre 0 y el numero de caras menos 1. Suma 1 al resultado y ya lo tienes. Asi te ahorras tener que hacer tanto bucle.
« Última modificación: Marzo 13, 2008, 22:10:04 por siro » En línea

pianista
Administrador

Desconectado Desconectado

Mensajes: 2614


« Respuesta #4 : Marzo 13, 2008, 22:09:26 »

Otra forma es dividir entre lo que sea y truncar...
Asi te queda un integer
Saludos
En línea
Garlimidon
Grupo 2

Desconectado Desconectado

Mensajes: 650


Si tuviera cinco vidas para vivir...


« Respuesta #5 : Marzo 13, 2008, 22:16:07 »

pero no tengo ninguna de esas dos opciones, si las tuviera las habría aplicado.
En línea

Roses are #FF0000
Violets are #0000FF
All my base
Are belong to you
pianista
Administrador

Desconectado Desconectado

Mensajes: 2614


« Respuesta #6 : Marzo 13, 2008, 22:19:50 »

En batch no se puede truncar ni hacer el modulo???
Probaste para hacer el modulo con mod, o con \ o con \\
Saludos
En línea
Elía
Visitante
« Respuesta #7 : Marzo 13, 2008, 22:23:09 »

Creo que el módulo se hace con el tanto por ciento (%)
En línea
siro
Master

Desconectado Desconectado

Mensajes: 524



« Respuesta #8 : Marzo 13, 2008, 22:23:20 »

Citar
Otra forma es dividir entre lo que sea y truncar...
Asi te queda un integer
Saludos

la cuestión es k el numero le sale entre 0 y 2^15 bits y el numero de caras del dado es introducido por el usuario, asi k el numero entre el k ay k dividir es desconocido...

Citar
pero no tengo ninguna de esas dos opciones, si las tuviera las habría aplicado.
k no tiene operación resto?? me extraña, pero weno... siempre te kda hacer el resto manualmente, supongo k sabras.
a:=numeroazar/numerocaras
b:=numeroazar - numerocaras*a

EDITO: lo que hay encima es un mensaje util de Elía??? Te estas echando a perder...
En línea

Elía
Visitante
« Respuesta #9 : Marzo 13, 2008, 22:24:31 »

a siro no le hagas mucho caso que solo ha aprobado una asignatura de programacion Tongue

aunque en este caso no anda erróneo
En línea
pianista
Administrador

Desconectado Desconectado

Mensajes: 2614


« Respuesta #10 : Marzo 14, 2008, 09:01:37 »

De los aqui presentes solo tengo yo las 3 aprobadas eh asi que cuidadin!! Grin Grin Grin
El resto tiene que estar en batch, me extrañaria mucho, mira lo que dice Elia
Saludos
En línea
Elía
Visitante
« Respuesta #11 : Marzo 14, 2008, 09:03:12 »

Por cierto, si quisieses escribir en algún lado "%" como carácter tendrías que poner %%
En línea
Páginas: [1]
  Imprimir  
 
Ir a:  


Powered by SMF 1.1.6 | SMF © 2006-2007, Simple Machines LLC
Seo4Smf v0.2 © Webmaster's Talks


AFILIATE AQUI
Creative Commons License
Esta obra está bajo una licencia de Creative Commons.