용건만 간단히, 움짤은 한 번 더 생각
금병영에 상의하세요
야생의 이벤트가 열렸다
즐겨찾기
최근방문

삼국지 웹게임 만들어봤어요

EEguain
24.02.05
·
조회 7280

제 머릿속에서는 막
시작할 때 애니메이션으로 바람이 불어오면서 푸른 하늘이 노랗게 되고 
성 그림도 그냥 네모가 아니고 더 예쁘고 
성 누르면 마을 이미지가 위에서 뚝 떨어지고 시장, 농장, 병영 표시가 달려있고 막
업그레이드되면 모습도 변하고

 

그렇지만 사실 UI는 안 만들었습니다. 

세력도 성도 3개만 넣었습니다.

 


전체적인 웹게임 클라이언트-서버 시스템을 어떻게 구현하는지에 집중했어요.
UI는 초 단순하게 텍스트 + 버튼 뿐입니다.
 

 

https://chimweb.github.io

 

 

사실 더 단순하게 이렇게 만들까도 싶었습니다.
[마을(1203)🔽] 🏰6⚖️4👨🏿‍🌾5🧱3 🗡️7800🏇4500 💰3200🌾2300 🎚️🔼

 

 

아무튼
침하하에 웹게임을 고려하는 침착맨님께, 만들어본 결과 든 생각을 먼저 말씀드리자면,
1. 웹게임 만드는 것은 간단하다.
2. 침하하에 비하면 서버비 부담은 무시해도 될 수준일 것이다.

 

 

 

 

 

 

아래는 장문의 게임에 대한 글입니다.


목차

1. 게임에 대해
2. 시스템 구조
3. 침하하에 웹게임 가능한가?
4. 이 버전에 대하여
5. 추가해 볼 만한 것들

 

 

 

 

1. 게임에 대해

 

기본적으로 오게임, 부족전쟁 라이크입니다.
조금 더 최신으로는 클래시오브클랜, 라이즈오브킹덤즈, 마피아시티, 삼국지전략판 등이 있습니다.
혹은 룰더스카이 처럼 더 소셜게임에 가까운 경우도 있습니다.

 


잘 모르시는 분들을 위해 설명하자면,

게임 내용
1. 시장, 농장의 레벨을 높이면 금, 쌀 생산량이 많아집니다.
2. 마을회관의 레벨을 먼저 올려야 합니다.
3. 병사를 모아서 다른 마을을 점령할 수 있습니다.

 

4. 마을마다 좌표가 있습니다. 

ex) https://bujok.fandom.com/ko/wiki/1%EC%84%B8%EA%B3%84/%EC%A7%80%EB%8F%84/2010%EB%85%84_03%EC%9B%94_05%EC%9D%BC

=> 저는 조금 다른 선택을 했어요. 지역들이 있고, 지역 내에 마을 수는 한도 없이.
왜냐면, 대륙 크기는 정해져있는데 유저가 생각보다 많으면 자리가 없고, 유저가 생각보다 적으면 황량할 수 있어서 이런 선택을 했습니다.

 

더 구체적인 규칙은 글이 길어지니 생략하겠습니다.

 

 

 

 

2. 시스템 구조


유저가 웹에서 html의 버튼을 누르면
javascript가 서버로 POST 보냄.
python 서버에서 (서버가 자고 있다면 깨운 뒤 DB들 다시 열어서) 
1. 업데이트 DB의 내용을 현 시각까지 적용 후
2. 해당 POST가 적법한지 확인하고
3. 업데이트 DB에 추가
일부 정보는 유저에게 전송

 

유저 데이터베이스 (DB): 유저 ID, 유저 비번, 유저의 마을 목록

마을 DB: 마을 ID, 소유 유저 ID, 건물들 lv, 자원, 병사

업데이트 DB: 명령한 유저 ID, 목표 마을 ID, 행동, 완료 시간

 

 

 

 

3. 침하하에 웹게임 가능한가?

 

서버에 관해 고려해야 할 사항은 두 가지입니다.

 

A. 서버의 대역폭 
유저에게 얼마만큼의 정보를 보내줄 것인가의 문제입니다.
유저 한 명에게 한 마을의 정보를 준다면, 건물들 레벨, 건설 완료 시간 정도니까, 잘 압축하면 30바이트면 충분합니다.
10,000 명이 10초당 한 번씩 요청을 해도, 30kb/s입니다. 
참고로 jpg 짤 하나가 보통 100kb 정도 합니다.

 

더 중요한 문제는 유저에게 다른 마을의 정보를 주는 부분입니다.
만 명에게 만 명의 정보를 주면 1억 개가 되어버리죠.
제가 택한 방식은
a. 다른 마을은 소속 지역과 소속 세력 정보만 전달 => 한 마을당 2바이트. 만 개의 마을이면 20kb
b. 메인 서버와 별개인, 조회가 더 용이한 곳에 이 정보를 저장해두고 거기서 전달 

 

 

B. 서버의 연산량
장부를 열람하고 그걸 바탕으로 더하기 빼기를 해서 다시 기록하는 것이 전부입니다.
열람은 마을 번호, 유저 번호를 찾는 거라 log(유저수)로 무시해도 되겠습니다.
더하기 빼기의 경우, 가장 복잡한 경우가 전투 결과를 계산하는 함수인데, 그래봤자 수십 번의 더하기 빼기 혹은 대소 비교뿐입니다.
업데이트 DB에는 기록할 때 완료 시간 순으로 기록할 것이라 log(예약된 업데이트 수) 정도입니다.

 

결론적으로 분 당 수십만 개의 요청이 들어와도 일반적인 CPU와 메모리에게는 일도 아닙니다.

(오게임, 부족전쟁이 2000년대 중후반의 옛날 하드웨어와 외국의 열악했던 인터넷 상황에서도 운영되었다는 점.)

 

저는 무료 서버를 써서 버벅일 수도 있지만 (CPU도 느리고, 무엇보다 평소에 자고 있어요. 그러다 구몬 선생님 맞이하는 아이처럼 됨), 
침하하의 기준에서는 무시해도 될 정도의 부담일 거라고 생각합니다.

 

 

 

 

4. 이 버전에 대해

 

이 알파? 프리알파? 아무튼 이 견본 버전은 전체적인 시스템을 어떻게 구현하는지를 보는 것을 중점으로 했습니다.
1. 자원 생산량, 건축비, 모병비 등의 구체적인 숫자의 밸런스는 맞추지 않은 상태임.
2. 지역의 수는 3개만 했음.
3. 엣지 케이스들 고려안함. 
   - 예를 들어, 적 세력 마을에 공격을 보냈는데, 그 사이에 우리 세력의 다른 사람이 점령했다? -> 현재는 회군 없이 그대로 흡수됨.
   - 징병을 했는데, 적군에 먹힌 뒤 징병이 완료되면? -> 현재는 징병된 군대가 공격을 함.
   - 징병을 했는데, 적군에 먹힌 뒤, 다른 아군 유저가 다시 점령한다면? -> 징병된 군대가 다른 유저에게 합류함.
  등등 끝도 없음.

  사실 생각지도 못한 시나리오 터지면 서버 코드가 오류로 정지될 수도 있음.
  (예전에 카드 게임 만든 것은 무한 루프가 도는 경우가 있었음. 치료와 공격이 밸런스를 맞춰서 무한히 돌아감.)
4. 악의적인 유저에 대한 대비 안 함.
   - 예를 들어, 아이디 무한 생성. (네이버 메일로만 아이디 만들 수 있게 하는 게 제일 쉬운 해결책일 듯)
   - 매크로로 무한히 POST 요청 (사실상 디도스. 이건 시도가 너무 잦으면 IP밴 하는 식으로?)
   - 새로 생긴 마을을 바로 급습하는 경우 (이건 보호 시간 걸면 바로 해결됨)
   등등 

 

간단히 몇 분 코드짜면 해결 가능한 것들도 있지만, 안 한 이유는 2가지임.
A. 하기 시작하면 머리 속의 쉐도우 복싱이 시작되고 끝도 없이 이런 경우는? 이런 경우는? 하면서 시간이 훌쩍감.
B. 하나씩은 금방하지만 이런게 너무 많음. 

 

 

 

 

5. 추가해 볼 만한 것들

 

일단 최대한 단순하게 만들었습니다.
사실 더 단순하면 좋겠다 싶음.
바둑이나 체스 보면 규칙은 단순한데 양상은 복잡하고 흥미롭잖아요? 콘웨이 게임 오브 라이프 멋있잖아요

 

다만 더 고민되는 부분은 사람들이 pk를 싫어한다는 점입니다.
(매칭시스템이 있고 매판 제로에서 시작하는 경우는 여전히 aos나 fps나 인기지만.)
당하는 것은 재미가 없고, 애당초 공격적인 걸 싫어하는 사람도 많고.
(그런데 또 타르코프는 인기가 많고...)

 

아무튼 추가적으로 구현하면 재밌을 것들

1. 장수. (출진 수, 승패에 영향, 자원 생산에 영향)
2. 착용 아이템
3. 신규 마을 보호 시간
4. 더 많은 지역들. 근처 지역으로만 출진 가능하게. 관에서 막기 가능하게.
5. 지역별 특수 병종들 (남만병, 청주병, ...), 더 복잡한 전투 계산
6. 확장. (현재는 새 아이디 만들어서 그 마을 점령하면 됨)
7. 그래픽. 소리 효과.
8. 점령 기록을 남기게 했는데, 재생해서 볼 수 있으면 좋을 듯.
9. 계략, 정찰 등등 더 다양한 옵션들.
10. 다른마을 정보 마을lv이나 성벽lv정도 더 볼 수 있게.

11. 자원, 병사 단위를 100배 1000배 뻥튀기


혹은 도파민 전문가들의 오랜 연구의 결정체인
일일접속보상, 배틀패스식 보상, 업적, 칭호, 테크트리를 통한 건물 해제 등등도 넣어볼 수 있겠죠.
설계하는 데 시간이 걸리지 코딩은 하루이틀이면 할 수 있겠네요. 
 


 

 

https://chimweb.github.io/

 

그 밖에 재밌을만한 것들 있으면 이야기 나눠봐요.

특히 가끔씩이라도 계속 생각을 해보셨을 침방장의 아이디어들도 궁금합니다.

 

재밌게 만들어져서 침하하의 한 귀퉁이에 자리 잡을 수 있다면 최고의 성공이겠쥬.

(혹은 모멘텀을 잃는다면 그대로 좌초…)

댓글
뿔펭귄
24.02.07
오호호 좋네요.
일언절언수행
24.02.07
오?
바람개비
24.02.07
즉시 생성
꼬지보리
24.02.07
삼국지 중독자 소환∼!
자몽은원래쓰다
24.02.07
에이전트 킴! 이 분 납치하세요.
빛과소금침착맨
24.02.07
드디어 나왔다 쌈국지!!
빛과소금침착맨
24.02.07
???: 그래서 쌈국지가 뭐에요?
지구젤리
24.02.07
즉시 생성
프로숨쉼이
24.02.07
쌈국지 ON
당장 펀딩하라규~
판박이맨
24.02.07
그니까 다음작은 쌈국지라는거죠?
대가리라지
24.02.07
부족전쟁에 1년 이상 인생 갈아넣었던 기억이 있는데... 손 대기 두려운 게임이다...
침착맨4랑헤
24.02.07
ㄴㄴㄴ 이건 쌈국지가 아니에요
오니솝터
24.02.07
수능 2주일 전까지 오게임 하던 기억이 나네요. 하필 전쟁이 크게 나서…
종빈허
24.02.07
저 75마을 담당인데 비밀번호 까먹었어요. 지금 76마을 징벌하려고 보병모으고있는데
종빈허
24.02.07
비밀번호 찾는 방법이 있나요?
종빈허
24.02.07
제 중원 위나라 75번 마을 좀 살려주세요
방구석트수수
24.02.07
먹으러 가겟읍니다...꿀꺽
EEguain 글쓴이
24.02.07
비번은 암호화돼서 저장돼서 저도 모릅니다
하지만 새 비번으로 바꿔드릴 수는 있어용
종빈허
24.02.08
저의 중원의 위나라 75번 마을의 비밀번호를 바꿔주세요.
@EEguain
EEguain 글쓴이
24.02.08
75번 마을을 만드실 때 사용하신 아이디를 비밀번호로 설정했습니다.
여기서 새로운 비밀번호로 바꾸세용
@종빈허
종빈허
24.02.09
감사합니다! 이제 76번 마을을 부술 수 있어요
@EEguain
좌절하지않는조홍
24.02.07
업데이트 있는거쥬?
레몬맨
24.02.08
부좆류 개오랜만에 보네요 추억이...
침투부침략자
24.02.08
조댓다 월루할 이유가 생겼다
종빈허
24.02.09
성벽이 제공하는 방어력이 하는 역할이 뭔가요?
EEguain 글쓴이
24.02.09
성벽 lv 1당 수비병사 20입니다. 자원이 적은 작은 마을들은 털어도 병사를 잃어서 오히려 손해가 되게 하는 구조물입니다.
종빈허
24.02.09
감사합니다. 그럼 성벽하나당 점령에 필요한 병사의 수는 80명이되겠네요. 성벽때문에 점령 난이도가 꽤 높군요!
@EEguain
종빈허
24.02.09
이 댓글을 먼저 봤다면, 무고한 저희 병사 55명이 목숨을 잃지 않았을텐데...이래서 지휘관의 역량이 중요합니다.
@EEguain
종빈허
24.02.09
다른 세력 마을에 점령이나 정벌아닌 수송으로 병력을 보내면 어떻게 되나요?
점령해야되는데 실수로 수송으로 제 전 병력을 보내버렸어요. 100번 마을 담당자님 제 보병 55명 돌려주세요
종빈허
24.02.09
다른 세력에 수송으로 병력을 출진할 경우 그 병력은 사라집니다.
해당 마을에 귀속되거나, 다시 반환되거나, 점령을 시도하지 않고 그대로 사라집니다.
여러분들은 저같은 실수 하지 않으시길 바랍니다.
EEguain 글쓴이
24.02.09
세력이 다르면 수송이어도 공격을 합니다. (다만, 점령해도 들고 간 자원은 증발해요.) 아마 새로고침 해보시면 공격 관련한 성공/실패 메세지가 있을 거예요
종빈허
24.02.09
헉! 감사합니다. 성벽이 무슨 역할인지 몰라서 오해했습니다.
성벽때문에 점령이 실패했던 것입니다. 답변 감사드리고, 가짜뉴스 죄송합니다!
@EEguain
좌절하지않는조홍
24.02.10
현청 8레벨 완공이 안돼요... 왜 자꾸 시간이 늘지 ㅋㅋ
EEguain 글쓴이
24.02.12
죄송함미다 처음에 며칠 걸리는지 나오게 해두질 않아서 아마 24시간 지나고 다음 날 카운트가 돌고 있는 거였을 거예요 지금은 하루가 넘는다면 일수도 표시하게 해뒀어용
좌절하지않는조홍
24.02.12
아하! 감사하므니다
@EEguain
Cicakman
24.02.14
1번에서 12번 마을은 관리자님이 생성하신 건가요?
EEguain 글쓴이
24.02.14
네 맞습니다 그런데 1번 마을은 어제 뺏겼습니다. 하루 먼저 시작했는데... 생각지도 못한 단위의 기병들이 돌아다니네요
Cicakman
24.02.14
그거 저인데 점령하고 보니 저는 2일 남은 9홀이 이미 완공된 거 보고 관리자님인가 했습니다.
군대는 계정 만들고 점령하는 식으로 8개 마을을 만들었더니 생각보다 금방 모여서 스노우볼 굴리는 중인데 만약 정식으로 한다면 확장 가능 수를 레벨 별로 달리 하는 게 필요할 것 같긴 합니다.
@EEguain
EEguain 글쓴이
24.02.15
앗 그렇군요 피드백 감사합니다. 많은 피드백이 필요합니다
@Cicakman
침뻘뿡
24.02.14
익주에 오나라 마을이없는데 왜 오나라 16인가요?
EEguain 글쓴이
24.02.14
처음에, 업그레이드 도중 점령 당하면 점수를 다른 쪽을 잘못 올려주는 버그가 있었는데 점수가 그때 잘못 입력된 채로 진행되어서 16점이 남아있었어용 코드 고칠 때 점수도 바꿔놨어야 했는데 놓쳤네요. 익주 오나라 점수를 0점으로 고쳐놓겠습니다.
쫀득찰떡
24.02.14
촉나라 너무 커요 위나라 - 오나라 동맹제의합니다. 상호방위조약맺죠
종빈허
24.02.15
익주 저거 어떡함
쫀득찰떡
24.02.15
익주 건드리지도 못할듯ㅋㅋㅋㅋ
@종빈허
종빈허
24.02.15
안녕하세요 관리자님 문제가 있는 것 같아서 댓글 작성합니다.
확인하시기 편하도록 간단하게 적어보겠습니다.
1. 점령 전에 보병 1명으로 규모를 파악
2. 파악한 성벽과 병력 규모를 참고해 넉넉한 병력으로 공성
3. 출진 완료 시간에 확인해봤으나 마을이 추가되지도 않고 공성 실패 메시지도 없음
4. 출진 병력은 모두 소진됨
5. 최근 기록을 확인해보니 본인 세력인 위나라에 해당 마을이 점령되었다는 기록이 있음 (100현, 115현)
저보다 먼저 다른 위나라 사용자분께서 출진을 해서 겹친 것일까요?
그렇다면 공성 실패 메세지는 왜 안뜨고 병력이 모두 소진된 이유는 뭘까요?
가장 큰 문제는 큰 병력으로 출진을 할 때마다 실패인지 성공인지 메세지가 갱신이 안됩니다.
1명으로 보낼 때는 메세지가 뜹니다.
왜 이러는 걸까요?
쫀득찰떡
24.02.15
예를 들어, 적 세력 마을에 공격을 보냈는데, 그 사이에 우리 세력의 다른 사람이 점령했다? -> 현재는 회군 없이 그대로 흡수됨.
위에 적혀있는걸로 보아 먼저 점령한 쪽에 흡수되신듯
1세대버튜버호무새
24.02.15
제가 100현 먼저 점령한 사람인데 쫀득님이 말씀하신데로 저한테 병력이 흡수 되었습니다.
저한테는 정확한 메시지는 기억이 안 나는데 로그가 나오긴 했습니다.
(100현 도착. ???현의 보병 ??기 기병 ??기 이런식)
아마 병영에서 병력 완성된 로그에 밀린게 아닌가 생각이 드네요
로그를 최근 3개가 아니라 더 확인이 가능하면 좋겠네요
종빈허
24.02.16
아니 내 기병 주세요 그거 제 원기옥인데
@1세대버튜버호무새
1세대버튜버호무새
24.02.16
ㅋㅋㅋㅋ 주소 알려주세요 배달해드립니다
@종빈허
종빈허
24.02.16
75랑 73인데 사실 안주셔도 됩니다. 마음만 받겠습니다.
@1세대버튜버호무새
1세대버튜버호무새
24.02.16
방금 보내봤는데 같은 세력에 보내면 메시지가 안나오는게 맞네요
@종빈허
종빈허
24.02.16
받은 사람만 메세지가 뜨는군요. 방금 확인했습니다. 감사합니다.
@1세대버튜버호무새
EEguain 글쓴이
24.02.16
확실히 로그 개수랑 로그 종류를 더 늘려야 하겠네용
@1세대버튜버호무새
돌이마
24.02.16
다른 지역마을(ex:중원출발->익주점령)은 점령이 안되나요? 점령 필요병력x6으로 넉넉히 보냈는데도 점령이 안되네요. 실패 메시지도 나오지 않습니다
EEguain 글쓴이
24.02.16
다른 지역도 점령이 가능합니다. 다른 지역까지는 시간이 3배 더 걸립니다. 한 시간도 넘은 뒤에 새로고침을 해도 로그가 없다면 다른 지역의 같은 세력에 군대를 보내신 것일 수 있습니다.
Cicakman
24.02.28
10현으로 업그레이드를 하니 군대와 건물 등이 화면에 나타나지 않습니다
EEguain 글쓴이
24.02.29
수정하였습니다! 최대 레벨에 도달했을 때 웹에 보여주는 부분을 처리하는 걸 빠뜨렸네요. 알려주셔서 감사합니다.
쫀득찰떡
24.08.02
24.08.02-통일완료

전체 인기글 전체글

지평좌표계 드립의 역발상.jpg 22
유머
바이코딘
·
조회수 5235
·
02.19
2025 시즌 그리팅 요정 협회 뉴진스 22
아이돌
이지금은동
·
조회수 4913
·
24.11.26
궤도 이전에 고고민수가 있었다... 18
침착맨
Webcam
·
조회수 6901
·
24.11.18
상상만화-지평좌표계를 어떻게 고정하셨죠? 35
취미
이에끼인만두
·
조회수 6330
·
24.09.01
물리학교수가 귀신보면 지평좌표계보다 더물어보고 싶은질문 16
유머
옾월량
·
조회수 6436
·
24.08.22
근데 진짜 역겨운게 뭐냐면 (환기합시다)
침착맨
Unknown
·
조회수 12474
·
24.07.16
모르는 이슈는 한번 기사로 확인해보시거나 쉽게 들어가지 않으셨음 좋겠습니다. 12
침착맨
육체미대소동
·
조회수 7390
·
24.07.15
안될과학 팝업스토어 궤도님 실물영접 후기!!! 17
궤도
김전무
·
조회수 8136
·
24.03.07
현재글 삼국지 웹게임 만들어봤어요 61
취미
EEguain
·
조회수 7281
·
24.02.05
도라지후 서사 19
인방
잘코사니
·
조회수 10697
·
24.01.12
커신에게 지평좌표계를 물어본다면? 6
궤도
샤란타
·
조회수 5587
·
23.11.10
스트리머 vs 시청자 집단지성 오목 게임 25
방송 해줘요
스테고사우루스
·
조회수 8156
·
23.09.08
5555555 좌표 44
침착맨
길고양이의조언
·
조회수 7897
·
23.09.01
그놈의 쌈국지같은 게임 만들어보려고 테스트 버전 만들어봤어요 60
취미
EEguain
·
조회수 8987
·
23.07.09
어느 디씨인의 신병 겪어본 썰 17
이야기&썰
간하하
·
조회수 8036
·
23.06.29
지평좌표계를 고정한 최고민수 8
팬아트
희희번득
·
조회수 5803
·
23.06.06
놀이터 서버 재밌게 봤던 장면들 (타스 포함, 김) 21
인방
결속밴드
·
조회수 7176
·
23.05.08
와...마크 고인물은 다르긴 하구나 (악놀 히든런 드디어 완료) 13
게임
짱갈래종수짱
·
조회수 8800
·
23.04.29
본인 인생 역대급 업적.jpg 18
궤도
꼬불이
·
조회수 8600
·
23.04.28
궤도 있는 궤도팀 16
궤도
궤도준수
·
조회수 6762
·
23.04.26
1 2