작성자 | Lain311 | ||
---|---|---|---|
작성일 | 2011-02-27 16:46:14 KST | 조회 | 5,719 |
첨부 |
|
||
제목 |
랭킹기능 만들면서 생긴 저장소 관련팁입니다.
|
컨트롤 리그를 만들면서 전체 순위를 보고싶다는 요청을 받았습니다.
처음 몇번은 개인컴퓨터에 저장되서 불가능하다 라고 설명을 했는데...
확 아이디어가 떠오르더라구여...
다른 사람의 정보를 저장하고. 서로 공유하며, 같은 사람의 정보가 만나면 최신정보로
바뀌면 정확하지는 않지만 대략적으로 확인가능하겠다 생각했습니다.
랭킹기능은 완성은 되지 않았습니다. 전부 잘 돌아가는데.. 문제가 하나 발생했습니다.
저장소에 저장된 텍스트가 불러올때 잘 깨진다는거죠..
실패의 원인이지만.. 보안책은 있습니다... 맵 전용 아이디를 시작할때 만들어버리는거죠...
하지만 컨트롤 리그는 프로게이머도 많이 하는관계로 그냥 아이디 없어져도 두기로 했습니다.
밑에 설명 정확한 방법이 아니며 제가 그냥 터득한방법으로 필요한사람한테 유용하게 쓰였으면 좋겠네요.
--------------------------------------------
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개의 정보를 압축해 최소한으로 저장한다.
- 저장의 양이 많을 땐 저장소를 여러개 이용한다.
정말 알아보기가 힘드네요.. 궁금하신거 물어보시면 알려드릴게요.
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
© PlayXP Inc. All Rights Reserved.