actanble

导航

拖板车游戏java实践

拖板车:就是两个玩家出牌。依次叠加,若出现与上面相同的牌,则收取到自己的排队,出牌,继续轮流。

例如1 2 3 6 2 (ABABA)那么A玩家可以收到牌2336到自己的牌堆;

先准备一个工具类主要功能是在数组非0尾增加元素;AAE.java

class AAE{

    public static void arrayAddElement(int[] arr,int x){
                //对于一个长度固定且足够大的数组增加新元素;这里主要使用集合的功能
                        //补集运用,这里会用到
           int index = returnIndex(arr);//先访问到非0索引
                arr[index+1] = x;//将x元素植入数组末尾
    }
    public static int returnIndex(int[] arr1){
            int index = 0;             
            for(int i =0;i<arr1.length;i++){
                if(i==0 && arr1[i]==0){
                    index = -1;
                    break;}else if(arr1[i]==0){
                                    index = i-1;
                                break;
                }                
            }        
    return index;
    }

    public static void printArray(int[] arr){
        for(int i=0;i<arr.length;i++){
            System.out.print(arr[i]+"\t");
        }
            System.out.println();
    }
    //判断元素是否在数组中;是返回true
    public static boolean xFind(int[] arr,int x){
            boolean flag  = false;
            for(int i=0;i<arr.length;i++){
                if(arr[i]==x){
                    flag = true;                        
                }                
            }
            return flag;
    }
}
游戏程序;这里没有把收到的牌打乱再重新出。;拖板车游戏规则略。

package study.byk.demo;

/*
 * --------------拖板车小游戏实验---------------------------
	 * 1,returnA生成一副牌54张;其中15和30代表大小王。
	 * 2,生成第一个玩家的牌;2016年5月3日19:53:54已完成
	 * 3,a,利用集合的思想补集法生成第二个玩家的牌也是27张;b,字典法生成(略)。2016年5月3日20:21:39
	 * 		用a方法生成出现bug;退而求其次,直接生成54张分半给a,b
	 * 4,玩法开始。playGame数组方法
	 * */
public class PlayGame {
	public static int[] returnA(){
		int[] arr0 = new int[54];
		for(int i=0;i<52;i++ ){
			if((i+1)%13==0){
				arr0[i]=13;
			}else{
				arr0[i] = (i+1)%13;
			}
		}
		arr0[52]=15;
		arr0[53]=15;//大王;原来是30;改成15
		return arr0;			
	}
	public static void printArray(int[] arr){
		for(int i=0;i<arr.length;i++){
			System.out.print(arr[i]+",");
		}
		System.out.println();
	}
	public static int[] cArray(int[] a){
		int [] ca= new int[54];
		for(int i=0;i<54;i++){
			int k =(int) ((a.length-i)*Math.random());
			int a1=0; int b1=k;int t=0;//t记录区间中0的个数
			while(pdArray0(a,a1,b1)){
				t=0;
				for(int j=a1;j<=b1;j++){
					if(a[j]==0){
						t++;
					}
				}
				a1 = b1+1;
				b1 = b1+t;
			}
			ca[i] = a[b1];//除去0元素后的有效长度
			a[b1] = 0;
		}
		return ca;
	}
	public static boolean pdArray0(int[] arr,int a,int b){
		boolean flag = false;
		for(int i = a;i<=b;i++){
			if(arr[i]==0){
				flag = true;//其中有0是true
					break;
				}
			}
			return flag;
		}
		public static void main(String[] args){
			int[] a = returnA();
			System.out.println("打印整副牌");
			printArray(a);
			int[] xpai = cArray(a);
			System.out.println("打印洗了牌后的整副牌");
			printArray(xpai);
			int[] apai = new int[27];
			int[] bpai = new int[27];
			for(int i=0;i<27;i++){
				apai[i] = xpai[i];
				bpai[i] = xpai[i+27];
			}
			System.out.println("打印玩家a的手牌");
			printArray(apai);
			System.out.println("打印玩家b的手牌");
			printArray(bpai);
			System.out.println("----------游戏开始---------------");
			//a玩家的收牌arr1;ar1(待出牌;回合中赢得牌)
			int[] ar1 = new int[54];//玩家a的备牌
			int[] ar2 = new int[54];
			int[] arr0 = new int[20];//稍后修改:不能把0放进去了。
			int[] arr1 = new int[54];
			int[] arr2 = new int[54];
			int i=0;
			while(i<27){
				arr1[i] = apai[i];
				arr2[i] = bpai[i];
			i++;
			}
			letCpai(0,0,0,arr0,arr1,ar1,arr2,ar2);
		}
		public static int sum(int[] arr){
			int s =0;
			for(int i=0;i<arr.length;i++){
				s = s+arr[i];
			}
			return s;
		}
		public static boolean pdArrayH(int[] arr){
			boolean flag = false;
			int i=AAE.returnIndex(arr);
				for(int j=0;j<i;j++){
					if(arr[i]==arr[j]){
						flag = true;
						break;
					}
			}
			return flag;
		}
		public static void letJpai(int[] arr0,int[] arr,int[] ar){//让进牌的方法
			int ii=AAE.returnIndex(arr0);int index=0;
				for(int j=0;j<ii;j++){
					if(arr0[ii]==arr0[j]){
						index = j;
						break;
					}
				}
			System.out.println("打印出牌中该玩家吃牌序列");	
			for(int k=index;k<=ii;k++){
				System.out.print(arr0[k]+",");
				AAE.arrayAddElement(ar, arr0[k]);//A赢了这一串就把它给备组
				arr0[k] = 0;//将出牌的公用数组复位
			}
			System.out.println();//这里是顺便把它打印下来	
		}
		
		public static void letCpai(int ai,int bi,int bz,int[] arr0, int[] arr1, int[] ar1,int[] arr2,int[] ar2){
			if((sum(arr1)+sum(ar1))==0){
				System.out.println("Game Over! 恭喜B玩家!");
				}else if((sum(arr2)+sum(ar2))==0){
					System.out.println("Game Over! 恭喜A玩家!");
				}else{
				if(bz==0){
					//专门为A在arr1中牌的出列做个参数----ai
					if(sum(arr1)!=0){
						AAE.arrayAddElement(arr0, arr1[ai]);
						System.out.println("A出牌:"+arr1[ai]);//打印A出牌。
						arr1[ai] = 0; //直接替换进行进牌;
						ai++;
						}else if(sum(ar1)!=0){//这里就不洗备选牌了
							for(int kk=0;kk<ar1.length;kk++){
								arr1[kk] = ar1[kk];
								ar1[kk] = 0;
							}//都转移完了,接着就是将ai化为0;让第一个元素出列去出牌
							ai=0;
							AAE.arrayAddElement(arr0, arr1[ai]);
							System.out.println("A出牌:"+arr1[ai]);//打印A出牌。
							arr1[ai]=0;
							ai++;
								}else{
									System.out.println("--------------------------------");
									}//上面的一个大的 if-else里面嵌套了一个小的if-else其中重要的是让A能够出牌做处理
					if(pdArrayH(arr0)){
						letJpai(arr0, arr1, ar1);//让A进牌;接着就出牌
						letCpai(ai,bi,0,arr0,arr1,ar1,arr2,ar2);									
					}else{
						letCpai(ai,bi,1,arr0,arr1,ar1,arr2,ar2);//让B出牌							
					}
				}else{
					if(sum(arr2)!=0){
						AAE.arrayAddElement(arr0, arr2[bi]);
						System.out.println("\t"+"\t"+"B出牌:"+arr2[bi]);//打印B出牌。
						arr2[bi] = 0; //直接替换进行进牌;
						bi++;
						}else if(sum(ar2)!=0){//这里就不洗备选牌了
							for(int kk=0;kk<ar2.length;kk++){
								arr2[kk] = ar2[kk];
								ar2[kk] = 0;
							}
							bi=0;
							AAE.arrayAddElement(arr0,arr2[bi]);
							System.out.println("\t"+"\t"+"B出牌:"+arr2[bi]);//打印B出牌。
							arr2[bi]=0;
							bi++;
								}else{
									System.out.println("--------------传不到这儿来---------------");
								}//上面的一个大的 if-else里面嵌套了一个小的if-else其中重要的是让B能够出牌做处理
					if(pdArrayH(arr0)){
							letJpai(arr0, arr2, ar2);//让B进牌
							letCpai(ai,bi,1,arr0,arr1,ar1,arr2,ar2);
						}else{
							letCpai(ai,bi,0,arr0,arr1,ar1,arr2,ar2);		//让A进牌			
							}	
				}
			}
		}
		public static int reChange01(int a){
			if(a==0){
				return 1;
			}else{
				return 0;
			}
		}	
}
给出一个运行结果:

打印整副牌
1,2,3,4,5,6,7,8,9,10,11,12,13,1,2,3,4,5,6,7,8,9,10,11,12,13,1,2,3,4,5,6,7,8,9,10,11,12,13,1,2,3,4,5,6,7,8,9,10,11,12,13,15,30,
打印洗了牌后的整副牌
3,9,9,3,4,9,11,13,2,13,4,4,8,30,13,1,5,8,7,15,10,5,6,2,11,12,12,6,2,1,11,7,7,5,9,1,12,10,6,3,3,2,4,6,8,1,11,10,5,12,7,8,10,13,
打印玩家a的手牌
3,9,9,3,4,9,11,13,2,13,4,4,8,30,13,1,5,8,7,15,10,5,6,2,11,12,12,
打印玩家b的手牌
6,2,1,11,7,7,5,9,1,12,10,6,3,3,2,4,6,8,1,11,10,5,12,7,8,10,13,
----------游戏开始---------------
A出牌:3
B出牌:6
A出牌:9
B出牌:2
A出牌:9
打印出牌中该玩家吃牌序列
9,2,9,
A出牌:3
打印出牌中该玩家吃牌序列
3,6,3,
A出牌:4
B出牌:1
A出牌:9
B出牌:11
A出牌:11
打印出牌中该玩家吃牌序列
11,11,
A出牌:13
B出牌:7
A出牌:2
B出牌:7
打印出牌中该玩家吃牌序列
7,2,7,
B出牌:5
A出牌:13
打印出牌中该玩家吃牌序列
13,5,13,
A出牌:4
打印出牌中该玩家吃牌序列
4,1,9,4,
A出牌:4
B出牌:9
A出牌:8
B出牌:1
A出牌:30
B出牌:12
A出牌:13
B出牌:10
A出牌:1
打印出牌中该玩家吃牌序列
1,30,12,13,10,1,
A出牌:5
B出牌:6
A出牌:8
打印出牌中该玩家吃牌序列
8,5,6,8,
A出牌:7
B出牌:3
A出牌:15
B出牌:3
打印出牌中该玩家吃牌序列
3,15,3,
B出牌:2
A出牌:10
B出牌:4
打印出牌中该玩家吃牌序列
4,9,7,2,10,4,
B出牌:6
A出牌:5
B出牌:8
A出牌:6
打印出牌中该玩家吃牌序列
6,5,8,6,
A出牌:2
B出牌:1
A出牌:11
B出牌:11
打印出牌中该玩家吃牌序列
11,11,
B出牌:10
A出牌:12
B出牌:5
A出牌:12
打印出牌中该玩家吃牌序列
12,5,12,
A出牌:9
B出牌:12
A出牌:2
打印出牌中该玩家吃牌序列
2,1,10,9,12,2,
A出牌:9
B出牌:7
A出牌:3
B出牌:8
A出牌:6
B出牌:10
A出牌:3
打印出牌中该玩家吃牌序列
3,8,6,10,3,
A出牌:11
B出牌:13
A出牌:11
打印出牌中该玩家吃牌序列
11,13,11,
A出牌:13
B出牌:7
打印出牌中该玩家吃牌序列
7,13,7,
B出牌:2
A出牌:5
B出牌:7
A出牌:13
B出牌:3
A出牌:4
B出牌:15
A出牌:1
B出牌:3
打印出牌中该玩家吃牌序列
3,4,15,1,3,
B出牌:4
A出牌:9
打印出牌中该玩家吃牌序列
9,2,5,7,13,4,9,
A出牌:4
B出牌:9
A出牌:1
B出牌:7
A出牌:30
B出牌:2
A出牌:12
B出牌:10
A出牌:13
B出牌:4
打印出牌中该玩家吃牌序列
4,9,1,7,30,2,12,10,13,4,
B出牌:11
A出牌:10
B出牌:11
打印出牌中该玩家吃牌序列
11,10,11,
B出牌:7
A出牌:1
B出牌:13
A出牌:8
B出牌:7
打印出牌中该玩家吃牌序列
7,1,13,8,7,
B出牌:3
A出牌:5
B出牌:4
A出牌:6
B出牌:15
A出牌:8
B出牌:1
A出牌:6
打印出牌中该玩家吃牌序列
6,15,8,1,6,
A出牌:5
打印出牌中该玩家吃牌序列
5,4,5,
A出牌:8
B出牌:3
打印出牌中该玩家吃牌序列
3,8,3,
B出牌:4
A出牌:6
B出牌:9
A出牌:12
B出牌:1
A出牌:5
B出牌:7
A出牌:12
打印出牌中该玩家吃牌序列
12,1,5,7,12,
A出牌:2
B出牌:30
A出牌:1
B出牌:2
打印出牌中该玩家吃牌序列
2,30,1,2,
B出牌:12
A出牌:10
B出牌:10
打印出牌中该玩家吃牌序列
10,10,
B出牌:13
A出牌:9
打印出牌中该玩家吃牌序列
9,12,13,9,
A出牌:12
B出牌:4
打印出牌中该玩家吃牌序列
4,6,12,4,
B出牌:11
A出牌:2
B出牌:10
A出牌:3
B出牌:11
打印出牌中该玩家吃牌序列
11,2,10,3,11,
B出牌:7
A出牌:8
B出牌:1
A出牌:6
B出牌:13
A出牌:10
B出牌:8
打印出牌中该玩家吃牌序列
8,1,6,13,10,8,
B出牌:7
打印出牌中该玩家吃牌序列
7,7,
B出牌:3
A出牌:3
打印出牌中该玩家吃牌序列
3,3,
A出牌:11
B出牌:8
A出牌:13
B出牌:3
A出牌:11
打印出牌中该玩家吃牌序列
11,8,13,3,11,
A出牌:9
B出牌:2
A出牌:2
打印出牌中该玩家吃牌序列
2,2,
A出牌:5
B出牌:30
A出牌:7
B出牌:1
A出牌:13
B出牌:2
A出牌:4
B出牌:10
A出牌:9
打印出牌中该玩家吃牌序列
9,5,30,7,1,13,2,4,10,9,
A出牌:6
B出牌:10
A出牌:15
B出牌:4
A出牌:8
B出牌:6
打印出牌中该玩家吃牌序列
6,10,15,4,8,6,
B出牌:12
A出牌:1
B出牌:4
A出牌:6
B出牌:11
A出牌:5
B出牌:2
A出牌:4
打印出牌中该玩家吃牌序列
4,6,11,5,2,4,
A出牌:5
B出牌:10
A出牌:12
打印出牌中该玩家吃牌序列
12,1,5,10,12,
A出牌:1
B出牌:3
A出牌:5
B出牌:11
A出牌:7
B出牌:8
A出牌:12
B出牌:1
打印出牌中该玩家吃牌序列
1,3,5,11,7,8,12,1,
B出牌:6
A出牌:9
B出牌:13
A出牌:12
B出牌:10
A出牌:13
打印出牌中该玩家吃牌序列
13,12,10,13,
A出牌:9
打印出牌中该玩家吃牌序列
9,9,
A出牌:3
B出牌:8
A出牌:3
打印出牌中该玩家吃牌序列
3,8,3,
A出牌:11
B出牌:7
A出牌:8
B出牌:7
打印出牌中该玩家吃牌序列
7,8,7,
B出牌:6
打印出牌中该玩家吃牌序列
6,11,6,
B出牌:10
A出牌:13
B出牌:15
A出牌:3
B出牌:4
A出牌:11
B出牌:8
A出牌:2
B出牌:6
A出牌:2
打印出牌中该玩家吃牌序列
2,6,2,
A出牌:9
B出牌:1
A出牌:5
B出牌:3
打印出牌中该玩家吃牌序列
3,4,11,8,9,1,5,3,
B出牌:5
A出牌:30
B出牌:11
A出牌:7
B出牌:7
打印出牌中该玩家吃牌序列
7,7,
B出牌:8
A出牌:1
B出牌:12
A出牌:13
打印出牌中该玩家吃牌序列
13,15,5,30,11,8,1,12,13,
A出牌:2
B出牌:1
A出牌:4
B出牌:7
A出牌:10
打印出牌中该玩家吃牌序列
10,2,1,4,7,10,
A出牌:9
B出牌:8
A出牌:4
B出牌:7
A出牌:6
B出牌:6
打印出牌中该玩家吃牌序列
6,6,
B出牌:11
A出牌:11
打印出牌中该玩家吃牌序列
11,11,
A出牌:5
B出牌:6
A出牌:2
B出牌:3
A出牌:4
打印出牌中该玩家吃牌序列
4,7,5,6,2,3,4,
A出牌:12
B出牌:4
A出牌:1
B出牌:11
A出牌:5
B出牌:8
打印出牌中该玩家吃牌序列
8,12,4,1,11,5,8,
B出牌:9
打印出牌中该玩家吃牌序列
9,9,
B出牌:1
A出牌:10
B出牌:5
A出牌:12
B出牌:3
A出牌:13
B出牌:7
A出牌:12
打印出牌中该玩家吃牌序列
12,3,13,7,12,
A出牌:10
打印出牌中该玩家吃牌序列
10,5,10,
A出牌:13
B出牌:7
A出牌:9
B出牌:6
A出牌:9
打印出牌中该玩家吃牌序列
9,6,9,
A出牌:3
B出牌:6
A出牌:8
B出牌:8
打印出牌中该玩家吃牌序列
8,8,
B出牌:12
A出牌:3
打印出牌中该玩家吃牌序列
3,6,12,3,
A出牌:2
B出牌:4
A出牌:6
B出牌:1
打印出牌中该玩家吃牌序列
1,13,7,2,4,6,1,
B出牌:11
A出牌:2
B出牌:5
A出牌:13
B出牌:8
A出牌:15
B出牌:9
A出牌:5
打印出牌中该玩家吃牌序列
5,13,8,15,9,5,
A出牌:30
B出牌:9
A出牌:11
打印出牌中该玩家吃牌序列
11,2,30,9,11,
A出牌:8
B出牌:8
打印出牌中该玩家吃牌序列
8,8,
B出牌:8
A出牌:1
B出牌:1
打印出牌中该玩家吃牌序列
1,1,
B出牌:13
A出牌:12
B出牌:7
A出牌:13
打印出牌中该玩家吃牌序列
13,12,7,13,
A出牌:10
B出牌:2
A出牌:2
打印出牌中该玩家吃牌序列
2,2,
A出牌:1
B出牌:4
A出牌:4
打印出牌中该玩家吃牌序列
4,4,
A出牌:7
B出牌:6
A出牌:10
打印出牌中该玩家吃牌序列
10,1,7,6,10,
A出牌:11
B出牌:1
A出牌:11
打印出牌中该玩家吃牌序列
11,1,11,
A出牌:4
B出牌:8
打印出牌中该玩家吃牌序列
8,4,8,
B出牌:8
A出牌:7
B出牌:1
A出牌:5
B出牌:1
打印出牌中该玩家吃牌序列
1,5,1,
B出牌:8
打印出牌中该玩家吃牌序列
8,7,8,
B出牌:4
A出牌:6
B出牌:8
A出牌:2
B出牌:1
A出牌:3
B出牌:5
A出牌:4
打印出牌中该玩家吃牌序列
4,6,8,2,1,3,5,4,
A出牌:12
B出牌:1
A出牌:3
B出牌:8
A出牌:13
B出牌:7
A出牌:7
打印出牌中该玩家吃牌序列
7,7,
A出牌:12
打印出牌中该玩家吃牌序列
12,1,3,8,13,12,
A出牌:10
B出牌:8
Game Over! 恭喜A玩家!


posted on 2016-05-06 22:12  白于空  阅读(390)  评论(0编辑  收藏  举报