我有一个填字游戏。我需要打印信息并让用户插入答案。但是我在比较用户给我的ArrayList
时遇到了麻烦。我不知道错误在哪里。你能帮忙吗?
以下是与档案的链接: https://drive.google.com/open?id=0B2WgC5JnH2wfUWw5TWVzdmpoLTA
这是Java代码:
public class Letra {
private char caracter;
/**
* Construye una Letra <br>
* <b>post: </b> Se construye una letra con un caracter dado
* @param caracter - caracter representado por la Letra
*/
public Letra(char caracter){
this.caracter = caracter;
}
//métodos dar y cambiar
public char darCaracter() {
return caracter;
}
public boolean esIgual(char c){
return caracter==c;
}
}
这是第一个。
public class Palabra {
// Atributos
private Letra[] letras;
public Letra[] darLetras() {
return letras;
}
/**
*
* @param p
* @return
*/
public boolean esIgual(Palabra p){
boolean iguales = letras.length==p.darLetras().length;
for (int i = 0; i < letras.length && iguales; i++) {
iguales &= letras[i].esIgual(p.darLetras()[i].darCaracter());
}
return iguales;
}
}
这是第二个。
public class Crucigrama {
//Constantes
public final static int FILASC = 10;
public final static int COLUMNASC = 23;
// Atributos
// Matriz de caracteres que componen el crucigrama
private Letra[][] caracteres;
// Lista de respuestas del crucigrama
private ArrayList<Palabra> respuestas;
// Lista de respuestas correctas del crucigrama
private ArrayList<Palabra> encontradas;
// Lista de preguntas verticales del crucigrama
private ArrayList<String> preguntasV;
// Lista de preguntas horizontales del crucigrama
private ArrayList<String> preguntasH;
// Métodos dar
public Letra[][] darCaracteres() {
return caracteres;
}
public ArrayList<Palabra> darRespuestas() {
return respuestas;
}
public ArrayList<String> darPreguntasV() {
return preguntasV;
}
public ArrayList<String> darPreguntasH() {
return preguntasH;
}
/**
* Este método sirve para buscar en la pregunta especificada por el usuario,
* si la respuesta dada es correcta. <br>
* <b>post: </b> La lista de palabras encontradas se actualizó con la
* respuesta correcta
*
* @param pregunta
* - Es un entero con la pregunta seleccionada por el usuario y
* la cual va a buscar la respuesta
* @param respuesta
* - Es una cadena con la respuesta digitada por el usuario
* @return Retorna un mensaje indicando si la respuesta es incorrecta o
* correcta
*/
public String buscarRespuesta(int tipo, int pregunta, String respuesta) {
String result = "";
if(darRespuestas().get(pregunta-1).equals(respuesta)){
result = "Correcta";
return result;
}
/**
* Este método permite actualizar la matriz de caracteres del crucigrama,
* con las respuestas correctas dadas por el usuario. debe tener en cuenta
* si la pregunta es vertical u horizontal <br>
* <b>post: </b> La matriz de caracteres ha sido actualizada
*
* @param pregunta
* - Es un entero con la pregunta seleccionada por el usuario,
* para buscarla en la matriz y actualizarla con la respuesta
*
* @param respuesta
* - Es una cadena con la respuesta correcta
* @param tipo
* - Es un entero con el tipo de la pregunta, 1 si es horizontal,
* 2 si es vertical
*
*/
public void actualizarCrucigrama(int pregunta, String respuesta, int tipo) {
}
}
这是第三个
public class InterfazCrucigrama {
private Crucigrama crucigrama;
public InterfazCrucigrama() throws IOException {
crucigrama = new Crucigrama();
cargarCrucigrama();
mostrarBanner();
mostrarCrucigrama();
Menu();
}
/**
* Este método permite Leer el archivo, que contiene las preguntas, respuestas y el crucigrama <br>
*
*/
private void cargarCrucigrama() throws IOException {
BufferedReader br = new BufferedReader(new FileReader("data/crucigrama1.txt"));
String linea = br.readLine();
int k = 0;
int hor = 0;
int ver = 0;
int j = 0;
// preguntas
if (linea != null) {
String[] pre = linea.split("-");
hor = Integer.parseInt(pre[0]);
ver = Integer.parseInt(pre[1]);
}
linea = br.readLine();
// Preguntas horizontales
while (linea != null && k < hor) {
crucigrama.cargarPreguntas('H', linea);
linea = br.readLine();
k++;
}
k = 0;
// Preguntas verticales
while (linea != null && k < ver) {
crucigrama.cargarPreguntas('V', linea);
linea = br.readLine();
k++;
}
// respuestas
String[] res = linea.split("-");
for (int i = 0; i < res.length; i++) {
crucigrama.cargarRespuestas(res[i]);
}
linea = br.readLine();
// Crucigrama
while (linea != null) {
String[] campos = linea.split(" ");
for (int i = 0; i < campos.length; i++) {
String cam = campos[i];
if (!(cam.length() > 1)) {
crucigrama.cargarMatriz(j, i, cam.charAt(0));
}
}
j++;
linea = br.readLine();
}
br.close();
}
/**
* Este método permite mostrar un banner en el Menu. <br>
*/
public void mostrarBanner() {
StringBuilder all = new StringBuilder();
all.append("\n");
int ancho = 17;
for (int a = 1; a <= 4; a++) {
int cantidadAsteriscos = ancho - a;
int cantidadEspacios = ancho - cantidadAsteriscos;
int cantidadSlashes = (ancho - a) * 2;
int cantidadDeBackSlashes = (a - 1) * 2;
appendChars(all, '*', cantidadAsteriscos);
appendChars(all, ' ', cantidadEspacios);
appendChars(all, '/', cantidadSlashes);
appendChars(all, '\\', cantidadDeBackSlashes);
appendChars(all, ' ', cantidadEspacios);
appendChars(all, '*', cantidadAsteriscos);
all.append("\n");
}
all.append("*****************************************************************\n");
all.append("************************** CRUCIGRAMA ***************************\n");
all.append("*****************************************************************\n");
for (int a = 4; a >= 1; a--) {
int cantidadAsteriscos = ancho - a;
int cantidadEspacios = ancho - cantidadAsteriscos;
int cantidadDeBackSlashes = (ancho - a) * 2;
int cantidadSlashes = (a - 1) * 2;
appendChars(all, '*', cantidadAsteriscos);
appendChars(all, ' ', cantidadEspacios);
appendChars(all, '/', cantidadSlashes);
appendChars(all, '\\', cantidadDeBackSlashes);
appendChars(all, ' ', cantidadEspacios);
appendChars(all, '*', cantidadAsteriscos);
all.append("\n");
}
all.append("\n");
System.out.println(all.toString());
}
/**
* Este método permite concatenar los caracteres para el banner. <br>
*/
static void appendChars(StringBuilder sb, char c, int count) {
for (int i = 0; i < count; i++) {
sb.append(c);
}
}
/**
* Este método permite mostrar las preguntas y el crucigrama por Consola. <br>
*/
public void mostrarCrucigrama(){
System.out.println("--------------PREGUNTAS--------------");
System.out.println("VERTICALES");
for(int indice = 0; indice < crucigrama.darPreguntasH().size(); indice++){
System.out.println(crucigrama.darPreguntasH().get(indice));
}
System.out.println("----------------------------------------");
System.out.println("HORIZONTALES");
for(int indice = 0; indice < crucigrama.darPreguntasV().size(); indice++){
System.out.println(crucigrama.darPreguntasV().get(indice));
}
System.out.println("----------------------------------------");
System.out.println("RESPUESTAS");
for(int indice = 0; indice < crucigrama.darRespuestas().size(); indice++){
System.out.println(crucigrama.darRespuestas().get(indice).darLetras());
}
System.out.println("\n");
for(int i = 0; i < 10; i++){
for(int j = 0; j < 23; j++){
System.out.print(crucigrama.darCaracteres()[i][j].darCaracter());
if (j == 22){
System.out.print("\n");
}
}
}
}
/**
* Este método permite mostrar El menú al usuario. <br>
*/
//BASICALLY THIS IS WHERE THE CODE DOESN'T WORK AS IT SHOULD
public void Menu() {
Scanner lector = new Scanner(System.in);
int pregunta = 0;
String respuesta = "";
int tipo = 0;
int continuar = 1;
while (!crucigrama.estaTerminado() && continuar == 1) {
System.out.format("+------------------------------+%n%n");
System.out.println("************ MENU ***************");
System.out.println("Por favor digite el número de la pregunta ");
pregunta = lector.nextInt();
System.out.println("Digite 1 si es horizontal o 2 si es vertical");
tipo = lector.nextInt();
System.out.println("Digite la respuesta");
respuesta = lector.next();
String resultado = crucigrama.buscarRespuesta( tipo, pregunta, respuesta.toUpperCase());
System.out.println("Su respuesta es " + resultado);
if (resultado.equals("Correcta"))
crucigrama.actualizarCrucigrama(pregunta, respuesta, tipo);
mostrarCrucigrama();
System.out.println("Desea continuar? 1.SI 2.NO");
continuar = lector.nextInt();
}
System.out.println("Gracias por jugar!");
System.exit(0);
}
/**
* Este método permite mostrar las preguntas en formato tabla. <br>
*/
private void agregarPreguntas() {
String formato = "|%-80s| %-80s | %n";
String formato2 = "%-60s %-10s %-60s %n";
String hor = "";
String ver = "";
String l = "----------------------------------------------------------------------------";
System.out.format(formato2, l, "PREGUNTAS", l);
System.out.format(
"+---------------------+--------------------------------+------------------------------+------------------------+--------------------+-------+---------------+-------+%n");
System.out.format(formato, "Horizontales", "Verticales");
System.out.format(
"+---------------------+--------------------------------+------------------------------+------------------------+--------------------+-------+---------------+-------+%n");
for (int i = 0; i < crucigrama.darPreguntasH().size() || i < crucigrama.darPreguntasV().size(); i++) {
if (i < crucigrama.darPreguntasH().size())
hor = crucigrama.darPreguntasH().get(i);
else
hor = " ";
if (i < crucigrama.darPreguntasV().size())
ver = crucigrama.darPreguntasV().get(i);
else
ver = " ";
System.out.format(formato, hor, ver);
}
System.out.format(
"+---------------------+--------------------------------+------------------------------+------------------------+--------------------+-------+---------------+-------+%n%n%n");
}
public static void main(String[] args) throws IOException {
// TODO Auto-generated method stub
InterfazCrucigrama wordCross = new InterfazCrucigrama();
}
}
这是最后一个。界面。
因此,当您初始化填字游戏时,您可以选择一个问题,然后您必须说明它是纵向还是横向。然后你把你的答案,如果它是正确的,它应该给你一个说正确的消息,并刷新填字游戏中的单词(虽然没有那么远)。但是当你提出答案时,即使答案是正确的,它也不会做任何事情。我知道代码中存在很多缺陷,这实在令人沮丧。但到目前为止,只是试图让代码比较答案并返回消息。