자바 초보자는 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
Reference
이 문제에 관하여(자바 초보자는 4일 동안 포커 게임을 만든다(3일)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/hmck/items/4c3a4dfa3554a5e8cef7텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)