Project/AWS-Java

게임 프로젝트(1) - AWS 풀스택 과정 58일차

awspspgh 2024. 10. 17. 19:40

※ 낚시 게임 만들기

- 내 역할: 낚시 장소 선택 및 단어, 이미지 도트화

 

▣ State

package fishing;

public class State {
	private String state_name;
	private int enter_fee;
	
	public State() {}
	
	public State(String state_name, int enter_fee) {
		this.state_name = state_name;
		this.enter_fee = enter_fee;
	}

	public String getState_name() {
		return state_name;
	}

	public void setState_name(String state_name) {
		this.state_name = state_name;
	}

	public int getEnter_fee() {
		return enter_fee;
	}

	public void setEnter_fee(int enter_fee) {
		this.enter_fee = enter_fee;
	}
	
}

 

▣ StateController

package fishing;

import java.util.Scanner;

public class StateController {
	private Scanner scan;
	private StateService svc;
	private boolean flag;
	private String Spot;
//	private int num; // 유저의 num을 받기 위해 내가 추가한 부분.
	
	public StateController(User u) {
		scan = new Scanner(System.in);
		svc = new StateServiceImpl();
		flag = true;
		choiceSpot(u);
	}
	
//	public StateController(int num) { // 유저의 num을 받기 위해 내가 추가한 부분.
//		this.num = num; // 내가 추가한 부분, 나머지는 위 생성자와 동일
//		scan = new Scanner(System.in);
//		svc = new StateServiceImpl();
//		flag = true;
//		choiceSpot(u);
//	}


	private void choiceSpot(User u) {
		while(flag) {
			System.out.println("		────────────────────────────────────────────────────────");
			System.out.println("	       │                                                       │");
			System.out.println("	       │         1. 물웅덩이         │          2. 해변가          │");		
			System.out.println("	       │   입장조건:  normal 이상    │   입장조건:  Standard 이상    │");
			System.out.println("	       │   입장료:   무료          │   입장료:   1000원        │");
			System.out.println("	       │                                                       │");
			System.out.println("		────────────────────────────────────────────────────────");
			System.out.println("		────────────────────────────────────────────────────────");
			System.out.println("	       │                                                       │");
			System.out.println("	       │         3. 바다           │          4. 깊은 바다       │");		
			System.out.println("	       │   입장조건:  Premium 이상   │   입장조건:  Elite        │");
			System.out.println("	       │   입장료:   5000원        │   입장료:    10000원        │");
			System.out.println("	       │                                                       │");
			System.out.println("		────────────────────────────────────────────────────────");
			System.out.println("번호를 입력해주세요.");
			int menu = scan.nextInt();
			State s = null;
			switch(menu) {
			// 각 case마다 FishingController 입력
			case 1:
				Spot = "A";
				svc.calc(Spot, u.getNum());
				s = svc.getSpot(Spot);
				boatPrint();
				System.out.println(s.getState_name()+"로 이동합니다.");
				System.out.println("입장료 무료입니다.");
				puddle();
				flag = false;
				new FishingController(u, s.getState_name(), u.getNum()); // 장소 이름과 유저의 num 전달
				break;
			case 2:
				if(u.getMoney() < 1000) {
					System.out.println("입장료를 지불할 돈이 없습니다... 돈을 버세욧!");
				}else {					
					if(u.getFishrod().equals("Standard") || u.getFishrod().equals("Premium") || u.getFishrod().equals("Elite")) {					
						Spot = "B";
						svc.calc(Spot, u.getNum());
						s = svc.getSpot(Spot);
						System.out.println(s.getState_name()+"로 이동합니다.");
						CheckRod(Spot);
						beach();
						flag = false;
						new FishingController(u, s.getState_name(), u.getNum()); // 장소 이름과 유저의 num 전달
					}else {
						System.out.println("낚시대 등급이 Standard 이상만 가능합니다.");
					}
				}
				break;
			case 3:
				if(u.getMoney() < 5000) {
					System.out.println("입장료를 지불할 돈이 없습니다... 돈을 버세욧!");
				}else {					
					if(u.getFishrod().equals("Premium") || u.getFishrod().equals("Elite")) {	
						Spot = "C";
						svc.calc(Spot, u.getNum());
						s = svc.getSpot(Spot);
						System.out.println(s.getState_name()+"로 이동합니다.");
						CheckRod(Spot);
						sea();
						flag = false;
						new FishingController(u, s.getState_name(), u.getNum()); // 장소 이름과 유저의 num 전달
					}else {
						System.out.println("낚시대 등급이 Premium 이상만 가능합니다.");
					}
				}
				break;
			case 4:
				if(u.getMoney() < 10000) {
					System.out.println("입장료를 지불할 돈이 없습니다... 돈을 버세욧!");
				}else {					
					if(u.getFishrod().equals("Elite")) {	
						Spot = "D";
						svc.calc(Spot, u.getNum());
						s = svc.getSpot(Spot);
						System.out.println(s.getState_name()+"로 이동합니다.");
						CheckRod(Spot);
						deep();
						flag = false;
						new FishingController(u, s.getState_name(), u.getNum()); // 장소 이름과 유저의 num 전달
					}else {
						System.out.println("낚시대 등급이 Elite만 가능합니다.");
					}
				}
				break;
			default : System.out.println("입력하신 번호는 없는 번호입니다");
			}
		}
	}

	public void CheckRod(String spot) {
		State s = svc.getSpot(spot);
		boatPrint();
		System.out.println(s.getState_name()+"로 이동합니다.");
		System.out.println("입장료 " + s.getEnter_fee()  + "를 지불합니다.");
	}
	
}

 

▣ StateService

package fishing;

public interface StateService {

	State getSpot(String spot);

	void calc(String rod, int num);

}

 

▣ StateServiceImpl

package fishing;

public class StateServiceImpl implements StateService {
	private StateDAO dao;
	public StateServiceImpl() {
		dao = new StateDAOImpl();
	}

	@Override
	public State getSpot(String spot) {
//		System.out.println("Spot serviceImpl Success");
		return dao.printSpot(spot);
	}
	@Override
	public void calc(String spot, int num) {
//		System.out.println("Spot serviceImpl Success");
		dao.getCalc(spot, num);
	}

}

 

▣ StateDAO

package fishing;

public interface StateDAO {

	State printSpot(String spot);

	void getCalc(String spot, int num);

}

 

▣ StateDAOImpl

package fishing;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

public class StateDAOImpl implements StateDAO {
	private Connection conn;
	private PreparedStatement pst;
	private String query = "";
	
	public StateDAOImpl() {
		DatabaseConnection dbc = DatabaseConnection.getInstance();
		conn = dbc.getConnection();
	}

	@Override
	public State printSpot(String spot) {
//		System.out.println("printId DAOImpl success");
		query = "select state_name, enter_fee from state where state_id = ?;";
		try {
			pst = conn.prepareStatement(query);
			pst.setString(1, spot);
			ResultSet rs = pst.executeQuery();
			if(rs.next()) {
				State s = new State(rs.getString("state_name"), rs.getInt("enter_fee"));
				return s;
			}
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return null;
	}

	@Override
	public void getCalc(String spot, int num) {
//		System.out.println("getCalc DAOImpl success");
		query = "update userlist u set u.money = u.money - (SELECT s.enter_fee FROM state s WHERE s.state_id = ?) WHERE u.num = ?;";
		try {
			pst = conn.prepareStatement(query);
			pst.setString(1, spot);
			pst.setInt(2, num);
			pst.executeUpdate();
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
	}

}

 

▣ DatabaseConnection

package fishing;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;

public class DatabaseConnection {
	private static DatabaseConnection dbc = new DatabaseConnection();

	private Connection conn = null;

	private String jdbcDriver = "com.mysql.cj.jdbc.Driver";
	private String jdbcUrl = "jdbc:mysql://localhost:3306/fishdb";

	// 생성자
	private DatabaseConnection() {
		try {
			Class.forName(jdbcDriver);
			conn = DriverManager.getConnection(jdbcUrl, "fishingUser", "fish"); 
		} catch (ClassNotFoundException e) {
			System.out.println("드라이버를 찾을 수 없습니다.");
			e.printStackTrace();
		} catch (SQLException e) {
			System.out.println("연결정보가 정확하지 않습니다.");
			e.printStackTrace();
		}
	}

	public static DatabaseConnection getInstance() {
		return dbc;
	}

	public Connection getConnection() {
		return conn;
	}

}

 

 

 

 

 

 

 

 

'Project > AWS-Java' 카테고리의 다른 글

게임 프로젝트(2) - AWS 풀스택 과정 59일차  (0) 2024.10.18