본문 바로가기
Java

210318 카드게임 만들기

by 정ㅇr 2021. 3. 18.
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>

 

반응형

댓글