반응형
다마고치 게임 예제
Main Menu
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.Scanner;
public class Menu {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
DAO dao = new DAO();
Controller c = new Controller();
while (true) {
System.out.print("[1]로그인 [2]회원가입 [3]종료 >> ");
int input1 = sc.nextInt();
if (input1 == 1) {
System.out.println("=====로그인=====");
System.out.print("아이디 입력 >> ");
String id = sc.next();
System.out.print("패스워드 입력 >> ");
String pw = sc.next();
int cnt = dao.login(id, pw);
if (cnt > 0) {
System.out.println("로그인 성공");
while (true) {
System.out.println("[1]다마고치 등록 [2]다마고치 키우기 [3]다마고치 상태 확인 >> ");
int input2 = sc.nextInt();
if (input2 == 1) {
System.out.println("다마고치를 등록 합니다.");
System.out.println("다마고치 이름 : ");
String name = sc.next();
int row = dao.insert(id, name);
if (row > 0) {
System.out.println("다마고치 등록 성공");
} else {
System.out.println("다마고치 등록 실패");
}
} else if (input2 == 2) {
System.out.println("다마고치 키우기");
// 1. 하나의 아이디에 다마고치는 여러개
// 1-1. 아이디별 다마고치를 전부 출력
System.out.println(id + "님이 가지고 있는 다마고치");
// 다마고치 한마리 --> DamaDTO
// 다마고치 여러마리 --> ArrayList<DamaDTO>
// --> DamaDTO[]
ArrayList<DamaDTO> list = dao.selectDama(id);
int i = 0;
System.out.println("번호\t닉네임\t레벨\t경험치");
for (DamaDTO dto : list) {
System.out.print(++i + "\t");
System.out.print(dto.getNick() + "\t");
System.out.print(dto.getLev() + "\t");
System.out.println(dto.getExp() + "\t");
}
// 2. 어떤 다마고치 키울건지 입력
System.out.println("어던 다마고치를 키우시겠습니까?");
int damaSelect = sc.nextInt();
// 다마고치 닉네임은 지금 욕구가 하고 싶어요 로 출력
// 인덱스 번호 -1을 해주는 이유는
// 사용자에게 보여주는 번호는 1,2,3,4,5 이런 형식이였기 때문이다.
String w = c.makeRandom();
System.out.print(list.get(damaSelect - 1).getNick() + "은(는)");
System.out.println("지금" + w + "이 하고 싶어요.");
// 4. 다마고치 욕구 충족
int row = c.grow(w,list.get(damaSelect-1).getNick());
if(row>0) {
System.out.println("다마고치 수정 성공");
}else {
System.out.println("다마고치 수정 실패");
}
} else if (input2 == 3) {
System.out.println("내 다마고치 상태확인");
} else {
System.out.println("잘못된 숫자를 입력하셨습니다.");
break;
}
}
} else {
System.out.println("로그인 실패");
}
} else if (input1 == 2) {
// 가입할 아이디 입력 받기
// 가입할 패스워드 입력 받기
System.out.println("=====회원가입=====");
System.out.print("아이디 입력 >> ");
String id = sc.next();
System.out.print("패스워드 입력 >> ");
String pw = sc.next();
// 두개의 정보를 저장해서 관리 할 수 있는 DB로 전달
int cnt = dao.join(id, pw);
if (cnt > 0) {
System.out.println("회원가입 성공");
} else {
System.out.println("회원가입 실패");
}
} else {
break;
}
}
}
}
DAO
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
public class DAO {
// 데이터베이스 기능 사용시
// 여러개의 메소드에서 사용가능 하도록 전역변수 선언
private Connection conn = null;
private PreparedStatement psmt = null;
private ResultSet rs = null;
// 메소드 수행시 결과값을 확인할 수 있는 변수!
private int cnt = 0;
// 동적 로딩 -> getConn()
public void getConn() {
try {
Class.forName("oracle.jdbc.driver.OracleDriver");
String db_url = "jdbc:oracle:thin:@localhost:1521:xe";
String db_id = "hr";
String db_pw = "hr";
conn = DriverManager.getConnection(db_url, db_id, db_pw);
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}
}
// DB 사용에 따른 객체 종료 메소드 ->close()
// Connection, PreparedStatement, ResultSet
public void close() {
// 역순으로 객체를 닫는다.
try {
if (rs != null) {
rs.close();
}
if (psmt != null) {
psmt.close();
}
if (conn != null) {
conn.close();
}
} catch (SQLException e) {
e.printStackTrace();
}
}
// 회원가입이 가능한 메소드 생성 -> join()
public int join(String id, String pw) {
try {
getConn();
// 회원가입을 진행 할 수 있는 sql문 작성! - > damamember table 사용
String sql = "insert into damamember values(?,?)";
psmt = conn.prepareStatement(sql);
psmt.setString(1, id);
psmt.setString(2, pw);
cnt = psmt.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
} finally {
close();
}
return cnt;
}
public int login(String id, String pw) {
cnt = 0;
try {
// 1. DB 연결
getConn();
// 2. 회원이 맞는지 확인하는 sql문 전송
String sql = "select * from damamember where id = ? and pw = ?";
psmt = conn.prepareStatement(sql);
psmt.setString(1, id);
psmt.setString(2, pw);
rs = psmt.executeQuery();
if (rs.next()) {
cnt = 1;
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
// 3. 객체 종료
close();
}
return cnt;
}
public int insert(String id, String name) {
// lev, exp --> 0 인 다마고치 생성하기 jdbc코드 짜보기
try {
getConn();
String sql = "insert into dama values(?,?,0,0)";
psmt = conn.prepareStatement(sql);
psmt.setString(1, id);
psmt.setString(2, name);
cnt = psmt.executeUpdate();
} catch (Exception e) {
e.printStackTrace();
} finally {
close();
}
return cnt;
}
public ArrayList<DamaDTO> selectDama(String id) {
ArrayList<DamaDTO> list = new ArrayList<DamaDTO>();
try {
getConn();
String sql = "select * from dama where id =? ";
psmt = conn.prepareStatement(sql);
psmt.setString(1, id);
rs = psmt.executeQuery();
while (rs.next()) {
// rs.next()로 커서를 한칸씩 내리면서 데이터가 있는곳은
// 각 변수에 값을 받아오고, 그 값들을 arrayList에 넣는다.
String resultId = rs.getString("id");
String resultNick = rs.getString("nick");
int resultLev = rs.getInt("lev");
int reusltExp = rs.getInt("exp");
DamaDTO dto = new DamaDTO(resultId, resultNick, resultLev, reusltExp);
list.add(dto);
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
close();
}
return list;
}
public int updateExp(int exp, String nick) {
try {
getConn();
String sql = "update dama set exp = exp+? where nick = ?";
psmt = conn.prepareStatement(sql);
psmt.setInt(1, exp);
psmt.setString(2, nick);
cnt = psmt.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
} finally {
close();
}
return cnt;
}
}
DTO
public class DamaDTO {
// VO, DTO를 설계할때는 테이블 컬럼을 그대로 가지고와서 필드에 두기
private String id;
private String nick;
private int lev;
private int exp;
public DamaDTO(String id, String nick, int lev, int exp) {
this.id = id;
this.nick = nick;
this.lev = lev;
this.exp = exp;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getNick() {
return nick;
}
public void setNick(String nick) {
this.nick = nick;
}
public int getLev() {
return lev;
}
public void setLev(int lev) {
this.lev = lev;
}
public int getExp() {
return exp;
}
public void setExp(int exp) {
this.exp = exp;
}
}
Controller
import java.util.Random;
import java.util.Scanner;
public class Controller {
private Random ran = new Random();
// 욕구(밥, 수면, 산책, 게임, 코딩) --> 랜덤하게 뽑아오기
private String[] want = { "밥", "수면", "산책", "게임", "코딩" };
private Scanner sc = new Scanner(System.in);
private DAO dao = new DAO();
public String makeRandom() {
// 랜덤하게 뽑아올 수 있게 만들기
return want[ran.nextInt(want.length)];
}
public int grow(String w, String nick) {
// String w --> Menu에서 넘겨주게 될 다마고치의 욕구
int row = 0;
for (int i = 0; i < want.length; i++) {
System.out.println(i+1+want[i]+" ");
}
//사용자가 선택한 욕구
String input = sc.next();
// 다마고치가 원하는 욕구랑 == 사용자가 선택한 욕구가 일치하는지?
if(input.equals(w)) {
// exp 30 올려주기
// 데이터베이스에 있는 값을 수정
// "update dama set exp= exp + 30 where nick = ?";
row = dao.updateExp(30,nick);
}else {
// exp 10 감소시키기
// "update dama set exp= exp - 10 where nick = ?";
row = dao.updateExp(-10,nick);
}
return row;
}
}
반응형
'빅데이터 서비스 교육 > Java' 카테고리의 다른 글
Java Interface (0) | 2022.05.06 |
---|---|
Java 추상클래스 (0) | 2022.05.06 |
Java JDBC (0) | 2022.05.06 |
Java 상속 (0) | 2022.05.06 |
Java Arraylist (0) | 2022.05.06 |