黑马程序员技术交流社区

标题: 菜鸟写的斗地主程序 [打印本页]

作者: 何亚辉    时间: 2016-5-19 19:40
标题: 菜鸟写的斗地主程序
import java.util.Scanner;
class PlayCard {
        public static void main(String[] args) {
                        Scanner scr = new Scanner(System.in);
                System.out.println("欢迎来到年度最好玩的游戏:玉梅斗地主");       
                        while (true) {       
                                System.out.println("1, 开始游戏");
                System.out.println("2, 退出游戏");
                Scanner sc = new Scanner (System.in);
                int a = sc.nextInt();
                if (a==1) {
                                         char[] arr = {48,65,50,51,52,53,54,55,56,57,74,81,75,48,65,50,51,52,53,54,55,56,57,74,81,75,48,65,50,51,52,53,54,55,56,57,74,81,75,48,65,50,51,52,53,54,55,56,57,74,81,75,'大','小'};
                 char[] result = new char[54];
                        for (int j=0;j<=2 ;j++ ) {
                                result[j] = arr[(int)(arr.length* Math.random())];
                                arr= delete(arr, result[j]);
                        }
                        char target = arr[(int)(Math.random()*51)];
                        for (int j=3;j<=53 ;j++ ) {
                                result[j]=arr[(int)(arr.length* Math.random())];
                                arr= delete(arr, result[j]);
                        }
                                char[] p1 = new char[17];
                            char[] p2 = new char[17];
                            char[] p3 = new char[17];
                                        for (int i =0;i<=16 ;i++ ) {
                                p1[i]= result[i+3];
                               
                                }
                                        for (int i =0;i<=16 ;i++ ) {
                                p2[i]= result[i+20];
                                        }
                    for (int i =0;i<=16 ;i++ ) {
                                p3[i]= result[i+37];
                               
                             }                       
                                 Player[] py = new Player[3];
                                 Scanner sc3 = new Scanner(System.in);
                                 System.out.println("请设置您的名字");
                                 String str = sc3.nextLine();
                                 py[0] = new Player(str,p1);
                                py[0].showMyCard();
                                 py[1] = new Player("2号玩家",p2);
                                py[1].showMyCard();
                                 py[2] = new Player("3号玩家",p3);
                                py[2].showMyCard();

                                for (int i =0;i<=16 ;i++ ) {
                                if (p1[i]==target) {
                                        System.out.println("\n" + py[0].name + "你好,你有地主牌"+target +"请问你要叫地主吗? 请输入Yes or No");
                                        Scanner s0 = new Scanner(System.in);
                                        String st1 =s0.nextLine();
                                        if (st1.equals("Yes")) {
                                                        py[0].getAll(result);
                                                        py[0].finalCard(result);
                                                        py[0].showMyCard();
                                                        break;
                                        }else {
                                                py[1].callDZ(py, 1, result);
                                        break;
                                        }       
                                }
                                if (p2[i]==target) {
                                        int q = (int)(2* Math.random());
                                        if (q==1) {
                                                System.out.println("2号玩家有地主牌"+target+"并成为地主");
                                                        py[1].getAll(result);
                                                        py[1].finalCard(result);
                                                        py[1].showMyCard();
                                                        break;
                                        }else {
                                                System.out.println("2号玩家放弃当地主");
                                                py[2].callDZ(py, 2, result);
                                        break;
                                        }
                                }
                                if(p3[i]==target) {
                                int w = (int)(2*Math.random());
                                        if (w==1) {
                                                System.out.println("3号玩家有地主牌"+target+ "并成为地主");
                                                        py[2].getAll(result);
                                                        py[2].finalCard(result);
                                                        py[2].showMyCard();
                                                        break;
                                        }
                                        else {
                                                System.out.println("3号玩家放弃当地主");
                                                py[0].callDZ(py, 0, result);
                                        break;
                                        }
                                }
                        }
while (true) {
          py[0].outCard(py, 0);
        if (py[0].mycard.length==0) {
                System.out.println(py[0].name+ "赢了");
                System.out.print(py[1].name +"最后的牌为: ");
                for (int i =0;i<=py[1].mycard.length-1 ;i++ ) {
                        System.out.print(py[1].mycard[i]+"  ");
                }
                System.out.println();
                System.out.print(py[2].name +"最后的牌为: ");
                for (int i =0;i<=py[2].mycard.length-1 ;i++ ) {
                        System.out.print(py[2].mycard[i]+"  ");
                }
                System.out.println();               
                break;
        }       
        py[1].outCard(py, 1);
        if (py[1].mycard.length==0) {
                System.out.println(py[1].name+ "赢了");
                System.out.print(py[2].name +"最后的牌为: ");
                for (int i =0;i<=py[2].mycard.length-1 ;i++ ) {
                        System.out.print(py[2].mycard[i]+"  ");
                }
                System.out.println();
                System.out.print(py[0].name +"最后的牌为: ");
                for (int i =0;i<=py[0].mycard.length-1 ;i++ ) {
                        System.out.print(py[0].mycard[i]+" ");
                }
                System.out.println();
               
        break;
        }
        py[2].outCard(py, 2);
        if(py[2].mycard.length==0) {
                System.out.println(py[2].name+ "赢了");
                System.out.print(py[0].name +"最后的牌为: ");
                for (int i =0;i<=py[0].mycard.length-1 ;i++ ) {
                        System.out.print(py[0].mycard[i]+"  ");
                }
                System.out.println();
                System.out.print(py[1].name +"最后的牌为: ");
                for (int i =0;i<=py[1].mycard.length-1 ;i++ ) {
                        System.out.print(py[1].mycard[i]+"  ");
                }
                System.out.println();
                break;
        }
}
                }
                else {
                        System.out.println("谢谢使用,下次再见");
                break;
                }
                        }
        }
                public static char[] delete(char[]arr, char x){
                char[] a = new char[arr.length-1];
                int i =0;
                for (i =0;i<arr.length ;i++ ) {
                        if (arr[i]==x) {
                                break;
                        }
                }
                for (int j =0;j<arr.length-1 ; j++) {
                        if (j<i) {
                                a[j]=arr[j];
                        }else {
                        a[j]=arr[j+1];
                        }
                }
                return a;
        }
}
class Player {
        String name;
        char[] mycard ;
        static int rank=16;
        public Player(String name, char[] ch){
                this.name = name;
                mycard = ch;
        }
        public void showMyCard(){
               
        char[] standard = {'大','小','2','A','K','Q','J','0','9','8','7','6','5','4','3'};

for (int i =0;i<mycard.length-1 ;i++ ) {
        for (int j =mycard.length-1;j>i ;j-- ) {
                int k =0; int k1=0;
                for ( k=0;k<=14 ;k++ ) {
                        if (mycard[i]==standard[k]) {
                                break;
                        }
                }
                for (k1=0;k1<=14 ;k1++ ) {
                        if (mycard[j]==standard[k1]) {
                                break;
                        }
                }
                if (k>k1) {
                        char temp = mycard[i];
                        mycard[i]=mycard[j];
                        mycard[j] = temp;
                }
        }
}
               
if (!(name.equals("2号玩家"))&&!(name.equals("3号玩家"))) {
        System.out.print("\n" +"这是您的牌--");
        for (int i =0;i<=mycard.length-1 ;i++ ) {
        System.out.print(mycard[i]+"  ");
        try {
                Thread.sleep(100);
        }
        catch (Exception e) {
        }
}
System.out.println("\n");
}
        }       
        public void callDZ(Player[] py, int i,  char[] arr){
                if (!(name.equals("2号玩家"))&&!(name.equals("3号玩家"))) {
                                Scanner sc = new Scanner(System.in);
        System.out.println(name+ "您好,请问你要叫地主吗? 请输入Yes or No");
        String s = sc.nextLine();
        if (s.equals("Yes")) {
                getAll(arr);
                py[i].finalCard(arr);
                py[i].showMyCard();
                return;
        }else {
                System.out.println(py[(i+1)%3].name +"自动成为地主");
                py[(i+1)%3].getAll(arr);
                py[(i+1)%3].finalCard(arr);
                py[(i+1)%3].showMyCard();
        }       
        }
                else {
                        int q = (int)(2* Math.random());
                                        if (q==1) {
                                                System.out.print(py[i].name +"成为地主");
                                                        py[i].getAll(arr);
                                                        py[i].finalCard(arr);
                                                        py[i].showMyCard();
                                                        return;
                                        }
                                        else {
                                                System.out.println(py[i].name + "放弃成为地主");
                                                System.out.println(py[(i+1)%3].name +"自动成为地主");
                                py[(i+1)%3].getAll(arr);
                                py[(i+1)%3].finalCard(arr);
                                                py[(i+1)%3].showMyCard();
                                        }
                }
        }
                public void getAll( char[] arr){
                System.out.print("3张地主底牌是");
                for (int i=0;i<=2 ;i++ ) {
                        System.out.print(arr[i]+ "  ");
                }
                System.out.println();
        }

       


作者: 何亚辉    时间: 2016-5-19 19:42
public void outCard(Player[] p, int i ){
                if (!(name.equals("2号玩家"))&&!(name.equals("3号玩家"))) {
                        while (true) {
                        char[] standard = {'大','小','2','A','K','Q','J','0','9','8','7','6','5','4','3'};

                        for (int d=0;d<=14 ;d++ ) {
                        if (mycard[0]==standard[d]) {
                                if (d>=rank) {
                                        System.out.println(name+"没有比上家大的牌");
                                        return;
                                }
                        }
                }               
                Scanner s0 = new Scanner(System.in);
                System.out.print(name + "你要出第几张牌----0代表不要:  ");       
                int q =s0.nextInt();
                if (q==0) {
                        System.out.println();
                        return;
                       
                }
                        int w =0;
                for (w=0;w<standard.length  ; w++) {
                        if (mycard[q-1]==standard[w]) {
                                break;
                        }
                }
                int r =0;
                for (r=0;r<standard.length  ; r++) {
                        if (p[(i+1)%3].mycard[0]==standard[r]) {
                                break;
                        }
                }
                int m =0;
                for (m=0;m<standard.length  ; m++) {
                        if (p[(i+2)%3].mycard[0]==standard[m]) {
                                break;
                        }
                }
                if (w<=r&&w<=m) {
                        System.out.println(name+"-----打出一张"+ mycard[q-1]);
                        System.out.println(p[(i+1)%3].name + "没有更大的牌");
                        System.out.println(p[(i+2)%3].name + "没有更大的牌");

                        rank=16;
                mycard = nextMyCard(q);
                if (mycard.length==0) {
                        return;
                }
                showMyCard();
                continue;
                }
                if (w>= rank) {
                        System.out.println("你的牌没有上家大");
                        continue;
                }
                rank=w;
                System.out.println(name+"-----打出一张"+ mycard[q-1]);
                mycard = nextMyCard(q);
                showMyCard();
                return;
                }       
                }else {
                        while (true) {
                        char[] standard1 = {'大','小','2','A','K','Q','J','0','9','8','7','6','5','4','3'};
                        for (int d=0;d<=14 ;d++ ) {
                        if (mycard[0]==standard1[d]) {
                                if (d>=rank) {
                                        System.out.println(name+ "没有比上家大的牌");
                                        return;
                                }
                        }
                }       
                int x =(int)(mycard.length* Math.random())+1;
               
                        int f =0;
                for (f=0;f<standard1.length  ; f++) {
                        if (mycard[x-1]==standard1[f]) {
                                break;
                        }
                }                       
                int g =0;
                for (g=0;g<standard1.length  ; g++) {
                        if (p[(i+1)%3].mycard[0]==standard1[g]) {
                                break;
                        }
                }
                int h =0;
                for (h=0;h<standard1.length  ; h++) {
                        if (p[(i+2)%3].mycard[0]==standard1[h]) {
                                break;
                        }
                }
                if (f<=g&&f<=h) {
                        System.out.println(name+"-----打出一张"+ mycard[x-1]);
                        System.out.println(p[(i+1)%3].name + "没有更大的牌");
                        System.out.println(p[(i+2)%3].name + "没有更大的牌");
                        rank=16;
                mycard = nextMyCard(x);
                        if (mycard.length==0) {
                        return;
                }
                continue;
                }
                if (f >= rank) {
                        continue;
                }
                rank=f;
                System.out.println(name+"-----打出一张"+ mycard[x-1]);
                mycard = nextMyCard(x);
                return;
                }               
                }                       
        }
        public void finalCard(char[] arr){
                char[] ch1 = new char[20];
                for (int i =0;i<=19 ;i++ ) {
                        if (i<=16) {
                                ch1[i]=mycard[i];
                        }else {
                        ch1[i]= arr[i-17];
                        }
                }
                mycard = ch1;
        }
        public char[] nextMyCard(int f){
                 char[] temp2 = new char[mycard.length-1];
                 for (int e =0;e<mycard.length-1 ;e++ ) {
                        if (e<f-1) {
                                temp2[e]=mycard[e];
                        }else {
                        temp2[e]=mycard[e+1];
                        }
                }
                return temp2;
        }
}
作者: 一枚小程序员    时间: 2016-5-19 22:00
楼主好毅力
作者: Noodles.    时间: 2016-5-19 22:10
{:2_33:}  太腻害了
作者: 溪溪笑    时间: 2016-5-19 22:19
看一看。。。。。。。。。。。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2