Посмотрим. Я включу сюда блок кода с довольно большим количеством кода и посмотрим, как это будет выглядеть при печати:
import java.util.Scanner;
/**
* Игра AceyDucey
*
* Основано на базовой игре AceyDucey здесь
* https://github.com/coding-horror/basic-computer-games/blob/main/01%20Acey%20Ducey/aceyducey.bas
* Примечание: Идея заключалась в создании версии базовой игры 1970-х годов на Java, без введения
* новых функций — не добавлен дополнительный текст, проверка ошибок и т. д.
*/
public class AceyDucey {
// Текущая сумма денег игрока
private int playerAmount;
// Первая выданная карта дилера
private Card firstCard;
// Вторая выданная карта дилера
private Card secondCard;
// Выданная карта игрока
private Card playersCard;
// Флаг для отображения вступления/инструкций к игре
private boolean firstTimePlaying = true;
// Состояние игры для определения окончания игры
private boolean gameOver = false;
// Используется для ввода с клавиатуры
private final Scanner kbScanner;
// Постоянные значения для карт из колоды — 2 минимальное, 14 (Туз) максимальное
public static final int LOW_CARD_RANGE = 2;
public static final int HIGH_CARD_RANGE = 14;
public AceyDucey() {
// Инициализация суммы денег игрока
playerAmount = 100;
// Инициализация сканера клавиатуры
kbScanner = new Scanner(System.in);
}
// Метод «Играть снова» — публичный метод, вызываемый из класса, запускающего игру
// Если игрок вводит YES, то игра может быть сыграна снова (возвращается true)
// иначе нет (false)
public boolean playAgain() {
System.out.println();
System.out.println("ИЗВИНИ, ДРУГ, НО ТЫ ПРОИГРАЛ ВСЁ.");
System.out.println();
System.out.println();
System.out.print("ПОПРОБОВАТЬ СНОВА (ДА ИЛИ НЕТ) ");
String playAgain = kbScanner.next().toUpperCase();
System.out.println();
System.out.println();
if (playAgain.equals("YES")) {
return true;
} else {
System.out.println("ОК, НАДЕЮСЬ, ТЕБЕ БЫЛО ИНТЕРЕСНО!");
return false;
}
}
// Метод игрового цикла
public void play() {
// Продолжать разыгрывать руки, пока у игрока не кончатся деньги
do {
if (firstTimePlaying) {
intro();
firstTimePlaying = false;
}
displayBalance();
drawCards();
displayCards();
int betAmount = getBet();
playersCard = randomCard();
displayPlayerCard();
if (playerWon()) {
System.out.println("ВЫ ВЫИГРАЛИ!!");
playerAmount += betAmount;
} else {
System.out.println("ИЗВИНИ, ВЫ ПРОИГРАЛИ");
playerAmount -= betAmount;
// У игрока закончились деньги?
if (playerAmount <= 0) {
gameOver = true;
}
}
} while (!gameOver); // Продолжать играть, пока у игрока не кончатся деньги
}
// Метод для определения, выиграл ли игрок (возвращается true) или проиграл (возвращается false)
// Чтобы выиграть, карта игрока должна находиться в диапазоне между первой и второй картой дилера
// включительно.
private boolean playerWon() {
// Победитель
return (playersCard.getValue() >= firstCard.getValue())
&& playersCard.getValue() <= secondCard.getValue();
}
private void displayPlayerCard() {
System.out.println(playersCard.getName());
}
// Получить ставку игрока и вернуть сумму
// 0 считается допустимой ставкой, но ставка больше доступной у игрока суммы недопустима
// метод будет повторяться, пока не будет введена допустимая ставка.
private int getBet() {
boolean validBet = false;
int amount;
do {
System.out.print("КАКАЯ ВАША СТАВКА ");
amount = kbScanner.nextInt();
if (amount == 0) {
System.out.println("ТРУС!!");
validBet = true;
} else if (amount > playerAmount) {
System.out.println("ИЗВИНИ, ДРУГ, НО ТЫ СДЕЛАЛ СЛИШКОМ БОЛЬШУЮ СТАВКУ.");
System.out.println("У ТЕБЯ ЕСТЬ ТОЛЬКО " + playerAmount + " ДОЛЛАРОВ ДЛЯ СТАВКИ.");
} else {
validBet = true;
}
} while (!validBet);
return amount;
}
private void displayBalance() {
System.out.println("У ТЕБЯ ТЕПЕРЬ " + playerAmount + " ДОЛЛАРОВ.");
}
private void displayCards() {
System.out.println("ВОТ ДВЕ СЛЕДУЮЩИЕ КАРТЫ: ");
System.out.println(firstCard.getName());
System.out.println(secondCard.getName());
}
// Выдать две карты дилера и сохранить их для дальнейшего использования.
// Убедиться, что первая карта имеет меньшее значение, чем вторая
private void drawCards() {
do {
firstCard = randomCard();
secondCard = randomCard();
} while (firstCard.getValue() >= secondCard.getValue());
}
// Создать случайную карту
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("ИГРА В КАРТЫ ACEY DUCEY");
System.out.println("CREATIVE COMPUTING MORRISTOWN, NEW JERSEY");
System.out.println();
System.out.println();
System.out.println("ACEY-DUCEY ИГРАЕТСЯ СЛЕДУЮЩИМ ОБРАЗОМ");
System.out.println("ДИЛЕР (КОМПЬЮТЕР) ВЫДАЁТ ДВЕ КАРТЫ РУБАШКОЙ ВВЕРХ");
System.out.println("У ВАС ЕСТЬ ВОЗМОЖНОСТЬ СДЕЛАТЬ СТАВКУ ИЛИ НЕ ДЕЛАТЬ ЕЁ В ЗАВИСИМОСТИ");
System.out.println("ОТ ТОГО, СЧИТАЕТЕ ЛИ ВЫ, ЧТО КАРТА БУДЕТ ИМЕТЬ");
System.out.println("ЗНАЧЕНИЕ МЕЖДУ ДВУМЯ ПЕРВЫМИ.");
System.out.println("ЕСЛИ ВЫ НЕ ХОТИТЕ ДЕЛАТЬ СТАВКУ, ВВЕДИТЕ: 0");
}
}
Обратите внимание, что у нас есть довольно полная поддержка доступности, поэтому я был бы рад услышать, что именно не работает для вашего слепого пользователя @thresholdpeople.
Кроме того, блок кода выше выглядит нормально в печатной версии для меня. Я просто нажал «Печать» в Chrome, затем «Сохранить как PDF», чтобы сгенерировать PDF-версию этой самой темы:
Экспорт темы в формате markdown - функция - Discourse Meta.pdf (249.9 KB)
Я не вижу проблемы. Если вы видите проблему, пожалуйста, укажите конкретные места в PDF, которые некорректны. Спасибо!