SCAU 发牌程序

发牌程序
题目类别: B作业

关键字: 掌握Java数组、方法的基本定义

内容要求:

  1. 编写程序,项目名和类名均为PokerGame。
  2. 实现功能:
    (1) 共有m幅扑克牌,每幅扑克牌不包括大王和小王共52张牌。
    (2) 可能有n个人参与扑克游戏,2<=n<=52。
    (3) 程序运行时输入扑克牌幅数m和人数n,然后所有牌分别依次分发给n个人。不能整除时,每个人的牌数可以不同,如3个人1幅牌,则第1个人18张,第2个和第3个人17张牌。
    (4) 发牌完成后按花色(顺序为黑桃、红心、草花、方块)和牌面大小输出每个人得到的牌。
    例如:

输入扑克牌幅数:1
输入人数:3
输出如下:

第1个人:
黑桃:K 10 5 A
红心:10 3 2
草花:K 10 8 6 3 A
方块:Q J 5 2
第2个人:

第3个人:

  1. 实现要求:
    (1) 使用数组存放发牌情况。
    (2) 编写不同方法完成不同功能。

该程序我写完后只是简单的测试了下,所以可能会有bug,但正常数据目前没有出问题

思路:
发牌程序无非就是将牌平均的发到每个人的手上,所以我们可以定义一个数组来存每个人被发到了什么牌。
一副扑克牌有52张牌,包括四种花色,则我们可以将给这52张牌分别给1-52序号,再定义1-13为黑桃,14-26为方块以此类推。这样每一张不同的牌都有各自独立的编号了。例如:10代表着黑桃10;14代表着方块A。
对牌定义好之后,我们需要将牌放进一个数组里面打乱,打乱有很多种方法,我采用的是,随机交换数组里面两个数的位置,交换52次基本上牌就很乱了。
最后再一张张发给不同的人直到牌发完为止,最后输出就好了。

package PokerGame;

import java.util.Arrays;
import java.util.Random;
import java.util.Scanner;

public class PokerGame {
    public static void main(String[] args) {
        Scanner cin = new Scanner(System.in);
        System.out.println("输入扑克牌幅数:");
        int Pokers = cin.nextInt();
        System.out.println("输入人数:");
        int peopleNum = cin.nextInt();
        int averageCards = (Pokers*52)/peopleNum+1;
        int[][] peopleCards;
        peopleCards = new int[peopleNum][averageCards];
        int totalCards = Pokers*52+1;
        int[] randomCards= new int[totalCards];
        for(int i=0;i<Pokers*52+1;i++){
            randomCards[i]=i+1;
        }

        int temp1,temp2,temp3;
        Random r = new Random();

        //随机交换randomCards.length次   
        for(int i = 0;i < randomCards.length;i++){
            temp1 = Math.abs(r.nextInt()) % (randomCards.length-1); //随机产生一个位置   
            temp2 = Math.abs(r.nextInt()) % (randomCards.length-1); //随机产生另一个位置   

            if(temp1 != temp2){
                temp3 = randomCards[temp1];
                randomCards[temp1] = randomCards[temp2];
                randomCards[temp2] = temp3;
            }
        }
        //System.out.println(Arrays.toString(randomCards));
        //System.out.println(randomCards[0]);

        int counts=0;
        int currentCards = 0;
        while(counts<=Pokers*52-1){
            for(int i=0;i<peopleNum;i++){
                peopleCards[i][currentCards] = randomCards[counts];
                counts+=1;
             //   System.out.println(counts);
                if(counts == Pokers*52)break;
            }
            currentCards +=1;
        }

        for(int k= 0; k<peopleNum;k++){
            Arrays.sort(peopleCards[k]);
        }

//        for(int k= 0; k<peopleNum;k++){
//            System.out.println(Arrays.toString(peopleCards[k]));
//        }

        for (int k= 0; k<peopleNum;k++){
            int w=k+1;
            System.out.println("第"+w+"个人:");
            System.out.print("黑桃:");
            for(int i=0; i<averageCards;i++){
                if((peopleCards[k][i]%52)<=13&&peopleCards[k][i]!=0&&(peopleCards[k][i]%52)!=0){
                    if((peopleCards[k][i]%52)==1) System.out.print("A ");
                    else if((peopleCards[k][i]%52)==11) System.out.print("J ");
                    else if((peopleCards[k][i]%52)==12) System.out.print("Q ");
                    else if((peopleCards[k][i]%52)==13) System.out.print("K ");
                    else System.out.print(peopleCards[k][i]%13+" ");
                }
            }
            System.out.println();

            System.out.print("红心:");
            for(int i=0; i<averageCards;i++){
                if((peopleCards[k][i]%52)<=26&&peopleCards[k][i]!=0&&(peopleCards[k][i]%52)!=0&&(peopleCards[k][i]%52)>13){
                    if((peopleCards[k][i]%52)==14) System.out.print("A ");
                    else if((peopleCards[k][i]%52)==24) System.out.print("J ");
                    else if((peopleCards[k][i]%52)==25) System.out.print("Q ");
                    else if((peopleCards[k][i]%52)==26) System.out.print("K ");
                    else System.out.print(peopleCards[k][i]%13+" ");
                }
            }
            System.out.println();

            System.out.print("草花:");
            for(int i=0; i<averageCards;i++){
                if((peopleCards[k][i]%52)<=39&&peopleCards[k][i]!=0&&(peopleCards[k][i]%52)!=0&&(peopleCards[k][i]%52)>26){
                    if((peopleCards[k][i]%52)==27) System.out.print("A ");
                    else if((peopleCards[k][i]%52)==37) System.out.print("J ");
                    else if((peopleCards[k][i]%52)==38) System.out.print("Q ");
                    else if((peopleCards[k][i]%52)==39) System.out.print("K ");
                    else System.out.print(peopleCards[k][i]%13+" ");
                }
            }
            System.out.println();

            System.out.print("方块:");
            for(int i=0; i<averageCards;i++){
                if(peopleCards[k][i]!=0&&(peopleCards[k][i]%52)>39){
                    if((peopleCards[k][i]%52)==40) System.out.print("A ");
                    else if((peopleCards[k][i]%52)==50) System.out.print("J ");
                    else if((peopleCards[k][i]%52)==51) System.out.print("Q ");
                    else if((peopleCards[k][i]%52)==0) System.out.print("K ");
                    else System.out.print(peopleCards[k][i]%13+" ");
                }
            }
            System.out.println();

        }

    }
}
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值