playXP

서브 메뉴

Page. 1 / 21 [내 메뉴에 추가]
글쓰기
작성자 Lain311
작성일 2011-02-27 16:46:14 KST 조회 5,722
첨부
제목
랭킹기능 만들면서 생긴 저장소 관련팁입니다.
파일포켓 이미지
파일포켓 이미지

컨트롤 리그를 만들면서 전체 순위를 보고싶다는 요청을 받았습니다.

 

처음 몇번은 개인컴퓨터에 저장되서 불가능하다 라고 설명을 했는데...

확 아이디어가 떠오르더라구여...

다른 사람의 정보를 저장하고. 서로 공유하며, 같은 사람의 정보가 만나면 최신정보로

바뀌면 정확하지는 않지만 대략적으로 확인가능하겠다 생각했습니다.

 

랭킹기능은 완성은 되지 않았습니다. 전부 잘 돌아가는데.. 문제가 하나 발생했습니다.

저장소에 저장된 텍스트가 불러올때 잘 깨진다는거죠..

실패의 원인이지만.. 보안책은 있습니다... 맵 전용 아이디를 시작할때 만들어버리는거죠...

하지만 컨트롤 리그는 프로게이머도 많이 하는관계로 그냥 아이디 없어져도 두기로 했습니다.

 

밑에 설명 정확한 방법이 아니며 제가 그냥 터득한방법으로 필요한사람한테 유용하게 쓰였으면 좋겠네요.

--------------------------------------------

4단계로 나눌 수 있습니다.

저장소 불러오기 -> 겹치는 유저 확인 -> 순위계산 -> 저장소 저장

 

순서를 조금 섞어서 설명을 쓰겠습니다.

 

- 유저 확인 법

플레이어의 이름은 텍스트라서 서로 비교를 할 수 없습니다.

때문에 플레이어가 같은사람인지 비교가 되지않습니다.

그럼 저장소를 비교하면됩니다. 각각 저장소마다 고유의 번호를 만들어 놓는거죠.

 

코드번호를 만들면됩니다. 정수는 9자리까지 지원을 합니다.

앞에 두자리는 제작자가 수시로 바꿔주는 번호로 하구여..

뒤에 7자리는 무작위 숫자를 넣으면 거의 겹치지 않습니다.

예) 150000000 + 1~9999999무작위 숫자

앞에 150000000 은 제작자가 수시로 바꿔줍니다.

전 일주일에 한번정도 숫자 하나씩 바꿔주면 일주일안에 같은 코드번호가 나올 확률은

1/100만 정도밖에 되지 않습니다.

 

 

- 같은 코드 번호검사

간단합니다. 배열을 플레이어 수보다 1개 더 많게합니다.

불러온 정보를 플레이어수의 배열에 넣구여

그걸 비어있는 배열의 코드번호와 비교해서 겹치지 않으면 비어있는 배열로 옮기면됩니다

포문을 두번 돌려야 가능합니다.

그리고 추가로 최신정보를 알아야하므로 총전적수 역시 저장소에 저장해야됩니다.

총전적이 높은게 우선권을 가지게요

이건 너무 쉬우니깐 패스 - -;;

 

- 순위 계산

순위 계산도 쉽습니다.지역변수에 정보를 넣어놓구여

포문을 돌려 순위 전체와 비교합니다.

지역변수가 비교대상보다 높으면 지역변수가 비교대상안에 들어가고

비교대상에 있던 정보는 지역변수로 들어가면됩니다.

그리고 포문 연산이 많으므로 오래걸린다는 오류가 뜹니다.

포문1번에 지역변수에 숫자 1을 더하구여

포문 한 2000번에 한번 0.0001초 대기 해주면됩니다.

이것도 쉬우니깐 패스

 

- 저장&불러오기

저장이 중요합니다. 정보의 양이 엄청나게 많기 때문에 압축을 해야됩니다.

정수는 9자리를 쓸 수 있으므로 하나의 키에 보통 3개정도의 정보가 들어갑니다.

레벨 = 87

총전적 = 75

점수 = 50

이라고하면 저장소에 87075050 이렇게 들어가게합니다.

계산법은 쉽죠 (87 x 1000000) + (75 x 1000) + 50 이렇게 하면됩니다.

불러 올때는 반대로 계산하면 되겠죠

87075050 / 1000000 = 87

(87075050 - ((87075050 / 1000000) x 1000000) / 1000 = 75

(87075050 - ((87075050 / 1000) x 1000)= 50

이렇게하면 한명의 정보가 키3개에 들어가게됩니다.

아이디, 레벨, 총전적, 점수, 코드번호 총5개가 3개로 들어가는거죠

물론 암호화를 걸고싶으면 1개의 키를 더 만들어야겠죠...

 

이제 키를 압축했으니깐 저장을 하면 되는데요.

저장소는 기본 저장소와는 다른 저장소로 저장을 합니다.

실험결과 저장소는 많아도 상관없는데.. 저장소에 키가 많으면 안됩니다.

하나의 저장소는 키 150개 이하로 제한하는게 좋아보입니다.

300개의 키로 사용했는데 잘 안되서 지금은 최대 150개로 쓰고있습니다.

 

불러 올때는 플레이어1 열기 플레이어2 열기 하나하나 쓸필요없이

플레이어 자체로 포문을 돌리는게 있습니다.. 그걸로하면 오류 안나고 잘됩니다.

플레이어의 그룹의 플레이어롤 각 실행인가.. 기억이 안나네요.. 지금 켜볼 수가 없어서 --_--;

거기에 플레이어 (선정된 플레이어) 의 저장소 열기 하면됩니다.

나머지는 그냥 보통 쓰이는 저장소 방법으로 하시면됩니다.

 

참참참.. 저장소가 많죠.. 전 이렇게합니다.

저장소1 있음

1~50 정수값 불러오기

저장소2 있음

51~100 정수값 불러오기

저장소3 있음

101~150 정수값 불러오기

저장은

정보(51) 코드번호 > 0

저장소2열기

51~100 정수값 저장

저장소 저장

 

요약

- 플레이어 비교는 각 고유의 코드번호를 만들어 비교한다.

- 랭킹 계산은 코드번호 비교 후 지역변수를 이용해서 계산한다.

- 저장할 때는 2~3개의 정보를 압축해 최소한으로 저장한다.

- 저장의 양이 많을 땐 저장소를 여러개 이용한다.

 

정말 알아보기가 힘드네요.. 궁금하신거 물어보시면 알려드릴게요.

지속적인 허위 신고시 신고자가 제재를 받을 수 있습니다.
신고 사유를 입력하십시오:

아이콘 Xonix (2011-02-27 17:07:16 KST)
0↑ ↓0
센스 이미지
어려워... 나중에 저장소 배우고해야겠다 ㅜㅜ
Drone (2011-02-27 18:38:11 KST) - 114.199.xxx.110
0↑ ↓0
센스 이미지를 등록해 주세요
좋은 팁이네요.
수고하셧습니다
아이콘 hsh0908y (2011-02-27 18:47:17 KST)
0↑ ↓0
센스 이미지를 등록해 주세요
4위랑 94위랑 점수가 비슷하다ㄷㄷ
근데 랭커나 랭킹 정보 가진 사람을 만나지 않으면 랭킹을 불러올 수 없지 않나요?
Lain311 (2011-02-27 19:10:53 KST)
0↑ ↓0
센스 이미지
계급이 우선이니깐요... 상위권에 코드번호가 두개 생성되버린분이 껴있기도 하네요.
근데 어쨌든 맵을 하면 그 정보가 돌고돌고돌고 갱신되고 그러기때문에 시간이 오래지나면
정확성이 높아지겠죠..
근데 개인컴퓨터의 저장이기때문에 100% 정확성이 있을순없죠..
재미로 보는 순위일 뿐이에요
아이콘 IUPrime (2011-02-27 19:28:22 KST)
0↑ ↓0
센스 이미지를 등록해 주세요
1주일 안에 10000명이 플레이한다고 가정할 시 0.1% 확률로 같은 코드가 생기겠네요.
Lain311 (2011-02-27 21:11:51 KST)
0↑ ↓0
센스 이미지
만약 코드가 겹치면 더 전적이 많은 사람 정보로 갱신이 되구여..
0.1% 도 안되는 확률이 불안하다면 코드번호를 18자리로 하는 방법도 있긴하죠...;;
요즘은 거의 매일 앞자리를 바꾸고 있어여.. 초반엔 자주바꾸고 나중엔 천천히 바꿔도 되죠..;
아이콘 IUPrime (2011-02-27 23:17:35 KST)
0↑ ↓0
센스 이미지를 등록해 주세요
라이브러리가_있었으면_좋겠다.jpg
아이콘 Niel_Sniping (2011-02-28 00:46:37 KST)
0↑ ↓0
센스 이미지
그냥 저장소가 배틀넷에 저장됬으면 다른플레이어의 정보를 교환할 필요도 없는데 ㅠㅠ
아이콘 kerta (2011-02-28 04:51:50 KST)
0↑ ↓0
센스 이미지
존경합니다 진심
아이콘 kerta (2011-02-28 04:58:31 KST)
0↑ ↓0
센스 이미지
대충 방법은알겟지만..시간도이 없어서.
Lain311 (2011-08-16 20:03:03 KST)
0↑ ↓0
센스 이미지
이방법 쓰지 마세요.. 구려요..
문자열이 甲
아이콘 하얀한숨 (2015-12-01 10:31:16 KST)
0↑ ↓0
센스 이미지
와우
댓글을 등록하려면 로그인 하셔야 합니다. 로그인 하시려면 [여기]를 클릭하십시오.
롤토체스 TFT - 롤체지지 LoLCHESS.GG
소환사의 협곡부터 칼바람, 우르프까지 - 포로지지 PORO.GG
배그 전적검색은 닥지지(DAK.GG)에서 가능합니다
  • (주)플레이엑스피
  • 대표: 윤석재
  • 사업자등록번호: 406-86-00726

© PlayXP Inc. All Rights Reserved.