GroupBox3 | (Name) | GroupBox3 |
BackColor | Transparent | |
Font | Georgia, 12pt, style=Bold | |
ForeColor | Lime | |
Location | 33, 283 | |
Modifiers | Friend | |
Size | 268, 71 | |
TabIndex | 9 | |
Text | Turno de Movimiento | |
Visible | False | |
GroupBox1 | (Name) | GroupBox1 |
BackColor | Transparent | |
Font | Georgia, 12pt, style=Bold | |
ForeColor | Lime | |
Location | 33, 368 | |
Modifiers | Friend | |
Size | 268, 118 | |
TabIndex | 4 | |
Text | Colores del Tablero | |
Visible | False | |
GroupBox2 | (Name) | GroupBox2 |
BackColor | Transparent | |
Font | Georgia, 12pt, style=Bold | |
ForeColor | Lime | |
Location | 33, 494 | |
Modifiers | Friend | |
Size | 268, 182 | |
TabIndex | 5 | |
Text | Fichas | |
Visible | False | |
Label9 | (Name) | Label9 |
AutoSize | True | |
Font | Georgia, 12pt, style=Bold | |
ForeColor | Yellow | |
Location | 16, 29 | |
Modifiers | Friend | |
Size | 60, 18 | |
TabIndex | 2 | |
Text | Turno | |
TextBox1 | (Name) | TextBox1 |
AutoCompleteCustomSource | (Collection) | |
BackColor | AliceBlue | |
Lines | String[] Array | |
Location | 98, 29 | |
Modifiers | Friend | |
ReadOnly | True | |
Size | 153, 26 | |
TabIndex | 8 | |
Label3 | (Name) | Label3 |
AutoSize | True | |
Font | Georgia, 12pt, style=Bold | |
ForeColor | Yellow | |
Location | 16, 29 | |
Modifiers | Friend | |
Size | 66, 18 | |
TabIndex | 2 | |
Text | Color 1 | |
ComboBox1 | (Name) | ComboBox1 |
BackColor | Alice1 | |
FormattingEnabled | True | |
Items | (Collection) Azul Blanco Negro Rojo Verde | |
Location | 98, 26 | |
Modifiers | Friend | |
Size | 153, 26 | |
TabIndex | 1 | |
Label4 | (Name) | 4 |
AutoSize | True | |
Font | Georgia, 12pt, style=Bold | |
ForeColor | Yellow | |
Location | 18, 73 | |
Modifiers | Friend | |
Size | 67, 18 | |
TabIndex | 5 | |
ComboBox2 | (Name) | ComboBox2 |
BackColor | AliceBlue | |
FormattingEnabled | True | |
Items | (Collection) Azul Blanco Negro Rojo Verde | |
Location | 98, 73 | |
Modifiers | Friend | |
Size | 153, 26 | |
TabIndex | 5 | |
Label6 | (Name) | Label6 |
AutoSize | True | |
Font | Georgia, 12pt, style=Bold | |
ForeColor | Yellow | |
Location | 16, 29 | |
Modifiers | Friend | |
Size | 68, 18 | |
TabIndex | 2 | |
Text | Ficha 1 | |
ComboBox4 | (Name) | ComboBox4 |
BackColor | AliceBlue | |
Items | (Collection) Águila Blue Boar Ice Ale Cherry Coke Chucho Coca Cola Real Coca Cola Cream Soda Corona Extra Diana Diet Pepsi Dr Pepper Fanta Heineken Beer Hello Kitty Mirinda Nehi Grape Pepsi Red Scandinavian Pepsi Star Stars | |
Location | 87, 26 | |
Modifiers | Friend | |
Size | 171, 26 | |
TabIndex | 1 | |
Label5 | (Name) | Label5 |
AutoSize | True | |
Font | Georgia, 12pt, style=Bold | |
ForeColor | Yellow | |
Location | 16, 73 | |
Modifiers | Friend | |
Size | 69, 18 | |
TabIndex | 4 | |
Text | Ficha 2 | |
ComboBox3 | (Name) | ComboBox3 |
BackColor | AliceBlue | |
FormattingEnabled | True | |
Items | (Collection) Águila Blue Boar Ice Ale Cherry Coke Chucho Coca Cola Real Coca Cola Cream Soda Corona Extra Diana Diet Pepsi Dr Pepper Fanta Heineken Beer Hello Kitty Mirinda Nehi Grape Pepsi Red Scandinavian Pepsi Star Stars | |
Location | 87, 70 | |
Modifiers | Friend | |
Size | 171, 26 | |
TabIndex | 3 | |
Button1 | (Name) | Button1 |
BackgroundImage | System.Drawing.Bitmap | |
Font | Georgia, 12pt, style=Bold | |
ForeColor | Navy | |
Location | 64, 109 | |
Modifiers | Friend | |
Size | 137, 58 | |
TabIndex | 5 | |
Text | Seleccionar | |
UseVisualStyleBackColor | True | |
jugador1Label | (Name) | jugador1Label |
AutoSize | True | |
BackColor | Transparent | |
Font | Georgia, 12pt, style=Bold | |
ForeColor | Yellow | |
Location | 881, 31 | |
Modifiers | Friend | |
Size | 89, 18 | |
TabIndex | 10 | |
Text | Jugador 1 | |
Visible | False | |
jugador2Label | (Name) | jugador2Label |
AutoSize | True | |
BackColor | Transparent | |
Font | Georgia, 12pt, style=Bold | |
ForeColor | Yellow | |
Location | 879, 683 | |
Modifiers | Friend | |
Size | 90, 18 | |
TabIndex | 11 | |
Text | Jugador 2 | |
Visible | False | |
Label2 | (Name) | Label2 |
AutoSize | True | |
BackColor | Transparent | |
Font | Times New Roman, 14.25pt, style=Bold | |
ForeColor | Lime | |
Location | 601, 683 | |
Modifiers | Friends | |
Size | 105, 22 | |
TabIndex | 0 | |
Text | POSICIÓN | |
TextAlign | MiddleCenter | |
Visible | False | |
Panel3 | (Name) | Panel3 |
BackColor | Teal | |
Location | 347, 56 | |
Modifiers | Friend | |
Size | 620, 620 | |
Visible | False | |
MENUToolStripMenuItem | (Name) | MENUToolStripMenuItem |
DropDownItems | (Collection) MOSTRARTABLEROToolStripMenuItem COLORDELTABLEROToolStripMenuItem MOSTRARFICHASToolStripMenuItem ToolStripMenuItem1 SALIRToolStripMenuItem | |
Font | Microsoft Sans Serif, 9.75pt, style=Bold | |
ForeColor | Black | |
Modifiers | Friend | |
Size | 57, 20 | |
Text | Menú | |
MenuStrip1 | (Name) | MenuStrip1 |
Items | (Collection) MENUToolStripMenuItem | |
Location | 0, 0 | |
Modifiers | Friend | |
Size | 1009, 24 | |
TabIndex | 0 | |
Text | MenuStrip1 | |
ImageList1 | (Name) | ImageList1 |
Images | (Collection) 0 System.Drawing.Bitmap 1 System.Drawing.Bitmap 2 System.Drawing.Bitmap 3 System.Drawing.Bitmap 4 System.Drawing.Bitmap 5 System.Drawing.Bitmap 6 System.Drawing.Bitmap 7 System.Drawing.Bitmap 8 System.Drawing.Bitmap 9 System.Drawing.Bitmap 10 System.Drawing.Bitmap 11 System.Drawing.Bitmap 12 System.Drawing.Bitmap 13 System.Drawing.Bitmap 14 System.Drawing.Bitmap 15 System.Drawing.Bitmap 16 System.Drawing.Bitmap 17 System.Drawing.Bitmap 18 System.Drawing.Bitmap 19 System.Drawing.Bitmap 20 System.Drawing.Bitmap 21 jugador1.jpg 22 jugador2.jpg | |
ImageSize | 50, 50 | |
Modifiers | Friend | |
TransparentColor | Transparent | |
Timer1 | (Name) | Timer1 |
Interval | 10 | |
Modifiers | Friend | |
Timer2 | (Name) | Timer2 |
Interval | 500 | |
Modifiers | Friend |
OBJETO | PROPIEDAD | VALOR |
AyudaForm | (Name) | AyudaForm |
AutoScaleMode | Font | |
BackgroundImage | System.Drawing.Bitmap | |
FormBorderStyle | FixedSingle | |
MaximizeBox | False | |
Size | 795, 609 | |
StartPosition | CenterScreen | |
Text | AyudaForm | |
Label7 | (Name) | Label7 |
AutoSize | True | |
BackColor | Transparent | |
Font | Lucida Calligraphy, 24pt, style=Bold, Underline | |
ForeColor | Yellow | |
Location | 316, 36 | |
Modifiers | Friend | |
Size | 140, 41 | |
TabIndex | 8 | |
Text | Ayuda | |
Label1 | (Name) | Label1 |
AutoSize | True | |
BackColor | Transparent | |
Font | Georgia, 12pt, style=Bold | |
ForeColor | Yellow | |
Location | 21, 115 | |
Modifiers | Friend | |
Size | 778, 252 | |
TabIndex | 9 | |
Text | Para comenzar un juego, hacer clic en Menú, luego en Mostrar tablero, posteriormente seleccionar los colores del tablero deseados. A continuación dentro del Menú, hacer clic en Mostrar fichas. En Turno de Movimiento aparece el jugador al que le corresponde mover. Para realizar movimientos, arrastrar la ficha que se quiere mover desde la posición en la que se encuentra hasta la posición de la casilla hasta la que se quiere llevar. Si el movimiento es inválido, se regresará automáticamente la ficha a su posición inicial. Si hay oportunidad de comer y se mueve otra ficha en vez de comer, se va a "soplar" la ficha por no haber comido. Gana el Jugador que haya comido todas las fichas de su oponente o que deje al otro jugador con fichas pero sin oportunidad de mover. Para seleccionar nuevas fichas o para iniciar un nuevo juego, hacer clic en el botón Seleccionar y luego clic en Sí. Eso cancelará o terminará el juego actual que se tenga. | |
Label2 | (Name) | Label2 |
AutoSize | True | |
BackColor | Transparent | |
Font | Georgia, 15.75pt, style=Bold, Underline | |
ForeColor | Yellow | |
Location | 428, 435 | |
Modifiers | Friend | |
Size | 359, 75 | |
TabIndex | 10 | |
Text | Jaime Montoya webmaster[arroba]jaimemontoya.com www.jaimemontoya.com | |
CerrarButton | (Name) | CerrarButton |
BackgroundImage | System.Drawing.Bitmap | |
Font | Georgia, 12pt, style=Bold | |
ForeColor | Navy | |
Location | 143, 452 | |
Modifiers | Friend | |
Size | 137, 58 | |
TabIndex | 11 | |
Text | Cerrar |
EXPLORADOR DE SOLUCIONES
CÓDIGO DEL PROGRAMA
AyudaForm.vb
Public Class AyudaForm
Private Sub CerrarButton_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CerrarButton.Click
Me.Close() 'Cierra el Formulario AyudaForm.
End Sub
End Class
CASILLAS.vb
Public Class CASILLAS
Inherits Panel 'La clase CASILLAS va a heredar todos los atributos, variables, propiedades, procedimientos y eventos de la clase Panel. Si no se heredara la clase Panel, la clase CASILLAS no podría usar eventos, propiedades ni procedimientos de la clase Panel, como lo son los eventos MouseMove y MouseLeave; ni tampoco se podrían usar las propiedades Location, Left, Top, Size, y BackColor; así como tampoco sería posible usar el proedimiento BringToFront.
Public ocupada As Boolean 'Para determinar si encima de una casilla hay una ficha o no, es decir si es una casilla ocupada o no.
Public Shared color1, color2 As Color 'Se declaran dos variables de tipo Color, donde Color no es una clase sino que una estructura. Se le pone "Shared" porque si no se hiciera, al usar en el formulario por ejemplo "CASILLAS.color1 = Color.Blue" daría error diciendo que "La referencia a un miembro no compartido requiere una referencia de objeto." Entonces declarar una variable como "Shared" especifica que uno o varios elementos de programación declarados están asociados a una clase o estructura en general y no a una instancia específica de la clase o estructura.
Public Shared ficha1, ficha2 As Image 'Se declaran dos variables de tipo Image, donde Image es una clase.
Public jugador As Integer = 0
Private posicionx, posiciony As Integer
Private Pf, Pc As Integer
Private qf, qc As Integer
Public equipo As Integer = 0
Private x1, x2 As Panel
Private y1, y2 As Panel
Public Sub mouse_move(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles Me.MouseMove
For f = 0 To 7
For c = 0 To 7
If CType(sender, Panel).Location = casilla(f, c).Location Then
Form1.Label2.Visible = True
Form1.Label2.Text = "POSICION " & "(" & f & "," & c & ")"
End If
Next
Next
End Sub
Public Sub mouse_leave(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.MouseLeave
Form1.Label2.Visible = False
Form1.Label2.Text = ""
End Sub
Public Property Mcolor1() As Color
Get
Return color1
End Get
Set(ByVal x As Color)
color1 = x
End Set
End Property
Public Property Mcolor2() As Color
Get
Return color2
End Get
Set(ByVal x As Color)
color2 = x
End Set
End Property
Public Property Mequipo() As Integer
Get
Return equipo
End Get
Set(ByVal value As Integer)
equipo = value
End Set
End Property
End Class
CORONAS.vb
Public Class CORONAS
Inherits Panel
Private DX, DY As Integer
Private mover As Boolean
Private pos_x, pos_y As Integer
Private fila, columna As Integer 'fila almacena la fila de la posición al darse el evento mouse_down. columna almacena la columna de la posición al darse el evento mouse_up.
Public fila1, columna1 As Integer 'fila1 almacena la fila de la posición al darse el evento mouse_up. columna1 almacena la columna de la posición al darse el evento mouse_up. Aunque cuando se evalúen los procedimientos para comer doble y comer triple, éstas variables son actualizadas para determinar la posición actual de la ficha que se quiere evaluar que pueda comer doble o triple.
Private come As Boolean
Private clicfichajug1 As Boolean 'Variable paradeterminar si se hizo clic sobre una ficha del Jugador 1.
Private clicfichajug2 As Integer 'Variable para determinar si se hizo clic sobre una ficha del Jugador 2.
Public Sub mouse_down(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles Me.MouseDown
mover = True
'CType(sender, Panel).BorderStyle = Windows.Forms.BorderStyle.Fixed3D
CType(sender, Panel).BringToFront()
DX = e.X
DY = e.Y
pos_x = Me.Left
pos_y = Me.Top
'Se captura la fila y columna en que se encuentra.
For f = 0 To 7
For c = 0 To 7
If Me.Location.X >= casilla(f, c).Location.X And Me.Location.X <= casilla(f, c).Location.X + 75 And Me.Location.Y >= casilla(f, c).Location.Y And Me.Location.Y <= casilla(f, c).Location.Y + 75 Then
fila = f 'La variable "fila" almacena la fila del tablero donde se hizo clic (comenzando la cuenta de las filas desde 0 y de arriba hacia abajo).
columna = c 'La variable "columna" almacena la columna del tablero donde se hizo clic (comenzando la cuenta de las columnas desde 0 y de izquierda a derecha).
If casilla(f, c).jugador = 1 Then 'Si la casilla sobre la que se hizo clic tiene una ficha del Jugador 1.
clicfichajug1 = True
End If
If casilla(f, c).jugador = 2 Then
clicfichajug2 = True 'Si la casilla sobre la que se hizo clic tiene una ficha del Jugador 2.
End If
End If
Next
Next
End Sub
Public Sub mouse_up(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles Me.MouseUp
mover = False
CType(sender, Panel).BorderStyle = Windows.Forms.BorderStyle.None
'Se verifica si se encuentra adentro del tablero.
If Me.Location.X >= 357 And Me.Location.X <= 967 And Me.Location.Y >= 66 And Me.Location.Y <= 656 Then
Else
Me.Left = pos_x
Me.Top = pos_y
End If
'Se verifica si se encuentra en una casilla válida.
For f = 0 To 7
For c = 0 To 7
If Me.Location.X >= casilla(f, c).Location.X And Me.Location.X <= casilla(f, c).Location.X + 75 And Me.Location.Y >= casilla(f, c).Location.Y And Me.Location.Y <= casilla(f, c).Location.Y + 75 Then 'Gracias a los ciclos For anidados, se va a ir evaluando casilla por casilla con este If, definiedo las coordenadas para casa casilla, que son cuatro: izquierda, derecha, arriba y abajo. Donde aparece "+ 75" es porque a la coordenada de la izquierda se le agregan 75 pixeles y ya se tiene la coordenada del límite derecho de una casilla, y lo mismo para el caso del eje Y, que ya se tiene el límite superior de la casilla y al sumarle 75 pixeles se obtiene el límite inferior, pues en las coordenadas del formulario las Y positivas van contando hacia abajo.
fila1 = f 'La variable "fila1" almacena la fila del tablero donde se soltó el clic o donde se desea posicionar una ficha (comenzando la cuenta de las filas desde 0 y de arriba hacia abajo).
columna1 = c 'La variable "columna1" almacena la columna del tablero donde se soltó el clic o donde se desea posicionar una ficha (comenzando la cuenta de las columnas desde 0 y de izquierda a derecha).
End If
Next
Next
If (fila1 + columna1) Mod 2 = 0 Then 'Porque la primer ficha está en la posición (0, 0), (2,6), (3, 2), etc, es válido porque la suma de los subíndices da par. Entonces si la suma de los sunbíndices da impar, es porque en esas casillas nunca podría haber una ficha.
'Se verifica que no esté ocupada la casilla.
If casilla(fila1, columna1).ocupada = True Then 'Si la casilla está ocupada, se regresa a las coordenadas de donde venía cuando se dio el evento MouseDown.
Me.Left = pos_x
Me.Top = pos_y
Else 'Es porque la casilla no está ocupada.
'Se establecen los movimientos.
If turno = 1 Then 'Si el turno de mover es para el Jugador 1.
If clicfichajug1 = True Then 'Si con el evento mouse_down se ha determinado que se hizo clic sobre una ficha del Jugador 1.
mover1(CType(sender, Panel))
Else 'Si turno = 2.
Me.Left = pos_x
Me.Top = pos_y
End If
Else 'Si turno = 2, es decir, si el turno de mover es para el Jugador 2 y si sobre la ficha que se hizo clic le pertenece al Jugador 2.
If clicfichajug2 Then 'fila1 almacena la fila donde se quiere ubicar la ficha. fila almacena la fila donde se encontraba la ficha originalmente. Si fila1<fila significa que la fila destino es menor que la fila origen, es decir que se trata de un movimiento del Jugador 2 hacia adelante (hacia arriba en la pantalla). La segunda condición que se pone es que sobre la ficha que se hizo clic tiene que pertenecerle al Jugador 2. Esta línea equivale a escribir "If clicfichajug2 = True Then".
mover2(CType(sender, Panel))
Else
Me.Left = pos_x
Me.Top = pos_y
End If
End If
End If
'End If
Else 'Si la suma de los subíndices da impar, entonces la ficha se regresa a la posición en la que estaba cuando se dio el evento MouseDown, pues en estas casillas nunca podría estar una pieza, ya que los movimientos son siempre diagonales, entonces no hay manera de que queden piezas en casillas cuya suma de subíndices son impares.
Me.Left = pos_x
Me.Top = pos_y
End If
Form1.TextBox1.Text = "Jugador" + Str(turno) 'Para que cuando se suelte el clic del mouse, que aparezca en el TextBox1 a qué Jugador le corresponde el turno del siguiente movimiento.
'Se les da valor False a las siguientes 2 variables para que puedan volverse a poner en True solamente si cumplen la condición señalada en el evento mouse_down.
clicfichajug1 = False
clicfichajug2 = False
End Sub
Public Sub mouse_move(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles Me.MouseMove
If mover Then
Me.Left = e.X + Me.Left – DX
Me.Top = e.Y + Me.Top – DY
End If
End Sub
Public Sub mover1(ByVal sender As Panel)
'Para ubicarse en los movimientos, se hablará de Norte, Sur, Este y Oeste; donde uno se tiene que imaginar el tablero como si hubiera una brújula donde el Norte es arriba, el Sur es abajo, el Este es a la derecha y el Oeste es a la izquierda.
Dim i, j As Integer
If fila1 > fila Then 'fila1 contiene la fila a la que se quiere ir a poner la corona. fila contiene la fila donde estaba la corona. Debido a que esto está dentro del procedimiento es mover1(ByVal sender As Panel), ya se sabe que el movimiento es para el Jugador 1, entonces esta línea condiciona que el Jugador 1 mueve hacia adelante del Jugador 1 (hacia abajo en la pantalla); hacia el Sur.
If columna1 > columna Then 'columna1 contiene la columna a la que se quiere ir a poner la corona. columna contiene la columna donde estaba la corona. Debido a que esto está dentro del procedimiento mover1(ByVal sender As Panel), ya se sabe que el movimiento es para el Jugador 1, y a la vez por la línea anterior se sabe que el movimiento ha sido hacia adelante del Jugador 1 (hacia abajo en la pantalla), entonces esta línea condiciona que el Jugador 1 mueve hacia su izquierda (hacia la derecha en la pantalla); hacia el Este.
'Se sabe entonces que el movimiento ha sido diagonalmente hacia el Sureste.
'Declaración de variables que se utilizarán en el próximo ciclo For que aparece.
Dim numdefichas As Integer = 0 'Número de fichas que hay entre la casilla donde se va a poner la corona y la casilla donde estaba (al hacer el movimiento diagonal).
Dim numdefichasjug1 As Integer = 0 'Número de fichas del Jugador 1 que hay entre la casilla donde se va a poner la corona y la casilla donde estaba (al hacer el movimiento diagonal).
Dim numdefichasjug2 As Integer = 0 'Número de fichas del Jugador 2 que hay entre la casilla donde se va a poner la corona y la casilla donde estaba (al hacer el movimiento diagonal).
Dim ieliminar As Integer 'Valor de la fila a eliminar o comer.
Dim jeliminar As Integer 'Valor de la columna a eliminar o comer.
j = columna + 1
For i = fila + 1 To fila1
If casilla(i, j).ocupada = True Then 'Si la casilla evaluada está ocupada por alguna ficha.
numdefichas += 1 'Equivale a escribir "numdefichas = numdefichas + 1".
If casilla(i, j).jugador = 1 Then 'Si la casilla evaluada está ocupada por una ficha del Jugador 1.
numdefichasjug1 += 1 'Equivale a escribir "numdefichasjug1 = numdefichasjug1 + 1".
End If
If casilla(i, j).jugador = 2 Then 'Si la casilla evaluada está ocupada por una ficha del Jugador 2.
numdefichasjug2 += 1 'Equivale a escribir "numdefichasjug2 = numdefichasjug2 + 1".
'Se almacenan los valores de fila y columna de la ficha que se tendría que eliminar en caso de cumplirse condiciones que se evaluarán posteriormente.
ieliminar = i
jeliminar = j
End If
End If
j += 1 'Equivale a escribir "j = j + 1".
If j = 8 Then 'Esto es para que no se evalúe una columna que no existe, evitando que el programa se trabe.
Exit For 'Salida inmediata del ciclo For aunque no haya terminado el número de iteraciones que se le habían programado.
End If
Next
If columna – fila <> columna1 – fila1 Then 'Con esto se verifica si el movimiento no ha sido diagonal. Para que el movimiento haya sido diagonal (tomando en cuenta que ya se sabe que el movimiento es hacia el Sureste) se debe cumplir la siguiente ecuación: "columna – fila = columna1 – fila1". Por ejemplo, si la posición de inicio fue (4,0), la resta 0 – 4 da -4, entonces la posición destino (5,1) sería válida porque columna1+fila1=1-5=-4. Igualmente otras posiciones válidas para este ejemplo serían (6,2) y (7,3). Algunas posiciones inválidas para este mismo ejemplo serían (5,3), (6,6), (7,7), (7,5). Si no se cumple esta ecuación, el movimiento hacia el Sureste no sería diagonal y por lo tanto sería inválido. Por ello la corona se regresa a la posición inicial en que estaba.
Me.Left = pos_x
Me.Top = pos_y
Else 'Si el movimiento de la corona es válido (diagonalmente hacia el Sureste).
If numdefichas <= 1 Then 'Si hay 0 o 1 fichas entre la posición inicial y la posición final del movimiento diagonal que se quiere hacer.
If numdefichasjug1 = 0 Then
'Se efectúa el movimiento.
casilla(fila, columna).ocupada = False
casilla(fila1, columna1).ocupada = True
casilla(fila, columna).jugador = 0
casilla(fila1, columna1).jugador = 1
sender.Top = casilla(fila1, columna1).Top + 12.5
sender.Left = casilla(fila1, columna1).Left + 12.5
turno = 2 'Para que luego de efectuar este movimiento, que el turno sea para el Jugador 2.
End If
If numdefichasjug2 = 1 Then 'Si hay 1 ficha del Jugador 2 entre la posición inicial y la posición final del movimiento diagonal que se quiere hacer.
'Se efectúa el movimiento.
casilla(fila, columna).ocupada = False
casilla(fila1, columna1).ocupada = True
casilla(fila, columna).jugador = 0
casilla(fila1, columna1).jugador = 1
sender.Top = casilla(fila1, columna1).Top + 12.5
sender.Left = casilla(fila1, columna1).Left + 12.5
turno = 2 'Para que luego de efectuar este movimiento, que el turno sea para el Jugador 2.
comer1(ieliminar, jeliminar) 'Para quitar la ficha del otro equipo que ha sido comida por la corona.
End If
If numdefichasjug1 = 1 Then 'Si hay una ficha del Jugador 1 entre la posición inicial y la posición final del movimiento diagonal que se quiere hacer.
'Se devuelve la corona a la posición inicial y el movimiento no se realiza. Esto porque una corona no se puede saltar una ficha de su mismo equipo.
Me.Left = pos_x
Me.Top = pos_y
End If
Else 'Si hay más de una ficha entre la posición inicial y la posición final del movimiento diagonal que se quiere hacer.
'Se devuelve la corona a la posición inicial y el movimiento no se realiza.
Me.Left = pos_x
Me.Top = pos_y
End If
End If
End If
If columna1 < columna Then 'columna1 contiene la columna a la que se quiere ir a poner la corona. columna contiene la columna donde estaba la corona. Debido a que esto está dentro del procedimiento mover1(ByVal sender As Panel), ya se sabe que el movimiento es para el Jugador 1, y a la vez por la línea anterior se sabe que el movimiento ha sido hacia adelante del Jugador 1 (hacia abajo en la pantalla), entonces esta línea condiciona que el Jugador 1 mueve hacia su derecha (hacia la izquierda en la pantalla); hacia el Oeste.
'Se sabe entonces que el movimiento ha sido diagonalmente hacia el Suroeste.
'Declaración de variables que se utilizarán en el próximo ciclo For que aparece.
Dim numdefichas As Integer = 0 'Número de fichas que hay entre la casilla donde se va a poner la corona y la casilla donde estaba (al hacer el movimiento diagonal).
Dim numdefichasjug1 As Integer = 0 'Número de fichas del Jugador 1 que hay entre la casilla donde se va a poner la corona y la casilla donde estaba (al hacer el movimiento diagonal).
Dim numdefichasjug2 As Integer = 0 'Número de fichas del Jugador 2 que hay entre la casilla donde se va a poner la corona y la casilla donde estaba (al hacer el movimiento diagonal).
Dim ieliminar As Integer 'Valor de la fila a eliminar o comer.
Dim jeliminar As Integer 'Valor de la columna a eliminar o comer.
j = columna – 1
'Con el ciclo For presentado a continuación se van a evaluar las fichas que hay (si las hubiera) entre la posición inicial y la posición final del movimiento que se quiere hacer de la corona, para determinar si es posible el movimiento y si es posible también comer.
For i = fila + 1 To fila1
If casilla(i, j).ocupada = True Then 'Si la casilla evaluada está ocupada por alguna ficha.
numdefichas += 1 'Equivale a escribir "numdefichas = numdefichas + 1".
If casilla(i, j).jugador = 1 Then 'Si la casilla evaluada está ocupada por una ficha del Jugador 1.
numdefichasjug1 += 1 'Equivale a escribir "numdefichasjug1 = numdefichasjug1 + 1".
End If
If casilla(i, j).jugador = 2 Then 'Si la casilla evaluada está ocupada por una ficha del Jugador 2.
numdefichasjug2 += 1 'Equivale a escribir "numdefichasjug2 = numdefichasjug2 + 1".
'Se almacenan los valores de fila y columna de la ficha que se tendría que eliminar en caso de cumplirse condiciones que se evaluarán posteriormente.
ieliminar = i
jeliminar = j
End If
End If
j -= 1 'Equivale a escribir "j = j – 1".
If j = -1 Then 'Esto es para que no se evalúe una columna que no existe, evitando que el programa se trabe.
Exit For 'Salida inmediata del ciclo For aunque no haya terminado el número de iteraciones que se le habían programado.
End If
Página anterior | Volver al principio del trabajo | Página siguiente |