问题描述
这是我的课程设计题目:2.模拟人工洗牌编写一个模拟人工洗牌的程序,将洗好的牌分别发给四个人。使用结构card来描述一张牌,用随机方法来模拟人工洗牌的过程,最后将洗好的52张牌顺序分别发给四个人。设计要求:1)要求使用java类包中的Math.Random()方法进行随机处理。2)要求在dos控制台窗口中显示每个人手上的扑克牌3)要求将每个人手上的13张牌按照四种花色,从小到大排列整齐后显示出来。*4)可以设计成图形用户界面,通过按钮进行洗牌、发牌的动作,并按上面的要求显示东西南北四个人手上的牌型。下面是我写的代码:界面可以运行,但是关于事件处理的部分可能没写对,所以没办法发牌,请大家指教一下,谢谢!packageinterfacedesign;importjava.awt.*;importjava.awt.event.ActionEvent;importjava.awt.event.ActionListener;importjavax.swing.*;publicclassPokerextendsJFrameimplementsActionListener{JPanel[]jpane=newJPanel[5];//玩家1JButton[]btn1=newJButton[13];//玩家2JButton[]btn2=newJButton[13];//玩家3JButton[]btn3=newJButton[13];//玩家4JButton[]btn4=newJButton[13];JButtonjButton1=newJButton("洗牌");JButtonjButton2=newJButton("发牌");Cardcard=newCard();publicPoker(){super("扑克游戏界面");//设置方位布局this.getContentPane().setLayout(newBorderLayout(100,100));//初始化玩家for(inti=0;i<13;i++){btn1[i]=newJButton();btn2[i]=newJButton();btn3[i]=newJButton();btn4[i]=newJButton();}//初始化中间容器for(intj=0;j<5;j++){jpane[j]=newJPanel();}jpane[0].setLayout(newBoxLayout(jpane[0],BoxLayout.X_AXIS));jpane[1].setLayout(newBoxLayout(jpane[1],BoxLayout.X_AXIS));jpane[2].setLayout(newBoxLayout(jpane[2],BoxLayout.Y_AXIS));jpane[3].setLayout(newBoxLayout(jpane[3],BoxLayout.Y_AXIS));jpane[4].setLayout(newGridLayout(1,2,20,20));for(inti=0;i<13;i++){jpane[0].add(btn1[i]);jpane[1].add(btn2[i]);jpane[2].add(btn3[i]);jpane[3].add(btn4[i]);}jpane[4].add(jButton1);jpane[4].add(jButton2);this.getContentPane().add(jpane[0],BorderLayout.SOUTH);this.getContentPane().add(jpane[1],BorderLayout.NORTH);this.getContentPane().add(jpane[2],BorderLayout.EAST);this.getContentPane().add(jpane[3],BorderLayout.WEST);this.getContentPane().add(jpane[4],BorderLayout.CENTER);jButton1.addActionListener(this);jButton2.addActionListener(this);}publicstaticvoidmain(String[]args){Pokerp=newPoker();p.setSize(450,400);p.setVisible(true);p.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);}@OverridepublicvoidactionPerformed(ActionEvente){card.xipai();}publicvoidactionPerformed1(ActionEvente){intk=0;for(inti=0;i<13;i++)for(intj=0;j<4;j++){k=k+j;btn1[i].setText(card.player[k]);btn2[i].setText(card.player[k]);btn3[i].setText(card.player[k]);btn4[i].setText(card.player[k]);k=k+1;}}}//////////////////////////////////////////////////////////////////////////这部分是初始化扑克牌和洗牌的代码:packageinterfacedesign;importjava.util.Random;publicclassCard{privateinthang=4,lie=13,volume=hang*lie;publicString[]player=newString[volume];publicCard(){for(inti=0;i<volume;i++){switch(i/lie){case0:player[i]="红桃";break;case1:player[i]="黑桃";break;case2:player[i]="方片";break;case3:player[i]="草花";break;}switch(i%lie){case0:player[i]+='A';break;case10:player[i]+='J';break;case11:player[i]+='Q';break;case12:player[i]+='K';break;default:player[i]+=(i%13+1);break;}}}publicvoidxipai(){Stringt="";inta=0,b=0;Randomr=newRandom();for(inti=0;i<volume;i++){a=Math.abs(r.nextInt())%volume;b=Math.abs(r.nextInt())%volume;t=player[a];player[a]=player[b];player[b]=t;}}}