
안녕하세요! 오늘은 누구나 한 번쯤 상상해봤을 나만의 연애 시뮬레이션 게임을 직접 만들어보는 시간을 갖겠습니다. 복잡한 그래픽 없이, 자바(Java) 콘솔 환경에서 텍스트만으로 간단하게 구현하며 프로그래밍의 핵심 재미를 느껴보는 것이 목표입니다.
이 가이드를 따라오시면 Scanner를 이용한 사용자 입력, if와 switch를 활용한 조건 분기, 변수를 이용한 호감도 시스템 등 프로그래밍의 기초 개념을 확실히 다질 수 있을 거예요. 그럼, 지금부터 코딩으로 설레는 순간을 만들어볼까요? 💕
게임 컨셉 및 시나리오
게임을 만들기 전, 간단한 기획을 해보겠습니다.
- 주인공: 플레이어 (이름을 직접 입력받음)
- 공략 캐릭터: 소꿉친구 '유진'
- 핵심 시스템: '호감도'라는 점수(int 변수)를 만들어, 플레이어의 선택에 따라 점수를 올리거나 내립니다.
- 엔딩: 마지막에 계산된 최종 호감도 점수에 따라 3가지 다른 엔딩(Best / Normal / Bad)이 나옵니다.
시나리오: 새로운 학기가 시작되고, 소꿉친구 유진과 여러 이벤트를 겪게 됩니다. 등굣길, 점심시간, 하굣길의 선택이 유진이의 마음을 결정합니다.
자바 코드 구현 단계별 가이드
이제 자바 코드를 작성해 보겠습니다. 하나의 파일(DatingSimGame.java)에 모든 코드를 작성할 거예요.
1. 기본 설정 및 게임 시작
가장 먼저 게임의 기본 틀을 만듭니다. Scanner를 이용해 플레이어의 이름을 입력받고, 호감도(affection) 변수를 0으로 초기화합니다.
import java.util.Scanner;
public class DatingSimGame {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int affection = 0; // 호감도 변수, 0으로 시작
System.out.println("🌸두근두근! 새 학기 첫날🌸");
System.out.print("당신의 이름은 무엇인가요? >> ");
String playerName = scanner.nextLine();
System.out.println("\n새로운 학기가 시작되었습니다.");
System.out.println("당신의 소꿉친구, '유진'과 같은 반이 되었네요!");
System.out.println("----------------------------------------\n");
// 여기에 이벤트 함수들을 호출할 예정입니다.
}
}
2. 이벤트 구현하기
이제 플레이어가 선택을 내려야 하는 이벤트를 하나씩 만들어 보겠습니다. 각 이벤트는 플레이어의 선택에 따라 호감도를 변화시키는 역할을 합니다.
이벤트 1: 등굣길
// ... main 메서드 안에 이어서 작성 ...
// 이벤트 1: 등굣길
System.out.println("EVENT 1: 등굣길에서 유진이를 만났다!");
System.out.println("저 멀리서 유진이가 걸어오고 있습니다. 어떻게 할까요?");
System.out.println("1. 반갑게 달려가서 아는 척한다.");
System.out.println("2. 부끄러워서 모른 척 지나간다.");
System.out.println("3. 그냥 가만히 서서 쳐다본다.");
System.out.print("선택 >> ");
int choice1 = scanner.nextInt();
switch (choice1) {
case 1:
System.out.println("유진: (활짝 웃으며) 안녕, " + playerName + "! 좋은 아침!");
affection += 10;
break;
case 2:
System.out.println("유진: (시무룩한 표정으로) 어라...? 날 못 봤나...?");
affection -= 5;
break;
case 3:
System.out.println("유진: (의아한 표정으로) 왜 저렇게 쳐다보지...?");
break; // 호감도 변화 없음
}
System.out.println("현재 호감도: " + affection);
System.out.println("----------------------------------------\n");
- switch 문을 사용해 사용자의 선택(choice1)에 따라 다른 결과와 호감도 변화를 주었습니다.
이벤트 2와 3도 비슷한 방식으로 구현합니다.
// ... 이벤트 1 다음에 이어서 작성 ...
// 이벤트 2: 점심시간
System.out.println("EVENT 2: 점심시간, 메뉴가 고민된다.");
System.out.println("유진이가 당신에게 같이 밥을 먹자고 합니다.");
System.out.println("1. 좋아! 같이 먹자. 마침 너랑 먹고 싶었어.");
System.out.println("2. 미안, 오늘은 혼자 먹고 싶어.");
System.out.println("3. (유진이의 도시락을 힐끔 보며) 메뉴 보고 결정할게.");
System.out.print("선택 >> ");
int choice2 = scanner.nextInt();
if (choice2 == 1) {
System.out.println("유진: 진짜? 다행이다! 같이 먹자!");
affection += 10;
} else if (choice2 == 2) {
System.out.println("유진: 아... 그래? 알았어...");
affection -= 5;
} else {
System.out.println("유진: (약간 기분 상한 듯) 흥, 내 메뉴는 비밀이거든!");
}
System.out.println("현재 호감도: " + affection);
System.out.println("----------------------------------------\n");
// 이벤트 3: 하굣길
System.out.println("EVENT 3: 하굣길, 갑자기 비가 온다.");
System.out.println("유진이는 우산이 없는 것 같습니다. 당신은 우산이 하나 있습니다.");
System.out.println("1. 내 우산 같이 쓰고 갈래?");
System.out.println("2. 큰일이네. 난 먼저 가볼게!");
System.out.println("3. 근처 편의점에서 우산을 하나 더 사준다.");
System.out.print("선택 >> ");
int choice3 = scanner.nextInt();
if (choice3 == 1) {
System.out.println("유진: (얼굴을 붉히며) 정말? 고마워, " + playerName + "!");
affection += 15;
} else if (choice3 == 2) {
System.out.println("유진: ...응, 조심해서 가.");
affection -= 10;
} else {
System.out.println("유진: (감동하며) 날 위해? 정말 고마워! 이 은혜는 잊지 않을게!");
affection += 10;
}
System.out.println("최종 호감도: " + affection);
System.out.println("----------------------------------------\n");
- 이번에는 if-else if-else 구문을 사용했습니다. switch와 기능적으로 유사하지만, 다양한 조건식을 활용할 때 더 유연합니다.
3. 최종 엔딩 결정하기
모든 이벤트가 끝나면, 최종 affection 점수를 기준으로 엔딩을 보여줍니다.
// ... 이벤트 3 다음에 이어서 작성 ...
System.out.println("결과를 확인합니다...");
System.out.println("과연 당신과 유진이의 관계는...?\n");
if (affection >= 25) {
System.out.println("💖 BEST ENDING 💖");
System.out.println("유진이가 당신의 손을 잡으며 말합니다. '있잖아, " + playerName + "...'");
System.out.println("'나... 너를 친구 이상으로 생각하는 것 같아.'");
System.out.println("두 사람의 관계에 핑크빛 기류가 흐르기 시작합니다.");
} else if (affection >= 10) {
System.out.println("💛 NORMAL ENDING 💛");
System.out.println("유진이가 웃으며 말합니다. '넌 정말 좋은 친구야!'");
System.out.println("앞으로도 유진이와 즐거운 학교생활을 보낼 수 있을 것 같습니다.");
} else {
System.out.println("🖤 BAD ENDING 🖤");
System.out.println("어색한 침묵 속에서 유진이가 먼저 인사를 합니다. '그럼... 내일 봐.'");
System.out.println("유진이와의 사이가 조금 서먹해진 것 같습니다. 다음 학기에는 더 친해질 수 있을까요?");
}
scanner.close(); // Scanner 사용 종료
전체 코드 및 실행 방법
아래는 위에서 작성한 모든 코드를 합친 완전한 소스 코드입니다.
import java.util.Scanner;
public class DatingSimGame {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int affection = 0; // 호감도 변수, 0으로 시작
System.out.println("🌸두근두근! 새 학기 첫날🌸");
System.out.print("당신의 이름은 무엇인가요? >> ");
String playerName = scanner.nextLine();
System.out.println("\n새로운 학기가 시작되었습니다.");
System.out.println("당신의 소꿉친구, '유진'과 같은 반이 되었네요!");
System.out.println("----------------------------------------\n");
// 이벤트 1: 등굣길
System.out.println("EVENT 1: 등굣길에서 유진이를 만났다!");
System.out.println("저 멀리서 유진이가 걸어오고 있습니다. 어떻게 할까요?");
System.out.println("1. 반갑게 달려가서 아는 척한다.");
System.out.println("2. 부끄러워서 모른 척 지나간다.");
System.out.println("3. 그냥 가만히 서서 쳐다본다.");
System.out.print("선택 >> ");
int choice1 = scanner.nextInt();
switch (choice1) {
case 1:
System.out.println("유진: (활짝 웃으며) 안녕, " + playerName + "! 좋은 아침!");
affection += 10;
break;
case 2:
System.out.println("유진: (시무룩한 표정으로) 어라...? 날 못 봤나...?");
affection -= 5;
break;
case 3:
System.out.println("유진: (의아한 표정으로) 왜 저렇게 쳐다보지...?");
break;
}
System.out.println("현재 호감도: " + affection);
System.out.println("----------------------------------------\n");
// 이벤트 2: 점심시간
System.out.println("EVENT 2: 점심시간, 메뉴가 고민된다.");
System.out.println("유진이가 당신에게 같이 밥을 먹자고 합니다.");
System.out.println("1. 좋아! 같이 먹자. 마침 너랑 먹고 싶었어.");
System.out.println("2. 미안, 오늘은 혼자 먹고 싶어.");
System.out.println("3. (유진이의 도시락을 힐끔 보며) 메뉴 보고 결정할게.");
System.out.print("선택 >> ");
int choice2 = scanner.nextInt();
if (choice2 == 1) {
System.out.println("유진: 진짜? 다행이다! 같이 먹자!");
affection += 10;
} else if (choice2 == 2) {
System.out.println("유진: 아... 그래? 알았어...");
affection -= 5;
} else {
System.out.println("유진: (약간 기분 상한 듯) 흥, 내 메뉴는 비밀이거든!");
}
System.out.println("현재 호감도: " + affection);
System.out.println("----------------------------------------\n");
// 이벤트 3: 하굣길
System.out.println("EVENT 3: 하굣길, 갑자기 비가 온다.");
System.out.println("유진이는 우산이 없는 것 같습니다. 당신은 우산이 하나 있습니다.");
System.out.println("1. 내 우산 같이 쓰고 갈래?");
System.out.println("2. 큰일이네. 난 먼저 가볼게!");
System.out.println("3. 근처 편의점에서 우산을 하나 더 사준다.");
System.out.print("선택 >> ");
int choice3 = scanner.nextInt();
if (choice3 == 1) {
System.out.println("유진: (얼굴을 붉히며) 정말? 고마워, " + playerName + "!");
affection += 15;
} else if (choice3 == 2) {
System.out.println("유진: ...응, 조심해서 가.");
affection -= 10;
} else {
System.out.println("유진: (감동하며) 날 위해? 정말 고마워! 이 은혜는 잊지 않을게!");
affection += 10;
}
System.out.println("최종 호감도: " + affection);
System.out.println("----------------------------------------\n");
// 최종 엔딩
System.out.println("결과를 확인합니다...");
System.out.println("과연 당신과 유진이의 관계는...?\n");
if (affection >= 25) {
System.out.println("💖 BEST ENDING 💖");
System.out.println("유진이가 당신의 손을 잡으며 말합니다. '있잖아, " + playerName + "...'");
System.out.println("'나... 너를 친구 이상으로 생각하는 것 같아.'");
System.out.println("두 사람의 관계에 핑크빛 기류가 흐르기 시작합니다.");
} else if (affection >= 10) {
System.out.println("💛 NORMAL ENDING 💛");
System.out.println("유진이가 웃으며 말합니다. '넌 정말 좋은 친구야!'");
System.out.println("앞으로도 유진이와 즐거운 학교생활을 보낼 수 있을 것 같습니다.");
} else {
System.out.println("🖤 BAD ENDING 🖤");
System.out.println("어색한 침묵 속에서 유진이가 먼저 인사를 합니다. '그럼... 내일 봐.'");
System.out.println("유진이와의 사이가 조금 서먹해진 것 같습니다. 다음 학기에는 더 친해질 수 있을까요?");
}
scanner.close();
}
}
실행 방법
- 위 코드를 DatingSimGame.java 파일로 저장합니다.
- 터미널(명령 프롬프트)을 열고 파일이 있는 위치로 이동합니다.
- javac DatingSimGame.java 명령어로 컴파일합니다.
- java DatingSimGame 명령어로 게임을 실행하고 즐겨주세요!
어떠셨나요? 생각보다 간단하죠? 이 기본 구조를 바탕으로 더 많은 이벤트, 다른 공략 캐릭터, 숨겨진 능력치(매력, 지성 등)를 추가하며 여러분만의 멋진 게임으로 발전시켜 보세요!