手记

Java入门第三季简易扑克牌游戏

package imooc.cardsplaying;

import java.util.ArrayList;
import java.util.List;

public class Cards {

//扑克牌的花色
private String type;
//扑克牌的数值
private String value;

public String getType() {
    return type;
}
public void setType(String type) {
    this.type = type;
}
public String getValue() {
    return value;
}
public void setValue(String value) {
    this.value = value;
}

//构造方法
public Cards(String value, String type){
    this.setType(type);
    this.setValue(value);
}
@Override
public String toString() {
    return type + " " + value;
}

}


package imooc.cardsplaying;

import java.util.ArrayList;
import java.util.List;

public class Player {

//用户ID
private int id;
//用户的名字
private String name;
//用于保存用户的卡片
List<Cards> playerCards;

public int getId() {
    return id;
}
public void setId(int id) {
    this.id = id;
}
public String getName() {   
    return name;
}
public void setName(String name) {
    this.name = name;
}

/**
 * @param id
 * @param name
 */
public Player(int id, String name){
    //在构造器中初始化泛型为Cards的List集合
    playerCards = new ArrayList<Cards>();
    setId(id);
    setName(name);
}

}


package imooc.cardsplaying;

import java.util.ArrayList;
import java.util.List;
import java.util.Random;
import java.util.Scanner;

public class CardsPlaying {
//创建扑克牌并将所有的扑克牌保存在ArrayList<Cards>中
public List<Cards> cards = new ArrayList<Cards>();
public static Player player1;
public static Player player2;
//将所有的花色type保存在String数组中
String[] types = {"黑桃", "红桃", "梅花", "方片"};
//将扑克牌中所有的数值value保存在char数组中
String[] values = {"2", "3", "4", "5", "6", "7", "8", "9",
"10", "J", "Q", "K", "A"};

public static void main(String[] args) {
    //创建对象
    CardsPlaying cardsPlay = new CardsPlaying();
    //创建扑克牌
    cardsPlay.createCards();
    //显示扑克牌(洗牌前)
    cardsPlay.showCards();
    //洗牌
    cardsPlay.shuffle();
    System.out.println("--------------------------洗牌后的卡片-----------------------------");
    //显示扑克牌(洗牌后)
    cardsPlay.showCards();
    System.out.println("请输入第一名玩家的ID和姓名:");
    player1 = createPlayer();
    System.out.println("请输入第二名玩家的ID和姓名:");
    player2 = createPlayer();
    System.out.println("欢迎玩家:" + player1.getId() + " " + player1.getName());
    System.out.println("欢迎玩家:" + player2.getId() + " " + player2.getName());
    cardsPlay.deal();
    cardsPlay.playing();
    System.out.println("玩家各自的手牌为:");

    //显示玩家一的手牌
    System.out.println(player1.getName() + ":" + player1.playerCards.toString());
    //显示玩家二的手牌
    System.out.println(player2.getName() + ":" + player2.playerCards.toString());
}

//开始游戏
public void playing(){
    System.out.println("--------------------------开始游戏--------------------------");
    //获取玩家一的playerCards中的较大的卡
    Cards player1MaxCards = getMaxCard(player1.playerCards.get(0), player1.playerCards.get(1));
    //显示玩家一的最大手牌
    System.out.println("玩家:" + player1.getName() + "最大的手牌为:"
            + player1MaxCards.getType() + " " + player1MaxCards.getValue());
    //获取玩家二的playerCards中的较大的卡
    Cards player2MaxCards = getMaxCard(player2.playerCards.get(0), player2.playerCards.get(1));
    //显示玩家二的最大手牌
    System.out.println("玩家:" + player2.getName() + "最大的手牌为:"
            + player2MaxCards.getType() + " " + player2MaxCards.getValue());
    //比较两个玩家的最大手牌
    Cards maxCard = getMaxCard(player1MaxCards, player2MaxCards);
    //查看最大手牌maxCard是哪个玩家的卡
    if(player1.playerCards.contains(maxCard))
    {
        System.out.println("--------------玩家:" + player1.getName() + "获胜!-----------------");
    }
    else
        System.out.println("--------------玩家:" + player2.getName() + "获胜!-----------------");
}

//取得牌value的最大那张牌
public Cards getMaxCard(Cards card1, Cards card2){
    //如果第一张卡的value值比第二张的大,九返回第一张卡
    if(getIndex(card1.getValue(), values) > getIndex(card2.getValue(), values)){
        return card1;
    }
    //如果两张卡的value值相同,则继续比较两张卡的type大小
    else if(getIndex(card1.getValue(), values) == getIndex(card2.getValue(), values)){
        if(getIndex(card1.getType(), types) > getIndex(card2.getType(), types))
        {
            return card1;
        }
        else
            return card2;
    }
    else
        return card2;
}

//通过数组元素获得数组的索引值
public int getIndex(String str, String[] arr){
    for(int i = 0; i < arr.length; i++){
        if(str==arr[i]){
            return i;
        }
    }
    //若没有找到就返回-1
    return -1;
}

    //发牌
    public void deal(){
        System.out.println("---------------------开始发牌-----------------------");
        System.out.println("-----玩家:" + player1.getName() + "-拿牌");
        player1.playerCards.add(cards.get(0));
        System.out.println("-----玩家:" + player2.getName() + "-拿牌");
        player2.playerCards.add(cards.get(1));
        System.out.println("-----玩家:" + player1.getName() + "-拿牌");
        player1.playerCards.add(cards.get(2));
        System.out.println("-----玩家:" + player2.getName() + "-拿牌");
        player2.playerCards.add(cards.get(3));
        System.out.println("---------------------发牌结束-----------------------");
    }

    //创建所有的扑克牌,并将它们保存在ArrayList集合中
    public void createCards(){
        System.out.println("---------------------创建扑克牌-------------------------");

        for(int i = 0; i < values.length; i++){
            for(int j = 0; j < types.length; j++){
                Cards newCard = new Cards(values[i], types[j]);
                cards.add(newCard);
            }
        }
        System.out.println("------------------扑克牌创建成功!----------------------");
    }

    //显示所有的扑克牌
    public void showCards(){
        Cards card;
        System.out.println("共有如下扑克牌:");
        for (int i = 0; i < cards.size(); i++) {
            System.out.print(cards.get(i).getType() + " " + cards.get(i).getValue() + " 、 ");
            if((i+1) % 4 == 0){
                System.out.println();
            }
        }
        System.out.println();
    }

//洗牌
public void shuffle(){
    System.out.println("----------------------开始洗牌----------------------");
    //共有几张牌就循环随机交换几次位置
    for(int i = 0; i < cards.size(); i++){
        Cards temp = cards.get(i);
        Random random = new Random();
        int index = random.nextInt(cards.size());
        cards.set(i, cards.get(index));
        cards.set(index, temp);
    }
    System.out.println("-------------------洗牌结束----------------------");
}

//创建玩家
public static Player createPlayer(){
    Scanner input = new Scanner(System.in);
    int id;
    while(true){
        try{
            System.out.println("输入ID:");
            id = input.nextInt();
            break;
        }
        catch(Exception e){
            input = new Scanner(System.in);
            System.out.println("输入有误,请重新输入数字!");
            continue;
        }
    }
    System.out.println("输入姓名:");
    String name = input.next();
    return new Player(id, name);
}

}


运行结果

---------------------创建扑克牌-------------------------
------------------扑克牌创建成功!----------------------
共有如下扑克牌:
黑桃 2 、 红桃 2 、 梅花 2 、 方片 2 、
黑桃 3 、 红桃 3 、 梅花 3 、 方片 3 、
黑桃 4 、 红桃 4 、 梅花 4 、 方片 4 、
黑桃 5 、 红桃 5 、 梅花 5 、 方片 5 、
黑桃 6 、 红桃 6 、 梅花 6 、 方片 6 、
黑桃 7 、 红桃 7 、 梅花 7 、 方片 7 、
黑桃 8 、 红桃 8 、 梅花 8 、 方片 8 、
黑桃 9 、 红桃 9 、 梅花 9 、 方片 9 、
黑桃 10 、 红桃 10 、 梅花 10 、 方片 10 、
黑桃 J 、 红桃 J 、 梅花 J 、 方片 J 、
黑桃 Q 、 红桃 Q 、 梅花 Q 、 方片 Q 、
黑桃 K 、 红桃 K 、 梅花 K 、 方片 K 、
黑桃 A 、 红桃 A 、 梅花 A 、 方片 A 、

----------------------开始洗牌----------------------
-------------------洗牌结束----------------------
--------------------------洗牌后的卡片-----------------------------
共有如下扑克牌:
方片 J 、 梅花 7 、 方片 10 、 方片 8 、
黑桃 4 、 方片 K 、 红桃 4 、 红桃 J 、
梅花 9 、 方片 6 、 黑桃 K 、 梅花 J 、
红桃 5 、 方片 9 、 红桃 6 、 红桃 Q 、
黑桃 8 、 方片 7 、 梅花 4 、 梅花 5 、
红桃 8 、 黑桃 6 、 梅花 6 、 梅花 A 、
黑桃 3 、 红桃 10 、 红桃 A 、 黑桃 A 、
方片 3 、 方片 2 、 梅花 3 、 梅花 10 、
黑桃 7 、 方片 A 、 黑桃 Q 、 黑桃 5 、
方片 Q 、 黑桃 J 、 红桃 7 、 红桃 9 、
方片 4 、 黑桃 9 、 红桃 3 、 黑桃 2 、
梅花 2 、 梅花 Q 、 方片 5 、 黑桃 10 、
红桃 K 、 梅花 8 、 梅花 K 、 红桃 2 、

请输入第一名玩家的ID和姓名:
输入ID:
1
输入姓名:
Tom
请输入第二名玩家的ID和姓名:
输入ID:
g
输入有误,请重新输入数字!
输入ID:
2
输入姓名:
Jack
欢迎玩家:1 Tom
欢迎玩家:2 Jack
---------------------开始发牌-----------------------
-----玩家:Tom-拿牌
-----玩家:Jack-拿牌
-----玩家:Tom-拿牌
-----玩家:Jack-拿牌
---------------------发牌结束-----------------------
--------------------------开始游戏--------------------------
玩家:Tom最大的手牌为:方片 J
玩家:Jack最大的手牌为:方片 8
--------------玩家:Tom获胜!-----------------
玩家各自的手牌为:
Tom:[方片 J, 方片 10]
Jack:[梅花 7, 方片 8]

1人推荐
随时随地看视频
慕课网APP