斗地主分派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("----------------------");
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[n];
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;
}
}