Java通过Scanner输入玩家数实现扑克牌发牌功能求助
解决方案
你已完成的牌组生成、洗牌逻辑无需调整,只需替换最后遍历打印整副牌的代码,新增轮转发牌逻辑即可实现需求。核心发牌逻辑为:洗好的牌按顺序逐张发放,第i张牌(从0开始计数)发给i % 玩家数量对应的玩家,即可实现你要求的轮流发牌效果。
完整修改后代码
import java.util.Scanner; import java.util.ArrayList; import java.util.List; public class main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); System.out.println("Please Input how many players there are"); int player = sc.nextInt(); // 可选新增:限制玩家数1-52,避免出现玩家数大于牌数有玩家拿不到牌的情况 if (player > 0 && player <=52) { // 调整花色、点数命名和你示例输出保持一致 String[] type = {"Spade-", "Heart-", "Diamond-", "Club-"} ; String[] rank = {"A", "2", "3", "4", "5", "6", "7", "8", "9", "10", "Jack", "Queen", "King"}; String[] cset = new String[52]; for (int i = 0; i < cset.length; i++) { cset[i] = type[i/13] + rank[i%13]; } // 原有洗牌逻辑保留 for (int i = 0; i < cset.length; i++) { int index = (int) (Math.random() * cset.length); String temp = cset[i]; cset[i] = cset[index]; cset[index] = temp; } // 初始化每个玩家的手牌存储列表(如果需要后续单独使用玩家手牌可保留,不需要可以删除) List<String>[] playerHands = new List[player]; for (int i = 0; i < player; i++) { playerHands[i] = new ArrayList<>(); } // 替换原有打印整副牌的逻辑,改为发牌输出 for (int i = 0; i < cset.length; i++) { int currentPlayerNum = (i % player) + 1; // 处理玩家序号后缀 String suffix; switch (currentPlayerNum) { case 1: suffix = "st"; break; case 2: suffix = "nd"; break; case 3: suffix = "rd"; break; default: suffix = "th"; } // 发牌存入对应玩家手牌 playerHands[i % player].add(cset[i]); // 格式化输出,牌面左对齐占12位,和示例效果一致 System.out.printf("%-12s%d%s player%n", cset[i], currentPlayerNum, suffix); } } else { System.out.println("Please input a correct number of player/s (1-52)"); } sc.close(); } }
内容的提问来源于stack exchange,提问作者user17204708
相关产品推荐
相关产品推荐

