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画出牌
}
public static void main(String[] args) {
Mainpanel applet = new Mainpanel();
Frame aFrame = new Frame("Counter2");
aFrame.addWindowListener(
new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
aFrame.add(applet, BorderLayout.CENTER);
aFrame.setSize(300,200);
applet.init();
applet.start(); //请问applet哪有start()方法,Play才有啊。
aFrame.setVisible(true);
}
}
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货