public class PuzzleGameActivity extends AppCompatActivity {
private PuzzleAdapter puzzleAdapter;
private GridView puzzleGridView;
private List<PuzzlePiece> puzzlePieces;
private int gridSize = 3; // Tamaño del tablero de juego
private PuzzlePiece emptyPiece;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_puzzle_game);
// Inicializar las piezas del rompecabezas
puzzlePieces = generatePuzzlePieces();
// Mezclar las piezas del rompecabezas
Collections.shuffle(puzzlePieces);
// Encontrar la pieza vacía
emptyPiece = findEmptyPiece();
// Configurar el GridView
puzzleGridView = findViewById(R.id.puzzleGridView);
puzzleAdapter = new PuzzleAdapter(this, puzzlePieces);
puzzleGridView.setNumColumns(gridSize);
puzzleGridView.setAdapter(puzzleAdapter);
puzzleGridView.setOnItemClickListener((parent, view, position, id) -> {
// Acción al hacer clic en una pieza del rompecabezas
handlePuzzlePieceClick(position);
});
}
private List<PuzzlePiece> generatePuzzlePieces() {
// Lógica para generar las piezas del rompecabezas
// Aquí puedes crear y configurar las piezas del rompecabezas según tu diseño y lógica de juego
// Puedes asignar números, imágenes o símbolos a las piezas del rompecabezas y mezclarlas
// En este ejemplo, generaremos una lista de piezas numéricas del 1 al 8 y una pieza vacía representada por 0
List<PuzzlePiece> puzzlePieces = new ArrayList<>();
for (int i = 1; i < gridSize * gridSize; i++) {
puzzlePieces.add(new PuzzlePiece(i));
}
puzzlePieces.add(new PuzzlePiece(0)); // Pieza vacía
return puzzlePieces;
}
private PuzzlePiece findEmptyPiece() {
// Encontrar y devolver la pieza vacía en el rompecabezas
for (PuzzlePiece piece : puzzlePieces) {
if (piece.getNumber() == 0) {
return piece;
}
}
return null;
}
private void handlePuzzlePieceClick(int position) {
// Lógica para manejar el clic en una pieza del rompecabezas
// Aquí puedes implementar la lógica del juego, como intercambiar las piezas y verificar si el rompecabezas está resuelto
// Puedes utilizar la posición de la pieza en el GridView para realizar las operaciones necesarias
// Recuerda actualizar el estado de las piezas y notificar al adaptador para refrescar la vista
PuzzlePiece clickedPiece = puzzlePieces.get(position);
if (canMovePiece(clickedPiece)) {
// Intercambiar la pieza clicada con la pieza vacía
swapPieces(clickedPiece, emptyPiece);
// Verificar si el rompecabezas está resuelto
if (isPuzzleSolved()) {
// El rompecabezas está resuelto, realizar acciones adicionales aquí
Toast.makeText(this, "¡Felicidades! Has resuelto el rompecabezas.", Toast.LENGTH_SHORT).show();
}
}
}
private boolean canMovePiece(PuzzlePiece clickedPiece) {
// Lógica para verificar si la pieza clicada se puede mover
// Aquí puedes implementar la lógica para determinar si la pieza seleccionada se puede intercambiar con la pieza vacía
// Por ejemplo, puedes verificar si la pieza clicada está adyacente a la pieza vacía
int emptyIndex = puzzlePieces.indexOf(emptyPiece);
int clickedIndex = puzzlePieces.indexOf(clickedPiece);
// Verificar si la pieza clicada está adyacente a la pieza vacía
return (emptyIndex == clickedIndex - 1 && clickedIndex % gridSize != 0) ||
(emptyIndex == clickedIndex + 1 && (clickedIndex + 1) % gridSize != 0) ||
emptyIndex == clickedIndex - gridSize ||
emptyIndex == clickedIndex + gridSize;
}
private void swapPieces(PuzzlePiece piece1, PuzzlePiece piece2) {
// Intercambiar dos piezas en el rompecabezas
int index1 = puzzlePieces.indexOf(piece1);
int index2 = puzzlePieces.indexOf(piece2);
Collections.swap(puzzlePieces, index1, index2);
puzzleAdapter.notifyDataSetChanged();
}
private boolean isPuzzleSolved() {
// Lógica para verificar si el rompecabezas está resuelto
// Aquí puedes implementar la lógica para verificar si las piezas del rompecabezas están en el orden correcto
// Por ejemplo, puedes comparar los números de las piezas con la posición en la lista
for (int i = 0; i < puzzlePieces.size(); i++) {
PuzzlePiece piece = puzzlePieces.get(i);
if (piece.getNumber() != i + 1) {
return false;
}
}
return true;
}
}
public class PuzzleGameActivity extends AppCompatActivity {
private PuzzleAdapter puzzleAdapter;
private GridView puzzleGridView;
private List<PuzzlePiece> puzzlePieces;
private int gridSize = 3; // Tamaño del tablero de juego
private PuzzlePiece emptyPiece;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_puzzle_game);
// Inicializar las piezas del rompecabezas
puzzlePieces = generatePuzzlePieces();
// Mezclar las piezas del rompecabezas
Collections.shuffle(puzzlePieces);
// Encontrar la pieza vacía
emptyPiece = findEmptyPiece();
// Configurar el GridView
puzzleGridView = findViewById(R.id.puzzleGridView);
puzzleAdapter = new PuzzleAdapter(this, puzzlePieces);
puzzleGridView.setNumColumns(gridSize);
puzzleGridView.setAdapter(puzzleAdapter);
puzzleGridView.setOnItemClickListener((parent, view, position, id) -> {
// Acción al hacer clic en una pieza del rompecabezas
handlePuzzlePieceClick(position);
});
}
private List<PuzzlePiece> generatePuzzlePieces() {
// Lógica para generar las piezas del rompecabezas
// Aquí puedes crear y configurar las piezas del rompecabezas según tu diseño y lógica de juego
// Puedes asignar números, imágenes o símbolos a las piezas del rompecabezas y mezclarlas
// En este ejemplo, generaremos una lista de piezas numéricas del 1 al 8 y una pieza vacía representada por 0
List<PuzzlePiece> puzzlePieces = new ArrayList<>();
for (int i = 1; i < gridSize * gridSize; i++) {
puzzlePieces.add(new PuzzlePiece(i));
}
puzzlePieces.add(new PuzzlePiece(0)); // Pieza vacía
return puzzlePieces;
}
private PuzzlePiece findEmptyPiece() {
// Encontrar y devolver la pieza vacía en el rompecabezas
for (PuzzlePiece piece : puzzlePieces) {
if (piece.getNumber() == 0) {
return piece;
}
}
return null;
}
private void handlePuzzlePieceClick(int position) {
// Lógica para manejar el clic en una pieza del rompecabezas
// Aquí puedes implementar la lógica del juego, como intercambiar las piezas y verificar si el rompecabezas está resuelto
// Puedes utilizar la posición de la pieza en el GridView para realizar las operaciones necesarias
// Recuerda actualizar el estado de las piezas y notificar al adaptador para refrescar la vista
PuzzlePiece clickedPiece = puzzlePieces.get(position);
if (canMovePiece(clickedPiece)) {
// Intercambiar la pieza clicada con la pieza vacía
swapPieces(clickedPiece, emptyPiece);
// Verificar si el rompecabezas está resuelto
if (isPuzzleSolved()) {
// El rompecabezas está resuelto, realizar acciones adicionales aquí
Toast.makeText(this, "¡Felicidades! Has resuelto el rompecabezas.", Toast.LENGTH_SHORT).show();
}
}
}
private boolean canMovePiece(PuzzlePiece clickedPiece) {
// Lógica para verificar si la pieza clicada se puede mover
// Aquí puedes implementar la lógica para determinar si la pieza seleccionada se puede intercambiar con la pieza vacía
// Por ejemplo, puedes verificar si la pieza clicada está adyacente a la pieza vacía
int emptyIndex = puzzlePieces.indexOf(emptyPiece);
int clickedIndex = puzzlePieces.indexOf(clickedPiece);
// Verificar si la pieza clicada está adyacente a la pieza vacía
return (emptyIndex == clickedIndex - 1 && clickedIndex % gridSize != 0) ||
(emptyIndex == clickedIndex + 1 && (clickedIndex + 1) % gridSize != 0) ||
emptyIndex == clickedIndex - gridSize ||
emptyIndex == clickedIndex + gridSize;
}
private void swapPieces(PuzzlePiece piece1, PuzzlePiece piece2) {
// Intercambiar dos piezas en el rompecabezas
int index1 = puzzlePieces.indexOf(piece1);
int index2 = puzzlePieces.indexOf(piece2);
Collections.swap(puzzlePieces, index1, index2);
puzzleAdapter.notifyDataSetChanged();
}
private boolean isPuzzleSolved() {
// Lógica para verificar si el rompecabezas está resuelto
// Aquí puedes implementar la lógica para verificar si las piezas del rompecabezas están en el orden correcto
// Por ejemplo, puedes comparar los números de las piezas con la posición en la lista
for (int i = 0; i < puzzlePieces.size(); i++) {
PuzzlePiece piece = puzzlePieces.get(i);
if (piece.getNumber() != i + 1) {
return false;
}
}
return true;
}
}
Comentarios sobre la versión: 1.0 (0)
No hay comentarios