新学JAVA,求大哥们帮写一下发牌程序。。。
--------------------编程问答-------------------- 我喜欢先洗牌 然后按顺序发 --------------------编程问答-------------------- 随机一个0-51的数字,不能重复。0-51对应某一张牌。
从图中看,还是有序的啊。 --------------------编程问答--------------------
import java.util.Random;--------------------编程问答-------------------- http://www.java3z.com/cwbwebhome/article/article5/5579.html?id=885这个好 --------------------编程问答-------------------- 每天回帖即可获得10分可用分!小技巧: --------------------编程问答-------------------- 汗..还有问这样问题的~ ~ --------------------编程问答-------------------- 好难啊 --------------------编程问答-------------------- 不知道可以不
public class Poker {
public static void main(String args[]) throws Exception {
Random random = new Random();
int[] poker = getPoker();
int j = 0;
int temp =0;
for (int i = 0; i < 52; i++) {
temp = poker[i];
j = random.nextInt(52);
poker[i] = poker[j];
poker[j] = temp;
}
String A = "A:";
String B = "B:";
String C = "C:";
String D = "D:";
for(int i = 0;i<52 ;i++){
if(i%4==0){
A+=getColor(poker[i])+format(poker[i]%13)+"\t";
}
if(i%4==1){
B+=getColor(poker[i])+format(poker[i]%13)+"\t";
}
if(i%4==2){
C+=getColor(poker[i])+format(poker[i]%13)+"\t";
}
if(i%4==3){
D+=getColor(poker[i])+format(poker[i]%13)+"\t";
}
}
System.out.println(A);
System.out.println(B);
System.out.println(C);
System.out.println(D);
}
public static String getColor(int i ){
if((i-1)/13==0){
return "红桃:";
}else if((i-1)/13==1){
return "黑桃:";
}else if((i-1)/13==2){
return "方块:";
}else{
return "梅花:";
}
}
public static String format(int i ){
if(i==11){
return "J";
}else if(i==12){
return "Q";
}else if (i == 0){
return "K";
}else{
return String.valueOf(i);
}
}
public static int[] getPoker() {
int[] poker = new int[52];
for (int i = 0; i < 52; i++) {
poker[i] = i + 1;
}
return poker;
}
}
--------------------编程问答-------------------- ui:
/*
* file: PlayPoker.java
* class: PlayPoker
*
* description:
*
* @author: leisore
* @version: V1.0.0
*/
package cn.leisore.daily._2010_06_21;
import java.lang.reflect.Array;
import java.util.Random;
import java.util.concurrent.ArrayBlockingQueue;
import java.util.concurrent.BlockingQueue;
import javax.swing.JTextArea;
public class PlayPoker {
private Thread master = null;
private Thread[] players = null;
public PlayPoker(JTextArea[] text) {
BlockingQueue<Integer>[] pokerQueues = (BlockingQueue<Integer>[]) Array
.newInstance(BlockingQueue.class, 4);
for (int i = 0; i < 4; i++) {
pokerQueues[i] = new ArrayBlockingQueue<Integer>(13);
}
master = new Thread(new Master(pokerQueues));
players = new Thread[4];
for (int i = 0; i < 4; i++) {
players[i] = new Thread(new Player(pokerQueues[i], text[i]));
}
}
public void start() {
master.start();
for (Thread t : players) {
t.start();
}
}
public void stop() {
master.interrupt();
for (Thread t : players) {
t.interrupt();
}
}
public static void main(String[] args) {
/*
* PlayPoker p = new PlayPoker(); p.start();
*/
}
public static class Master implements Runnable {
final int[] pokers = new int[52];
final Random rand = new Random();
final BlockingQueue<Integer>[] pokerQueues;
Master(BlockingQueue<Integer>[] pokerQueue) {
this.pokerQueues = pokerQueue;
initPokers();
}
private void initPokers() {
for (int i = 1; i < 53; i++) {
pokers[i - 1] = i;
}
}
private void swap(int i, int j) {
int temp = pokers[i];
pokers[i] = pokers[j];
pokers[j] = temp;
}
private void washPoker() {
for (int t = 0; t < 52; t++) {
int i = Math.abs(rand.nextInt(52));
int j = Math.abs(rand.nextInt(52));
swap(i, j);
}
}
private void sendPoker() {
for (int t = 0; t < 52; t++) {
try {
pokerQueues[t % 4].put(pokers[t]);
Thread.sleep(1 * 1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
public void run() {
while (true) {
washPoker();
sendPoker();
}
}
}
public static class Player implements Runnable {
static int idCounter = 0;
int id = idCounter++;
int pokerCount = 0;
final int[] pokers = new int[13];
final BlockingQueue<Integer> pokerQueue;
final private JTextArea textarea;
Player(BlockingQueue<Integer> pokerQueue, JTextArea textarea) {
this.pokerQueue = pokerQueue;
this.textarea = textarea;
}
public void run() {
try {
while (true) {
int poker = pokerQueue.take();
Thread.sleep(1000);
pokers[pokerCount++ % 13] = poker;
textarea.append(poker + " ");
if (pokerCount % 8 == 0 || pokerCount % 13 == 0) {
textarea.append("\n");
}
}
} catch (InterruptedException e) {
e.printStackTrace();
}
}
public void replay() {
textarea.setText("");
}
}
}
--------------------编程问答-------------------- ui:
package cn.leisore.daily._2010_06_21;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.GroupLayout;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.LayoutStyle;
import javax.swing.SwingUtilities;
import javax.swing.WindowConstants;
public class PlayPokerUI extends JFrame {
PlayPoker p = null;
public PlayPokerUI() {
initComponents();
}
private void initComponents() {
jScrollPane1 = new JScrollPane();
poker1 = new JTextArea();
jScrollPane2 = new JScrollPane();
poker2 = new JTextArea();
jScrollPane3 = new JScrollPane();
poker3 = new JTextArea();
jScrollPane4 = new JScrollPane();
poker4 = new JTextArea();
start = new JButton();
stop = new JButton();
setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
setName("Poker");
setResizable(false);
jScrollPane1.setName("jScrollPane1");
poker1.setColumns(16);
poker1.setRows(5);
poker1.setName("poker1");
jScrollPane1.setViewportView(poker1);
jScrollPane2.setName("jScrollPane2");
poker2.setColumns(16);
poker2.setRows(5);
poker2.setName("poker2");
jScrollPane2.setViewportView(poker2);
jScrollPane3.setName("jScrollPane3");
poker3.setColumns(16);
poker3.setRows(5);
poker3.setName("poker3");
jScrollPane3.setViewportView(poker3);
jScrollPane4.setName("jScrollPane4");
poker4.setColumns(16);
poker4.setRows(5);
poker4.setName("poker4");
jScrollPane4.setViewportView(poker4);
start.setText("start");
start.setName("start");
start.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
if (p == null) {
p = new PlayPoker(new JTextArea[] { poker1, poker2, poker3,
poker4 });
p.start();
}
}
});
stop.setText("stop");
stop.setName("stop");
stop.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
if (p != null) {
p.stop();
p = null;
}
}
});
GroupLayout layout = new GroupLayout(getContentPane());
getContentPane().setLayout(layout);
layout
.setHorizontalGroup(layout
.createParallelGroup(GroupLayout.Alignment.LEADING)
.addGroup(
layout
.createSequentialGroup()
.addGroup(
layout
.createParallelGroup(
GroupLayout.Alignment.LEADING)
.addGroup(
layout
.createSequentialGroup()
.addContainerGap()
.addGroup(
layout
.createParallelGroup(
GroupLayout.Alignment.LEADING)
.addComponent(
jScrollPane1,
GroupLayout.PREFERRED_SIZE,
193,
GroupLayout.PREFERRED_SIZE)
.addComponent(
jScrollPane3,
GroupLayout.PREFERRED_SIZE,
193,
GroupLayout.PREFERRED_SIZE))
.addGap(
10,
10,
10)
.addGroup(
layout
.createParallelGroup(
GroupLayout.Alignment.LEADING)
.addComponent(
--------------------编程问答-------------------- 这不提还不要紧,一提牛人都把代码晒晒了 --------------------编程问答-------------------- 学习虽然不太懂以后会懂的 --------------------编程问答-------------------- 同道中人!啊 --------------------编程问答-------------------- 有时间也写一个玩玩、、、 --------------------编程问答-------------------- 真是牛人呀,顶下。 --------------------编程问答-------------------- 我同意2楼的··洗牌之后再发··发的顺序可以有序··但是牌的顺序随即··这个更符合事实··至于使用多线程··我觉得没有必要·· --------------------编程问答-------------------- ……LZ这是召唤牛人们晒代码啊……
jScrollPane2,
GroupLayout.PREFERRED_SIZE,
201,
GroupLayout.PREFERRED_SIZE)
.addComponent(
jScrollPane4,
GroupLayout.PREFERRED_SIZE,
201,
GroupLayout.PREFERRED_SIZE)))
.addGroup(
layout
.createSequentialGroup()
.addGap(
79,
79,
79)
.addComponent(
start)
.addGap(
106,
106,
106)
.addComponent(
stop)))
.addContainerGap(
GroupLayout.DEFAULT_SIZE,
Short.MAX_VALUE)));
layout.setVerticalGroup(layout.createParallelGroup(
GroupLayout.Alignment.LEADING).addGroup(
layout.createSequentialGroup().addContainerGap().addGroup(
layout.createParallelGroup(
GroupLayout.Alignment.LEADING).addComponent(
jScrollPane1, GroupLayout.PREFERRED_SIZE, 137,
GroupLayout.PREFERRED_SIZE).addComponent(
jScrollPane4, GroupLayout.DEFAULT_SIZE, 137,
Short.MAX_VALUE)).addPreferredGap(
LayoutStyle.ComponentPlacement.RELATED).addGroup(
layout.createParallelGroup(
GroupLayout.Alignment.LEADING, false)
.addComponent(jScrollPane2,
GroupLayout.Alignment.TRAILING)
.addComponent(jScrollPane3,
GroupLayout.Alignment.TRAILING,
GroupLayout.DEFAULT_SIZE, 137,
Short.MAX_VALUE)).addPreferredGap(
LayoutStyle.ComponentPlacement.RELATED, 21,
Short.MAX_VALUE).addGroup(
layout.createParallelGroup(
GroupLayout.Alignment.BASELINE).addComponent(
start).addComponent(stop)).addContainerGap()));
pack();
}
public static void main(String args[]) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
new PlayPokerUI().setVisible(true);
}
});
}
private JScrollPane jScrollPane1;
private JScrollPane jScrollPane2;
private JScrollPane jScrollPane3;
private JScrollPane jScrollPane4;
private JTextArea poker1;
private JTextArea poker2;
private JTextArea poker3;
private JTextArea poker4;
private JButton start;
private JButton stop;
}
--------------------编程问答-------------------- 不会啊 --------------------编程问答-------------------- 怎么都没有注释啊 看着累 --------------------编程问答-------------------- 先洗牌,利用随机数就行了
import java.util.*;--------------------编程问答-------------------- 学习啦!! --------------------编程问答-------------------- 楼上的有很强大的啊 真牛逼啊 小弟领教了 --------------------编程问答-------------------- --------------------编程问答-------------------- --------------------编程问答-------------------- 其实三楼的已经做的很好了,不用多线程,节省了不少资源 --------------------编程问答-------------------- --------------------编程问答-------------------- --------------------编程问答--------------------
public class TestCard {
/**
* 随机发牌程序
*/
public static void main(String[] args) {
String[] shape={"红桃","黑桃","梅花","方片"};
String[] nums={"A","2","3","4","5","6","7","8","9","10","J","Q","K"};
String[] hands={"玩家一:","玩家二:","玩家三:","玩家四:"};
String[] cards=new String[52];
int k=0;
//下面循环用于产生一副牌
for(int i=0;i<shape.length;i++){
for(int j=0;j<nums.length;j++){
cards[k++]=shape[i]+nums[j];
}
}
Random r=new Random();
int next=r.nextInt(51)+1;
//将牌的顺序打乱
for(int i=0;i<52;i++){
String temp="";
//用于和数组的第一个元素进行交换
temp=cards[0];
cards[0]=cards[next];
cards[next]=temp;
next=r.nextInt(51)+1;
}
//下面的循环用于发牌hands
int j=0;
for(int i=0;i<cards.length;i++){
if(i%13==0){
System.out.print(hands[j]);
}
System.out.print(cards[i]+" ");
if((i+1)%13==0){
System.out.println();
j++;
}
}
}
}
--------------------编程问答-------------------- --------------------编程问答-------------------- --------------------编程问答-------------------- 小弟刚学java过来看看,学习一下。 --------------------编程问答-------------------- 不就是发牌嘛,不用那么复杂。。
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
public class CardShuffle {
public static void main(String[] args) {
List list=new ArrayList();
String[] players={"小王","小张","小赵","小白"};
String[] f={"A","2","3","4","5","6","7","8","9","10","J","Q","K"};
String[] s={"♥","♣","♦","♠"};
for(int i=0;i<s.length;i++)
{
for(int j=0;j<f.length;j++)
{
list.add(s[i]+f[j]);
}
}
Collections.shuffle(list);
for(int i=0;i<players.length;i++)
{
System.out.print(players[i]+"的手牌是");
System.out.println(dealHand(list, 13));
}
}
public static List dealHand(List Ls,int n){
int sizePai = Ls.size();
List handView = Ls.subList(sizePai - n, sizePai);
List hand = new ArrayList(handView);
handView.clear();
return hand;
}
}
System.out.println("开始发牌!!");
for(int i=0;i<18;i++){
System.out.println("你的");
System.out.println("他的");
System.out.println("我的");
}
System.out.println("发完了!!"); --------------------编程问答--------------------
补充:Java , Java SE