자바 초보자는 4일 동안 포커 게임을 만든다(3일)

7727 단어 Java

동기와 목적


자바에 대해 좀 알고 싶어요. 6/21부터 공부를 시작했어요.
6월 21일 프로게이트에서 자바의 기초 지식을 배워서 출력하고 싶어요.
뭘 해도 좋지만, 나는 내가 사랑하는 정신 운동인 텍사스 홀덤을 해 보고 싶다.
취업을 위해 수출원의 목적과 일기의 의미를 높이기 위해 학습의 궤적을 기록하기로 했다.

예약하다


1일차: progate를 통한 Java 이해(할애)
2, 3일: 설치 (완료!)
4일차: 대상에 따라 코드 조정(안 될 수도 있음)

설치 기능(단순하고 단순화됨)


어제
카드를 나눠주고 트리거의 동작을 결정합니다.
그래서 만들었어요.
나머지
트리거, 뒤집기, 역방향 운동
손의 강약, 캐릭터의 결정
all-in,fold 등의 처리
네, 그렇습니다.

손의 강약


가장 골치 아픈 손 역할의 결정부터
또 간단하기 때문에 이번에는 플래시와 생머리를 설치하지 않았다.그리고 가장 약한 카드는 2가 아니라 A입니다. 용서해 주세요.고려는 다음과 같다.

어제에 이어 배열에 표지를 채워서 드디어 이루어졌다.

  public static int[] handRank(int array[]) {

      int count[] = {0,0,0,0,0,0,0,0,0,0,0,0,0};

        for(int i : array) {
            count[i-1] = count[i-1] + 1;
        }
        int hand[] = new int[6];
        int newCount[] = count.clone();
        int pairNumber1;
        int pairNumber2;
        Arrays.sort(newCount);
        if(newCount[12] == 1) {
            //System.out.println("hicard");
            Arrays.sort(array);
            System.arraycopy(array, 2, hand, 0, 5);
            return hand;
        }else if(newCount[12] == 2 && newCount[11] == 1) {
            //System.out.println("pair");
            pairNumber1 = handNumber(count, 2).get(0);   
            pairHand(array, pairNumber1, hand);
            return hand;
        }else if(newCount[12] == 2 && newCount[11] == 2) {
            //System.out.println("two-pair");
            pairNumber1 = handNumber(count, 2).get(0); 
            pairNumber2 = handNumber(count, 2).get(1);
            twoPairHand(array, pairNumber1,pairNumber2, hand);
            return hand;
        }else if(newCount[12] == 3 && newCount[11] == 1) {
            //System.out.println("three-card");
            pairNumber1 = handNumber(count, 3).get(0);   
            threePairHand(array, pairNumber1, hand);
            return hand;
        }else if(newCount[12] == 3 && newCount[11] == 2 || newCount[11] == 3) {
            //System.out.println("full-house");
            pairNumber1 = handNumber(count, 3).get(0); 
            pairNumber2 = handNumber(count, 2).get(0);
            fullHouseHand(pairNumber1, pairNumber2, hand);
            return hand;
        }else if(newCount[12] == 4) {
            //System.out.println("four-card");
            pairNumber1 = handNumber(count, 4).get(0);
            fourCard(array, pairNumber1, hand);
            return hand;
        }
        return hand;
    }
각 지점 내의 방법 중 7장 중 5장을 선택하여 가장 강한 카드를 만들어 핸드에 저장하는 처리를 한다.
우선 짝짓기 등 유용한 숫자를 넣고 나머지는 숫자의 크기에 따라 순서대로 넣는다.
    public static void twoPairHand(int array[], int pairNumber1, int pairNumber2, int hand[]) {
        Arrays.sort(array);
        int handNum = 0;
        int i = 6;
        while(handNum < 1) {
            if(array[i] != pairNumber1 && array[i] != pairNumber2) {
                hand[handNum] = array[i];
                i --;
                handNum ++;
            }else {
                i --;
            }
        }

트리거, 뒤집기, 역방향 운동


intlist[]에 접는 표지와 전입 표지를 추가했습니다. 만약 그들이 서 있다면 거리를 뛰어넘어 갑자기 내려가게 합니다.
        int list[] = {1000,1000,0,0,0,0};

        //[0] herochip(自分)/
        //[1] enemychip(相手)/
        //[2] pot/
        //[3] needChiptoCall
        //[4]foldFlag                      
        //===foldFlag===
            // 0 foldしてない
            // 1 heroがfold
            // 2 enemy がfold

        //[5]alInFlag
        //===allInFlag===
            // 0 allinしてない
            // 1 heroがallin
            // 2 enemy がallin
street 방법은 거리에서 자신의 동작, 상대방의 동작을 처리하는 것을 포함한다.
             //プリフロップの処理

            street(hero, list, scan);


                //ターン、リバーの処理

            //フロップ3枚追加
            if(list[4] == 0 && list[5] == 0) {
                System.out.println("フロップは" + toDescription(holeCard.get(0)) + toDescription(holeCard.get(1)) +toDescription(holeCard.get(2)) +  "です");
                street(hero, list, scan);
            }



            //ターン
            if(list[4] == 0 && list[5] == 0) {

                System.out.println("ターンカードは" + toDescription(holeCard.get(3)) + "です。ホールカードは"+ toDescription(holeCard.get(0)) + toDescription(holeCard.get(1)) +toDescription(holeCard.get(2)) +toDescription(holeCard.get(3)) +  "です");
                street(hero, list, scan);
            }

            //リバー
            if(list[4] == 0 && list[5] == 0) {

                System.out.println("リバーカードは" + toDescription(holeCard.get(4)) + "です。ホールカードは"+ toDescription(holeCard.get(0)) + toDescription(holeCard.get(1)) +toDescription(holeCard.get(2)) +toDescription(holeCard.get(3)) + toDescription(holeCard.get(4)) + "です");
                street(hero, list, scan);
            }

                //ショーダウン。勝敗の決定
            if(list[4] == 1) {//heroが降りた時
                System.out.println("enemyは"+list[2]+"$のチップを獲得しました" );
                list[1] = list[1] + list[2];
                list[2] = 0;
                list[3] = 0;
                list[4] = 0;
            }else if(list[4] == 2) {
                System.out.println("heroは"+list[2]+"$のチップを獲得しました" );
                list[0] = list[0] + list[2];
                list[2] = 0;
                list[3] = 0;
                list[4] = 0;

            }else {
                int herorole[] = showdown(hero, holeCard);
                int enemyrole[] = showdown(enemy, holeCard);

                System.out.println("ショウダウンです。ホールカードは"+ toDescription(holeCard.get(0)) + toDescription(holeCard.get(1)) +toDescription(holeCard.get(2)) +toDescription(holeCard.get(3)) + toDescription(holeCard.get(4)) + "です");
                System.out.println("hero : " + toDescription(hero.get(0)) + toDescription(hero.get(1)) + role(herorole[5]));
                System.out.println("enemy : " + toDescription(enemy.get(0)) + toDescription(enemy.get(1)) + role(enemyrole[5]));
                checkWinner(herorole, enemyrole, list);
            }

실행 결과


한 손이면 끝나지만 어떤 칩이든 0이 될 때까지 게임은 계속된다.
세션 시작!구드락!
======== 첫 번째 손 =========
너의 손♣팔♣사
네가 가지고 있는 팁은 1000위안이다.상대방이 가지고 있는 팁은 1000입니다.
보온병
동작 선택 check:c orbet:b
b
얼마예요?최대 1000

10달러 잤어요.
ememy의 가격이 20달러까지 떨어졌다.
너의 손♣팔♣사
네가 가지고 있는 팁은 990이다.상대방이 보유한 팁은 980이다
보온병은 30.
동작 콜:corraise:r or fold:f를 선택하십시오.
c
전화했어.
우리는 다음 길로 간다
응결파♥이♦팔♥삼
너의 손♣팔♣사
네가 가지고 있는 팁은 980이다.상대방이 보유한 팁은 980이다
보온병은 40입니다.
동작 선택 check:c orbet:b
b
얼마예요?최대 980
980
Allin
980침대
enemy 콜했어.올인입니다.
우리는 다음 길로 간다
다음 정거장.호르카포♥이♦팔♥삼♣십♥제이
hero : ♣팔♣4쌍
enemy : ♦칠♠7쌍
승자는 히어로!역할은 한 쌍, 계기는 8.
hero가 2000의 팁을 받았어요.
게임이 끝났습니다.고생하셨습니다.

마지막


배열도 요소에서 색인을 꺼낼 수 없으니 사용하기가 불편하지 않을까 생각합니다.우선 명단을 사용하는 것이 좋습니까?
600줄이 넘는 코드를 단숨에 쓴 것은 처음이어서 매우 힘들었다.해설이 적절해졌다.한 달 뒤에 돌아봐도 전혀 이해가 안 되죠?
하지만 많이 간소화됐다고 하지만 그저께 헬로월드를 만들었던 내가 할 수 있는 게 감동적이었다.만약 내일 대학의 과제가 순조롭게 소화된다면, 나는 대상을 대상으로 하는 작법을 배워서 다시 쓰고 싶다.
잘못 잤는데도 목이 아프다
그래도 큐타는 많이 읽혔는데... 뷰 수에 놀랐어요.
소스 코드는 다음과 같습니다.
https://github.com/hmck8625/poker/blob/master/poker.java

좋은 웹페이지 즐겨찾기