elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Usando Git para manipular el directorio de trabajo, el índice y commits (segunda parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  .NET (C#, VB.NET, ASP) (Moderador: kub0x)
| | | |-+  Duda ejercicio basico de programacion
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Duda ejercicio basico de programacion  (Leído 3,195 veces)
arts

Desconectado Desconectado

Mensajes: 103


Ver Perfil
Duda ejercicio basico de programacion
« en: 24 Enero 2013, 21:07 pm »

Muy buenas, estaba haciendo un ejercicio en visual sobre un juego de adivinar un nº que se introduce por pantalla y no se como hacer una de las partes. Exactamente la parte de los acumuladores de los puntos, por no querer rescribir todo el código lo he ido haciendo de una manera y al final me esta dando mas problemas que otra cosa.

El problema dice así: se desea realizar un programa donde se tienen a 2 jugadores y un arbitro, el arbitro introduce un nº por teclado y los 2 jugadores intenta averiguarlo. El nº debe estar entre el 1 y 100. Como máximo tienen 5 intentos y juegan de manera alternada. El que acierta a la primera obtendra 10 pts, si es a la 2ª 8puntos, 3ª 6puntos, 4ª 4 puntos 5ª 2puntos 6ª pierden el juego.
Hay que darles pistas a los jugadores si el nº introducido se encuentra a + o - 3 del nº a acertar mostrar "quemando", si es + o - 7 caliente, si es + o - 15 mostrar templado, resto frio.
Se acumulan los puntos, de forma que  se muestren siempre los puntos aun terminando una partida, poner un botón de inicio y otro de finalizar.

Por ahora me sale todo bien, excepto que siempre se me mete por la misma sentencia en puntos acumulados y gane quien gane se los da siempre al jugador 1.
¿ De que otra forma debería haberlo hecho  o que tengo que cambiar ?, por otra parte como hago un botón finalizar que interactue en el código del sub_button1 que es el botón de iniciar ?.

Código
  1. Public Class Form1
  2.    Dim T_PUNTOS_J1 As Short
  3.    Dim T_PUNTOS_J2 As Short
  4.    Dim I As Integer
  5.  
  6.    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
  7.        Dim NUM_ACERTAR As Short
  8.        Dim NUM As Short
  9.        Dim PISTAS As Short
  10.        Dim B As Boolean = False
  11.        Dim C_INTENTOS As Short = 0
  12.        Dim C_INTENTOS_J2 As Short = 0
  13.  
  14.        For Me.I = 0 To 999
  15.  
  16.            NUM_ACERTAR = InputBox("Que el arbitro introduzca un nº entre 1 y 100")
  17.            Do Until NUM_ACERTAR >= 1 And NUM_ACERTAR <= 100
  18.                NUM_ACERTAR = InputBox("Introduzca un nº entre 1 y 100")
  19.            Loop
  20.  
  21.            Do
  22.                If B = False Then
  23.                    B = True
  24.                    C_INTENTOS = C_INTENTOS + 1
  25.                    NUM = InputBox("Turno del Jugador 1, intento nº: " & C_INTENTOS, "Turno Jugador 1", 0)
  26.                    TextBox4.Text = TextBox4.Text & " Numero: " & NUM & Chr(13) & Chr(10)
  27.                Else
  28.                    B = False
  29.                    C_INTENTOS_J2 = C_INTENTOS_J2 + 1
  30.                    NUM = InputBox("Turno del Jugador 2, intento nº: " & C_INTENTOS_J2, "Turno Jugador 2", 0)
  31.                    TextBox4.Text = TextBox4.Text & " Numero: " & NUM & Chr(13) & Chr(10)
  32.                End If
  33.  
  34.                'MENSAJES DE TEXTO PISTAS
  35.                If NUM_ACERTAR > NUM Then
  36.                    PISTAS = NUM_ACERTAR - NUM
  37.                ElseIf NUM_ACERTAR < NUM Then
  38.                    PISTAS = NUM - NUM_ACERTAR
  39.                ElseIf NUM = NUM_ACERTAR Then
  40.                    PISTAS = 0
  41.                End If
  42.  
  43.                If PISTAS <= 3 Then
  44.                    TextBox1.Text = "QUEMANDO"
  45.                ElseIf PISTAS <= 7 Then
  46.                    TextBox1.Text = "CALIENTE"
  47.                ElseIf PISTAS <= 15 Then
  48.                    TextBox1.Text = "TEMPLADO"
  49.                Else
  50.                    TextBox1.Text = "FRIO"
  51.                End If
  52.  
  53.                'RECUENTOS DE LOS PUNTOS ACUMULADOS
  54.                If C_INTENTOS = 1 And NUM = NUM_ACERTAR Then
  55.                    T_PUNTOS_J1 = T_PUNTOS_J1 + 10
  56.                    C_INTENTOS = 6
  57.                    TextBox1.Text = "HAS GANADO J1"
  58.                ElseIf C_INTENTOS = 2 And NUM = NUM_ACERTAR Then
  59.                    T_PUNTOS_J1 = T_PUNTOS_J1 + 8
  60.                    C_INTENTOS = 6
  61.                    TextBox1.Text = "HAS GANADO J1"
  62.                ElseIf C_INTENTOS = 3 And NUM = NUM_ACERTAR Then
  63.                    T_PUNTOS_J1 = T_PUNTOS_J1 + 6
  64.                    C_INTENTOS = 6
  65.                    TextBox1.Text = "HAS GANADO J1"
  66.                ElseIf C_INTENTOS = 4 And NUM = NUM_ACERTAR Then
  67.                    T_PUNTOS_J1 = T_PUNTOS_J1 + 4
  68.                    C_INTENTOS = 6
  69.                    TextBox1.Text = "HAS GANADO J1"
  70.                ElseIf C_INTENTOS = 5 And NUM = NUM_ACERTAR Then
  71.                    T_PUNTOS_J1 = T_PUNTOS_J1 + 2
  72.                    C_INTENTOS = 6
  73.                    TextBox1.Text = "HAS GANADO J1"
  74.                ElseIf C_INTENTOS_J2 = 1 And NUM = NUM_ACERTAR Then
  75.                    T_PUNTOS_J2 = T_PUNTOS_J2 + 10
  76.                    C_INTENTOS = 6
  77.                    TextBox1.Text = "HAS GANADO J2"
  78.                ElseIf C_INTENTOS_J2 = 2 And NUM = NUM_ACERTAR Then
  79.                    T_PUNTOS_J2 = T_PUNTOS_J2 + 8
  80.                    C_INTENTOS = 6
  81.                    TextBox1.Text = "HAS GANADO J2"
  82.                ElseIf C_INTENTOS_J2 = 3 And NUM = NUM_ACERTAR Then
  83.                    T_PUNTOS_J2 = T_PUNTOS_J2 + 6
  84.                    C_INTENTOS = 6
  85.                    TextBox1.Text = "HAS GANADO J2"
  86.                ElseIf C_INTENTOS_J2 = 4 And NUM = NUM_ACERTAR Then
  87.                    T_PUNTOS_J2 = T_PUNTOS_J2 + 4
  88.                    C_INTENTOS = 6
  89.                    TextBox1.Text = "HAS GANADO J2"
  90.                ElseIf C_INTENTOS_J2 = 5 And NUM = NUM_ACERTAR Then
  91.                    T_PUNTOS_J2 = T_PUNTOS_J2 + 2
  92.                    C_INTENTOS = 6
  93.                    TextBox1.Text = "HAS GANADO J2"
  94.                End If
  95.  
  96.                TextBox2.Text = T_PUNTOS_J1
  97.                TextBox3.Text = T_PUNTOS_J2
  98.  
  99.            Loop Until C_INTENTOS >= 5
  100.            I = 99999
  101.        Next
  102.    End Sub
  103.  
  104. End Class
  105.  


En línea

arts

Desconectado Desconectado

Mensajes: 103


Ver Perfil
Re: Duda ejercicio basico de programacion
« Respuesta #1 en: 24 Enero 2013, 21:33 pm »

Encuentro una posible solución diferenciando el numero que entre el jugador 1 y el jugador 2, pero me parece mal hecho porque duplico código y lo que es peor, saldría bien porque son 2 jugadores, pero si fueran 23 jugadores queda completamente descartada esa opción.


En línea

Danyfirex


Desconectado Desconectado

Mensajes: 493


My Dear Mizuho


Ver Perfil
Re: Duda ejercicio basico de programacion
« Respuesta #2 en: 24 Enero 2013, 23:02 pm »

Prueba a así.


Código
  1. Public Class Form1
  2.    Dim T_PUNTOS_J1 As Short
  3.    Dim T_PUNTOS_J2 As Short
  4.    Dim I As Integer
  5.  
  6.    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
  7.        Dim NUM_ACERTAR As Short
  8.        Dim NUM As Short
  9.        Dim PISTAS As Short
  10.        Dim B As Boolean = False
  11.        Dim C_INTENTOS As Short = 0
  12.        Dim C_INTENTOS_J2 As Short = 0
  13.  
  14.        For Me.I = 0 To 999
  15.  
  16.            NUM_ACERTAR = InputBox("Que el arbitro introduzca un nº entre 1 y 100")
  17.            Do Until NUM_ACERTAR >= 1 And NUM_ACERTAR <= 100
  18.                NUM_ACERTAR = InputBox("Introduzca un nº entre 1 y 100")
  19.            Loop
  20.  
  21.            Do
  22.                If B = False Then
  23.                    B = True
  24.                    C_INTENTOS = C_INTENTOS + 1
  25.                    NUM = InputBox("Turno del Jugador 1, intento nº: " & C_INTENTOS, "Turno Jugador 1", 0)
  26.                    TextBox4.Text = TextBox4.Text & " Numero: " & NUM & Chr(13) & Chr(10)
  27.                Else
  28.                    B = False
  29.                    C_INTENTOS_J2 = C_INTENTOS_J2 + 1
  30.                    NUM = InputBox("Turno del Jugador 2, intento nº: " & C_INTENTOS_J2, "Turno Jugador 2", 0)
  31.                    TextBox4.Text = TextBox4.Text & " Numero: " & NUM & Chr(13) & Chr(10)
  32.                End If
  33.  
  34.                'MENSAJES DE TEXTO PISTAS
  35.                If NUM_ACERTAR > NUM Then
  36.                    PISTAS = NUM_ACERTAR - NUM
  37.                ElseIf NUM_ACERTAR < NUM Then
  38.                    PISTAS = NUM - NUM_ACERTAR
  39.                ElseIf NUM = NUM_ACERTAR Then
  40.                    PISTAS = 0
  41.                End If
  42.  
  43.                If PISTAS <= 3 Then
  44.                    TextBox1.Text = "QUEMANDO"
  45.                ElseIf PISTAS <= 7 Then
  46.                    TextBox1.Text = "CALIENTE"
  47.                ElseIf PISTAS <= 15 Then
  48.                    TextBox1.Text = "TEMPLADO"
  49.                Else
  50.                    TextBox1.Text = "FRIO"
  51.                End If
  52.  
  53.  
  54.  
  55.                'RECUENTOS DE LOS PUNTOS ACUMULADOS
  56.               '///AQUI VERIFICAMOS QUIEN ESTA JUGANDO
  57.                If B = True Then
  58.                    If C_INTENTOS = 1 And NUM = NUM_ACERTAR Then
  59.                        T_PUNTOS_J1 = T_PUNTOS_J1 + 10
  60.                        C_INTENTOS = 6
  61.                        TextBox1.Text = "HAS GANADO J1"
  62.                    ElseIf C_INTENTOS = 2 And NUM = NUM_ACERTAR Then
  63.                        T_PUNTOS_J1 = T_PUNTOS_J1 + 8
  64.                        C_INTENTOS = 6
  65.                        TextBox1.Text = "HAS GANADO J1"
  66.                    ElseIf C_INTENTOS = 3 And NUM = NUM_ACERTAR Then
  67.                        T_PUNTOS_J1 = T_PUNTOS_J1 + 6
  68.                        C_INTENTOS = 6
  69.                        TextBox1.Text = "HAS GANADO J1"
  70.                    ElseIf C_INTENTOS = 4 And NUM = NUM_ACERTAR Then
  71.                        T_PUNTOS_J1 = T_PUNTOS_J1 + 4
  72.                        C_INTENTOS = 6
  73.                        TextBox1.Text = "HAS GANADO J1"
  74.                    ElseIf C_INTENTOS = 5 And NUM = NUM_ACERTAR Then
  75.                        T_PUNTOS_J1 = T_PUNTOS_J1 + 2
  76.                        C_INTENTOS = 6
  77.                        TextBox1.Text = "HAS GANADO J1"
  78.  
  79.                    End If
  80.                Else
  81.  
  82.                    If C_INTENTOS_J2 = 1 And NUM = NUM_ACERTAR Then
  83.                        T_PUNTOS_J2 = T_PUNTOS_J2 + 10
  84.                        C_INTENTOS = 6
  85.                        TextBox1.Text = "HAS GANADO J2"
  86.                    ElseIf C_INTENTOS_J2 = 2 And NUM = NUM_ACERTAR Then
  87.                        T_PUNTOS_J2 = T_PUNTOS_J2 + 8
  88.                        C_INTENTOS = 6
  89.                        TextBox1.Text = "HAS GANADO J2"
  90.                    ElseIf C_INTENTOS_J2 = 3 And NUM = NUM_ACERTAR Then
  91.                        T_PUNTOS_J2 = T_PUNTOS_J2 + 6
  92.                        C_INTENTOS = 6
  93.                        TextBox1.Text = "HAS GANADO J2"
  94.                    ElseIf C_INTENTOS_J2 = 4 And NUM = NUM_ACERTAR Then
  95.                        T_PUNTOS_J2 = T_PUNTOS_J2 + 4
  96.                        C_INTENTOS = 6
  97.                        TextBox1.Text = "HAS GANADO J2"
  98.                    ElseIf C_INTENTOS_J2 = 5 And NUM = NUM_ACERTAR Then
  99.                        T_PUNTOS_J2 = T_PUNTOS_J2 + 2
  100.                        C_INTENTOS = 6
  101.                        TextBox1.Text = "HAS GANADO J2"
  102.                    End If
  103.                End If
  104.  
  105.  
  106.  
  107.  
  108.  
  109.                TextBox2.Text = T_PUNTOS_J1
  110.                TextBox3.Text = T_PUNTOS_J2
  111.  
  112.            Loop Until C_INTENTOS >= 5
  113.            I = 99999
  114.        Next
  115.    End Sub
  116.  
  117. End Class

saludos
« Última modificación: 24 Enero 2013, 23:04 pm por Danyfirex » En línea

arts

Desconectado Desconectado

Mensajes: 103


Ver Perfil
Re: Duda ejercicio basico de programacion
« Respuesta #3 en: 25 Enero 2013, 16:31 pm »

Muchas gracias! ya veo lo que me faltaba !
 ;-)
En línea

$Edu$


Desconectado Desconectado

Mensajes: 1.842



Ver Perfil
Re: Duda ejercicio basico de programacion
« Respuesta #4 en: 25 Enero 2013, 16:48 pm »

Yo te aconsejaria que una vez que lo hayas terminado, empezar de nuevo, no es muy largo como para que demores mucho. Al empezar de nuevo lo pensaras mejor en un papel con lapicera para poder organizarte mejor en el codigo y para que te sea mas facil entenderlo en el futuro y hacerle cambios.

Digo porque hay cosas como esta:

Código
  1.   If B = True Then
  2.                    If C_INTENTOS = 1 And NUM = NUM_ACERTAR Then
  3.                        T_PUNTOS_J1 = T_PUNTOS_J1 + 10
  4.                        C_INTENTOS = 6
  5.                        TextBox1.Text = "HAS GANADO J1"
  6.                    ElseIf C_INTENTOS = 2 And NUM = NUM_ACERTAR Then
  7.                        T_PUNTOS_J1 = T_PUNTOS_J1 + 8
  8.                        C_INTENTOS = 6
  9.                        TextBox1.Text = "HAS GANADO J1"
  10.                    ElseIf C_INTENTOS = 3 And NUM = NUM_ACERTAR Then
  11.                        T_PUNTOS_J1 = T_PUNTOS_J1 + 6
  12.                        C_INTENTOS = 6
  13.                        TextBox1.Text = "HAS GANADO J1"
  14.                    ElseIf C_INTENTOS = 4 And NUM = NUM_ACERTAR Then
  15.                        T_PUNTOS_J1 = T_PUNTOS_J1 + 4
  16.                        C_INTENTOS = 6
  17.                        TextBox1.Text = "HAS GANADO J1"
  18.                    ElseIf C_INTENTOS = 5 And NUM = NUM_ACERTAR Then
  19.                        T_PUNTOS_J1 = T_PUNTOS_J1 + 2
  20.                        C_INTENTOS = 6
  21.                        TextBox1.Text = "HAS GANADO J1"
  22.  
  23.                    End If
  24.                Else
  25.  
  26.                    If C_INTENTOS_J2 = 1 And NUM = NUM_ACERTAR Then
  27.                        T_PUNTOS_J2 = T_PUNTOS_J2 + 10
  28.                        C_INTENTOS = 6
  29.                        TextBox1.Text = "HAS GANADO J2"
  30.                    ElseIf C_INTENTOS_J2 = 2 And NUM = NUM_ACERTAR Then
  31.                        T_PUNTOS_J2 = T_PUNTOS_J2 + 8
  32.                        C_INTENTOS = 6
  33.                        TextBox1.Text = "HAS GANADO J2"
  34.                    ElseIf C_INTENTOS_J2 = 3 And NUM = NUM_ACERTAR Then
  35.                        T_PUNTOS_J2 = T_PUNTOS_J2 + 6
  36.                        C_INTENTOS = 6
  37.                        TextBox1.Text = "HAS GANADO J2"
  38.                    ElseIf C_INTENTOS_J2 = 4 And NUM = NUM_ACERTAR Then
  39.                        T_PUNTOS_J2 = T_PUNTOS_J2 + 4
  40.                        C_INTENTOS = 6
  41.                        TextBox1.Text = "HAS GANADO J2"
  42.                    ElseIf C_INTENTOS_J2 = 5 And NUM = NUM_ACERTAR Then
  43.                        T_PUNTOS_J2 = T_PUNTOS_J2 + 2
  44.                        C_INTENTOS = 6
  45.                        TextBox1.Text = "HAS GANADO J2"
  46.                    End If
  47.                End If
  48.  
  49.  
  50.  

Donde se repite siempre And NUM = NUM_ACERTAR y se podria mejorar para hacer menos verificaciones y que sea mas rapido el codigo y sea mas claro.

Código
  1. if NUM = NUM_ACERTAR Then
  2.  
  3.     select case: C_INTENTOS
  4.  
  5.               case 1:
  6.                     T_PUNTOS_J1 = T_PUNTOS_J1 + 10
  7.                     .....
  8.                     .....
  9.  
  10.  
En línea

arts

Desconectado Desconectado

Mensajes: 103


Ver Perfil
Re: Duda ejercicio basico de programacion
« Respuesta #5 en: 25 Enero 2013, 16:59 pm »

Justo es este tipo de cosas las que me fallan :), yo mismo he visto muy raro tanto if... y elseif junto y repetido, lo que no me he dado cuenta es que justo como dices con un select case puedo usarlo para todas las opciones :).

Gracias de nuevo :D
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Duda en un ejercicio de programación « 1 2 »
Programación C/C++
eaguel 15 6,835 Último mensaje 1 Noviembre 2012, 13:56 pm
por eaguel
Duda en en ejercicio de programacion
Programación C/C++
eaguel 6 2,883 Último mensaje 21 Noviembre 2012, 10:07 am
por eaguel
Duda ejercicio basico de programacion
Programación Visual Basic
arts 2 1,872 Último mensaje 24 Enero 2013, 21:03 pm
por arts
[PYTHON] Ayuda con ejercicio básico
Programación General
K4sS- 1 2,487 Último mensaje 7 Abril 2013, 22:47 pm
por K4sS-
Duda Ejercicio básico java
Java
jpmarti91 0 2,859 Último mensaje 2 Octubre 2015, 16:14 pm
por jpmarti91
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines