麻将游戏实现:
实现功能点: 实现麻将的准备牌,洗牌,发牌,看牌 (集合知识) 麻将功能需求分析 a:具体规则:
1.组装136张麻将,条,筒,万加在一起的数目是108张 东,南,西,北风,红中,发财,白板是28张,总共136张
2.将136张牌顺序打乱
3.四个玩家参与游戏,四个人交替摸牌,每次4张,先摸3次,之后庄家摸2张(2张之间索引差4),其他人再摸一张,庄家14张,其余人13张牌,剩下的留作底牌。
4.查看四人手中的牌(按照牌的大小排序),底牌
public class Mahjong {
public static void main(String[] args) {
//定义三个数组,用来组合麻将牌
int[] num = new int[]{1,2,3,4,5,6,7,8,9};
String[] name = new String[]{"条","筒","万"};
String[] tablet = new String[]{"东","南","西","北","中","白板","发财"};
//记录牌的编号
int k = 0;
//用来存放牌
HashMap hashMap = new HashMap<>();
//用来记录麻将存放个数,和次序
List number = new ArrayList<>();
//定义四个存放玩家牌的数组
List player1 = new ArrayList<>();
List player2 = new ArrayList<>();
List player3 = new ArrayList<>();
List player4 = new ArrayList<>();
//用来存放底牌
List base = new ArrayList<>();
//准备牌,for循环添加条,筒,万
for(int i =0;i> iterator = hashMap.entrySet().iterator();
while(iterator.hasNext()) {
System.out.print("(" + iterator.next() + ")" + " ");
}
System.out.println();
System.out.println("将牌打乱顺序: ");
//集合提供方法,将一个整形数组打乱
Collections.shuffle(number);
for(int i =0;i< number.size(); i++) {
System.out.print("(" + i + ":" + hashMap.get(number.get(i)) + ")" + " ");
}
System.out.println();
//发牌
//定义属性n,记录摸牌的位置
Integer n = 0;
//总共发三次,每一次每人摸四张牌,
for(int i=0;i<3;i++) {
for(int j=0;j<4;j++) {
player1.add(number.get(n++));
player2.add(number.get(n++));
player3.add(number.get(n++));
player4.add(number.get(n++));
}
}
//庄家摸两次牌,其他人摸一张(玩家1是庄家)
player1.add(number.get(n));
//需要跳牌(庄家第一次和第二次摸的位置索引值差4)
n = n + 4;
player1.add(number.get(n));
//回到庄家第一次摸牌的位置的下一个
n = n - 3;
player2.add(number.get(n));
player3.add(number.get(n));
player4.add(number.get(n));
//剩下的底牌
for(int i=n;i
看牌的代码块可以封装起来,会显得简洁明了;
//封装后的函数
looking("1号",player1,hashMap);
looking("2号",player2,hashMap);
looking("3号",player3,hashMap);
looking("4号",player4,hashMap);
looking("底牌",base,hashMap);
}
/**
* 输入想看的玩家的名字,传入该玩家的List数组,传入存放麻将牌的集合
* @param name
* @param player
* @param hashMap
*/
private static void looking(String name,List player, HashMap hashMap) {
System.out.print(name + ": ");
for(int i=0;i