private void CreateCells() { CellDetails cell; Point cellLoc; //int rows = (picBoard.ClientSize.Height / cCellSize); //int cols = (picBoard.ClientSize.Width / cCellSize); int rows = 8, cols = 8, y = 0, x = 0; // Loop through the rows for (int row = 0; row < rows; row++) { // Loop through the columns for (int col = 0; col < cols; col++) { cell = new CellDetails(); cellLoc = new Point(); x = col * cCellSize; y = row * cCellSize; //cellLoc.Y = row + 1; //cellLoc.X = col + 1; cellLoc.X = x; cellLoc.Y = y; cell.Location = cellLoc; //cell.Dimension = new Rectangle(col * cCellSize, row * cCellSize, cCellSize, cCellSize); cell.Dimension = new Rectangle(x, y, cCellSize, cCellSize); cells.Add(cell); } } lblDetails.Text = String.Format("Generated {0} cells.", cells.Count); }
private CellDetails FindCell(MouseEventArgs e) { CellDetails ret = null; foreach (CellDetails cell in cells) { if (cell.Dimension.Contains(e.Location)) { ret = cell; break; } } return(ret); }
//int [,] tablero = new int[8,8]; public Form1() { InitializeComponent(); picTile.Size = new Size(cCellSize, cCellSize); //picBoard.MouseMove += PicBoard_MouseMove; picBoard.MouseClick += PicBoard_MouseClick; picBoard.Paint += PicBoard_Paint; CreateCells(); boardLeft = picBoard.Location.X; boardTop = picBoard.Location.Y; cNull = new CellDetails(); cNull.tipo = -3; //-3 indica que es null cNull.Dimension = new Rectangle(); cNull.Location = new Point(-1, -1); cNull.ubicacion = -1; }
private void PicBoard_MouseClick(object sender, MouseEventArgs e) { if (hooman) { clickCount++; CellDetails cell = FindCell(e); if (cell != null && cell.Location.X > -1 && cell.Location.Y > -1) { if (((((cell.ubicacion / 8) % 2) != 0) && ((cell.ubicacion % 8) % 2 == 0)) || (((cell.ubicacion / 8) % 2 == 0) && ((cell.ubicacion % 8) % 2 != 0))) { if (clickCount % 2 != 0) //Primer clic del movimiento (elección de ficha a mover) { //picTile.Location = new Point(cell.Dimension.X + boardLeft, cell.Dimension.Y + boardTop); //picTile.Visible = true; inicio = cell; //Console.WriteLine("Inicio " + inicio.Location.X + " " + inicio.Location.Y); } else //Segundo clic de movimiento (elección de a dónde se va a mover la ficha) { fin = cell; //Console.Write("Fin " + fin.Location.X + " " + fin.Location.Y); //encontrar posición en tablero filaInicio = inicio.ubicacion / 8; columnaInicio = inicio.ubicacion % 8; filaFin = fin.ubicacion / 8; columnaFin = fin.ubicacion % 8; tipo = inicio.tipo; // esta es la semi buena (funciona para movimientos simples -sin saltos) if (tablero[inicio.ubicacion % 8, inicio.ubicacion / 8] != 0 && tablero[fin.ubicacion % 8, fin.ubicacion / 8] == 0 && Math.Abs(distanciaX(inicio.ubicacion % 8, fin.ubicacion % 8)) == 1 && Math.Abs(distanciaY(inicio.ubicacion / 8, fin.ubicacion / 8)) == 1) // segundo intento if (tablero[columnaInicio, filaInicio] != 0 && tablero[columnaFin, filaFin] == 0 /*&& distancia(columnaInicio,filaInicio,columnaFin,filaFin) == 1*/) /*if(tablero[fin.ubicacion % 8,fin.ubicacion / 8] == 0 && ( (Math.Abs(distancia(inicio.ubicacion % 8, fin.ubicacion % 8)) == 1 && Math.Abs(distancia(inicio.ubicacion/8,fin.ubicacion/8)) == 1) || (distancia(inicio.ubicacion%8,fin.ubicacion%8) == 2 && distancia(inicio.ubicacion/8,fin.ubicacion/8) == 2 && tablero[inicio.ubicacion%8 + 1, inicio.ubicacion/8 + 1] != 0) || (distancia(inicio.ubicacion % 8, fin.ubicacion % 8) == -2 && distancia(inicio.ubicacion / 8, fin.ubicacion / 8) == -2 && tablero[inicio.ubicacion % 8 - 1, inicio.ubicacion / 8 - 1] != 0) || (distancia(inicio.ubicacion % 8, fin.ubicacion % 8) == 2 && distancia(inicio.ubicacion / 8, fin.ubicacion / 8) == -2 && tablero[inicio.ubicacion % 8 + 1, inicio.ubicacion / 8 - 1] != 0) || (distancia(inicio.ubicacion % 8, fin.ubicacion % 8) == -2 && distancia(inicio.ubicacion / 8, fin.ubicacion / 8) == 2 && tablero[inicio.ubicacion % 8 - 1, inicio.ubicacion / 8 + 1] != 0) || ))*/ if (/*tablero[columnaInicio,filaInicio] < 0 &&*/ tablero[columnaFin, filaFin] == 0 && ((Math.Abs(distancia(columnaInicio, columnaFin)) == 1 && Math.Abs(distancia(filaInicio, filaFin)) == 1) || (distancia(columnaInicio, columnaFin) == 2 && distancia(filaInicio, filaFin) == 2 && tablero[columnaInicio + 1, filaInicio + 1] > 0) || //Abajo derecha (distancia(columnaInicio, columnaFin) == -2 && distancia(filaInicio, filaFin) == -2 && tablero[columnaInicio - 1, filaInicio - 1] > 0) || //Arriba izquierda (distancia(columnaInicio, columnaFin) == 2 && distancia(filaInicio, filaFin) == -2 && tablero[columnaInicio + 1, filaInicio - 1] > 0) || //Arriba derecha (distancia(columnaInicio, columnaFin) == -2 && distancia(filaInicio, filaFin) == 2 && tablero[columnaInicio - 1, filaInicio + 1] > 0) //Abajo izquierda )) { //intercambia imgs auxtipo = inicio.tipo; inicio.tipo = fin.tipo; fin.tipo = auxtipo; tablero[inicio.ubicacion % 8, inicio.ubicacion / 8] = inicio.tipo; tablero[fin.ubicacion % 8, fin.ubicacion / 8] = fin.tipo; switch (distancia(columnaInicio, columnaFin)) { case 2: if (distancia(filaInicio, filaFin) == 2) { tablero[columnaInicio + 1, filaInicio + 1] = 0; } else //distancia(filaInicio, filaFin) == -2 { tablero[columnaInicio + 1, filaInicio - 1] = 0; } break; case -2: if (distancia(filaInicio, filaFin) == -2) { tablero[columnaInicio - 1, filaInicio - 1] = 0; } else //distancia(filaInicio, filaFin) == -2 { tablero[columnaInicio - 1, filaInicio + 1] = 0; } break; } Console.WriteLine("Tipo Inicio: " + inicio.tipo + "\nTipo fin: " + fin.tipo); this.Refresh(); //hooman = false; juega(); } else { Console.WriteLine("Movimiento no válido"); MessageBox.Show("Movimiento no válido", "Error", MessageBoxButtons.OK); } } } } } }