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, | |
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, | |
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, seleccionar los colores en Mostrar fichas. Para realizar movimientos, arrastrar la ficha que se encuentra hasta la posición de la inválido, se regresará comer y se mueve otra ficha en vez de comer, se va Gana el Jugador que haya comido todas las fichas con fichas pero sin oportunidad de Para seleccionar nuevas fichas o para iniciar un Seleccionar y luego clic en Sí. Eso | |
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 |