日期:2014-05-20  浏览次数:20690 次

一点疑问,有关线程中的类

1、 有一副扑克牌(52张),发到4个人手中,
要求:
1) 点击开始按钮,开始发牌,点击洗牌重新开始
2) 每半秒发一张牌,从第一个人开始发,界面上显示4个人得到的牌(排好序),不,4个人得到的牌不能有重复
提示:
1)   给扑克牌类加一个标志,表示该张牌是否已用
2)   定义52大小的扑克牌数组,先生成完整的52张牌
3)   给四个人定义四个13大小的数组,当发到某个人,可以随机发一张牌,检查该牌是否已用,若没有,则发给这个人,并且将这个人得到的牌排序,(repaint())显示到界面上,并且将这个牌置为已用;否则再随机发一张牌。
4)参考thinking   in   java   第14章   多线程例子,Counter2.java,主界面由Applet来实现,
发牌由“class   SeparateSubTask   extends   Thread”   来实现,注意发牌线程类构造函数中的参数:SeparateSubTask(Counter2   c2),参数使用主界面类的对象,这样在发牌线程中就可以操作主界面上的元素。

框架:
import   java.awt.*;
import   java.awt.event.*;
import   java.applet.*;

class   Play   extends   Thread   {

    private   Mainpanel   m;

    public   SeparateSubTask(Mainpanel   m)   {
        this.m   =   m;
        start();
    }

    public   void   run()   {
        while   (true)
{
            try  
    {
                    sleep(500);
            }   catch   (InterruptedException   e){}
            //随机产生一张牌
    //发给某一个人   m.man1,m.man2,,,,,
    //对m.man1,m.man2,m.man3,m.man4,排序
    //调用m.repaint()重画主界面


        }
    }
}  

public   class   Mainpanel   extends   Applet   {


    private   Play   pl   =   null;
    private   Button  
        onOff   =   new   Button( "suffle "),
        start   =   new   Button( "Start ");
  Card   c=new   Card[52];
  Card   man1=new   Card[13];
  Card   man2=new   Card[13];
  Card   man3=new   Card[13];
  Card   man4=new   Card[13];

    public   void   init()   {

for()
{
//初始化52张纸牌
}
        add(t);                                                                                 //请问哪来的t?
        start.addActionListener(new   StartL());
        add(start);
        onOff.addActionListener(new   OnOffL());
        add(onOff);
    }
    class   StartL   implements   ActionListener   {
        public   void   actionPerformed(ActionEvent   e)   {
            if(pl   ==   null)
                pl   =   new   Play(Counter2.this);
        }
    }
 
    public   void   paint(Graphics   g)
    {
          //根据man1,man2,man3,man4画出牌
    }