一点疑问,有关线程中的类
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画出牌
}