java swing 模拟发牌_用java设计一个发牌程序
展開全部
// 發牌程序。
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class CardBuffer //加互斥鎖的緩沖區
{
private int value;
private boolean isEmpty = true; //value是否為空的信號量
private int order=0; //信號量,e68a8462616964757a686964616f31333236373165約定取牌線程的次序
synchronized void put(int i)
{
while (!isEmpty) //當value不空時,等待
{
try
{
this.wait(); //等待
}
catch(InterruptedException e) {}
}
value = i; //當value空時,value獲得值
isEmpty = false; //設置value為不空狀態
notifyAll(); //喚醒所有其他等待線程
}
synchronized int get(int order) //order是取牌線程約定的次序
{
while (isEmpty || (this.order!=order)) //當value空或取牌次序不符時等待
{
try
{
this.wait();
}
catch(InterruptedException e) {}
}
isEmpty = true; //設置value為空狀態,并返回值
notifyAll();
this.order = (this.order+1)%4; //加1使取牌次序輪轉
return value;
}
}
class Sender extends Thread //發牌線程類
{
private CardBuffer cardbuffer;
private int count;
public Sender(CardBuffer cardbuffer,int count)
{
this.cardbuffer = cardbuffer;
this.count = count;
}
public void run()
{
for (int i=1;i<=this.count;i++)
cardbuffer.put(i);
}
}
class Receiver extends Thread //取牌線程類
{
private CardBuffer cardbuffer;
private JTextArea text;
private int order; //信號量,約定取牌線程的次序
public Receiver(CardBuffer cardbuffer,JTextArea text,int order)
{
this.cardbuffer = cardbuffer ;
this.text = text ;
this.order = order;
}
public void run()
{
while(true)
{
text.append(" "+cardbuffer.get(this.order));
try
{
this.sleep(100);
}
catch(InterruptedException e) {}
}
}
}
class CardJFrame extends JFrame
{
public CardJFrame()
{
super("發牌程序");
this.setSize(430,200);
this.setLocation(300,240);
this.setDefaultCloseOperation(EXIT_ON_CLOSE);
this.setLayout(new GridLayout(3,3,5,5)); //3行3列網格布局,間隔為5
JTextArea text_north,text_east,text_south,text_west; //獲得牌的4個文本區
text_north = new JTextArea();
text_east = new JTextArea();
text_south = new JTextArea();
text_west = new JTextArea();
text_north.setLineWrap(true); //設置文本區自動換行
text_east.setLineWrap(true);
text_south.setLineWrap(true);
text_west.setLineWrap(true);
text_north.setEditable(false);
text_east.setEditable(false);
text_south.setEditable(false);
text_west.setEditable(false);
Font font = new Font("Helvetica", Font.PLAIN, 16);
text_north.setFont(font);
text_east.setFont(font);
text_south.setFont(font);
text_west.setFont(font);
this.add(new JPanel()); //網格布局的第1行
this.add(text_north);
this.add(new JPanel());
this.add(text_west); //網格布局的第2行
this.add(new JPanel());
this.add(text_east);
this.add(new JPanel()); //網格布局的第3行
this.add(text_south);
this.add(new JPanel());
this.setVisible(true);
CardBuffer cardbuffer = new CardBuffer();
Sender s = new Sender(cardbuffer,52);
s.setPriority(10); //設置最高優先級
s.start(); //啟動發牌線程
(new Receiver(cardbuffer,text_north,0)).start(); //創建并啟動4個取牌線程,優先級為5
(new Receiver(cardbuffer,text_east,1)).start();
(new Receiver(cardbuffer,text_south,2)).start();
(new Receiver(cardbuffer,text_west,3)).start();
}
public static void main(String arg[])
{
new CardJFrame();
}
}
本回答由提問者推薦
已贊過
已踩過<
你對這個回答的評價是?
評論
收起
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
以上是生活随笔為你收集整理的java swing 模拟发牌_用java设计一个发牌程序的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: eusexe.exe进程安全吗 可以结束
- 下一篇: explorer32.exe是什么进程