
正文
发牌代码java java扑克牌游戏的随机发牌
提示:扫一扫查出行【扫一扫了解最新限行尾号】
复制提示
请教发牌游戏的代码怎么写
牌类游戏的发牌(代码)
斗地主
* 程序流程:
* 1、首先定义需要使用的数组、变量等
* 2、用Random.nextInt方法生成随机数,并通过循环判断语句将说得的值进行比较,不重复的记入pai[]
* 3、进行分牌,分配到play_a、play_b、play_c三位玩家手中
*
* 关于牌的大小安排
3 4 5 6 7 8 9 10 J Q K A 2 小王 大王
黑 4 8 12 16 20 24 28 32 36 40 44 48 52 53 54
红 3 7 11 15 19 23 27 31 35 39 43 47 51
梅 2 6 10 14 18 22 26 30 34 38 42 46 50
方 1 5 9 13 17 21 25 29 33 37 41 45 49
*
* 分配原则为:因为已经随机抽取牌,所以直接将pai[]中的
* 0-16分给play_a
* 17-33分给play_b
* 34-50分给play_c
* 51-53为底牌
*
* 4、对每位玩家手上的牌进行大小排序,使用Arrays.sort()可以很方便的对数组进行排序
* 5、进行花色定义,这是一个复杂的手工过程,但是这样可以方便以后操作,然后将花色牌打印出来
* 6、玩家a当地主,将底牌给玩家a,然后将地主的牌打印
* 待续。。。
*
*
* */
import java.util.Random;
import java.util.Arrays;
public class ddz {
public static void main(String args[]){
int pai[] = new int[54]; //用于保存取出来的54个随机数
int play_a[] = new int[17];
int play_b[] = new int[17];
int play_c[] = new int[17]; //存放a,b,c三个玩家的牌
int k=0,m,n=0,paishu=0,qu = 0; // paishu用来表示pai[]数组里面的数的位置
//qu表示随机数每次取出来的数值,k,m,n表示自由变量,根据需要设置的;
Random rnd;
rnd=new Random(System.currentTimeMillis()); //随机数xuan
//随机生成54张不重复的牌
while(paishu54) //while语句的作用,机选出54个数据,按选出来的顺序依次放在pai[]中
{
qu = Math.abs(rnd.nextInt())%54+1;
for(m = 0; m=paishu ;m++) //判断机选出来的数值qu是否已经在pai[]中
{
if(pai[m]==qu)
{
n=0;
break;
}
else n= 1;
}
if(n==1) //如果机选出来的数值不在pai[]中,则把qu的值加入到pai[]里面相应的位置
{
pai[paishu]=qu;
paishu++;
}
}
//第二部分,将初始牌分配给每个人
/*关于牌的大小安排
3 4 5 6 7 8 9 10 J Q K A 2 小王 大王
黑 4 8 12 16 20 24 28 32 36 40 44 48 52 53 54
红 3 7 11 15 19 23 27 31 35 39 43 47 51
梅 2 6 10 14 18 22 26 30 34 38 42 46 50
方 1 5 9 13 17 21 25 29 33 37 41 45 49
*/
//把随机牌分给3位玩家
for(k=0,m=0;m17;k++,m++)
{
play_a[k] = pai[m];
}
for(k=0,m=17;m34;k++,m++)
{
play_b[k] = pai[m];
}
for(k=0,m=34;m51;k++,m++)
{
play_c[k] = pai[m];
}
//直接将3人的牌排序
Arrays.sort(play_a);
Arrays.sort(play_b);
Arrays.sort(play_c);
//将牌和花色定义
String flowers[] = new String[55];
flowers[1]= "方"+"3";
flowers[2]= "梅"+"3";
flowers[3]= "红"+"3";
flowers[4]= "黑"+"3";
flowers[5]= "方"+"4";
flowers[6]= "梅"+"4";
flowers[7]= "红"+"4";
flowers[8]= "黑"+"4";
flowers[9]= "方"+"5";
flowers[10]= "梅"+"5";
flowers[11]= "红"+"5";
flowers[12]= "黑"+"5";
flowers[13]= "方"+"6";
flowers[14]= "梅"+"6";
flowers[15]= "红"+"6";
flowers[16]= "黑"+"6";
flowers[17]= "方"+"7";
flowers[18]= "梅"+"7";
flowers[19]= "红"+"7";
flowers[20]= "黑"+"7";
flowers[21]= "方"+"8";
flowers[22]= "梅"+"8";
flowers[23]= "红"+"8";
flowers[24]= "黑"+"8";
flowers[25]= "方"+"9";
flowers[26]= "梅"+"9";
flowers[27]= "红"+"9";
flowers[28]= "黑"+"9";
flowers[29]= "方"+"10";
flowers[30]= "梅"+"10";
flowers[31]= "红"+"10";
flowers[32]= "黑"+"10";
flowers[33]= "方"+"J";
flowers[34]= "梅"+"J";
flowers[35]= "红"+"J";
flowers[36]= "黑"+"J";
flowers[37]= "方"+"Q";
flowers[38]= "梅"+"Q";
flowers[39]= "红"+"Q";
flowers[40]= "黑"+"Q";
flowers[41]= "方"+"K";
flowers[42]= "梅"+"K";
flowers[43]= "红"+"K";
flowers[44]= "黑"+"K";
flowers[45]= "方"+"A";
flowers[46]= "梅"+"A";
flowers[47]= "红"+"A";
flowers[48]= "黑"+"A";
flowers[49]= "方"+"2";
flowers[50]= "梅"+"2";
flowers[51]= "红"+"2";
flowers[52]= "黑"+"2";
flowers[53]= "小王";
flowers[54]= "大王";
flowers[0]= "???";
//将原来的数字牌换成花色牌
String[] play_apai= new String[17];
String[] play_bpai= new String[17];
String[] play_cpai= new String[17];
for(k=0;k17;k++){
play_apai[k]=flowers[play_a[k]];
play_bpai[k]=flowers[play_b[k]];
play_cpai[k]=flowers[play_c[k]];
}
//将花色牌打印出来
System.out.print(" \n =打印出已经排序且转换牌面的牌=");
System.out.print(" \n 玩家a的牌: ");
for(k=0;k17;k++) System.out.print( play_apai[k]+" " );
System.out.print(" \n 玩家b的牌: ");
for(k=0;k17;k++) System.out.print( play_bpai[k]+" " );
System.out.print(" \n 玩家c的牌: ");
for(k=0;k17;k++) System.out.print( play_cpai[k]+" " );
System.out.print(" \n 打印出底牌: ");
for(k=51;k54;k++)
System.out.print(flowers[pai[k]]+" ");
System.out.println(" \n \n 玩家a始终为当前玩家,玩家b、c为AI控制,玩家a如果当地主,牌为: ");
//定义地主的牌
String dizhu[]=new String[20];
int dizhushu[]=new int[20];
for(k=0;k17;k++)
dizhushu[k]=play_a[k];
dizhushu[17]=pai[51];
dizhushu[18]=pai[52];
dizhushu[19]=pai[53];
//排序地主的牌
Arrays.sort(dizhushu);
//转换牌面
for(k=0;k20;k++)
dizhu[k]=flowers[dizhushu[k]];
//打印地主的牌
System.out.print(" \n 地主的牌: " );
for(k=0;k20;k++)
System.out.print(dizhu[k]+" ");
}
}
//把随机牌分给3位玩家
for(k=0,m=0;m17;k++,m++)
{
play_a[k] = pai[m];
}
for(k=0,m=17;m34;k++,m++)
{
play_b[k] = pai[m];
}
for(k=0,m=34;m51;k++,m++)
{
play_c[k] = pai[m];
}
这一段代码改成这样会不会好点:
for(k=0;k17;k++)
{ play_a[k]=pai[k];
play_b[k]=pai[k+17];
play_c[k]=pai[k+34];
}
相关问答
Q1: java斗地主发牌程序
DeckOfCards()构造函数里面,注释掉的
//deck[count]=new Card(faces[count%13],suits[count/13]);
是对的,下面那行除17是错的
另外,没有把大小王赋值到数组里
最后main函数里,打印方法错了。应该为,原本少了一个%-20s
System.out.printf("%-20s%-20s%-20s\n", myDeckOfCards.dealCard(), myDeckOfCards.dealCard(), myDeckOfCards.dealCard());
发牌完成以后剩下的3张牌就是保留的底牌
Q2: 用java写发牌程序 a.108张牌发给6个人 b.找出6个人中对子数最多的人 简洁清晰的代码
import java.util.Arrays;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.Random;
public class Licensing {
public static void main(String[] args) {
LinkedListInteger card = new LinkedListInteger();
int max = 108;
Random r = new Random();
/*下边的代码是定义一副牌*/
for(int i = 0;i 8;++i)
for(int j = 1;j = 13;++j)
card.add(j);
for(int k = 0;k 2;++k){
card.add(14);
card.add(15);
}
Player[] p = new Player[6];//定义六个玩家
for(int i = 0;i6;++i){
p[i] = new Player();
}
while(max 0){//发牌
for(int m = 0;m6;++m){
int index = r.nextInt(max);
max--;
if(max 0)
break;
Integer a = card.get(index);
card.remove(a);
p[m].myCard.add(a);
}
}
int[] pp = new int[6];
for(int w = 0;w6;++w)
pp[w] = p[w].pairs();
Arrays.sort(pp);
for(int e = 0;e6;++e){
if(p[e].pairs()==pp[5])
System.out.println("第"+e+"位玩家获胜了");
}
}
}
class Player{
public LinkedListInteger myCard;
public String name;
public Player(){
myCard = new LinkedListInteger();
}
public int pairs(){
int sum = 0;
if(myCard != null){
LinkedListInteger tempCard = myCard;
IteratorInteger it = tempCard.iterator();
int in = 0;
if(myCard != null){
while(it.hasNext()){
it.next();
++in;
}
int c =-1;
for(int i = 0;i in;++i){
if(i == c)
continue;
for(int j = i+1;jin;++j){
if((int)tempCard.get(i) == (int)tempCard.get(j)){
++sum;
c = j;
break;
}
}
}
}
}
return sum;
}
}
Q3: 高分急求java扑克出牌代码
我不知道电脑出牌为什么要进行大小比较以及删牌操作? 我的是52张牌若干玩家,随机发牌给玩家,玩家收到电脑发的牌。
这个是定义52张牌:Card.java
package com.etc.week4.day03;
public class Card {
// 点数 3 ---0 4 1 12 2 11 A 13 小王 14 大王
public int rank;
public final static int THREE = 0;
public final static int FOUR = 1;
public final static int FIVE = 2;
public final static int SIX = 3;
public final static int SEVEN = 4;
public final static int EIGHT = 5;
public final static int NINE = 6;
public final static int TEN = 7;
public final static int JACK = 8;//J
public final static int QUEEN = 9;//Q
public final static int KING = 10;//K
public final static int ACE = 11;//A
public final static int DEUCE = 12; //2
public final static int BLACK = 13; //小王
public final static int COLOR = 14;//大王
//花色(suit=0suit=4)
private int suit;
public final static int CLUB = 0; //梅花
public static final int DIAMOND = 1; //方块(钻石)
public static final int HEART = 2; //红桃(红心)
public static final int SPADE = 3; //黑桃(花锄)
public static final int JOKER = 4; //王
public Card(int suit,int rank){
this.setSuit(suit);
this.setRank(rank);
}
public Card(){}
public int getRank() {
return rank;
}
public void setRank(int rank) {
if(rankCard.THREE||rankCard.COLOR){
throw new RuntimeException();
}
this.rank = rank;
}
public int getSuit() {
return suit;
}
public void setSuit(int suit) {
if(suitCard.CLUB || suitCard.JOKER){
throw new RuntimeException();
}
this.suit = suit;
}
// 点数对应 名称
public final static String[] RANK_NAMES={
"3","4","5","6","7","8","9","10","J","Q",
"K","A","2","小王","大王"};
public final static String[] SUIT_NAMES={
"梅花","方块","红桃","黑桃",""};
@Override
public String toString() {
return SUIT_NAMES[this.suit]+RANK_NAMES[this.rank];
}
public static void main(String[] args) {
Card c =new Card(HEART, ACE);
System.out.println(c);
}
}
这个是定义若干玩家Player.java
package com.etc.week4.day03;
import java.util.Arrays;
public class Player {
String id;
String name;
Card cards[] ={};
public void addCards(Card card ){
// 每个玩家获取的牌
cards = Arrays.copyOf(cards, cards.length+1);
cards[cards.length-1] = card;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Card[] getCards() {
return cards;
}
public void setCards(Card[] cards) {
this.cards = cards;
}
public Player(String id, String name) {
this.id = id;
this.name = name;
}
public Player() {
super();
}
@Override
public String toString() {
return "Player:"+name+" cards="
+ Arrays.toString(cards) + "]";
}
}
这个是电脑随机发牌给玩家,玩家收到电脑发的牌PlayDemo.java
package com.etc.week4.day03;
import java.util.Arrays;
import java.util.Random;
public class PlayerDemo {
public static void main(String[] args) {
// 创建一副扑克牌
// 方块:13张(THREE~DEUCE)
// 梅花:13张(THREE~DEUCE)
// 黑桃:13张(THREE~DEUCE)
// 红桃:13张(THREE~DEUCE)
// 王: BLACK COLOR
Card [] cards = new Card[54];
int i=0;
// 构造52张普通的牌
for(int rank=Card.THREE;rank=Card.DEUCE;rank++){
cards[i++] = new Card(Card.DIAMOND, rank);
cards[i++] = new Card(Card.CLUB, rank);
cards[i++] = new Card(Card.SPADE, rank);
cards[i++] = new Card(Card.HEART, rank);
}
// 添加 大小王
cards[i++] = new Card(Card.JOKER, Card.BLACK);
cards[i++] = new Card(Card.JOKER, Card.COLOR);
// 将数组 变成集合 List
// List arr= Arrays.asList(cards);
// 将集合里面的元素 打乱... 洗牌
//Collections.shuffle(arr);
// 洗牌//
for(int n=cards.length-1;n=1;n--){
Random rd = new Random();
int index = rd.nextInt(n); //1 0
Card t = cards[n];
cards[n] = cards[index];
cards[index] = t;
}
// System.out.println("=====测试洗牌.....\n"+Arrays.toString(cards));
// 组建玩家团队
Player[] players = new Player[4];
players[0] = new Player("1010", "张柏芝");
players[1] = new Player("1011", "曾志伟");
players[2] = new Player("1012", "谭咏麟");
// players[3] = new Player("1013", "郭德纲");
// 发牌.....
for(int j =0;jcards.length;j++){
players[j%players.length].addCards(cards[j]);
}
// 显示各个玩家的牌
for(int m=0;mplayers.length;m++){
System.out.println(players[m]);
}
}
}
发牌代码java的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于java扑克牌游戏的随机发牌、发牌代码java的信息别忘了在本站进行查找喔。






