개인/개인공부
[java/eclipse] 로그인 가위바위보
Dev.chandel
2024. 3. 12. 14:12
package LoginSystem;
import java.util.ArrayList;
import java.util.Scanner;
public class LoginSystem
{
public class UserData
{
String name;
String id;
String pw;
int winCount;
int loseCount;
int drawCount;
int allCount;
//생성자
public UserData()
{
this.name="";
this.id="";
this.pw="";
this.winCount=0;
this.loseCount=0;
this.drawCount=0;
this.allCount=0;
}
public UserData(String _name,String _id,String _pw)
{
this.name=_name;
this.id=_id;
this.pw=_pw;
}
public UserData(String _name,String _id,String _pw,int _wc,int _lc,int _dc)
{
this.name=_name;
this.id=_id;
this.pw=_pw;
this.winCount=_wc;
this.loseCount=_lc;
this.drawCount=_lc;
}
public void LoseGame()
{
this.loseCount+=1;
this.allCount+=1;
}
public void WinGame()
{
this.winCount+=1;
this.allCount+=1;
}
public void DrawGame()
{
this.drawCount+=1;
this.allCount+=1;
}
public String GetName()
{
return this.name;
}
public String GetID()
{
return this.id;
}
public String GetPW()
{
return this.pw;
}
public int GetWinCount()
{
return this.winCount;
}
public int GetLoseCount()
{
return this.loseCount;
}
public int GetDrawCount()
{
return this.drawCount;
}
public int GetAllCount()
{
return this.allCount;
}
}
//리스트 생성
static public ArrayList<UserData> userList=new ArrayList();
//접속중인 사용자 고유넘버
static public int nowUserNum=0;
public boolean Start()
{
while(true)
{
//시작화면 출력
PrintStartWin();
Scanner scner=new Scanner(System.in); //사용자에게 입력받을 때 쓰일 스캐너
String main_select=scner.next();
switch(main_select)
{
case "1" :
PrintJoinWin();
break;
case "2" :
if(PrintLoginWin())
return true;
break;
default:
System.out.println("==================");
System.out.println("잘못된 입력입니다. 다시 입력해주세요.");
break;
}
}
}
//로그인 시작 화면
public static void PrintStartWin()
{
System.out.println("==================");
System.out.println("=======시작화면======");
System.out.println("1. 회원가입");
System.out.println("2. 로그인");
System.out.println("==================");
System.out.print("선택> ");
}
//회원가입 화면
public void PrintJoinWin()
{
Scanner sc=new Scanner(System.in); //사용자에게 입력받을 때 쓰일 스캐너
String id="";
String pw="";
String name="";
boolean useId=true;
System.out.println("==================");
System.out.println("======회원가입======");
System.out.print("ID :");
id=sc.next();
for(int i=0;i<userList.size();i++)
{
if(userList.get(i).GetID().equals(id))
{
useId=false;
}
}
while(!useId)
{
System.out.println("중복된 아이디입니다.");
System.out.println("사용할 아이디를 다시 입력해주세요.");
System.out.println("==================");
System.out.print("ID :");
id=sc.next();
useId=true;
for(int i=0;i<userList.size();i++)
{
if(userList.get(i).GetID().equals(id))
{
useId=false;
}
}
}
System.out.print("PW :");
pw=sc.next();
System.out.print("이름 :");
name=sc.next();
System.out.println("==================");
UserData joinUser=new UserData(name,id,pw); //정보 생성
userList.add(joinUser); //리스트에 추가
}
//로그인 화면
private boolean PrintLoginWin()
{
Scanner sc=new Scanner(System.in); //사용자에게 입력받을 때 쓰일 스캐너
String id="";
String pw="";
boolean login=false;
System.out.println("==================");
System.out.println("=======로그인=======");
System.out.print("ID :");
id=sc.next();
System.out.print("PW :");
pw=sc.next();
for(int i=0;i<userList.size();i++)
{
if(userList.get(i).GetID().equals(id))
{
if(userList.get(i).GetPW().equals(pw))
{
nowUserNum=i; //현재 사용자 지정
login=true;
}
}
}
if(login)
{
System.out.println("==================");
System.out.println(userList.get(nowUserNum).GetName()+
"님이(가) 성공적으로 로그인되었습니다.");
return true;
}
else
{
System.out.println("==================");
System.out.println("로그인에 실패하였습니다.");
System.out.println("다시 시도해주세요.");
return false;
}
}
}
package LoginSystem;
import java.util.Random;
import java.util.Scanner;
import LoginSystem.LoginSystem.UserData;
public class GameSystem
{
//가위바위보 매핑 클래스
enum RPS
{
ROCK("바위"),
PAPER("보자기"),
SCISSORS("가위"),
NONE("실수");
private String choice;
private RPS(String choice)
{
this.choice=choice;
}
public String getchoice()
{
return choice;
}
}
//승패 매핑 클래스
enum OUTCOME
{
WIN("이겼다!!!"),
LOSE("졌다..."),
DRAW("비겼다!"),
MISTACK("실수해버렸다..");
private String outcome;
private OUTCOME(String outcome)
{
this.outcome=outcome;
}
public String getOutcome()
{
return outcome;
}
}
// 컴퓨터의 랜덤된 도출값을 가위바위보로 지정해주기
private RPS GetRPS(int _com)
{
switch (_com) {
case 0:
return RPS.ROCK;
case 1:
return RPS.PAPER;
case 2:
return RPS.SCISSORS;
default:
return RPS.NONE;
}
}
//사용자의 도출값을 가위바위보로 지정해주기
private RPS GetRPS(String _user)
{
switch (_user) {
case "바위":
case "주먹":
case "묵":
return RPS.ROCK;
case "보자기":
case "보":
case "빠":
return RPS.PAPER;
case "가위":
case "찌":
return RPS.SCISSORS;
default:
return RPS.NONE;
}
}
//승패 검사
private OUTCOME GetWinner(RPS _com,RPS _user,UserData _nUser)
{
int com=_com.ordinal();
int user=_user.ordinal();
if(user==2&&com==0) // 사용자가 가위(2), 컴퓨터가 주먹(0)인 경우
{
_nUser.LoseGame();
return OUTCOME.LOSE;
}
else if(user>=3)
{
return OUTCOME.MISTACK;
}
else
{
if(user>com||com==2&&user==0)//컴퓨터가 가위(2), 사용자가 주먹(0)인 경우
{
_nUser.WinGame();
return OUTCOME.WIN;
}
else if(user<com)
{
_nUser.LoseGame();
return OUTCOME.LOSE;
}
else
{
_nUser.DrawGame();
return OUTCOME.DRAW;
}
}
}
//게임메인화면
private void PrintGameMainWin()
{
System.out.println("1. 나의 정보");
System.out.println("2. 게임 시작");
System.out.println("3. 메인 화면");
}
//게임진행
private void RunGame(UserData _nUser)
{
Scanner sc=new Scanner(System.in); //사용자에게 입력받을 때 쓰일 스캐너
boolean repeat=true;
while(repeat)
{
System.out.println("======가위바위보!======");
System.out.println(_nUser.GetName()+"님의 선택은..<-");
String inputdata=sc.next();
RPS userRps=GetRPS(inputdata);
//난수 설정: 컴퓨터가 랜덤한 수를 내는 경우
Random random = new Random();
int com=random.nextInt(3); //0,1,2중 하나 랜덤하게 저장
RPS comRps=GetRPS(com);
//승패 확인
OUTCOME result=GetWinner(comRps, userRps,_nUser);
//승패 결과 출력
System.out.println("상대는..."+comRps.getchoice());
System.out.println(_nUser.GetName()+"님의 선택은..."+userRps.getchoice());
System.out.println(result.getOutcome());
//재도전
System.out.print("재도전 할까요? (Y/N) :");
inputdata=sc.next();
if(inputdata.equals("N")||inputdata.equals("n"))
{
repeat=false;
}
}
}
//사용자 정보 창
private void PrintMyData(UserData _nUser)
{
System.out.println("==================");
System.out.println(_nUser.GetName()+"님의 정보");
System.out.println("==================");
System.out.println("이름 :"+_nUser.GetName());
System.out.println("ID :"+_nUser.GetID());
System.out.println("PW :"+_nUser.GetPW());
int gamecount=_nUser.GetAllCount();
double wincount=(double)_nUser.GetWinCount();
System.out.println("게임횟수 :"+gamecount);
if(gamecount!=0)
{
if(wincount!=0)
{
double winrate=((wincount*100/gamecount));
System.out.println("승률 :"+String.format("%.2f", winrate)+"%");
}
else
{
System.out.println("승률 : 아직 게임을 승리하지 않았습니다.");
}
}
else
{
System.out.println("승률 : 아직 게임을 실행하지 않았습니다.");
}
System.out.println("==================");
}
public boolean Start(UserData _nowUser)
{
Scanner sc=new Scanner(System.in); //사용자에게 입력받을 때 쓰일 스캐너
boolean repeat=true; //반복여부
while(repeat)
{
System.out.println("=="+_nowUser.GetName()+"님의 게임화면==");
PrintGameMainWin();
String g_main_select=sc.next();
switch(g_main_select)
{
case "1" :
PrintMyData(_nowUser);
break;
case "2" :
RunGame(_nowUser);
break;
case "3" :
repeat=false;
break;
default:
System.out.println("==================");
System.out.println("잘못된 입력입니다. 다시 입력해주세요.");
break;
}
}
return true;
}
}
package LoginSystem;
public class Main {
public static void main(String[] args)
{
boolean repeat=true;
LoginSystem L_system=new LoginSystem();
GameSystem G_system=new GameSystem();
while(repeat)
{
if(L_system.Start())
{
if(!G_system.Start(L_system.userList.get(L_system.nowUserNum)))
repeat=false;
}
}
}
}