拖板车:就是两个玩家出牌。依次叠加,若出现与上面相同的牌,则收取到自己的排队,出牌,继续轮流。
例如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玩家!