728x90
Card.java (goodee.vo 패키지 안에 존재)
package goodee.vo;
public class Card {
public int num; // 1 ~ 13 (K, Q, J 는 13, 12, 11로 처리, A는 1로 처리함)
public String kind; // 4가지 : spade, diamond, heart, clover
}
cardPlayForm.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>cardPlayForm</title>
</head>
<body>
<h1>블랙잭</h1>
<table>
<tr>
<td>
<img src="<%=request.getContextPath()%>/img/cardback.png">
</td>
<td>
<!-- 몇명이 게임을 하는지 선택하고 버튼을 누르면 cardPlayAction.jsp로 넘어감 -->
<form action="<%=request.getContextPath()%>/cardPlayAction.jsp" method="post">
<input type="radio" name="count" value="2"> 2명
<input type="radio" name="count" value="3"> 3명
<input type="radio" name="count" value="4"> 4명
<button type="submit">play</button>
</form>
</td>
</tr>
</table>
</body>
</html>
cardPlayAction.jsp (누가 이겼는지 알고리즘 추가 완료하고, 다시 수정해놓기!)
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ page import="goodee.vo.Card" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>cardPlayAction</title>
</head>
<body>
<%
// 0.
final int cardCount = 3; // 블랙잭 : 한 사람당 카드를 3장씩 나눠줌, 바뀌지 않는 수는 변수보다는 상수로 처리함 (final~)
// 1. 수집
int playerCount = Integer.parseInt(request.getParameter("count")); // cardPlayForm.jsp에서 선택한 참여자 수를 받아옴 (문자열을 정수로 변환)
System.out.println(playerCount); // 디버깅
// 2. 처리
Card[] deck = new Card[52]; // Card 클래스의 정보를 deck이라는 변수에 배열값으로 52개를 저장할 것이다.
for(int i=0; i<deck.length; i++) {
deck[i] = new Card(); // 0 ~ 51번째까지 52장의 카드를 배열값으로 저장
// 카드 번호
deck[i].num = (i % 13) + 1; // i를 13으로 나눈 나머지 값의 1을 더하면 해당 카드번호(num)가 나옴, i번째 deck의 num에 복사
/*
0 1
1 2
2 3
3 4
10 11
11 12
17 18
51 52
*/
// 카드 무늬 (spade, diamond, heart, clover 순서대로 나오게 함)
if(i / 13 == 0) {
deck[i].kind = "spade";
} else if(i / 13 == 1) {
deck[i].kind = "diamond";
} else if(i / 13 == 2) {
deck[i].kind = "heart";
} else {
deck[i].kind = "clover";
}
}
/*
for(Card c : deck) {
System.out.print(c.num+c.kind+", ");
}
*/
for(int i=0; i<10000; i++) { // 카드를 1만번 섞어줌 (셔플 알고리즘)
int r = (int)(Math.random() * 52); // 0 ~ 51번째 카드 중에서 무작위로 뽑아주는 메소드(Math.random), int로 형변환
// 두 개를 바꾸는 스왑 알고리즘 (완전히 이해는 X)
Card temp = deck[0]; // temp라는 변수에 deck[0]값 저장
deck[0] = deck[r];
deck[r] = temp;
}
/*
for(Card c : deck) {
System.out.print(c.num+c.kind+", ");
}
System.out.println();
*/
// 3. 출력
%>
<div>
<%
for(int i=0; i<cardCount*playerCount; i++) { // 나눠주는 카드의 총 개수는 10, 15, 20개 (참여자가 2명, 3명, 4명일 때)
%>
<img src="<%=request.getContextPath()%>/img/<%=deck[i].kind+deck[i].num%>.jpg">
<div><%=%></div>
<%
if((i+1) % cardCount == 0) { // 블랙잭은 3, 3으로 나눴을 때 나머지가 0이 되면 다음 행으로 넘어가게 하는 구문
%>
</div><div>
<%
}
}
%>
</div>
</body>
</html>
반응형
'Java' 카테고리의 다른 글
slf4j, log4j, logback에 대해 알아보기 (0) | 2022.01.18 |
---|---|
Collection(컬렉션)에 대해서 (0) | 2022.01.14 |
업무 중에 알게 된 inputStream, outputStream (0) | 2021.12.01 |
210318 static 메소드 (0) | 2021.03.18 |
210317 java 문법 (카드게임 만들기) (0) | 2021.03.17 |
댓글