• 拖板车游戏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]+"	");
            }
                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("	"+"	"+"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("	"+"	"+"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玩家!


  • 相关阅读:
    数列变形中隐含条件的指向作用
    有效挖掘题目中的隐含条件[高阶辅导]
    三角模板函数使用示例
    【Machine Learning in Action --2】K-近邻算法构造手写识别系统
    【Machine Learning in Action --2】K-近邻算法改进约会网站的配对效果
    Python使用os.listdir()函数来获得目录中的内容
    【python问题系列--1】SyntaxError:Non-ASCII character 'xe5' in file kNN.py on line 2, but no encoding declared;
    【Python爬虫实战--1】深入理解urllib;urllib2;requests
    Centos7下安装numpy+matplotlib+scipy
    【Machine Learning in Action --1】机器学习入门指南
  • 原文地址:https://www.cnblogs.com/actanble/p/6713465.html
Copyright © 2020-2023  润新知