weixin_慕仙1144841
2019-09-10 15:58
package day42.TestDrive;
import java.util.*;
public class PlayingCard {
public static void main(String[] args){
//创建一副新扑克牌
System.out.println("-------开始创建扑克牌!---------------");
Poker poker = new Poker();
List<Poker> p = poker.CreatAPoker();
System.out.println("-------创建扑克牌成功!---------------");
System.out.println("------------开始洗牌------------");
Collections.shuffle(p);//洗牌
System.out.println("------------洗牌结束!-----------------");
System.out.println("------------创建玩家-------------------");
Player player = new Player();
List<Player> players = player.creatPlayer();
//开始发牌
PlayingCard pc = new PlayingCard();
pc.deal(players, p);
}
//发牌给玩家
public void deal(List<Player> pl, List<Poker> po) {
System.out.println("开始发牌");
List<Integer> numList = new ArrayList<Integer>();
List<Poker> pokerList = new ArrayList<Poker>();
List<String> aStr = new ArrayList<String>();//a玩家拿的牌
List<String> bStr = new ArrayList<String>();//b玩家拿的牌
List<Integer> aNum = new ArrayList<Integer>();//a玩家拿的牌转为点数大小
List<Integer> bNum = new ArrayList<Integer>();//b玩家拿的牌转为点数大小
//轮流各自发两张牌
Random random = new Random();
for(int i = 0; i < pl.size() * 2; i++) {
int num = random.nextInt(po.size());
do {
pokerList.add(po.get(num));
}while(pokerList.size() != new HashSet<Poker>(pokerList).size());
}
//牌的牌名List
for(int i = 0; i < pokerList.size(); i++) {
if(i % 2 == 0) {
System.out.println("【 "+pl.get(0).getPlayerName()+"拿一张! 】");
aStr.add(pokerList.get(i).suit + pokerList.get(i).point);
}else {
System.out.println("【 "+pl.get(1).getPlayerName()+"拿一张! 】");
bStr.add(pokerList.get(i).suit + pokerList.get(i).point);
}
}
//打印出玩家各自手中的牌
System.out.println("***>>> "+pl.get(0).getPlayerName()+" 的牌是"+aStr);
System.out.println("***>>> "+pl.get(1).getPlayerName()+" 的牌是"+bStr);
Poker poker = new Poker();
for(int i = 0; i < pokerList.size(); i++) {
int num = poker.numTransformation(pokerList.get(i));
poker.pokerNum.add(num);
}
//将玩家手里的牌列出最大值
Collections.sort(poker.pokerNum);
int maxPokerNum = poker.pokerNum.get(poker.pokerNum.size()-1);
//牌的点数List
for(int i = 0; i < pokerList.size(); i++) {
if(i % 2 == 0) {
aNum.add(poker.numTransformation(pokerList.get(i)));
}else {
bNum.add(poker.numTransformation(pokerList.get(i)));
}
}
//判断两个人谁手里的牌最大
if(aNum.contains(maxPokerNum)) {
System.out.println("***>>> "+pl.get(0).getPlayerName()+" 赢了!"+" <<<***");
}else if(aNum.contains(maxPokerNum)) {
System.out.println("***>>> "+pl.get(1).getPlayerName()+" 赢了!"+" <<<***");
}
}
}
//创建玩家类
class Player{
private String playerName;//玩家名字
private int playerId;//玩家ID
public List<String> hand = new ArrayList<String>();//手牌:扑克牌的集合
public Player() {
}
//Player的含参构造方法
public Player(String playerName, int playerId) {
this.playerName = playerName;
this.playerId = playerId;
}
public String getPlayerName() {
return playerName;
}
public void setPlayerName(String playerName) {
this.playerName = playerName;
}
public int getPlayerId() {
return playerId;
}
public void setPlayerId(int playerId) {
this.playerId = playerId;
}
@Override
public String toString() {
return "Player [playerName=" + playerName + ", playerId=" + playerId + "]";
}
//创建玩家名片
public List<Player> creatPlayer() {
//创建两名玩家
Player player1 = new Player();
Player player2 = new Player();
List<Player> playerList = new ArrayList<Player>();
Player[] players = {player1, player2};
Scanner input = new Scanner(System.in);
int i = 1;
for(Player pl:players ) {
System.out.println("请输入第"+i+"位玩家的姓名:>>>");
pl.setPlayerName(input.next());
for(int j = 0; j < 3; j++) {
try{
System.out.println("请输入第"+i+"位玩家的ID:>>>");
pl.setPlayerId(input.nextInt());
break;
}catch(Exception ex) {
input = new Scanner(System.in);//阻止无限循环
System.out.println("请输入整数ID!");
}
}
i++;
playerList.add(pl);
}
for(Player pl1:players) {
System.out.println("------欢迎玩家:"+pl1.getPlayerName());
}
return playerList;
}
}
//创建扑克类
class Poker{
public String suit;
public String point;
public String[] suitArray = {"方块", "梅花", "红桃", "黑桃"};//花色
public String[] pointArray = {"3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K", "A", "2"};//点数
public List<String> p = new ArrayList<String>();//打印扑克
public List<Poker> poker = new ArrayList<Poker>();//一副扑克
public List<Integer> pokerNum = new ArrayList<Integer>();//每张牌对象的集合
//Poker的构造方法
public Poker() {
}
public Poker(String suit, String point) {
this.suit = suit;
this.point = point;
}
//创建一副扑克
public List<Poker> CreatAPoker() {
for(int j = 0; j < pointArray.length; j++) {
for(int i = 0; i < suitArray.length; i++) {
Poker pn = new Poker(suitArray[i], pointArray[j]);
poker.add(pn);
}
}
for(int i = 0; i < poker.size(); i++) {//String型的是通过Poker来的
String sb = poker.get(i).suit+poker.get(i).point;
p.add(sb);
}
for(int i = 0; i < poker.size(); i++) {//Integer型的也是通过Poker来的
pokerNum.add(numTransformation(poker.get(i)));
}
//打印出一副新建的扑克牌
System.out.println(p);//poker是String类型所以可以打印出来?
return poker;
}
//点数转换数字比大小
public int numTransformation(Poker c) {
//花权值
int ps = 0;
if(c.suit == "方块") {
ps = 1;
}else if(c.suit == "梅花"){
ps = 2;
}else if(c.suit == "红桃") {
ps = 3;
}else if(c.suit == "黑桃") {
ps = 4;
}
//牌权值
int pp = 0;
if(c.point == "J") {
pp = 11;
}else if(c.point == "Q") {
pp = 12;
}else if(c.point == "K") {
pp = 13;
}else if(c.point == "A") {
pp = 12;
}else if(c.point == "2") {
pp = 13;
}else {
pp = Integer.parseInt(c.point);//数字型字符串转换成数字
}
return pp * 10 + ps;
}
}
private void createPlayers(){
int id;
int limit=1;
System.out.println("-------------创建玩家...--------------");
for (int i = 0; i < 2; i++) {
System.out.println("请输入第"+(i+1)+"位玩家的ID和姓名:");
while(true){
try{
System.out.println("输入ID:");
//每次循环都需要重新new一个Scanner对象
console=new Scanner(System.in);
id=console.nextInt();
break;
}catch(InputMismatchException e){
if(limit<3){
System.out.println("请输入整数类型的ID!");
limit++;
}else{
System.out.println("账户被锁死,无法输入,游戏结束!");
System.exit(1);
}
}
}
System.out.println("输入姓名");
String name=console.next();
players.put(i, new Player(id,name));
}
我输入用户名和ID的时候,不知道怎么设置输错三次就重新就跳出重新输入用户名id,我直接ID输错3次后,不管对不对就直接进入下一段代码了,你们有谁知道怎么写吗
Java入门第三季
409792 学习 · 4340 问题
相似问题