게임 상태 (프로파일)를 저장하기 위해 가장 많이 사용되는 방법 또는 알고리즘, 데이터베이스 텍스트 파일 암호화 방법 및 관련 사항.
Caesar IV가 mySQL을 사용하는 것을 보았습니다.
어떤 제안.
게임 상태 (프로파일)를 저장하기 위해 가장 많이 사용되는 방법 또는 알고리즘, 데이터베이스 텍스트 파일 암호화 방법 및 관련 사항.
Caesar IV가 mySQL을 사용하는 것을 보았습니다.
어떤 제안.
답변:
나는 독점적 인 (이진) 형식으로 가장 자주 수행된다는 것을 확신합니다. 사용하는 게임 상태 구조체에서 파일마다 변수를 쓰거나 구조체의 인스턴스로 해당 파일을 다시 읽습니다. 예를 들어 C ++에서는 객체를 바이트 배열처럼 취급하고 fwrite ()를 파일로, 또는 파일에서 fread ()를 객체 형식으로 다시 캐스트 할 수 있습니다.
Java 또는 다른 언어를 사용하는 경우 직렬화 를 사용하여 작업을 정말 쉽게 할 수 있습니다. Java 설명은이 답변의 맨 아래에 있습니다. 다른 언어 (C ++보다 높은 수준의 언어)에는 반드시 자체 직렬화 라이브러리 또는 내장 함수가 있으므로 사용하도록 선택해야합니다. 직렬화 루틴이 아무리 비효율적이든, 오늘날 하드 드라이브 공간은 저렴합니다. 특히 게임 상태가 전혀 크지 않아야하는 경우에는 자체 직렬화 루틴 을 작성하고 유지 하지 못하게 됩니다.
당신은 절대적으로해야 하지 (단지의 첫 번째 문장을 읽어 MySQL을 사용 이 리뷰 ). 어떤 이유로 관계형 데이터베이스 가 실제로 필요한 경우 SQLite를 사용하십시오 . 경량 데이터베이스 시스템이며 단일 데이터베이스 파일에 존재합니다. 그러나 대부분의 게임에서 관계형 데이터베이스는 갈 길이 아니며,이를 사용하려는 회사는 일반적으로 실제 관계형 데이터베이스가 아닌 키-값 조회 테이블로 사용합니다.
로컬 디스크 파일의 모든 종류의 암호화는 난독 화일뿐입니다 . 해커는 프로그램이 해독 한 직후에 데이터를 스니핑합니다. 나는 개인적으로 이런 종류의 일에 반대합니다. 특히 1 인 게임입니다. 내 견해로는 게임 소유자 (고객을 지불하고 마음을 사로 잡는 것)가 원하는 경우 게임을 해킹 할 수 있어야한다는 것입니다. 어떤 경우에는 더 큰 공동체 의식을 만들 수 있으며 더 많은 고객을 유도하는 게임을 위해 "모드"를 개발할 수 있습니다. 가장 최근에 떠오른 예 는 최근에 출시 된 Portal in Minecraft 모드입니다. 인터넷을 통해 게이머 뉴스 사이트에 게시되며 Minecraft의 판매량을 늘릴 수 있습니다.
어떤 이유로 든 실제로 게임 개발에 Java를 사용하기에 충분히 미친 경우 Java의 직렬화에 대한 간단한 설명이 있습니다.
모든 게임 상태 데이터를 하나의 클래스로 유지하고을 구현하여 클래스를 직렬화 가능하게하고 특수 인스턴스화 된 변수를 클래스에 혼합하는 경우 키워드를
Serializable
사용하고transient
(일시적 객체는 직렬화되지 않음) 단순히ObjectOutputStream
파일에 쓰고 파일ObjectInputStream
에서 읽는 데 사용합니다 . 그게 다야.
[field: NonSerialized]
직렬화는 다른 답변 중 일부에서 언급되었으며 합리적인 해결책이라는 데 동의합니다. 그래도 실패하는 한 가지 방법은 버전 관리입니다.
게임을 출시하면 사람들이 게임을하고 일부 저장 게임을 만듭니다. 그런 다음 이후 패치에서 버그를 수정하거나 일부 기능을 추가하려고합니다. 간단한 바이너리 직렬화 방법을 사용하고 클래스에 멤버를 추가하면 고객이 패치를 설치할 때 직렬화가 이전 저장 게임과 호환되지 않을 수 있습니다.
따라서 어떤 접근 방식을 사용하든 게임을 처음 출시하기 전에이 문제를 고려해야합니다! 패치를 적용한 후 다시 시작해야하는 고객은 만족하지 않습니다.
이를 피하는 한 가지 방법은 각 기본 데이터 유형이 각 버전의 게임에 대해 저장 및로드 할 데이터를 알 수있을 정도로 똑똑한 Save (version) 및 Load (version) 메소드를 구현하도록하는 것입니다. 이렇게하면 저장 게임의 이전 버전과의 호환성을 지원하고 사용자가 실행중인 것보다 최신 버전의 게임에서 저장 게임을로드하려고하면 정상적으로 실패 할 수 있습니다.
레벨을 저장하는 데 사용하는 것과 동일한 형식을 사용할 수 있다면 보너스입니다.
예를 들어, Peggle과 같은 게임은 초기 보드 레이아웃, 볼 수, 현재 점수 (초기 보드의 경우 0) 등을 가질 수 있습니다. 그러면 저장된 게임은 정확히 동일한 형식을 사용할 수 있습니다.
동일한 형식을 사용하면 게임 저장 및 레벨로드로 작업을보다 쉽게하는 코드를 공유 할 수 있습니다!
맵 파일이 정말 큰 게임의 경우 저장 게임은 맵 파일을 참조로 포함 할 수 있습니다. 초기 레벨 파일도 같은 일을 할 수 있습니다. 어떤 이유로 NPC 중 일부가 죽었고 시체가 모두 누워있는 것을 제외하고 어떤 이유로 이야기가 같은 장소로 돌아왔다면 맵으로 쉽게 돌아올 수 있습니다 위에.