Visual Basic.NET - Quien me puede asesorar con un error al momento de hacer un llamado a un sub programa visual basic

 
Vista:
Imágen de perfil de oswaldo
Val: 6
Ha aumentado su posición en 7 puestos en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Quien me puede asesorar con un error al momento de hacer un llamado a un sub programa visual basic

Publicado por oswaldo (3 intervenciones) el 04/10/2018 17:35:23
Buenas tardes muchachos estoy programando el juego de tic tac, en mi caso lo conozco como la vieja, tengo un inconveniente creo un sub programa que recibe unos datos por valor y una matriz por referencia, pero al momento de llamar al sub programa que coloco la matriz me sale el siguiente error No se puede convertir un valor de tipo '2-matriz dimensional de String' en '2-matriz dimensional de Integer' debido a que 'String' no se deriva de 'Integer', si alguien es tan amable de ayudarme dejare el código en la descripción para lo puedan observar

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
Module Module1
    Sub turnoj(ByVal turno As Integer, ByVal jugador1 As String, ByVal jugador2 As String, ByRef turnojugador As Integer, ByRef dato As String)
 
        jugador1 = "1"
        jugador2 = "2"
 
        If turno Mod 2 = 0 Then 'este if es el que controla de quien es el turno 
            turnojugador = jugador1
            dato = "x"
        Else
 
            turnojugador = jugador2
            dato = "o"
        End If
 
 
 
 
 
    End Sub
 
    Sub verificarpx(ByVal pos1 As Integer)
        Do While pos1 > 2 Or pos1 < 0 'comparo el valor que metieron en la coordenada para que no exceda de 3 y no sea menor que 1
            Console.WriteLine("Las posiciones deben ser entre 1 y 3")
            Console.WriteLine("Ingrese la posicion X de nuevo") 'esto es por si la posicion no es valida 
            pos1 = Console.ReadLine - 1 'resto 1 para que el valor que introduzca concuerde con el de la matriz
        Loop
    End Sub
 
    Sub verificarpy(ByVal pos2 As Integer)
        Do While pos2 > 2 Or pos2 < 0
            Console.WriteLine("Las posiciones deben ser entre 1 y 3")
            Console.WriteLine("Ingrese la posicion Y de nuevo")
            pos2 = Console.ReadLine - 1 'resto 1 para que el valor que introduzca concuerde con el de la matriz
        Loop
    End Sub
'A CONTINUACION ES EL SUBPROGRAMA QUE ESCRIBI Y QUE ME ARROJA EL ERROR 
 
    Sub posenuso(ByVal pos1 As Integer, ByVal pos2 As Integer, ByRef matriz(,) As Integer, ByRef contador As Integer)
        contador = 0
 
        If matriz(pos1, pos2) = "x" Then
            Console.WriteLine("La posicion ya esta en uso")
        ElseIf matriz(pos1, pos2) = "o" Then 'esto es por si la posicion ya esta en uso 
            Console.WriteLine("La posicion ya esta en uso")
        Else
            contador = contador + 1 'inicio el conteo para saber si nadie gana, eso sucede cuando contador llega a 9
        End If
    End Sub
 
 
 
 
    Sub Main()
 
        Console.BackgroundColor = ConsoleColor.Magenta 'cambiar el color de fondo de la pantalla
        Console.ForegroundColor = ConsoleColor.Black 'cambiar el fondo de las letras 
        Console.Clear()
        Dim k, j As Integer
        k = 3
        j = 3
        Dim jugador1 As String
        Dim jugador2 As String
        Dim aux As Integer = 0 'variables de ayuda 
        Dim turno As Integer
        Dim turnojugador As String = "1"
        Dim pos1, pos2 As Integer
        Dim matriz(k, j) As String 'declaramos la matriz cono string 
        Dim dato As String = "1"
        Dim contador As Integer
        Console.WriteLine("Juego creado por oswaldo suarez")
        Console.WriteLine()
 
        Console.WriteLine("Ingrese el nombre del jugador 1...")
        jugador1 = Console.ReadLine 'asignamos el nombre que escribio a una vairable 
        Console.WriteLine("Ingrese el nombre del jugador 2...")
        jugador2 = Console.ReadLine 'asignamos el nombre que escribio a una vairable 
        Console.WriteLine()
        Console.WriteLine("A continuacion podra ver las coordenadas para hacer su jugada")
        Console.WriteLine("- - - - - - -")
        Console.WriteLine("- 11 12 13  -")
        Console.WriteLine("- 21 22 23  -")
        Console.WriteLine("- 31 32 33  -")
        Console.WriteLine("- - - - - - -")
        Console.WriteLine()
        Console.WriteLine("Aprieta la tecla R para restaurar el juego")
        Console.WriteLine()
 
        Console.WriteLine("¡Inicio del Juego!")
 
        For pos1 = 0 To 2
            For pos2 = 0 To 2 'con este for hacemos que cada posicion de la matriz sea una linea 
                matriz(pos1, pos2) = "_"
            Next
        Next
 
 
        Do While aux = 0 'este do while va a hacer que se repita el turno 
            turnoj(turno, jugador1, jugador2, turnojugador, dato) 'sub programa para saber de quien es el turno
 
 
 
            Console.WriteLine()
            Console.WriteLine("Es el turno de " & turnojugador & " Ingresa la posicion que eliges.")
            Console.WriteLine("Posicion en X ?")
            pos1 = Console.ReadLine - 1 'aqui asignamos el valor en X 
            verificarpx(pos1) 'sub programa para verificar que los valores no excedan a 3 ni menor que 1
 
 
 
            Console.WriteLine("Posicion en Y ?") 'comparo el valor que metieron en la coordenada para que no exceda de 3 y no sea menor que 1
            pos2 = Console.ReadLine - 1 'aqui asignamos el valor en Y 
            verificarpy(pos2) 'sub programa para verificar que los valores no excedan a 3 ni menor que 1
 
 
            posenuso(pos1, pos2, matriz, contador) 'AQUI ES DONDE APARECE EL ERROR  CUANDO INSTRODUZCO LA MATRIZ
.
.
.
.
EL CODIGO CONTINUA YA LO HABIA PROBADO SIN HACER LA SUB RUTINA Y ME CORRIO PERFECTO, PERO QUERIA PROBAR HACIENDO ESE ARREGLO PARA PRACTICAR PERO ME ARROJA ESE ERROR
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil
Val: 56
Ha aumentado 1 puesto en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Quien me puede asesorar con un error al momento de hacer un llamado a un sub programa visual basic

Publicado por Jacob (46 intervenciones) el 04/10/2018 20:28:48
El error esta en el tipo de dato de la matriz que tomas como parámetro:

1
Sub posenuso(ByVal pos1 As Integer, ByVal pos2 As Integer, ByRef matriz(,) As Integer, ByRef contador As Integer)

ByRef matriz(,) As Integer aceptas una matriz bidimensional de Integer, luego tu matriz la declaras como una matriz bidimensional de tipo string:
1
Dim matriz(k, j) As String 'declaramos la matriz cono string

Supongo que los parámetros de la función deberían de ser de la siguiente forma:
1
Sub posenuso(ByVal pos1 As Integer, ByVal pos2 As Integer, ByRef matriz(,) As String, ByRef contador As Integer)

Espero y te sea de utilidad saludos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
Imágen de perfil de oswaldo
Val: 6
Ha aumentado su posición en 7 puestos en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Quien me puede asesorar con un error al momento de hacer un llamado a un sub programa visual basic

Publicado por oswaldo (3 intervenciones) el 04/10/2018 21:30:17
amigo si muchas gracias, no me habia dado cuenta
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 344
Bronce
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Quien me puede asesorar con un error al momento de hacer un llamado a un sub programa visual basic

Publicado por Miguel (281 intervenciones) el 04/10/2018 20:58:01
En la definición del mismo error es porque parce que tienes una matriz definida como string y la estas mezclando con datos integer y para hacer eso tendrías que pasar los enteros con un str(dato) por cada valor de la matriz que sea numérico. Nunca puedes declarar una matriz de caracteres string y luego trabajar con enteros.

Espero te aclare el problema al declarar la matriz de un tipo no puedes mezclar churras con merinas.

Un saludo
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
Imágen de perfil de oswaldo
Val: 6
Ha aumentado su posición en 7 puestos en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Quien me puede asesorar con un error al momento de hacer un llamado a un sub programa visual basic

Publicado por oswaldo (3 intervenciones) el 04/10/2018 21:30:30
amigo si muchas gracias, no me habia dado cuenta
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar