java 小项目:简单扑克牌游戏

24 篇文章 0 订阅

项目要求
1>新建两个玩家
2>创建扑克牌,洗牌
3>发牌,每个玩家没人拿两张,比较大小
4>比较规则:两个玩家选出各种最大的牌,进行游戏,先比较点数大小,点数大的获胜,点数相同则比较花色:黑桃>红心>梅花>方块
5>输出要求:结束时分别输出玩家的手牌情况。

运行结果截图:
这里写图片描述

Java源码:
Card类:

package com.card;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Random;

public class Card {
    private String number;
    private String color;

    /**
     * Create a pair of new cards
     * @return
     */
    public ArrayList<Card> createCard(){
        String[] carNumber = new String[]{"A","2","3","4","5","6","7","8","9","10","J","Q","K"};
        String[] carColor = new String[]{"方块","红心","梅花","黑桃"};
        ArrayList<Card> newCards = new ArrayList<Card>();

        //Create a pair of new cards
        for(int i = 0;i < carColor.length;i ++){
            for(int j = 0;j < carNumber.length;j ++){
            //  card.id = i;
                Card card = new Card();
                card.color = carColor[i];
                card.number = carNumber[j];
                newCards.add(card);
            }
        }
        return newCards;
    }

    /**
     * show the new cards
     * @return
     */
    public String[] getNewCards(){
        String[] newCardGroup = new String[createCard().size()];
        for(int i = 0;i < createCard().size();i ++){
            newCardGroup[i] =  createCard().get(i).color +createCard().get(i).number ;
        }
        return newCardGroup;
    }

    /**
     * Create random cards
     * @return
     */
    public String[] RandomCard(){
        Random random = new Random();
        String[] cardsArray = getNewCards();
        String swapCard = null;
        for(int i = 0;i < cardsArray.length;i ++){
            int index = random.nextInt(cardsArray.length);
            swapCard = cardsArray[i];
            cardsArray[i] = cardsArray[index];
            cardsArray[index] = swapCard;

        }
        return cardsArray;
    }
}

Game类:

package com.game;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.Map;
import java.util.Random;
import java.util.Scanner;

import com.card.Card;
import com.player.Player;

public class Game {
    public static void main(String[] args) {
        // Create new Card class
        Card card = new Card(); 
        Player[] player = new Player[2];

        Scanner input = new Scanner(System.in);
        System.out.println("**********开始创建扑克牌**********");
        System.out.println("**********扑克牌创建成功**********");
        System.out.println(Arrays.toString(card.getNewCards()));
        System.out.println("**********开始洗牌**********");
        String[] cardsRandom = card.RandomCard();
        System.out.println("**********洗牌结束**********");
        System.out.println("**********创建玩家**********");

        //Create players
        for(int i = 0; i < player.length;i ++){
            System.out.println("请输入第" + (i+1) + "玩家的ID和姓名");
            System.out.println("请输入ID:");
            int id = input.nextInt();
            System.out.println("请输入姓名:");
            String name = input.next();
            Player player1 = new Player(id,name);
            player[i] = player1;
        }


        //Show players' name
        for(int i = 0;i < player.length;i ++)
            System.out.println("*****欢迎玩家:" + player[i].getName());

        System.out.println("**********开始发牌**********");
        Random random = new Random();
        int index;
        for(int i = 0;i < 4;i ++){
            System.out.println("*****玩家: " + player[i % 2].getName() + " 拿牌");
            index = random.nextInt(cardsRandom.length);
            player[i % 2].setCardInfo(cardsRandom[index]);
        }

        System.out.println("**********发牌结束**********");
        System.out.println("**********开始游戏**********");

        String[] cardsComp = new String[2];
        for(int i = 0;i < player.length;i ++){
            cardsComp[i] = player[i].maxCard();
            System.out.println("玩家:" + player[i].getName() + "最大的手牌为: " + player[i].maxCard());
        }

        int result  = maxCard(cardsComp);

        if(result == 1)
            System.out.println("********玩家 " + player[0].getName() + "获胜");
        else if(result == -1)
            System.out.println("********玩家 " + player[1].getName() + "获胜");
        else
            System.out.println("********玩家 " + player[1].getName() + "和玩家 " + "手牌一样大,没有输赢");

        System.out.println("**********玩家的手牌为:");
        for(int i = 0;i < player.length;i ++)
            System.out.println(player[i].getName() + ":[ " + player[i].getCardInfo().get(0) + " , "+ player[i].getCardInfo().get(1) + " ]");



    }

    public static int maxCard(String[] cards){
        Map<String, Integer> cardCompare = new HashMap<String, Integer>();
        cardCompare.put("梅花", 4);
        cardCompare.put("黑桃", 3);
        cardCompare.put("红心", 2);
        cardCompare.put("方片", 1);

        int winer;
        int a = 0;
        int b = 0;

        a = transfer(cards[0]);
        b = transfer(cards[1]);

        if(a > b)
            winer = 1;
        else if(a < b)
            winer = -1;
        else{
            String card1 = cards[0].substring(0,2);
            String card2 = cards[1].substring(0,2);

            if(cardCompare.get(card1) > cardCompare.get(card2))
                winer = 1;
            else if(cardCompare.get(card1) < cardCompare.get(card2))
                winer = -1;
            else
                winer = 0;
        }
        return winer;
    }

    public static int transfer(String str){
        int a = 0;
        if(str.substring(2).equals("J"))
            a = 11;
        else if(str.substring(2).equals("Q"))
            a = 12;
        else if(str.substring(2).equals("K"))
            a = 13;
        else if(str.substring(2).equals("A"))
            a = 1;
        else
            a = Integer.parseInt(str.substring(2));
        return a;

    }

}

Player类:

package com.player;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;

public class Player {
    private int id;
    private String name;
    ArrayList<String> cardInfo = new ArrayList<String>();
    public Player(int id, String name){
        this.id = id;
        this.name = name;
    }

    public ArrayList<String> getCardInfo() {
        return cardInfo;
    }

    public void setCardInfo(String cardInfo) {
        this.cardInfo.add(cardInfo);
    }

    public String maxCard(){
        Map<String, Integer> cardCompare = new HashMap<String, Integer>();
        cardCompare.put("梅花", 4);
        cardCompare.put("黑桃", 3);
        cardCompare.put("红心", 2);
        cardCompare.put("方片", 1);

        ArrayList<String> cards = getCardInfo();
        String maxCard = null;
        int a ;
        int b ;

        a = transfer(cards.get(0));
        b = transfer(cards.get(1));

        if(a > b)
            maxCard = cards.get(0);
        else if(a < b)
            maxCard = cards.get(1);

        else{
            String card1 = cards.get(0).substring(0,2);
            String card2 = cards.get(1).substring(0,2);

            if(cardCompare.get(card1) > cardCompare.get(card2))
                maxCard = cards.get(0);
            else if(cardCompare.get(card1) < cardCompare.get(card2))
                maxCard = cards.get(1);
            else
                maxCard = cards.get(0);
        }
        return maxCard;
    }

    public int transfer(String str){
        int a;
        if(str.substring(2).equals("J"))
            a = 11;
        else if(str.substring(2).equals("Q"))
            a = 12;
        else if(str.substring(2).equals("K"))
            a = 13;
        else if(str.substring(2).equals("A"))
            a = 1;
        else
            a = Integer.parseInt(str.substring(2));
        return a;

    }
    public String getName() {
        return name;
    }
}

体会:主要应用Java泛型解决,使用Random类和泛型生成随机扑克牌以及实现随机发牌以及手牌比较

项目源码:https://github.com/gannyee/Easy-Game-Cards-Compare

  • 9
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值