让我们看看。我将在此处包含一个包含大量代码的代码块,看看它在打印时是什么样子:
import java.util.Scanner;
/**
* AceyDucey 游戏
* <p>
* 基于此处的 Basic AceyDucey 游戏
* https://github.com/coding-horror/basic-computer-games/blob/main/01%20Acey%20Ducey/aceyducey.bas
* 注意:目的是在 Java 中创建 1970 年代 Basic 游戏的版本,而不引入
* 新功能 - 未添加额外的文本、错误检查等。
*/
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(A)为最高
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 新泽西州莫里斯敦");
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 中的具体区域。谢谢!