Descargar

Programación de un juego de damas en Visual Basic 2005 (página 2)

Enviado por jaimemontoya


Partes: 1, 2, 3, 4, 5, 6

GroupBox3

(Name)

GroupBox3

BackColor

Transparent

Font

Georgia, 12pt, style=Bold

ForeColor

Lime

Location

33, 283

Modifiers

Friend

Size

268, 71

TabIndex

9

Text

Turno de Movimiento

Visible

False

GroupBox1

(Name)

GroupBox1

BackColor

Transparent

Font

Georgia, 12pt, style=Bold

ForeColor

Lime

Location

33, 368

Modifiers

Friend

Size

268, 118

TabIndex

4

Text

Colores del Tablero

Visible

False

GroupBox2

(Name)

GroupBox2

BackColor

Transparent

Font

Georgia, 12pt, style=Bold

ForeColor

Lime

Location

33, 494

Modifiers

Friend

Size

268, 182

TabIndex

5

Text

Fichas

Visible

False

Label9

(Name)

Label9

AutoSize

True

Font

Georgia, 12pt, style=Bold

ForeColor

Yellow

Location

16, 29

Modifiers

Friend

Size

60, 18

TabIndex

2

Text

Turno

TextBox1

(Name)

TextBox1

AutoCompleteCustomSource

(Collection)

BackColor

AliceBlue

Lines

String[] Array

Location

98, 29

Modifiers

Friend

ReadOnly

True

Size

153, 26

TabIndex

8

Label3

(Name)

Label3

AutoSize

True

Font

Georgia, 12pt, style=Bold

ForeColor

Yellow

Location

16, 29

Modifiers

Friend

Size

66, 18

TabIndex

2

Text

Color 1

ComboBox1

(Name)

ComboBox1

BackColor

Alice1

FormattingEnabled

True

Items

(Collection)

Azul

Blanco

Negro

Rojo

Verde

Location

98, 26

Modifiers

Friend

Size

153, 26

TabIndex

1

Label4

(Name)

4

AutoSize

True

Font

Georgia, 12pt, style=Bold

ForeColor

Yellow

Location

18, 73

Modifiers

Friend

Size

67, 18

TabIndex

5

ComboBox2

(Name)

ComboBox2

BackColor

AliceBlue

FormattingEnabled

True

Items

(Collection)

Azul

Blanco

Negro

Rojo

Verde

Location

98, 73

Modifiers

Friend

Size

153, 26

TabIndex

5

Label6

(Name)

Label6

AutoSize

True

Font

Georgia, 12pt, style=Bold

ForeColor

Yellow

Location

16, 29

Modifiers

Friend

Size

68, 18

TabIndex

2

Text

Ficha 1

ComboBox4

(Name)

ComboBox4

BackColor

AliceBlue

Items

(Collection)

Águila

Blue Boar Ice Ale

Cherry Coke

Chucho

Coca Cola Real

Coca Cola

Cream Soda

Corona Extra

Diana

Diet Pepsi

Dr Pepper

Fanta

Heineken Beer

Hello Kitty

Mirinda

Nehi Grape

Pepsi

Red

Scandinavian Pepsi

Star

Stars

Location

87, 26

Modifiers

Friend

Size

171, 26

TabIndex

1

Label5

(Name)

Label5

AutoSize

True

Font

Georgia, 12pt, style=Bold

ForeColor

Yellow

Location

16, 73

Modifiers

Friend

Size

69, 18

TabIndex

4

Text

Ficha 2

ComboBox3

(Name)

ComboBox3

BackColor

AliceBlue

FormattingEnabled

True

Items

(Collection)

Águila

Blue Boar Ice Ale

Cherry Coke

Chucho

Coca Cola Real

Coca Cola

Cream Soda

Corona Extra

Diana

Diet Pepsi

Dr Pepper

Fanta

Heineken Beer

Hello Kitty

Mirinda

Nehi Grape

Pepsi

Red

Scandinavian Pepsi

Star

Stars

Location

87, 70

Modifiers

Friend

Size

171, 26

TabIndex

3

Button1

(Name)

Button1

BackgroundImage

System.Drawing.Bitmap

Font

Georgia, 12pt, style=Bold

ForeColor

Navy

Location

64, 109

Modifiers

Friend

Size

137, 58

TabIndex

5

Text

Seleccionar

UseVisualStyleBackColor

True

jugador1Label

(Name)

jugador1Label

AutoSize

True

BackColor

Transparent

Font

Georgia, 12pt, style=Bold

ForeColor

Yellow

Location

881, 31

Modifiers

Friend

Size

89, 18

TabIndex

10

Text

Jugador 1

Visible

False

jugador2Label

(Name)

jugador2Label

AutoSize

True

BackColor

Transparent

Font

Georgia, 12pt, style=Bold

ForeColor

Yellow

Location

879, 683

Modifiers

Friend

Size

90, 18

TabIndex

11

Text

Jugador 2

Visible

False

Label2

(Name)

Label2

AutoSize

True

BackColor

Transparent

Font

Times New Roman, 14.25pt, style=Bold

ForeColor

Lime

Location

601, 683

Modifiers

Friends

Size

105, 22

TabIndex

0

Text

POSICIÓN

TextAlign

MiddleCenter

Visible

False

Panel3

(Name)

Panel3

BackColor

Teal

Location

347, 56

Modifiers

Friend

Size

620, 620

Visible

False

MENUToolStripMenuItem

(Name)

MENUToolStripMenuItem

DropDownItems

(Collection)

MOSTRARTABLEROToolStripMenuItem

COLORDELTABLEROToolStripMenuItem

MOSTRARFICHASToolStripMenuItem

ToolStripMenuItem1

SALIRToolStripMenuItem

Font

Microsoft Sans Serif, 9.75pt, style=Bold

ForeColor

Black

Modifiers

Friend

Size

57, 20

Text

Menú

MenuStrip1

(Name)

MenuStrip1

Items

(Collection)

MENUToolStripMenuItem

Location

0, 0

Modifiers

Friend

Size

1009, 24

TabIndex

0

Text

MenuStrip1

ImageList1

(Name)

ImageList1

Images

(Collection)

0 System.Drawing.Bitmap

1 System.Drawing.Bitmap

2 System.Drawing.Bitmap

3 System.Drawing.Bitmap

4 System.Drawing.Bitmap

5 System.Drawing.Bitmap

6 System.Drawing.Bitmap

7 System.Drawing.Bitmap

8 System.Drawing.Bitmap

9 System.Drawing.Bitmap

10 System.Drawing.Bitmap

11 System.Drawing.Bitmap

12 System.Drawing.Bitmap

13 System.Drawing.Bitmap

14 System.Drawing.Bitmap

15 System.Drawing.Bitmap

16 System.Drawing.Bitmap

17 System.Drawing.Bitmap

18 System.Drawing.Bitmap

19 System.Drawing.Bitmap

20 System.Drawing.Bitmap

21 jugador1.jpg

22 jugador2.jpg

ImageSize

50, 50

Modifiers

Friend

TransparentColor

Transparent

Timer1

(Name)

Timer1

Interval

10

Modifiers

Friend

Timer2

(Name)

Timer2

Interval

500

Modifiers

Friend

OBJETO

PROPIEDAD

VALOR

AyudaForm

(Name)

AyudaForm

AutoScaleMode

Font

BackgroundImage

System.Drawing.Bitmap

FormBorderStyle

FixedSingle

MaximizeBox

False

Size

795, 609

StartPosition

CenterScreen

Text

AyudaForm

Label7

(Name)

Label7

AutoSize

True

BackColor

Transparent

Font

Lucida Calligraphy, 24pt, style=Bold, Underline

ForeColor

Yellow

Location

316, 36

Modifiers

Friend

Size

140, 41

TabIndex

8

Text

Ayuda

Label1

(Name)

Label1

AutoSize

True

BackColor

Transparent

Font

Georgia, 12pt, style=Bold

ForeColor

Yellow

Location

21, 115

Modifiers

Friend

Size

778, 252

TabIndex

9

Text

Para comenzar un juego, hacer clic en Menú, luego en Mostrar tablero, posteriormente

seleccionar los colores del tablero deseados. A continuación dentro del Menú, hacer clic

en Mostrar fichas. En Turno de Movimiento aparece el jugador al que le corresponde mover.

Para realizar movimientos, arrastrar la ficha que se quiere mover desde la posición en la que

se encuentra hasta la posición de la casilla hasta la que se quiere llevar. Si el movimiento es

inválido, se regresará automáticamente la ficha a su posición inicial. Si hay oportunidad de

comer y se mueve otra ficha en vez de comer, se va a "soplar" la ficha por no haber comido.

Gana el Jugador que haya comido todas las fichas de su oponente o que deje al otro jugador

con fichas pero sin oportunidad de mover.

Para seleccionar nuevas fichas o para iniciar un nuevo juego, hacer clic en el botón

Seleccionar y luego clic en Sí. Eso cancelará o terminará el juego actual que se tenga.

Label2

(Name)

Label2

AutoSize

True

BackColor

Transparent

Font

Georgia, 15.75pt, style=Bold, Underline

ForeColor

Yellow

Location

428, 435

Modifiers

Friend

Size

359, 75

TabIndex

10

Text

Jaime Montoya

webmaster[arroba]jaimemontoya.com

www.jaimemontoya.com

CerrarButton

(Name)

CerrarButton

BackgroundImage

System.Drawing.Bitmap

Font

Georgia, 12pt, style=Bold

ForeColor

Navy

Location

143, 452

Modifiers

Friend

Size

137, 58

TabIndex

11

Text

Cerrar

EXPLORADOR DE SOLUCIONES

CÓDIGO DEL PROGRAMA

AyudaForm.vb

Public Class AyudaForm

Private Sub CerrarButton_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CerrarButton.Click

Me.Close() 'Cierra el Formulario AyudaForm.

End Sub

End Class

CASILLAS.vb

Public Class CASILLAS

Inherits Panel 'La clase CASILLAS va a heredar todos los atributos, variables, propiedades, procedimientos y eventos de la clase Panel. Si no se heredara la clase Panel, la clase CASILLAS no podría usar eventos, propiedades ni procedimientos de la clase Panel, como lo son los eventos MouseMove y MouseLeave; ni tampoco se podrían usar las propiedades Location, Left, Top, Size, y BackColor; así como tampoco sería posible usar el proedimiento BringToFront.

Public ocupada As Boolean 'Para determinar si encima de una casilla hay una ficha o no, es decir si es una casilla ocupada o no.

Public Shared color1, color2 As Color 'Se declaran dos variables de tipo Color, donde Color no es una clase sino que una estructura. Se le pone "Shared" porque si no se hiciera, al usar en el formulario por ejemplo "CASILLAS.color1 = Color.Blue" daría error diciendo que "La referencia a un miembro no compartido requiere una referencia de objeto." Entonces declarar una variable como "Shared" especifica que uno o varios elementos de programación declarados están asociados a una clase o estructura en general y no a una instancia específica de la clase o estructura.

Public Shared ficha1, ficha2 As Image 'Se declaran dos variables de tipo Image, donde Image es una clase.

Public jugador As Integer = 0

Private posicionx, posiciony As Integer

Private Pf, Pc As Integer

Private qf, qc As Integer

Public equipo As Integer = 0

Private x1, x2 As Panel

Private y1, y2 As Panel

Public Sub mouse_move(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles Me.MouseMove

For f = 0 To 7

For c = 0 To 7

If CType(sender, Panel).Location = casilla(f, c).Location Then

Form1.Label2.Visible = True

Form1.Label2.Text = "POSICION " & "(" & f & "," & c & ")"

End If

Next

Next

End Sub

Public Sub mouse_leave(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.MouseLeave

Form1.Label2.Visible = False

Form1.Label2.Text = ""

End Sub

Public Property Mcolor1() As Color

Get

Return color1

End Get

Set(ByVal x As Color)

color1 = x

End Set

End Property

Public Property Mcolor2() As Color

Get

Return color2

End Get

Set(ByVal x As Color)

color2 = x

End Set

End Property

Public Property Mequipo() As Integer

Get

Return equipo

End Get

Set(ByVal value As Integer)

equipo = value

End Set

End Property

End Class

CORONAS.vb

Public Class CORONAS

Inherits Panel

Private DX, DY As Integer

Private mover As Boolean

Private pos_x, pos_y As Integer

Private fila, columna As Integer 'fila almacena la fila de la posición al darse el evento mouse_down. columna almacena la columna de la posición al darse el evento mouse_up.

Public fila1, columna1 As Integer 'fila1 almacena la fila de la posición al darse el evento mouse_up. columna1 almacena la columna de la posición al darse el evento mouse_up. Aunque cuando se evalúen los procedimientos para comer doble y comer triple, éstas variables son actualizadas para determinar la posición actual de la ficha que se quiere evaluar que pueda comer doble o triple.

Private come As Boolean

Private clicfichajug1 As Boolean 'Variable paradeterminar si se hizo clic sobre una ficha del Jugador 1.

Private clicfichajug2 As Integer 'Variable para determinar si se hizo clic sobre una ficha del Jugador 2.

Public Sub mouse_down(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles Me.MouseDown

mover = True

'CType(sender, Panel).BorderStyle = Windows.Forms.BorderStyle.Fixed3D

CType(sender, Panel).BringToFront()

DX = e.X

DY = e.Y

pos_x = Me.Left

pos_y = Me.Top

'Se captura la fila y columna en que se encuentra.

For f = 0 To 7

For c = 0 To 7

If Me.Location.X >= casilla(f, c).Location.X And Me.Location.X <= casilla(f, c).Location.X + 75 And Me.Location.Y >= casilla(f, c).Location.Y And Me.Location.Y <= casilla(f, c).Location.Y + 75 Then

fila = f 'La variable "fila" almacena la fila del tablero donde se hizo clic (comenzando la cuenta de las filas desde 0 y de arriba hacia abajo).

columna = c 'La variable "columna" almacena la columna del tablero donde se hizo clic (comenzando la cuenta de las columnas desde 0 y de izquierda a derecha).

If casilla(f, c).jugador = 1 Then 'Si la casilla sobre la que se hizo clic tiene una ficha del Jugador 1.

clicfichajug1 = True

End If

If casilla(f, c).jugador = 2 Then

clicfichajug2 = True 'Si la casilla sobre la que se hizo clic tiene una ficha del Jugador 2.

End If

End If

Next

Next

End Sub

Public Sub mouse_up(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles Me.MouseUp

mover = False

CType(sender, Panel).BorderStyle = Windows.Forms.BorderStyle.None

'Se verifica si se encuentra adentro del tablero.

If Me.Location.X >= 357 And Me.Location.X <= 967 And Me.Location.Y >= 66 And Me.Location.Y <= 656 Then

Else

Me.Left = pos_x

Me.Top = pos_y

End If

'Se verifica si se encuentra en una casilla válida.

For f = 0 To 7

For c = 0 To 7

If Me.Location.X >= casilla(f, c).Location.X And Me.Location.X <= casilla(f, c).Location.X + 75 And Me.Location.Y >= casilla(f, c).Location.Y And Me.Location.Y <= casilla(f, c).Location.Y + 75 Then 'Gracias a los ciclos For anidados, se va a ir evaluando casilla por casilla con este If, definiedo las coordenadas para casa casilla, que son cuatro: izquierda, derecha, arriba y abajo. Donde aparece "+ 75" es porque a la coordenada de la izquierda se le agregan 75 pixeles y ya se tiene la coordenada del límite derecho de una casilla, y lo mismo para el caso del eje Y, que ya se tiene el límite superior de la casilla y al sumarle 75 pixeles se obtiene el límite inferior, pues en las coordenadas del formulario las Y positivas van contando hacia abajo.

fila1 = f 'La variable "fila1" almacena la fila del tablero donde se soltó el clic o donde se desea posicionar una ficha (comenzando la cuenta de las filas desde 0 y de arriba hacia abajo).

columna1 = c 'La variable "columna1" almacena la columna del tablero donde se soltó el clic o donde se desea posicionar una ficha (comenzando la cuenta de las columnas desde 0 y de izquierda a derecha).

End If

Next

Next

If (fila1 + columna1) Mod 2 = 0 Then 'Porque la primer ficha está en la posición (0, 0), (2,6), (3, 2), etc, es válido porque la suma de los subíndices da par. Entonces si la suma de los sunbíndices da impar, es porque en esas casillas nunca podría haber una ficha.

'Se verifica que no esté ocupada la casilla.

If casilla(fila1, columna1).ocupada = True Then 'Si la casilla está ocupada, se regresa a las coordenadas de donde venía cuando se dio el evento MouseDown.

Me.Left = pos_x

Me.Top = pos_y

Else 'Es porque la casilla no está ocupada.

'Se establecen los movimientos.

If turno = 1 Then 'Si el turno de mover es para el Jugador 1.

If clicfichajug1 = True Then 'Si con el evento mouse_down se ha determinado que se hizo clic sobre una ficha del Jugador 1.

mover1(CType(sender, Panel))

Else 'Si turno = 2.

Me.Left = pos_x

Me.Top = pos_y

End If

Else 'Si turno = 2, es decir, si el turno de mover es para el Jugador 2 y si sobre la ficha que se hizo clic le pertenece al Jugador 2.

If clicfichajug2 Then 'fila1 almacena la fila donde se quiere ubicar la ficha. fila almacena la fila donde se encontraba la ficha originalmente. Si fila1<fila significa que la fila destino es menor que la fila origen, es decir que se trata de un movimiento del Jugador 2 hacia adelante (hacia arriba en la pantalla). La segunda condición que se pone es que sobre la ficha que se hizo clic tiene que pertenecerle al Jugador 2. Esta línea equivale a escribir "If clicfichajug2 = True Then".

mover2(CType(sender, Panel))

Else

Me.Left = pos_x

Me.Top = pos_y

End If

End If

End If

'End If

Else 'Si la suma de los subíndices da impar, entonces la ficha se regresa a la posición en la que estaba cuando se dio el evento MouseDown, pues en estas casillas nunca podría estar una pieza, ya que los movimientos son siempre diagonales, entonces no hay manera de que queden piezas en casillas cuya suma de subíndices son impares.

Me.Left = pos_x

Me.Top = pos_y

End If

Form1.TextBox1.Text = "Jugador" + Str(turno) 'Para que cuando se suelte el clic del mouse, que aparezca en el TextBox1 a qué Jugador le corresponde el turno del siguiente movimiento.

'Se les da valor False a las siguientes 2 variables para que puedan volverse a poner en True solamente si cumplen la condición señalada en el evento mouse_down.

clicfichajug1 = False

clicfichajug2 = False

End Sub

Public Sub mouse_move(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles Me.MouseMove

If mover Then

Me.Left = e.X + Me.Left – DX

Me.Top = e.Y + Me.Top – DY

End If

End Sub

Public Sub mover1(ByVal sender As Panel)

'Para ubicarse en los movimientos, se hablará de Norte, Sur, Este y Oeste; donde uno se tiene que imaginar el tablero como si hubiera una brújula donde el Norte es arriba, el Sur es abajo, el Este es a la derecha y el Oeste es a la izquierda.

Dim i, j As Integer

If fila1 > fila Then 'fila1 contiene la fila a la que se quiere ir a poner la corona. fila contiene la fila donde estaba la corona. Debido a que esto está dentro del procedimiento es mover1(ByVal sender As Panel), ya se sabe que el movimiento es para el Jugador 1, entonces esta línea condiciona que el Jugador 1 mueve hacia adelante del Jugador 1 (hacia abajo en la pantalla); hacia el Sur.

If columna1 > columna Then 'columna1 contiene la columna a la que se quiere ir a poner la corona. columna contiene la columna donde estaba la corona. Debido a que esto está dentro del procedimiento mover1(ByVal sender As Panel), ya se sabe que el movimiento es para el Jugador 1, y a la vez por la línea anterior se sabe que el movimiento ha sido hacia adelante del Jugador 1 (hacia abajo en la pantalla), entonces esta línea condiciona que el Jugador 1 mueve hacia su izquierda (hacia la derecha en la pantalla); hacia el Este.

'Se sabe entonces que el movimiento ha sido diagonalmente hacia el Sureste.

'Declaración de variables que se utilizarán en el próximo ciclo For que aparece.

Dim numdefichas As Integer = 0 'Número de fichas que hay entre la casilla donde se va a poner la corona y la casilla donde estaba (al hacer el movimiento diagonal).

Dim numdefichasjug1 As Integer = 0 'Número de fichas del Jugador 1 que hay entre la casilla donde se va a poner la corona y la casilla donde estaba (al hacer el movimiento diagonal).

Dim numdefichasjug2 As Integer = 0 'Número de fichas del Jugador 2 que hay entre la casilla donde se va a poner la corona y la casilla donde estaba (al hacer el movimiento diagonal).

Dim ieliminar As Integer 'Valor de la fila a eliminar o comer.

Dim jeliminar As Integer 'Valor de la columna a eliminar o comer.

j = columna + 1

For i = fila + 1 To fila1

If casilla(i, j).ocupada = True Then 'Si la casilla evaluada está ocupada por alguna ficha.

numdefichas += 1 'Equivale a escribir "numdefichas = numdefichas + 1".

If casilla(i, j).jugador = 1 Then 'Si la casilla evaluada está ocupada por una ficha del Jugador 1.

numdefichasjug1 += 1 'Equivale a escribir "numdefichasjug1 = numdefichasjug1 + 1".

End If

If casilla(i, j).jugador = 2 Then 'Si la casilla evaluada está ocupada por una ficha del Jugador 2.

numdefichasjug2 += 1 'Equivale a escribir "numdefichasjug2 = numdefichasjug2 + 1".

'Se almacenan los valores de fila y columna de la ficha que se tendría que eliminar en caso de cumplirse condiciones que se evaluarán posteriormente.

ieliminar = i

jeliminar = j

End If

End If

j += 1 'Equivale a escribir "j = j + 1".

If j = 8 Then 'Esto es para que no se evalúe una columna que no existe, evitando que el programa se trabe.

Exit For 'Salida inmediata del ciclo For aunque no haya terminado el número de iteraciones que se le habían programado.

End If

Next

If columna – fila <> columna1 – fila1 Then 'Con esto se verifica si el movimiento no ha sido diagonal. Para que el movimiento haya sido diagonal (tomando en cuenta que ya se sabe que el movimiento es hacia el Sureste) se debe cumplir la siguiente ecuación: "columna – fila = columna1 – fila1". Por ejemplo, si la posición de inicio fue (4,0), la resta 0 – 4 da -4, entonces la posición destino (5,1) sería válida porque columna1+fila1=1-5=-4. Igualmente otras posiciones válidas para este ejemplo serían (6,2) y (7,3). Algunas posiciones inválidas para este mismo ejemplo serían (5,3), (6,6), (7,7), (7,5). Si no se cumple esta ecuación, el movimiento hacia el Sureste no sería diagonal y por lo tanto sería inválido. Por ello la corona se regresa a la posición inicial en que estaba.

Me.Left = pos_x

Me.Top = pos_y

Else 'Si el movimiento de la corona es válido (diagonalmente hacia el Sureste).

If numdefichas <= 1 Then 'Si hay 0 o 1 fichas entre la posición inicial y la posición final del movimiento diagonal que se quiere hacer.

If numdefichasjug1 = 0 Then

'Se efectúa el movimiento.

casilla(fila, columna).ocupada = False

casilla(fila1, columna1).ocupada = True

casilla(fila, columna).jugador = 0

casilla(fila1, columna1).jugador = 1

sender.Top = casilla(fila1, columna1).Top + 12.5

sender.Left = casilla(fila1, columna1).Left + 12.5

turno = 2 'Para que luego de efectuar este movimiento, que el turno sea para el Jugador 2.

End If

If numdefichasjug2 = 1 Then 'Si hay 1 ficha del Jugador 2 entre la posición inicial y la posición final del movimiento diagonal que se quiere hacer.

'Se efectúa el movimiento.

casilla(fila, columna).ocupada = False

casilla(fila1, columna1).ocupada = True

casilla(fila, columna).jugador = 0

casilla(fila1, columna1).jugador = 1

sender.Top = casilla(fila1, columna1).Top + 12.5

sender.Left = casilla(fila1, columna1).Left + 12.5

turno = 2 'Para que luego de efectuar este movimiento, que el turno sea para el Jugador 2.

comer1(ieliminar, jeliminar) 'Para quitar la ficha del otro equipo que ha sido comida por la corona.

End If

If numdefichasjug1 = 1 Then 'Si hay una ficha del Jugador 1 entre la posición inicial y la posición final del movimiento diagonal que se quiere hacer.

'Se devuelve la corona a la posición inicial y el movimiento no se realiza. Esto porque una corona no se puede saltar una ficha de su mismo equipo.

Me.Left = pos_x

Me.Top = pos_y

End If

Else 'Si hay más de una ficha entre la posición inicial y la posición final del movimiento diagonal que se quiere hacer.

'Se devuelve la corona a la posición inicial y el movimiento no se realiza.

Me.Left = pos_x

Me.Top = pos_y

End If

End If

End If

If columna1 < columna Then 'columna1 contiene la columna a la que se quiere ir a poner la corona. columna contiene la columna donde estaba la corona. Debido a que esto está dentro del procedimiento mover1(ByVal sender As Panel), ya se sabe que el movimiento es para el Jugador 1, y a la vez por la línea anterior se sabe que el movimiento ha sido hacia adelante del Jugador 1 (hacia abajo en la pantalla), entonces esta línea condiciona que el Jugador 1 mueve hacia su derecha (hacia la izquierda en la pantalla); hacia el Oeste.

'Se sabe entonces que el movimiento ha sido diagonalmente hacia el Suroeste.

'Declaración de variables que se utilizarán en el próximo ciclo For que aparece.

Dim numdefichas As Integer = 0 'Número de fichas que hay entre la casilla donde se va a poner la corona y la casilla donde estaba (al hacer el movimiento diagonal).

Dim numdefichasjug1 As Integer = 0 'Número de fichas del Jugador 1 que hay entre la casilla donde se va a poner la corona y la casilla donde estaba (al hacer el movimiento diagonal).

Dim numdefichasjug2 As Integer = 0 'Número de fichas del Jugador 2 que hay entre la casilla donde se va a poner la corona y la casilla donde estaba (al hacer el movimiento diagonal).

Dim ieliminar As Integer 'Valor de la fila a eliminar o comer.

Dim jeliminar As Integer 'Valor de la columna a eliminar o comer.

j = columna – 1

'Con el ciclo For presentado a continuación se van a evaluar las fichas que hay (si las hubiera) entre la posición inicial y la posición final del movimiento que se quiere hacer de la corona, para determinar si es posible el movimiento y si es posible también comer.

For i = fila + 1 To fila1

If casilla(i, j).ocupada = True Then 'Si la casilla evaluada está ocupada por alguna ficha.

numdefichas += 1 'Equivale a escribir "numdefichas = numdefichas + 1".

If casilla(i, j).jugador = 1 Then 'Si la casilla evaluada está ocupada por una ficha del Jugador 1.

numdefichasjug1 += 1 'Equivale a escribir "numdefichasjug1 = numdefichasjug1 + 1".

End If

If casilla(i, j).jugador = 2 Then 'Si la casilla evaluada está ocupada por una ficha del Jugador 2.

numdefichasjug2 += 1 'Equivale a escribir "numdefichasjug2 = numdefichasjug2 + 1".

'Se almacenan los valores de fila y columna de la ficha que se tendría que eliminar en caso de cumplirse condiciones que se evaluarán posteriormente.

ieliminar = i

jeliminar = j

End If

End If

j -= 1 'Equivale a escribir "j = j – 1".

If j = -1 Then 'Esto es para que no se evalúe una columna que no existe, evitando que el programa se trabe.

Exit For 'Salida inmediata del ciclo For aunque no haya terminado el número de iteraciones que se le habían programado.

End If

Partes: 1, 2, 3, 4, 5, 6
 Página anterior Volver al principio del trabajoPágina siguiente