Autor
|
Tema: Dado en VB? (Leído 12,468 veces)
|
Frikimaster
Desconectado
Mensajes: 35
Dim Frikimaster As BPF [Battle Programmer Friki]
|
Muy buenas a todos, hacia mucho que no posteaba por aquí, pero siempre voy mirando post de gente para aprender cosas nuevas , soy un programador novato, hace apenas 1 año que empecé con C++ y VB...y lo que me queda xD Bueno, ahora me encuentro con que estoy haciendo mi proyecto de fin de curso en VB, se trata de un Trivial, y bueno, tengo todavía tiempo para hacer cosas xD, pero ahora estoy enfurruñado en hacer un dado que haga el efecto de girar, y que se me salga un numero aleatorio, y me gustaría que vosotros, que tenéis mas experiencia que yo, me recomendarais como hacerlo, hay algún tutorial o manual? Encontré este http://www.lawebdelprogramador.com/cursos/mirtavb/entrega3.php , pero me gustaría "juntar" varios códigos, quedarme con el que mas me gusta >.<, que me recomendáis? ^^ Muchisimas Gracias por adelantado. Frikimaster
|
|
|
En línea
|
La musica de la logica nunca fallara al sonar la melodia de la verdad.
|
|
|
Sancho.Mazorka
Desconectado
Mensajes: 480
Gamer & Programador
|
Mira buscate un dado, y dibujalo en paint o busca imagenes e intenta dibujarlo en una perspectiva que se vean 3 caras o si queres una sola y cargas en cada picture una cara del dado. Ej: Picture1.Picture = LoadPicture("C:\dado1.jpg") Picture2.Picture = LoadPicture("C:\dado2.jpg") Picture3.Picture = LoadPicture("C:\dado3.jpg") Picture4.Picture = LoadPicture("C:\dado4.jpg") Picture5.Picture = LoadPicture("C:\dado5.jpg") Picture6.Picture = LoadPicture("C:\dado6.jpg")
y despues cuando apretas un boton que su funciona sea "tirar los dados" haces: Private Sub cmdTirar_Click() Dim i As Integer Dim x As Integer For i = 1 To Int(Rnd * 15) + 3 'El dado puede llegar a rodar 15 veces, minimo 3 x = Int(Rnd * 6) + 1 'El dado puede salir entre 1 y 6 (osea sus caras) Select Case x Case 1: PictureDado.Picture = Picture1.Picture 'Si el dado sale 1 carga dado 1 Case 2: PictureDado.Picture = Picture2.Picture 'Si el dado sale 2 carga dado 2 Case 3: PictureDado.Picture = Picture3.Picture 'Si el dado sale 3 carga dado 3 Case 4: PictureDado.Picture = Picture4.Picture 'Si el dado sale 4 carga dado 4 Case 5: PictureDado.Picture = Picture5.Picture 'Si el dado sale 5 carga dado 5 Case 6: PictureDado.Picture = Picture6.Picture 'Si el dado sale 6 carga dado 6 End Select DoEvents 'Para que nuestro programa funcione sin colgarse PictureDado.Refresh 'Redibujamos la imagen del dado para visualizar bien Call Sleep(250) 'Duerme al programa por 0.25 segundos Next i End Sub
Y por ultimo agregamos esta API y esta funcion en el Form_Load para que empieze a crear numeros aleatorios: Private Declare Sub Sleep Lib "kernel32" Alias "Sleep" (ByVal dwMilliseconds As Long) Randomize
Entonces el codigo bien armado nos queda asi: Private Declare Sub Sleep Lib "kernel32" Alias "Sleep" (ByVal dwMilliseconds As Long) Private Sub Form_Load() 'Aca cargamos cada picture con una imagen del dado diferente (1 x cada cara) Randomize Picture1.Picture = LoadPicture("C:\dado1.jpg") Picture2.Picture = LoadPicture("C:\dado2.jpg") Picture3.Picture = LoadPicture("C:\dado3.jpg") Picture4.Picture = LoadPicture("C:\dado4.jpg") Picture5.Picture = LoadPicture("C:\dado5.jpg") Picture6.Picture = LoadPicture("C:\dado6.jpg") End Sub Private Sub cmdTirar_Click() Dim i As Integer Dim x As Integer For i = 1 To Int(Rnd * 15) + 3 'El dado puede llegar a rodar 15 veces, minimo 3 x = Int(Rnd * 6) + 1 'El dado puede salir entre 1 y 6 (osea sus caras) Select Case x Case 1: PictureDado.Picture = Picture1.Picture 'Si el dado sale 1 carga dado 1 Case 2: PictureDado.Picture = Picture2.Picture 'Si el dado sale 2 carga dado 2 Case 3: PictureDado.Picture = Picture3.Picture 'Si el dado sale 3 carga dado 3 Case 4: PictureDado.Picture = Picture4.Picture 'Si el dado sale 4 carga dado 4 Case 5: PictureDado.Picture = Picture5.Picture 'Si el dado sale 5 carga dado 5 Case 6: PictureDado.Picture = Picture6.Picture 'Si el dado sale 6 carga dado 6 End Select DoEvents 'Para que nuestro programa funcione sin colgarse PictureDado.Refresh 'Redibujamos la imagen del dado para visualizar bien Call Sleep(250) 'Duerme al programa por 0.25 segundos Next i End Sub
Necesitas:1 PictureBox llamado PictureDado (Para mostrar el dado) 6 PictureBox llamados Picture1, Picture2, Picture3, etc y con propiedad Visible = False (Para guardar cada cara del dado) 1 CommandButton llamado cmdTirar (Para tirar los dados) 6 Imagenes guardadas en C:\ con nombre dado1.jpg, dado2.jpg hasta el 6 Lo elabore recien, cualquier cosa avisame y espero te sirva PD: Podes ponerle las imagenes vos a los Picture o buscate 6 imagenes de dados y ponelas en tu Disco C:\ y llamalas Dado1, Dado2, Dado3 y que esan jpg, si queres cambiale la ruta, la extension o lo que te parezca!
|
|
« Última modificación: 29 Enero 2008, 17:40 pm por Sancho.Mazorka »
|
En línea
|
|
|
|
Chefito
|
Estoy deacuerdo con la respuesta Sancho.Mazorka. Solo voy a puntualizar en dos aspecto....sobre todo uno importante: En el procedimiento cmd_TirarClick(), mete al principio un Randomize, para que la secuencia de tiradas no se repitan cada vez que pones el programa. Yo creo que no hace falta poner un Doevents, ya que pones un Sleep. Ahhhh...por cierto....Int(Rnd * 15) + 3 el dado puede llegar a rodar 17 veces, no 15 . Saludos.
|
|
|
En línea
|
Moderador del foro oficial de AutoIt en español: www.AutoIt.es.Todos tenemos inteligencia, lo malo es que algunos no nos acordamos donde la dejamos guardada
|
|
|
Sancho.Mazorka
Desconectado
Mensajes: 480
Gamer & Programador
|
Chefito lo del Randomize cuando puse el post me di cuenta al revisarlo y cuando fui a editar se me corto la luz, cuando volvio me re olvide, ahora lo arreglo y lo del Int(Rnd * 15) + 3 ninguno tiene razon porque en realidad son 12 numeros empezando en el 3 (por eso dice +3) y terminando en 15 YA EDITE EL POST Y QUEDO ARREGLADO FUNCIONA PERFECTAMENTE!
|
|
|
En línea
|
|
|
|
Chefito
|
Haber.........creo que te estas equivocando con los conceptos y resultados un poco. Tu has hecho un for.....next para simular el giro de un dado no?.....pues piensa en tu bucle for.....next por un momento: for i=1 to int(rnd*15)+3 El int(rnd*15) da un resultado de 0 a 14, siendo 14 el máximo, ok? y a eso se le suma 3 más.......contando con los dedos me salen 14+3=17 . Por que el maximo de vueltas del dado es 17? Pues por lo anterior, ya que tu bucle for.....next recorre desde 1 (i=1) hasta un maximo de 17 (int(rnd*15)+3). Saludos.
|
|
|
En línea
|
Moderador del foro oficial de AutoIt en español: www.AutoIt.es.Todos tenemos inteligencia, lo malo es que algunos no nos acordamos donde la dejamos guardada
|
|
|
Sancho.Mazorka
Desconectado
Mensajes: 480
Gamer & Programador
|
hace la prueba y fijate, el +3 suma a la base del numero osea desde donde empieza, osea que el minimo de giros es 3 xq el RND da un Double aleatorio que x15 puede dar tanto 1,2,3,4,5,6,7,8,9,10,11,12,13,14 pero yo le digo que sea +3 osea que ahora el valor esta entre 3,4,5,6,7,8,9,10,11,12,13,14,15,16,17 osea que puede dar maximo 17 giros y minimo 3 giros osea que esta entre 15 posibilidades. En la respuesta anterior mia yo me confundi EDIT: me olvide de responder sobre el DoEvents, lo puse porque generalmente al usar la funcion sleep al igual que otras parecidas el programa no acepta eventos hasta que el sleep o dicha funcion termine.
|
|
« Última modificación: 29 Enero 2008, 18:06 pm por Sancho.Mazorka »
|
En línea
|
|
|
|
Chefito
|
Jajajajaja......esto es un tira y afloja para una chorrada....jajajaja. No te enfades hombre.....los dos tenemos razon a lo que creemos contestar. Pero este comentario que has puesto: 'El dado puede llegar a rodar 15 veces, minimo 3....pues hace pensar que es lo que yo digo y no lo que tu dices. Bueno, dejemoslo, que es una chorrada. Los dos tenemos razón: Tu, porque el máximo de posibilidades que determina el valor de las vueltas dadas estan entre 3 y 17, o sea 15(que no es lo mismo que el máximo de vueltas que pueda dar el dado, porque esto esta determinado por el bucle for....next). Yo, porque el máximo de vueltas que puede realizar el bucle abarca de 1 a 17, o sea, 17 vueltas. Dejemoslo en empate y decir que han sido dos puntos de vista distintos . Ni que estuviesemos discutiendo el protocolo del msn, que es lo que estoy mirando ahora mismo en vb!!!!! jajajajaja. Saludos.
|
|
|
En línea
|
Moderador del foro oficial de AutoIt en español: www.AutoIt.es.Todos tenemos inteligencia, lo malo es que algunos no nos acordamos donde la dejamos guardada
|
|
|
|
Frikimaster
Desconectado
Mensajes: 35
Dim Frikimaster As BPF [Battle Programmer Friki]
|
Lo que muerto es de envidia, madre mia, yo quiero aprender a programar como vosotros >.<.
Entonces...como queda al final la cosa? xD
Frikimaster
|
|
|
En línea
|
La musica de la logica nunca fallara al sonar la melodia de la verdad.
|
|
|
Freeze.
|
[broma]Uy FrikiMaster no seas como ellos, son unos creidos. Fijate en mi que soy muy humilde.[/broma]
Por cierto, si necesitas ayuda con los dados me avisas.
|
|
|
En línea
|
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
que juego les a dado miedo??
« 1 2 »
Juegos y Consolas
|
Sk9ITk5Z
|
14
|
7,541
|
19 Octubre 2011, 04:10 am
por flacc
|
|
|
Programa de apuestas de un dado
Programación C/C++
|
DickGumshoe
|
0
|
3,816
|
7 Diciembre 2011, 18:51 pm
por DickGumshoe
|
|
|
Alguno se ha dado de alta en la lista de Robinson???
Foro Libre
|
beholdthe
|
2
|
1,917
|
16 Julio 2012, 04:39 am
por Minusfour_cierralo_o_baneamefull
|
|
|
Voltear el dado en c++
« 1 2 »
Programación C/C++
|
shawwilliam
|
10
|
7,101
|
5 Febrero 2013, 16:09 pm
por TopoJunior
|
|
|
Revelan el verdadero uso dado a la red de anonimato Tor
Noticias
|
wolfbcn
|
0
|
1,870
|
12 Septiembre 2013, 17:47 pm
por wolfbcn
|
|