自己写了一个JAVA的简单扑克牌小游戏

记录一下,自学两个星期JAVA写了个简单的程序。

但是对List和Set掌握还是不是很好,希望大神能指导一下程序如何简化。

//Game 主体

package com.Garry;

 

import java.util.Scanner;

 

public class Game {

 

 

//创建玩家;

public void CreatePlayer(){

Scanner sr=new Scanner(System.in);

Player player1 = new Player(null);

player1.player_name=sr.next();

//将player1添加到Player中;

Player p = new Player(player1.player_name);

System.out.println("~~~~~~欢迎 "+player1.player_name+"~~~~~~~~~");

}

 

 

public static void main(String[] args) {

 

// TODO Auto-generated method stub

System.out.println("欢迎来到Garry的扑克牌小游戏!");

System.out.println("游戏规则如下: ");

System.out.println("扑克牌四种花色,去除大小王,双方玩家轮流随机获得牌,最终通过比较玩家手中最大牌判断胜负。");

System.out.println("注:若双方玩家点数一致,则按照花色:黑桃>梅花>红心>方块判断胜负。");

System.out.println("====================开始游戏======================");

System.out.println("请创建玩家1,输入玩家姓名:");

Game player_1=new Game();

player_1.CreatePlayer();

System.out.println("请创建玩家2,输入玩家姓名:");

Game player_2=new Game();

player_2.CreatePlayer();

System.out.println("正在准备扑克牌~~~洗牌中------------------");

System.out.println("洗牌完毕,现在开始发牌");

PokerForPlayer p=new PokerForPlayer();

String p1_card1=p.addPoker(); // Player1_card1;

String p2_card1=p.addPoker(); 

String p1_card2=p.addPoker(); // Player1_card2;

String p2_card2=p.addPoker(); 

//发牌过程中牌不能重复;

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

 

System.out.println("玩家1的卡片有:"+p1_card1+","+p1_card2);

System.out.println("玩家2的卡片有:"+p2_card1+","+p2_card2);

String max_1 =p.Max_card(p1_card1, p1_card2);

System.out.println("玩家1最大的牌是:"+max_1);

String max_2 =p.Max_card(p2_card1, p2_card2);

System.out.println("玩家2最大的牌是:"+max_2);

System.out.println("****************双方开始比较*****************");

p.Winner(max_1, max_2);

System.out.println("游戏结束啦!");

}

 

}

 

//保存玩家类

package com.Garry;

import java.util.HashSet;
import java.util.Set;

public class Player {
    public String player_name; //玩家昵称
    public Set<Poker> pokers;  //玩家拥有的卡片; 卡片不重复,用HashSet即可。
    public Player(String name){
        this.player_name=name;
        this.pokers=new HashSet<Poker>();
    }
    
    

}

 

package com.Garry;

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

//发牌给玩家
public class PokerForPlayer {
    public List<Poker> PokerToPlayer;
    
    public PokerForPlayer(){
        //初始化PokerToPlayer
        this.PokerToPlayer=new ArrayList<Poker>();
    }
    //随机添加一张牌给玩家;
    public String addPoker(){
        Random random = new Random();
        Poker p_card = new Poker(null);
        String card= p_card.Pokersuit[random.nextInt(53)];
        Poker pcard = new Poker(card);
        PokerToPlayer.add(pcard);
        //牌不能重复,取出以后要避免; HashSet();
        return card;
    }
    //输出玩家的卡片
    public void DesplayCards(){
        PokerForPlayer p =new PokerForPlayer();
            System.out.println(p.addPoker());    
        
    }
    
    //比较玩家手中的最大牌;
    public String Max_card(String card_1, String card_2){
        /**
         * 1.优先比较数字,大的胜利,
         * 2.数字一样比较花色,♠>♣>♥>♦
         */
        char [] poker1 = card_1.toCharArray(); 
        char [] poker2 = card_2.toCharArray(); 
            if(poker1[2] == poker2[2])
            {
                //数字一样比较花色;
                if(poker1[0]=='黑')
                    return card_1;
                else if(poker1[0]=='梅' && poker2[0]!='黑' && poker2[0]!='梅')
                    return card_1;
                else if(poker1[0]=='红'&& poker2[0]=='方')
                    return card_1;
                else if(poker1[0]=='方' && poker2[0]!='方')
                    return card_2;
                else
                    return card_2;
            }
            if(poker1[2] > poker2[2])
                return card_1;
            if(poker1[2] < poker2[2])
                return card_2;
            else 
                return null;
        

    }
    //Win
    public void Winner(String maxcard1,String maxcard2){
        String winner = null;
        PokerForPlayer pfp = new PokerForPlayer();
        winner = pfp.Max_card(maxcard1, maxcard2);
        if( winner.equals(maxcard1))
        System.out.println("玩家1获胜");
        else
            System.out.println("玩家2获胜");
        
        
    }

    
}
 

好的,以下是一个简单扑克牌比大小游戏Java 代码: ```java import java.util.ArrayList; import java.util.Collections; import java.util.List; import java.util.Scanner; public class PokerGame { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); System.out.print("请输入玩家数量:"); int playerCount = scanner.nextInt(); scanner.nextLine(); // 读取换行符 List<String> deck = generateDeck(); Collections.shuffle(deck); // 洗牌 List<List<String>> players = new ArrayList<>(); for (int i = 0; i < playerCount; i++) { players.add(new ArrayList<>()); } for (int i = 0; i < 5; i++) { for (int j = 0; j < playerCount; j++) { String card = deck.remove(0); players.get(j).add(card); } } for (int i = 0; i < playerCount; i++) { System.out.printf("玩家%d的牌为:%s\n", i + 1, players.get(i)); } int maxScore = 0; int winner = -1; for (int i = 0; i < playerCount; i++) { int score = calculateScore(players.get(i)); System.out.printf("玩家%d的得分为:%d\n", i + 1, score); if (score > maxScore) { maxScore = score; winner = i; } } System.out.printf("玩家%d获胜!\n", winner + 1); } private static List<String> generateDeck() { List<String> deck = new ArrayList<>(); String[] suits = {"♠️", "♥️", "♣️", "♦️"}; String[] ranks = {"2", "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K", "A"}; for (String suit : suits) { for (String rank : ranks) { deck.add(rank + suit); } } return deck; } private static int calculateScore(List<String> hand) { int score = 0; for (String card : hand) { String rank = card.substring(0, card.length() - 1); switch (rank) { case "J": case "Q": case "K": score += 10; break; case "A": score += 11; break; default: score += Integer.parseInt(rank); } } return score; } } ``` 运行程序后,首先要输入玩家数量,然后程序自动洗牌、发牌、计算得分和比较大小,最后输出获胜玩家。每个玩家的牌和得分也会被输出。 这个简单扑克牌比大小游戏只考虑了单张牌的大小,没有考虑花色和牌型等因素。如果需要更加复杂的游戏规则,可以在此基础上进行扩展。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值