您的位置:首页 > 编程语言 > Java开发

java 模拟斗地主分派

2017-03-26 22:18 316 查看

斗地主分派java版

个人感觉java C的差不多都是算法的实现都差不多

java的用对象存每个人的牌

C的话开块内存存一下 结构体 链表

主要思路是 1-54 分别代表不同的牌

比如

1234 红桃1黑桃1 梅花1 方块1

5678 红桃2黑桃2 梅花2 方块2

9 10 11 12 红桃3黑桃3 梅花3 方块3

你处理的就是1-54这写数字

闲来无事 写个玩玩

废话不多说上代码。



package java_03;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.Collections;
import java.util.HashMap;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.Random;

public class T3 {

public static void main(String[] args) {
//      红桃 :heart黑桃 : spade梅花 : club方块 : diamond
//1- 54 随机一个数
int [] count = randomArray(1, 54, 54);
Person p1 = new Person("张三");
Person p2 = new Person("李四");
Person p3 = new Person("王五");
//      System.out.println(count.length);

for(int i = count.length-1;i>=3 ;i--){
//把牌平均分给3个人
int temp = i % 3 ;
switch (temp) {
case 0:
p1.getList().add(count[i]);
break;
case 1:
p2.getList().add(count[i]);
break;
case 2:
p3.getList().add(count[i]);
break;
default:
break;
}

}
System.out.println("豪华斗地主v0.1");
System.out.println("----------------------");
System.out.println("分牌数量");
System.out.println("----------------------");
System.out.println(p1.getList().size()+"-1");
System.out.println(p2.getList().size()+"-2");
System.out.println(p3.getList().size()+"-3");
System.out.println("--------------------
4000
--");

System.out.println("分牌结果");
//      System.out.println("底牌:" + count[51]+","+count[52]+","+count[53]);
System.out.println("底牌:" + getName(count[0])+","+getName(count[1])+","+getName(count[2]));

System.out.println("----------------------");
//没啥好说的,打印出三个人的牌
//第1个人
System.out.println(p1.getName());
Iterator<Integer> i1 = p1.getList().iterator();
while (i1.hasNext()) {
int temp = i1.next();
System.out.print(getName(temp)+",");
}

System.out.println();
System.out.println();
//第2个人
System.out.println(p2.getName());
Iterator<Integer> i2 = p2.getList().iterator();
while(i2.hasNext()){
int temp = i2.next();
System.out.print(getName(temp)+",");
}
System.out.println();
System.out.println();
//第3个人
System.out.println(p3.getName());
Iterator<Integer> i3 = p3.getList().iterator();
while(i3.hasNext()){
int temp = i3.next();
System.out.print(getName(temp)+",");
}

}
//这个方法是获取这张牌是什么花色.比如梅花3 红桃3
//原理其实很简单。就是54张牌分别对应不同的花色
//1234 分别是红心3梅花3黑桃3方块3
//5678 分别是红心4梅花4黑桃4方块4 依次类推
//方便判断 牌的大小
public static String getName(int temp){
if(temp % 4 == 0){
return  "方块"+temp/4;
}
int res = temp/4;
int count = temp - res * 4;
if(res >=13){
if(count == 2){
return "小王";
}else{
return "大王";
}
}
int i = res + 1;
String s = "";
switch (count) {
case 1:
//红桃
s += "红桃"+i;
break;
case 2:
//黑桃
s += "黑桃"+i;
break;
case 3:
//梅花
s += "梅花"+i;
break;
default:
break;
}
return s;
}
//这儿方法是随机产生1-54 数字不重复模拟洗牌
public static int[] randomArray(int min,int max,int n){
int len = max-min+1;

if(max < min || n > len){
return null;
}

//初始化给定范围的待选数组
int[] source = new int[len];
for (int i = min; i < min+len; i++){
source[i-min] = i;
}

int[] result = new int
;
Random rd = new Random();
int index = 0;
for (int i = 0; i < result.length; i++) {
//待选数组0到(len-2)随机一个下标
index = Math.abs(rd.nextInt() % len--);
//将随机到的数放入结果集
result[i] = source[index];
//将待选数组中被随机到的数,用待选数组(len-1)下标对应的数替换
source[index] = source[len];
}
return result;
}

}
//用面向对象来存放每个人手中的牌
//你也可以对手中的牌进行排序只要对list进行排序就行了,
//由于博主比较懒没排序 请见谅
class Person{
private String name;
private  ArrayList<Integer> list;
public Person(String name) {
list = new ArrayList<Integer>();
this.name = name;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public ArrayList<Integer> getList() {
return list;
}
public void setList(ArrayList<Integer> list) {
this.list = list;
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: