- package Cheman;
- public class PlayPai{
- public static void main (String[] args){
- new Poker();
- }
- }
- class Poker{
- public int pai[][]=new int[13][4];//创建一个二维数组,第一维存放点数第二维存放花色
- public Poker(){ //构造方法
- this.JianPai();
- this.XiPai();
- this.FaPai();
- }
- public void JianPai(){ //建牌,使用二重循环从1-52对二维数组共52个变量赋值
- int count=1;
- for(int i=0;i<=12;i++){
- for(int j=0;j<=3;j++){
- pai[i][j]=count;
- count++;
- }
- }
- System.out.println("建牌完毕……");
- }
- public void XiPai(){ //每次随机出2张牌 pai[row1][col1],pai[row2][col2],如果不相等则互换,循环200次
- double a,b;
- int row1,col1,row2,col2,i;
- int zhongjianshu;
- for(i=1;i<=200;i++){
- a=Math.random()*13;
- row1=(int)(a); //row1,row2范围从0-12
- b=Math.random()*4;
- col1=(int)(b); //col1,col2范围从0-3
- a=Math.random()*13;
- row2=(int)(a);
- b=Math.random()*4;
- col2=(int)(b);
- if(row1!=row2||col1!=col2){ //两变量互换
- zhongjianshu=pai[row1][col1];
- pai[row1][col1]=pai[row2][col2];
- pai[row2][col2]=zhongjianshu;
- }
- }
- System.out.println("洗牌完毕……");
- }
- public void FaPai(){ //发牌:1.对各玩家手中的牌进行大小排序 2.将排序好的牌发出并转换成中文名
- int wanjia[][]=new int[4][13]; //创建一个4行13列二维数组,每一行存放每个玩家的13张牌,并按大小排序
- int i,j,z,min;
- for(i=0;i<4;i++){//原来的二维数组pai[][]赋值给wanjia[][]
- for(j=0;j<13;j++){
- wanjia[i][j]=pai[j][i];
- }
- }
- //用选择排序法对各个玩家的牌进行升序排序
- for(i=0;i<4;i++){
- for(j=0;j<13;j++){
- min=wanjia[i][j];
- for(z=j+1;z<13;z++){
- if(wanjia[i][z]<min){
- min=wanjia[i][z];
- wanjia[i][z]=wanjia[i][j];
- wanjia[i][j]=min;
- }
- }
- }
- }
- //开始发牌并转换成中文名
- int yushu;//余数
- int shang;//商
- int save[]=new int[8];//一维数组,存放A,2,使其能在3-K牌输出后再输出
- int count;//存放一维数组save变量数
- for(i=0;i<4;i++){
- count=0;
- System.out.print("玩家"+(i+1)+":");
- for(j=0;j<13;j++){
- yushu=(wanjia[i][j])%4;
- shang=((wanjia[i][j]-1)/4);
- if(shang==0||shang==1){ //如果要输出的牌色为A或2,则将其存入save数组中,待3-K输出后再输出
- save[count]=wanjia[i][j];
- count++;
- continue;
- }
- switch(yushu){ //检验花色
- case 0:System.out.print("方块");break;
- case 1:System.out.print("梅花");break;
- case 2:System.out.print("红桃");break;
- case 3:System.out.print("黑桃");break;
- }
- switch(shang){ //检验点数
- case 0:System.out.print("A ");break;
- case 10:System.out.print("J ");break;
- case 11:System.out.print("Q ");break;
- case 12:System.out.print("K ");break;
- default:System.out.print((shang+1)+" ");
- }
- }
- //输出save数组,把A和2牌输出
- for(j=0;j<count;j++){
- yushu=(save[j])%4;
- shang=((save[j]-1)/4);
- switch(yushu){
- case 0:System.out.print("方块");break;
- case 1:System.out.print("梅花");break;
- case 2:System.out.print("红桃");break;
- case 3:System.out.print("黑桃");break;
- }
- if(shang==0)
- System.out.print("A ");
- else
- System.out.print((shang+1)+" ");
- }
- System.out.println();
- }
- }
- }
- //该片段来自于http://www.codesnippet.cn/detail/290720134860.html
来源: http://www.codesnippet.cn/detail/290720134860.html