개발자/Spring

[Spring] 간단한 UpDown 게임 구현

푸루닉 2022. 12. 27. 17:33

updown 게임.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ include file="header.jsp" %>

<form method="POST">
	<p><input 	type="number" 
				name="user" 
				placeholder="1 ~ 100" 
				min="1" max="100"
				required autofocus></p>
	<p><input type="submit"></p>
</form>

	<h3>당신의 답은 : ${param.user }이며, ${status } 해야 합니다.</h3>
	<h3>답은 : ${answer }</h3>
	
</body>
</html>

 

updown 게임 Controller

package com.itbank.controller;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;

import com.itbank.service.UpdownService;

@Controller	// 요청을 받아서, 응답을 만들어주는 기능
@RequestMapping("/updown")
public class UpDownController {
	
	// 맞는객체를 추론해서 자동으로 가져와준다.
	@Autowired private UpdownService updownService;
	// Autowired : 스프링 빈 간의 객체 의존성을 자동으로 주입해준다
	// DI : Dependency injection (의존 주입)
	// Auto DI : 자동 의존 주입
	
	@GetMapping
	public void updown() {			// 파라미터 없이 GET으로 접근하면
		updownService.initialize();	// 게임을 처음부터 시작하도록 초기화한다
	}
	
	@PostMapping
	public ModelAndView updown(int user) {
		ModelAndView mav = new ModelAndView();
		
		String status = updownService.getStatus(user);
		int count = updownService.getCount();
		int answer = updownService.getAnswer();
		
		switch(status) {
			case "Correct":
				mav.setViewName("clear");
				break;
		}
		mav.addObject("status", status);
		mav.addObject("count", count);
		mav.addObject("answer", answer);
		return mav;
	}
}

updown게임 구현 (java코드로만 구성)

package com.itbank.service;

import java.util.Random;

import org.springframework.stereotype.Service;

@Service
public class UpdownService {

	private int answer;
	private int count;
	
	public void initialize() {
		Random ran = new Random();
		answer = ran.nextInt(100) + 1;
		count = 0;
	}
	public String getStatus(int user) {
		String status = null;
		count++;
		if(answer == user) {
			status = "Correct";
		}
		else if(answer > user) {
			status = "Up";
		}
		else {
			status = "Down";
		}
		return status;
	}
	
	public int getCount() {
		return count;
	}
	public int getAnswer() {
		return answer;
	}
}

clear.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ include file="header.jsp" %>

<h3>축하드립니다 정답입니다!!</h3>
<h3>${count }번 만에 맞추셨습니다!!</h3>
<a href="${cpath }/updown"><button>한게임 더 !!</button></a>

</body>
</html>

답을 입력할 시 사용자의 답이 틀릴 시 크기에 따라 status를 호출
맞출 경우 몇번만에 맞췄는지 count호출