Veamos. Incluiré un bloque de código aquí con una buena cantidad de código y veré cómo se ve impreso:
import java.util.Scanner;
/**
* Juego de AceyDucey
* <p>
* Basado en el juego básico de AceyDucey aquí
* https://github.com/coding-horror/basic-computer-games/blob/main/01%20Acey%20Ducey/aceyducey.bas
* Nota: La idea era crear una versión del juego Basic de los años 70 en Java, sin introducir
* nuevas características - no se ha añadido texto adicional, comprobación de errores, etc.
*/
public class AceyDucey {
// Cantidad actual de dinero del jugador
private int playerAmount;
// Primera carta repartida por el crupier
private Card firstCard;
// Segunda carta repartida por el crupier
private Card secondCard;
// Carta repartida al jugador
private Card playersCard;
// Se usa para mostrar la introducción/instrucciones del juego
private boolean firstTimePlaying = true;
// Estado del juego para determinar si ha terminado
private boolean gameOver = false;
// Se usa para la entrada del teclado
private final Scanner kbScanner;
// Valor constante para las cartas de una baraja - 2 la más baja, 14 (As) la más alta
public static final int LOW_CARD_RANGE = 2;
public static final int HIGH_CARD_RANGE = 14;
public AceyDucey() {
// Inicializar el dinero del jugador
playerAmount = 100;
// Inicializar el escáner del teclado
kbScanner = new Scanner(System.in);
}
// Método para jugar de nuevo - método público llamado desde la clase que invoca el juego
// Si el jugador introduce SÍ, el juego se puede volver a jugar (devuelve verdadero)
// de lo contrario no (falso)
public boolean playAgain() {
System.out.println();
System.out.println("LO SIENTO, AMIGO, PERO TE HAS QUEDADO SIN DINERO.");
System.out.println();
System.out.println();
System.out.print("¿QUIERES JUGAR OTRA VEZ (SÍ O NO)? ");
String playAgain = kbScanner.next().toUpperCase();
System.out.println();
System.out.println();
if (playAgain.equals("SÍ")) {
return true;
} else {
System.out.println("¡DE ACUERDO, ESPERO QUE TE HAYAS DIVERTIDO!");
return false;
}
}
// método del bucle del juego
public void play() {
// Seguir jugando manos hasta que el jugador se quede sin dinero
do {
if (firstTimePlaying) {
intro();
firstTimePlaying = false;
}
displayBalance();
drawCards();
displayCards();
int betAmount = getBet();
playersCard = randomCard();
displayPlayerCard();
if (playerWon()) {
System.out.println("¡HAS GANADO!!");
playerAmount += betAmount;
} else {
System.out.println("LO SIENTO, HAS PERDIDO");
playerAmount -= betAmount;
// ¿Se ha quedado el jugador sin dinero?
if (playerAmount <= 0) {
gameOver = true;
}
}
} while (!gameOver); // Seguir jugando hasta que el jugador se quede sin dinero
}
// Método para determinar si el jugador ganó (devuelve verdadero) o perdió (devuelve falso)
// para ganar, la carta del jugador debe estar en el rango de la primera y la segunda carta del crupier
// repartidas, incluidas la primera y la segunda carta.
private boolean playerWon() {
// ganador
return (playersCard.getValue() >= firstCard.getValue())
&& playersCard.getValue() <= secondCard.getValue();
}
private void displayPlayerCard() {
System.out.println(playersCard.getName());
}
// Obtener la apuesta del jugador y devolver la cantidad
// 0 se considera una apuesta válida, pero más de lo que el jugador tiene disponible no lo es
// el método se repetirá hasta que se introduzca una apuesta válida.
private int getBet() {
boolean validBet = false;
int amount;
do {
System.out.print("¿CUÁL ES TU APUESTA? ");
amount = kbScanner.nextInt();
if (amount == 0) {
System.out.println("¡GALLINA!");
validBet = true;
} else if (amount > playerAmount) {
System.out.println("LO SIENTO, AMIGO, PERO HAS APOSTADO DEMASIADO.");
System.out.println("SOLO TIENES " + playerAmount + " DÓLARES PARA APOSTAR.");
} else {
validBet = true;
}
} while (!validBet);
return amount;
}
private void displayBalance() {
System.out.println("AHORA TIENES " + playerAmount + " DÓLARES.");
}
private void displayCards() {
System.out.println("AQUÍ ESTÁN TUS DOS PRÓXIMAS CARTAS: ");
System.out.println(firstCard.getName());
System.out.println(secondCard.getName());
}
// Repartir dos cartas del crupier y guardarlas para su uso posterior.
// asegurarse de que la primera carta tenga un valor menor que la segunda
private void drawCards() {
do {
firstCard = randomCard();
secondCard = randomCard();
} while (firstCard.getValue() >= secondCard.getValue());
}
// Crea una carta aleatoria
private Card randomCard() {
return new Card((int) (Math.random()
* (HIGH_CARD_RANGE - LOW_CARD_RANGE + 1) + LOW_CARD_RANGE));
}
public void intro() {
System.out.println("JUEGO DE CARTAS ACEY DUCEY");
System.out.println("CREATIVE COMPUTING MORRISTOWN, NEW JERSEY");
System.out.println();
System.out.println();
System.out.println("ACEY-DUCEY SE JUEGA DE LA SIGUIENTE MANERA");
System.out.println("EL CRUPIER (ORDENADOR) REPARTE DOS CARTAS BOCA ARRIBA");
System.out.println("TIENES LA OPCIÓN DE APOSTAR O NO APOSTAR DEPENDIENDO");
System.out.println("DE SI SIENTES QUE LA CARTA TENDRÁ");
System.out.println("UN VALOR ENTRE LAS DOS PRIMERAS.");
System.out.println("SI NO QUIERES APOSTAR, INTRODUCE: 0");
}
}
Tenga en cuenta que tenemos un soporte de accesibilidad bastante completo, por lo que me interesaría saber específicamente qué no funciona para su usuario ciego @thresholdpeople .
Además, el bloque de código anterior me parece bien en la versión impresa. Simplemente presioné “imprimir” en Chrome y luego “guardar como PDF” para generar una versión en PDF de este mismo tema:
Exportar tema como markdown - característica - Discourse Meta.pdf (249.9 KB)
No veo ningún problema. Por favor, señale áreas específicas del PDF que no sean correctas si ve algún problema. ¡Gracias!