SlideShare una empresa de Scribd logo
Mi Web :http://programadorsantosrivera2030.blogspot.com/
Para ver trabajos similares o recibir información semanal sobre nuevas publicaciones,: http://programadorsantosrivera2030.blogspot.com/
Programación de un juego de damas en Visual
Basic 2012
Santos Nilo Rivera Luján- Mi web :http://programadorsantosrivera2030.blogspot.com/
Este programa está desarrollado en Microsoft Visual Basic 2012 utilizando las técnicas de la programación
orientada a objetos.
A continuación se muestran las impresiones de pantalla del programa en ejecución, así como también el
código completo del programa, el cual se encuentra lleno de comentarios para que los programadores que
lo deseen puedan estudiar el código, aprender de las técnicas de programación orientada a objetos que se
han utilizado y finalmente, si lo desean, modificar el código o utilizarlo para las aplicaciones que quieran.
Mi Web :http://programadorsantosrivera2030.blogspot.com/
Para ver trabajos similares o recibir información semanal sobre nuevas publicaciones,: http://programadorsantosrivera2030.blogspot.com/
IMPRESIONES DE PANTALLA DEL PROGRAMA EN EJECUCIÓN
Mi Web :http://programadorsantosrivera2030.blogspot.com/
Para ver trabajos similares o recibir información semanal sobre nuevas publicaciones,: http://programadorsantosrivera2030.blogspot.com/
Mi Web :http://programadorsantosrivera2030.blogspot.com/
Para ver trabajos similares o recibir información semanal sobre nuevas publicaciones,: http://programadorsantosrivera2030.blogspot.com/
Mi Web :http://programadorsantosrivera2030.blogspot.com/
Para ver trabajos similares o recibir información semanal sobre nuevas publicaciones,: http://programadorsantosrivera2030.blogspot.com/
Mi Web :http://programadorsantosrivera2030.blogspot.com/
Para ver trabajos similares o recibir información semanal sobre nuevas publicaciones,: http://programadorsantosrivera2030.blogspot.com/
Mi Web :http://programadorsantosrivera2030.blogspot.com/
Para ver trabajos similares o recibir información semanal sobre nuevas publicaciones,: http://programadorsantosrivera2030.blogspot.com/
Mi Web :http://programadorsantosrivera2030.blogspot.com/
Para ver trabajos similares o recibir información semanal sobre nuevas publicaciones,: http://programadorsantosrivera2030.blogspot.com/
Mi Web :http://programadorsantosrivera2030.blogspot.com/
Para ver trabajos similares o recibir información semanal sobre nuevas publicaciones,: http://programadorsantosrivera2030.blogspot.com/
Mi Web :http://programadorsantosrivera2030.blogspot.com/
Para ver trabajos similares o recibir información semanal sobre nuevas publicaciones,: http://programadorsantosrivera2030.blogspot.com/
Mi Web :http://programadorsantosrivera2030.blogspot.com/
Para ver trabajos similares o recibir información semanal sobre nuevas publicaciones,: http://programadorsantosrivera2030.blogspot.com/
OBJETOS DEL PROGRAMA
En tiempo de diseño, insertar los siguientes objetos con las propiedades que se muestran:
OBJETO PROPIEDAD VALOR
Form1 (Name) Form1
AutoScaleMode Font
BackColor Black
Mi Web :http://programadorsantosrivera2030.blogspot.com/
Para ver trabajos similares o recibir información semanal sobre nuevas publicaciones,: http://programadorsantosrivera2030.blogspot.com/
BackgroundImage System.Drawing.Bitmap
BackgroundImageLayout Stretch
Font Microsoft Sans Serif, 9.75pt, style=Bold
ForeColor White
FormBorderStyle FixedSingle
MainMenuStrip MenuStip1
MaximizeBox| False
Size 1015, 738
StartPosition CenterScreen
Text JUEGO DE DAMAS
Label7 (Name) Label7
Autosize True
BackColor Transparent
Font Lucida Calligraphy, 48pt, style=Bold
ForeColor Yellow
Location 29, 41
Modifiers Friend
Size 283, 249
TabIndex 6
Text Juego
de
Damas
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
Mi Web :http://programadorsantosrivera2030.blogspot.com/
Para ver trabajos similares o recibir información semanal sobre nuevas publicaciones,: http://programadorsantosrivera2030.blogspot.com/
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
Mi Web :http://programadorsantosrivera2030.blogspot.com/
Para ver trabajos similares o recibir información semanal sobre nuevas publicaciones,: http://programadorsantosrivera2030.blogspot.com/
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
Mi Web :http://programadorsantosrivera2030.blogspot.com/
Para ver trabajos similares o recibir información semanal sobre nuevas publicaciones,: http://programadorsantosrivera2030.blogspot.com/
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
Mi Web :http://programadorsantosrivera2030.blogspot.com/
Para ver trabajos similares o recibir información semanal sobre nuevas publicaciones,: http://programadorsantosrivera2030.blogspot.com/
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
Mi Web :http://programadorsantosrivera2030.blogspot.com/
Para ver trabajos similares o recibir información semanal sobre nuevas publicaciones,: http://programadorsantosrivera2030.blogspot.com/
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
Mi Web :http://programadorsantosrivera2030.blogspot.com/
Para ver trabajos similares o recibir información semanal sobre nuevas publicaciones,: http://programadorsantosrivera2030.blogspot.com/
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 Santos Nilo Rivera Lujan
Patrick_alesandro@hotmail.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
Mi Web :http://programadorsantosrivera2030.blogspot.com/
Para ver trabajos similares o recibir información semanal sobre nuevas publicaciones,: http://programadorsantosrivera2030.blogspot.com/
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
Mi Web :http://programadorsantosrivera2030.blogspot.com/
Para ver trabajos similares o recibir información semanal sobre nuevas publicaciones,: http://programadorsantosrivera2030.blogspot.com/
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
Mi Web :http://programadorsantosrivera2030.blogspot.com/
Para ver trabajos similares o recibir información semanal sobre nuevas publicaciones,: http://programadorsantosrivera2030.blogspot.com/
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
Mi Web :http://programadorsantosrivera2030.blogspot.com/
Para ver trabajos similares o recibir información semanal sobre nuevas publicaciones,: http://programadorsantosrivera2030.blogspot.com/
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.
Mi Web :http://programadorsantosrivera2030.blogspot.com/
Para ver trabajos similares o recibir información semanal sobre nuevas publicaciones,: http://programadorsantosrivera2030.blogspot.com/
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
Mi Web :http://programadorsantosrivera2030.blogspot.com/
Para ver trabajos similares o recibir información semanal sobre nuevas publicaciones,: http://programadorsantosrivera2030.blogspot.com/
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
Mi Web :http://programadorsantosrivera2030.blogspot.com/
Para ver trabajos similares o recibir información semanal sobre nuevas publicaciones,: http://programadorsantosrivera2030.blogspot.com/
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
Next
If fila + columna <> fila1 + columna1 Then 'Con esto se verifica si el movimiento no ha sido
diagonal, pues por ejemplo si la corona estuviera originalmente en la posición (0, 6), la suma de la fila más
la columna da 6; entonces la suma de los subíndices de la posición destino deben sumar 6 para asegurar
que el movimiento fue diagonal, por ejemplo: (1, 5), (2, 4), (3, 3), (4, 2), (5, 1) y (6, 0) son movimientos
diagonales válidos hacia el Suroeste. Si la posición destino tuviera los subíndices (3, 5), (5, 5), (7, 5), (5, 3),
(7, 1), (3, 1) y (1, 3) por ejemplo, la suma de los subíndices de la posición destino no da 6 (que es la suma
de los subíndices de la posición de origen para este ejemplo), por lo tanto, el movimiento no habría sido
diagonal y sería inválido. Si el movimiento no fue válido (fue hacia el Suroeste pero no fue un movimiento
diagonal), la corona se regresará 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 Noroeste).
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.
Mi Web :http://programadorsantosrivera2030.blogspot.com/
Para ver trabajos similares o recibir información semanal sobre nuevas publicaciones,: http://programadorsantosrivera2030.blogspot.com/
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
End If
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 atrás del Jugador 1 (hacia arriba en la pantalla); hacia el Norte
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 atrás Jugador 1 (hacia arriba 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 Noroeste.
'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).
Mi Web :http://programadorsantosrivera2030.blogspot.com/
Para ver trabajos similares o recibir información semanal sobre nuevas publicaciones,: http://programadorsantosrivera2030.blogspot.com/
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 = columna1
'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 = fila1 To fila - 1
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 fila + columna <> fila1 + columna1 + ((columna - columna1) * 2) 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 Noroeste) se debe cumplir la siguiente ecuación: "fila + columna = fila +
columna + ((columna - columna1) * 2)". Por ejemplo, si la posición de inicio fue (7,7), la suma de esos
subíndices es 14, entonces la posición destino (6,6) sería válida porque fila1+columna2+((columna-
columna1)*2)=6+6+((7-6)*2)=14. Igualmente otras posiciones válidas para este ejemplo serían (5,5), (4,4),
(3,3), (2,2). Algunas posiciones inválidas para este mismo ejemplo serían (7,5), (7,3), (6,0), (4,0), (3,1), (2,0).
Si no se cumple esta ecuación, el movimiento hacia el Noroeste 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 Noroeste).
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.
Mi Web :http://programadorsantosrivera2030.blogspot.com/
Para ver trabajos similares o recibir información semanal sobre nuevas publicaciones,: http://programadorsantosrivera2030.blogspot.com/
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 atrás del Jugador 1 (hacia arriba 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 Noreste.
'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 = columna1
'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 = fila1 To fila - 1
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
Mi Web :http://programadorsantosrivera2030.blogspot.com/
Para ver trabajos similares o recibir información semanal sobre nuevas publicaciones,: http://programadorsantosrivera2030.blogspot.com/
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
Next
If fila + columna <> fila1 + columna1 Then 'Con esto se verifica si el movimiento no ha sido
diagonal, pues por ejemplo si la corona estuviera originalmente en la posición (7, 1), la suma de la fila más
la columna da 8; entonces la suma de los subíndices de la posición destino deben sumar 8 para asegurar
que el movimiento fue diagonal, por ejemplo: (6, 2), (5, 3), (4, 4), (3, 5) y (2, 6) son movimientos diagonales
válidos hacia el Noreste. Si la posición destino tuviera los subíndices (4, 2), (3, 3), (5, 5) o (4, 6) por ejemplo,
la suma de los subíndices de la posición destino no da 8 (que es la suma de los subíndices de la posición
de origen para este ejemplo), por lo tanto, el movimiento no habría sido diagonal y sería inválido. Si el
movimiento no fue válido (fue hacia el Noreste pero no fue un movimiento diagonal), la corona se regresará
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 Noreste).
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
Mi Web :http://programadorsantosrivera2030.blogspot.com/
Para ver trabajos similares o recibir información semanal sobre nuevas publicaciones,: http://programadorsantosrivera2030.blogspot.com/
Me.Top = pos_y
End If
End If
End If
End If
'Si los movimientos no son diagonales sino que rectos, la corona se devuelve a su posición inicial o de
origen.
If columna = columna1 Then
Me.Left = pos_x
Me.Top = pos_y
End If
If fila1 = fila Then
Me.Left = pos_x
Me.Top = pos_y
End If
End Sub
Public Sub mover2(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 mover2(ByVal sender As Panel), ya
se sabe que el movimiento es para el Jugador 2, entonces esta línea condiciona que el Jugador 2 mueve
hacia atrás del Jugador 2 (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
mover2(ByVal sender As Panel), ya se sabe que el movimiento es para el Jugador 2, y a la vez por la línea
anterior se sabe que el movimiento ha sido hacia adelante del Jugador 2 (hacia abajo en la pantalla),
entonces esta línea condiciona que el Jugador 2 mueve hacia su derecha (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".
'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
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".
End If
End If
Mi Web :http://programadorsantosrivera2030.blogspot.com/
Para ver trabajos similares o recibir información semanal sobre nuevas publicaciones,: http://programadorsantosrivera2030.blogspot.com/
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 numdefichasjug2 = 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 = 2
sender.Top = casilla(fila1, columna1).Top + 12.5
sender.Left = casilla(fila1, columna1).Left + 12.5
turno = 1 'Para que luego de efectuar este movimiento, que el turno sea para el Jugador 1.
End If
If numdefichasjug1 = 1 Then 'Si hay 1 ficha del Jugador 1 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 = 2
sender.Top = casilla(fila1, columna1).Top + 12.5
sender.Left = casilla(fila1, columna1).Left + 12.5
turno = 1 'Para que luego de efectuar este movimiento, que el turno sea para el Jugador 1.
comer1(ieliminar, jeliminar) 'Para quitar la ficha del otro equipo que ha sido comida por la
corona.
End If
If numdefichasjug2 = 1 Then 'Si hay una ficha del Jugador 2 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
Mi Web :http://programadorsantosrivera2030.blogspot.com/
Para ver trabajos similares o recibir información semanal sobre nuevas publicaciones,: http://programadorsantosrivera2030.blogspot.com/
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
mover2(ByVal sender As Panel), ya se sabe que el movimiento es para el Jugador 2, y a la vez por la línea
anterior se sabe que el movimiento ha sido hacia adelante del Jugador 2 (hacia arriba en la pantalla),
entonces esta línea condiciona que el Jugador 2 mueve hacia su izquierda (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".
'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
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".
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
Next
If fila + columna <> fila1 + columna1 Then 'Con esto se verifica si el movimiento no ha sido
diagonal, pues por ejemplo si la corona estuviera originalmente en la posición (0, 6), la suma de la fila más
la columna da 6; entonces la suma de los subíndices de la posición destino deben sumar 6 para asegurar
que el movimiento fue diagonal, por ejemplo: (1, 5), (2, 4), (3, 3), (4, 2), (5, 1) y (6, 0) son movimientos
diagonales válidos hacia el Suroeste. Si la posición destino tuviera los subíndices (3, 5), (5, 5), (7, 5), (5, 3),
(7, 1), (3, 1) y (1, 3) por ejemplo, la suma de los subíndices de la posición destino no da 6 (que es la suma
de los subíndices de la posición de origen para este ejemplo), por lo tanto, el movimiento no habría sido
diagonal y sería inválido. Si el movimiento no fue válido (fue hacia el Suroeste pero no fue un movimiento
diagonal), la corona se regresará 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 Noroeste).
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 numdefichasjug2 = 0 Then
Mi Web :http://programadorsantosrivera2030.blogspot.com/
Para ver trabajos similares o recibir información semanal sobre nuevas publicaciones,: http://programadorsantosrivera2030.blogspot.com/
'Se efectúa el movimiento.
casilla(fila, columna).ocupada = False
casilla(fila1, columna1).ocupada = True
casilla(fila, columna).jugador = 0
casilla(fila1, columna1).jugador = 2
sender.Top = casilla(fila1, columna1).Top + 12.5
sender.Left = casilla(fila1, columna1).Left + 12.5
turno = 1 'Para que luego de efectuar este movimiento, que el turno sea para el Jugador 1.
End If
If numdefichasjug1 = 1 Then 'Si hay 1 ficha del Jugador 1 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 = 2
sender.Top = casilla(fila1, columna1).Top + 12.5
sender.Left = casilla(fila1, columna1).Left + 12.5
turno = 1 'Para que luego de efectuar este movimiento, que el turno sea para el Jugador 1.
comer1(ieliminar, jeliminar) 'Para quitar la ficha del otro equipo que ha sido comida por la
corona.
End If
If numdefichasjug2 = 1 Then 'Si hay una ficha del Jugador 2 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
End If
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 mover2(ByVal sender As Panel), ya
se sabe que el movimiento es para el Jugador 2, entonces esta línea condiciona que el Jugador 2 mueve
hacia adelante del Jugador 2 (hacia arriba en la pantalla); hacia el Norte.
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
mover2(ByVal sender As Panel), ya se sabe que el movimiento es para el Jugador 2, y a la vez por la línea
anterior se sabe que el movimiento ha sido hacia adelante del Jugador 2 (hacia arriba en la pantalla),
entonces esta línea condiciona que el Jugador 2 mueve hacia su izquierda (hacia la izquierda en la
pantalla); hacia el Oeste.
'Se sabe entonces que el movimiento ha sido diagonalmente hacia el Noroeste.
'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.
Mi Web :http://programadorsantosrivera2030.blogspot.com/
Para ver trabajos similares o recibir información semanal sobre nuevas publicaciones,: http://programadorsantosrivera2030.blogspot.com/
j = columna1
'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 = fila1 To fila - 1
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".
'Se almacenan los valores de fila y columna de la ficha que se tendría que eliminar en casi
de cumplirse condiciones que se evaluarán posteriormente.
ieliminar = i
jeliminar = j
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".
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 fila + columna <> fila1 + columna1 + ((columna - columna1) * 2) 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 Noroeste) se debe cumplir la siguiente ecuación: "fila + columna = fila +
columna + ((columna - columna1) * 2)". Por ejemplo, si la posición de inicio fue (7,7), la suma de esos
subíndices es 14, entonces la posición destino (6,6) sería válida porque fila1+columna2+((columna-
columna1)*2)=6+6+((7-6)*2)=14. Igualmente otras posiciones válidas para este ejemplo serían (5,5), (4,4),
(3,3), (2,2). Algunas posiciones inválidas para este mismo ejemplo serían (7,5), (7,3), (6,0), (4,0), (3,1), (2,0).
Si no se cumple esta ecuación, el movimiento hacia el Noroeste 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 Noroeste).
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 numdefichasjug2 = 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 = 2
sender.Top = casilla(fila1, columna1).Top + 12.5
sender.Left = casilla(fila1, columna1).Left + 12.5
turno = 1 'Para que luego de efectuar este movimiento, que el turno sea para el Jugador 1.
End If
If numdefichasjug1 = 1 Then 'Si hay 1 ficha del Jugador 1 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 = 2
Mi Web :http://programadorsantosrivera2030.blogspot.com/
Para ver trabajos similares o recibir información semanal sobre nuevas publicaciones,: http://programadorsantosrivera2030.blogspot.com/
sender.Top = casilla(fila1, columna1).Top + 12.5
sender.Left = casilla(fila1, columna1).Left + 12.5
turno = 1 'Para que luego de efectuar este movimiento, que el turno sea para el Jugador 1.
comer1(ieliminar, jeliminar) 'Para quitar la ficha del otro equipo que ha sido comida por la
corona.
End If
If numdefichasjug2 = 1 Then 'Si hay una ficha del Jugador 2 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
mover2(ByVal sender As Panel), ya se sabe que el movimiento es para el Jugador 2, y a la vez por la línea
anterior se sabe que el movimiento ha sido hacia adelante del Jugador 2 (hacia arriba en la pantalla),
entonces esta línea condiciona que el Jugador 2 mueve hacia su derecha (hacia la derecha en la pantalla);
hacia el Este.
'Se sabe entonces que el movimiento ha sido diagonalmente hacia el Noreste.
'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 = columna1
'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 = fila1 To fila - 1
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".
'Se almacenan los valores de fila y columna de la ficha que se tendría que eliminar en casi
de cumplirse condiciones que se evaluarán posteriormente.
ieliminar = i
jeliminar = j
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".
End If
End If
j -= 1 'Equivale a escribir "j = j - 1".
Mi Web :http://programadorsantosrivera2030.blogspot.com/
Para ver trabajos similares o recibir información semanal sobre nuevas publicaciones,: http://programadorsantosrivera2030.blogspot.com/
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
Next
If fila + columna <> fila1 + columna1 Then 'Con esto se verifica si el movimiento no ha sido
diagonal, pues por ejemplo si la corona estuviera originalmente en la posición (7, 1), la suma de la fila más
la columna da 8; entonces la suma de los subíndices de la posición destino deben sumar 8 para asegurar
que el movimiento fue diagonal, por ejemplo: (6, 2), (5, 3), (4, 4), (3, 5) y (2, 6) son movimientos diagonales
válidos hacia el Noreste. Si la posición destino tuviera los subíndices (4, 2), (3, 3), (5, 5) o (4, 6) por ejemplo,
la suma de los subíndices de la posición destino no da 8 (que es la suma de los subíndices de la posición
de origen para este ejemplo), por lo tanto, el movimiento no habría sido diagonal y sería inválido. Si el
movimiento no fue válido (fue hacia el Noreste pero no fue un movimiento diagonal), la corona se regresará
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 Noreste).
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 numdefichasjug2 = 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 = 2
sender.Top = casilla(fila1, columna1).Top + 12.5
sender.Left = casilla(fila1, columna1).Left + 12.5
turno = 1 'Para que luego de efectuar este movimiento, que el turno sea para el Jugador 1.
End If
If numdefichasjug1 = 1 Then 'Si hay 1 ficha del Jugador 1 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 = 2
sender.Top = casilla(fila1, columna1).Top + 12.5
sender.Left = casilla(fila1, columna1).Left + 12.5
turno = 1 'Para que luego de efectuar este movimiento, que el turno sea para el Jugador 1.
comer1(ieliminar, jeliminar) 'Para quitar la ficha del otro equipo que ha sido comida por la
corona.
End If
If numdefichasjug2 = 1 Then 'Si hay una ficha del Jugador 2 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
Mi Web :http://programadorsantosrivera2030.blogspot.com/
Para ver trabajos similares o recibir información semanal sobre nuevas publicaciones,: http://programadorsantosrivera2030.blogspot.com/
End If
'Si los movimientos no son diagonales sino que rectos, la corona se devuelve a su posición inicial o de
origen.
If columna = columna1 Then
Me.Left = pos_x
Me.Top = pos_y
End If
If fila1 = fila Then
Me.Left = pos_x
Me.Top = pos_y
End If
End Sub
Public Sub comer1(ByVal i As Integer, ByVal j As Integer)
'En el módulo PRINCIPAL se ha declarado "Public casilla(7, 7) As CASILLAS", por lo cual la variable
casillas(indice1, indice2) se encuentra disponible en cualquier parte.
casilla(i, j).ocupada = False 'La casilla donde estaba la pieza que acaba de ser comida, se pone en
False para hacer que se encuentre desocupada.
casilla(i, j).jugador = 0 'Ningún Jugador tendrá ficha en esta casilla porque acaba de ser comida.
casilla(i, j).BringToFront() 'La casilla que fue desocupada con la línea anterior se trae al frente, pues si
no se hiciera esto se seguiría viendo la ficha que fue comida. Con esta línea se hace que la ficha comida
quede abajo y que no se vea porque se le pone encima la casilla sin ninguna pieza.
End Sub
End Class
FICHAS.vb
Public Class FICHAS
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
Public si As Integer = 0 'Variable que cuando vale 1 significa que fue posible realizar un movimiento, ya
sea simplemente mover una ficha o comer.
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
Mi Web :http://programadorsantosrivera2030.blogspot.com/
Para ver trabajos similares o recibir información semanal sobre nuevas publicaciones,: http://programadorsantosrivera2030.blogspot.com/
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
si = 0 'Inicialmente se pone esta variable en 0 para indicar que ningún movimiento ha sido todavía
posible. Si en el procedimiento mover1(CType(sender, Panel)) o en el procedimiento mover2(CType(sender,
Panel)) esta variable cambia a tener valor de 1, entonces podrán crearse coronas.
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 pieza.
'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.
Mi Web :http://programadorsantosrivera2030.blogspot.com/
Para ver trabajos similares o recibir información semanal sobre nuevas publicaciones,: http://programadorsantosrivera2030.blogspot.com/
If turno = 1 Then 'Si el turno de mover es para el Jugador 1.
If fila1 > fila And clicfichajug1 = True And (fila1 - fila <= 2) 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 mayor que la fila origen, es decir que se trata de un movimiento del Jugador 1 hacia
adelante (hacia abajo en la pantalla). La segunda condición que se pone es que sobre la ficha que se hizo
clic tiene que pertenecerle al Jugador 1. La última condición es para que la ficha no trate de avanzar tres
filas o más (pues se puede avanzar solamente una fila o dos como máximo al comer).
mover1(CType(sender, Panel))
If si = 1 Then 'Si fue posible efectuar el movimiento, ya sea mover una ficha o comer.
If fila1 = 7 Then 'Porque la posición hacia donde quieren mover las fichas que vienen de
arriba hacia abajo (Jugador 1) es la final de hasta abajo del tablero (fila 8), y es un movimiento válido, lo
cual significa que una ficha se corona.
cposx = CType(sender, Panel).Left
cposy = CType(sender, Panel).Top
CType(sender, Panel).Visible = False
crear_corona1()
End If
End If
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 (fila1 < fila) And clicfichajug2 And (fila - fila1 <= 2) 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. La última condición es para que la ficha no trate de avanzar tres filas o más
(pues se puede avanzar solamente una fila o dos como máximo al comer).
mover2(CType(sender, Panel))
If si = 1 Then 'Si fue posible realizar el movimiento, ya sea mover una ficha o comer.
If fila1 = 0 Then 'Porque la posición hacia donde quieren mover las fichas que vienen de
abajo hacia arriba (Jugador 2) es la final de hasta arriba del tablero (fila 1), y es un movimiento válido, lo
cual significa que una ficha se corona.
cposx = CType(sender, Panel).Left
cposy = CType(sender, Panel).Top
CType(sender, Panel).Visible = False
crear_corona2()
End If
End If
Else
Me.Left = pos_x
Me.Top = pos_y
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.
Mi Web :http://programadorsantosrivera2030.blogspot.com/
Para ver trabajos similares o recibir información semanal sobre nuevas publicaciones,: http://programadorsantosrivera2030.blogspot.com/
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 'Equivale a escribir "If mover = True Then". mover = True al ejecutar el evento
mouse_down; y mover = False al ejecutar el evento mouse_up.
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) 'Debido a las condiciones dadas en el código antes de llamar
este procedimiento, se sabe que cuando haya sido llamado, el Jugador 1 está haciendo un movimiento
hacia adelante (hacia abajo en la pantalla), pero hace falta evaluar cuántas posiciones se va a desplazar
diagonalmente hacia la derecha o hacia la izquierda, y así saber si el movimiento es válido o no, y si se
puede hacer el movimiento, dependiendo de si hay una ficha o no, o si es posible comer, etc.
If columna1 > columna Then 'Si el movimiento es diagonalmente hacia la derecha de la pantalla
(izquierda del Jugador 1).
'Si el Jugador 1 mueve diagonalmente una posición hacia la derecha de la pantalla (una posición
hacia la izquierda del Jugador 1).
If columna1 = columna + 1 Then
If casilla(fila1, columna1).ocupada = False Then
If fila1 = soplarfila1 + 1 And columna1 = soplarcolumna1 + 1 And soplar1 = True Then 'Si se
tenía que soplar debido a que en vez de comer, el Jugador 1 movió una posición diagonalmente hacia la
derecha de la pantalla con la ficha que tenía la posibilidad de comer.
'La pieza se regresa a la posición en la que estaba.
Me.Left = pos_x
Me.Top = pos_y
'La pieza que ha sido regresada a la posición en la que estaba con las líneas anteriores, es
soplada por no haber comido cuando tenía que hacerlo.
comer1(soplarfila1, soplarcolumna1) 'Se quita esta ficha del tablero y se deja la casilla vacía.
si = 1 'Indica que sí fue posible realizar el movimiento de la ficha.
turno = 2 'Para que luego de efectuar este movimiento, que el turno sea para el Jugador 2.
Else 'Si el movimiento de una posición diagonalmente hacia la derecha no fue por parte de una
ficha que tenía que comer (y por lo tanto no tiene que ser soplada).
If soplar1 = True Then 'Si hay alguna ficha del Jugador 1 que se tiene que soplar por no
haber comido cuando tuvo la oportunidad.
comer1(soplarfila1, soplarcolumna1) 'Se quita esta ficha del tablero y se deja la casilla
vacía.
'Para que se ponga en posición de soplar una casilla en donde nunca podría haber una
ficha.
soplarfila1 = 0
soplarcolumna1 = 1
soplar1 = False 'Porque se acaba de soplar ya.
End If
casilla(fila, columna).ocupada = False 'Desaparece la ficha de donde estaba porque va a
ponerse en otra casilla.
casilla(fila1, columna1).ocupada = True 'Se pone la ficha en la nueva casilla, pues se movió
de donde estaba.
casilla(fila, columna).jugador = 0 '0 para indicar que en esta casilla no está la ficha de ningún
Jugador.
casilla(fila1, columna1).jugador = 1 '1 para indicar que en esta casilla está una ficha del
Jugador 1.
sender.Top = casilla(fila1, columna1).Top + 12.5
sender.Left = casilla(fila1, columna1).Left + 12.5
si = 1 'Indica que sí fue posible realizar el movimiento de la ficha.
turno = 2 'Para que luego de efectuar este movimiento, que el turno sea para el Jugador 2.
End If
Mi Web :http://programadorsantosrivera2030.blogspot.com/
Para ver trabajos similares o recibir información semanal sobre nuevas publicaciones,: http://programadorsantosrivera2030.blogspot.com/
Else 'La ficha se devuelve a la posición de origen, pues no se pudo efectuar un movimiento de
una posición hacia la derecha de la pantalla (izquierda del Jugador 1).
Me.Left = pos_x
Me.Top = pos_y
End If
'Si el Jugador 1 mueve diagonalmente dos posiciones para comer a la derecha de la pantalla (dos
posiciones hacia la izquierda del Jugador 1).
ElseIf columna1 = columna + 2 Then
If casilla(fila + 1, columna + 1).ocupada = False Then 'No puede moverse dos posiciones si no hay
una pieza del otro equipo de por medio para comérsela, entonces se regresa la ficha a la posición en donde
estaba.
Me.Left = pos_x
Me.Top = pos_y
Else 'Hay una ficha de por medio, entonces podría darse el movimiento de comer, pero si se
cumple la condición de que esa ficha sea del otro equipo.
If casilla(fila + 1, columna + 1).jugador = 2 Then 'Si la ficha que hay de por medio es del
Jugador 2 (y sabiendo que el Jugador 1 es el que quiere hacer este movimiento), entonces se puede comer
la pieza y efectuar el movimiento.
If casilla(fila1, columna1).ocupada = False Then 'Si la posición destino (donde se quiere
poner la ficha) está desocupada.
casilla(fila, columna).ocupada = False 'Se quita la ficha de donde estaba originalmente.
casilla(fila1, columna1).ocupada = True 'Se pone la ficha en la posición de destino.
casilla(fila, columna).jugador = 0 '0 porque en estarán fichas de ningún Jugador.
casilla(fila1, columna1).jugador = 1
sender.Top = casilla(fila1, columna1).Top + 12.5
sender.Left = casilla(fila1, columna1).Left + 12.5
comer1(fila + 1, columna + 1) 'Se quita la ficha que intermedia entre la posición origen y la
posición destino, es decir que ésta ficha es comida.
comerdoble1(CType(sender, Panel)) 'Se llama al procedimiento para verificar si se puede
comer doble.
si = 1 'Indica que sí fue posible realizar el movimiento de la ficha.
turno = 2 'Para que luego de efectuar este movimiento, que el turno sea para el Jugador 2.
Else 'La ficha se devuelve a la posición de origen, pues no se pudo efectuar un movimiento
de dos posiciones hacia la derecha de la pantalla (izquierda del Jugador 1).
Me.Left = pos_x
Me.Top = pos_y
End If
Else 'Si la ficha que hay de por medio es del Jugador 1, el movimiento es inválido porque un
Jugador no puede comerse sus mismas piezas, entonces la pieza regresa a la posición en la que estaba y
el movimiento no se puede hacer efectivo.
Me.Left = pos_x
Me.Top = pos_y
End If
End If
Else 'Si el Jugador 1 mueve diagonalmente tres o más posiciones hacia la derecha de la pantalla
(tres o más posiciones hacia la izquierda del Jugador 1). En este caso, la ficha se vuelve a la posición de
origen en la que estaba y el movimiento no se hace efectivo porque solamente una reina podría mover de
esa manera, moviéndose tres o más espacios en diagonal.
Me.Left = pos_x
Me.Top = pos_y
End If
End If
If columna1 < columna Then 'Si el movimiento es diagonalmente hacia la izquierda de la pantalla
(derecha del Jugador 1).
'Si el Jugador 1 mueve diagonalmente una posición hacia la izquierda de la pantalla (una posición
hacia la derecha del Jugador 1).
If columna1 = columna - 1 Then
If casilla(fila1, columna1).ocupada = False Then
Mi Web :http://programadorsantosrivera2030.blogspot.com/
Para ver trabajos similares o recibir información semanal sobre nuevas publicaciones,: http://programadorsantosrivera2030.blogspot.com/
If fila1 = soplarfila1 + 1 And columna1 = soplarcolumna1 - 1 And soplar1 = True Then 'Si se
tenía que soplar debido a que en vez de comer, el Jugador 1 movió una posición diagonalmente hacia la
izquierda de la pantalla con la ficha que tenía la posibilidad de comer.
'La pieza se regresa a la posición en la que estaba.
Me.Left = pos_x
Me.Top = pos_y
'La pieza que ha sido regresada a la posición en la que estaba con las líneas anteriores, es
soplada por no haber comido cuando tenía que hacerlo.
comer1(soplarfila1, soplarcolumna1) 'Se quita esta ficha del tablero y se deja la casilla vacía.
si = 1 'Indica que sí fue posible realizar el movimiento de la ficha.
turno = 2 'Para que luego de efectuar este movimiento, que el turno sea para el Jugador 2.
Else 'Si el movimiento de una posición diagonalmente hacia la izquierda no fue por parte de una
ficha que tenía que comer (y por lo tanto no tiene que ser soplada).
If soplar1 = True Then 'Si hay alguna ficha del Jugador 1 que se tiene que soplar por no
haber comido cuando tuvo la oportunidad.
'MsgBox("Se soplará la ficha del Jugador 1" + " que se encuentra en la fila " +
Str(soplarfila1 + 1) + " y columna " + Str(soplarcolumna1 + 1) + ".", MsgBoxStyle.OkOnly, "Juego de
Damas") 'Mensaje para indicar la ficha que se va a soplar.
comer1(soplarfila1, soplarcolumna1) 'Se sopla la ficha que no comió cuando tuvo la
oportunidad.
'Para que se ponga en posición de soplar una casilla en donde nunca podría haber una
ficha.
soplarfila1 = 7
soplarcolumna1 = 0
soplar1 = False 'Porque se acaba de soplar ya.
End If
casilla(fila, columna).ocupada = False 'Desaparece la ficha de donde estaba porque va a
ponerse en otra casilla.
casilla(fila1, columna1).ocupada = True 'Se pone la ficha en la nueva casilla, pues se movió
de donde estaba.
casilla(fila, columna).jugador = 0 '0 para indicar que en esta casilla no está la ficha de ningún
Jugador.
casilla(fila1, columna1).jugador = 1 '1 para indicar que en esta casilla está una ficha del
Jugador 1.
sender.Top = casilla(fila1, columna1).Top + 12.5
sender.Left = casilla(fila1, columna1).Left + 12.5
si = 1 'Indica que sí fue posible realizar el movimiento de la ficha.
turno = 2 'Para que luego de efectuar este movimiento, que el turno sea para el Jugador 2.
End If
Else 'La ficha se devuelve a la posición de origen, pues no se pudo efectuar un movimiento de
una posición hacia la izquierda de la pantalla (derecha del Jugador 1).
Me.Left = pos_x
Me.Top = pos_y
End If
'Si el Jugador 1 mueve diagonalmente dos posiciones para comer a la izquierda de la pantalla
(dos posiciones hacia la derecha del Jugador 1).
ElseIf columna1 = columna - 2 Then 'No puede moverse dos posiciones si no hay una pieza del otro
equipo de por medio para comérsela, entonces se regresa la ficha a la posición en donde estaba.
If casilla(fila + 1, columna - 1).ocupada = False Then
Me.Left = pos_x
Me.Top = pos_y
Else 'Hay una ficha de por medio, entonces podría darse el movimiento de comer, pero si se
cumple la condición de que esa ficha sea del otro equipo.
If casilla(fila + 1, columna - 1).jugador = 2 Then 'Si la ficha que hay de por medio es del Jugador
2 (y sabiendo que el Jugador 1 es el que quiere hacer este movimiento), entonces se puede comer la pieza
y efectuar el movimiento.
If casilla(fila1, columna1).ocupada = False Then 'Si la posición destino (donde se quiere
poner la ficha) está desocupada.
Mi Web :http://programadorsantosrivera2030.blogspot.com/
Para ver trabajos similares o recibir información semanal sobre nuevas publicaciones,: http://programadorsantosrivera2030.blogspot.com/
casilla(fila, columna).ocupada = False 'Se quita la ficha de donde estaba originalmente.
casilla(fila1, columna1).ocupada = True 'Se pone la ficha en la posición de destino.
casilla(fila, columna).jugador = 0 '0 para indicar que en esta casilla no está la ficha de
ningún Jugador.
casilla(fila1, columna1).jugador = 1 '1 para indicar que en esta casilla está una ficha del
Jugador 1.
sender.Top = casilla(fila1, columna1).Top + 12.5
sender.Left = casilla(fila1, columna1).Left + 12.5
comer1(fila + 1, columna - 1) 'Se quita la ficha que intermedia entre la posición origen y la
posición destino, es decir que ésta ficho es comida.
comerdoble1(CType(sender, Panel)) 'Se llama al procedimiento para verificar si se puede
comer doble.
si = 1 'Indica que sí fue posible realizar el movimiento de la ficha.
turno = 2 'Para que luego de efectuar este movimiento, que el turno sea para el Jugador 2.
Else 'La ficha se devuelve a la posición de origen, pues no se pudo efectuar un movimiento
de dos posiciones hacia la izquierda de la pantalla (derecha del Jugador 1).
Me.Left = pos_x
Me.Top = pos_y
End If
Else 'Si la ficha que hay de por medio es del Jugador 1, el movimiento es inválido porque un
Jugador no puede comerse sus mismas piezas, entonces la pieza regresa a la posición en la que estaba y
el movimiento no se puede hacer efectivo.
Me.Left = pos_x
Me.Top = pos_y
End If
End If
Else 'Si el Jugador 1 mueve diagonalmente tres o más posiciones hacia la izquierda de la pantalla
(tres o más posiciones hacia la derecha del Jugador 1). En este caso, la ficha se vuelve a la posición de
origen en la que estaba y el movimiento no se hace efectivo porque solamente una reina podría mover de
esa manera, moviéndose tres o más espacios en diagonal.
Me.Left = pos_x
Me.Top = pos_y
End If
End If
If columna = columna1 Then 'Esto es inválido, pues no las piezas se deben mover en diagonal, y esto
sería como que el Jugador 1 quisiera mover hacia el frente o hacia adelante en línea recta (hacia abajo de
la pantalla pero recto, no diagonal, como se mueven las torres o las reinas en el ajedrez. Por lo tanto la
pieza se regresa a su posición inicial y no se hace efectivo el movimiento.
Me.Left = pos_x
Me.Top = pos_y
End If
End Sub
Public Sub mover2(ByVal sender As Panel) 'Debido a las condiciones dadas en el código antes de llamar
este procedimiento, se sabe que cuando haya sido llamado, el Jugador 2 está haciendo un movimiento
hacia adelante (hacia arriba en la pantalla), pero hace falta evaluar cuántas posiciones se va a desplazar
diagonalmente hacia la derecha o hacia la izquierda, y así saber si el movimiento es válido o no, y si se
puede hacer el movimiento, dependiendo de si hay una ficha o no, o si es posible comer, etc.
If columna1 > columna Then 'Si el movimiento es diagonalmente hacia la derecha de la pantalla
(derecha del Jugador 2).
'Si el Jugador 2 mueve diagonalmente una posición hacia la derecha de la pantalla (una posición
hacia la derecha del Jugador 2).
If columna1 = columna + 1 Then
If casilla(fila1, columna1).ocupada = False Then
If fila1 = soplarfila2 - 1 And columna1 = soplarcolumna2 + 1 And soplar2 = True Then 'Si se
tenía que soplar debido a que en vez de comer, el Jugador 2 movió una posición diagonalmente hacia la
derecha de la pantalla con la ficha que tenía la posibilidad de comer.
'La pieza se regresa a la posición en la que estaba.
Me.Left = pos_x
Mi Web :http://programadorsantosrivera2030.blogspot.com/
Para ver trabajos similares o recibir información semanal sobre nuevas publicaciones,: http://programadorsantosrivera2030.blogspot.com/
Me.Top = pos_y
'La pieza que ha sido regresada a la posición en la que estaba con las líneas anteriores, es
soplada por no haber comido cuando tenía que hacerlo.
comer1(soplarfila2, soplarcolumna2) 'Se quita esta ficha del tablero y se deja la casilla vacía.
si = 1 'Indica que sí fue posible realizar el movimiento de la ficha.
turno = 1 'Para que luego de efectuar este movimiento, que el turno sea para el Jugador 1.
Else 'Si el movimiento de una posición diagonalmente hacia la derecha no fue por parte de una
ficha que tenía que comer (y por lo tanto no tiene que ser soplada).
If soplar2 = True Then 'Si hay alguna ficha del Jugador 2 que se tiene que soplar por no
haber comido cuando tuvo la oportunidad.
comer1(soplarfila2, soplarcolumna2) 'Se sopla la ficha que no comió cuando tuvo la
oportunidad de hacerlo.
'Para que se ponga en posición de soplar una casilla en donde nunca podría haber una
ficha.
soplarfila2 = 7
soplarcolumna2 = 0
soplar2 = False 'Porque se acaba de soplar ya.
End If
casilla(fila, columna).ocupada = False 'Desaparece la ficha de donde estaba porque va a
ponerse en otra casilla.
casilla(fila1, columna1).ocupada = True 'Se pone la ficha en la nueva casilla, pues se movió
de donde estaba.
casilla(fila, columna).jugador = 0 '0 para indicar que en esta casilla no está la ficha de ningún
Jugador.
casilla(fila1, columna1).jugador = 2 '1 para indicar que en esta casilla está una ficha del
Jugador 2.
sender.Top = casilla(fila1, columna1).Top + 12.5
sender.Left = casilla(fila1, columna1).Left + 12.5
si = 1 'Indica que sí fue posible realizar el movimiento de la ficha.
turno = 1 'Para que luego de efectuar este movimiento, que el turno sea para el Jugador 1.
End If
Else 'La ficha se devuelve a la posición de origen, pues no se pudo efectuar un movimiento de
una posición hacia la derecha de la pantalla (derecha del Jugador 2).
Me.Left = pos_x
Me.Top = pos_y
End If
'Si el Jugador 2 mueve diagonalmente dos posiciones para comer a la derecha de la pantalla (dos
posiciones hacia la derecha del Jugador 2).
ElseIf columna1 = columna + 2 Then
If casilla(fila - 1, columna + 1).ocupada = False Then 'No puede moverse dos posiciones si no hay
una pieza del otro equipo de por medio para comérsela, entonces se regresa la ficha a la posición en donde
estaba.
Me.Left = pos_x
Me.Top = pos_y
Else 'Hay una ficha de por medio, entonces podría darse el movimiento de comer, pero si se
cumple la condición de que esa ficha sea del otro equipo.
If casilla(fila - 1, columna + 1).jugador = 1 Then 'Si la ficha que hay de por medio es del Jugador
1 (y sabiendo que el Jugador 2 es el que quiere hacer este movimiento), entonces se puede comer la pieza
y efectuar el movimiento.
If casilla(fila1, columna1).ocupada = False Then 'Si la posición destino (donde se quiere
poner la ficha) está desocupada.
casilla(fila, columna).ocupada = False 'Se quita la ficha de donde estaba originalmente.
casilla(fila1, columna1).ocupada = True 'Se pone la ficha en la posición de destino.
casilla(fila, columna).jugador = 0 '0 para indicar que en esta casilla no está la ficha de
ningún Jugador.
casilla(fila1, columna1).jugador = 2 '1 para indicar que en esta casilla está una ficha del
Jugador 2.
sender.Top = casilla(fila1, columna1).Top + 12.5
Mi Web :http://programadorsantosrivera2030.blogspot.com/
Para ver trabajos similares o recibir información semanal sobre nuevas publicaciones,: http://programadorsantosrivera2030.blogspot.com/
sender.Left = casilla(fila1, columna1).Left + 12.5
comer1(fila - 1, columna + 1) 'Se quita la ficha que intermedia entre la posición origen y la
posición destino, es decir que ésta ficha es comida.
comerdoble2(CType(sender, Panel)) 'Se llama al procedimiento para verificar si se puede
comer doble.
si = 1 'Indica que sí fue posible realizar el movimiento de la ficha.
turno = 1 'Para que luego de efectuar este movimiento, que el turno sea para el Jugador 1.
Else 'La ficha se devuelve a la posición de origen, pues no se pudo efectuar un movimiento
diagonal de dos posiciones hacia la derecha de la pantalla (derecha del Jugador 2).
Me.Left = pos_x
Me.Top = pos_y
End If
Else 'Si la ficha que hay de por medio es del Jugador 2, el movimiento es inválido porque un
Jugador no puede comerse sus mismas piezas, entonces la pieza regresa a la posición en la que estaba y
el movimiento no se puede hacer efectivo.
Me.Left = pos_x
Me.Top = pos_y
End If
End If
Else 'Si el Jugador 2 mueve diagonalmente tres o más posiciones hacia la derecha de la pantalla
(tres o más posiciones hacia la derecha del Jugador 2). En este caso, la ficha se vuelve a la posición de
origen en la que estaba y el movimiento no se hace efectivo porque solamente una reina podría mover de
esa manera, moviéndose tres o más espacios en diagonal.
Me.Left = pos_x
Me.Top = pos_y
End If
End If
If columna1 < columna Then 'Si el movimiento es diagonalmente hacia la izquierda de la pantalla
(izquierda del Jugador 2).
'Si el Jugador 2 mueve diagonalmente una posición hacia la izquierda de la pantalla (una posición
hacia la izquierda del Jugador 2).
If columna1 = columna - 1 Then
If casilla(fila1, columna1).ocupada = False Then
If fila1 = soplarfila2 - 1 And columna1 = soplarcolumna2 - 1 And soplar2 = True Then 'Si se
tenía que soplar debido a que en vez de comer, el Jugador 2 movió una posición diagonalmente hacia la
izquierda de la pantalla con la ficha que tenía la posibilidad de comer.
'La pieza se regresa a la posición en la que estaba.
Me.Left = pos_x
Me.Top = pos_y
'La pieza que ha sido regresada a la posición en la que estaba con las líneas anteriores, es
soplada por no haber comido cuando tenía que hacerlo.
comer1(soplarfila2, soplarcolumna2) 'Se quita esta ficha del tablero y se deja la casilla vacía.
si = 1 'Indica que sí fue posible realizar el movimiento de la ficha.
turno = 1 'Para que luego de efectuar este movimiento, que el turno sea para el Jugador 1.
Else 'Si el movimiento de una posición diagonalmente hacia la izquierda no fue por parte de una
ficha que tenía que comer (y por lo tanto no tiene que ser soplada).
If soplar2 = True Then 'Si hay alguna ficha del Jugador 2 que se tiene que soplar por no
haber comido cuando tuvo la oportunidad.
comer1(soplarfila2, soplarcolumna2) 'Se sopla la ficha que no comió cuando tuvo la
oportunidad.
'Para que se ponga en posición de soplar una casilla en donde nunca podría haber una
ficha.
soplarfila1 = 7
soplarcolumna1 = 0
soplar2 = False 'Porque se acaba de soplar ya.
End If
casilla(fila, columna).ocupada = False 'Desaparece la ficha de donde estaba porque va a
ponerse en otra casilla.
Mi Web :http://programadorsantosrivera2030.blogspot.com/
Para ver trabajos similares o recibir información semanal sobre nuevas publicaciones,: http://programadorsantosrivera2030.blogspot.com/
casilla(fila1, columna1).ocupada = True 'Se pone la ficha en la nueva casilla, pues se movió
de donde estaba.
casilla(fila, columna).jugador = 0 '0 para indicar que en esta casilla no está la ficha de ningún
Jugador.
casilla(fila1, columna1).jugador = 2 '1 para indicar que en esta casilla está una ficha del
Jugador 2.
sender.Top = casilla(fila1, columna1).Top + 12.5
sender.Left = casilla(fila1, columna1).Left + 12.5
si = 1 'Indica que sí fue posible realizar el movimiento de la ficha.
turno = 1 'Para que luego de efectuar este movimiento, que el turno sea para el Jugador 1.
End If
Else 'La ficha se devuelve a la posición de origen, pues no se pudo efectuar un movimiento de
una posición hacia la izquierda de la pantalla (izquierda del Jugador 2).
Me.Left = pos_x
Me.Top = pos_y
End If
'Si el Jugador 2 mueve diagonalmente dos posiciones para comer a la izquierda de la pantalla
(dos posiciones hacia la izquierda del Jugador 2).
ElseIf columna1 = columna - 2 Then
If casilla(fila - 1, columna - 1).ocupada = False Then 'No puede moverse dos posiciones si no hay
una pieza del otro equipo de por medio para comérsela, entonces se regresa la ficha a la posición en donde
estaba.
Me.Left = pos_x
Me.Top = pos_y
Else 'Hay una ficha de por medio, entonces podría darse el movimiento de comer, pero si se
cumple la condición de que esa ficha sea del otro equipo.
If casilla(fila - 1, columna - 1).jugador = 1 Then 'Si la ficha que hay de por medio es del Jugador
1 (y sabiendo que el Jugador 2 es el que quiere hacer este movimiento), entonces se puede comer la pieza
y efectuar el movimiento.
If casilla(fila1, columna1).ocupada = False Then 'Si la posición destino (donde se quiere
poner la ficha) está desocupada.
casilla(fila, columna).ocupada = False 'Se quita la ficha de donde estaba originalmente.
casilla(fila1, columna1).ocupada = True 'Se pone la ficha en la posición de destino.
casilla(fila, columna).jugador = 0 '0 para indicar que en esta casilla no está la ficha de
ningún Jugador.
casilla(fila1, columna1).jugador = 2 '1 para indicar que en esta casilla está una ficha del
Jugador 2.
sender.Top = casilla(fila1, columna1).Top + 12.5
sender.Left = casilla(fila1, columna1).Left + 12.5
comer1(fila - 1, columna - 1) 'Se quita la ficha que intermedia entre la posición origen y la
posición destino, es decir que ésta ficha es comida.
comerdoble2(CType(sender, Panel)) 'Se llama al procedimiento para verificar si se puede
comer doble.
si = 1 'Indica que sí fue posible realizar el movimiento de la ficha.
turno = 1 'Para que luego de efectuar este movimiento, que el turno sea para el Jugador 1.
Else 'La ficha se devuelve a la posición de origen, pues no se pudo efectuar un movimiento
diagonal de dos posiciones hacia la izquierda de la pantalla (izquierda del Jugador 2).
Me.Left = pos_x
Me.Top = pos_y
End If
Else 'Si la ficha que hay de por medio es del Jugador 2, el movimiento es inválido porque un
Jugador no puede comerse sus mismas piezas, entonces la pieza regresa a la posición en la que estaba y
el movimiento no se puede hacer efectivo.
Me.Left = pos_x
Me.Top = pos_y
End If
End If
Mi Web :http://programadorsantosrivera2030.blogspot.com/
Para ver trabajos similares o recibir información semanal sobre nuevas publicaciones,: http://programadorsantosrivera2030.blogspot.com/
Else 'Si el Jugador 2 mueve diagonalmente tres o más posiciones hacia la izquierda de la pantalla
(tres o más posiciones hacia la izquierda del Jugador 2). En este caso, la ficha se vuelve a la posición de
origen en la que estaba y el movimiento no se hace efectivo porque solamente una reina podría mover de
esa manera, moviéndose tres o más espacios en diagonal.
Me.Left = pos_x
Me.Top = pos_y
End If
End If
If columna = columna1 Then 'Esto es inválido, pues no las piezas se deben mover en diagonal, y esto
sería como que el Jugador 1 quisiera mover hacia el frente o hacia adelante en línea recta (hacia arriba de
la pantalla pero recto, no diagonal, como se mueven las torres o las reinas en el ajedrez. Por lo tanto la
pieza se regresa a su posición inicial y no se hace efectivo el movimiento.
Me.Left = pos_x
Me.Top = pos_y
End If
End Sub
Public Sub comer1(ByVal i As Integer, ByVal j As Integer) 'Este procedimiento requiere de dos
argumentos, que representan la casilla que se va a dejar sin nada después de comerse la ficha que estaba
ahí.
'En el módulo PRINCIPAL se ha declarado "Public casilla(7, 7) As CASILLAS", por lo cual la variable
casillas(indice1, indice2) se encuentra disponible en cualquier parte.
casilla(i, j).ocupada = False 'La casilla donde estaba la pieza que acaba de ser comida, se pone en
False para hacer que se encuentre desocupada.
casilla(i, j).jugador = 0 'Ningún Jugador tendrá ficha en esta casilla porque acaba de ser comida.
casilla(i, j).BringToFront() 'La casilla que fue desocupada con la línea anterior se trae al frente, pues si
no se hiciera esto se seguiría viendo la ficha que fue comida. Con esta línea se hace que la ficha comida
quede abajo y que no se vea porque se le pone encima la casilla sin ninguna pieza.
End Sub
Private Sub InitializeComponent()
Me.SuspendLayout()
Me.ResumeLayout(False)
End Sub
Private Sub comerdoble1(ByVal sender As Panel) 'Procedimiento para que cuando el Jugador 1 haya
comido una ficha, evaluar si hay oportunidad para que esa ficha siga comiendo (comer doble).
Dim variablemensaje = 0
If fila1 < 6 Then 'Ese 6 equivale a decir fila 7 (pues el subíndice 0 es la fila 1). Esta condición se hace
porque desde la fila 7 o desde la fila 8 (contando filas de arriba hacia abajo) ya no puede comer el Jugador
1, entonces en las evaluaciones daría problema el código con los subíndices, pues buscaría posiciones que
no existen.
If soplar1 = True Then
'Dim mensaje As Integer 'Variable que almacenará el valor devuelto por la función MsgBox().
'Para Jugador 1, comer hacia su derecha (izquierda de la pantalla).
If columna1 > 1 Then
If casilla(fila1 + 1, columna1 - 1).jugador = 2 Then
If casilla(fila1 + 2, columna1 - 2).ocupada = False Then
MsgBox("Se debe seguir comiendo.", MsgBoxStyle.OkOnly, "Juego de Damas") 'Mensaje
para indicar que se debe seguir comiendo.
'If mensaje = 0 Then 'La función MsgBox devuelve un valor, el cual ha sido almacenado en
la variable "mensaje". Los valores devueltos pueden ser 1, 2, 3, 4, 5, 6 o 7. El valor 6 significa que se ha
hecho clic en el botón Yes.
casilla(fila1, columna1).ocupada = False
casilla(fila1 + 2, columna1 - 2).ocupada = True
casilla(fila1, columna1).jugador = 0
casilla(fila1 + 2, columna1 - 2).jugador = 1
sender.Top = casilla(fila1 + 2, columna1 - 2).Top + 12.5
sender.Left = casilla(fila1 + 2, columna1 - 2).Left + 12.5
comer1(fila1 + 1, columna1 - 1)
variablemensaje += 1
Mi Web :http://programadorsantosrivera2030.blogspot.com/
Para ver trabajos similares o recibir información semanal sobre nuevas publicaciones,: http://programadorsantosrivera2030.blogspot.com/
'Código para comer triple (si fuera posible).
posibilidad_soplar() 'Actualizar valores y determinar si hay posibilidad de comer una
tercera vez (que le soplen la ficha si no come) para el Jugador 1, luego de haber comido doble.
If (soplarfila1 = fila1 + 2) And (soplarcolumna1 = columna1 - 2) And (soplar1 = True) Then
'Si la ficha del Jugador 1 que acaba de terminar de comer doble tiene posibilidad de seguir comiendo o de
comer triple (pues las variables la tienen amenazada de ser soplada).
'If soplar1 = True Then
'fila1 = soplarfila1 'Para que luego de haber comido doble, que la posición de las filas se
actualice a la fila donde se encuentra la ficha luego de haber comido doble.
'columna1 = soplarcolumna1 'Actualizar el valor de la columna donde se encuentra la
ficha que acaba de comer doble, para que cuando se llame el procedimiento comertriple1(CType(sender,
Panel)), que se tenga el valor actualizado de la columna donde se encuentra la ficha del Jugador 1 que
acaba de comer doble.
comertriple1(CType(sender, Panel)) 'Se llama al procedimiento para verificar si el
Jugador 1 puede seguir comiendo (comer triple).
End If
'Condición para controlar si con la comida doble la ficha se llega a coronar.
If fila1 = 5 Then
fila1 = 7 'Cuando una ficha del Jugador 1 está en la fila 8 (contando filas de arriba hacia
abajo), se corona.
End If
End If
End If
End If
'Para Jugador 1, comer hacia su izquierda (derecha de la pantalla).
If variablemensaje = 0 Then 'Para que si ya comió doble con el If anterior, que ya no entre a este
If.
If columna1 < 6 Then
If casilla(fila1 + 1, columna1 + 1).jugador = 2 Then
If casilla(fila1 + 2, columna1 + 2).ocupada = False Then
MsgBox("Se debe seguir comiendo.", MsgBoxStyle.OkOnly, "Juego de Damas")
'Mensaje para indicar que se debe seguir comiendo.
casilla(fila1, columna1).ocupada = False
casilla(fila1 + 2, columna1 + 2).ocupada = True
casilla(fila1, columna1).jugador = 0
casilla(fila1 + 2, columna1 + 2).jugador = 1
sender.Top = casilla(fila1 + 2, columna1 + 2).Top + 12.5
sender.Left = casilla(fila1 + 2, columna1 + 2).Left + 12.5
comer1(fila1 + 1, columna1 + 1)
'Código para comer triple (si fuera posible).
posibilidad_soplar() 'Actualizar valores y determinar si hay posibilidad de comer una
tercera vez (que le soplen la ficha si no come) para el Jugador 1, luego de haber comido doble.
If fila1 + 2 = soplarfila1 And columna1 + 2 = soplarcolumna1 And soplar1 = True Then
'Si la ficha del Jugador 1 que acaba de terminar de comer doble tiene posibilidad de seguir comiendo o de
comer triple (pues las variables la tienen amenazada de ser soplada).
comertriple1(CType(sender, Panel)) 'Se llama al procedimiento para verificar si el
Jugador 1 puede seguir comiendo (comer triple).
End If
'Condición para controlar si con la comida doble la ficha se llega a coronar.
If fila1 = 5 Then
fila1 = 7 'Cuando una ficha del Jugador 1 está en la fila 8 (contando filas de arriba
hacia abajo), se corona.
End If
End If
End If
End If
End If
End If
Mi Web :http://programadorsantosrivera2030.blogspot.com/
Para ver trabajos similares o recibir información semanal sobre nuevas publicaciones,: http://programadorsantosrivera2030.blogspot.com/
End If
variablemensaje = 0 'Se reinicia en 0 esta variable, que sirve para que solamente se entre a uno de los
If anteriores para comer doble, no a los dos, pues o se come a la izquierda o se come a la derecha, pues no
se puede comer a ambos lados en un solo movimiento.
End Sub
Private Sub comerdoble2(ByVal sender As Panel) 'Procedimiento para que cuando el Jugador 2 haya
comido una ficha, evaluar si hay oportunidad para que esa ficha siga comiendo (comer doble).
Dim variablemensaje = 0
If fila1 > 1 Then 'Ese 1 equivale a decir fila 2 (pues el subíndice 0 es la fila 1). Esta condición se hace
porque desde la fila 0 o desde la fila 1 (contando filas de arriba hacia abajo) ya no puede comer el Jugador
2, entonces en las evaluaciones daría problema el código con los subíndices, pues buscaría posiciones que
no existen.
If soplar2 = True Then
'Para Jugador 2, comer hacia su izquierda (izquierda de la pantalla).
If columna1 > 1 Then
If casilla(fila1 - 1, columna1 - 1).jugador = 1 Then
If casilla(fila1 - 2, columna1 - 2).ocupada = False Then
MsgBox("Se debe seguir comiendo.", MsgBoxStyle.OkOnly, "Juego de Damas") 'Mensaje
para indicar que se debe seguir comiendo.
casilla(fila1, columna1).ocupada = False
casilla(fila1 - 2, columna1 - 2).ocupada = True
casilla(fila1, columna1).jugador = 0
casilla(fila1 - 2, columna1 - 2).jugador = 2
sender.Top = casilla(fila1 - 2, columna1 - 2).Top + 12.5
sender.Left = casilla(fila1 - 2, columna1 - 2).Left + 12.5
comer1(fila1 - 1, columna1 - 1)
variablemensaje += 1
'Código para comer triple (si fuera posible).
posibilidad_soplar() 'Actualizar valores y determinar si hay posibilidad de comer una
tercera vez (que le soplen la ficha si no come) para el Jugador 2, luego de haber comido doble.
If fila1 - 2 = soplarfila2 And columna1 - 2 = soplarcolumna2 And soplar2 = True Then 'Si la
ficha del Jugador 2 que acaba de terminar de comer doble tiene posibilidad de seguir comiendo o de comer
triple (pues las variables la tienen amenazada de ser soplada).
comertriple2(CType(sender, Panel)) 'Se llama al procedimiento para verificar si el
Jugador 1 puede seguir comiendo (comer triple).
End If
'Condición para controlar si con la comida doble la ficha se llega a coronar.
If fila1 = 2 Then
fila1 = 0 'Cuando una ficha del Jugador 2 está en la fila 1 (contando filas de arriba hacia
abajo), se corona.
End If
End If
End If
End If
'Para Jugador 2, comer hacia su derecha (derecha de la pantalla).
If variablemensaje = 0 Then 'Para que si ya comió doble con el If anterior, que ya no entre a este
If.
If columna1 < 6 Then
If casilla(fila1 - 1, columna1 + 1).jugador = 1 Then
If casilla(fila1 - 2, columna1 + 2).ocupada = False Then
MsgBox("Se debe seguir comiendo.", MsgBoxStyle.OkOnly, "Juego de Damas")
'Mensaje para indicar que se debe seguir comiendo.
casilla(fila1, columna1).ocupada = False
casilla(fila1 - 2, columna1 + 2).ocupada = True
casilla(fila1, columna1).jugador = 0
casilla(fila1 - 2, columna1 + 2).jugador = 2
sender.Top = casilla(fila1 - 2, columna1 + 2).Top + 12.5
sender.Left = casilla(fila1 - 2, columna1 + 2).Left + 12.5
Mi Web :http://programadorsantosrivera2030.blogspot.com/
Para ver trabajos similares o recibir información semanal sobre nuevas publicaciones,: http://programadorsantosrivera2030.blogspot.com/
comer1(fila1 - 1, columna1 + 1)
'Código para comer triple (si fuera posible).
posibilidad_soplar() 'Actualizar valores y determinar si hay posibilidad de comer una
tercera vez (que le soplen la ficha si no come) para el Jugador 1, luego de haber comido doble.
If fila1 - 2 = soplarfila2 And columna1 + 2 = soplarcolumna2 And soplar2 = True Then 'Si
la ficha del Jugador 2 que acaba de terminar de comer doble tiene posibilidad de seguir comiendo o de
comer triple (pues las variables la tienen amenazada de ser soplada).
comertriple2(CType(sender, Panel)) 'Se llama al procedimiento para verificar si el
Jugador 1 puede seguir comiendo (comer triple).
End If
'Condición para controlar si con la comida doble la ficha se llega a coronar.
If fila1 = 2 Then
fila1 = 0 'Cuando una ficha del Jugador 2 está en la fila 1 (contando filas de arriba
hacia abajo), se corona.
End If
End If
End If
End If
End If
End If
End If
variablemensaje = 0 'Se reinicia en 0 esta variable, que sirve para que solamente se entre a uno de los
If anteriores para comer doble, no a los dos, pues o se come a la izquierda o se come a la derecha, pues no
se puede comer a ambos lados en un solo movimiento.
End Sub
Private Sub comertriple1(ByVal sender As Panel) 'Procedimiento para que cuando el Jugador 1 haya
comido una segunda ficha (comido doble), evaluar si hay oportunidad para que esa ficha siga comiendo una
tercera vez (comer triple).
Dim variablemensaje = 0
If soplarfila1 < 6 Then 'Ese 6 equivale a decir fila 7 (pues el subíndice 0 es la fila 1). Esta condición se
hace porque desde la fila 7 o desde la fila 8 (contando filas de arriba hacia abajo) ya no puede comer el
Jugador 1, entonces en las evaluaciones daría problema el código con los subíndices, pues buscaría
posiciones que no existen.
If soplar1 = True Then
'Para Jugador 1, comer hacia su derecha (izquierda de la pantalla).
If soplarcolumna1 > 1 Then
If casilla(soplarfila1 + 1, soplarcolumna1 - 1).jugador = 2 Then
If casilla(soplarfila1 + 2, soplarcolumna1 - 2).ocupada = False Then
MsgBox("Se debe seguir comiendo.", MsgBoxStyle.OkOnly, "Juego de Damas") 'Mensaje
para indicar que se debe seguir comiendo.
casilla(soplarfila1, soplarcolumna1).ocupada = False
casilla(soplarfila1 + 2, soplarcolumna1 - 2).ocupada = True
casilla(soplarfila1, soplarcolumna1).jugador = 0
casilla(soplarfila1 + 2, soplarcolumna1 - 2).jugador = 1
sender.Top = casilla(soplarfila1 + 2, soplarcolumna1 - 2).Top + 12.5
sender.Left = casilla(soplarfila1 + 2, soplarcolumna1 - 2).Left + 12.5
comer1(soplarfila1 + 1, soplarcolumna1 - 1)
variablemensaje += 1
'Condición para controlar si con la comida doble la ficha se llega a coronar.
If fila1 = 5 Then
fila1 = 7 'Cuando una ficha del Jugador 1 está en la fila 8 (contando filas de arriba hacia
abajo), se corona.
End If
End If
End If
End If
'Para Jugador 1, comer hacia su izquierda (derecha de la pantalla).
Mi Web :http://programadorsantosrivera2030.blogspot.com/
Para ver trabajos similares o recibir información semanal sobre nuevas publicaciones,: http://programadorsantosrivera2030.blogspot.com/
If variablemensaje = 0 Then 'Para que si ya comió doble con el If anterior, que ya no entre a este
If.
If soplarcolumna1 < 6 Then
If casilla(soplarfila1 + 1, soplarcolumna1 + 1).jugador = 2 Then
If casilla(soplarfila1 + 2, soplarcolumna1 + 2).ocupada = False Then
MsgBox("Se debe seguir comiendo.", MsgBoxStyle.OkOnly, "Juego de Damas")
'Mensaje para indicar que se debe seguir comiendo.
casilla(soplarfila1, soplarcolumna1).ocupada = False
casilla(soplarfila1 + 2, soplarcolumna1 + 2).ocupada = True
casilla(soplarfila1, soplarcolumna1).jugador = 0
casilla(soplarfila1 + 2, soplarcolumna1 + 2).jugador = 1
sender.Top = casilla(soplarfila1 + 2, soplarcolumna1 + 2).Top + 12.5
sender.Left = casilla(soplarfila1 + 2, soplarcolumna1 + 2).Left + 12.5
comer1(soplarfila1 + 1, soplarcolumna1 + 1)
'Condición para controlar si con la comida doble la ficha se llega a coronar.
If soplarfila1 = 5 Then
fila1 = 7 'Cuando una ficha del Jugador 1 está en la fila 8 (contando filas de arriba
hacia abajo), se corona.
End If
End If
End If
End If
End If
End If
End If
variablemensaje = 0 'Se reinicia en 0 esta variable, que sirve para que solamente se entre a uno de los
If anteriores para comer doble, no a los dos, pues o se come a la izquierda o se come a la derecha, pues no
se puede comer a ambos lados en un solo movimiento.
End Sub
Private Sub comertriple2(ByVal sender As Panel) 'Procedimiento para que cuando el Jugador 2 haya
comido una segunda ficha (comido doble), evaluar si hay oportunidad para que esa ficha siga comiendo una
tercera vez (comer triple).
Dim variablemensaje = 0
If soplarfila2 > 1 Then 'Ese 1 equivale a decir fila 2 (pues el subíndice 0 es la fila 1). Esta condición se
hace porque desde la fila 0 o desde la fila 1 (contando filas de arriba hacia abajo) ya no puede comer el
Jugador 2, entonces en las evaluaciones daría problema el código con los subíndices, pues buscaría
posiciones que no existen.
If soplar2 = True Then
'Para Jugador 2, comer hacia su izquierda (izquierda de la pantalla).
If soplarcolumna2 > 1 Then
If casilla(soplarfila2 - 1, soplarcolumna2 - 1).jugador = 1 Then
If casilla(soplarfila2 - 2, soplarcolumna2 - 2).ocupada = False Then
MsgBox("Se debe seguir comiendo.", MsgBoxStyle.OkOnly, "Juego de Damas") 'Mensaje
para indicar que se debe seguir comiendo.
casilla(soplarfila2, soplarcolumna2).ocupada = False
casilla(soplarfila2 - 2, soplarcolumna2 - 2).ocupada = True
casilla(soplarfila2, soplarcolumna2).jugador = 0
casilla(soplarfila2 - 2, soplarcolumna2 - 2).jugador = 2
sender.Top = casilla(soplarfila2 - 2, soplarcolumna2 - 2).Top + 12.5
sender.Left = casilla(soplarfila2 - 2, soplarcolumna2 - 2).Left + 12.5
comer1(soplarfila2 - 1, soplarcolumna2 - 1)
variablemensaje += 1
'Condición para controlar si con la comida doble la ficha se llega a coronar.
If soplarfila2 = 2 Then
fila1 = 0 'Cuando una ficha del Jugador 2 está en la fila 1 (contando filas de arriba hacia
abajo), se corona.
End If
'End If
Mi Web :http://programadorsantosrivera2030.blogspot.com/
Para ver trabajos similares o recibir información semanal sobre nuevas publicaciones,: http://programadorsantosrivera2030.blogspot.com/
End If
End If
End If
'Para Jugador 2, comer hacia su derecha (derecha de la pantalla).
If variablemensaje = 0 Then 'Para que si ya comió doble con el If anterior, que ya no entre a este
If.
If soplarcolumna2 < 6 Then
If casilla(soplarfila2 - 1, soplarcolumna2 + 1).jugador = 1 Then
If casilla(soplarfila2 - 2, soplarcolumna2 + 2).ocupada = False Then
MsgBox("Se debe seguir comiendo.", MsgBoxStyle.OkOnly, "Juego de Damas")
'Mensaje para indicar que se debe seguir comiendo.
casilla(soplarfila2, soplarcolumna2).ocupada = False
casilla(soplarfila2 - 2, soplarcolumna2 + 2).ocupada = True
casilla(soplarfila2, soplarcolumna2).jugador = 0
casilla(soplarfila2 - 2, soplarcolumna2 + 2).jugador = 2
sender.Top = casilla(soplarfila2 - 2, soplarcolumna2 + 2).Top + 12.5
sender.Left = casilla(soplarfila2 - 2, soplarcolumna2 + 2).Left + 12.5
comer1(soplarfila2 - 1, soplarcolumna2 + 1)
'Condición para controlar si con la comida doble la ficha se llega a coronar.
If soplarfila2 = 2 Then
fila1 = 0 'Cuando una ficha del Jugador 2 está en la fila 1 (contando filas de arriba
hacia abajo), se corona.
End If
'End If
End If
End If
'End If
End If
End If
End If
End If
variablemensaje = 0 'Se reinicia en 0 esta variable, que sirve para que solamente se entre a uno de los
If anteriores para comer doble, no a los dos, pues o se come a la izquierda o se come a la derecha, pues no
se puede comer a ambos lados en un solo movimiento.
End Sub
End Class
Form1.vb
Public Class Form1
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles
MyBase.Load
TextBox1.Text = "Jugador" + Str(turno) 'Para que cuando se cargue el formulario, que intediatemente
aparezca a quién le toca el turno de movimiento (que inicialmente será para el Jugador 1).
End Sub
Private Sub MOSTRARTABLEROToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles MOSTRARTABLEROToolStripMenuItem.Click
Me.MOSTRARTABLEROToolStripMenuItem.Enabled = False 'Porque una vez mostrado el tablero, ya
no se podrá pedir que se muestre otra vez.
Me.MOSTRARFICHASToolStripMenuItem.Enabled = True 'Lo que sí se podrá hacer es pedir que se
muestren fichas.
Me.COLORDELTABLEROToolStripMenuItem.Enabled = True 'También se podrá dar color al tablero,
una vez esté mostrado.
'Me.Panel1.Visible = True 'Se muestra el Panel1 (que muestra a quién le corresponde el movimiento).
Me.Panel2.Visible = True 'Se muestra el Panel2 (que muestra la posición a la que apunta el mouse en
la matriz del tablero)
Mi Web :http://programadorsantosrivera2030.blogspot.com/
Para ver trabajos similares o recibir información semanal sobre nuevas publicaciones,: http://programadorsantosrivera2030.blogspot.com/
Me.Panel3.Visible = True 'Se muestra el Panel3 (que es para dibujar el tablero, fichas y donde se
hacen las jugadas),
Me.GroupBox1.Visible = True 'Se muestra el GroupBox1 (que es para elegir los colores del tablero).
CASILLAS.color1 = Color.White 'Inicialmente la posición (0,0) del tablero, o la casilla superior izquierda,
es de color blanco.
CASILLAS.color2 = Color.Black 'Inicialmente la posición (0,1) del tablero, la la casilla que está a la
derecha de la casilla superior izquierda, es de color negro.
crear_cas() 'Se invoca el procedimiento público "crear_cas()", con lo cual se va a crear el tablero. Este
procedimiento se encuentra en el módulo llamado "PRINCIPAL".
'Dependiendo de los colores que se tengan seleccionados, esos colores aparecerán escritos en los
ComboBox.
Select Case CASILLAS.color1
Case Color.Blue
ComboBox1.Text = "Azul"
Case Color.White
ComboBox1.Text = "Blanco"
Case Color.Black
ComboBox1.Text = "Negro"
Case Color.Red
ComboBox1.Text = "Rojo"
Case Color.Green
ComboBox1.Text = "Verde"
End Select
Select Case CASILLAS.color2
Case Color.Blue
ComboBox2.Text = "Azul"
Case Color.White
ComboBox2.Text = "Blanco"
Case Color.Black
ComboBox2.Text = "Negro"
Case Color.Red
ComboBox2.Text = "Rojo"
Case Color.Green
ComboBox2.Text = "Verde"
End Select
End Sub
Private Sub MOSTRARFICHASToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles MOSTRARFICHASToolStripMenuItem.Click
Me.MOSTRARFICHASToolStripMenuItem.Enabled = False 'Porque una vez mostradas las fichas, ya
no se podrá pedir que se muestren otra vez.
Me.GroupBox2.Visible = True 'Para habilitar el cambio de fichas.
Me.GroupBox3.Visible = True 'Para habilitar la visualización del Jugador al que le corresponde el
movimiento.
Me.ComboBox4.Text = "Pepsi"
Me.ComboBox3.Text = "Fanta"
crear_ficha() 'Se invoca el procedimiento público "crear_ficha()", con lo cual se van a crear las fichas
sobre el tablero. Este procedimiento se encuentra en el módulo llamado "PRINCIPAL".
jugador1Label.Visible = True 'Para que ya con las fichas en el tablero, se muestre un Label que indique
cuáles fichas le pertenecen al Jugador 1.
jugador2Label.Visible = True 'Para que ya con las fichas en el tablero, se muestre un Label que indique
cuáles fichas le pertenecen al Jugador 2.
Me.txt_Jugador.Text = "Jugador 1"
Timer1.Enabled = True
Timer2.Enabled = True
End Sub
Private Sub SALIRToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles SALIRToolStripMenuItem.Click
Me.Close() 'Equivale a escribir "End".
Mi Web :http://programadorsantosrivera2030.blogspot.com/
Para ver trabajos similares o recibir información semanal sobre nuevas publicaciones,: http://programadorsantosrivera2030.blogspot.com/
End Sub
Private Sub AzulToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles AZULToolStripMenuItem.Click 'Procedimiento para que el color1 de las casillas
(casilla con posición (0,0) por ejemplo) sea azul.
If CASILLAS.color2 <> Color.Blue Then 'Si el color2 es diferente de Color.Blue, entonces el color1 se
podrá poner Color.Blue. De lo contrario no porque no estará bien que queden del mismo color tanto el
color1 como el color2 porque se va a ver todo el tablero de un solo color.
CASILLAS.color1 = Color.Blue 'A la variable color1 de la clase CASILLAS se le asigna el color azul
al escribir "Color.Blue".
cambiar_color_casillas() 'Se invoca el procedimiento público "cambiar_color_casillas()", con lo cual
se va a cambiar el color1 del tablero tablero. Este procedimiento se encuentra en el módulo llamado
"PRINCIPAL".
Else 'Si el color2 es Color.Blue, no se va a permitir que el color1 sea también azul, entonces se manda
el color respectivo.
MsgBox("El color 1 del tablero no puede ser igual que el color 2.", MsgBoxStyle.OkOnly, "Juego de
Damas")
End If
End Sub
Private Sub BlancoToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles BLANCOToolStripMenuItem.Click 'Procedimiento para que el color1 de las
casillas (casilla con posición (0,0) por ejemplo) sea blanco.
If CASILLAS.color2 <> Color.White Then 'Si el color2 es diferente de Color.White, entonces el color1 se
podrá poner Color.White. De lo contrario no porque no estará bien que queden del mismo color tanto el
color1 como el color2 porque se va a ver todo el tablero de un solo color.
CASILLAS.color1 = Color.White 'A la variable color1 de la clase CASILLAS se le asigna el color
blanco al escribir "Color.White".
cambiar_color_casillas() 'Se invoca el procedimiento público "cambiar_color_casillas()", con lo cual
se va a cambiar el color1 del tablero tablero. Este procedimiento se encuentra en el módulo llamado
"PRINCIPAL".
Else 'Si el color2 es Color.White, no se va a permitir que el color1 sea también blanco, entonces se
manda el color respectivo.
MsgBox("El color 1 del tablero no puede ser igual que el color 2.", MsgBoxStyle.OkOnly, "Juego de
Damas")
End If
End Sub
Private Sub NegroToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles NEGROToolStripMenuItem.Click 'Procedimiento para que el color1 de las
casillas (casilla con posición (0,0) por ejemplo) sea negro.
If CASILLAS.color2 <> Color.Black Then 'Si el color2 es diferente de Color.Black, entonces el color1 se
podrá poner Color.Black. De lo contrario no porque no estará bien que queden del mismo color tanto el
color1 como el color2 porque se va a ver todo el tablero de un solo color.
CASILLAS.color1 = Color.Black 'A la variable color1 de la clase CASILLAS se le asigna el color
negro al escribir "Color.Black".
cambiar_color_casillas() 'Se invoca el procedimiento público "cambiar_color_casillas()", con lo cual
se va a cambiar el color1 del tablero tablero. Este procedimiento se encuentra en el módulo llamado
"PRINCIPAL".
Else 'Si el color2 es Color.Black, no se va a permitir que el color1 sea también negro, entonces se
manda el color respectivo.
MsgBox("El color 1 del tablero no puede ser igual que el color 2.", MsgBoxStyle.OkOnly, "Juego de
Damas")
End If
End Sub
Private Sub RojoToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles ROJOToolStripMenuItem.Click 'Procedimiento para que el color1 de las casillas
(casilla con posición (0,0) por ejemplo) sea rojo.
If CASILLAS.color2 <> Color.Red Then 'Si el color2 es diferente de Color.Red, entonces el color1 se
podrá poner Color.Red. De lo contrario no porque no estará bien que queden del mismo color tanto el color1
como el color2 porque se va a ver todo el tablero de un solo color.
Mi Web :http://programadorsantosrivera2030.blogspot.com/
Para ver trabajos similares o recibir información semanal sobre nuevas publicaciones,: http://programadorsantosrivera2030.blogspot.com/
CASILLAS.color1 = Color.Red 'A la variable color1 de la clase CASILLAS se le asigna el color rojo al
escribir "Color.Red".
cambiar_color_casillas() 'Se invoca el procedimiento público "cambiar_color_casillas()", con lo cual
se va a cambiar el color1 del tablero tablero. Este procedimiento se encuentra en el módulo llamado
"PRINCIPAL".
Else 'Si el color2 es Color.Red, no se va a permitir que el color1 sea también rojo, entonces se manda
el color respectivo.
MsgBox("El color 1 del tablero no puede ser igual que el color 2.", MsgBoxStyle.OkOnly, "Juego de
Damas")
End If
End Sub
Private Sub VerdeToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles VERDEToolStripMenuItem.Click 'Procedimiento para que el color1 de las
casillas (casilla con posición (0,0) por ejemplo) sea verde.
If CASILLAS.color2 <> Color.Green Then 'Si el color2 es diferente de Color.Green, entonces el color1
se podrá poner Color.Green. De lo contrario no porque no estará bien que queden del mismo color tanto el
color1 como el color2 porque se va a ver todo el tablero de un solo color.
CASILLAS.color1 = Color.Green 'A la variable color1 de la clase CASILLAS se le asigna el color
verde al escribir "Color.Green".
cambiar_color_casillas() 'Se invoca el procedimiento público "cambiar_color_casillas()", con lo cual
se va a cambiar el color1 del tablero tablero. Este procedimiento se encuentra en el módulo llamado
"PRINCIPAL".
Else 'Si el color2 es Color.Green, no se va a permitir que el color1 sea también verde, entonces se
manda el color respectivo.
MsgBox("El color 1 del tablero no puede ser igual que el color 2.", MsgBoxStyle.OkOnly, "Juego de
Damas")
End If
End Sub
Private Sub AzulToolStripMenuItem1_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles AZULToolStripMenuItem1.Click 'Procedimiento para que el color2 de las
casillas (casilla con posición (0,0) por ejemplo) sea azul.
If CASILLAS.color1 <> Color.Blue Then 'Si el color1 es diferente de Color.Blue, entonces el color2 se
podrá poner Color.Blue. De lo contrario no porque no estará bien que queden del mismo color tanto el
color1 como el color2 porque se va a ver todo el tablero de un solo color.
CASILLAS.color2 = Color.Blue 'A la variable color2 de la clase CASILLAS se le asigna el color azul
al escribir "Color.Blue".
cambiar_color_casillas() 'Se invoca el procedimiento público "cambiar_color_casillas()", con lo cual
se va a cambiar el color1 del tablero tablero. Este procedimiento se encuentra en el módulo llamado
"PRINCIPAL".
Else 'Si el color1 es Color.Blue, no se va a permitir que el color2 sea también azul, entonces se manda
el color respectivo.
MsgBox("El color 2 del tablero no puede ser igual que el color 1.", MsgBoxStyle.OkOnly, "Juego de
Damas")
End If
End Sub
Private Sub BlancoToolStripMenuItem1_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles BLANCOToolStripMenuItem1.Click 'Procedimiento para que el color2 de las
casillas (casilla con posición (0,0) por ejemplo) sea blanco.
If CASILLAS.color1 <> Color.White Then 'Si el color1 es diferente de Color.White, entonces el color2 se
podrá poner Color.White. De lo contrario no porque no estará bien que queden del mismo color tanto el
color2 como el color1 porque se va a ver todo el tablero de un solo color.
CASILLAS.color2 = Color.White 'A la variable color2 de la clase CASILLAS se le asigna el color
blanco al escribir "Color.White".
cambiar_color_casillas() 'Se invoca el procedimiento público "cambiar_color_casillas()", con lo cual
se va a cambiar el color2 del tablero tablero. Este procedimiento se encuentra en el módulo llamado
"PRINCIPAL".
Else 'Si el color1 es Color.White, no se va a permitir que el color2 sea también blanco, entonces se
manda el color respectivo.
Mi Web :http://programadorsantosrivera2030.blogspot.com/
Para ver trabajos similares o recibir información semanal sobre nuevas publicaciones,: http://programadorsantosrivera2030.blogspot.com/
MsgBox("El color 2 del tablero no puede ser igual que el color 1.", MsgBoxStyle.OkOnly, "Juego de
Damas")
End If
End Sub
Private Sub NegroToolStripMenuItem1_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles NEGROToolStripMenuItem1.Click 'Procedimiento para que el color2 de las
casillas (casilla con posición (0,0) por ejemplo) sea negro.
If CASILLAS.color1 <> Color.Black Then 'Si el color1 es diferente de Color.Black, entonces el color2 se
podrá poner Color.Black. De lo contrario no porque no estará bien que queden del mismo color tanto el
color2 como el color1 porque se va a ver todo el tablero de un solo color.
CASILLAS.color2 = Color.Black 'A la variable color2 de la clase CASILLAS se le asigna el color
negro al escribir "Color.Black".
cambiar_color_casillas() 'Se invoca el procedimiento público "cambiar_color_casillas()", con lo cual
se va a cambiar el color2 del tablero tablero. Este procedimiento se encuentra en el módulo llamado
"PRINCIPAL".
Else 'Si el color1 es Color.Black, no se va a permitir que el color2 sea también negro, entonces se
manda el color respectivo.
MsgBox("El color 2 del tablero no puede ser igual que el color 1.", MsgBoxStyle.OkOnly, "Juego de
Damas")
End If
End Sub
Private Sub RojoToolStripMenuItem1_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles ROJOToolStripMenuItem1.Click 'Procedimiento para que el color2 de las
casillas (casilla con posición (0,0) por ejemplo) sea rojo.
If CASILLAS.color1 <> Color.Red Then 'Si el color1 es diferente de Color.Red, entonces el color2 se
podrá poner Color.Red. De lo contrario no porque no estará bien que queden del mismo color tanto el color2
como el color1 porque se va a ver todo el tablero de un solo color.
CASILLAS.color2 = Color.Red 'A la variable color2 de la clase CASILLAS se le asigna el color rojo al
escribir "Color.Red".
cambiar_color_casillas() 'Se invoca el procedimiento público "cambiar_color_casillas()", con lo cual
se va a cambiar el color2 del tablero tablero. Este procedimiento se encuentra en el módulo llamado
"PRINCIPAL".
Else 'Si el color1 es Color.Red, no se va a permitir que el color2 sea también rojo, entonces se manda
el color respectivo.
MsgBox("El color 2 del tablero no puede ser igual que el color 1.", MsgBoxStyle.OkOnly, "Juego de
Damas")
End If
End Sub
Private Sub VerdeToolStripMenuItem1_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles VERDEToolStripMenuItem1.Click 'Procedimiento para que el color2 de las
casillas (casilla con posición (0,0) por ejemplo) sea verde.
If CASILLAS.color1 <> Color.Green Then 'Si el color1 es diferente de Color.Green, entonces el color2
se podrá poner Color.Green. De lo contrario no porque no estará bien que queden del mismo color tanto el
color1 como el color1 porque se va a ver todo el tablero de un solo color.
CASILLAS.color2 = Color.Green 'A la variable color2 de la clase CASILLAS se le asigna el color
verde al escribir "Color.Green".
cambiar_color_casillas() 'Se invoca el procedimiento público "cambiar_color_casillas()", con lo cual
se va a cambiar el color2 del tablero tablero. Este procedimiento se encuentra en el módulo llamado
"PRINCIPAL".
Else 'Si el color1 es Color.Green, no se va a permitir que el color2 sea también verde, entonces se
manda el color respectivo.
MsgBox("El color 2 del tablero no puede ser igual que el color 1.", MsgBoxStyle.OkOnly, "Juego de
Damas")
End If
End Sub
'Public Sub New()
' ' Llamada necesaria para el Diseñador de Windows Forms.
' InitializeComponent()
Mi Web :http://programadorsantosrivera2030.blogspot.com/
Para ver trabajos similares o recibir información semanal sobre nuevas publicaciones,: http://programadorsantosrivera2030.blogspot.com/
' ' Agregue cualquier inicialización después de la llamada a InitializeComponent().
'End Sub
Private Sub ComboBox1_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles ComboBox1.SelectedIndexChanged
Select Case ComboBox1.SelectedItem
Case "Azul" 'Para que el color1 de las casillas (casilla con posición (0,0) por ejemplo) sea azul.
If CASILLAS.color2 <> Color.Blue Then 'Si el color2 es diferente de Color.Blue, entonces el color1
se podrá poner Color.Blue. De lo contrario no porque no estará bien que queden del mismo color tanto el
color1 como el color2 porque se va a ver todo el tablero de un solo color.
CASILLAS.color1 = Color.Blue 'A la variable color1 de la clase CASILLAS se le asigna el color
azul al escribir "Color.Blue".
cambiar_color_casillas() 'Se invoca el procedimiento público "cambiar_color_casillas()", con lo
cual se va a cambiar el color1 del tablero tablero. Este procedimiento se encuentra en el módulo llamado
"PRINCIPAL".
Else 'Si el color2 es Color.Blue, no se va a permitir que el color1 sea también azul, entonces se
manda el color respectivo.
MsgBox("El color 1 del tablero no puede ser igual que el color 2.", MsgBoxStyle.OkOnly, "Juego
de Damas")
End If
Case "Blanco" 'Para que el color1 de las casillas (casilla con posición (0,0) por ejemplo) sea blanco.
If CASILLAS.color2 <> Color.White Then 'Si el color2 es diferente de Color.White, entonces el
color1 se podrá poner Color.White. De lo contrario no porque no estará bien que queden del mismo color
tanto el color1 como el color2 porque se va a ver todo el tablero de un solo color.
CASILLAS.color1 = Color.White 'A la variable color1 de la clase CASILLAS se le asigna el color
blanco al escribir "Color.White".
cambiar_color_casillas() 'Se invoca el procedimiento público "cambiar_color_casillas()", con lo
cual se va a cambiar el color1 del tablero tablero. Este procedimiento se encuentra en el módulo llamado
"PRINCIPAL".
Else 'Si el color2 es Color.White, no se va a permitir que el color1 sea también blanco, entonces
se manda el color respectivo.
MsgBox("El color 1 del tablero no puede ser igual que el color 2.", MsgBoxStyle.OkOnly, "Juego
de Damas")
End If
Case "Negro" 'Para que el color1 de las casillas (casilla con posición (0,0) por ejemplo) sea negro.
If CASILLAS.color2 <> Color.Black Then 'Si el color2 es diferente de Color.Black, entonces el
color1 se podrá poner Color.Black. De lo contrario no porque no estará bien que queden del mismo color
tanto el color1 como el color2 porque se va a ver todo el tablero de un solo color.
CASILLAS.color1 = Color.Black 'A la variable color1 de la clase CASILLAS se le asigna el color
negro al escribir "Color.Black".
cambiar_color_casillas() 'Se invoca el procedimiento público "cambiar_color_casillas()", con lo
cual se va a cambiar el color1 del tablero tablero. Este procedimiento se encuentra en el módulo llamado
"PRINCIPAL".
Else 'Si el color2 es Color.Black, no se va a permitir que el color1 sea también negro, entonces se
manda el color respectivo.
MsgBox("El color 1 del tablero no puede ser igual que el color 2.", MsgBoxStyle.OkOnly, "Juego
de Damas")
End If
Case "Rojo" 'Para que el color1 de las casillas (casilla con posición (0,0) por ejemplo) sea rojo.
If CASILLAS.color2 <> Color.Red Then 'Si el color2 es diferente de Color.Red, entonces el color1
se podrá poner Color.Red. De lo contrario no porque no estará bien que queden del mismo color tanto el
color1 como el color2 porque se va a ver todo el tablero de un solo color.
CASILLAS.color1 = Color.Red 'A la variable color1 de la clase CASILLAS se le asigna el color
rojo al escribir "Color.Red".
cambiar_color_casillas() 'Se invoca el procedimiento público "cambiar_color_casillas()", con lo
cual se va a cambiar el color1 del tablero tablero. Este procedimiento se encuentra en el módulo llamado
"PRINCIPAL".
Else 'Si el color2 es Color.Red, no se va a permitir que el color1 sea también rojo, entonces se
manda el color respectivo.
Mi Web :http://programadorsantosrivera2030.blogspot.com/
Para ver trabajos similares o recibir información semanal sobre nuevas publicaciones,: http://programadorsantosrivera2030.blogspot.com/
MsgBox("El color 1 del tablero no puede ser igual que el color 2.", MsgBoxStyle.OkOnly, "Juego
de Damas")
End If
Case "Verde" 'Para que el color1 de las casillas (casilla con posición (0,0) por ejemplo) sea verde.
If CASILLAS.color2 <> Color.Green Then 'Si el color2 es diferente de Color.Green, entonces el
color1 se podrá poner Color.Green. De lo contrario no porque no estará bien que queden del mismo color
tanto el color1 como el color2 porque se va a ver todo el tablero de un solo color.
CASILLAS.color1 = Color.Green 'A la variable color1 de la clase CASILLAS se le asigna el color
verde al escribir "Color.Green".
cambiar_color_casillas() 'Se invoca el procedimiento público "cambiar_color_casillas()", con lo
cual se va a cambiar el color1 del tablero tablero. Este procedimiento se encuentra en el módulo llamado
"PRINCIPAL".
Else 'Si el color2 es Color.Green, no se va a permitir que el color1 sea también verde, entonces se
manda el color respectivo.
MsgBox("El color 1 del tablero no puede ser igual que el color 2.", MsgBoxStyle.OkOnly, "Juego
de Damas")
End If
End Select
'Dependiendo de los colores que se tengan seleccionados, esos colores aparecerán escritos en los
ComboBox.
Select Case CASILLAS.color1
Case Color.Blue
ComboBox1.Text = "Azul"
Case Color.White
ComboBox1.Text = "Blanco"
Case Color.Black
ComboBox1.Text = "Negro"
Case Color.Red
ComboBox1.Text = "Rojo"
Case Color.Green
ComboBox1.Text = "Verde"
End Select
Select Case CASILLAS.color2
Case Color.Blue
ComboBox2.Text = "Azul"
Case Color.White
ComboBox2.Text = "Blanco"
Case Color.Black
ComboBox2.Text = "Negro"
Case Color.Red
ComboBox2.Text = "Rojo"
Case Color.Green
ComboBox2.Text = "Verde"
End Select
End Sub
Private Sub ComboBox2_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles ComboBox2.SelectedIndexChanged
Select Case ComboBox2.SelectedItem
Case "Azul" 'Para que el color2 de las casillas (casilla con posición (0,0) por ejemplo) sea azul.
If CASILLAS.color1 <> Color.Blue Then 'Si el color1 es diferente de Color.Blue, entonces el color2
se podrá poner Color.Blue. De lo contrario no porque no estará bien que queden del mismo color tanto el
color1 como el color2 porque se va a ver todo el tablero de un solo color.
CASILLAS.color2 = Color.Blue 'A la variable color2 de la clase CASILLAS se le asigna el color
azul al escribir "Color.Blue".
cambiar_color_casillas() 'Se invoca el procedimiento público "cambiar_color_casillas()", con lo
cual se va a cambiar el color1 del tablero tablero. Este procedimiento se encuentra en el módulo llamado
"PRINCIPAL".
Mi Web :http://programadorsantosrivera2030.blogspot.com/
Para ver trabajos similares o recibir información semanal sobre nuevas publicaciones,: http://programadorsantosrivera2030.blogspot.com/
Else 'Si el color1 es Color.Blue, no se va a permitir que el color2 sea también azul, entonces se
manda el color respectivo.
MsgBox("El color 2 del tablero no puede ser igual que el color 1.", MsgBoxStyle.OkOnly, "Juego
de Damas")
End If
Case "Blanco" 'Para que el color2 de las casillas (casilla con posición (0,0) por ejemplo) sea blanco.
If CASILLAS.color1 <> Color.White Then 'Si el color1 es diferente de Color.White, entonces el
color2 se podrá poner Color.White. De lo contrario no porque no estará bien que queden del mismo color
tanto el color2 como el color1 porque se va a ver todo el tablero de un solo color.
CASILLAS.color2 = Color.White 'A la variable color2 de la clase CASILLAS se le asigna el color
blanco al escribir "Color.White".
cambiar_color_casillas() 'Se invoca el procedimiento público "cambiar_color_casillas()", con lo
cual se va a cambiar el color2 del tablero tablero. Este procedimiento se encuentra en el módulo llamado
"PRINCIPAL".
Else 'Si el color1 es Color.White, no se va a permitir que el color2 sea también blanco, entonces
se manda el color respectivo.
MsgBox("El color 2 del tablero no puede ser igual que el color 1.", MsgBoxStyle.OkOnly, "Juego
de Damas")
End If
Case "Negro" 'Para que el color2 de las casillas (casilla con posición (0,0) por ejemplo) sea negro.
If CASILLAS.color1 <> Color.Black Then 'Si el color1 es diferente de Color.Black, entonces el
color2 se podrá poner Color.Black. De lo contrario no porque no estará bien que queden del mismo color
tanto el color2 como el color1 porque se va a ver todo el tablero de un solo color.
CASILLAS.color2 = Color.Black 'A la variable color2 de la clase CASILLAS se le asigna el color
negro al escribir "Color.Black".
cambiar_color_casillas() 'Se invoca el procedimiento público "cambiar_color_casillas()", con lo
cual se va a cambiar el color2 del tablero tablero. Este procedimiento se encuentra en el módulo llamado
"PRINCIPAL".
Else 'Si el color1 es Color.Black, no se va a permitir que el color2 sea también negro, entonces se
manda el color respectivo.
MsgBox("El color 2 del tablero no puede ser igual que el color 1.", MsgBoxStyle.OkOnly, "Juego
de Damas")
End If
Case "Rojo" 'Para que el color2 de las casillas (casilla con posición (0,0) por ejemplo) sea rojo.
If CASILLAS.color1 <> Color.Red Then 'Si el color1 es diferente de Color.Red, entonces el color2
se podrá poner Color.Red. De lo contrario no porque no estará bien que queden del mismo color tanto el
color2 como el color1 porque se va a ver todo el tablero de un solo color.
CASILLAS.color2 = Color.Red 'A la variable color2 de la clase CASILLAS se le asigna el color
rojo al escribir "Color.Red".
cambiar_color_casillas() 'Se invoca el procedimiento público "cambiar_color_casillas()", con lo
cual se va a cambiar el color2 del tablero tablero. Este procedimiento se encuentra en el módulo llamado
"PRINCIPAL".
Else 'Si el color1 es Color.Red, no se va a permitir que el color2 sea también rojo, entonces se
manda el color respectivo.
MsgBox("El color 2 del tablero no puede ser igual que el color 1.", MsgBoxStyle.OkOnly, "Juego
de Damas")
End If
Case "Verde" 'Para que el color2 de las casillas (casilla con posición (0,0) por ejemplo) sea verde.
If CASILLAS.color1 <> Color.Green Then 'Si el color1 es diferente de Color.Green, entonces el
color2 se podrá poner Color.Green. De lo contrario no porque no estará bien que queden del mismo color
tanto el color1 como el color1 porque se va a ver todo el tablero de un solo color.
CASILLAS.color2 = Color.Green 'A la variable color2 de la clase CASILLAS se le asigna el color
verde al escribir "Color.Green".
cambiar_color_casillas() 'Se invoca el procedimiento público "cambiar_color_casillas()", con lo
cual se va a cambiar el color2 del tablero tablero. Este procedimiento se encuentra en el módulo llamado
"PRINCIPAL".
Else 'Si el color1 es Color.Green, no se va a permitir que el color2 sea también verde, entonces se
manda el color respectivo.
Mi Web :http://programadorsantosrivera2030.blogspot.com/
Para ver trabajos similares o recibir información semanal sobre nuevas publicaciones,: http://programadorsantosrivera2030.blogspot.com/
MsgBox("El color 2 del tablero no puede ser igual que el color 1.", MsgBoxStyle.OkOnly, "Juego
de Damas")
End If
End Select
'Dependiendo de los colores que se tengan seleccionados, esos colores aparecerán escritos en los
ComboBox.
Select Case CASILLAS.color1
Case Color.Blue
ComboBox1.Text = "Azul"
Case Color.White
ComboBox1.Text = "Blanco"
Case Color.Black
ComboBox1.Text = "Negro"
Case Color.Red
ComboBox1.Text = "Rojo"
Case Color.Green
ComboBox1.Text = "Verde"
End Select
Select Case CASILLAS.color2
Case Color.Blue
ComboBox2.Text = "Azul"
Case Color.White
ComboBox2.Text = "Blanco"
Case Color.Black
ComboBox2.Text = "Negro"
Case Color.Red
ComboBox2.Text = "Rojo"
Case Color.Green
ComboBox2.Text = "Verde"
End Select
End Sub
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles
Button1.Click
Dim mensaje As Integer 'Variable que almacenará el valor devuelto por la función MsgBox().
mensaje = MsgBox("Elegir fichas requiere terminar el juego actual. ¿Desea hacerlo?", vbYesNo,
"Juego de Damas")
If mensaje = 6 Then 'La función MsgBox devuelve un valor, el cual ha sido almacenado en la variable
"mensaje". Los valores devueltos pueden ser 1, 2, 3, 4, 5, 6 o 7. El valor 6 significa que se ha hecho clic en
el botón Yes.
'Las siguientes 2 líneas son para que al reiniciar un juego, el primer turno sea para el Jugador 1.
TextBox1.Text = "Jugador 1"
turno = 1
ficha = New FICHAS 'Se inicializa un objeto de la clase FICHAS, el cual va a ser referenciado o
utilizado mediante la variable "ficha". Esto se hace porque va a ser necesario usar el procedimiento
comer1(indice1, indice2), el cual pertenece a la clase FICHAS.
For f = 0 To 7 '8 iteraciones, correspondientes a las 8 filas.
For c = 0 To 7 '8 iteraciones, correspondientes a las 8 columnas.
ficha.comer1(f, c) 'Se está utilizando el mismo procedimiento que sirve para comer fichas. Esto
funcionará como si se comieran fichas en las 64 casillas (por eso los 2 ciclos For anidados), de manera que
van a quedar vacías o sin ninguna ficha en el tablero.
casilla(f, c).jugador = 0 'Para que al reiniciar un juego, que primeramente todas las casillas se
pongan como no pertenecientes a ningún jugador (a la ficha de ningún jugador), antes de crear las nuevas
fichas sobre el tablero.
casilla(f, c).jugador = False 'Para que al reiniciar un juego, que primeramente todas las casillas
se pongan como desocupadas o sin ninguna ficha sobre ellas.
soplar1 = False 'Para que no se tenga ninguna ficha pendiente por soplar al reiniciar un juego.
soplar2 = False 'Para que no se tenga ninguna ficha pendiente por soplar al reiniciar un juego.
Next
Mi Web :http://programadorsantosrivera2030.blogspot.com/
Para ver trabajos similares o recibir información semanal sobre nuevas publicaciones,: http://programadorsantosrivera2030.blogspot.com/
Next
'Con los 2 ciclos For anteriores (las 5 líneas de arriba) ya se tienen las 64 casillas sin fichas (el
tablero sin fichas).
If ComboBox4.Text <> ComboBox3.SelectedItem Then 'Si se ha seleccionado una ficha diferente
para cada jugador.
crear_ficha() 'Esta función se encuentra en el módulo PRINCIPAL, y lo que hace es crear las 12
fichas de cada jugador en las posiciones como para iniciar un nuevo juego.
Else 'Si se ha seleccionado la misma ficha para ambos jugadores.
MsgBox("La ficha del jugador 1 no puede ser igual que la del jugador 2.", MsgBoxStyle.OkOnly,
"Juego de Damas")
End If
End If
End Sub
Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles
Timer1.Tick
posibilidad_soplar() 'Debido a que el Timer1 tiene la propiedad Interval en 10, el procedimiento
posibilidad_soplar() se estará ejecutando 100 veces por segundo (pues un Interval de 1000 es 1 segundo y
un Interval de 10 son 10 milisegundos o 0.01 segundos), de modo que 100 veces por segundo se estará
verificando si han posibilidad de comer por parte de cualquiera de los jugadores, y con ello se sabrá si hay
posibilidad de soplar o no.
End Sub
Private Sub Timer2_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles
Timer2.Tick
'Para reiniciar las variables que dan a conocer si el Jugador 1 o el Jugador 2 tienen posibilidad de
comer (y por lo tanto se les soplan las fichas si no comen). Al hacer esto no van a quedar en verdadero por
jugadas anteriores, sino que casa 0.5 segundos (pues el Interval que se le ha programado al Timer2 es de
500) se van a estar ejecutando estas 2 líneas de código, mientras que el Timer1 se ejecutará 100 veces por
segundo (pues se le ha programado la propiedad Interval = 10). Entonces continuamente se estará
verificando si hay posibilidad de comer (y por tanto de soplar), y si no hubiese, casa medio minuto las
variables se regresan a False y no quedan guardando True de jugadas anteriores.
soplar1 = False
soplar2 = False
End Sub
Private Sub ToolStripMenuItem1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
Handles ToolStripMenuItem1.Click
AyudaForm.Show() 'Muestra el formulario de ayuda.
End Sub
End Class
PRINCIPAL.vb
Module PRINCIPAL
'Private Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hwnd As Integer,
ByVal nIndex As Integer) As Integer
'Private Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Integer,
ByVal nIndex As Integer, ByVal dwNewLong As Integer) As Integer
'Private Declare Function SetWindowPos Lib "user32" (ByVal hwnd As Integer, ByVal hWndInsertAfter As
Integer, ByVal X As Integer, ByVal Y As Integer, ByVal cX As Integer, ByVal cY As Integer, ByVal wFlags As
Integer) As Integer
'Const GWL_STYLE As Integer = (-16)
'Const WS_THICKFRAME As Integer = &H40000 ' Con borde redimensionable
'Const SWP_DRAWFRAME As Integer = &H20
'Const SWP_NOMOVE As Integer = &H2
'Const SWP_NOSIZE As Integer = &H1
'Const SWP_NOZORDER As Integer = &H4
Public casilla(7, 7) As CASILLAS 'Matriz que va a tener 64 elementos, correspondientes a cada una de
las casillas del tablero.
Mi Web :http://programadorsantosrivera2030.blogspot.com/
Para ver trabajos similares o recibir información semanal sobre nuevas publicaciones,: http://programadorsantosrivera2030.blogspot.com/
Public f, c As Integer 'Variables públicas que hacen referencia a filas y columnas.
Public posx, posy As Integer 'Variables públicas que hacen referencia a las posiciones en el eje x y en el
eje y.
Public ficha As FICHAS
Public corona As CORONAS
Public cposx, cposy As Integer
Public turno As Integer = 1
Public Jugador1(11) As Panel
Public Jugador2(11) As Panel
Public soplar1 As Boolean 'Para saber si se debe soplar o no una ficha al Jugador 1.
'Inicialmente se ponen las siguientes 2 variables en una posición en la que nunca podría haber una ficha:
(0, 1), fila 0 y columna 1. Con esto no se pueden soplar piezas equivocadas inicialmente.
Public soplarfila1 As Integer = 0 'Para saber qué posición en las filas se le debe soplar al Jugador 1.
Public soplarcolumna1 As Integer = 1 'Para saber qué posición en las columnas se le debe soplar al
Jugador 1.
Public soplar2 As Boolean 'Para saber si se debe soplar o no una ficha al Jugador 2.
'Inicialmente se ponen las siguientes 2 variables en una posición en la que nunca podría haber una ficha:
(7, 0), fila 7 y columna 0. Con esto no se pueden soplar pieza equivocadas inicialmente.
Public soplarfila2 As Integer = 7 'Para saber qué posición en las filas se le debe soplar al Jugador 2.
Public soplarcolumna2 As Integer = 0 'Para saber qué posición en las columnas se le debe soplar al
Jugador 2.
Public Sub crear_cas() 'Este procedimiento sirve para crear el tablero con las 64 casillas en colores
blanco y negro.
posy = 0 'Variable para determinar la posición de las columnas o eje x (dado en pixeles).
For f = 0 To 7 '8 iteraciones, correspondientes a las 8 filas.
posx = 0 'Variable para determinar la posición de las filas o el eje x (dado en pixeles).
For c = 0 To 7 '8 iteraciones, correspondientes a las 8 columnas.
casilla(f, c) = New CASILLAS 'La variable casilla(f, c) es una instancia de la clase CASILLAS (es
un objeto).
casilla(f, c).Size = New Size(75, 75) 'La propiedad Size funciona gracias a que la variable matriz
casilla(7, 7) es de tipo CASILLAS, y la clase CASILLAS hereda la clase Panel, y la clase Panel tiene la
propiedad Size, por lo tanto la clase Panel le hereda a la clase CASILLAS la propiedad Size. "(75, 75)" son
los pixeles, que va a tener 75 pixeles de ancho y 75 pixeles de alto, pues se quiere que sea cuadrado. El
Panel3 (que se encuentra en la misma ubicación en la que se va a dibujar el tablero y donde va a estar el
escenario para jugar) es cuadrado y mide 620*620 pixeles, entonces tomando en cuenta que cada cuadrito
mide 75*75 pixeles, se van a tener 64 cuadritos en total que van a caber, 8 filas y 8 columnas de cuadritos.
Pero (620/8)=77.5 pixeles, pero como cada cuadrito tiene 75 pixeles, entonces 75*8=600 pixeles, entonces
sobran 20 pixeles (pues el Panel3 no mide 600 pixeles sino que 620 pixeles), y esos 20 pixeles se van a
usar para márgenes, que se distribuirían en 10 pixeles de margen al lado izquierdo, 10 al lado derecho, 10
arriba y 10 abajo. Gracias a los 2 ciclos For, se harán 64 iteraciones y con ello se les da el tamaño de 75*75
pixeles a cada uno de los 64 cuadritos que componen el tablero de damas. Size es una estructura que
almacena un par de enteros ordenados, en este caso el ancho y alto del rectánculo. Las 64 casillas del
tablero se crearán sobre el Panel3, y el Panel3 quedará atrás pero servirá para que se vea el margen de 10
pixeles arriba, abajo, a la izquierda y a la derecha.
casilla(f, c).Location = New Point(357 + posx, 66 + posy) 'Luego de definir el tamaño de cada
cuadrito que compone el tablero de damas, con esta línea se define la ubicación que va a tener cada uno de
esos cuadritos, de modo que en las 64 iteraciones de los ciclos For anidados, se darán 64 ubicaciones y
quedarán bien localizados y estructurados cada uno de los elementos que componen el tablero. La
estructura Point representa un par ordenado de coordenadas x e y de enteros que define un punto en un
plano bidimensional. El punto de origen o el 0,0 es la parte superior izquierda del formulario (sin contar la
barra de título como parte de las coordenadas). Las coordenadas x positivas van hacia la derecha del punto
0,0. Las coordenadas x negativas van hacia la izquierda del punto 0,0. Las coordenadas y positivo van
hacia abajo del punto 0,0. Las coordenadas y negativo van hacia arriba del punto 0,0. (347, 56) es la
posición del Panel3 en el formulario. Entonces como se quiere que queden 10 pixeles de margen arriba,
abajo, a la izquierda y a la derecha del tablero (el tablero estará ubicado sobre el Panel3), entonces por eso
se pone (357 + posx, 66 + posy), considerando los 10 pixeles de margen tanto para el eje x como para el
eje y, y sabiendo que inicialmente o en la primera iteración (cuando f y c valgan 0) tanto posx como posy
van a valer 0.
Mi Web :http://programadorsantosrivera2030.blogspot.com/
Para ver trabajos similares o recibir información semanal sobre nuevas publicaciones,: http://programadorsantosrivera2030.blogspot.com/
Form1.Controls.Add(casilla(f, c)) 'Añade el objeto creado en el formulario, con las dimensiones y
ubicación establecida en las dos líneas anteriores.
casilla(f, c).BringToFront() 'Esto sirve para que el objeto añadido al formulario con la línea anterior
aparezca encima del objeto Panel3, pues de lo contrario no se va a ver el tablero generado porque va a
estar detrás del Panel3.
casilla(f, c).ocupada = False 'Con esto se hace que las 64 casillas aparezcan desocupadas, pues
lo que se busca con este procedimiento público es crear el tablero, no hacer jugadas ni poner fichas
todavía, entonces se hace que todas las casillas se encuentren vacías.
If (f + c) Mod 2 = 0 Then 'Si el residuo de la suma de la fila más la columna entre dos es cero (lo
cual significaría que esa suma fue un número par). Por ejemplo las casillas (0,0), (2,4), (3,5), etc.
casilla(f, c).BackColor = Color.White 'El color de la casilla se pone blanco.
Else 'Si el residuo de la suma de la fila más la columna entre dos es diferente de cero (lo cual
significaría que esa suma fue un número impar). Por ejemplo las casillas (1,3), (3,4), (6,3), etc.
casilla(f, c).BackColor = Color.Black 'El color de la casilla se pone negro.
End If 'Entonces inicialmente las casillas van a estar blanco y negro, con la casilla (0,0) o la que
está en la parte superior izquierda de color blanco.
posx = posx + 75 'Para que en la siguiente iteración, la siguiente casilla se ubique 75 pixeles a la
derecha de la anterior hasta formar la fila completa de 8 casillas en una fila.
Next
posy = posy + 75 'Para que en la iteración de las filas, que la siguiente casilla se ubique 75 pixeles
abajo de la anterior, y que luego con el For interno se comience a formar la segunda fila completa.
Next
'NOTA: Con los dos ciclos For anidados anteriores, el orden en en que se van a ir formando las casillas
es de izquierda a derecha hasta formar la primera fila y luego de arriba hacia abajo formando fila por fila
hasta formar las 8 filas y que se tengan las 64 casillas que componen el tablero.
End Sub
Public Sub crear_ficha() 'Este procedimiento sirve para crear las 24 fichas sobre el tablero, 12 para cada
jugador, es decir que 12 de un color y 12 de otro.
Dim objDraw1 As System.Drawing.Drawing2D.GraphicsPath = New
System.Drawing.Drawing2D.GraphicsPath
objDraw1.AddEllipse(0, 0, 50, 50)
Dim x As Integer
x = 0
'En total, entre los 2 ciclos For anidados, se harán 48 iteraciones.
For f = 0 To 2 'Debido a las fichas correspondientes al Jugador 1 (las fichas de arriba) se van a ubicar
en las primeras 3 filas del tablero (contando las filas de arriba hacia abajo), el ciclo irá de 0 a 2.
For c = 0 To 7 'Se hacen 8 iteraciones porque de las primeras 3 filas del tablero se van a evaluar
casilla por casilla.
If (f + c) Mod 2 = 0 Then 'Si la suma de la fila más la columna da un número par (por ejemplo (0,
0), (0, 2), (0,6), (1,1), (2, 4), etc.), entonces se va a poner una ficha en esa casilla.
ficha = New FICHAS 'La variable "ficha" es una instancia de la clase FICHAS (es un objeto).
ficha.Region = New Region(objDraw1)
ficha.Size = New Size(50, 50) 'La propiedad Size funciona gracias a que la variable "ficha" es
de tipo FICHAS, y la clase FICHAS hereda la clase Panel, y la clase Panel tiene la propiedad Size, por lo
tanto la clase Panel le hereda a la clase CASILLAS la propiedad Size. "(50, 50)" son los pixeles, que va a
tener 50 pixeles de ancho y 50 pixeles de alto, que es cuadrado pero con el procedimiento AddEllipse se
hará circular. Recuérdese que las casillas tienen 75x75 pixeles, entonces las fichas se van a poner 50x50
pixeles para que quepan bien dentro de las casillas.
'ficha.BackColor = Color.BlueViolet
'Seleccionar la imagen de la ficha correspondiente para el Jugador 1.
Select Case Form1.ComboBox4.Text
Case "Águila"
ficha.BackgroundImage = Form1.ImageList1.Images(0)
Case "Blue Boar Ice Ale"
ficha.BackgroundImage = Form1.ImageList1.Images(1)
Case "Cherry Coke"
ficha.BackgroundImage = Form1.ImageList1.Images(2)
Case "Chucho"
Mi Web :http://programadorsantosrivera2030.blogspot.com/
Para ver trabajos similares o recibir información semanal sobre nuevas publicaciones,: http://programadorsantosrivera2030.blogspot.com/
ficha.BackgroundImage = Form1.ImageList1.Images(3)
Case "Coca Cola Real"
ficha.BackgroundImage = Form1.ImageList1.Images(4)
Case "Coca Cola"
ficha.BackgroundImage = Form1.ImageList1.Images(5)
Case "Cream Soda"
ficha.BackgroundImage = Form1.ImageList1.Images(6)
Case "Corona Extra"
ficha.BackgroundImage = Form1.ImageList1.Images(7)
Case "Diana"
ficha.BackgroundImage = Form1.ImageList1.Images(8)
Case "Diet Pepsi"
ficha.BackgroundImage = Form1.ImageList1.Images(9)
Case "Dr Pepper"
ficha.BackgroundImage = Form1.ImageList1.Images(10)
Case "Fanta"
ficha.BackgroundImage = Form1.ImageList1.Images(11)
Case "Heineken Beer"
ficha.BackgroundImage = Form1.ImageList1.Images(12)
Case "Hello Kitty"
ficha.BackgroundImage = Form1.ImageList1.Images(13)
Case "Mirinda"
ficha.BackgroundImage = Form1.ImageList1.Images(14)
Case "Nehi Grape"
ficha.BackgroundImage = Form1.ImageList1.Images(15)
Case "Pepsi"
ficha.BackgroundImage = Form1.ImageList1.Images(16)
Case "Red"
ficha.BackgroundImage = Form1.ImageList1.Images(17)
Case "Scandinavian Pepsi"
ficha.BackgroundImage = Form1.ImageList1.Images(18)
Case "Star"
ficha.BackgroundImage = Form1.ImageList1.Images(19)
Case "Stars"
ficha.BackgroundImage = Form1.ImageList1.Images(20)
End Select
'ficha.BorderStyle = BorderStyle.Fixed3D
Form1.Controls.Add(ficha) 'Añade el objeto creado en el formulario, con las dimensiones
establecidas en "ficha.Size" y ubicación que se establecerá dos líneas adelante en "ficha.Location".
ficha.BringToFront() 'Esto sirve para que el objeto añadido al formulario con la línea anterior
aparezca encima del objeto Panel3 y encima de las casillas, pues de lo contrario no se va a ver la ficha
generada porque va a estar detrás del Panel3 y de las casillas del tablero.
ficha.Location = New Point(357 + (c * 75) + 12.5, 66 + (f * 75) + 12.5) 'El Panel3 (que se
encuentra en la misma ubicación en la que se van a dibujar las fichas y donde va a ser el escenario para
jugar) es cuadrado y mide 620*620 pixeles, entonces tomando en cuenta que cada ficha mide 50*50 pixeles
(aunque no van a ser cuadradas sino que se van a hacer redondas con el procedimiento AddEllipse), se va
a trabajar de esta forma: luego de definir el tamaño de cada ficha, con esta línea se define la ubicación que
va a tener cada una de esas fichas, de modo que en las 48 iteraciones de los ciclos For anidados, se darán
24 ubicaciones (correspondientes a las 12 fichas para cada jugador, pues con la condición If, de las 48
iteraciones solamente 24 van a colocar fichas), y quedarán bien localizadas cada una de las fichas sobre el
tablero. La estructura Point representa un par ordenado de coordenadas x e y de enteros que define un
punto en un plano bidimensional. El punto de origen o el 0,0 es la parte superior izquierda del formulario (sin
contar la barra de título como parte de las coordenadas). Las coordenadas x positivas van hacia la derecha
del punto 0,0. Las coordenadas x negativas van hacia la izquierda del punto 0,0. Las coordenadas y positivo
van hacia abajo del punto 0,0. Las coordenadas y negativo van hacia arriba del punto 0,0. (347, 56) es la
posición del Panel3 en el formulario. Entonces como se quiere que queden 10 pixeles de margen arriba,
abajo, a la izquierda y a la derecha del tablero (el tablero estará ubicado sobre el Panel3), entonces por eso
se pone (357 + (c * 75) + 12.5, 66 + (f * 75) + 12.5), considerando los 10 pixeles de margen tanto para el eje
Mi Web :http://programadorsantosrivera2030.blogspot.com/
Para ver trabajos similares o recibir información semanal sobre nuevas publicaciones,: http://programadorsantosrivera2030.blogspot.com/
x como para el eje y (por eso 357 en vez de 347, y 66 en vez de 56). (c * 75) y (f * 75) es para que en cada
iteración se tome el inicio desde donde se va a formar la casilla tanto de filas (la "f") como de columnas (la
"c"). + 12.5 es porque no se quiere que la ficha se forme justo desde la parte superior izquierda de la casilla,
sino que se desea que quede en el centro de la casilla, entonces se ponen esos 12.5 pixeles de margen
izquierdo para el caso del eje x y 12.5 pixeles de margen superior para el caso del eje y, entonces la casilla
va a tomar 50 pixeles (50 + 12.5 = 62.5 pixeles), y van a quedar otros 12.5 pixeles tanto de margen derecho
como de margen inferior, con lo cual se completan los 75 pixeles de cada casilla (pues 62.5 + 12.5 = 75
pixeles).
'ficha.equipo = 1
casilla(f, c).jugador = 1
casilla(f, c).ocupada = True 'Para que la casilla correspondiente según la iteración de los ciclos
For anidados, que la casilla quede ocupada para efectos de programación, que no se pueda poner otra
casilla mientras esta no se haya quitado o mientras no haya sido comida, etc.
Jugador1(x) = ficha
x = x + 1
End If
Next
Next
x = 0
For f = 5 To 7 'Debido a las fichas correspondientes al Jugador 2 (las fichas de abajo) se van a ubicar
en las últimas 3 filas del tablero (contando las filas de arriba hacia abajo, es decir las filas 6, 7 y 8), el ciclo
irá de 5 a 7.
For c = 0 To 7 'Se hacen 8 iteraciones porque de las filas 6, 7 y 8 del tablero se va a evaluar casilla
por casilla.
If (f + c) Mod 2 = 0 Then 'Si la suma de la fila más la columna da un número par (por ejemplo (5,
1), (5, 3), (6,0), (6,4), (7, 3), etc.), entonces se va a poner una ficha en esa casilla.
ficha = New FICHAS 'La variable "ficha" es una instancia de la clase FICHAS (es un objeto).
ficha.Region = New Region(objDraw1)
ficha.Size = New Size(50, 50) 'La propiedad Size funciona gracias a que la variable "ficha" es
de tipo FICHAS, y la clase FICHAS hereda la clase Panel, y la clase Panel tiene la propiedad Size, por lo
tanto la clase Panel le hereda a la clase CASILLAS la propiedad Size. "(50, 50)" son los pixeles, que va a
tener 50 pixeles de ancho y 50 pixeles de alto, que es cuadrado pero con el procedimiento AddEllipse se
hará circular. Recuérdese que las casillas tienen 75x75 pixeles, entonces las fichas se van a poner 50x50
pixeles para que quepan bien dentro de las casillas.
'ficha.BackColor = Color.Crimson
'Seleccionar la imagen de la ficha correspondiente para el Jugador 2.
Select Case Form1.ComboBox3.Text
Case "Águila"
ficha.BackgroundImage = Form1.ImageList1.Images(0)
Case "Blue Boar Ice Ale"
ficha.BackgroundImage = Form1.ImageList1.Images(1)
Case "Cherry Coke"
ficha.BackgroundImage = Form1.ImageList1.Images(2)
Case "Chucho"
ficha.BackgroundImage = Form1.ImageList1.Images(3)
Case "Coca Cola Real"
ficha.BackgroundImage = Form1.ImageList1.Images(4)
Case "Coca Cola"
ficha.BackgroundImage = Form1.ImageList1.Images(5)
Case "Cream Soda"
ficha.BackgroundImage = Form1.ImageList1.Images(6)
Case "Corona Extra"
ficha.BackgroundImage = Form1.ImageList1.Images(7)
Case "Diana"
ficha.BackgroundImage = Form1.ImageList1.Images(8)
Case "Diet Pepsi"
ficha.BackgroundImage = Form1.ImageList1.Images(9)
Case "Dr Pepper"
Mi Web :http://programadorsantosrivera2030.blogspot.com/
Para ver trabajos similares o recibir información semanal sobre nuevas publicaciones,: http://programadorsantosrivera2030.blogspot.com/
ficha.BackgroundImage = Form1.ImageList1.Images(10)
Case "Fanta"
ficha.BackgroundImage = Form1.ImageList1.Images(11)
Case "Heineken Beer"
ficha.BackgroundImage = Form1.ImageList1.Images(12)
Case "Hello Kitty"
ficha.BackgroundImage = Form1.ImageList1.Images(13)
Case "Mirinda"
ficha.BackgroundImage = Form1.ImageList1.Images(14)
Case "Nehi Grape"
ficha.BackgroundImage = Form1.ImageList1.Images(15)
Case "Pepsi"
ficha.BackgroundImage = Form1.ImageList1.Images(16)
Case "Red"
ficha.BackgroundImage = Form1.ImageList1.Images(17)
Case "Scandinavian Pepsi"
ficha.BackgroundImage = Form1.ImageList1.Images(18)
Case "Star"
ficha.BackgroundImage = Form1.ImageList1.Images(19)
Case "Stars"
ficha.BackgroundImage = Form1.ImageList1.Images(20)
End Select
'ficha.BorderStyle = BorderStyle.Fixed3D
Form1.Controls.Add(ficha) 'Añade el objeto creado en el formulario, con las dimensiones
establecidas en "ficha.Size" y ubicación que se establecerá dos líneas adelante en "ficha.Location".
ficha.BringToFront() 'Esto sirve para que el objeto añadido al formulario con la línea anterior
aparezca encima del objeto Panel3 y encima de las casillas, pues de lo contrario no se va a ver la ficha
generada porque va a estar detrás del Panel3 y de las casillas del tablero.
ficha.Location = New Point(357 + (c * 75) + 12.5, 66 + (f * 75) + 12.5) 'El Panel3 (que se
encuentra en la misma ubicación en la que se van a dibujar las fichas y donde va a ser el escenario para
jugar) es cuadrado y mide 620*620 pixeles, entonces tomando en cuenta que cada ficha mide 50*50 pixeles
(aunque no van a ser cuadradas sino que se van a hacer redondas con el procedimiento AddEllipse), se va
a trabajar de esta forma: luego de definir el tamaño de cada ficha, con esta línea se define la ubicación que
va a tener cada una de esas fichas, de modo que en las 48 iteraciones de los ciclos For anidados, se darán
24 ubicaciones (correspondientes a las 12 fichas para cada jugador, pues con la condición If, de las 48
iteraciones solamente 24 van a colocar fichas), y quedarán bien localizadas cada una de las fichas sobre el
tablero. La estructura Point representa un par ordenado de coordenadas x e y de enteros que define un
punto en un plano bidimensional. El punto de origen o el 0,0 es la parte superior izquierda del formulario (sin
contar la barra de título como parte de las coordenadas). Las coordenadas x positivas van hacia la derecha
del punto 0,0. Las coordenadas x negativas van hacia la izquierda del punto 0,0. Las coordenadas y positivo
van hacia abajo del punto 0,0. Las coordenadas y negativo van hacia arriba del punto 0,0. (347, 56) es la
posición del Panel3 en el formulario. Entonces como se quiere que queden 10 pixeles de margen arriba,
abajo, a la izquierda y a la derecha del tablero (el tablero estará ubicado sobre el Panel3), entonces por eso
se pone (357 + (c * 75) + 12.5, 66 + (f * 75) + 12.5), considerando los 10 pixeles de margen tanto para el eje
x como para el eje y (por eso 357 en vez de 347, y 66 en vez de 56). (c * 75) y (f * 75) es para que en cada
iteración se tome el inicio desde donde se va a formar la casilla tanto de filas (la "f") como de columnas (la
"c"). + 12.5 es porque no se quiere que la ficha se forme justo desde la parte superior izquierda de la casilla,
sino que se desea que quede en el centro de la casilla, entonces se ponen esos 12.5 pixeles de margen
izquierdo para el caso del eje x y 12.5 pixeles de margen superior para el caso del eje y, entonces la casilla
va a tomar 50 pixeles (50 + 12.5 = 62.5 pixeles), y van a quedar otros 12.5 pixeles tanto de margen derecho
como de margen inferior, con lo cual se completan los 75 pixeles de cada casilla (pues 62.5 + 12.5 = 75
pixeles).
'ficha.equipo = 2
casilla(f, c).jugador = 2
casilla(f, c).ocupada = True
Jugador2(x) = ficha
x = x + 1
End If
Mi Web :http://programadorsantosrivera2030.blogspot.com/
Para ver trabajos similares o recibir información semanal sobre nuevas publicaciones,: http://programadorsantosrivera2030.blogspot.com/
Next
Next
End Sub
Public Sub cambiar_color_casillas() 'Procedimiento público para cambiar el color de las casillas del
tablero.
For f = 0 To 7 '8 iteraciones, correspondientes a las 8 filas.
For c = 0 To 7 '8 iteraciones, correspondientes a las 8 columnas.
If (f + c) Mod 2 = 0 Then 'Si el residuo de la suma de la fila más la columna entre dos es cero (lo
cual significaría que esa suma fue un número par). Por ejemplo las casillas (0,0), (2,4), (3,5), etc.
casilla(f, c).BackColor = CASILLAS.color1 'El color de la casilla se pone del color contenido en
la variable Public Shared color1.
Else 'Si el residuo de la suma de la fila más la columna entre dos es diferente de cero (lo cual
significaría que esa suma fue un número impar). Pr ejemplo las casillas (1,3), (3,4), (6,3), etc.
casilla(f, c).BackColor = CASILLAS.color2 'El color de la casilla se pone del color contenido en
la variable Public Shared color2.
End If
Next
Next
End Sub
Public Sub crear_corona1()
corona = New CORONAS
Dim objDraw1 As System.Drawing.Drawing2D.GraphicsPath = New
System.Drawing.Drawing2D.GraphicsPath
objDraw1.AddEllipse(0, 0, 50, 50)
corona.Region = New Region(objDraw1)
corona.Size = New Size(50, 50) 'La propiedad Size funciona gracias a que la variable "ficha" es de tipo
FICHAS, y la clase FICHAS hereda la clase Panel, y la clase Panel tiene la propiedad Size, por lo tanto la
clase Panel le hereda a la clase CASILLAS la propiedad Size. "(50, 50)" son los pixeles, que va a tener 50
pixeles de ancho y 50 pixeles de alto, que es cuadrado pero con el procedimiento AddEllipse se hará
circular. Recuérdese que las casillas tienen 75x75 pixeles, entonces las fichas se van a poner 50x50 pixeles
para que quepan bien dentro de las casillas.
'corona.BackColor = Color.Red
corona.BackgroundImage = Form1.ImageList1.Images(21)
Form1.Controls.Add(corona)
corona.BringToFront()
corona.Location = New Point(cposx, cposy)
End Sub
Public Sub crear_corona2()
corona = New CORONAS
Dim objDraw1 As System.Drawing.Drawing2D.GraphicsPath = New
System.Drawing.Drawing2D.GraphicsPath
objDraw1.AddEllipse(0, 0, 50, 50)
corona.Region = New Region(objDraw1)
corona.Size = New Size(50, 50) 'La propiedad Size funciona gracias a que la variable "ficha" es de tipo
FICHAS, y la clase FICHAS hereda la clase Panel, y la clase Panel tiene la propiedad Size, por lo tanto la
clase Panel le hereda a la clase CASILLAS la propiedad Size. "(50, 50)" son los pixeles, que va a tener 50
pixeles de ancho y 50 pixeles de alto, que es cuadrado pero con el procedimiento AddEllipse se hará
circular. Recuérdese que las casillas tienen 75x75 pixeles, entonces las fichas se van a poner 50x50 pixeles
para que quepan bien dentro de las casillas.
'corona.BackColor = Color.Blue
corona.BackgroundImage = Form1.ImageList1.Images(22)
Form1.Controls.Add(corona)
corona.BringToFront()
corona.Location = New Point(cposx, cposy)
End Sub
Public Sub posibilidad_soplar()
'Evaluación para determinar si el Jugador 1 tiene que comer hacia su izquierda (derecha de la
pantalla).
Mi Web :http://programadorsantosrivera2030.blogspot.com/
Para ver trabajos similares o recibir información semanal sobre nuevas publicaciones,: http://programadorsantosrivera2030.blogspot.com/
For f = 0 To 5 'Desde la fila 1 hasta la 5 porque una ficha que no sea reina puede comer como máximo
desde la fila 6 (para llegar a caer a la fila 8).
For c = 0 To 5 'Desde la columna 1 hasta la 6 porque una ficha que no sea reina puede comer hacia
la derecha de la pantalla (hacia la izquierda del Jugador 1) como máximo desde la columna 6 del tablero
(para llegar a caer a la columna 8).
If casilla(f, c).jugador = 1 Then 'Si hay una ficha del Jugador 1 en esta casilla.
If casilla(f + 1, c + 1).jugador = 2 Then 'Si hay una pieza del Jugador 2 que se puede comer en
diagonal hacia la izquierda del Jugador 1 (hacia la derecha de la pantalla)
If casilla(f + 2, c + 2).ocupada = False Then 'Si se puede comer porque el espacio donde va a
ir a quedar la ficha para comer está vacío.
'If turno = 1 Then 'Para que sea posible soplarle una pieza al Jugador 1 solamente si a él
le correspondía mover y no comió.
soplar1 = True
soplarfila1 = f
soplarcolumna1 = c
End If
End If
End If
Next
Next
'Evaluación para determinar si el Jugador 1 tiene que comer hacia su derecha (izquierda de la
pantalla).
For f = 0 To 5 'Desde la fila 0 hasta la 5 porque una ficha que no sea reina puede comer como máximo
desde la fila 6 (para llegar a caer a la fila 8).
For c = 2 To 7 'Desde la fila 3 hasta la 8 porque una ficha que no sea reina puede comer hacia la
izquierda de la pantalla (hacia la derecha del Jugador 1) como máximo desde la columna 3 del tablero (para
llegar a caer a la columna 1).
If casilla(f, c).jugador = 1 Then 'Si hay una ficha del Jugador 1 en esta casilla.
If casilla(f + 1, c - 1).jugador = 2 Then 'Si hay una pieza del Jugador 2 que se puede comer en
diagonal hacia la derecha del Jugador 1 (hacia la izquierda de la pantalla).
If casilla(f + 2, c - 2).ocupada = False Then 'Si se puede comer porque el espacio donde va a
ir a quedar la ficha para comer está vacío.
'If turno = 1 Then 'Para que sea posible soplarle una pieza al Jugador 1 solamente si a él
le correspondía mover y no comió.
soplar1 = True
soplarfila1 = f
soplarcolumna1 = c
End If
End If
End If
Next
Next
If soplar1 = False Then
Else
End If
'Evaluación para determinar si el Jugador 2 tiene que comer hacia su izquierda (izquierda de la
pantalla).
For f = 2 To 7 'Desde la fila 3 hasta la 8 porque una ficha que no sea reina puede comer como máximo
desde la fila 3 (para llegar a caer a la fila 1).
For c = 2 To 7 'Desde la columna 3 hasta la 8 porque una ficha que no sea reina puede comer hacia
la izquierda de la pantalla (hacia la izquierda del Jugador 2) como máximo desde la columna 3 del tablero
(para llegar a caer a la columna 1).
If casilla(f, c).jugador = 2 Then 'Si hay una ficha del Jugador 2 en esta casilla.
If casilla(f - 1, c - 1).jugador = 1 Then 'Si hay una pieza del Jugador 1 que se puede comer en
diagonal hacia la izquierda del Jugador 2 (hacia la izquierda de la pantalla)
If casilla(f - 2, c - 2).ocupada = False Then 'Si se puede comer porque el espacio donde va a
ir a quedar la ficha para comer está vacío.
soplar2 = True
Mi Web :http://programadorsantosrivera2030.blogspot.com/
Para ver trabajos similares o recibir información semanal sobre nuevas publicaciones,: http://programadorsantosrivera2030.blogspot.com/
soplarfila2 = f
soplarcolumna2 = c
End If
End If
End If
Next
Next
'Evaluación para determinar si el Jugador 2 tiene que comer hacia su derecha (derecha de la pantalla).
For f = 2 To 7 'Desde la fila 3 hasta la 8 porque una ficha que no sea reina puede comer como máximo
desde la fila 3 (para llegar a caer a la fila 1).
For c = 0 To 5 'Desde la fila 1 hasta la 6 porque una ficha que no sea reina puede comer hacia la
derecha de la pantalla (hacia la derecha del Jugador 2) como máximo desde la columna 6 del tablero (para
llegar a caer a la columna 8).
If casilla(f, c).jugador = 2 Then 'Si hay una ficha del Jugador 2 en esta casilla.
If casilla(f - 1, c + 1).jugador = 1 Then 'Si hay una pieza del Jugador 1 que se puede comer en
diagonal hacia la derecha del Jugador 2 (hacia la derecha de la pantalla).
If casilla(f - 2, c + 2).ocupada = False Then 'Si se puede comer porque el espacio donde va a
ir a quedar la ficha para comer está vacío.
soplar2 = True
soplarfila2 = f
soplarcolumna2 = c
End If
End If
End If
Next
Next
End Sub
End Module
Mi Web :http://programadorsantosrivera2030.blogspot.com/
Para ver trabajos similares o recibir información semanal sobre nuevas publicaciones,: http://programadorsantosrivera2030.blogspot.com/
Autor:
Santos Nilo Rivera Luján
Mi Web :
http://programadorsantosrivera2030.blogspot.com/
Miramar , 22 de junio de 2010
Trujillo –Peru
Mis Paginas Web :
Mi web Principal" Rivera & G ":
Descarga la biblia de java y manual de windows 8.
http://riverasn.p.ht/
Mi web Company.Rivera&G :
Descarga mis Aplicaciones y Proyectos en visual basic 2012 ,java,C#,PHP,HTML,JavaScript
http://santosrl.p.ht/
Mi web "El Hacker 2013":
Descarga el manual de visual basic 2010 y visual basic 6.0 portable a full
http://riverayg.zz.mu/
Mi facebook:
https://www.facebook.com/PatrickNilsdeAlesandro.RiveraLujan
Mi grupo de programadores :
https://www.facebook.com/groups/398604720248657/
Mi Web :http://programadorsantosrivera2030.blogspot.com/
Para ver trabajos similares o recibir información semanal sobre nuevas publicaciones,: http://programadorsantosrivera2030.blogspot.com/
Mi grupo de soporte tecnico PC :
https://www.facebook.com/groups/145173492332702/
Mi web JIMBO:
http://riverasn.jimdo.com/
Mi twitter.com:
https://twitter.com/RIVERALUJANSANT

Más contenido relacionado

PDF
Colegio nicolas esguerra
PDF
Identidad corporativa Ziv
PDF
Etiquetas en html
DOCX
PDF
Comentarios (1)
PDF
Inner aderlin
PDF
segundo laboratorio
DOCX
Practicas visual basic-net
Colegio nicolas esguerra
Identidad corporativa Ziv
Etiquetas en html
Comentarios (1)
Inner aderlin
segundo laboratorio
Practicas visual basic-net

Similar a Juego damas-visual-basic2012 (20)

PPTX
Juego dos-caras
PPT
Manual practicas
PPT
Practicas 120322224406-phpapp02
DOCX
Tarea codigos de visual basic net
DOCX
Informe tecnico-juego
PPTX
Programacion en Power Point
PPT
Practicas de visual basic 6.0
PPT
Manual de practicas
PPT
Practicas de visual basic 6.0
PPT
Practicas de visual basic 6.0
PPT
Practicas de visual basic 6.0
PPT
Practicas
PPTX
Diapo margarita
PPTX
Diapo margarita
PPTX
Diapo margarita
PPTX
Manual de usuario: Menú de Programas
PPTX
Diana lara manual de ususario
PDF
Clase vb net.2010 rivera y g
PPTX
Controles y tipos de datos
Juego dos-caras
Manual practicas
Practicas 120322224406-phpapp02
Tarea codigos de visual basic net
Informe tecnico-juego
Programacion en Power Point
Practicas de visual basic 6.0
Manual de practicas
Practicas de visual basic 6.0
Practicas de visual basic 6.0
Practicas de visual basic 6.0
Practicas
Diapo margarita
Diapo margarita
Diapo margarita
Manual de usuario: Menú de Programas
Diana lara manual de ususario
Clase vb net.2010 rivera y g
Controles y tipos de datos
Publicidad

Último (20)

DOCX
V UNIDAD - PRIMER GRADO. del mes de agosto
PDF
SESION 12 INMUNIZACIONES - CADENA DE FRÍO- SALUD FAMILIAR - PUEBLOS INDIGENAS...
PDF
el - LIBRO-PACTO-EDUCATIVO-GLOBAL-OIEC.pdf
PDF
Fundamentos_Educacion_a_Distancia_ABC.pdf
PPTX
Presentación de la Cetoacidosis diabetica.pptx
PDF
DI, TEA, TDAH.pdf guía se secuencias didacticas
PDF
Crear o Morir - Andres Oppenheimer Ccesa007.pdf
PDF
TOMO II - LITERATURA.pd plusenmas ultras
DOCX
Informe_practica pre Final.docxddadssasdddddddddddddddddddddddddddddddddddddddd
DOCX
UNIDAD DE APRENDIZAJE 5 AGOSTO tradiciones
PDF
Gasista de unidades unifuncionales - pagina 23 en adelante.pdf
PDF
Habitos de Ricos - Juan Diego Gomez Ccesa007.pdf
PDF
Integrando la Inteligencia Artificial Generativa (IAG) en el Aula
PDF
Cronograma de clases de Práctica Profesional 2 2025 UDE.pdf
PDF
Escuela de Negocios - Robert kiyosaki Ccesa007.pdf
PDF
Guia de Tesis y Proyectos de Investigacion FS4 Ccesa007.pdf
PDF
ciencias-1.pdf libro cuarto basico niños
PDF
Atencion prenatal. Ginecologia y obsetricia
PDF
5°-UNIDAD 5 - 2025.pdf aprendizaje 5tooo
PDF
Educación Artística y Desarrollo Humano - Howard Gardner Ccesa007.pdf
V UNIDAD - PRIMER GRADO. del mes de agosto
SESION 12 INMUNIZACIONES - CADENA DE FRÍO- SALUD FAMILIAR - PUEBLOS INDIGENAS...
el - LIBRO-PACTO-EDUCATIVO-GLOBAL-OIEC.pdf
Fundamentos_Educacion_a_Distancia_ABC.pdf
Presentación de la Cetoacidosis diabetica.pptx
DI, TEA, TDAH.pdf guía se secuencias didacticas
Crear o Morir - Andres Oppenheimer Ccesa007.pdf
TOMO II - LITERATURA.pd plusenmas ultras
Informe_practica pre Final.docxddadssasdddddddddddddddddddddddddddddddddddddddd
UNIDAD DE APRENDIZAJE 5 AGOSTO tradiciones
Gasista de unidades unifuncionales - pagina 23 en adelante.pdf
Habitos de Ricos - Juan Diego Gomez Ccesa007.pdf
Integrando la Inteligencia Artificial Generativa (IAG) en el Aula
Cronograma de clases de Práctica Profesional 2 2025 UDE.pdf
Escuela de Negocios - Robert kiyosaki Ccesa007.pdf
Guia de Tesis y Proyectos de Investigacion FS4 Ccesa007.pdf
ciencias-1.pdf libro cuarto basico niños
Atencion prenatal. Ginecologia y obsetricia
5°-UNIDAD 5 - 2025.pdf aprendizaje 5tooo
Educación Artística y Desarrollo Humano - Howard Gardner Ccesa007.pdf
Publicidad

Juego damas-visual-basic2012

  • 1. Mi Web :http://programadorsantosrivera2030.blogspot.com/ Para ver trabajos similares o recibir información semanal sobre nuevas publicaciones,: http://programadorsantosrivera2030.blogspot.com/ Programación de un juego de damas en Visual Basic 2012 Santos Nilo Rivera Luján- Mi web :http://programadorsantosrivera2030.blogspot.com/ Este programa está desarrollado en Microsoft Visual Basic 2012 utilizando las técnicas de la programación orientada a objetos. A continuación se muestran las impresiones de pantalla del programa en ejecución, así como también el código completo del programa, el cual se encuentra lleno de comentarios para que los programadores que lo deseen puedan estudiar el código, aprender de las técnicas de programación orientada a objetos que se han utilizado y finalmente, si lo desean, modificar el código o utilizarlo para las aplicaciones que quieran.
  • 2. Mi Web :http://programadorsantosrivera2030.blogspot.com/ Para ver trabajos similares o recibir información semanal sobre nuevas publicaciones,: http://programadorsantosrivera2030.blogspot.com/ IMPRESIONES DE PANTALLA DEL PROGRAMA EN EJECUCIÓN
  • 3. Mi Web :http://programadorsantosrivera2030.blogspot.com/ Para ver trabajos similares o recibir información semanal sobre nuevas publicaciones,: http://programadorsantosrivera2030.blogspot.com/
  • 4. Mi Web :http://programadorsantosrivera2030.blogspot.com/ Para ver trabajos similares o recibir información semanal sobre nuevas publicaciones,: http://programadorsantosrivera2030.blogspot.com/
  • 5. Mi Web :http://programadorsantosrivera2030.blogspot.com/ Para ver trabajos similares o recibir información semanal sobre nuevas publicaciones,: http://programadorsantosrivera2030.blogspot.com/
  • 6. Mi Web :http://programadorsantosrivera2030.blogspot.com/ Para ver trabajos similares o recibir información semanal sobre nuevas publicaciones,: http://programadorsantosrivera2030.blogspot.com/
  • 7. Mi Web :http://programadorsantosrivera2030.blogspot.com/ Para ver trabajos similares o recibir información semanal sobre nuevas publicaciones,: http://programadorsantosrivera2030.blogspot.com/
  • 8. Mi Web :http://programadorsantosrivera2030.blogspot.com/ Para ver trabajos similares o recibir información semanal sobre nuevas publicaciones,: http://programadorsantosrivera2030.blogspot.com/
  • 9. Mi Web :http://programadorsantosrivera2030.blogspot.com/ Para ver trabajos similares o recibir información semanal sobre nuevas publicaciones,: http://programadorsantosrivera2030.blogspot.com/
  • 10. Mi Web :http://programadorsantosrivera2030.blogspot.com/ Para ver trabajos similares o recibir información semanal sobre nuevas publicaciones,: http://programadorsantosrivera2030.blogspot.com/
  • 11. Mi Web :http://programadorsantosrivera2030.blogspot.com/ Para ver trabajos similares o recibir información semanal sobre nuevas publicaciones,: http://programadorsantosrivera2030.blogspot.com/ OBJETOS DEL PROGRAMA En tiempo de diseño, insertar los siguientes objetos con las propiedades que se muestran: OBJETO PROPIEDAD VALOR Form1 (Name) Form1 AutoScaleMode Font BackColor Black
  • 12. Mi Web :http://programadorsantosrivera2030.blogspot.com/ Para ver trabajos similares o recibir información semanal sobre nuevas publicaciones,: http://programadorsantosrivera2030.blogspot.com/ BackgroundImage System.Drawing.Bitmap BackgroundImageLayout Stretch Font Microsoft Sans Serif, 9.75pt, style=Bold ForeColor White FormBorderStyle FixedSingle MainMenuStrip MenuStip1 MaximizeBox| False Size 1015, 738 StartPosition CenterScreen Text JUEGO DE DAMAS Label7 (Name) Label7 Autosize True BackColor Transparent Font Lucida Calligraphy, 48pt, style=Bold ForeColor Yellow Location 29, 41 Modifiers Friend Size 283, 249 TabIndex 6 Text Juego de Damas 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
  • 13. Mi Web :http://programadorsantosrivera2030.blogspot.com/ Para ver trabajos similares o recibir información semanal sobre nuevas publicaciones,: http://programadorsantosrivera2030.blogspot.com/ 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
  • 14. Mi Web :http://programadorsantosrivera2030.blogspot.com/ Para ver trabajos similares o recibir información semanal sobre nuevas publicaciones,: http://programadorsantosrivera2030.blogspot.com/ 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
  • 15. Mi Web :http://programadorsantosrivera2030.blogspot.com/ Para ver trabajos similares o recibir información semanal sobre nuevas publicaciones,: http://programadorsantosrivera2030.blogspot.com/ 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
  • 16. Mi Web :http://programadorsantosrivera2030.blogspot.com/ Para ver trabajos similares o recibir información semanal sobre nuevas publicaciones,: http://programadorsantosrivera2030.blogspot.com/ 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
  • 17. Mi Web :http://programadorsantosrivera2030.blogspot.com/ Para ver trabajos similares o recibir información semanal sobre nuevas publicaciones,: http://programadorsantosrivera2030.blogspot.com/ 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
  • 18. Mi Web :http://programadorsantosrivera2030.blogspot.com/ Para ver trabajos similares o recibir información semanal sobre nuevas publicaciones,: http://programadorsantosrivera2030.blogspot.com/ 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 Santos Nilo Rivera Lujan Patrick_alesandro@hotmail.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
  • 19. Mi Web :http://programadorsantosrivera2030.blogspot.com/ Para ver trabajos similares o recibir información semanal sobre nuevas publicaciones,: http://programadorsantosrivera2030.blogspot.com/ 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
  • 20. Mi Web :http://programadorsantosrivera2030.blogspot.com/ Para ver trabajos similares o recibir información semanal sobre nuevas publicaciones,: http://programadorsantosrivera2030.blogspot.com/ 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
  • 21. Mi Web :http://programadorsantosrivera2030.blogspot.com/ Para ver trabajos similares o recibir información semanal sobre nuevas publicaciones,: http://programadorsantosrivera2030.blogspot.com/ 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
  • 22. Mi Web :http://programadorsantosrivera2030.blogspot.com/ Para ver trabajos similares o recibir información semanal sobre nuevas publicaciones,: http://programadorsantosrivera2030.blogspot.com/ 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.
  • 23. Mi Web :http://programadorsantosrivera2030.blogspot.com/ Para ver trabajos similares o recibir información semanal sobre nuevas publicaciones,: http://programadorsantosrivera2030.blogspot.com/ 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
  • 24. Mi Web :http://programadorsantosrivera2030.blogspot.com/ Para ver trabajos similares o recibir información semanal sobre nuevas publicaciones,: http://programadorsantosrivera2030.blogspot.com/ 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
  • 25. Mi Web :http://programadorsantosrivera2030.blogspot.com/ Para ver trabajos similares o recibir información semanal sobre nuevas publicaciones,: http://programadorsantosrivera2030.blogspot.com/ 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 Next If fila + columna <> fila1 + columna1 Then 'Con esto se verifica si el movimiento no ha sido diagonal, pues por ejemplo si la corona estuviera originalmente en la posición (0, 6), la suma de la fila más la columna da 6; entonces la suma de los subíndices de la posición destino deben sumar 6 para asegurar que el movimiento fue diagonal, por ejemplo: (1, 5), (2, 4), (3, 3), (4, 2), (5, 1) y (6, 0) son movimientos diagonales válidos hacia el Suroeste. Si la posición destino tuviera los subíndices (3, 5), (5, 5), (7, 5), (5, 3), (7, 1), (3, 1) y (1, 3) por ejemplo, la suma de los subíndices de la posición destino no da 6 (que es la suma de los subíndices de la posición de origen para este ejemplo), por lo tanto, el movimiento no habría sido diagonal y sería inválido. Si el movimiento no fue válido (fue hacia el Suroeste pero no fue un movimiento diagonal), la corona se regresará 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 Noroeste). 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.
  • 26. Mi Web :http://programadorsantosrivera2030.blogspot.com/ Para ver trabajos similares o recibir información semanal sobre nuevas publicaciones,: http://programadorsantosrivera2030.blogspot.com/ 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 End If 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 atrás del Jugador 1 (hacia arriba en la pantalla); hacia el Norte 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 atrás Jugador 1 (hacia arriba 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 Noroeste. '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).
  • 27. Mi Web :http://programadorsantosrivera2030.blogspot.com/ Para ver trabajos similares o recibir información semanal sobre nuevas publicaciones,: http://programadorsantosrivera2030.blogspot.com/ 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 = columna1 '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 = fila1 To fila - 1 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 fila + columna <> fila1 + columna1 + ((columna - columna1) * 2) 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 Noroeste) se debe cumplir la siguiente ecuación: "fila + columna = fila + columna + ((columna - columna1) * 2)". Por ejemplo, si la posición de inicio fue (7,7), la suma de esos subíndices es 14, entonces la posición destino (6,6) sería válida porque fila1+columna2+((columna- columna1)*2)=6+6+((7-6)*2)=14. Igualmente otras posiciones válidas para este ejemplo serían (5,5), (4,4), (3,3), (2,2). Algunas posiciones inválidas para este mismo ejemplo serían (7,5), (7,3), (6,0), (4,0), (3,1), (2,0). Si no se cumple esta ecuación, el movimiento hacia el Noroeste 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 Noroeste). 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.
  • 28. Mi Web :http://programadorsantosrivera2030.blogspot.com/ Para ver trabajos similares o recibir información semanal sobre nuevas publicaciones,: http://programadorsantosrivera2030.blogspot.com/ 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 atrás del Jugador 1 (hacia arriba 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 Noreste. '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 = columna1 '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 = fila1 To fila - 1 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
  • 29. Mi Web :http://programadorsantosrivera2030.blogspot.com/ Para ver trabajos similares o recibir información semanal sobre nuevas publicaciones,: http://programadorsantosrivera2030.blogspot.com/ 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 Next If fila + columna <> fila1 + columna1 Then 'Con esto se verifica si el movimiento no ha sido diagonal, pues por ejemplo si la corona estuviera originalmente en la posición (7, 1), la suma de la fila más la columna da 8; entonces la suma de los subíndices de la posición destino deben sumar 8 para asegurar que el movimiento fue diagonal, por ejemplo: (6, 2), (5, 3), (4, 4), (3, 5) y (2, 6) son movimientos diagonales válidos hacia el Noreste. Si la posición destino tuviera los subíndices (4, 2), (3, 3), (5, 5) o (4, 6) por ejemplo, la suma de los subíndices de la posición destino no da 8 (que es la suma de los subíndices de la posición de origen para este ejemplo), por lo tanto, el movimiento no habría sido diagonal y sería inválido. Si el movimiento no fue válido (fue hacia el Noreste pero no fue un movimiento diagonal), la corona se regresará 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 Noreste). 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
  • 30. Mi Web :http://programadorsantosrivera2030.blogspot.com/ Para ver trabajos similares o recibir información semanal sobre nuevas publicaciones,: http://programadorsantosrivera2030.blogspot.com/ Me.Top = pos_y End If End If End If End If 'Si los movimientos no son diagonales sino que rectos, la corona se devuelve a su posición inicial o de origen. If columna = columna1 Then Me.Left = pos_x Me.Top = pos_y End If If fila1 = fila Then Me.Left = pos_x Me.Top = pos_y End If End Sub Public Sub mover2(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 mover2(ByVal sender As Panel), ya se sabe que el movimiento es para el Jugador 2, entonces esta línea condiciona que el Jugador 2 mueve hacia atrás del Jugador 2 (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 mover2(ByVal sender As Panel), ya se sabe que el movimiento es para el Jugador 2, y a la vez por la línea anterior se sabe que el movimiento ha sido hacia adelante del Jugador 2 (hacia abajo en la pantalla), entonces esta línea condiciona que el Jugador 2 mueve hacia su derecha (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". '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 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". End If End If
  • 31. Mi Web :http://programadorsantosrivera2030.blogspot.com/ Para ver trabajos similares o recibir información semanal sobre nuevas publicaciones,: http://programadorsantosrivera2030.blogspot.com/ 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 numdefichasjug2 = 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 = 2 sender.Top = casilla(fila1, columna1).Top + 12.5 sender.Left = casilla(fila1, columna1).Left + 12.5 turno = 1 'Para que luego de efectuar este movimiento, que el turno sea para el Jugador 1. End If If numdefichasjug1 = 1 Then 'Si hay 1 ficha del Jugador 1 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 = 2 sender.Top = casilla(fila1, columna1).Top + 12.5 sender.Left = casilla(fila1, columna1).Left + 12.5 turno = 1 'Para que luego de efectuar este movimiento, que el turno sea para el Jugador 1. comer1(ieliminar, jeliminar) 'Para quitar la ficha del otro equipo que ha sido comida por la corona. End If If numdefichasjug2 = 1 Then 'Si hay una ficha del Jugador 2 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
  • 32. Mi Web :http://programadorsantosrivera2030.blogspot.com/ Para ver trabajos similares o recibir información semanal sobre nuevas publicaciones,: http://programadorsantosrivera2030.blogspot.com/ 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 mover2(ByVal sender As Panel), ya se sabe que el movimiento es para el Jugador 2, y a la vez por la línea anterior se sabe que el movimiento ha sido hacia adelante del Jugador 2 (hacia arriba en la pantalla), entonces esta línea condiciona que el Jugador 2 mueve hacia su izquierda (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". '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 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". 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 Next If fila + columna <> fila1 + columna1 Then 'Con esto se verifica si el movimiento no ha sido diagonal, pues por ejemplo si la corona estuviera originalmente en la posición (0, 6), la suma de la fila más la columna da 6; entonces la suma de los subíndices de la posición destino deben sumar 6 para asegurar que el movimiento fue diagonal, por ejemplo: (1, 5), (2, 4), (3, 3), (4, 2), (5, 1) y (6, 0) son movimientos diagonales válidos hacia el Suroeste. Si la posición destino tuviera los subíndices (3, 5), (5, 5), (7, 5), (5, 3), (7, 1), (3, 1) y (1, 3) por ejemplo, la suma de los subíndices de la posición destino no da 6 (que es la suma de los subíndices de la posición de origen para este ejemplo), por lo tanto, el movimiento no habría sido diagonal y sería inválido. Si el movimiento no fue válido (fue hacia el Suroeste pero no fue un movimiento diagonal), la corona se regresará 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 Noroeste). 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 numdefichasjug2 = 0 Then
  • 33. Mi Web :http://programadorsantosrivera2030.blogspot.com/ Para ver trabajos similares o recibir información semanal sobre nuevas publicaciones,: http://programadorsantosrivera2030.blogspot.com/ 'Se efectúa el movimiento. casilla(fila, columna).ocupada = False casilla(fila1, columna1).ocupada = True casilla(fila, columna).jugador = 0 casilla(fila1, columna1).jugador = 2 sender.Top = casilla(fila1, columna1).Top + 12.5 sender.Left = casilla(fila1, columna1).Left + 12.5 turno = 1 'Para que luego de efectuar este movimiento, que el turno sea para el Jugador 1. End If If numdefichasjug1 = 1 Then 'Si hay 1 ficha del Jugador 1 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 = 2 sender.Top = casilla(fila1, columna1).Top + 12.5 sender.Left = casilla(fila1, columna1).Left + 12.5 turno = 1 'Para que luego de efectuar este movimiento, que el turno sea para el Jugador 1. comer1(ieliminar, jeliminar) 'Para quitar la ficha del otro equipo que ha sido comida por la corona. End If If numdefichasjug2 = 1 Then 'Si hay una ficha del Jugador 2 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 End If 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 mover2(ByVal sender As Panel), ya se sabe que el movimiento es para el Jugador 2, entonces esta línea condiciona que el Jugador 2 mueve hacia adelante del Jugador 2 (hacia arriba en la pantalla); hacia el Norte. 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 mover2(ByVal sender As Panel), ya se sabe que el movimiento es para el Jugador 2, y a la vez por la línea anterior se sabe que el movimiento ha sido hacia adelante del Jugador 2 (hacia arriba en la pantalla), entonces esta línea condiciona que el Jugador 2 mueve hacia su izquierda (hacia la izquierda en la pantalla); hacia el Oeste. 'Se sabe entonces que el movimiento ha sido diagonalmente hacia el Noroeste. '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.
  • 34. Mi Web :http://programadorsantosrivera2030.blogspot.com/ Para ver trabajos similares o recibir información semanal sobre nuevas publicaciones,: http://programadorsantosrivera2030.blogspot.com/ j = columna1 '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 = fila1 To fila - 1 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". 'Se almacenan los valores de fila y columna de la ficha que se tendría que eliminar en casi de cumplirse condiciones que se evaluarán posteriormente. ieliminar = i jeliminar = j 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". 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 fila + columna <> fila1 + columna1 + ((columna - columna1) * 2) 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 Noroeste) se debe cumplir la siguiente ecuación: "fila + columna = fila + columna + ((columna - columna1) * 2)". Por ejemplo, si la posición de inicio fue (7,7), la suma de esos subíndices es 14, entonces la posición destino (6,6) sería válida porque fila1+columna2+((columna- columna1)*2)=6+6+((7-6)*2)=14. Igualmente otras posiciones válidas para este ejemplo serían (5,5), (4,4), (3,3), (2,2). Algunas posiciones inválidas para este mismo ejemplo serían (7,5), (7,3), (6,0), (4,0), (3,1), (2,0). Si no se cumple esta ecuación, el movimiento hacia el Noroeste 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 Noroeste). 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 numdefichasjug2 = 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 = 2 sender.Top = casilla(fila1, columna1).Top + 12.5 sender.Left = casilla(fila1, columna1).Left + 12.5 turno = 1 'Para que luego de efectuar este movimiento, que el turno sea para el Jugador 1. End If If numdefichasjug1 = 1 Then 'Si hay 1 ficha del Jugador 1 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 = 2
  • 35. Mi Web :http://programadorsantosrivera2030.blogspot.com/ Para ver trabajos similares o recibir información semanal sobre nuevas publicaciones,: http://programadorsantosrivera2030.blogspot.com/ sender.Top = casilla(fila1, columna1).Top + 12.5 sender.Left = casilla(fila1, columna1).Left + 12.5 turno = 1 'Para que luego de efectuar este movimiento, que el turno sea para el Jugador 1. comer1(ieliminar, jeliminar) 'Para quitar la ficha del otro equipo que ha sido comida por la corona. End If If numdefichasjug2 = 1 Then 'Si hay una ficha del Jugador 2 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 mover2(ByVal sender As Panel), ya se sabe que el movimiento es para el Jugador 2, y a la vez por la línea anterior se sabe que el movimiento ha sido hacia adelante del Jugador 2 (hacia arriba en la pantalla), entonces esta línea condiciona que el Jugador 2 mueve hacia su derecha (hacia la derecha en la pantalla); hacia el Este. 'Se sabe entonces que el movimiento ha sido diagonalmente hacia el Noreste. '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 = columna1 '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 = fila1 To fila - 1 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". 'Se almacenan los valores de fila y columna de la ficha que se tendría que eliminar en casi de cumplirse condiciones que se evaluarán posteriormente. ieliminar = i jeliminar = j 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". End If End If j -= 1 'Equivale a escribir "j = j - 1".
  • 36. Mi Web :http://programadorsantosrivera2030.blogspot.com/ Para ver trabajos similares o recibir información semanal sobre nuevas publicaciones,: http://programadorsantosrivera2030.blogspot.com/ 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 Next If fila + columna <> fila1 + columna1 Then 'Con esto se verifica si el movimiento no ha sido diagonal, pues por ejemplo si la corona estuviera originalmente en la posición (7, 1), la suma de la fila más la columna da 8; entonces la suma de los subíndices de la posición destino deben sumar 8 para asegurar que el movimiento fue diagonal, por ejemplo: (6, 2), (5, 3), (4, 4), (3, 5) y (2, 6) son movimientos diagonales válidos hacia el Noreste. Si la posición destino tuviera los subíndices (4, 2), (3, 3), (5, 5) o (4, 6) por ejemplo, la suma de los subíndices de la posición destino no da 8 (que es la suma de los subíndices de la posición de origen para este ejemplo), por lo tanto, el movimiento no habría sido diagonal y sería inválido. Si el movimiento no fue válido (fue hacia el Noreste pero no fue un movimiento diagonal), la corona se regresará 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 Noreste). 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 numdefichasjug2 = 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 = 2 sender.Top = casilla(fila1, columna1).Top + 12.5 sender.Left = casilla(fila1, columna1).Left + 12.5 turno = 1 'Para que luego de efectuar este movimiento, que el turno sea para el Jugador 1. End If If numdefichasjug1 = 1 Then 'Si hay 1 ficha del Jugador 1 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 = 2 sender.Top = casilla(fila1, columna1).Top + 12.5 sender.Left = casilla(fila1, columna1).Left + 12.5 turno = 1 'Para que luego de efectuar este movimiento, que el turno sea para el Jugador 1. comer1(ieliminar, jeliminar) 'Para quitar la ficha del otro equipo que ha sido comida por la corona. End If If numdefichasjug2 = 1 Then 'Si hay una ficha del Jugador 2 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
  • 37. Mi Web :http://programadorsantosrivera2030.blogspot.com/ Para ver trabajos similares o recibir información semanal sobre nuevas publicaciones,: http://programadorsantosrivera2030.blogspot.com/ End If 'Si los movimientos no son diagonales sino que rectos, la corona se devuelve a su posición inicial o de origen. If columna = columna1 Then Me.Left = pos_x Me.Top = pos_y End If If fila1 = fila Then Me.Left = pos_x Me.Top = pos_y End If End Sub Public Sub comer1(ByVal i As Integer, ByVal j As Integer) 'En el módulo PRINCIPAL se ha declarado "Public casilla(7, 7) As CASILLAS", por lo cual la variable casillas(indice1, indice2) se encuentra disponible en cualquier parte. casilla(i, j).ocupada = False 'La casilla donde estaba la pieza que acaba de ser comida, se pone en False para hacer que se encuentre desocupada. casilla(i, j).jugador = 0 'Ningún Jugador tendrá ficha en esta casilla porque acaba de ser comida. casilla(i, j).BringToFront() 'La casilla que fue desocupada con la línea anterior se trae al frente, pues si no se hiciera esto se seguiría viendo la ficha que fue comida. Con esta línea se hace que la ficha comida quede abajo y que no se vea porque se le pone encima la casilla sin ninguna pieza. End Sub End Class FICHAS.vb Public Class FICHAS 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 Public si As Integer = 0 'Variable que cuando vale 1 significa que fue posible realizar un movimiento, ya sea simplemente mover una ficha o comer. 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
  • 38. Mi Web :http://programadorsantosrivera2030.blogspot.com/ Para ver trabajos similares o recibir información semanal sobre nuevas publicaciones,: http://programadorsantosrivera2030.blogspot.com/ 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 si = 0 'Inicialmente se pone esta variable en 0 para indicar que ningún movimiento ha sido todavía posible. Si en el procedimiento mover1(CType(sender, Panel)) o en el procedimiento mover2(CType(sender, Panel)) esta variable cambia a tener valor de 1, entonces podrán crearse coronas. 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 pieza. '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.
  • 39. Mi Web :http://programadorsantosrivera2030.blogspot.com/ Para ver trabajos similares o recibir información semanal sobre nuevas publicaciones,: http://programadorsantosrivera2030.blogspot.com/ If turno = 1 Then 'Si el turno de mover es para el Jugador 1. If fila1 > fila And clicfichajug1 = True And (fila1 - fila <= 2) 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 mayor que la fila origen, es decir que se trata de un movimiento del Jugador 1 hacia adelante (hacia abajo en la pantalla). La segunda condición que se pone es que sobre la ficha que se hizo clic tiene que pertenecerle al Jugador 1. La última condición es para que la ficha no trate de avanzar tres filas o más (pues se puede avanzar solamente una fila o dos como máximo al comer). mover1(CType(sender, Panel)) If si = 1 Then 'Si fue posible efectuar el movimiento, ya sea mover una ficha o comer. If fila1 = 7 Then 'Porque la posición hacia donde quieren mover las fichas que vienen de arriba hacia abajo (Jugador 1) es la final de hasta abajo del tablero (fila 8), y es un movimiento válido, lo cual significa que una ficha se corona. cposx = CType(sender, Panel).Left cposy = CType(sender, Panel).Top CType(sender, Panel).Visible = False crear_corona1() End If End If 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 (fila1 < fila) And clicfichajug2 And (fila - fila1 <= 2) 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. La última condición es para que la ficha no trate de avanzar tres filas o más (pues se puede avanzar solamente una fila o dos como máximo al comer). mover2(CType(sender, Panel)) If si = 1 Then 'Si fue posible realizar el movimiento, ya sea mover una ficha o comer. If fila1 = 0 Then 'Porque la posición hacia donde quieren mover las fichas que vienen de abajo hacia arriba (Jugador 2) es la final de hasta arriba del tablero (fila 1), y es un movimiento válido, lo cual significa que una ficha se corona. cposx = CType(sender, Panel).Left cposy = CType(sender, Panel).Top CType(sender, Panel).Visible = False crear_corona2() End If End If Else Me.Left = pos_x Me.Top = pos_y 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.
  • 40. Mi Web :http://programadorsantosrivera2030.blogspot.com/ Para ver trabajos similares o recibir información semanal sobre nuevas publicaciones,: http://programadorsantosrivera2030.blogspot.com/ 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 'Equivale a escribir "If mover = True Then". mover = True al ejecutar el evento mouse_down; y mover = False al ejecutar el evento mouse_up. 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) 'Debido a las condiciones dadas en el código antes de llamar este procedimiento, se sabe que cuando haya sido llamado, el Jugador 1 está haciendo un movimiento hacia adelante (hacia abajo en la pantalla), pero hace falta evaluar cuántas posiciones se va a desplazar diagonalmente hacia la derecha o hacia la izquierda, y así saber si el movimiento es válido o no, y si se puede hacer el movimiento, dependiendo de si hay una ficha o no, o si es posible comer, etc. If columna1 > columna Then 'Si el movimiento es diagonalmente hacia la derecha de la pantalla (izquierda del Jugador 1). 'Si el Jugador 1 mueve diagonalmente una posición hacia la derecha de la pantalla (una posición hacia la izquierda del Jugador 1). If columna1 = columna + 1 Then If casilla(fila1, columna1).ocupada = False Then If fila1 = soplarfila1 + 1 And columna1 = soplarcolumna1 + 1 And soplar1 = True Then 'Si se tenía que soplar debido a que en vez de comer, el Jugador 1 movió una posición diagonalmente hacia la derecha de la pantalla con la ficha que tenía la posibilidad de comer. 'La pieza se regresa a la posición en la que estaba. Me.Left = pos_x Me.Top = pos_y 'La pieza que ha sido regresada a la posición en la que estaba con las líneas anteriores, es soplada por no haber comido cuando tenía que hacerlo. comer1(soplarfila1, soplarcolumna1) 'Se quita esta ficha del tablero y se deja la casilla vacía. si = 1 'Indica que sí fue posible realizar el movimiento de la ficha. turno = 2 'Para que luego de efectuar este movimiento, que el turno sea para el Jugador 2. Else 'Si el movimiento de una posición diagonalmente hacia la derecha no fue por parte de una ficha que tenía que comer (y por lo tanto no tiene que ser soplada). If soplar1 = True Then 'Si hay alguna ficha del Jugador 1 que se tiene que soplar por no haber comido cuando tuvo la oportunidad. comer1(soplarfila1, soplarcolumna1) 'Se quita esta ficha del tablero y se deja la casilla vacía. 'Para que se ponga en posición de soplar una casilla en donde nunca podría haber una ficha. soplarfila1 = 0 soplarcolumna1 = 1 soplar1 = False 'Porque se acaba de soplar ya. End If casilla(fila, columna).ocupada = False 'Desaparece la ficha de donde estaba porque va a ponerse en otra casilla. casilla(fila1, columna1).ocupada = True 'Se pone la ficha en la nueva casilla, pues se movió de donde estaba. casilla(fila, columna).jugador = 0 '0 para indicar que en esta casilla no está la ficha de ningún Jugador. casilla(fila1, columna1).jugador = 1 '1 para indicar que en esta casilla está una ficha del Jugador 1. sender.Top = casilla(fila1, columna1).Top + 12.5 sender.Left = casilla(fila1, columna1).Left + 12.5 si = 1 'Indica que sí fue posible realizar el movimiento de la ficha. turno = 2 'Para que luego de efectuar este movimiento, que el turno sea para el Jugador 2. End If
  • 41. Mi Web :http://programadorsantosrivera2030.blogspot.com/ Para ver trabajos similares o recibir información semanal sobre nuevas publicaciones,: http://programadorsantosrivera2030.blogspot.com/ Else 'La ficha se devuelve a la posición de origen, pues no se pudo efectuar un movimiento de una posición hacia la derecha de la pantalla (izquierda del Jugador 1). Me.Left = pos_x Me.Top = pos_y End If 'Si el Jugador 1 mueve diagonalmente dos posiciones para comer a la derecha de la pantalla (dos posiciones hacia la izquierda del Jugador 1). ElseIf columna1 = columna + 2 Then If casilla(fila + 1, columna + 1).ocupada = False Then 'No puede moverse dos posiciones si no hay una pieza del otro equipo de por medio para comérsela, entonces se regresa la ficha a la posición en donde estaba. Me.Left = pos_x Me.Top = pos_y Else 'Hay una ficha de por medio, entonces podría darse el movimiento de comer, pero si se cumple la condición de que esa ficha sea del otro equipo. If casilla(fila + 1, columna + 1).jugador = 2 Then 'Si la ficha que hay de por medio es del Jugador 2 (y sabiendo que el Jugador 1 es el que quiere hacer este movimiento), entonces se puede comer la pieza y efectuar el movimiento. If casilla(fila1, columna1).ocupada = False Then 'Si la posición destino (donde se quiere poner la ficha) está desocupada. casilla(fila, columna).ocupada = False 'Se quita la ficha de donde estaba originalmente. casilla(fila1, columna1).ocupada = True 'Se pone la ficha en la posición de destino. casilla(fila, columna).jugador = 0 '0 porque en estarán fichas de ningún Jugador. casilla(fila1, columna1).jugador = 1 sender.Top = casilla(fila1, columna1).Top + 12.5 sender.Left = casilla(fila1, columna1).Left + 12.5 comer1(fila + 1, columna + 1) 'Se quita la ficha que intermedia entre la posición origen y la posición destino, es decir que ésta ficha es comida. comerdoble1(CType(sender, Panel)) 'Se llama al procedimiento para verificar si se puede comer doble. si = 1 'Indica que sí fue posible realizar el movimiento de la ficha. turno = 2 'Para que luego de efectuar este movimiento, que el turno sea para el Jugador 2. Else 'La ficha se devuelve a la posición de origen, pues no se pudo efectuar un movimiento de dos posiciones hacia la derecha de la pantalla (izquierda del Jugador 1). Me.Left = pos_x Me.Top = pos_y End If Else 'Si la ficha que hay de por medio es del Jugador 1, el movimiento es inválido porque un Jugador no puede comerse sus mismas piezas, entonces la pieza regresa a la posición en la que estaba y el movimiento no se puede hacer efectivo. Me.Left = pos_x Me.Top = pos_y End If End If Else 'Si el Jugador 1 mueve diagonalmente tres o más posiciones hacia la derecha de la pantalla (tres o más posiciones hacia la izquierda del Jugador 1). En este caso, la ficha se vuelve a la posición de origen en la que estaba y el movimiento no se hace efectivo porque solamente una reina podría mover de esa manera, moviéndose tres o más espacios en diagonal. Me.Left = pos_x Me.Top = pos_y End If End If If columna1 < columna Then 'Si el movimiento es diagonalmente hacia la izquierda de la pantalla (derecha del Jugador 1). 'Si el Jugador 1 mueve diagonalmente una posición hacia la izquierda de la pantalla (una posición hacia la derecha del Jugador 1). If columna1 = columna - 1 Then If casilla(fila1, columna1).ocupada = False Then
  • 42. Mi Web :http://programadorsantosrivera2030.blogspot.com/ Para ver trabajos similares o recibir información semanal sobre nuevas publicaciones,: http://programadorsantosrivera2030.blogspot.com/ If fila1 = soplarfila1 + 1 And columna1 = soplarcolumna1 - 1 And soplar1 = True Then 'Si se tenía que soplar debido a que en vez de comer, el Jugador 1 movió una posición diagonalmente hacia la izquierda de la pantalla con la ficha que tenía la posibilidad de comer. 'La pieza se regresa a la posición en la que estaba. Me.Left = pos_x Me.Top = pos_y 'La pieza que ha sido regresada a la posición en la que estaba con las líneas anteriores, es soplada por no haber comido cuando tenía que hacerlo. comer1(soplarfila1, soplarcolumna1) 'Se quita esta ficha del tablero y se deja la casilla vacía. si = 1 'Indica que sí fue posible realizar el movimiento de la ficha. turno = 2 'Para que luego de efectuar este movimiento, que el turno sea para el Jugador 2. Else 'Si el movimiento de una posición diagonalmente hacia la izquierda no fue por parte de una ficha que tenía que comer (y por lo tanto no tiene que ser soplada). If soplar1 = True Then 'Si hay alguna ficha del Jugador 1 que se tiene que soplar por no haber comido cuando tuvo la oportunidad. 'MsgBox("Se soplará la ficha del Jugador 1" + " que se encuentra en la fila " + Str(soplarfila1 + 1) + " y columna " + Str(soplarcolumna1 + 1) + ".", MsgBoxStyle.OkOnly, "Juego de Damas") 'Mensaje para indicar la ficha que se va a soplar. comer1(soplarfila1, soplarcolumna1) 'Se sopla la ficha que no comió cuando tuvo la oportunidad. 'Para que se ponga en posición de soplar una casilla en donde nunca podría haber una ficha. soplarfila1 = 7 soplarcolumna1 = 0 soplar1 = False 'Porque se acaba de soplar ya. End If casilla(fila, columna).ocupada = False 'Desaparece la ficha de donde estaba porque va a ponerse en otra casilla. casilla(fila1, columna1).ocupada = True 'Se pone la ficha en la nueva casilla, pues se movió de donde estaba. casilla(fila, columna).jugador = 0 '0 para indicar que en esta casilla no está la ficha de ningún Jugador. casilla(fila1, columna1).jugador = 1 '1 para indicar que en esta casilla está una ficha del Jugador 1. sender.Top = casilla(fila1, columna1).Top + 12.5 sender.Left = casilla(fila1, columna1).Left + 12.5 si = 1 'Indica que sí fue posible realizar el movimiento de la ficha. turno = 2 'Para que luego de efectuar este movimiento, que el turno sea para el Jugador 2. End If Else 'La ficha se devuelve a la posición de origen, pues no se pudo efectuar un movimiento de una posición hacia la izquierda de la pantalla (derecha del Jugador 1). Me.Left = pos_x Me.Top = pos_y End If 'Si el Jugador 1 mueve diagonalmente dos posiciones para comer a la izquierda de la pantalla (dos posiciones hacia la derecha del Jugador 1). ElseIf columna1 = columna - 2 Then 'No puede moverse dos posiciones si no hay una pieza del otro equipo de por medio para comérsela, entonces se regresa la ficha a la posición en donde estaba. If casilla(fila + 1, columna - 1).ocupada = False Then Me.Left = pos_x Me.Top = pos_y Else 'Hay una ficha de por medio, entonces podría darse el movimiento de comer, pero si se cumple la condición de que esa ficha sea del otro equipo. If casilla(fila + 1, columna - 1).jugador = 2 Then 'Si la ficha que hay de por medio es del Jugador 2 (y sabiendo que el Jugador 1 es el que quiere hacer este movimiento), entonces se puede comer la pieza y efectuar el movimiento. If casilla(fila1, columna1).ocupada = False Then 'Si la posición destino (donde se quiere poner la ficha) está desocupada.
  • 43. Mi Web :http://programadorsantosrivera2030.blogspot.com/ Para ver trabajos similares o recibir información semanal sobre nuevas publicaciones,: http://programadorsantosrivera2030.blogspot.com/ casilla(fila, columna).ocupada = False 'Se quita la ficha de donde estaba originalmente. casilla(fila1, columna1).ocupada = True 'Se pone la ficha en la posición de destino. casilla(fila, columna).jugador = 0 '0 para indicar que en esta casilla no está la ficha de ningún Jugador. casilla(fila1, columna1).jugador = 1 '1 para indicar que en esta casilla está una ficha del Jugador 1. sender.Top = casilla(fila1, columna1).Top + 12.5 sender.Left = casilla(fila1, columna1).Left + 12.5 comer1(fila + 1, columna - 1) 'Se quita la ficha que intermedia entre la posición origen y la posición destino, es decir que ésta ficho es comida. comerdoble1(CType(sender, Panel)) 'Se llama al procedimiento para verificar si se puede comer doble. si = 1 'Indica que sí fue posible realizar el movimiento de la ficha. turno = 2 'Para que luego de efectuar este movimiento, que el turno sea para el Jugador 2. Else 'La ficha se devuelve a la posición de origen, pues no se pudo efectuar un movimiento de dos posiciones hacia la izquierda de la pantalla (derecha del Jugador 1). Me.Left = pos_x Me.Top = pos_y End If Else 'Si la ficha que hay de por medio es del Jugador 1, el movimiento es inválido porque un Jugador no puede comerse sus mismas piezas, entonces la pieza regresa a la posición en la que estaba y el movimiento no se puede hacer efectivo. Me.Left = pos_x Me.Top = pos_y End If End If Else 'Si el Jugador 1 mueve diagonalmente tres o más posiciones hacia la izquierda de la pantalla (tres o más posiciones hacia la derecha del Jugador 1). En este caso, la ficha se vuelve a la posición de origen en la que estaba y el movimiento no se hace efectivo porque solamente una reina podría mover de esa manera, moviéndose tres o más espacios en diagonal. Me.Left = pos_x Me.Top = pos_y End If End If If columna = columna1 Then 'Esto es inválido, pues no las piezas se deben mover en diagonal, y esto sería como que el Jugador 1 quisiera mover hacia el frente o hacia adelante en línea recta (hacia abajo de la pantalla pero recto, no diagonal, como se mueven las torres o las reinas en el ajedrez. Por lo tanto la pieza se regresa a su posición inicial y no se hace efectivo el movimiento. Me.Left = pos_x Me.Top = pos_y End If End Sub Public Sub mover2(ByVal sender As Panel) 'Debido a las condiciones dadas en el código antes de llamar este procedimiento, se sabe que cuando haya sido llamado, el Jugador 2 está haciendo un movimiento hacia adelante (hacia arriba en la pantalla), pero hace falta evaluar cuántas posiciones se va a desplazar diagonalmente hacia la derecha o hacia la izquierda, y así saber si el movimiento es válido o no, y si se puede hacer el movimiento, dependiendo de si hay una ficha o no, o si es posible comer, etc. If columna1 > columna Then 'Si el movimiento es diagonalmente hacia la derecha de la pantalla (derecha del Jugador 2). 'Si el Jugador 2 mueve diagonalmente una posición hacia la derecha de la pantalla (una posición hacia la derecha del Jugador 2). If columna1 = columna + 1 Then If casilla(fila1, columna1).ocupada = False Then If fila1 = soplarfila2 - 1 And columna1 = soplarcolumna2 + 1 And soplar2 = True Then 'Si se tenía que soplar debido a que en vez de comer, el Jugador 2 movió una posición diagonalmente hacia la derecha de la pantalla con la ficha que tenía la posibilidad de comer. 'La pieza se regresa a la posición en la que estaba. Me.Left = pos_x
  • 44. Mi Web :http://programadorsantosrivera2030.blogspot.com/ Para ver trabajos similares o recibir información semanal sobre nuevas publicaciones,: http://programadorsantosrivera2030.blogspot.com/ Me.Top = pos_y 'La pieza que ha sido regresada a la posición en la que estaba con las líneas anteriores, es soplada por no haber comido cuando tenía que hacerlo. comer1(soplarfila2, soplarcolumna2) 'Se quita esta ficha del tablero y se deja la casilla vacía. si = 1 'Indica que sí fue posible realizar el movimiento de la ficha. turno = 1 'Para que luego de efectuar este movimiento, que el turno sea para el Jugador 1. Else 'Si el movimiento de una posición diagonalmente hacia la derecha no fue por parte de una ficha que tenía que comer (y por lo tanto no tiene que ser soplada). If soplar2 = True Then 'Si hay alguna ficha del Jugador 2 que se tiene que soplar por no haber comido cuando tuvo la oportunidad. comer1(soplarfila2, soplarcolumna2) 'Se sopla la ficha que no comió cuando tuvo la oportunidad de hacerlo. 'Para que se ponga en posición de soplar una casilla en donde nunca podría haber una ficha. soplarfila2 = 7 soplarcolumna2 = 0 soplar2 = False 'Porque se acaba de soplar ya. End If casilla(fila, columna).ocupada = False 'Desaparece la ficha de donde estaba porque va a ponerse en otra casilla. casilla(fila1, columna1).ocupada = True 'Se pone la ficha en la nueva casilla, pues se movió de donde estaba. casilla(fila, columna).jugador = 0 '0 para indicar que en esta casilla no está la ficha de ningún Jugador. casilla(fila1, columna1).jugador = 2 '1 para indicar que en esta casilla está una ficha del Jugador 2. sender.Top = casilla(fila1, columna1).Top + 12.5 sender.Left = casilla(fila1, columna1).Left + 12.5 si = 1 'Indica que sí fue posible realizar el movimiento de la ficha. turno = 1 'Para que luego de efectuar este movimiento, que el turno sea para el Jugador 1. End If Else 'La ficha se devuelve a la posición de origen, pues no se pudo efectuar un movimiento de una posición hacia la derecha de la pantalla (derecha del Jugador 2). Me.Left = pos_x Me.Top = pos_y End If 'Si el Jugador 2 mueve diagonalmente dos posiciones para comer a la derecha de la pantalla (dos posiciones hacia la derecha del Jugador 2). ElseIf columna1 = columna + 2 Then If casilla(fila - 1, columna + 1).ocupada = False Then 'No puede moverse dos posiciones si no hay una pieza del otro equipo de por medio para comérsela, entonces se regresa la ficha a la posición en donde estaba. Me.Left = pos_x Me.Top = pos_y Else 'Hay una ficha de por medio, entonces podría darse el movimiento de comer, pero si se cumple la condición de que esa ficha sea del otro equipo. If casilla(fila - 1, columna + 1).jugador = 1 Then 'Si la ficha que hay de por medio es del Jugador 1 (y sabiendo que el Jugador 2 es el que quiere hacer este movimiento), entonces se puede comer la pieza y efectuar el movimiento. If casilla(fila1, columna1).ocupada = False Then 'Si la posición destino (donde se quiere poner la ficha) está desocupada. casilla(fila, columna).ocupada = False 'Se quita la ficha de donde estaba originalmente. casilla(fila1, columna1).ocupada = True 'Se pone la ficha en la posición de destino. casilla(fila, columna).jugador = 0 '0 para indicar que en esta casilla no está la ficha de ningún Jugador. casilla(fila1, columna1).jugador = 2 '1 para indicar que en esta casilla está una ficha del Jugador 2. sender.Top = casilla(fila1, columna1).Top + 12.5
  • 45. Mi Web :http://programadorsantosrivera2030.blogspot.com/ Para ver trabajos similares o recibir información semanal sobre nuevas publicaciones,: http://programadorsantosrivera2030.blogspot.com/ sender.Left = casilla(fila1, columna1).Left + 12.5 comer1(fila - 1, columna + 1) 'Se quita la ficha que intermedia entre la posición origen y la posición destino, es decir que ésta ficha es comida. comerdoble2(CType(sender, Panel)) 'Se llama al procedimiento para verificar si se puede comer doble. si = 1 'Indica que sí fue posible realizar el movimiento de la ficha. turno = 1 'Para que luego de efectuar este movimiento, que el turno sea para el Jugador 1. Else 'La ficha se devuelve a la posición de origen, pues no se pudo efectuar un movimiento diagonal de dos posiciones hacia la derecha de la pantalla (derecha del Jugador 2). Me.Left = pos_x Me.Top = pos_y End If Else 'Si la ficha que hay de por medio es del Jugador 2, el movimiento es inválido porque un Jugador no puede comerse sus mismas piezas, entonces la pieza regresa a la posición en la que estaba y el movimiento no se puede hacer efectivo. Me.Left = pos_x Me.Top = pos_y End If End If Else 'Si el Jugador 2 mueve diagonalmente tres o más posiciones hacia la derecha de la pantalla (tres o más posiciones hacia la derecha del Jugador 2). En este caso, la ficha se vuelve a la posición de origen en la que estaba y el movimiento no se hace efectivo porque solamente una reina podría mover de esa manera, moviéndose tres o más espacios en diagonal. Me.Left = pos_x Me.Top = pos_y End If End If If columna1 < columna Then 'Si el movimiento es diagonalmente hacia la izquierda de la pantalla (izquierda del Jugador 2). 'Si el Jugador 2 mueve diagonalmente una posición hacia la izquierda de la pantalla (una posición hacia la izquierda del Jugador 2). If columna1 = columna - 1 Then If casilla(fila1, columna1).ocupada = False Then If fila1 = soplarfila2 - 1 And columna1 = soplarcolumna2 - 1 And soplar2 = True Then 'Si se tenía que soplar debido a que en vez de comer, el Jugador 2 movió una posición diagonalmente hacia la izquierda de la pantalla con la ficha que tenía la posibilidad de comer. 'La pieza se regresa a la posición en la que estaba. Me.Left = pos_x Me.Top = pos_y 'La pieza que ha sido regresada a la posición en la que estaba con las líneas anteriores, es soplada por no haber comido cuando tenía que hacerlo. comer1(soplarfila2, soplarcolumna2) 'Se quita esta ficha del tablero y se deja la casilla vacía. si = 1 'Indica que sí fue posible realizar el movimiento de la ficha. turno = 1 'Para que luego de efectuar este movimiento, que el turno sea para el Jugador 1. Else 'Si el movimiento de una posición diagonalmente hacia la izquierda no fue por parte de una ficha que tenía que comer (y por lo tanto no tiene que ser soplada). If soplar2 = True Then 'Si hay alguna ficha del Jugador 2 que se tiene que soplar por no haber comido cuando tuvo la oportunidad. comer1(soplarfila2, soplarcolumna2) 'Se sopla la ficha que no comió cuando tuvo la oportunidad. 'Para que se ponga en posición de soplar una casilla en donde nunca podría haber una ficha. soplarfila1 = 7 soplarcolumna1 = 0 soplar2 = False 'Porque se acaba de soplar ya. End If casilla(fila, columna).ocupada = False 'Desaparece la ficha de donde estaba porque va a ponerse en otra casilla.
  • 46. Mi Web :http://programadorsantosrivera2030.blogspot.com/ Para ver trabajos similares o recibir información semanal sobre nuevas publicaciones,: http://programadorsantosrivera2030.blogspot.com/ casilla(fila1, columna1).ocupada = True 'Se pone la ficha en la nueva casilla, pues se movió de donde estaba. casilla(fila, columna).jugador = 0 '0 para indicar que en esta casilla no está la ficha de ningún Jugador. casilla(fila1, columna1).jugador = 2 '1 para indicar que en esta casilla está una ficha del Jugador 2. sender.Top = casilla(fila1, columna1).Top + 12.5 sender.Left = casilla(fila1, columna1).Left + 12.5 si = 1 'Indica que sí fue posible realizar el movimiento de la ficha. turno = 1 'Para que luego de efectuar este movimiento, que el turno sea para el Jugador 1. End If Else 'La ficha se devuelve a la posición de origen, pues no se pudo efectuar un movimiento de una posición hacia la izquierda de la pantalla (izquierda del Jugador 2). Me.Left = pos_x Me.Top = pos_y End If 'Si el Jugador 2 mueve diagonalmente dos posiciones para comer a la izquierda de la pantalla (dos posiciones hacia la izquierda del Jugador 2). ElseIf columna1 = columna - 2 Then If casilla(fila - 1, columna - 1).ocupada = False Then 'No puede moverse dos posiciones si no hay una pieza del otro equipo de por medio para comérsela, entonces se regresa la ficha a la posición en donde estaba. Me.Left = pos_x Me.Top = pos_y Else 'Hay una ficha de por medio, entonces podría darse el movimiento de comer, pero si se cumple la condición de que esa ficha sea del otro equipo. If casilla(fila - 1, columna - 1).jugador = 1 Then 'Si la ficha que hay de por medio es del Jugador 1 (y sabiendo que el Jugador 2 es el que quiere hacer este movimiento), entonces se puede comer la pieza y efectuar el movimiento. If casilla(fila1, columna1).ocupada = False Then 'Si la posición destino (donde se quiere poner la ficha) está desocupada. casilla(fila, columna).ocupada = False 'Se quita la ficha de donde estaba originalmente. casilla(fila1, columna1).ocupada = True 'Se pone la ficha en la posición de destino. casilla(fila, columna).jugador = 0 '0 para indicar que en esta casilla no está la ficha de ningún Jugador. casilla(fila1, columna1).jugador = 2 '1 para indicar que en esta casilla está una ficha del Jugador 2. sender.Top = casilla(fila1, columna1).Top + 12.5 sender.Left = casilla(fila1, columna1).Left + 12.5 comer1(fila - 1, columna - 1) 'Se quita la ficha que intermedia entre la posición origen y la posición destino, es decir que ésta ficha es comida. comerdoble2(CType(sender, Panel)) 'Se llama al procedimiento para verificar si se puede comer doble. si = 1 'Indica que sí fue posible realizar el movimiento de la ficha. turno = 1 'Para que luego de efectuar este movimiento, que el turno sea para el Jugador 1. Else 'La ficha se devuelve a la posición de origen, pues no se pudo efectuar un movimiento diagonal de dos posiciones hacia la izquierda de la pantalla (izquierda del Jugador 2). Me.Left = pos_x Me.Top = pos_y End If Else 'Si la ficha que hay de por medio es del Jugador 2, el movimiento es inválido porque un Jugador no puede comerse sus mismas piezas, entonces la pieza regresa a la posición en la que estaba y el movimiento no se puede hacer efectivo. Me.Left = pos_x Me.Top = pos_y End If End If
  • 47. Mi Web :http://programadorsantosrivera2030.blogspot.com/ Para ver trabajos similares o recibir información semanal sobre nuevas publicaciones,: http://programadorsantosrivera2030.blogspot.com/ Else 'Si el Jugador 2 mueve diagonalmente tres o más posiciones hacia la izquierda de la pantalla (tres o más posiciones hacia la izquierda del Jugador 2). En este caso, la ficha se vuelve a la posición de origen en la que estaba y el movimiento no se hace efectivo porque solamente una reina podría mover de esa manera, moviéndose tres o más espacios en diagonal. Me.Left = pos_x Me.Top = pos_y End If End If If columna = columna1 Then 'Esto es inválido, pues no las piezas se deben mover en diagonal, y esto sería como que el Jugador 1 quisiera mover hacia el frente o hacia adelante en línea recta (hacia arriba de la pantalla pero recto, no diagonal, como se mueven las torres o las reinas en el ajedrez. Por lo tanto la pieza se regresa a su posición inicial y no se hace efectivo el movimiento. Me.Left = pos_x Me.Top = pos_y End If End Sub Public Sub comer1(ByVal i As Integer, ByVal j As Integer) 'Este procedimiento requiere de dos argumentos, que representan la casilla que se va a dejar sin nada después de comerse la ficha que estaba ahí. 'En el módulo PRINCIPAL se ha declarado "Public casilla(7, 7) As CASILLAS", por lo cual la variable casillas(indice1, indice2) se encuentra disponible en cualquier parte. casilla(i, j).ocupada = False 'La casilla donde estaba la pieza que acaba de ser comida, se pone en False para hacer que se encuentre desocupada. casilla(i, j).jugador = 0 'Ningún Jugador tendrá ficha en esta casilla porque acaba de ser comida. casilla(i, j).BringToFront() 'La casilla que fue desocupada con la línea anterior se trae al frente, pues si no se hiciera esto se seguiría viendo la ficha que fue comida. Con esta línea se hace que la ficha comida quede abajo y que no se vea porque se le pone encima la casilla sin ninguna pieza. End Sub Private Sub InitializeComponent() Me.SuspendLayout() Me.ResumeLayout(False) End Sub Private Sub comerdoble1(ByVal sender As Panel) 'Procedimiento para que cuando el Jugador 1 haya comido una ficha, evaluar si hay oportunidad para que esa ficha siga comiendo (comer doble). Dim variablemensaje = 0 If fila1 < 6 Then 'Ese 6 equivale a decir fila 7 (pues el subíndice 0 es la fila 1). Esta condición se hace porque desde la fila 7 o desde la fila 8 (contando filas de arriba hacia abajo) ya no puede comer el Jugador 1, entonces en las evaluaciones daría problema el código con los subíndices, pues buscaría posiciones que no existen. If soplar1 = True Then 'Dim mensaje As Integer 'Variable que almacenará el valor devuelto por la función MsgBox(). 'Para Jugador 1, comer hacia su derecha (izquierda de la pantalla). If columna1 > 1 Then If casilla(fila1 + 1, columna1 - 1).jugador = 2 Then If casilla(fila1 + 2, columna1 - 2).ocupada = False Then MsgBox("Se debe seguir comiendo.", MsgBoxStyle.OkOnly, "Juego de Damas") 'Mensaje para indicar que se debe seguir comiendo. 'If mensaje = 0 Then 'La función MsgBox devuelve un valor, el cual ha sido almacenado en la variable "mensaje". Los valores devueltos pueden ser 1, 2, 3, 4, 5, 6 o 7. El valor 6 significa que se ha hecho clic en el botón Yes. casilla(fila1, columna1).ocupada = False casilla(fila1 + 2, columna1 - 2).ocupada = True casilla(fila1, columna1).jugador = 0 casilla(fila1 + 2, columna1 - 2).jugador = 1 sender.Top = casilla(fila1 + 2, columna1 - 2).Top + 12.5 sender.Left = casilla(fila1 + 2, columna1 - 2).Left + 12.5 comer1(fila1 + 1, columna1 - 1) variablemensaje += 1
  • 48. Mi Web :http://programadorsantosrivera2030.blogspot.com/ Para ver trabajos similares o recibir información semanal sobre nuevas publicaciones,: http://programadorsantosrivera2030.blogspot.com/ 'Código para comer triple (si fuera posible). posibilidad_soplar() 'Actualizar valores y determinar si hay posibilidad de comer una tercera vez (que le soplen la ficha si no come) para el Jugador 1, luego de haber comido doble. If (soplarfila1 = fila1 + 2) And (soplarcolumna1 = columna1 - 2) And (soplar1 = True) Then 'Si la ficha del Jugador 1 que acaba de terminar de comer doble tiene posibilidad de seguir comiendo o de comer triple (pues las variables la tienen amenazada de ser soplada). 'If soplar1 = True Then 'fila1 = soplarfila1 'Para que luego de haber comido doble, que la posición de las filas se actualice a la fila donde se encuentra la ficha luego de haber comido doble. 'columna1 = soplarcolumna1 'Actualizar el valor de la columna donde se encuentra la ficha que acaba de comer doble, para que cuando se llame el procedimiento comertriple1(CType(sender, Panel)), que se tenga el valor actualizado de la columna donde se encuentra la ficha del Jugador 1 que acaba de comer doble. comertriple1(CType(sender, Panel)) 'Se llama al procedimiento para verificar si el Jugador 1 puede seguir comiendo (comer triple). End If 'Condición para controlar si con la comida doble la ficha se llega a coronar. If fila1 = 5 Then fila1 = 7 'Cuando una ficha del Jugador 1 está en la fila 8 (contando filas de arriba hacia abajo), se corona. End If End If End If End If 'Para Jugador 1, comer hacia su izquierda (derecha de la pantalla). If variablemensaje = 0 Then 'Para que si ya comió doble con el If anterior, que ya no entre a este If. If columna1 < 6 Then If casilla(fila1 + 1, columna1 + 1).jugador = 2 Then If casilla(fila1 + 2, columna1 + 2).ocupada = False Then MsgBox("Se debe seguir comiendo.", MsgBoxStyle.OkOnly, "Juego de Damas") 'Mensaje para indicar que se debe seguir comiendo. casilla(fila1, columna1).ocupada = False casilla(fila1 + 2, columna1 + 2).ocupada = True casilla(fila1, columna1).jugador = 0 casilla(fila1 + 2, columna1 + 2).jugador = 1 sender.Top = casilla(fila1 + 2, columna1 + 2).Top + 12.5 sender.Left = casilla(fila1 + 2, columna1 + 2).Left + 12.5 comer1(fila1 + 1, columna1 + 1) 'Código para comer triple (si fuera posible). posibilidad_soplar() 'Actualizar valores y determinar si hay posibilidad de comer una tercera vez (que le soplen la ficha si no come) para el Jugador 1, luego de haber comido doble. If fila1 + 2 = soplarfila1 And columna1 + 2 = soplarcolumna1 And soplar1 = True Then 'Si la ficha del Jugador 1 que acaba de terminar de comer doble tiene posibilidad de seguir comiendo o de comer triple (pues las variables la tienen amenazada de ser soplada). comertriple1(CType(sender, Panel)) 'Se llama al procedimiento para verificar si el Jugador 1 puede seguir comiendo (comer triple). End If 'Condición para controlar si con la comida doble la ficha se llega a coronar. If fila1 = 5 Then fila1 = 7 'Cuando una ficha del Jugador 1 está en la fila 8 (contando filas de arriba hacia abajo), se corona. End If End If End If End If End If End If
  • 49. Mi Web :http://programadorsantosrivera2030.blogspot.com/ Para ver trabajos similares o recibir información semanal sobre nuevas publicaciones,: http://programadorsantosrivera2030.blogspot.com/ End If variablemensaje = 0 'Se reinicia en 0 esta variable, que sirve para que solamente se entre a uno de los If anteriores para comer doble, no a los dos, pues o se come a la izquierda o se come a la derecha, pues no se puede comer a ambos lados en un solo movimiento. End Sub Private Sub comerdoble2(ByVal sender As Panel) 'Procedimiento para que cuando el Jugador 2 haya comido una ficha, evaluar si hay oportunidad para que esa ficha siga comiendo (comer doble). Dim variablemensaje = 0 If fila1 > 1 Then 'Ese 1 equivale a decir fila 2 (pues el subíndice 0 es la fila 1). Esta condición se hace porque desde la fila 0 o desde la fila 1 (contando filas de arriba hacia abajo) ya no puede comer el Jugador 2, entonces en las evaluaciones daría problema el código con los subíndices, pues buscaría posiciones que no existen. If soplar2 = True Then 'Para Jugador 2, comer hacia su izquierda (izquierda de la pantalla). If columna1 > 1 Then If casilla(fila1 - 1, columna1 - 1).jugador = 1 Then If casilla(fila1 - 2, columna1 - 2).ocupada = False Then MsgBox("Se debe seguir comiendo.", MsgBoxStyle.OkOnly, "Juego de Damas") 'Mensaje para indicar que se debe seguir comiendo. casilla(fila1, columna1).ocupada = False casilla(fila1 - 2, columna1 - 2).ocupada = True casilla(fila1, columna1).jugador = 0 casilla(fila1 - 2, columna1 - 2).jugador = 2 sender.Top = casilla(fila1 - 2, columna1 - 2).Top + 12.5 sender.Left = casilla(fila1 - 2, columna1 - 2).Left + 12.5 comer1(fila1 - 1, columna1 - 1) variablemensaje += 1 'Código para comer triple (si fuera posible). posibilidad_soplar() 'Actualizar valores y determinar si hay posibilidad de comer una tercera vez (que le soplen la ficha si no come) para el Jugador 2, luego de haber comido doble. If fila1 - 2 = soplarfila2 And columna1 - 2 = soplarcolumna2 And soplar2 = True Then 'Si la ficha del Jugador 2 que acaba de terminar de comer doble tiene posibilidad de seguir comiendo o de comer triple (pues las variables la tienen amenazada de ser soplada). comertriple2(CType(sender, Panel)) 'Se llama al procedimiento para verificar si el Jugador 1 puede seguir comiendo (comer triple). End If 'Condición para controlar si con la comida doble la ficha se llega a coronar. If fila1 = 2 Then fila1 = 0 'Cuando una ficha del Jugador 2 está en la fila 1 (contando filas de arriba hacia abajo), se corona. End If End If End If End If 'Para Jugador 2, comer hacia su derecha (derecha de la pantalla). If variablemensaje = 0 Then 'Para que si ya comió doble con el If anterior, que ya no entre a este If. If columna1 < 6 Then If casilla(fila1 - 1, columna1 + 1).jugador = 1 Then If casilla(fila1 - 2, columna1 + 2).ocupada = False Then MsgBox("Se debe seguir comiendo.", MsgBoxStyle.OkOnly, "Juego de Damas") 'Mensaje para indicar que se debe seguir comiendo. casilla(fila1, columna1).ocupada = False casilla(fila1 - 2, columna1 + 2).ocupada = True casilla(fila1, columna1).jugador = 0 casilla(fila1 - 2, columna1 + 2).jugador = 2 sender.Top = casilla(fila1 - 2, columna1 + 2).Top + 12.5 sender.Left = casilla(fila1 - 2, columna1 + 2).Left + 12.5
  • 50. Mi Web :http://programadorsantosrivera2030.blogspot.com/ Para ver trabajos similares o recibir información semanal sobre nuevas publicaciones,: http://programadorsantosrivera2030.blogspot.com/ comer1(fila1 - 1, columna1 + 1) 'Código para comer triple (si fuera posible). posibilidad_soplar() 'Actualizar valores y determinar si hay posibilidad de comer una tercera vez (que le soplen la ficha si no come) para el Jugador 1, luego de haber comido doble. If fila1 - 2 = soplarfila2 And columna1 + 2 = soplarcolumna2 And soplar2 = True Then 'Si la ficha del Jugador 2 que acaba de terminar de comer doble tiene posibilidad de seguir comiendo o de comer triple (pues las variables la tienen amenazada de ser soplada). comertriple2(CType(sender, Panel)) 'Se llama al procedimiento para verificar si el Jugador 1 puede seguir comiendo (comer triple). End If 'Condición para controlar si con la comida doble la ficha se llega a coronar. If fila1 = 2 Then fila1 = 0 'Cuando una ficha del Jugador 2 está en la fila 1 (contando filas de arriba hacia abajo), se corona. End If End If End If End If End If End If End If variablemensaje = 0 'Se reinicia en 0 esta variable, que sirve para que solamente se entre a uno de los If anteriores para comer doble, no a los dos, pues o se come a la izquierda o se come a la derecha, pues no se puede comer a ambos lados en un solo movimiento. End Sub Private Sub comertriple1(ByVal sender As Panel) 'Procedimiento para que cuando el Jugador 1 haya comido una segunda ficha (comido doble), evaluar si hay oportunidad para que esa ficha siga comiendo una tercera vez (comer triple). Dim variablemensaje = 0 If soplarfila1 < 6 Then 'Ese 6 equivale a decir fila 7 (pues el subíndice 0 es la fila 1). Esta condición se hace porque desde la fila 7 o desde la fila 8 (contando filas de arriba hacia abajo) ya no puede comer el Jugador 1, entonces en las evaluaciones daría problema el código con los subíndices, pues buscaría posiciones que no existen. If soplar1 = True Then 'Para Jugador 1, comer hacia su derecha (izquierda de la pantalla). If soplarcolumna1 > 1 Then If casilla(soplarfila1 + 1, soplarcolumna1 - 1).jugador = 2 Then If casilla(soplarfila1 + 2, soplarcolumna1 - 2).ocupada = False Then MsgBox("Se debe seguir comiendo.", MsgBoxStyle.OkOnly, "Juego de Damas") 'Mensaje para indicar que se debe seguir comiendo. casilla(soplarfila1, soplarcolumna1).ocupada = False casilla(soplarfila1 + 2, soplarcolumna1 - 2).ocupada = True casilla(soplarfila1, soplarcolumna1).jugador = 0 casilla(soplarfila1 + 2, soplarcolumna1 - 2).jugador = 1 sender.Top = casilla(soplarfila1 + 2, soplarcolumna1 - 2).Top + 12.5 sender.Left = casilla(soplarfila1 + 2, soplarcolumna1 - 2).Left + 12.5 comer1(soplarfila1 + 1, soplarcolumna1 - 1) variablemensaje += 1 'Condición para controlar si con la comida doble la ficha se llega a coronar. If fila1 = 5 Then fila1 = 7 'Cuando una ficha del Jugador 1 está en la fila 8 (contando filas de arriba hacia abajo), se corona. End If End If End If End If 'Para Jugador 1, comer hacia su izquierda (derecha de la pantalla).
  • 51. Mi Web :http://programadorsantosrivera2030.blogspot.com/ Para ver trabajos similares o recibir información semanal sobre nuevas publicaciones,: http://programadorsantosrivera2030.blogspot.com/ If variablemensaje = 0 Then 'Para que si ya comió doble con el If anterior, que ya no entre a este If. If soplarcolumna1 < 6 Then If casilla(soplarfila1 + 1, soplarcolumna1 + 1).jugador = 2 Then If casilla(soplarfila1 + 2, soplarcolumna1 + 2).ocupada = False Then MsgBox("Se debe seguir comiendo.", MsgBoxStyle.OkOnly, "Juego de Damas") 'Mensaje para indicar que se debe seguir comiendo. casilla(soplarfila1, soplarcolumna1).ocupada = False casilla(soplarfila1 + 2, soplarcolumna1 + 2).ocupada = True casilla(soplarfila1, soplarcolumna1).jugador = 0 casilla(soplarfila1 + 2, soplarcolumna1 + 2).jugador = 1 sender.Top = casilla(soplarfila1 + 2, soplarcolumna1 + 2).Top + 12.5 sender.Left = casilla(soplarfila1 + 2, soplarcolumna1 + 2).Left + 12.5 comer1(soplarfila1 + 1, soplarcolumna1 + 1) 'Condición para controlar si con la comida doble la ficha se llega a coronar. If soplarfila1 = 5 Then fila1 = 7 'Cuando una ficha del Jugador 1 está en la fila 8 (contando filas de arriba hacia abajo), se corona. End If End If End If End If End If End If End If variablemensaje = 0 'Se reinicia en 0 esta variable, que sirve para que solamente se entre a uno de los If anteriores para comer doble, no a los dos, pues o se come a la izquierda o se come a la derecha, pues no se puede comer a ambos lados en un solo movimiento. End Sub Private Sub comertriple2(ByVal sender As Panel) 'Procedimiento para que cuando el Jugador 2 haya comido una segunda ficha (comido doble), evaluar si hay oportunidad para que esa ficha siga comiendo una tercera vez (comer triple). Dim variablemensaje = 0 If soplarfila2 > 1 Then 'Ese 1 equivale a decir fila 2 (pues el subíndice 0 es la fila 1). Esta condición se hace porque desde la fila 0 o desde la fila 1 (contando filas de arriba hacia abajo) ya no puede comer el Jugador 2, entonces en las evaluaciones daría problema el código con los subíndices, pues buscaría posiciones que no existen. If soplar2 = True Then 'Para Jugador 2, comer hacia su izquierda (izquierda de la pantalla). If soplarcolumna2 > 1 Then If casilla(soplarfila2 - 1, soplarcolumna2 - 1).jugador = 1 Then If casilla(soplarfila2 - 2, soplarcolumna2 - 2).ocupada = False Then MsgBox("Se debe seguir comiendo.", MsgBoxStyle.OkOnly, "Juego de Damas") 'Mensaje para indicar que se debe seguir comiendo. casilla(soplarfila2, soplarcolumna2).ocupada = False casilla(soplarfila2 - 2, soplarcolumna2 - 2).ocupada = True casilla(soplarfila2, soplarcolumna2).jugador = 0 casilla(soplarfila2 - 2, soplarcolumna2 - 2).jugador = 2 sender.Top = casilla(soplarfila2 - 2, soplarcolumna2 - 2).Top + 12.5 sender.Left = casilla(soplarfila2 - 2, soplarcolumna2 - 2).Left + 12.5 comer1(soplarfila2 - 1, soplarcolumna2 - 1) variablemensaje += 1 'Condición para controlar si con la comida doble la ficha se llega a coronar. If soplarfila2 = 2 Then fila1 = 0 'Cuando una ficha del Jugador 2 está en la fila 1 (contando filas de arriba hacia abajo), se corona. End If 'End If
  • 52. Mi Web :http://programadorsantosrivera2030.blogspot.com/ Para ver trabajos similares o recibir información semanal sobre nuevas publicaciones,: http://programadorsantosrivera2030.blogspot.com/ End If End If End If 'Para Jugador 2, comer hacia su derecha (derecha de la pantalla). If variablemensaje = 0 Then 'Para que si ya comió doble con el If anterior, que ya no entre a este If. If soplarcolumna2 < 6 Then If casilla(soplarfila2 - 1, soplarcolumna2 + 1).jugador = 1 Then If casilla(soplarfila2 - 2, soplarcolumna2 + 2).ocupada = False Then MsgBox("Se debe seguir comiendo.", MsgBoxStyle.OkOnly, "Juego de Damas") 'Mensaje para indicar que se debe seguir comiendo. casilla(soplarfila2, soplarcolumna2).ocupada = False casilla(soplarfila2 - 2, soplarcolumna2 + 2).ocupada = True casilla(soplarfila2, soplarcolumna2).jugador = 0 casilla(soplarfila2 - 2, soplarcolumna2 + 2).jugador = 2 sender.Top = casilla(soplarfila2 - 2, soplarcolumna2 + 2).Top + 12.5 sender.Left = casilla(soplarfila2 - 2, soplarcolumna2 + 2).Left + 12.5 comer1(soplarfila2 - 1, soplarcolumna2 + 1) 'Condición para controlar si con la comida doble la ficha se llega a coronar. If soplarfila2 = 2 Then fila1 = 0 'Cuando una ficha del Jugador 2 está en la fila 1 (contando filas de arriba hacia abajo), se corona. End If 'End If End If End If 'End If End If End If End If End If variablemensaje = 0 'Se reinicia en 0 esta variable, que sirve para que solamente se entre a uno de los If anteriores para comer doble, no a los dos, pues o se come a la izquierda o se come a la derecha, pues no se puede comer a ambos lados en un solo movimiento. End Sub End Class Form1.vb Public Class Form1 Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load TextBox1.Text = "Jugador" + Str(turno) 'Para que cuando se cargue el formulario, que intediatemente aparezca a quién le toca el turno de movimiento (que inicialmente será para el Jugador 1). End Sub Private Sub MOSTRARTABLEROToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MOSTRARTABLEROToolStripMenuItem.Click Me.MOSTRARTABLEROToolStripMenuItem.Enabled = False 'Porque una vez mostrado el tablero, ya no se podrá pedir que se muestre otra vez. Me.MOSTRARFICHASToolStripMenuItem.Enabled = True 'Lo que sí se podrá hacer es pedir que se muestren fichas. Me.COLORDELTABLEROToolStripMenuItem.Enabled = True 'También se podrá dar color al tablero, una vez esté mostrado. 'Me.Panel1.Visible = True 'Se muestra el Panel1 (que muestra a quién le corresponde el movimiento). Me.Panel2.Visible = True 'Se muestra el Panel2 (que muestra la posición a la que apunta el mouse en la matriz del tablero)
  • 53. Mi Web :http://programadorsantosrivera2030.blogspot.com/ Para ver trabajos similares o recibir información semanal sobre nuevas publicaciones,: http://programadorsantosrivera2030.blogspot.com/ Me.Panel3.Visible = True 'Se muestra el Panel3 (que es para dibujar el tablero, fichas y donde se hacen las jugadas), Me.GroupBox1.Visible = True 'Se muestra el GroupBox1 (que es para elegir los colores del tablero). CASILLAS.color1 = Color.White 'Inicialmente la posición (0,0) del tablero, o la casilla superior izquierda, es de color blanco. CASILLAS.color2 = Color.Black 'Inicialmente la posición (0,1) del tablero, la la casilla que está a la derecha de la casilla superior izquierda, es de color negro. crear_cas() 'Se invoca el procedimiento público "crear_cas()", con lo cual se va a crear el tablero. Este procedimiento se encuentra en el módulo llamado "PRINCIPAL". 'Dependiendo de los colores que se tengan seleccionados, esos colores aparecerán escritos en los ComboBox. Select Case CASILLAS.color1 Case Color.Blue ComboBox1.Text = "Azul" Case Color.White ComboBox1.Text = "Blanco" Case Color.Black ComboBox1.Text = "Negro" Case Color.Red ComboBox1.Text = "Rojo" Case Color.Green ComboBox1.Text = "Verde" End Select Select Case CASILLAS.color2 Case Color.Blue ComboBox2.Text = "Azul" Case Color.White ComboBox2.Text = "Blanco" Case Color.Black ComboBox2.Text = "Negro" Case Color.Red ComboBox2.Text = "Rojo" Case Color.Green ComboBox2.Text = "Verde" End Select End Sub Private Sub MOSTRARFICHASToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MOSTRARFICHASToolStripMenuItem.Click Me.MOSTRARFICHASToolStripMenuItem.Enabled = False 'Porque una vez mostradas las fichas, ya no se podrá pedir que se muestren otra vez. Me.GroupBox2.Visible = True 'Para habilitar el cambio de fichas. Me.GroupBox3.Visible = True 'Para habilitar la visualización del Jugador al que le corresponde el movimiento. Me.ComboBox4.Text = "Pepsi" Me.ComboBox3.Text = "Fanta" crear_ficha() 'Se invoca el procedimiento público "crear_ficha()", con lo cual se van a crear las fichas sobre el tablero. Este procedimiento se encuentra en el módulo llamado "PRINCIPAL". jugador1Label.Visible = True 'Para que ya con las fichas en el tablero, se muestre un Label que indique cuáles fichas le pertenecen al Jugador 1. jugador2Label.Visible = True 'Para que ya con las fichas en el tablero, se muestre un Label que indique cuáles fichas le pertenecen al Jugador 2. Me.txt_Jugador.Text = "Jugador 1" Timer1.Enabled = True Timer2.Enabled = True End Sub Private Sub SALIRToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles SALIRToolStripMenuItem.Click Me.Close() 'Equivale a escribir "End".
  • 54. Mi Web :http://programadorsantosrivera2030.blogspot.com/ Para ver trabajos similares o recibir información semanal sobre nuevas publicaciones,: http://programadorsantosrivera2030.blogspot.com/ End Sub Private Sub AzulToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles AZULToolStripMenuItem.Click 'Procedimiento para que el color1 de las casillas (casilla con posición (0,0) por ejemplo) sea azul. If CASILLAS.color2 <> Color.Blue Then 'Si el color2 es diferente de Color.Blue, entonces el color1 se podrá poner Color.Blue. De lo contrario no porque no estará bien que queden del mismo color tanto el color1 como el color2 porque se va a ver todo el tablero de un solo color. CASILLAS.color1 = Color.Blue 'A la variable color1 de la clase CASILLAS se le asigna el color azul al escribir "Color.Blue". cambiar_color_casillas() 'Se invoca el procedimiento público "cambiar_color_casillas()", con lo cual se va a cambiar el color1 del tablero tablero. Este procedimiento se encuentra en el módulo llamado "PRINCIPAL". Else 'Si el color2 es Color.Blue, no se va a permitir que el color1 sea también azul, entonces se manda el color respectivo. MsgBox("El color 1 del tablero no puede ser igual que el color 2.", MsgBoxStyle.OkOnly, "Juego de Damas") End If End Sub Private Sub BlancoToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BLANCOToolStripMenuItem.Click 'Procedimiento para que el color1 de las casillas (casilla con posición (0,0) por ejemplo) sea blanco. If CASILLAS.color2 <> Color.White Then 'Si el color2 es diferente de Color.White, entonces el color1 se podrá poner Color.White. De lo contrario no porque no estará bien que queden del mismo color tanto el color1 como el color2 porque se va a ver todo el tablero de un solo color. CASILLAS.color1 = Color.White 'A la variable color1 de la clase CASILLAS se le asigna el color blanco al escribir "Color.White". cambiar_color_casillas() 'Se invoca el procedimiento público "cambiar_color_casillas()", con lo cual se va a cambiar el color1 del tablero tablero. Este procedimiento se encuentra en el módulo llamado "PRINCIPAL". Else 'Si el color2 es Color.White, no se va a permitir que el color1 sea también blanco, entonces se manda el color respectivo. MsgBox("El color 1 del tablero no puede ser igual que el color 2.", MsgBoxStyle.OkOnly, "Juego de Damas") End If End Sub Private Sub NegroToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles NEGROToolStripMenuItem.Click 'Procedimiento para que el color1 de las casillas (casilla con posición (0,0) por ejemplo) sea negro. If CASILLAS.color2 <> Color.Black Then 'Si el color2 es diferente de Color.Black, entonces el color1 se podrá poner Color.Black. De lo contrario no porque no estará bien que queden del mismo color tanto el color1 como el color2 porque se va a ver todo el tablero de un solo color. CASILLAS.color1 = Color.Black 'A la variable color1 de la clase CASILLAS se le asigna el color negro al escribir "Color.Black". cambiar_color_casillas() 'Se invoca el procedimiento público "cambiar_color_casillas()", con lo cual se va a cambiar el color1 del tablero tablero. Este procedimiento se encuentra en el módulo llamado "PRINCIPAL". Else 'Si el color2 es Color.Black, no se va a permitir que el color1 sea también negro, entonces se manda el color respectivo. MsgBox("El color 1 del tablero no puede ser igual que el color 2.", MsgBoxStyle.OkOnly, "Juego de Damas") End If End Sub Private Sub RojoToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ROJOToolStripMenuItem.Click 'Procedimiento para que el color1 de las casillas (casilla con posición (0,0) por ejemplo) sea rojo. If CASILLAS.color2 <> Color.Red Then 'Si el color2 es diferente de Color.Red, entonces el color1 se podrá poner Color.Red. De lo contrario no porque no estará bien que queden del mismo color tanto el color1 como el color2 porque se va a ver todo el tablero de un solo color.
  • 55. Mi Web :http://programadorsantosrivera2030.blogspot.com/ Para ver trabajos similares o recibir información semanal sobre nuevas publicaciones,: http://programadorsantosrivera2030.blogspot.com/ CASILLAS.color1 = Color.Red 'A la variable color1 de la clase CASILLAS se le asigna el color rojo al escribir "Color.Red". cambiar_color_casillas() 'Se invoca el procedimiento público "cambiar_color_casillas()", con lo cual se va a cambiar el color1 del tablero tablero. Este procedimiento se encuentra en el módulo llamado "PRINCIPAL". Else 'Si el color2 es Color.Red, no se va a permitir que el color1 sea también rojo, entonces se manda el color respectivo. MsgBox("El color 1 del tablero no puede ser igual que el color 2.", MsgBoxStyle.OkOnly, "Juego de Damas") End If End Sub Private Sub VerdeToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles VERDEToolStripMenuItem.Click 'Procedimiento para que el color1 de las casillas (casilla con posición (0,0) por ejemplo) sea verde. If CASILLAS.color2 <> Color.Green Then 'Si el color2 es diferente de Color.Green, entonces el color1 se podrá poner Color.Green. De lo contrario no porque no estará bien que queden del mismo color tanto el color1 como el color2 porque se va a ver todo el tablero de un solo color. CASILLAS.color1 = Color.Green 'A la variable color1 de la clase CASILLAS se le asigna el color verde al escribir "Color.Green". cambiar_color_casillas() 'Se invoca el procedimiento público "cambiar_color_casillas()", con lo cual se va a cambiar el color1 del tablero tablero. Este procedimiento se encuentra en el módulo llamado "PRINCIPAL". Else 'Si el color2 es Color.Green, no se va a permitir que el color1 sea también verde, entonces se manda el color respectivo. MsgBox("El color 1 del tablero no puede ser igual que el color 2.", MsgBoxStyle.OkOnly, "Juego de Damas") End If End Sub Private Sub AzulToolStripMenuItem1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles AZULToolStripMenuItem1.Click 'Procedimiento para que el color2 de las casillas (casilla con posición (0,0) por ejemplo) sea azul. If CASILLAS.color1 <> Color.Blue Then 'Si el color1 es diferente de Color.Blue, entonces el color2 se podrá poner Color.Blue. De lo contrario no porque no estará bien que queden del mismo color tanto el color1 como el color2 porque se va a ver todo el tablero de un solo color. CASILLAS.color2 = Color.Blue 'A la variable color2 de la clase CASILLAS se le asigna el color azul al escribir "Color.Blue". cambiar_color_casillas() 'Se invoca el procedimiento público "cambiar_color_casillas()", con lo cual se va a cambiar el color1 del tablero tablero. Este procedimiento se encuentra en el módulo llamado "PRINCIPAL". Else 'Si el color1 es Color.Blue, no se va a permitir que el color2 sea también azul, entonces se manda el color respectivo. MsgBox("El color 2 del tablero no puede ser igual que el color 1.", MsgBoxStyle.OkOnly, "Juego de Damas") End If End Sub Private Sub BlancoToolStripMenuItem1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BLANCOToolStripMenuItem1.Click 'Procedimiento para que el color2 de las casillas (casilla con posición (0,0) por ejemplo) sea blanco. If CASILLAS.color1 <> Color.White Then 'Si el color1 es diferente de Color.White, entonces el color2 se podrá poner Color.White. De lo contrario no porque no estará bien que queden del mismo color tanto el color2 como el color1 porque se va a ver todo el tablero de un solo color. CASILLAS.color2 = Color.White 'A la variable color2 de la clase CASILLAS se le asigna el color blanco al escribir "Color.White". cambiar_color_casillas() 'Se invoca el procedimiento público "cambiar_color_casillas()", con lo cual se va a cambiar el color2 del tablero tablero. Este procedimiento se encuentra en el módulo llamado "PRINCIPAL". Else 'Si el color1 es Color.White, no se va a permitir que el color2 sea también blanco, entonces se manda el color respectivo.
  • 56. Mi Web :http://programadorsantosrivera2030.blogspot.com/ Para ver trabajos similares o recibir información semanal sobre nuevas publicaciones,: http://programadorsantosrivera2030.blogspot.com/ MsgBox("El color 2 del tablero no puede ser igual que el color 1.", MsgBoxStyle.OkOnly, "Juego de Damas") End If End Sub Private Sub NegroToolStripMenuItem1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles NEGROToolStripMenuItem1.Click 'Procedimiento para que el color2 de las casillas (casilla con posición (0,0) por ejemplo) sea negro. If CASILLAS.color1 <> Color.Black Then 'Si el color1 es diferente de Color.Black, entonces el color2 se podrá poner Color.Black. De lo contrario no porque no estará bien que queden del mismo color tanto el color2 como el color1 porque se va a ver todo el tablero de un solo color. CASILLAS.color2 = Color.Black 'A la variable color2 de la clase CASILLAS se le asigna el color negro al escribir "Color.Black". cambiar_color_casillas() 'Se invoca el procedimiento público "cambiar_color_casillas()", con lo cual se va a cambiar el color2 del tablero tablero. Este procedimiento se encuentra en el módulo llamado "PRINCIPAL". Else 'Si el color1 es Color.Black, no se va a permitir que el color2 sea también negro, entonces se manda el color respectivo. MsgBox("El color 2 del tablero no puede ser igual que el color 1.", MsgBoxStyle.OkOnly, "Juego de Damas") End If End Sub Private Sub RojoToolStripMenuItem1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ROJOToolStripMenuItem1.Click 'Procedimiento para que el color2 de las casillas (casilla con posición (0,0) por ejemplo) sea rojo. If CASILLAS.color1 <> Color.Red Then 'Si el color1 es diferente de Color.Red, entonces el color2 se podrá poner Color.Red. De lo contrario no porque no estará bien que queden del mismo color tanto el color2 como el color1 porque se va a ver todo el tablero de un solo color. CASILLAS.color2 = Color.Red 'A la variable color2 de la clase CASILLAS se le asigna el color rojo al escribir "Color.Red". cambiar_color_casillas() 'Se invoca el procedimiento público "cambiar_color_casillas()", con lo cual se va a cambiar el color2 del tablero tablero. Este procedimiento se encuentra en el módulo llamado "PRINCIPAL". Else 'Si el color1 es Color.Red, no se va a permitir que el color2 sea también rojo, entonces se manda el color respectivo. MsgBox("El color 2 del tablero no puede ser igual que el color 1.", MsgBoxStyle.OkOnly, "Juego de Damas") End If End Sub Private Sub VerdeToolStripMenuItem1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles VERDEToolStripMenuItem1.Click 'Procedimiento para que el color2 de las casillas (casilla con posición (0,0) por ejemplo) sea verde. If CASILLAS.color1 <> Color.Green Then 'Si el color1 es diferente de Color.Green, entonces el color2 se podrá poner Color.Green. De lo contrario no porque no estará bien que queden del mismo color tanto el color1 como el color1 porque se va a ver todo el tablero de un solo color. CASILLAS.color2 = Color.Green 'A la variable color2 de la clase CASILLAS se le asigna el color verde al escribir "Color.Green". cambiar_color_casillas() 'Se invoca el procedimiento público "cambiar_color_casillas()", con lo cual se va a cambiar el color2 del tablero tablero. Este procedimiento se encuentra en el módulo llamado "PRINCIPAL". Else 'Si el color1 es Color.Green, no se va a permitir que el color2 sea también verde, entonces se manda el color respectivo. MsgBox("El color 2 del tablero no puede ser igual que el color 1.", MsgBoxStyle.OkOnly, "Juego de Damas") End If End Sub 'Public Sub New() ' ' Llamada necesaria para el Diseñador de Windows Forms. ' InitializeComponent()
  • 57. Mi Web :http://programadorsantosrivera2030.blogspot.com/ Para ver trabajos similares o recibir información semanal sobre nuevas publicaciones,: http://programadorsantosrivera2030.blogspot.com/ ' ' Agregue cualquier inicialización después de la llamada a InitializeComponent(). 'End Sub Private Sub ComboBox1_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ComboBox1.SelectedIndexChanged Select Case ComboBox1.SelectedItem Case "Azul" 'Para que el color1 de las casillas (casilla con posición (0,0) por ejemplo) sea azul. If CASILLAS.color2 <> Color.Blue Then 'Si el color2 es diferente de Color.Blue, entonces el color1 se podrá poner Color.Blue. De lo contrario no porque no estará bien que queden del mismo color tanto el color1 como el color2 porque se va a ver todo el tablero de un solo color. CASILLAS.color1 = Color.Blue 'A la variable color1 de la clase CASILLAS se le asigna el color azul al escribir "Color.Blue". cambiar_color_casillas() 'Se invoca el procedimiento público "cambiar_color_casillas()", con lo cual se va a cambiar el color1 del tablero tablero. Este procedimiento se encuentra en el módulo llamado "PRINCIPAL". Else 'Si el color2 es Color.Blue, no se va a permitir que el color1 sea también azul, entonces se manda el color respectivo. MsgBox("El color 1 del tablero no puede ser igual que el color 2.", MsgBoxStyle.OkOnly, "Juego de Damas") End If Case "Blanco" 'Para que el color1 de las casillas (casilla con posición (0,0) por ejemplo) sea blanco. If CASILLAS.color2 <> Color.White Then 'Si el color2 es diferente de Color.White, entonces el color1 se podrá poner Color.White. De lo contrario no porque no estará bien que queden del mismo color tanto el color1 como el color2 porque se va a ver todo el tablero de un solo color. CASILLAS.color1 = Color.White 'A la variable color1 de la clase CASILLAS se le asigna el color blanco al escribir "Color.White". cambiar_color_casillas() 'Se invoca el procedimiento público "cambiar_color_casillas()", con lo cual se va a cambiar el color1 del tablero tablero. Este procedimiento se encuentra en el módulo llamado "PRINCIPAL". Else 'Si el color2 es Color.White, no se va a permitir que el color1 sea también blanco, entonces se manda el color respectivo. MsgBox("El color 1 del tablero no puede ser igual que el color 2.", MsgBoxStyle.OkOnly, "Juego de Damas") End If Case "Negro" 'Para que el color1 de las casillas (casilla con posición (0,0) por ejemplo) sea negro. If CASILLAS.color2 <> Color.Black Then 'Si el color2 es diferente de Color.Black, entonces el color1 se podrá poner Color.Black. De lo contrario no porque no estará bien que queden del mismo color tanto el color1 como el color2 porque se va a ver todo el tablero de un solo color. CASILLAS.color1 = Color.Black 'A la variable color1 de la clase CASILLAS se le asigna el color negro al escribir "Color.Black". cambiar_color_casillas() 'Se invoca el procedimiento público "cambiar_color_casillas()", con lo cual se va a cambiar el color1 del tablero tablero. Este procedimiento se encuentra en el módulo llamado "PRINCIPAL". Else 'Si el color2 es Color.Black, no se va a permitir que el color1 sea también negro, entonces se manda el color respectivo. MsgBox("El color 1 del tablero no puede ser igual que el color 2.", MsgBoxStyle.OkOnly, "Juego de Damas") End If Case "Rojo" 'Para que el color1 de las casillas (casilla con posición (0,0) por ejemplo) sea rojo. If CASILLAS.color2 <> Color.Red Then 'Si el color2 es diferente de Color.Red, entonces el color1 se podrá poner Color.Red. De lo contrario no porque no estará bien que queden del mismo color tanto el color1 como el color2 porque se va a ver todo el tablero de un solo color. CASILLAS.color1 = Color.Red 'A la variable color1 de la clase CASILLAS se le asigna el color rojo al escribir "Color.Red". cambiar_color_casillas() 'Se invoca el procedimiento público "cambiar_color_casillas()", con lo cual se va a cambiar el color1 del tablero tablero. Este procedimiento se encuentra en el módulo llamado "PRINCIPAL". Else 'Si el color2 es Color.Red, no se va a permitir que el color1 sea también rojo, entonces se manda el color respectivo.
  • 58. Mi Web :http://programadorsantosrivera2030.blogspot.com/ Para ver trabajos similares o recibir información semanal sobre nuevas publicaciones,: http://programadorsantosrivera2030.blogspot.com/ MsgBox("El color 1 del tablero no puede ser igual que el color 2.", MsgBoxStyle.OkOnly, "Juego de Damas") End If Case "Verde" 'Para que el color1 de las casillas (casilla con posición (0,0) por ejemplo) sea verde. If CASILLAS.color2 <> Color.Green Then 'Si el color2 es diferente de Color.Green, entonces el color1 se podrá poner Color.Green. De lo contrario no porque no estará bien que queden del mismo color tanto el color1 como el color2 porque se va a ver todo el tablero de un solo color. CASILLAS.color1 = Color.Green 'A la variable color1 de la clase CASILLAS se le asigna el color verde al escribir "Color.Green". cambiar_color_casillas() 'Se invoca el procedimiento público "cambiar_color_casillas()", con lo cual se va a cambiar el color1 del tablero tablero. Este procedimiento se encuentra en el módulo llamado "PRINCIPAL". Else 'Si el color2 es Color.Green, no se va a permitir que el color1 sea también verde, entonces se manda el color respectivo. MsgBox("El color 1 del tablero no puede ser igual que el color 2.", MsgBoxStyle.OkOnly, "Juego de Damas") End If End Select 'Dependiendo de los colores que se tengan seleccionados, esos colores aparecerán escritos en los ComboBox. Select Case CASILLAS.color1 Case Color.Blue ComboBox1.Text = "Azul" Case Color.White ComboBox1.Text = "Blanco" Case Color.Black ComboBox1.Text = "Negro" Case Color.Red ComboBox1.Text = "Rojo" Case Color.Green ComboBox1.Text = "Verde" End Select Select Case CASILLAS.color2 Case Color.Blue ComboBox2.Text = "Azul" Case Color.White ComboBox2.Text = "Blanco" Case Color.Black ComboBox2.Text = "Negro" Case Color.Red ComboBox2.Text = "Rojo" Case Color.Green ComboBox2.Text = "Verde" End Select End Sub Private Sub ComboBox2_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ComboBox2.SelectedIndexChanged Select Case ComboBox2.SelectedItem Case "Azul" 'Para que el color2 de las casillas (casilla con posición (0,0) por ejemplo) sea azul. If CASILLAS.color1 <> Color.Blue Then 'Si el color1 es diferente de Color.Blue, entonces el color2 se podrá poner Color.Blue. De lo contrario no porque no estará bien que queden del mismo color tanto el color1 como el color2 porque se va a ver todo el tablero de un solo color. CASILLAS.color2 = Color.Blue 'A la variable color2 de la clase CASILLAS se le asigna el color azul al escribir "Color.Blue". cambiar_color_casillas() 'Se invoca el procedimiento público "cambiar_color_casillas()", con lo cual se va a cambiar el color1 del tablero tablero. Este procedimiento se encuentra en el módulo llamado "PRINCIPAL".
  • 59. Mi Web :http://programadorsantosrivera2030.blogspot.com/ Para ver trabajos similares o recibir información semanal sobre nuevas publicaciones,: http://programadorsantosrivera2030.blogspot.com/ Else 'Si el color1 es Color.Blue, no se va a permitir que el color2 sea también azul, entonces se manda el color respectivo. MsgBox("El color 2 del tablero no puede ser igual que el color 1.", MsgBoxStyle.OkOnly, "Juego de Damas") End If Case "Blanco" 'Para que el color2 de las casillas (casilla con posición (0,0) por ejemplo) sea blanco. If CASILLAS.color1 <> Color.White Then 'Si el color1 es diferente de Color.White, entonces el color2 se podrá poner Color.White. De lo contrario no porque no estará bien que queden del mismo color tanto el color2 como el color1 porque se va a ver todo el tablero de un solo color. CASILLAS.color2 = Color.White 'A la variable color2 de la clase CASILLAS se le asigna el color blanco al escribir "Color.White". cambiar_color_casillas() 'Se invoca el procedimiento público "cambiar_color_casillas()", con lo cual se va a cambiar el color2 del tablero tablero. Este procedimiento se encuentra en el módulo llamado "PRINCIPAL". Else 'Si el color1 es Color.White, no se va a permitir que el color2 sea también blanco, entonces se manda el color respectivo. MsgBox("El color 2 del tablero no puede ser igual que el color 1.", MsgBoxStyle.OkOnly, "Juego de Damas") End If Case "Negro" 'Para que el color2 de las casillas (casilla con posición (0,0) por ejemplo) sea negro. If CASILLAS.color1 <> Color.Black Then 'Si el color1 es diferente de Color.Black, entonces el color2 se podrá poner Color.Black. De lo contrario no porque no estará bien que queden del mismo color tanto el color2 como el color1 porque se va a ver todo el tablero de un solo color. CASILLAS.color2 = Color.Black 'A la variable color2 de la clase CASILLAS se le asigna el color negro al escribir "Color.Black". cambiar_color_casillas() 'Se invoca el procedimiento público "cambiar_color_casillas()", con lo cual se va a cambiar el color2 del tablero tablero. Este procedimiento se encuentra en el módulo llamado "PRINCIPAL". Else 'Si el color1 es Color.Black, no se va a permitir que el color2 sea también negro, entonces se manda el color respectivo. MsgBox("El color 2 del tablero no puede ser igual que el color 1.", MsgBoxStyle.OkOnly, "Juego de Damas") End If Case "Rojo" 'Para que el color2 de las casillas (casilla con posición (0,0) por ejemplo) sea rojo. If CASILLAS.color1 <> Color.Red Then 'Si el color1 es diferente de Color.Red, entonces el color2 se podrá poner Color.Red. De lo contrario no porque no estará bien que queden del mismo color tanto el color2 como el color1 porque se va a ver todo el tablero de un solo color. CASILLAS.color2 = Color.Red 'A la variable color2 de la clase CASILLAS se le asigna el color rojo al escribir "Color.Red". cambiar_color_casillas() 'Se invoca el procedimiento público "cambiar_color_casillas()", con lo cual se va a cambiar el color2 del tablero tablero. Este procedimiento se encuentra en el módulo llamado "PRINCIPAL". Else 'Si el color1 es Color.Red, no se va a permitir que el color2 sea también rojo, entonces se manda el color respectivo. MsgBox("El color 2 del tablero no puede ser igual que el color 1.", MsgBoxStyle.OkOnly, "Juego de Damas") End If Case "Verde" 'Para que el color2 de las casillas (casilla con posición (0,0) por ejemplo) sea verde. If CASILLAS.color1 <> Color.Green Then 'Si el color1 es diferente de Color.Green, entonces el color2 se podrá poner Color.Green. De lo contrario no porque no estará bien que queden del mismo color tanto el color1 como el color1 porque se va a ver todo el tablero de un solo color. CASILLAS.color2 = Color.Green 'A la variable color2 de la clase CASILLAS se le asigna el color verde al escribir "Color.Green". cambiar_color_casillas() 'Se invoca el procedimiento público "cambiar_color_casillas()", con lo cual se va a cambiar el color2 del tablero tablero. Este procedimiento se encuentra en el módulo llamado "PRINCIPAL". Else 'Si el color1 es Color.Green, no se va a permitir que el color2 sea también verde, entonces se manda el color respectivo.
  • 60. Mi Web :http://programadorsantosrivera2030.blogspot.com/ Para ver trabajos similares o recibir información semanal sobre nuevas publicaciones,: http://programadorsantosrivera2030.blogspot.com/ MsgBox("El color 2 del tablero no puede ser igual que el color 1.", MsgBoxStyle.OkOnly, "Juego de Damas") End If End Select 'Dependiendo de los colores que se tengan seleccionados, esos colores aparecerán escritos en los ComboBox. Select Case CASILLAS.color1 Case Color.Blue ComboBox1.Text = "Azul" Case Color.White ComboBox1.Text = "Blanco" Case Color.Black ComboBox1.Text = "Negro" Case Color.Red ComboBox1.Text = "Rojo" Case Color.Green ComboBox1.Text = "Verde" End Select Select Case CASILLAS.color2 Case Color.Blue ComboBox2.Text = "Azul" Case Color.White ComboBox2.Text = "Blanco" Case Color.Black ComboBox2.Text = "Negro" Case Color.Red ComboBox2.Text = "Rojo" Case Color.Green ComboBox2.Text = "Verde" End Select End Sub Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim mensaje As Integer 'Variable que almacenará el valor devuelto por la función MsgBox(). mensaje = MsgBox("Elegir fichas requiere terminar el juego actual. ¿Desea hacerlo?", vbYesNo, "Juego de Damas") If mensaje = 6 Then 'La función MsgBox devuelve un valor, el cual ha sido almacenado en la variable "mensaje". Los valores devueltos pueden ser 1, 2, 3, 4, 5, 6 o 7. El valor 6 significa que se ha hecho clic en el botón Yes. 'Las siguientes 2 líneas son para que al reiniciar un juego, el primer turno sea para el Jugador 1. TextBox1.Text = "Jugador 1" turno = 1 ficha = New FICHAS 'Se inicializa un objeto de la clase FICHAS, el cual va a ser referenciado o utilizado mediante la variable "ficha". Esto se hace porque va a ser necesario usar el procedimiento comer1(indice1, indice2), el cual pertenece a la clase FICHAS. For f = 0 To 7 '8 iteraciones, correspondientes a las 8 filas. For c = 0 To 7 '8 iteraciones, correspondientes a las 8 columnas. ficha.comer1(f, c) 'Se está utilizando el mismo procedimiento que sirve para comer fichas. Esto funcionará como si se comieran fichas en las 64 casillas (por eso los 2 ciclos For anidados), de manera que van a quedar vacías o sin ninguna ficha en el tablero. casilla(f, c).jugador = 0 'Para que al reiniciar un juego, que primeramente todas las casillas se pongan como no pertenecientes a ningún jugador (a la ficha de ningún jugador), antes de crear las nuevas fichas sobre el tablero. casilla(f, c).jugador = False 'Para que al reiniciar un juego, que primeramente todas las casillas se pongan como desocupadas o sin ninguna ficha sobre ellas. soplar1 = False 'Para que no se tenga ninguna ficha pendiente por soplar al reiniciar un juego. soplar2 = False 'Para que no se tenga ninguna ficha pendiente por soplar al reiniciar un juego. Next
  • 61. Mi Web :http://programadorsantosrivera2030.blogspot.com/ Para ver trabajos similares o recibir información semanal sobre nuevas publicaciones,: http://programadorsantosrivera2030.blogspot.com/ Next 'Con los 2 ciclos For anteriores (las 5 líneas de arriba) ya se tienen las 64 casillas sin fichas (el tablero sin fichas). If ComboBox4.Text <> ComboBox3.SelectedItem Then 'Si se ha seleccionado una ficha diferente para cada jugador. crear_ficha() 'Esta función se encuentra en el módulo PRINCIPAL, y lo que hace es crear las 12 fichas de cada jugador en las posiciones como para iniciar un nuevo juego. Else 'Si se ha seleccionado la misma ficha para ambos jugadores. MsgBox("La ficha del jugador 1 no puede ser igual que la del jugador 2.", MsgBoxStyle.OkOnly, "Juego de Damas") End If End If End Sub Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick posibilidad_soplar() 'Debido a que el Timer1 tiene la propiedad Interval en 10, el procedimiento posibilidad_soplar() se estará ejecutando 100 veces por segundo (pues un Interval de 1000 es 1 segundo y un Interval de 10 son 10 milisegundos o 0.01 segundos), de modo que 100 veces por segundo se estará verificando si han posibilidad de comer por parte de cualquiera de los jugadores, y con ello se sabrá si hay posibilidad de soplar o no. End Sub Private Sub Timer2_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer2.Tick 'Para reiniciar las variables que dan a conocer si el Jugador 1 o el Jugador 2 tienen posibilidad de comer (y por lo tanto se les soplan las fichas si no comen). Al hacer esto no van a quedar en verdadero por jugadas anteriores, sino que casa 0.5 segundos (pues el Interval que se le ha programado al Timer2 es de 500) se van a estar ejecutando estas 2 líneas de código, mientras que el Timer1 se ejecutará 100 veces por segundo (pues se le ha programado la propiedad Interval = 10). Entonces continuamente se estará verificando si hay posibilidad de comer (y por tanto de soplar), y si no hubiese, casa medio minuto las variables se regresan a False y no quedan guardando True de jugadas anteriores. soplar1 = False soplar2 = False End Sub Private Sub ToolStripMenuItem1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ToolStripMenuItem1.Click AyudaForm.Show() 'Muestra el formulario de ayuda. End Sub End Class PRINCIPAL.vb Module PRINCIPAL 'Private Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hwnd As Integer, ByVal nIndex As Integer) As Integer 'Private Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Integer, ByVal nIndex As Integer, ByVal dwNewLong As Integer) As Integer 'Private Declare Function SetWindowPos Lib "user32" (ByVal hwnd As Integer, ByVal hWndInsertAfter As Integer, ByVal X As Integer, ByVal Y As Integer, ByVal cX As Integer, ByVal cY As Integer, ByVal wFlags As Integer) As Integer 'Const GWL_STYLE As Integer = (-16) 'Const WS_THICKFRAME As Integer = &H40000 ' Con borde redimensionable 'Const SWP_DRAWFRAME As Integer = &H20 'Const SWP_NOMOVE As Integer = &H2 'Const SWP_NOSIZE As Integer = &H1 'Const SWP_NOZORDER As Integer = &H4 Public casilla(7, 7) As CASILLAS 'Matriz que va a tener 64 elementos, correspondientes a cada una de las casillas del tablero.
  • 62. Mi Web :http://programadorsantosrivera2030.blogspot.com/ Para ver trabajos similares o recibir información semanal sobre nuevas publicaciones,: http://programadorsantosrivera2030.blogspot.com/ Public f, c As Integer 'Variables públicas que hacen referencia a filas y columnas. Public posx, posy As Integer 'Variables públicas que hacen referencia a las posiciones en el eje x y en el eje y. Public ficha As FICHAS Public corona As CORONAS Public cposx, cposy As Integer Public turno As Integer = 1 Public Jugador1(11) As Panel Public Jugador2(11) As Panel Public soplar1 As Boolean 'Para saber si se debe soplar o no una ficha al Jugador 1. 'Inicialmente se ponen las siguientes 2 variables en una posición en la que nunca podría haber una ficha: (0, 1), fila 0 y columna 1. Con esto no se pueden soplar piezas equivocadas inicialmente. Public soplarfila1 As Integer = 0 'Para saber qué posición en las filas se le debe soplar al Jugador 1. Public soplarcolumna1 As Integer = 1 'Para saber qué posición en las columnas se le debe soplar al Jugador 1. Public soplar2 As Boolean 'Para saber si se debe soplar o no una ficha al Jugador 2. 'Inicialmente se ponen las siguientes 2 variables en una posición en la que nunca podría haber una ficha: (7, 0), fila 7 y columna 0. Con esto no se pueden soplar pieza equivocadas inicialmente. Public soplarfila2 As Integer = 7 'Para saber qué posición en las filas se le debe soplar al Jugador 2. Public soplarcolumna2 As Integer = 0 'Para saber qué posición en las columnas se le debe soplar al Jugador 2. Public Sub crear_cas() 'Este procedimiento sirve para crear el tablero con las 64 casillas en colores blanco y negro. posy = 0 'Variable para determinar la posición de las columnas o eje x (dado en pixeles). For f = 0 To 7 '8 iteraciones, correspondientes a las 8 filas. posx = 0 'Variable para determinar la posición de las filas o el eje x (dado en pixeles). For c = 0 To 7 '8 iteraciones, correspondientes a las 8 columnas. casilla(f, c) = New CASILLAS 'La variable casilla(f, c) es una instancia de la clase CASILLAS (es un objeto). casilla(f, c).Size = New Size(75, 75) 'La propiedad Size funciona gracias a que la variable matriz casilla(7, 7) es de tipo CASILLAS, y la clase CASILLAS hereda la clase Panel, y la clase Panel tiene la propiedad Size, por lo tanto la clase Panel le hereda a la clase CASILLAS la propiedad Size. "(75, 75)" son los pixeles, que va a tener 75 pixeles de ancho y 75 pixeles de alto, pues se quiere que sea cuadrado. El Panel3 (que se encuentra en la misma ubicación en la que se va a dibujar el tablero y donde va a estar el escenario para jugar) es cuadrado y mide 620*620 pixeles, entonces tomando en cuenta que cada cuadrito mide 75*75 pixeles, se van a tener 64 cuadritos en total que van a caber, 8 filas y 8 columnas de cuadritos. Pero (620/8)=77.5 pixeles, pero como cada cuadrito tiene 75 pixeles, entonces 75*8=600 pixeles, entonces sobran 20 pixeles (pues el Panel3 no mide 600 pixeles sino que 620 pixeles), y esos 20 pixeles se van a usar para márgenes, que se distribuirían en 10 pixeles de margen al lado izquierdo, 10 al lado derecho, 10 arriba y 10 abajo. Gracias a los 2 ciclos For, se harán 64 iteraciones y con ello se les da el tamaño de 75*75 pixeles a cada uno de los 64 cuadritos que componen el tablero de damas. Size es una estructura que almacena un par de enteros ordenados, en este caso el ancho y alto del rectánculo. Las 64 casillas del tablero se crearán sobre el Panel3, y el Panel3 quedará atrás pero servirá para que se vea el margen de 10 pixeles arriba, abajo, a la izquierda y a la derecha. casilla(f, c).Location = New Point(357 + posx, 66 + posy) 'Luego de definir el tamaño de cada cuadrito que compone el tablero de damas, con esta línea se define la ubicación que va a tener cada uno de esos cuadritos, de modo que en las 64 iteraciones de los ciclos For anidados, se darán 64 ubicaciones y quedarán bien localizados y estructurados cada uno de los elementos que componen el tablero. La estructura Point representa un par ordenado de coordenadas x e y de enteros que define un punto en un plano bidimensional. El punto de origen o el 0,0 es la parte superior izquierda del formulario (sin contar la barra de título como parte de las coordenadas). Las coordenadas x positivas van hacia la derecha del punto 0,0. Las coordenadas x negativas van hacia la izquierda del punto 0,0. Las coordenadas y positivo van hacia abajo del punto 0,0. Las coordenadas y negativo van hacia arriba del punto 0,0. (347, 56) es la posición del Panel3 en el formulario. Entonces como se quiere que queden 10 pixeles de margen arriba, abajo, a la izquierda y a la derecha del tablero (el tablero estará ubicado sobre el Panel3), entonces por eso se pone (357 + posx, 66 + posy), considerando los 10 pixeles de margen tanto para el eje x como para el eje y, y sabiendo que inicialmente o en la primera iteración (cuando f y c valgan 0) tanto posx como posy van a valer 0.
  • 63. Mi Web :http://programadorsantosrivera2030.blogspot.com/ Para ver trabajos similares o recibir información semanal sobre nuevas publicaciones,: http://programadorsantosrivera2030.blogspot.com/ Form1.Controls.Add(casilla(f, c)) 'Añade el objeto creado en el formulario, con las dimensiones y ubicación establecida en las dos líneas anteriores. casilla(f, c).BringToFront() 'Esto sirve para que el objeto añadido al formulario con la línea anterior aparezca encima del objeto Panel3, pues de lo contrario no se va a ver el tablero generado porque va a estar detrás del Panel3. casilla(f, c).ocupada = False 'Con esto se hace que las 64 casillas aparezcan desocupadas, pues lo que se busca con este procedimiento público es crear el tablero, no hacer jugadas ni poner fichas todavía, entonces se hace que todas las casillas se encuentren vacías. If (f + c) Mod 2 = 0 Then 'Si el residuo de la suma de la fila más la columna entre dos es cero (lo cual significaría que esa suma fue un número par). Por ejemplo las casillas (0,0), (2,4), (3,5), etc. casilla(f, c).BackColor = Color.White 'El color de la casilla se pone blanco. Else 'Si el residuo de la suma de la fila más la columna entre dos es diferente de cero (lo cual significaría que esa suma fue un número impar). Por ejemplo las casillas (1,3), (3,4), (6,3), etc. casilla(f, c).BackColor = Color.Black 'El color de la casilla se pone negro. End If 'Entonces inicialmente las casillas van a estar blanco y negro, con la casilla (0,0) o la que está en la parte superior izquierda de color blanco. posx = posx + 75 'Para que en la siguiente iteración, la siguiente casilla se ubique 75 pixeles a la derecha de la anterior hasta formar la fila completa de 8 casillas en una fila. Next posy = posy + 75 'Para que en la iteración de las filas, que la siguiente casilla se ubique 75 pixeles abajo de la anterior, y que luego con el For interno se comience a formar la segunda fila completa. Next 'NOTA: Con los dos ciclos For anidados anteriores, el orden en en que se van a ir formando las casillas es de izquierda a derecha hasta formar la primera fila y luego de arriba hacia abajo formando fila por fila hasta formar las 8 filas y que se tengan las 64 casillas que componen el tablero. End Sub Public Sub crear_ficha() 'Este procedimiento sirve para crear las 24 fichas sobre el tablero, 12 para cada jugador, es decir que 12 de un color y 12 de otro. Dim objDraw1 As System.Drawing.Drawing2D.GraphicsPath = New System.Drawing.Drawing2D.GraphicsPath objDraw1.AddEllipse(0, 0, 50, 50) Dim x As Integer x = 0 'En total, entre los 2 ciclos For anidados, se harán 48 iteraciones. For f = 0 To 2 'Debido a las fichas correspondientes al Jugador 1 (las fichas de arriba) se van a ubicar en las primeras 3 filas del tablero (contando las filas de arriba hacia abajo), el ciclo irá de 0 a 2. For c = 0 To 7 'Se hacen 8 iteraciones porque de las primeras 3 filas del tablero se van a evaluar casilla por casilla. If (f + c) Mod 2 = 0 Then 'Si la suma de la fila más la columna da un número par (por ejemplo (0, 0), (0, 2), (0,6), (1,1), (2, 4), etc.), entonces se va a poner una ficha en esa casilla. ficha = New FICHAS 'La variable "ficha" es una instancia de la clase FICHAS (es un objeto). ficha.Region = New Region(objDraw1) ficha.Size = New Size(50, 50) 'La propiedad Size funciona gracias a que la variable "ficha" es de tipo FICHAS, y la clase FICHAS hereda la clase Panel, y la clase Panel tiene la propiedad Size, por lo tanto la clase Panel le hereda a la clase CASILLAS la propiedad Size. "(50, 50)" son los pixeles, que va a tener 50 pixeles de ancho y 50 pixeles de alto, que es cuadrado pero con el procedimiento AddEllipse se hará circular. Recuérdese que las casillas tienen 75x75 pixeles, entonces las fichas se van a poner 50x50 pixeles para que quepan bien dentro de las casillas. 'ficha.BackColor = Color.BlueViolet 'Seleccionar la imagen de la ficha correspondiente para el Jugador 1. Select Case Form1.ComboBox4.Text Case "Águila" ficha.BackgroundImage = Form1.ImageList1.Images(0) Case "Blue Boar Ice Ale" ficha.BackgroundImage = Form1.ImageList1.Images(1) Case "Cherry Coke" ficha.BackgroundImage = Form1.ImageList1.Images(2) Case "Chucho"
  • 64. Mi Web :http://programadorsantosrivera2030.blogspot.com/ Para ver trabajos similares o recibir información semanal sobre nuevas publicaciones,: http://programadorsantosrivera2030.blogspot.com/ ficha.BackgroundImage = Form1.ImageList1.Images(3) Case "Coca Cola Real" ficha.BackgroundImage = Form1.ImageList1.Images(4) Case "Coca Cola" ficha.BackgroundImage = Form1.ImageList1.Images(5) Case "Cream Soda" ficha.BackgroundImage = Form1.ImageList1.Images(6) Case "Corona Extra" ficha.BackgroundImage = Form1.ImageList1.Images(7) Case "Diana" ficha.BackgroundImage = Form1.ImageList1.Images(8) Case "Diet Pepsi" ficha.BackgroundImage = Form1.ImageList1.Images(9) Case "Dr Pepper" ficha.BackgroundImage = Form1.ImageList1.Images(10) Case "Fanta" ficha.BackgroundImage = Form1.ImageList1.Images(11) Case "Heineken Beer" ficha.BackgroundImage = Form1.ImageList1.Images(12) Case "Hello Kitty" ficha.BackgroundImage = Form1.ImageList1.Images(13) Case "Mirinda" ficha.BackgroundImage = Form1.ImageList1.Images(14) Case "Nehi Grape" ficha.BackgroundImage = Form1.ImageList1.Images(15) Case "Pepsi" ficha.BackgroundImage = Form1.ImageList1.Images(16) Case "Red" ficha.BackgroundImage = Form1.ImageList1.Images(17) Case "Scandinavian Pepsi" ficha.BackgroundImage = Form1.ImageList1.Images(18) Case "Star" ficha.BackgroundImage = Form1.ImageList1.Images(19) Case "Stars" ficha.BackgroundImage = Form1.ImageList1.Images(20) End Select 'ficha.BorderStyle = BorderStyle.Fixed3D Form1.Controls.Add(ficha) 'Añade el objeto creado en el formulario, con las dimensiones establecidas en "ficha.Size" y ubicación que se establecerá dos líneas adelante en "ficha.Location". ficha.BringToFront() 'Esto sirve para que el objeto añadido al formulario con la línea anterior aparezca encima del objeto Panel3 y encima de las casillas, pues de lo contrario no se va a ver la ficha generada porque va a estar detrás del Panel3 y de las casillas del tablero. ficha.Location = New Point(357 + (c * 75) + 12.5, 66 + (f * 75) + 12.5) 'El Panel3 (que se encuentra en la misma ubicación en la que se van a dibujar las fichas y donde va a ser el escenario para jugar) es cuadrado y mide 620*620 pixeles, entonces tomando en cuenta que cada ficha mide 50*50 pixeles (aunque no van a ser cuadradas sino que se van a hacer redondas con el procedimiento AddEllipse), se va a trabajar de esta forma: luego de definir el tamaño de cada ficha, con esta línea se define la ubicación que va a tener cada una de esas fichas, de modo que en las 48 iteraciones de los ciclos For anidados, se darán 24 ubicaciones (correspondientes a las 12 fichas para cada jugador, pues con la condición If, de las 48 iteraciones solamente 24 van a colocar fichas), y quedarán bien localizadas cada una de las fichas sobre el tablero. La estructura Point representa un par ordenado de coordenadas x e y de enteros que define un punto en un plano bidimensional. El punto de origen o el 0,0 es la parte superior izquierda del formulario (sin contar la barra de título como parte de las coordenadas). Las coordenadas x positivas van hacia la derecha del punto 0,0. Las coordenadas x negativas van hacia la izquierda del punto 0,0. Las coordenadas y positivo van hacia abajo del punto 0,0. Las coordenadas y negativo van hacia arriba del punto 0,0. (347, 56) es la posición del Panel3 en el formulario. Entonces como se quiere que queden 10 pixeles de margen arriba, abajo, a la izquierda y a la derecha del tablero (el tablero estará ubicado sobre el Panel3), entonces por eso se pone (357 + (c * 75) + 12.5, 66 + (f * 75) + 12.5), considerando los 10 pixeles de margen tanto para el eje
  • 65. Mi Web :http://programadorsantosrivera2030.blogspot.com/ Para ver trabajos similares o recibir información semanal sobre nuevas publicaciones,: http://programadorsantosrivera2030.blogspot.com/ x como para el eje y (por eso 357 en vez de 347, y 66 en vez de 56). (c * 75) y (f * 75) es para que en cada iteración se tome el inicio desde donde se va a formar la casilla tanto de filas (la "f") como de columnas (la "c"). + 12.5 es porque no se quiere que la ficha se forme justo desde la parte superior izquierda de la casilla, sino que se desea que quede en el centro de la casilla, entonces se ponen esos 12.5 pixeles de margen izquierdo para el caso del eje x y 12.5 pixeles de margen superior para el caso del eje y, entonces la casilla va a tomar 50 pixeles (50 + 12.5 = 62.5 pixeles), y van a quedar otros 12.5 pixeles tanto de margen derecho como de margen inferior, con lo cual se completan los 75 pixeles de cada casilla (pues 62.5 + 12.5 = 75 pixeles). 'ficha.equipo = 1 casilla(f, c).jugador = 1 casilla(f, c).ocupada = True 'Para que la casilla correspondiente según la iteración de los ciclos For anidados, que la casilla quede ocupada para efectos de programación, que no se pueda poner otra casilla mientras esta no se haya quitado o mientras no haya sido comida, etc. Jugador1(x) = ficha x = x + 1 End If Next Next x = 0 For f = 5 To 7 'Debido a las fichas correspondientes al Jugador 2 (las fichas de abajo) se van a ubicar en las últimas 3 filas del tablero (contando las filas de arriba hacia abajo, es decir las filas 6, 7 y 8), el ciclo irá de 5 a 7. For c = 0 To 7 'Se hacen 8 iteraciones porque de las filas 6, 7 y 8 del tablero se va a evaluar casilla por casilla. If (f + c) Mod 2 = 0 Then 'Si la suma de la fila más la columna da un número par (por ejemplo (5, 1), (5, 3), (6,0), (6,4), (7, 3), etc.), entonces se va a poner una ficha en esa casilla. ficha = New FICHAS 'La variable "ficha" es una instancia de la clase FICHAS (es un objeto). ficha.Region = New Region(objDraw1) ficha.Size = New Size(50, 50) 'La propiedad Size funciona gracias a que la variable "ficha" es de tipo FICHAS, y la clase FICHAS hereda la clase Panel, y la clase Panel tiene la propiedad Size, por lo tanto la clase Panel le hereda a la clase CASILLAS la propiedad Size. "(50, 50)" son los pixeles, que va a tener 50 pixeles de ancho y 50 pixeles de alto, que es cuadrado pero con el procedimiento AddEllipse se hará circular. Recuérdese que las casillas tienen 75x75 pixeles, entonces las fichas se van a poner 50x50 pixeles para que quepan bien dentro de las casillas. 'ficha.BackColor = Color.Crimson 'Seleccionar la imagen de la ficha correspondiente para el Jugador 2. Select Case Form1.ComboBox3.Text Case "Águila" ficha.BackgroundImage = Form1.ImageList1.Images(0) Case "Blue Boar Ice Ale" ficha.BackgroundImage = Form1.ImageList1.Images(1) Case "Cherry Coke" ficha.BackgroundImage = Form1.ImageList1.Images(2) Case "Chucho" ficha.BackgroundImage = Form1.ImageList1.Images(3) Case "Coca Cola Real" ficha.BackgroundImage = Form1.ImageList1.Images(4) Case "Coca Cola" ficha.BackgroundImage = Form1.ImageList1.Images(5) Case "Cream Soda" ficha.BackgroundImage = Form1.ImageList1.Images(6) Case "Corona Extra" ficha.BackgroundImage = Form1.ImageList1.Images(7) Case "Diana" ficha.BackgroundImage = Form1.ImageList1.Images(8) Case "Diet Pepsi" ficha.BackgroundImage = Form1.ImageList1.Images(9) Case "Dr Pepper"
  • 66. Mi Web :http://programadorsantosrivera2030.blogspot.com/ Para ver trabajos similares o recibir información semanal sobre nuevas publicaciones,: http://programadorsantosrivera2030.blogspot.com/ ficha.BackgroundImage = Form1.ImageList1.Images(10) Case "Fanta" ficha.BackgroundImage = Form1.ImageList1.Images(11) Case "Heineken Beer" ficha.BackgroundImage = Form1.ImageList1.Images(12) Case "Hello Kitty" ficha.BackgroundImage = Form1.ImageList1.Images(13) Case "Mirinda" ficha.BackgroundImage = Form1.ImageList1.Images(14) Case "Nehi Grape" ficha.BackgroundImage = Form1.ImageList1.Images(15) Case "Pepsi" ficha.BackgroundImage = Form1.ImageList1.Images(16) Case "Red" ficha.BackgroundImage = Form1.ImageList1.Images(17) Case "Scandinavian Pepsi" ficha.BackgroundImage = Form1.ImageList1.Images(18) Case "Star" ficha.BackgroundImage = Form1.ImageList1.Images(19) Case "Stars" ficha.BackgroundImage = Form1.ImageList1.Images(20) End Select 'ficha.BorderStyle = BorderStyle.Fixed3D Form1.Controls.Add(ficha) 'Añade el objeto creado en el formulario, con las dimensiones establecidas en "ficha.Size" y ubicación que se establecerá dos líneas adelante en "ficha.Location". ficha.BringToFront() 'Esto sirve para que el objeto añadido al formulario con la línea anterior aparezca encima del objeto Panel3 y encima de las casillas, pues de lo contrario no se va a ver la ficha generada porque va a estar detrás del Panel3 y de las casillas del tablero. ficha.Location = New Point(357 + (c * 75) + 12.5, 66 + (f * 75) + 12.5) 'El Panel3 (que se encuentra en la misma ubicación en la que se van a dibujar las fichas y donde va a ser el escenario para jugar) es cuadrado y mide 620*620 pixeles, entonces tomando en cuenta que cada ficha mide 50*50 pixeles (aunque no van a ser cuadradas sino que se van a hacer redondas con el procedimiento AddEllipse), se va a trabajar de esta forma: luego de definir el tamaño de cada ficha, con esta línea se define la ubicación que va a tener cada una de esas fichas, de modo que en las 48 iteraciones de los ciclos For anidados, se darán 24 ubicaciones (correspondientes a las 12 fichas para cada jugador, pues con la condición If, de las 48 iteraciones solamente 24 van a colocar fichas), y quedarán bien localizadas cada una de las fichas sobre el tablero. La estructura Point representa un par ordenado de coordenadas x e y de enteros que define un punto en un plano bidimensional. El punto de origen o el 0,0 es la parte superior izquierda del formulario (sin contar la barra de título como parte de las coordenadas). Las coordenadas x positivas van hacia la derecha del punto 0,0. Las coordenadas x negativas van hacia la izquierda del punto 0,0. Las coordenadas y positivo van hacia abajo del punto 0,0. Las coordenadas y negativo van hacia arriba del punto 0,0. (347, 56) es la posición del Panel3 en el formulario. Entonces como se quiere que queden 10 pixeles de margen arriba, abajo, a la izquierda y a la derecha del tablero (el tablero estará ubicado sobre el Panel3), entonces por eso se pone (357 + (c * 75) + 12.5, 66 + (f * 75) + 12.5), considerando los 10 pixeles de margen tanto para el eje x como para el eje y (por eso 357 en vez de 347, y 66 en vez de 56). (c * 75) y (f * 75) es para que en cada iteración se tome el inicio desde donde se va a formar la casilla tanto de filas (la "f") como de columnas (la "c"). + 12.5 es porque no se quiere que la ficha se forme justo desde la parte superior izquierda de la casilla, sino que se desea que quede en el centro de la casilla, entonces se ponen esos 12.5 pixeles de margen izquierdo para el caso del eje x y 12.5 pixeles de margen superior para el caso del eje y, entonces la casilla va a tomar 50 pixeles (50 + 12.5 = 62.5 pixeles), y van a quedar otros 12.5 pixeles tanto de margen derecho como de margen inferior, con lo cual se completan los 75 pixeles de cada casilla (pues 62.5 + 12.5 = 75 pixeles). 'ficha.equipo = 2 casilla(f, c).jugador = 2 casilla(f, c).ocupada = True Jugador2(x) = ficha x = x + 1 End If
  • 67. Mi Web :http://programadorsantosrivera2030.blogspot.com/ Para ver trabajos similares o recibir información semanal sobre nuevas publicaciones,: http://programadorsantosrivera2030.blogspot.com/ Next Next End Sub Public Sub cambiar_color_casillas() 'Procedimiento público para cambiar el color de las casillas del tablero. For f = 0 To 7 '8 iteraciones, correspondientes a las 8 filas. For c = 0 To 7 '8 iteraciones, correspondientes a las 8 columnas. If (f + c) Mod 2 = 0 Then 'Si el residuo de la suma de la fila más la columna entre dos es cero (lo cual significaría que esa suma fue un número par). Por ejemplo las casillas (0,0), (2,4), (3,5), etc. casilla(f, c).BackColor = CASILLAS.color1 'El color de la casilla se pone del color contenido en la variable Public Shared color1. Else 'Si el residuo de la suma de la fila más la columna entre dos es diferente de cero (lo cual significaría que esa suma fue un número impar). Pr ejemplo las casillas (1,3), (3,4), (6,3), etc. casilla(f, c).BackColor = CASILLAS.color2 'El color de la casilla se pone del color contenido en la variable Public Shared color2. End If Next Next End Sub Public Sub crear_corona1() corona = New CORONAS Dim objDraw1 As System.Drawing.Drawing2D.GraphicsPath = New System.Drawing.Drawing2D.GraphicsPath objDraw1.AddEllipse(0, 0, 50, 50) corona.Region = New Region(objDraw1) corona.Size = New Size(50, 50) 'La propiedad Size funciona gracias a que la variable "ficha" es de tipo FICHAS, y la clase FICHAS hereda la clase Panel, y la clase Panel tiene la propiedad Size, por lo tanto la clase Panel le hereda a la clase CASILLAS la propiedad Size. "(50, 50)" son los pixeles, que va a tener 50 pixeles de ancho y 50 pixeles de alto, que es cuadrado pero con el procedimiento AddEllipse se hará circular. Recuérdese que las casillas tienen 75x75 pixeles, entonces las fichas se van a poner 50x50 pixeles para que quepan bien dentro de las casillas. 'corona.BackColor = Color.Red corona.BackgroundImage = Form1.ImageList1.Images(21) Form1.Controls.Add(corona) corona.BringToFront() corona.Location = New Point(cposx, cposy) End Sub Public Sub crear_corona2() corona = New CORONAS Dim objDraw1 As System.Drawing.Drawing2D.GraphicsPath = New System.Drawing.Drawing2D.GraphicsPath objDraw1.AddEllipse(0, 0, 50, 50) corona.Region = New Region(objDraw1) corona.Size = New Size(50, 50) 'La propiedad Size funciona gracias a que la variable "ficha" es de tipo FICHAS, y la clase FICHAS hereda la clase Panel, y la clase Panel tiene la propiedad Size, por lo tanto la clase Panel le hereda a la clase CASILLAS la propiedad Size. "(50, 50)" son los pixeles, que va a tener 50 pixeles de ancho y 50 pixeles de alto, que es cuadrado pero con el procedimiento AddEllipse se hará circular. Recuérdese que las casillas tienen 75x75 pixeles, entonces las fichas se van a poner 50x50 pixeles para que quepan bien dentro de las casillas. 'corona.BackColor = Color.Blue corona.BackgroundImage = Form1.ImageList1.Images(22) Form1.Controls.Add(corona) corona.BringToFront() corona.Location = New Point(cposx, cposy) End Sub Public Sub posibilidad_soplar() 'Evaluación para determinar si el Jugador 1 tiene que comer hacia su izquierda (derecha de la pantalla).
  • 68. Mi Web :http://programadorsantosrivera2030.blogspot.com/ Para ver trabajos similares o recibir información semanal sobre nuevas publicaciones,: http://programadorsantosrivera2030.blogspot.com/ For f = 0 To 5 'Desde la fila 1 hasta la 5 porque una ficha que no sea reina puede comer como máximo desde la fila 6 (para llegar a caer a la fila 8). For c = 0 To 5 'Desde la columna 1 hasta la 6 porque una ficha que no sea reina puede comer hacia la derecha de la pantalla (hacia la izquierda del Jugador 1) como máximo desde la columna 6 del tablero (para llegar a caer a la columna 8). If casilla(f, c).jugador = 1 Then 'Si hay una ficha del Jugador 1 en esta casilla. If casilla(f + 1, c + 1).jugador = 2 Then 'Si hay una pieza del Jugador 2 que se puede comer en diagonal hacia la izquierda del Jugador 1 (hacia la derecha de la pantalla) If casilla(f + 2, c + 2).ocupada = False Then 'Si se puede comer porque el espacio donde va a ir a quedar la ficha para comer está vacío. 'If turno = 1 Then 'Para que sea posible soplarle una pieza al Jugador 1 solamente si a él le correspondía mover y no comió. soplar1 = True soplarfila1 = f soplarcolumna1 = c End If End If End If Next Next 'Evaluación para determinar si el Jugador 1 tiene que comer hacia su derecha (izquierda de la pantalla). For f = 0 To 5 'Desde la fila 0 hasta la 5 porque una ficha que no sea reina puede comer como máximo desde la fila 6 (para llegar a caer a la fila 8). For c = 2 To 7 'Desde la fila 3 hasta la 8 porque una ficha que no sea reina puede comer hacia la izquierda de la pantalla (hacia la derecha del Jugador 1) como máximo desde la columna 3 del tablero (para llegar a caer a la columna 1). If casilla(f, c).jugador = 1 Then 'Si hay una ficha del Jugador 1 en esta casilla. If casilla(f + 1, c - 1).jugador = 2 Then 'Si hay una pieza del Jugador 2 que se puede comer en diagonal hacia la derecha del Jugador 1 (hacia la izquierda de la pantalla). If casilla(f + 2, c - 2).ocupada = False Then 'Si se puede comer porque el espacio donde va a ir a quedar la ficha para comer está vacío. 'If turno = 1 Then 'Para que sea posible soplarle una pieza al Jugador 1 solamente si a él le correspondía mover y no comió. soplar1 = True soplarfila1 = f soplarcolumna1 = c End If End If End If Next Next If soplar1 = False Then Else End If 'Evaluación para determinar si el Jugador 2 tiene que comer hacia su izquierda (izquierda de la pantalla). For f = 2 To 7 'Desde la fila 3 hasta la 8 porque una ficha que no sea reina puede comer como máximo desde la fila 3 (para llegar a caer a la fila 1). For c = 2 To 7 'Desde la columna 3 hasta la 8 porque una ficha que no sea reina puede comer hacia la izquierda de la pantalla (hacia la izquierda del Jugador 2) como máximo desde la columna 3 del tablero (para llegar a caer a la columna 1). If casilla(f, c).jugador = 2 Then 'Si hay una ficha del Jugador 2 en esta casilla. If casilla(f - 1, c - 1).jugador = 1 Then 'Si hay una pieza del Jugador 1 que se puede comer en diagonal hacia la izquierda del Jugador 2 (hacia la izquierda de la pantalla) If casilla(f - 2, c - 2).ocupada = False Then 'Si se puede comer porque el espacio donde va a ir a quedar la ficha para comer está vacío. soplar2 = True
  • 69. Mi Web :http://programadorsantosrivera2030.blogspot.com/ Para ver trabajos similares o recibir información semanal sobre nuevas publicaciones,: http://programadorsantosrivera2030.blogspot.com/ soplarfila2 = f soplarcolumna2 = c End If End If End If Next Next 'Evaluación para determinar si el Jugador 2 tiene que comer hacia su derecha (derecha de la pantalla). For f = 2 To 7 'Desde la fila 3 hasta la 8 porque una ficha que no sea reina puede comer como máximo desde la fila 3 (para llegar a caer a la fila 1). For c = 0 To 5 'Desde la fila 1 hasta la 6 porque una ficha que no sea reina puede comer hacia la derecha de la pantalla (hacia la derecha del Jugador 2) como máximo desde la columna 6 del tablero (para llegar a caer a la columna 8). If casilla(f, c).jugador = 2 Then 'Si hay una ficha del Jugador 2 en esta casilla. If casilla(f - 1, c + 1).jugador = 1 Then 'Si hay una pieza del Jugador 1 que se puede comer en diagonal hacia la derecha del Jugador 2 (hacia la derecha de la pantalla). If casilla(f - 2, c + 2).ocupada = False Then 'Si se puede comer porque el espacio donde va a ir a quedar la ficha para comer está vacío. soplar2 = True soplarfila2 = f soplarcolumna2 = c End If End If End If Next Next End Sub End Module
  • 70. Mi Web :http://programadorsantosrivera2030.blogspot.com/ Para ver trabajos similares o recibir información semanal sobre nuevas publicaciones,: http://programadorsantosrivera2030.blogspot.com/ Autor: Santos Nilo Rivera Luján Mi Web : http://programadorsantosrivera2030.blogspot.com/ Miramar , 22 de junio de 2010 Trujillo –Peru Mis Paginas Web : Mi web Principal" Rivera & G ": Descarga la biblia de java y manual de windows 8. http://riverasn.p.ht/ Mi web Company.Rivera&G : Descarga mis Aplicaciones y Proyectos en visual basic 2012 ,java,C#,PHP,HTML,JavaScript http://santosrl.p.ht/ Mi web "El Hacker 2013": Descarga el manual de visual basic 2010 y visual basic 6.0 portable a full http://riverayg.zz.mu/ Mi facebook: https://www.facebook.com/PatrickNilsdeAlesandro.RiveraLujan Mi grupo de programadores : https://www.facebook.com/groups/398604720248657/
  • 71. Mi Web :http://programadorsantosrivera2030.blogspot.com/ Para ver trabajos similares o recibir información semanal sobre nuevas publicaciones,: http://programadorsantosrivera2030.blogspot.com/ Mi grupo de soporte tecnico PC : https://www.facebook.com/groups/145173492332702/ Mi web JIMBO: http://riverasn.jimdo.com/ Mi twitter.com: https://twitter.com/RIVERALUJANSANT