Heim  >  Artikel  >  Java  >  So implementieren Sie das Zha Jinhua-Spiel mit Code

So implementieren Sie das Zha Jinhua-Spiel mit Code

零下一度
零下一度Original
2017-06-26 14:10:302363Durchsuche

Für ein kleines Spiel wie Zha Jinhua möchte ich Programmierer werden. Die meisten von ihnen haben es schon als Kinder gespielt! Werfen wir nun einen Blick auf diese Sohu-Interviewfrage! Erfahren Sie, wie Sie Code zur Implementierung von Zha Jinhua verwenden.


Q-Frage

Ursache

两个搜狐的程序员加了一个月班,终于放假了,于是他们决定扎金花渡过愉快的假期 。

Spielregeln:

Insgesamt 52 gewöhnliche Karten, eine von 2, 3, 4, 5, 6, 7, 8, 9, 10, J, Q, K, A, in zunehmender Größe, vier Jeder zieht drei Karten. Die beiden Personen vergleichen die drei Karten auf ihren Händen und die Person mit der größeren Karte gewinnt.

Die Regeln für Kartentypen lauten wie folgt:

  • Drei Karten, die gleich sind sind Leoparden

  • 2. Drei miteinander verbundene Karten bilden eine Straße (A23 zählt nicht als Straße)

  • 3. Es gibt nur zwei Karten, die das gleiche Paar sind. Wenn die Kartentypen gleich sind, vergleichen Sie die Kartentypwerte (z. B. AAA> KKK). , QAK>534, QQ2> ;10104) Wenn keiner der Spieler einen speziellen Kartentyp hat, vergleichen Sie nacheinander die höchste der drei Karten. Die Person mit der größeren Karte gewinnt. Wenn die höchsten Karten gleich sind, wird die zweithöchste Karte verglichen und so weiter (z. B. 37K>89Q). Wenn die beiden Karten gleich sind, kommt es zu einem Unentschieden.

Eingabebeschreibung:

输入两个字符串代表两个玩家的牌(如”10KQ” “354”),
先输入的作为玩家1,后输入的作为玩家2

Ausgabebeschreibung:

 1 代表 玩家1赢     
 0 代表 平局   
 -1 代表 玩家2赢 
 -2 代表不合法的输入

Eingabebeispiel:

KQ3 3Q9
10QA 6102
5810 7KK
632 74J
10102 K77
JKJ 926
68K 27A

Ausgabebeispiel:

1
1
-1
-1
1
1
-1

Eine Lösung

1. Logische Analyse

  • (1) Holen Sie sich die von den Spielern 1 und 2 eingegebenen Zeichenfolgen und bestimmen Sie, ob sie legal sind

  • (2) Nachdem es zulässig ist, teilen Sie den String in ein String-Array auf

  • (3) Konvertieren Sie das String-Array in ein Int-Array und sortieren Sie

  • (4) Bestimmen Sie die Gleichheit von 3 Karten

  • (5) Vergleichen Sie Groß und Klein, wer verliert und wer gewinnt

2. Schwierigkeitsanalyse

  • Wenn es 10 gibt, ist das Problem der Saitenaufteilung: Die Aufteilung kann anhand der Länge der Saite beurteilt werden

  • Buchstaben in Zahlen umwandeln: Wandeln Sie zunächst alle Zeichenfolgen, die Sie erhalten, in Großbuchstaben um, sodass Klein- und Großbuchstaben gleich sind, und verwenden Sie dann einfach if, um die Rückgabe zu beurteilen

  • Vergleichen Sie, wer verliert und wer gewinnt: Vergleichen Sie von groß nach klein, beurteilen Sie zuerst, ob es einen Leoparden gibt, dann beurteilen Sie, ob es eine Straße gibt, dann beurteilen Sie das Paar und schließlich beurteilen Sie, ob es keinen Kartentyp gibt

  • Verarbeitung von Geraden

3. Code-Implementierung

package 搜狐面试2016;

import java.util.Arrays;
import java.util.Scanner;

public class Test1 {
    public static void main(String[] args) {
        // 2,3,4,5,6,7,8,9,10,J,Q,K,A
        Scanner scanner = new Scanner(System.in);
        boolean isContinue=true;
        while (isContinue) {
            //1.游戏规则
            System.out.println("游戏规则:共52张普通牌,牌面为2,3,4,5,6,7,8,9,10,J,Q,K,A之一,大小递增,各四张; 每人抓三张牌。两人比较手中三张牌大小,大的人获胜。");
            System.out.println("对于牌型的规则如下:");
            System.out.println("1.三张牌一样即为豹子");
            System.out.println("2.三张牌相连为顺子(A23不算顺子)");
            System.out.println("3.有且仅有两张牌一样为对子 豹子>顺子>对子>普通牌型 在牌型一样时,比较牌型数值大小");
            System.out.println("谁输谁赢:1 --代表玩家1赢;0 --代表 平局   ;-1 --代表玩家2赢 ;-2 --代表不合法的输入");
             
            //2.分别出牌
            System.out.println("请玩家1出牌:");
            String num1 = scanner.next();
            System.out.println("请玩家2出牌:");
            String num2 = scanner.next();
            
            //3.判断是否合法
            boolean flag=isValid(num1, num2);
            if(!flag){
                //不合法
                System.out.println("-2");
            }else {
                //输入合法---先拆分字符串---再转化为int数组
                //4.拆分字符串
                String[] nums1=getStrArray(num1);
                String[] nums2=getStrArray(num2);
                System.out.println("拆分后的字符串数组A:"+Arrays.toString(nums1));
                System.out.println("拆分后的字符串数组B:"+Arrays.toString(nums2));
                
                //5.转化为int数组
                int[] nums11=strToNumber(nums1);
                int[] nums22=strToNumber(nums2);
                System.out.println("转化为int后的数组A:"+Arrays.toString(nums11));
                System.out.println("转化为int后的数组B:"+Arrays.toString(nums22));
                
                //6.获得三张牌的相等情况
                int[] equalNum11=equalNum(nums11);
                int[] equalNum22=equalNum(nums22);
                System.out.println("三张牌的相等情况--数组A:"+Arrays.toString(equalNum11));
                System.out.println("三张牌的相等情况--数组B:"+Arrays.toString(equalNum22));
                
                //7.判断输赢
                int whoWin=whoWin(equalNum11, nums11, equalNum22, nums22);
                System.out.println(""+whoWin);
                
            }
            
            //是否继续
            System.out.println("是否继续?输入N或n退出,其他任意键继续!");
            String string = scanner.next();
            string=string.toUpperCase();
            if("N".equals(string)){
                isContinue=false;
            }
        }

    }

    /*1.判断输入的内容是否合法
     *          不合法两种情况:(1)出现的字符不是2,3,4,5,6,7,8,9,10,J,Q,K,A
                                (2)每种牌只有4张,超过4张则不合法了
     *方法说明:
     *该方法只处理情况(1),情况(2)放在判断输赢的时候处理,因为第二种情况涉及牌面转化后计算的问题*/
    public static boolean isValid(String num1, String num2) {
        String reg = "([2-9JQKA]|10){3}";// 正则匹配,只能出现2,3,4,5,6,7,8,9,10,J,Q,K,A,并且一共只能出现3次
        boolean a = num1.matches(reg);
        boolean b = num2.matches(reg);

        // 有一方不合法就返回false
        if (a == false || b == false) {
            return false;
        } else {
            // 都合法
            return true;
        }
    }

    // 1.拆分字符串,得到三个数字
    public static String[] getStrArray(String num) {
        // 字符串的长度和拆分后的数组
        int length = num.length();
        String[] nums = new String[3];
        // 无论输入的J,Q,K,A是否为大写,都改为大写
        num.toUpperCase();

        // 字符串不含10时,长度都为3
        if (length == 3) {
            // nums=num.split("");//使用该方法拆分会多出一个空格位--比如33a-->[,3,3,1]
            for (int i = 0; i  2) {
                nums[0] = nums[2] = "10";
                nums[1] = num.substring(2, 3);
            } else {
                // 两个1距离等于2时,说明两个10是挨在一起的
                if (first == 0) {
                    nums[0] = nums[1] = "10";
                    nums[2] = num.substring(4);
                } else {
                    nums[0] = num.substring(0, 1);
                    nums[1] = nums[2] = "10";
                }
            }

        } else {
            // 字符串为3个10
            for (int i = 0; i  b[1]) {
                return 1;
            } else if (a[1]  primaryB[0]) {
                    return 1;
                } else if (primaryA[0]  b[1]) {
                        return 1;
                    } else if (a[1]  thirdB) {
                            return 1;
                        } else if (thirdA  primaryB[2]) {
                        return 1;
                    } else if (primaryA[2]  primaryB[1]) {
                            return 1;
                        } else if (primaryA[1]  primaryB[0]) {
                                return 1;
                            } else if (primaryA[0] <h2><strong>Ausführen der Test</strong></h2> <p><strong>Unzulässige Länge</strong><br><img src="https://img.php.cn/upload/article/000/000/001/383c341ff337c87b48f4468a5b9909cf-0.png" alt="So implementieren Sie das Zha Jinhua-Spiel mit Code"></p><p><strong>Eine einzelne Karte 6 erscheint 5 Mal, was illegal ist</strong><br><img src="https://img.php.cn/upload/article/000/000/001/112731fc5aabcfefb7340343c06be2b1-1.png" alt="So implementieren Sie das Zha Jinhua-Spiel mit Code"></p><p><strong>Leopard</strong><br><img src="https://img.php.cn/upload/article/000/000/001/112731fc5aabcfefb7340343c06be2b1-2.png" alt="So implementieren Sie das Zha Jinhua-Spiel mit Code"></p><p><strong>Gerade und Paar</strong><br><img src="https://img.php.cn/upload/article/000/000/001/112731fc5aabcfefb7340343c06be2b1-3.png" alt="So implementieren Sie das Zha Jinhua-Spiel mit Code"></p><p> <strong> sind beide Buchstaben, eine Gerade und ein Paar </strong><br><img src="https://img.php.cn/upload/article/000/000/001/4d65838ea7c1c524e17fdc04439ab32c-4.png" alt="So implementieren Sie das Zha Jinhua-Spiel mit Code"></p><p><strong> erscheinen 10, zwei Geraden </strong><br><img src="https://img.php.cn/upload/article/000/000/001/4d65838ea7c1c524e17fdc04439ab32c-5.png" alt="So implementieren Sie das Zha Jinhua-Spiel mit Code"></p><p> <strong> beide Kein Kartentyp, vergleichen Sie direkt die Größe</strong><br><img src="https://img.php.cn/upload/article/000/000/001/4d65838ea7c1c524e17fdc04439ab32c-6.png" alt="So implementieren Sie das Zha Jinhua-Spiel mit Code"></p>

Das obige ist der detaillierte Inhalt vonSo implementieren Sie das Zha Jinhua-Spiel mit Code. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Vorheriger Artikel:Mybatis-bezogene EinstellungenNächster Artikel:Mybatis-bezogene Einstellungen