KR20060082849A - 협력 게임 시스템의 동작 동기화 방법, 이를 적용한 다수의협력 게임 시스템간의 상호간섭 작용 구현 방법 및 협력게임 방법 - Google Patents

협력 게임 시스템의 동작 동기화 방법, 이를 적용한 다수의협력 게임 시스템간의 상호간섭 작용 구현 방법 및 협력게임 방법 Download PDF

Info

Publication number
KR20060082849A
KR20060082849A KR1020067001342A KR20067001342A KR20060082849A KR 20060082849 A KR20060082849 A KR 20060082849A KR 1020067001342 A KR1020067001342 A KR 1020067001342A KR 20067001342 A KR20067001342 A KR 20067001342A KR 20060082849 A KR20060082849 A KR 20060082849A
Authority
KR
South Korea
Prior art keywords
unit
cooperative game
motion
input
event
Prior art date
Application number
KR1020067001342A
Other languages
English (en)
Inventor
조국영
안성수
최강인
장완호
Original Assignee
(주)이진공작
조국영
최강인
안성수
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by (주)이진공작, 조국영, 최강인, 안성수 filed Critical (주)이진공작
Publication of KR20060082849A publication Critical patent/KR20060082849A/ko

Links

Images

Classifications

    • AHUMAN NECESSITIES
    • A63SPORTS; GAMES; AMUSEMENTS
    • A63FCARD, BOARD, OR ROULETTE GAMES; INDOOR GAMES USING SMALL MOVING PLAYING BODIES; VIDEO GAMES; GAMES NOT OTHERWISE PROVIDED FOR
    • A63F13/00Video games, i.e. games using an electronically generated display having two or more dimensions
    • A63F13/80Special adaptations for executing a specific game genre or game mode
    • A63F13/847Cooperative playing, e.g. requiring coordinated actions from several players to achieve a common goal
    • A63F13/12
    • AHUMAN NECESSITIES
    • A63SPORTS; GAMES; AMUSEMENTS
    • A63FCARD, BOARD, OR ROULETTE GAMES; INDOOR GAMES USING SMALL MOVING PLAYING BODIES; VIDEO GAMES; GAMES NOT OTHERWISE PROVIDED FOR
    • A63F13/00Video games, i.e. games using an electronically generated display having two or more dimensions
    • A63F13/30Interconnection arrangements between game servers and game devices; Interconnection arrangements between game devices; Interconnection arrangements between game servers
    • AHUMAN NECESSITIES
    • A63SPORTS; GAMES; AMUSEMENTS
    • A63FCARD, BOARD, OR ROULETTE GAMES; INDOOR GAMES USING SMALL MOVING PLAYING BODIES; VIDEO GAMES; GAMES NOT OTHERWISE PROVIDED FOR
    • A63F13/00Video games, i.e. games using an electronically generated display having two or more dimensions
    • A63F13/40Processing input control signals of video game devices, e.g. signals generated by the player or derived from the environment
    • A63F13/44Processing input control signals of video game devices, e.g. signals generated by the player or derived from the environment involving timing of operations, e.g. performing an action within a time slot
    • AHUMAN NECESSITIES
    • A63SPORTS; GAMES; AMUSEMENTS
    • A63FCARD, BOARD, OR ROULETTE GAMES; INDOOR GAMES USING SMALL MOVING PLAYING BODIES; VIDEO GAMES; GAMES NOT OTHERWISE PROVIDED FOR
    • A63F13/00Video games, i.e. games using an electronically generated display having two or more dimensions
    • A63F13/20Input arrangements for video game devices
    • A63F13/21Input arrangements for video game devices characterised by their sensors, purposes or types
    • A63F13/213Input arrangements for video game devices characterised by their sensors, purposes or types comprising photodetecting means, e.g. cameras, photodiodes or infrared cells
    • AHUMAN NECESSITIES
    • A63SPORTS; GAMES; AMUSEMENTS
    • A63FCARD, BOARD, OR ROULETTE GAMES; INDOOR GAMES USING SMALL MOVING PLAYING BODIES; VIDEO GAMES; GAMES NOT OTHERWISE PROVIDED FOR
    • A63F13/00Video games, i.e. games using an electronically generated display having two or more dimensions
    • A63F13/20Input arrangements for video game devices
    • A63F13/21Input arrangements for video game devices characterised by their sensors, purposes or types
    • A63F13/214Input arrangements for video game devices characterised by their sensors, purposes or types for locating contacts on a surface, e.g. floor mats or touch pads
    • A63F13/2145Input arrangements for video game devices characterised by their sensors, purposes or types for locating contacts on a surface, e.g. floor mats or touch pads the surface being also a display device, e.g. touch screens
    • AHUMAN NECESSITIES
    • A63SPORTS; GAMES; AMUSEMENTS
    • A63FCARD, BOARD, OR ROULETTE GAMES; INDOOR GAMES USING SMALL MOVING PLAYING BODIES; VIDEO GAMES; GAMES NOT OTHERWISE PROVIDED FOR
    • A63F13/00Video games, i.e. games using an electronically generated display having two or more dimensions
    • A63F13/20Input arrangements for video game devices
    • A63F13/21Input arrangements for video game devices characterised by their sensors, purposes or types
    • A63F13/215Input arrangements for video game devices characterised by their sensors, purposes or types comprising means for detecting acoustic signals, e.g. using a microphone
    • AHUMAN NECESSITIES
    • A63SPORTS; GAMES; AMUSEMENTS
    • A63FCARD, BOARD, OR ROULETTE GAMES; INDOOR GAMES USING SMALL MOVING PLAYING BODIES; VIDEO GAMES; GAMES NOT OTHERWISE PROVIDED FOR
    • A63F13/00Video games, i.e. games using an electronically generated display having two or more dimensions
    • A63F13/30Interconnection arrangements between game servers and game devices; Interconnection arrangements between game devices; Interconnection arrangements between game servers
    • A63F13/33Interconnection arrangements between game servers and game devices; Interconnection arrangements between game devices; Interconnection arrangements between game servers using wide area network [WAN] connections
    • A63F13/332Interconnection arrangements between game servers and game devices; Interconnection arrangements between game devices; Interconnection arrangements between game servers using wide area network [WAN] connections using wireless networks, e.g. cellular phone networks
    • AHUMAN NECESSITIES
    • A63SPORTS; GAMES; AMUSEMENTS
    • A63FCARD, BOARD, OR ROULETTE GAMES; INDOOR GAMES USING SMALL MOVING PLAYING BODIES; VIDEO GAMES; GAMES NOT OTHERWISE PROVIDED FOR
    • A63F13/00Video games, i.e. games using an electronically generated display having two or more dimensions
    • A63F13/30Interconnection arrangements between game servers and game devices; Interconnection arrangements between game devices; Interconnection arrangements between game servers
    • A63F13/34Interconnection arrangements between game servers and game devices; Interconnection arrangements between game devices; Interconnection arrangements between game servers using peer-to-peer connections
    • AHUMAN NECESSITIES
    • A63SPORTS; GAMES; AMUSEMENTS
    • A63FCARD, BOARD, OR ROULETTE GAMES; INDOOR GAMES USING SMALL MOVING PLAYING BODIES; VIDEO GAMES; GAMES NOT OTHERWISE PROVIDED FOR
    • A63F2300/00Features of games using an electronically generated display having two or more dimensions, e.g. on a television screen, showing representations related to the game
    • A63F2300/60Methods for processing data by generating or executing the game program
    • A63F2300/63Methods for processing data by generating or executing the game program for controlling the execution of the game in time
    • A63F2300/638Methods for processing data by generating or executing the game program for controlling the execution of the game in time according to the timing of operation or a time limit
    • AHUMAN NECESSITIES
    • A63SPORTS; GAMES; AMUSEMENTS
    • A63FCARD, BOARD, OR ROULETTE GAMES; INDOOR GAMES USING SMALL MOVING PLAYING BODIES; VIDEO GAMES; GAMES NOT OTHERWISE PROVIDED FOR
    • A63F2300/00Features of games using an electronically generated display having two or more dimensions, e.g. on a television screen, showing representations related to the game
    • A63F2300/80Features of games using an electronically generated display having two or more dimensions, e.g. on a television screen, showing representations related to the game specially adapted for executing a specific type of game
    • A63F2300/8047Music games
    • AHUMAN NECESSITIES
    • A63SPORTS; GAMES; AMUSEMENTS
    • A63FCARD, BOARD, OR ROULETTE GAMES; INDOOR GAMES USING SMALL MOVING PLAYING BODIES; VIDEO GAMES; GAMES NOT OTHERWISE PROVIDED FOR
    • A63F2300/00Features of games using an electronically generated display having two or more dimensions, e.g. on a television screen, showing representations related to the game
    • A63F2300/80Features of games using an electronically generated display having two or more dimensions, e.g. on a television screen, showing representations related to the game specially adapted for executing a specific type of game
    • A63F2300/8088Features of games using an electronically generated display having two or more dimensions, e.g. on a television screen, showing representations related to the game specially adapted for executing a specific type of game involving concurrently several players in a non-networked game, e.g. on the same game console

Landscapes

  • Engineering & Computer Science (AREA)
  • Multimedia (AREA)
  • Processing Or Creating Images (AREA)

Abstract

이 발명은 댄스를 포함하는 협력 게임 시스템에서, 입력되는 이벤트에 의해 2개 이상으로 구성되는 구조체들의 동작을 단위시간에 동기시켜 일체로 동시에 구현되도록 표시하는 협력 게임 시스템의 동작 동기화 방법을 제공하기 위한 것이다.
상기한 목적을 달성하기 위한 이 발명은, 게임자들 간에 협력하면서 진행하는 댄스를 포함하는 게임 시스템에서 구현되어지는 동작을 동기화하는 방법으로서, 표준시간에 동기시켜 반복 진행하는 단위시간 중에서, 어느 하나의 단위시간 동안에 한 게임자가 입력한 이벤트에 대해 다른 게임자도 동일한 이벤트를 입력하면, 이어지는 다음 단위시간 동안에 상기 입력된 이벤트에 해당하는 단위동작을 구조체를 통해 동시에 표현하게 하는 것을 특징으로 하는 협력 게임 시스템의 동작 동기화 방법을 제공한다.
상기의 발명에 따르면, 3차원으로 구현되는 컴퓨터 그래픽스의 영상에서 구조체의 자유로운 동작 표현뿐만 아니라 복수의 링크를 갖는 구조체 간의 상호간섭을 고려한 구조체의 동작을 보다 단순하고 평이한 조작으로 구현할 수 있다. 또한, 3차원 그래픽스 영상을 통하여 제공되는 구조체 동작에서 실제와 유사한 물리적 특성을 구현할 수 있으며, 구조체 전체가 자연스러운 자세를 유지하면서도 연속동작이 가능하게 된다.

Description

협력 게임 시스템의 동작 동기화 방법, 이를 적용한 다수의 협력 게임 시스템간의 상호간섭 작용 구현 방법 및 협력 게임 방법{METHOD OF SYNCHRONIZING MOTION OF COOPERATIVE GAME SYSTEM, METHOD OF REALIZING INTERACTION BETWEEN PLURALITIES OF COOPERATIVE GAME SYSTEM USING IT AND COOPERATIVE GAME METHOD}
이 발명은 협력 게임 시스템의 동작 동기화 방법, 이를 적용한 다수의 협력 게임 시스템 간의 상호간섭 작용 구현 방법 및 협력 게임 방법에 관한 것으로, 보다 상세하게는 단독 시스템 또는 네트워크를 통한 원격 클라이언트 시스템 형태로 구현되는 댄스를 포함하는 협력 게임 시스템에서, 구조체들이 다양한 입력장치를 통해 입력되는 이벤트에 해당하는 하나의 단위동작을 일체로 동시에 구현하도록 단위시간에 동기시켜 표시하게 하는 협력 게임 시스템의 동작 동기화 방법과, 이러한 협력 게임 시스템의 동작 동기화 방법을 적용하여 각각의 협력 게임 시스템에서 단위동작을 실행하면서, 동시에 다수의 협력 게임 시스템 상호 간에 작용하는 간섭 동작도 함께 동기시켜 새로운 단위동작을 표시할 수 있게 하는 다수의 협력 게임 시스템 간의 상호간섭 작용 구현 방법 및 이러한 다수의 협력 게임 시스템 간의 상호간섭 작용 구현 방법을 응용한 댄스를 포함하는 협력 게임 방법에 관한 것이다.
일반적으로 컴퓨터 그래픽스에서, 인간이나 동물과 같이 관절 및 관절의 회 전범위, 평형 유지 동작 등에 의하여 동작 실현에 균형을 유지하는 물체를 말하는 구조체의 동작을 사실적으로 표현하기 위해서는 실제 동작에서 중요한 부분의 특성을 추출하여 적용하여야 한다.
이를 위해서는, 구조체 각각의 동작에 대해 해당 동작의 특성을 분석하고 동작의 가중치를 지정해야 한다. 이때 두 구조체 간의 상호 간섭 작용이 있는 경우에는, 하나의 구조체가 다른 구조체의 장래 실행되어질 동작을 모르는 상태에서 임의의 동작에 대한 가중치를 파악해야 한다.
따라서, 구조체 간의 상호 간섭에 따른 동작의 가중치가 올바르게 지정되지 않아 두 구조체의 동작이 어색하게 나타나는 문제점이 발생한다.
이러한 문제점을 해결하기 위하여, 구조체 간에 상호 간섭에 의해 결과적으로 나타나는 구조체 간의 동작으로부터 포착된 동작의 중요한 특성을 추출하여 적용하는 역 운동학적(inverse kinematics) 모델 등이 제안되었다.
그러나, 이러한 역 운동학적 모델 방법은 2개 이상으로 구성되는 구조체 간의 상호 간섭을 고려하지 않은 단독 구조체와 단독 구조체 간에 국한되어 적용되어진다.
그리고, 상호 간섭을 고려할 경우는 2개 이상으로 구성되는 구조체 간의 간섭이 발생할 때 그 동작에 대한 예측 문제를 해결할 수가 없기 때문에, 2개 이상으로 구성되는 구조체 간에는 적용할 수 없게된다.
즉, 현재까지 공개된 기술만으로는 2개 이상으로 구성되는 구조체 간의 상호 간섭을 고려한 동기화를 전혀 구현할 수가 없었다.
도 1 및 도 2 는 이 발명의 실시 예에 따른 협력 게임 시스템의 동작 동기화 방법을 구현하기 위한 개략적인 구성도 및 기능 블록도이고,
도 3 은 이 발명의 실시 예에 따른 협력 게임 시스템의 동작 동기화 방법을 네트워크를 통한 원격 클라이언트 시스템 형태로 구현하기 위한 기능 블록도이고,
도 4 는 도 3 의 클라이언트 시스템 형태로 구현되는 댄스를 포함하는 협력 게임 시스템에서 동작을 동기화하는 전체 과정을 도시한 흐름도이고,
도 5 는 도 4 의 댄스를 포함하는 협력 게임 시스템 중, 리더인 제1클라이언트 시스템에서의 동작 입력 처리 서브루틴을 도시한 흐름도이고,
도 6 은 도 4 의 댄스를 포함하는 협력 게임 시스템 중, 팔로우어인 제2클라이언트 시스템에서의 동작 입력 처리 서브루틴을 도시한 흐름도이고,
도 7 은 도 4 의 댄스를 포함하는 협력 게임 시스템에서, 사용자로서 리더인 제1클라이언트 시스템과 팔로우어인 제2클라이언트 시스템의 모니터에 표시되는 GUI화면의 일 예시도이고,
도 8 내지 도 15 는 도 4 의 댄스를 포함하는 협력 게임 시스템에서, 협력 게임이 진행되는 동안에 리더인 제1클라이언트 시스템에서 디스플레이되는 예시 화면들이고,
도 16 내지 도 23 은 도 4 의 댄스를 포함하는 협력 게임 시스템에서, 협력 게임이 진행되는 동안에 팔로우어인 제2클라이언트 시스템에서 디스플레이되는 예시 화면들이다.
〈도면의 주요 부분에 대한 부호의 설명〉
100 : 입력부 101 : 입력기
110 : 연산처리부 111 : 이벤트처리기
112 : 액세스데이터처리기 113 : GUI처리기
120 : 동기화부 121 : DB처리기
122 : 가상공간처리기 123 : 개인정보처리기
130 : 인터페이스부 131 : 동작진행처리기
140 : 출력부 141 : 출력기
기술적 과제
이로부터, 상기하는 종래 기술의 문제점을 해결하기 위하여 안출된 이 발명의 목적은, 댄스를 포함하는 협력 게임 시스템에서, 입력되는 이벤트에 의해 2개 이상으로 구성되는 구조체들의 동작을 단위시간에 동기시켜 일체로 동시에 구현되도록 표시하는 협력 게임 시스템의 동작 동기화 방법을 제공하기 위한 것이다.
또한, 이 발명의 다른 목적은 이러한 협력 게임 시스템의 동작 동기화 방법을 적용하여 다수의 협력 게임 시스템 상호 간에 작용하는 동작 간섭의 제어를 가능하게 하는 다수의 협력 게임 시스템 간의 상호간섭 작용 구현 방법과 이러한 다수의 협력 게임 시스템 간의 상호간섭 작용 구현 방법을 응용한 댄스를 포함하는 협력 게임 방법을 제공하기 위한 것이다.
기술적 해결방법
상기한 목적을 달성하기 위한 이 발명은, 게임자들 간에 협력하면서 진행하는 댄스를 포함하는 게임 시스템에서 구현되어지는 동작을 동기화하는 방법으로서, 표준시간에 동기시켜 반복 진행하는 단위시간 중에서, 어느 하나의 단위시간 동안에 한 게임자가 입력한 이벤트에 대해 다른 게임자도 동일한 이벤트를 입력하면, 이어지는 다음 단위시간 동안에 상기 입력된 이벤트에 해당하는 단위동작을 구조체를 통해 동시에 표현하게 하는 것을 특징으로 하는 협력 게임 시스템의 동작 동기화 방법을 제공한다.
바람직하게는, 상기 협력 게임 시스템이, 단독 시스템 형태로 구현되어도 좋다.
바람직하게는, 상기 협력 게임 시스템이, 네트워크를 통한 원격 클라이언트 시스템 형태로 구현되어도 좋다.
바람직하게는, 상기 이벤트가, 키보드, 마우스, 트랙 볼, 조이스틱, 터치 스크린 및 핸드폰 키패드, 댄스 패드, 네트워크 인터페이스 카드(NIC) 중 하나 또는 다수를 조합 사용하여 입력하게 하여도 좋다.
바람직하게는, 상기 이벤트가, 카메라나 센서를 통한 직접행위 입력장치 또는 마이크와 같은 음성입력장치를 사용하여 입력하게 하여도 좋다.
바람직하게는, 상기 표준시간이, 월드타임코드(WTC)로 설정되어도 좋다.
바람직하게는, 상기 단위동작이, 동작 장면의 각각에 해당되는 프레임 정점위치와 데이터를 저장하고, 보간법에 의해 계산하여 데이터를 생성하면서 설정되게 하여도 좋다.
바람직하게는, 상기 단위동작이, 구조체를 여러 개로 나누어서 각각의 관계를 규정하고, 나누어진 구조체의 데이터를 매 프레임 또는 변화되는 프레임마다 지정하여 데이터를 생성하면서 설정되게 하여도 좋다.
바람직하게는, 상기 단위동작이, 골격이라는 관절 단위의 구조체 데이터를 바탕으로 각각의 관계를 규정한 계층적 구조를 가지고 위치 값에 따라 움직여 데이터를 생성하면서 설정되게 하여도 좋다.
바람직하게는, 상기 단위동작이, 부수적으로 음원을 사용하고, 상기 음원에 동기되어 표시되게 하여도 좋다.
바람직하게는, 상기 음원이, WAV, MP3, WMA, MIDI 중 하나이어도 좋다.
바람직하게는, 상기 단위동작이, 음원의 진행 시간에 맞추어 상기 표준시간을 설정하고, 상기 표준시간에 동기되어 표시되게 하여도 좋다.
바람직하게는, 상기 단위동작이, 화상출력기와 음원출력기를 통해 출력되면서 표시되게 하여도 좋다.
바람직하게는, 상기 화상출력기가, 모니터, HUD(Head Up Display)장치, LCD패널중 어느 하나이어도 좋다.
바람직하게는, 상기 음원출력기가, 스피커이어도 좋다.
바람직하게는, 상기 화상출력기가, 입체로 구성 된 대상물과 송수신을 하여, 상기 입체 대상물을 통해 입출력 매개 상태를 확인하는 것이어도 좋다.
또한, 상기한 목적을 달성하기 위한 이 발명은, 상기의 협력 게임 시스템의 동작 동기화 방법을 적용하여 다수의 협력 게임 시스템 각각의 단위동작들을 개별적으로 실현하는 과정에서 발생하는 다수의 협력 게임 시스템간의 상호 간섭 작용을 구현하는 방법으로서, 상기 다수의 협력 게임 시스템의 각각은, 표준시간에 동기시켜 반복 진행하는 단위시간 중에서, 어느 하나의 단위시간 동안에 한 게임자가 입력한 이벤트에 대해 다른 게임자도 동일한 이벤트를 입력하면 이어지는 다음 단위시간 동안에 상기 입력된 이벤트에 해당하는 단위동작을 구조체를 통해 실현하면서, 동시에 각각의 협력 게임 시스템에서 구현된 개별적인 단위동작에 의해 발생하는 상호간섭들도 상기의 협력 게임 시스템의 동작 동기화 방법을 적용하여 새로운 단위동작으로 표현되게 하는 것을 특징으로 하는 다수의 협력게임 시스템 간 상호 간섭 작용을 구현하는 방법을 제공한다.
바람직하게는, 상기 표준시간이, 월드타임코드(WTC)로 설정되어도 좋다.
바람직하게는, 상기 다수의 협력 게임 시스템이, 하나의 서버시스템과 다수의 클라이언트 시스템에 의한 서버/클라이언트 형태로 구현되어도 좋다.
바람직하게는, 상기 다수의 협력 게임 시스템이, 다수의 클라이언트 시스템에 의한 피어투피어 형태로 구현되어도 좋다.
바람직하게는, 상기 피어투피어 형태가, 정보공유형과 자원공유형 중 어느 하나 또는 둘의 결합을 통해 서비스되어도 좋다.
바람직하게는, 상기 피어투피어 형태가, 핑(Ping), 퐁(Pong), 쿼리(Query), 쿼리히트(Queryhit), 푸쉬(Push) 등과 같은 스트립터 중 하나 또는 다수를 사용하여도 좋다.
바람직하게는, 상기 클라이언트 시스템이, 별도의 메모리를 가지고 온라인 또는 2인 이상 게임이 가능한 PS2 나 X-box, GameCube, PSP, PSX, N-Gage, Nintendo DS 등의 비디오 게임기를 포함하여도 좋다.
또한, 상기한 목적을 달성하기 위한 이 발명은, 상기의 협력 게임 시스템의 동작 동기화 방법을 적용하여 다수의 협력 게임 시스템 각각의 단위동작들을 개별적으로 실현하는 과정에서 발생하는 다수의 협력 게임 시스템간의 상호 간섭 작용을 구현하는 방법이 응용된 댄스를 포함하는 협력 게임 방법으로서, 상기 다수의 협력 게임 시스템의 각각은, 표준시간에 동기시켜 반복 진행하는 단위시간 중에서, 어느 하나의 단위시간 동안에 한 게임자가 입력한 이벤트에 대해 다른 게임자도 동일한 이벤트를 입력하면 이어지는 다음 단위시간 동안에 상기 입력된 이벤트에 해당하는 단위동작을 구조체를 통해 실현하면서, 동시에 각각의 협력 게임 시스템에서 구현된 개별적인 단위동작에 의해 발생하는 상호간섭들도 상기의 협력 게임 시스템의 동작 동기화 방법을 적용하여 새로운 단위동작으로 표현되게 하면서 게임을 진행하는 것을 특징으로 하는 협력 게임 방법을 제공한다.
바람직하게는, 상기 단위동작이, 처음과 끝의 포즈가 일치하게 하여도 좋다.
바람직하게는, 상기 단위동작이, 빠르기에 의해 진행시간이 조절되게 하여도 좋다.
바람직하게는, 상기 단위동작이, 전, 후, 좌, 우 및 전-좌, 전-우, 후-좌, 후-우측의 8방향으로의 이동을 포함하여도 좋다.
바람직하게는, 상기 단위동작이, 90도 회전, 180도 회전, 360도 회전 및 특수단위동작을 포함하여도 좋다.
바람직하게는, 상기 단위동작이, 앉기, 서기, 구부리기, 연속 회전을 포함하여도 좋다.
바람직하게는, 상기 단위동작이, 구조체를 구성하고 있는 관절 및 이에 의한 동작 변형을 포함하여도 좋다.
바람직하게는, 상기 단위동작이, 구조체를 구성하고 있는 관절 및 이에 의한 다수의 동작의 결합을 포함하는 여러 개를 하나의 단위로 하여도 좋다.
바람직하게는, 상기 구조체의 동작에 대한 조종시, 조종기기의 기계적 제어에 의한 시간적 효과나 항력과 작용/반작용과 같은 공간적, 물리적 효과를 포함하여 처리하게 하여도 좋다.
바람직하게는, 상기 이벤트가, 키보드, 마우스, 조이스틱, 키 패널, 댄스 패드, 네트워크 인터페이스 카드(NIC) 중 하나 또는 다수를 조합 사용하여 입력하게 하여도 좋다.
바람직하게는, 상기 이벤트가, 각종 센서 또는 카메라를 통해 입력된 위치값을 동작 데이터로 입력하게 하여도 좋다.
바람직하게는, 상기 구조체가, 2차원 또는 3차원 오브젝트이어도 좋다.
바람직하게는, 상기 오브젝트가, 카메라 등을 통해 입력되는 영상을 바탕으로 제작된 오브젝트와 실제 영상과의 결합을 통해 구현되게 하여도 좋다.
바람직하게는, 상기 구조체가, 별도의 모델 도구를 통해 만들어진 아바타이어도 좋다.
바람직하게는, 상기 시스템이, 별도의 채팅 툴을 포함하여 상대방 시스템과 문자 또는 음성으로 의사를 교환하게 하여도 좋다.
바람직하게는, 상기 시스템이, 별도의 메모리를 가지고 온라인 또는 2인 이상 게임이 가능한 PS2 나 X-box, GameCube, PSP, PSX, N-Gage, Nintendo DS 등의 비디오 게임기를 포함하여도 좋다.
바람직하게는, 상기 단위동작이, 스포츠 댄스와 같이 2인이 함께 붙어서 진행되게 하여도 좋다.
바람직하게는, 상기 스포츠 댄스가, 왈츠, 탱고, 폭스트로트, 비엔나 왈츠, 퀵스텝, 자이브, 룸바, 차차차, 삼바, 파도소블, 블루스 중 하나 또는 다수 결합하여 진행하게 하여도 좋다.
바람직하게는, 상기 단위동작이, 스윙, 살사, 디스코, 트위스트, 맘보, 힙합, 수중발레, 아이스댄싱 중 하나 또는 다수의 결합에 의한 것이어도 좋다.
유리한 효과
이상에서 상세하게 설명한 이 발명에 따르면, 3차원으로 구현되는 컴퓨터 그래픽스의 영상에서 구조체의 자유로운 동작 표현뿐만 아니라 복수의 링크를 갖는 구조체 간의 상호간섭을 고려한 구조체의 동작을 보다 단순하고 평이한 조작으로 구현할 수 있다.
또한, 이 발명에 따르면, 3차원 그래픽스 영상을 통하여 제공되는 구조체 동작에서 실제와 유사한 물리적 특성을 구현할 수 있으며, 구조체 전체가 자연스러운 자세를 유지하면서도 연속동작이 가능하게 된다.
발명의 실시를 위한 최선의 형태
이하에서, 첨부된 도면을 참조하면서 이 발명의 실시 예에 따른 협력 게임 시스템의 동작 동기화 방법, 이를 적용한 다수의 협력 게임 시스템 간의 상호간섭작용 구현 방법 및 댄스를 포함하는 협력 게임 방법을 보다 상세하게 설명한다.
도 1 은 이 발명의 실시 예에 따른 협력 게임 시스템의 동작 동기화 방법을 구현하기 위한 개략적인 구성도이다.
이 발명의 실시 예에 따른 협력 게임 시스템은, 입력부(100)와 연산처리부(110)와 동기화부(120)와 인터페이스부(130)와 출력부(140)를 포함한다. 여기서, 협력 게임이란, 예를 들면 탱고와 같은 댄스 게임에서 리더의 동작 리드를 팔로우어가 그대로 따라가면서 하나의 스텝으로 완성하는 것과 같이, 다수의 구조체가 서로 협력하여 하나의 완성된 동작을 만들면서 진행해 가는 게임을 의미한다.
상기 입력부(100)는, 사용자의 요구에 따라 특정한 동작을 표시하게 선택하는 이벤트를 발생시킨다. 이 입력부(100)에서는 휴먼 인터페이스로서 컴퓨터 혹은 휴대장치에서 다수의 키에 의해 데이터 및 정보를 연산처리부(110)에 입력한다. 일반적으로 입력부(100)는 키보드, 마우스, 트랙 볼, 조이스틱, 터치스크린 및 핸드폰 키패드, 댄스패드, 네트워크 인터페이스 카드(NIC)를 통한 입력들 중 하나 또는 다수의 조합으로 구현되어질 수 있다.
상기 연산처리부(110)는 도시되지 않은 중앙연산장치(Central Processing Unit)와, 롬(ROM)과 램(RAM)과 CRT 제어부와 제어부를 포함한다.
여기서, 중앙연산장치(CPU)는 제어 프로그램에 의하여 연산 및 시스템 제어를 수행하며, 마이크로프로세싱유닛(MPU) 등으로 이루어지고 롬에 저장된 제어프로그램을 기동시키며, 그 제어 프로그램에 따라 데이터 제어 처리를 실행하는 연산을 수행한다.
그리고, 롬(ROM)은 비휘발성 메모리로서, 중앙연산장치의 제어 프로그램을 저장한다.
또한, 램(RAM)은 중앙연산장치가 제어 프로그램을 구동하는데 필요한 데이터나 컨텐츠 또는 중앙연산장치의 연산과정에서 필요한 연산결과를 저장한다.
또한, CRT 제어부는 램(RAM)에 저장되어 있는 데이터나 컨텐츠를 어드레스를 통해 소정 주기에 따라 순차 판독하여 화상신호로 변환하여 출력부(140)에게 출력한다.
또한, 제어부는 CRT 제어부에서 발생한 화상신호와 음성신호를 각각 인터페이스부(130)를 통해 화면 출력부와 음원 출력부에게 전달한다.
상기 동기화부(120)는 입력부(100)에서 발생한 이벤트를 표준시간과 비교하여 시간차를 보정함으로써, 사용자간의 시간격차를 동일하게 일치시킨다. 이러한 동기화부(120)는 도시되지 않은 시간설정부와 시간동기부와 단위동작설정부와 단위동작동기부를 포함하여 구성된다.
여기서, 시간설정부는 사용자의 시간을 하나의 표준으로 동일하게 일치시키기 위한 표준시간을 설정한다. 표준시간을 설정하는 방법으로는 온라인이나 인터넷이 연결된 상태에서는, 인터넷상의 원자 시계 서버 혹은 온라인이나 웹 서비스를 위한 서버의 시계를 표준시간으로 설정하고 사용자의 시간을 표준시간에 일치시키는 방법을 사용한다. 한편, 온라인 및 웹이 연결되지 않은 상태에서 장치간의 연결된 경우에는 각각의 시간 혹은 장치에 지정된 시간을 그대로 표준시간으로 사용할 수도 있다.
그리고, 시간동기부는, 단독 시스템 형태로 구현하는 경우뿐만 아니라 특히 네트워크를 통한 원격 클라이언트 시스템의 형태로 구현하는 경우, 시간설정부에서 설정된 표준시간과 사용자간의 전송시간을 계산하여 서버에서 정보를 전송할 경우 발생하는 전송시간의 차이에 따른 시간차를 계산하고 이를 사용자의 인터페이스부(130)를 통해 전달하여 줌으로써 정보 전송에 따른 이벤트의 시간차를 제거하는 역할을 한다. 또한, 서버의 부하에 따른 전송시간의 지연을 고려하여 시간차를 재계산하여 이벤트를 일치시키는 역할도 함께 수행한다.
그리고, 단위동작설정부는 구조체를 구성하고 있는 관절 및 이에 의한 동작에 의한 단위동작을 구분하여 진행, 회전, 평형 유지와 같은 동작을 진행할 수 있게 한다. 이러한 단위동작설정부에서 다양한 동작의 진행에 따른 데이터의 생성방식으로는, 보간에 의해 계산하는 방식과 스케레탈 애니메이션(Skeletal Animation)과 골격 애니메이션(Bone Animation 또는 Skining Animation) 방식이 있다. 보간에 의한 방식(Vertex Animation 또는 Key Frame Animation)은 각각의 동작에 의한 장면에 해당되는 프레임에서 각 정점의 위치와 관련 데이터를 저장하고 있다가 이것을 선형 보간이나 그 이외의 보간에 의해 계산하는 방식이다. 스케레탈 애니메이션은 구조체를 여러 개로 나누어서 각각의 관계를 규정하고, 나누어진 구조체 마다 이동, 축소, 회전을 포함한 데이터를 매 프레임 또는 변화되는 프레임마다 저장하여 사용하는 방식이다. 골격 애니메이션은 골격(bone)이라는 관절 단위의 구조체 데이터를 토대로 각각의 관계를 규정한 계층적 구조를 가지고 위치값을 가지고 움직이는 방식이다. 골격 애니메이션 방식을 사용하면 부드러운 동작과 적은 데이터 파일로도 동작에 따른 데이터 생성이 가능하다.
그리고, 단위동작동기부는 사용자간에 원격으로 접속되어 있는 하나의 구조체와 다른 구조체와의 상호간섭을 고려하기 위해, 설정된 표준시간을 바탕으로 각 사용자에게 동기화된 시간을 토대로 구조체 간의 이벤트 및 동작발생의 동시성을 구현하도록 한다.
즉, 다수의 사용자에 의해 다수의 입력이 가능한, 설정된 표준시간을 바탕으로 각 사용자에게 동기화된 시간을 토대로 선입력자의 입력에 의해 발생한 이벤트와 후입력자의 입력에 의해 발생한 이벤트를 비교하여 두 입력의 일치여부를 판단하여 동작발생의 동시성을 구현하게 한다.
이러한 단위동작동기부에서 단위동작을 맞추기 위해서 필요에 따라 부수적으로 음원을 사용하는 것이 가능하며, 이때 사용하는 음원으로서 WAV, MP3, WMA, MIDI 및 이와 유사한 형태의 음원을 사용한다. 이 경우 동작진행과 음원의 박자를 일치시킬 수도 있고, 음원에서 시간 진행에 맞추어 표준시간을 설정하고 이를 단위동작과 일치시키는 것도 가능하다.
상기 인터페이스부(130)는 연산처리부(110) 내부의 중앙연산장치와 롬과 램과 CRT제어부를 외부장치인 입력부와 메모리부와 표시부와 정합하여, 상기 표준시간에 동기된 이벤트에 따른 영상과 음원이 출력되도록 정합한다.
상기 출력부(140)는 화면 및 음원을 출력한다. 컴퓨터 및 휴대장치에서 송수신되는 데이터 및 제어여부를 모니터, HUD(Head UP Display device)장치, LCD 패널 등과 같은 화상 표시소자의 화면에 표시하거나, 음원신호를 스피커 등을 통해 출력하여 입출력 매개상태를 확인하도록 한다. 또는 화면이나 음원을 출력하는 별도 기기와의 연결을 통하여 입출력 매개 상태를 확인하는 것도 가능하다.
상기와 같이 구성된 이 발명의 실시 예에 따른 협력 게임 시스템의 동작 동기화 작용을 설명한다.
먼저, 동기화부(120)는 상술한 방법들 중 한가지 방법을 이용하여 표준시간을 설정한다.
그리고, 단위시간동안 움직이는 단위동작을 설정한다. 앞으로 걷기 동작에 있어서, 임의의 단위시간의 처음과 마지막 자세는 기본자세이고, 단위시간동안에 걷기에 대한 단위동작이 실행된다.
예컨대 사용자가 걷기 동작 이벤트를 입력부(100)를 통해 입력하면, 연산처리부(110)는 이벤트를 동기화부(120)에서 입력한 순간의 다음 단위시간에 동기되어 구조체가 해당 단위시간 동안에 걷기 동작을 하도록 인터페이스부(130)를 거쳐서 출력부(140)를 통해 출력하도록 한다. 그리고, 구조체가 걷기 동작을 수행하는 단위시간내의 임의의 순간에 사용자가 입력한 이벤트는 그 다음 단위시간 동안에 구조체에 적용되어 실행된다.
도 2 는 이 발명의 실시 예에 따른 협력 게임 시스템의 동작 동기화 방법을 구현하기 위한 기능 블록도이다.
먼저, 상기 입력부(100)는 입력기(101)를 구비하는데, 입력기(101)는 키보드, 마우스, 조이스틱, 키패널, 댄스패드와 같은 휴먼 인터페이스로서, 컴퓨터 혹은 휴대장치에서 다수의 키에 의해 이벤트를 발생시킨다. 또한, 입력기(101)는 카메라나 센서를 통한 동작의 직접입력 혹은 마이크와 같은 음성 입력을 통한 명령 입력 또는 네트워크 인터페이스 카드(NIC)를 통한 입력과 같은 형태도 가능하다.
상기 동기화부(120)는, DB처리기(121)와 가상공간처리기(122)와 개인정보처리기(123)를 구비한다.
여기서, DB처리기(121)는 컴퓨터 혹은 휴대장치에 포함된 혹은 별도로 추가가능한 형태로써 사용자의 사용기록이나, 점수, 레벨 등과 같은 각 사용자의 기록을 데이터베이스화하여 본 시스템에서 필요시 불러올 수 있도록 한다.
그리고, 가상공간처리기(122)는 시스템의 기동시 가상공간을 연산처리부(110)의 램에 적재하고, 사용 중에는 사용자의 이벤트 입력에 따라 공간을 조정해 주며, 시스템의 종료시 가상공간을 램에서 소멸시킨다.
그리고, 개인정보처리기(123)는 시스템 기동시 사용자의 개인정보를 인증하고, 종료시 개인 정보를 저장하는 작업을 처리하기 위한 모듈로서, 호스트 서버와의 네트워크망 통신을 이용해서 처리된다.
상기 연산처리부(110)는 이벤트처리기(111)와 액세스데이터처리기(112)와 GUI(Graphic User Interface)처리기(113)를 구비한다.
여기서, 이벤트 처리기(111)는 GUI처리기(113)의 진행에 따라 입력기(101)를 이용한 사용자의 입력데이터를 액세스 데이터로 변환시킨다.
그리고, 액세스데이터처리기(112)는 액세스데이터전송기와 액세스데이터판정기로 구성된다. 액세스데이터전송기는 이벤트처리기(111)가 생성한 액세스데이터를 타 클라이언트에게 보내고, 타 클라이언트로부터 액세스데이터를 받아들인다. 액세스데이터판정기는 주어진 조건인 시간과 요구된 데이터를 비교 판단하며, 그 결과를 인터페이스부(130)에게 보낸다.
그리고, GUI처리기(113)는 출력부(140)를 통하여 사용자에게 현재 시스템이 진행되는 각종 상황을 모니터할 수 있게 하며, 또한 사용자가 이벤트를 생성해야 할 시점을 지시하는 역할을 한다.
상기 인터페이스부(130)는 동작진행처리기(131)를 구비하며, 동작진행처리기(131)는 액세스데이터처리기(112)로부터 전달된 정보를 이용하여 동기화부(120)에서 설정된 단위동작을 각 클라이언트에서 실행시킨다.
상기 출력부(140)는 출력기(141)를 구비하며, 출력기(141)는 동작진행처리기(131)에 의해 처리된 단위동작을 화면 및 음원을 동반하여 출력한다.
도 3 은 이 발명의 실시 예에 따른 협력 게임 시스템의 동작 동기화 방법을 네트워크를 통한 원격 클라이언트 시스템 형태로 구현하기 위한 기능 블록도이다.
이 발명의 실시 예에 따른 협력 게임 시스템은, 도 3 에 도시된 바와 같이, 2 대의 클라이언트 시스템(310,320)과 호스트서버(330)가 결합된 서버/클라이언트(Server/Client, S/C)방식으로 구현될 수도 있고, 피어투피어(Peer to Peer, P2P)방식으로 구현될 수도 있다. 또는, 별도의 메모리를 가지고 온라인 또는 2인 이상 게임이 가능한 PS2 나 X-box, GameCube, PSP, PSX, N-Gage, Nintendo DS 와 같은 비디오 게임기 방식으로 구현될 수도 있다.
이러한 S/C방식과 P2P방식의 차이는 접속되는 사용자의 수에 기인하는데, 대규모의 사용자가 접속해야 할 필요가 있을 경우 S/C방식을, 소수의 사용자만을 고려하는 경우에는 P2P방식을 선택적으로 적용한다.
상기 S/C 방식에서 호스트서버는 데이터베이스를 관리하여 각 클라이언트 시스템의 정보처리를 통하여 개인간의 정보를 처리한다. 호스트서버의 데이터베이스를 토대로 각 원격 클라이언트 시스템간에 이벤트 처리가 가능해지고 액세스데이터처리를 통하여 상호간 액세스데이터가 공유된다.
한편, P2P방식은 호스트서버 없이 두 클라이언트 시스템이 상호간에 개인정보를 처리한 후 서로 공유한다. 이러한 P2P방식은 정보공유형과 자원공유형 모두에 대한 실시간 통신이나 자원분배가 가능하며, 핑(Ping), 퐁(Pong), 쿼리(Query), 쿼리히트(Queryhit), 푸쉬(Push) 등과 같은 스트립터의 사용이 자유롭게 된다. 또한 PS2 나 X-box, GameCube, PSP, PSX, N-Gage, Nintendo DS와 같은 비디오 게임기는 게임기에 별도의 메모리가 있으므로 여기에서 데이터베이스를 관리하고 상호간 액세스 데이터를 공유할 수가 있다.
각각의 클라이언트 시스템은, 도 2 에 도시된 바와 같은 협력 게임 시스템을 포함하며, 입력기로부터 입력되는 이벤트에 의해 움직이는 구조체와 타 클라이언트 시스템으로부터 입력되는 이벤트에 의해 움직이는 구조체를 포함한다.
즉, 도 3 에 도시된 바와 같이, 2개의 클라이언트 시스템이 연결된 경우, 각각의 클라이언트 시스템의 출력부 화면에는 2개의 구조체가 표시되는데, 하나는 자신의 입력기로부터 입력되는 사용자의 이벤트에 의해 움직이고 다른 하나는 상대방 클라이언트 시스템으로부터 입력되는 이벤트에 의해 움직인다.
두 클라이언트 시스템은 표준시간으로 동기가 맞춰지고, 일정 간격으로 설정된 단위시간동안 입력된 이벤트에 의해 다음 단위시간동안 해당 이벤트에 따른 단위동작이 실행된다.
도 4 내지 도 6 은 도 3 의 클라이언트 시스템 형태로 구현되는 댄스를 포함하는 협력 게임 시스템에서 동작을 동기화하는 과정을 도시한 흐름도이고, 도 7 내지 도 23 은 도 4 의 댄스를 포함하는 협력 게임 시스템의 모니터에 디스플레이되는 예시 화면들이다.
설명의 편의상 도 4 내지 도 6의 게임방법은 P2P방식으로 구현된 댄스를 포함하는 협력 게임 방법이라고 가정한다.
제1게임자는 제1클라이언트 시스템을, 제2게임자는 제2클라이언트 시스템을 각각 이용하여 게임하는 것으로 하고, 제1게임자가 리더(leader), 제2게임자가 팔로우어(follower)라고 가정한다.
표준시간을 일정 간격으로 설정된 다수의 단위시간구간(World Time Code:WTC)으로 나누었을 때, 각 게임자들은 임의의 단위시간구간 중에 동작 이벤트를 입력하고, 그 입력된 동작 이벤트는 네트워크를 이용하여 상대방 클라이언트 시스템에게 전송되며, 그 동작 이벤트에 해당하는 동작이 다음 단위시간구간(WTC) 동안에 화면에 표시된다.
게임자에 의해 직접 입력되는 동작이벤트를 로컬스텝신호라고 하고, 상대방 클라이언트 시스템으로부터 입력되는 동작이벤트를 원격스텝신호라고 한다.
즉, 제1클라이언트 시스템의 경우, 제1게임자에 의해 입력되는 동작이벤트를 로컬스텝신호라고 하고 제2클라이언트 시스템로부터 입력되는 동작이벤트를 원격스텝신호라고 한다. 제2클라이언트 시스템의 경우, 제2게임자에 의해 직접 입력되는 동작이벤트를 로컬스텝신호라고 하고 제1클라이언트 시스템으로부터 입력되는 동작이벤트를 원격스텝신호라고 한다.
도 7 은 사용자의 모니터에 표시되는 GUI화면의 일 예시도이다. 사용자 GUI 화면은 춤을 추기 위한 무대배경과 스텝신호를 표시하는 스텝이미지(71), 화면중심부의 구조체(캐릭터)(72), 단위동작 입력 실패누적수 또는 성공누적수(73) 및 시간게이지(74)가 표시된다. 이 시간게이지(74)는 단위동작 입력 가능시간으로서, 현재 WTC 중 경과한 시간과 남은 시간을 표시한다.
도 4 는 도 3 의 클라이언트 시스템 형태로 구현되는 댄스를 포함하는 협력 게임 시스템에서 동작을 동기화하는 전체 과정을 도시한 흐름도이다.
먼저, 게임이 시작되면 상대방 클라이언트 시스템과 동기를 맞춘다(S401).
도 8 내지 도 11 및 도 16 내지 도 19는 동기를 맞추는 과정의 일 예시 화면이다.
먼저, 도 8 및 도 16 과 같이 각 클라이언트 시스템에 게임자들이 게임시작을 확인하는 대화창이 표시된다. 이 대화창에서 각 게임자들이 확인버튼을 클릭하면, 도 9 및 도 17 과 같이 배경화면과 구조체가 표시되면서 상대방 클라이언트 시스템으로부터 동기신호가 수신되기를 대기한다. 쌍방간에 동기신호가 수신되면 도 10 및 도 18 과 같이 댄스를 포함하는 협력 게임 서비스 준비상태로 전환된다.
그리고, 도 11 및 도 19 와 같이 댄스를 포함하는 협력 게임이 시작되어 임의의 한 단위시간구간(WTC_i)이 시작되면(S402), 화면에 동작입력 준비중 상태임을 표시한다(S403). WTC_i이 시작될 때에는 모두 남은 시간으로 표시되고 시간이 경과할수록 경과한 시간은 증가하고 남은 시간은 감소하도록 표시된다.
단위동작 입력 가능시간동안에 동작 입력 처리 서브루틴(S404)을 수행한다. 이 동작 입력 처리 서브루틴이 수행되는 동안에 각 게임자는 동작이벤트를 입력하는데, 리더인 제1게임자가 먼저 동작이벤트를 입력하면 제1게임자가 입력한 스텝신호가 제1 및 제2클라이언트 시스템에게 표시되고, 제2게임자는 화면에 표시된 스텝이미지를 보고 동작이벤트를 입력하면 제2게임자가 입력한 스텝신호가 제1클라이언트 시스템에게 전달된다. 이 동작 입력 처리 서브루틴의 상세한 설명은 도 5 와 도 6 을 참조하면서 후술하기로 한다.
즉, 동작 입력 처리 서브루틴(S404)이 정상적으로 수행된 후에는 각 클라이언트 시스템은 게임자에 의해 직접 입력된 동작이벤트에 따른 로컬스텝신호와 상대방 클라이언트 시스템으로부터 입력된 원격스텝신호가 존재하게 된다.
동작 입력 처리 서브루틴(S404)후 두 게임자가 입력한 동작이벤트가 일치하는 지를 검사한다(S405).
단계 S405의 검사 결과, 두 게임자가 입력한 동작이벤트가 일치하면 도 13 및 도 21 과 같이 동작입력 성공 메시지를 화면에 표시하고(S406), 입력 성공한 동작에 대한 랜더링을 준비한다(S407).
한편, 단계 S405의 검사 결과, 두 게임자가 입력한 동작이벤트가 일치하지 않으면 도 14 및 도 22 와 같이 동작입력 실패 메시지를 화면에 표시하고(S408), 입력 실패한 동작에 대한 랜더링을 준비한다(S409). 이 입력된 동작에 대한 랜더링은 WTC_i+1 구간에 처리된다.
WTC_i 구간이 종료하지 않았으면(S410), 동작입력 실패한 경우에 동작 입력처리 서브루틴(S404)을 다시 실행하도록 할 수 있다.
WTC_i 구간이 종료되면(S410), 동작입력의 성공여부를 판단하여(S411), 성공한 경우에는 성공횟수를 누적하고 성공동작 랜더링을 수행하며(S412), 실패한 경우에는 실패횟수를 누적하고 실패동작 랜더링을 수행한다(S413).
그리고, 게임종료여부를 판단하여 게임이 종료되지 않았으면 i를 1 증가시킨 후(S415), 단계 S403으로 되돌아간다. 엄밀하게 말하면 단계 S412와 S413의 성공동작 랜더링과 실패동작 랜더링은 WTC_i+1 구간에서의 단계 S403 내지 단계 S409가 처리되는 동안에 처리되나, 본 실시 예에서는 이 발명의 이해를 돕고자 별도로 표시한다.
상술한 댄스를 포함하는 협력 게임은 댄스 서비스의 배경음악이 끝나거나 실패누적횟수가 정해진 횟수를 초과한 때 종료한다. 실패누적횟수를 초과하지 않은 상태에서 배경음악이 끝나면 도 15 및 도 23 과 같이 댄스게임 클리어화면이 출력된다.
도 5 는 도 4 의 댄스를 포함하는 협력 게임 시스템 중, 리더인 제1클라이언트 시스템에서의 동작 입력 처리 서브루틴을 도시한 흐름도이다.
제 1게임자로부터 키입력이 있으면(S501), 해당 키입력이 정상적인 동작이벤트인지를 검사한다(S502).
정상적인 동작이벤트가 아니면 동작입력 실패 메시지를 화면에 표시하고(S503), 단계 S501로 되돌아간다.
단계 S502에서 정상적인 동작이벤트가 입력된 것이면, 제1클라이언트 시스템은 로컬스텝신호를 생성하고(S504), 도 12 와 같이 해당 로컬스텝신호를 화면에 표시하며(S505), 아울러 로컬스텝신호를 상대방인 제2클라이언트 시스템에게 전송한다(S506). 그리고, 상대방인 제2클라이언트 시스템으로부터 원격스텝신호를 수신하면 단계 S405로 복귀한다(S507).
도 6 은 도 4 의 댄스를 포함하는 협력 게임 시스템 중, 팔로우어인 제2클라이언트 시스템에서의 동작 입력 처리 서브루틴을 도시한 흐름도이다.
상대방인 제1클라이언트 시스템으로부터 원격스텝신호가 수신되면(S601), 도 20 과 같이 수신된 원격스텝신호를 화면에 표시하고(S602), 제2게임자로부터의 키입력을 대기한다.
키입력이 있으면(S603), 해당 키입력이 정상적인 동작이벤트인지를 검사한다(S604). 정상적인 동작이벤트이면 로컬스텝신호를 생성하고(S605), 생성된 로컬스텝신호를 상대방인 제1클라이언트 시스템에게 전송한 후 단계 S405로 복귀한다(S606). 한편, 단계 S604에서 정상적인 동작이벤트가 아니면 동작입력실패메시지를 화면에 표시하고(S607), 단계 S603으로 되돌아간다.
도 3 에는 하나의 호스트 서버에 2대의 클라이언트만이 연결된 것으로 되어 있으나, 더 많은 클라이언트 시스템의 연결이 가능하다. 이와 같이 다수의 클라이언트시스템이 연결되는 경우로서, 하나의 스테이지 내에서 다수의 협력 게임 시스템들이 각각의 단위동작들을 개별적으로 구현하면서 경기를 진행할 때 다수의 협력 게임 시스템 간에는 상호 간섭이 발생할 수 있게 된다.
예를 들면, 다수의 협력 게임 시스템들은 각각의 단위동작들을 개별적으로 구현하지만, 이러한 구현 과정에서 서로 부딪쳐 제대로 된 단위동작의 구현이 어렵게 되는 경우가 발생할 수 있게 된다.
이로부터, 상기 다수의 협력 게임 시스템의 각각은, 표준시간에 동기시켜 반복 진행하는 단위시간 중에서, 어느 하나의 단위시간 동안에 한 게임자가 입력한 이벤트에 대해 다른 게임자도 동일한 이벤트를 입력하면 이어지는 다음 단위시간 동안에 상기 입력된 이벤트에 해당하는 단위동작을 구조체를 통해 실현하고, 동시에 각각의 협력 게임 시스템에서 구현된 개별적인 단위동작에 의해 발생하는 상호간섭들도 상기의 협력 게임 시스템의 동작 동기화 방법을 적용하여 상호간섭을 자연스럽게 해결할 수 있도록 반영된 새로운 단위동작으로 표현되게 한다.
즉, 각종 온라인 및 웹상에서 다수의 클라이언트 시스템이 접속되어 구현되는 가상공간 상에서, 다수의 클라이언트 시스템들을 표준시간으로 동기화하고, 다수의 클라이언트 시스템들 각각에서 발생한 이벤트들을 상대방 클라이언트들에게 전송하고, 상기 일정한 기준구간 동안에 발생한 이벤트들을 상기 표준시간에 동기시키고, 하나의 선입력 클라이언트의 입력이벤트와 그에 따른 하나의 후입력 클라이언트의 입력 이벤트는 GUI를 통해 해당 클라이언트들의 화면에 표시하며, 하나의 구조체의 동작을 해당 클라이언트들의 입력이벤트의 일치여부에 따라 한 개의 단위동작을 실현되게 하고 동시에 다른 클라이언트들의 입력이벤트들에 의해 실현되어진 단위동작들에 따른 상호간섭에 의해 하나의 형태로 진행되어 화면에 표시함으로써, 전체적으로 더욱 현실감 넘치는 협력 게임을 즐길 수 있게 한다.
이 발명의 실시 예에 따른 댄스를 포함하는 협력게임의 경우, 두 구조체(캐릭터)가 서로 마주보는 형태로 결합하고, 게임자는 전, 후, 좌, 우 및 전-좌, 전-우, 후-좌, 후-우측의 8방향의 단위동작으로 구조체를 이동시키고, 이외에 90도 회전, 180도 회전, 360도 회전 및 별도의 특수 단위동작을 포함하여 12개의 단위동작을 가지도록 한다. 하나의 단위동작을 수행하는데 소요되는 시간은 WTC 1단위에서 WTC 4단위까지이고, 각 단위동작의 연결 포즈를 부드럽게 하기 위해서 단위동작의 처음과 끝의 포즈가 반드시 정확히 일치하게 설정한다. 여기에서 단위동작은 이해를 돕기 위해 방향에 대해서만 설명하였으나 하나의 단위동작 내에서 구조체를 구성하고 있는 관절 및 이에 의한 동작변형(예를 들어 면 한쪽 팔을 위로 높이 들거나, 위에서 둥글게 흔들거나, 팔을 구부렸다가 펴거나, 혹은 팔을 올렸다가 내리는 등과 같은 다수의 결합, 혹은 방향과는 별도로 키의 입력에 따라 방향 및 팔 다리의 움직임에 따른 다수의 동작의 결합을 포함하는) 여러 개를 하나의 단위로 포함시킬 수 있다.
게임이 시작되면 배경음악의 진행시간 경과에 따라 제1클라이언트 시스템(리더)은 제2클라이언트 시스템(팔로우어)에게 WTC_i 동기신호를 전송하고, 각 클라이언트 시스템은 단위시간구간 WTC_i의 시간동안 제1게임자로부터 입력된 동작이벤트에 해당하는 스텝이미지를 속이 빈 상태로 표시한다.
단위시간구간 이후 제1게임자와 제2게임자에 의해 입력된 동작이벤트가 일치하면 속이 찬 상태로 표시하고, 다음 단위시간구간인 WTC_i+1동안에 입력 성공에 따른 동작이 진행되거나, 포인트를 가산하여 동작의 연결이 성공적으로 이루어졌음을 표시할 수 있으며, 필요에 따라 화면상에 이를 파란색의 램프나 혹은 OK, 성공과 같은 표시를 할수도 있다.
그러나, 단위시간구간 이후 제1게임자와 제2게임자에 의해 입력된 동작이 일치하지 않으면 다음 단위시간구간인 WTC_i+1동안 입력실패에 따른 동작이 진행 되고, 출력부에 단위동작 입력 실패를 표시한다.
이와 같은 동작 입력의 불일치가 발생 또는 누적될 경우, 게임의 진행이 중단되거나 혹은 포인트의 감소, 또는 빨간색의 램프표시나 FAIL, 실패와 같은 메시지를 화면에 출력할 수도 있다. 또는, 화면 출력이 아닌 음향이나 음성을 통한 출력도 가능하다.
단위동작의 마지막 프레임에서 구조체는 마지막 포즈의 위치로 이동하고 다음 단위동작을 시작한다. 이것은 가상공간에서 모델 등(오브젝트)의 이동을 속도벡터로 처리할 경우 오브젝트가 일정 속도와 일정 방향으로 이동하기 때문에 춤동작이나 격투동작 등의 모델이 취하는 개별동작(발이 닿는 위치 등)을 가상공간에 매치시킬 수 없는 문제점을 해결하기 위한 것이다.
이 발명의 실시 예에서는 춤 단위동작의 처음과 끝의 포즈가 반드시 정확히 일치한 것으로 설명하였으나, 이는 하나의 예일 뿐이며 처음과 끝의 포즈를 일치시키지 않을 수도 있다. 또한, 단위동작의 진행시간은 필요에 따라서 템포(빠르기)를 조절하는 것이 가능하다.
또한 이 발명의 실시 예에서는 추가적으로 일련의 스텝이미지들을 게임자의 화면에 표시하여 일정 형식의 댄스를 포함하는 협력 게임을 구현하는 것도 가능하다.
또한 이 발명의 실시 예에서 단위동작을 12개로 한정하였으나 댄스의 종류에 따라 상기 12개의 단위동작 이외에도 앉기, 서기, 구부리기, 연속 회전과 같은 형태로 동작을 추가하거나 변경하는 것이 가능하다.
또한, 입력부에서는 키보드나 마우스, 조이스틱, 키패널, 댄스패드, 네트워크 인터페이스 카드(NIC)와 같은 장치를 통해 입력하는 것을 설명하였으나, 가상현실과의 접목을 위한 각종 부착 센서, 혹은 카메라를 이용하여 위치값을 구하는 방법 혹은 조합이나 병행 등을 통하여 대상물에서 동작 데이터를 입력하는 것이 가능하다.
또한, 클라이언트에서 사용되는 모델은 통상의 2차원 혹은 3차원 오브젝트를 그 대상으로 사용하지만 별도의 모델도구를 통해 만들어지는 아바타(Avatar) 혹은 카메라 등을 통해 입력되는 영상을 토대로 제작되는 오브젝트와 실제영상과의 결합을 통해 구현되는 것도 가능하다.
또한, 입력부와는 별도로 매신저와 같은 채팅들을 사용하여 상대방과의 문자 또는 음성을 통해 의사를 교환하는 것이 가능하다.
또한, 출력부는 모니터 등을 통하여 동작이 출력되는 것에 대해 설명하였으나 입체로 구성된 대상물(예를 들면, 사람을 포함하여 동물, 로보트, 비행기 등)과의 유선 또는 무선 상의 송수신을 통하여 하나 혹은 하나 이상이 결합된 대상물을 조정하는 것도 가능하다.
이 발명은 상기한 실시 예에 한정되지 않고, 여러 가지의 형태로 실시할 수도 있다.
즉, 2인 3각이나 2인 이상이 하나의 구조체를 형성하여 조작하여야 하는 다양한 응용 게임에도 적용 가능하다. 예를 들어, 중국의 사자놀이과 같이 구조체의 단위동작과 동기화가 필요하며 평형유지가 요구되는 게임이나, 써커스나 곡예공연에서 볼 수 있는 2인 이상의 줄타기, 공굴리기, 인간 탑 쌓기와 같은 균형이 요구되는 동작을 응용한 게임, 혹은 1인용 시뮬레이션 게임에서 구조체의 동작에 대한 대상물체 동작조종 시, 조종기기의 기계적 제어에 의한 시간적 효과나 공간적 효과(즉, 공기 중, 수중, 우주에서의 항력과 작용, 반작용에 따른 효과 등)를 단순한 시간지연으로 처리하지 않고 물리적 영향을 포함하여 처리하는 경우 등에 응용하여 적용할 수 있다.
또한, 스포츠댄스와 같이 2인이 함께 붙어서 진행되는 게임의 경우도 가능하다. 스포츠댄스는 왈츠, 탱고, 폭스트로트, 비엔나 왈츠, 퀵스텝과 같은 모던 5종 이외에 자이브, 룸바, 차차차, 삼바, 파도소블과 같은 라틴 5종목이나 블루스, 스윙, 살사, 디스코, 트위스트, 맘보, 힙합, 수중발레, 아이스댄싱 중 하나 또는 다수의 결합에 의한 동작으로도 진행이 가능하다.
또한, 이 발명의 실시 예에서는 게임자가 2인인 경우에 대하여 설명하였으나, 이 발명은 이에 한하지 않고 게임자가 하나 이상으로 구성되는 다수의 구성으로 하여도 무방하다.
마찬가지로, 이 발명의 실시 예에서는 구조체 2개가 상호간섭에 의하여 하나의 형태로 진행되는 경우에 대하여 설명하였으나, 이 발명에 따르면 하나 이상의 형태로 구성되는 다수의 경우에 대해서도 동일하게 적용할 수 있다.
상기에서 설명한 이 발명에 관한 소스 프로그램의 예를 들면 다음과 같다.
//----------------------
// part D - after connect Game Windows display
if( g_b_isConnectSuccess )
int iCount=0;
// App is now connected via DirectPlay, so start the game.
g_hrResult=S_OK;
//--------------------------
g_b_isLeader = g_pNetStage->IsLeaderPlayer();
g_pRemote->b_isLeader_local = g_b_isLeader;
//myLog_Printf("\n=================================\n");
myLog_Printf("base at : b_isLeader_local : %d\n", g_pRemote->b_isLeader_local);
//----------------------
// Game application ceate
// create multiplay two player
pM2p=M2P_Create(
g_app_hInst, g_app_hWnd,
Preset->Camera,
Preset->Engine, Preset->i_Width, Preset->i_Height,
DebugPath,
g_pRemote
);
if(pM2p != NULL) pM2p->b_isAfterCreate = TRUE;
else MessageBox(NULL,"Failed to create a M2P structure!!","Error", MB_OK), exit(-1);
//--------------------------
// after create signal
// trans game data : after_create
if(pM2p->b_isAfterCreate)
HRESULT hr=S_OK;
hr = SendTo_GameData(GAME_MSGID_AFTER_CREATE, (LONG)pM2p->b_isAfterCreate, TRUE);
if( FAILED(hr) )
MessageBox( NULL, TEXT("FAILED. :("), TEXT("g_pDP->SendTo"), MB_OK);
f_OldTimeGetTime = (float) timeGetTime();
while (b_isWaiting)
if(g_pRemote->b_isAfterCreate)
b_isRunning =JE_TRUE;
b_isWaiting =FALSE;
//for exit this loop
if( IsKeyDown( VK_ESCAPE) )
//jeEngine_Printf(pM2p->Engine, 100, 100, "have been pressed ESC key");
b_isWaiting =FALSE;
goto END_LOOP;
//-----------------------
if(PeekMessase(&Msg, NULL, 0, 0, PM_REMOVE)) //non-blocking message check
// stop after quit message is posted
if(Msg.message == WM_QUIT)
// break; // <---loop ends here
goto END_LOOP;
TranslateMessags(&Msg);
DispatchMsssage(&Msg);
myLog_Printf("COMPLETE SYNCRONIZED STEP1 ==========> \n");
//-------------------------
f_OldTimeGetTime = (float) timeGetTime();
while (b_isRunning)
//-------------
// Update the application
if(!App_Update()) b_isRunning = FALSE;
if(!App_Render()) b_isRunning = FALSE;
if(!App_UserInput()) b_isRunning = FALSE;
//------------
if(PeekMessage(&Msg, NULL, 0, 0, PM_REMOVE)) //non-blocking message check
// stop after quit message is posted
if(Msg.message == WM_QUIT)
break; //<---loop ends here
TranslateMessage(&Msg);
DispatchMessage(&Msg);
END_LOOP:
//-------------------------------
// for multiplay two player
if(!M2P_Shutdown(pM2p))
MessageBox(NULL, "Failed M2P_Shutdown()!!","Error", MB_OK│MB_ICON ERROR), _exit(-1);
if(!myLog_Report("Debug_data_trans_test.txt"))
MessageBox(NULL, "Failed myLog_Report()!!","Error", MB_OK│MB_ICONERROR), _exit(-1);
// goto REENTRY_STAGE;
//------------------------------
if( FAILED( g_hrResult) )
if( g_hrResult==DPNERR_CONNECTIONLOST )
MessageBox( NULL, TEXT("The DirectPlay session was lost. ")
TEXT("The test will now quit."),
TEXT("Dance P2P Test"), MB_OK│MB_ICONERROR );
else
DXTRACE_ERR( TEXT("DialogBox"), g_hrResult );
MessageBox( NULL, TEXT("An error occured during the game. ")
TEXT("The test will now quit."),
TEXT("Dance P2P Test"), MB_OK│MB_ICONERROR );
goto QUIT_GAME;
Figure 112006004368641-PCT00001
BOOL App_Update()
//local
float f_current_time;
BOOL b_isWaiting=TRUE;
int iCount=0;
assert(Preset);
//ENGINE------------------------------------------------------------
//turn on the engine
if (!jeEngine_Activate(Preset->Engine, JE_TRUE)) MessageBox (g_app_hWnd,"Engine did not activate", "Debug", MB_OK);
//------------------------
// trans game data : befor_update
pM2p->b_isBeforeUpdate = TRUE;
if (!g_b_isFirstEntryToUpdate)
if(pM2p->b_isBeforeUpdate)// && g_b_isSyncStepl)
HRESULT hr=S_OK;
hr=SendTo_GameData(GAME_MSGID_BEFORE_UPDATE,(LONG)pM2p->b_isBeforeUpdate, TRUE);
if( FAILED(hr) )
MessageBox( NULL TEXT("FAILED. :("), TEXT("g_pDP->SendTo"), MB_OK);
// for (i=0;i<10000;i++)
while (b_isWaiting)
MSG Msg;
//if( g_pRemote->b_isBeforeUpdate && g_b_isSyncStep2) b_isWaiting = FALSE;
if( g_pRemote->b_isBeforeUpdate) b_isWaiting = FALSE;
//for exit this loop
if( IsKeyDown( VK_ESCAPE) )
//jeEngine_Printf(pM2p->Engine, 100, 100, "have been pressed ESC key");
b_isWaiting=FALSE;
return FALSE;
//-----------------
if(PeekMessage(&Msg, NULL, 0, 0, PM_REMOVE)) //non-blocking message check
// stop after quit message is posted
if(Msg.message == WM_QUIT)
// break; // <---loop ends here
return FALSE;
TranslateMessage(&Msg);
DispatchMessage(&Msg);
myLog_Printf("COMPLETE SYNCRONIZED STEP2 ==========>\n");
g_b_isFirstEntryToUpdate = TRUE;
//------------------
// f_current_time을 이원화 함.
// MP3가 재생되지 않을때는 timeGetTime()에서 데이터를 추출.
// MP3가 재생될 ??는 jeMP3_GetCurrentPosition()을 이용해서 데이터를 추출.
//if ( !pM2p->myMP3->b_isTimerActive)
if ( !pM2p->pMyMP3->b_isMP3Playing)
f_current_time = (float) timeGetTime();
f_DeltaTime = (0.001f)*(f_current_time - f_OldTimeGetTime);
f_OldTimeGetTime = f_current_time;
else
f_DeltaTime = pM2p->pMyMP3->f_delta_time;
f_current_time = (float) timeGetTime();
f_OldTimeGetTime = f_current_time;
//----------------
// update multiplay two player
if(
!M2P_Update(
pM2p, f_DeltaTime,
g_b_isSyncStep2, g_b_isSyncStep3,
g_pRemote
)
)
return FALSE;
Preset->Camera = ViewMgr_GetCamera( pM2p->pView );
assert( Preset->Camera != NULL );
//all done
return TRUE;
// BOOL Update()
Figure 112006004368641-PCT00002
Figure 112006004368641-PCT00003
jeBoolean M2P_Update(
M2PInfo *pM2p, float f_DeltaTime,
BOOL b_isSync_PrevStep, BOOL b_isSync_CurrentStep,
GAMEMSG_GENERIC2 *pRemote )
//----------
//stage clear signal proccessing
//(myMP3->b_isBeatScoreEnd 처리)
// send a signal from myMP3Mgr to timeline
if(pM2p->pMyMP3->b_isBeatScoreEnd)
pM2p->pDancer->TimeLine->b_isStageClear = JE_TRUE;
/* myLog_Printf(
"pM2p->pDancer->TimeLine->b_isStageClear :%d\n",
pM2p->pDancer->TimeLine->b_isStageClear
);
*/
//-------------
if(!M2P_Update_Play(pM2p, f_DeltaTime, b_isSync_PrevStep, b_isSync_CurrentStep, pRemote )) return JE_FALSE;
// ALL DONE
return JE_TRUE;
// M2P_Update()
//------------------------------
jeBoolean M2P_UPdate_Play(
M2PInfo *pM2p, float f_DeltaTime,
BOOL b_isSync_PrevStep, BOOL b_isSync_CurrentStep,
GAMEMSG_GENERIC2 *pRemote )
int i = 0;
// 게임 시작?
if (!pM2p->b_isBeforeUpdate_MP3 )
if (!M2P_IsGameStart(pM2p)) return JE_FALSE;
if (pM2p->b_isBeforeUpdate_MP3) pM2p->b_isGameStarted = TRUE;
//--------------------------
// trans game data : befor_update_mp3
if(pM2p->b_isBeforeUpdate_MP3)// && b_isSync_PrevStep)
HRESULT hr = S_OK;
hr = SendTo_GameData(GAME_MSGID_BEFORE_UPDATE_MP3, (LONG)pM2p->b_isBeforeUpdate_MP3, TRUE);
if(FAILED(hr))
MessageBox( NULL, TEXT("FAILED. :("), TEXT("g_pDP->SendTo"), MB_OK );
return JE_FALSE;
if(pRemote->b_isBeforeUpdate_MP3 && pM2p->b_isGameStarted)
if(g_b_isFirstTime)
myLog_Printf("COMPLETE SYNCRONIZED STEP3 ==========> \n");
g_b_isFirstTime = FALSE;
HRESULT hr = S_OK;
pM2p->jeb_isStartMP3 = JE_TRUE;
//myLog_Printf("pM2p->jeb_isStartMP3 : %d\n", pM2p->jeb_isStartMP3);
hr = SendTo_GameData(GAME_MSGID_START_MP3, (LONG)pM2p->jeb_isStartMP3, TRUE);
if( FAILED(hr) )
MessageBox( NULL, TEXT("FAILED. :("), TEXT("g_pDP->SendTo"), MB_OK );
return JE_FALSE;
// game Quit
if(pM2p->jeb_isGameQuit∥pRemote->b_isGameQuit)
myMP3Mgr_Destroy( &pM2p->pMyMP3, &pM2p->pTP );
pM2P->pMyMP3 = NULL;
pM2p->pTP = NULL;
//-----------
if (!M2P_IsGameQuit(pM2p)) return JE_FALSE;
// 게임오버시..
else if(pM2p->b_isGameOver∥pRemote->b_isGameOver)
myMP3Mgr_Destroy( &pM2p->pMyMP3, &pM2p->pTP );
pM2p->pMyMP3 = NULL;
pM2p->pTP = NULL;
//----------
if (!M2P_IsGameOver(pM2p)) return JE_FALSE;
// 스테이지 클리어..
else if ( pM2p->b_isStageClear∥pRemote->b_isGameClear )
myMP3Mgr_Destroy( &pM2p->pMyMP3, &pM2p->pTP );
pM2p->pMyMP3 = NULL;
pM2p->pTP = NULL;
//----------
if (!M2P_IsStageClear(pM2p)) return JE_FALSE;
// 게임 진행..
else if((pM2p->jeb_isStartMP3 && pRemote->b_isStartMP3)∥(pRemote->b_isStartMP3 && pM2p->jeb_isStartMP3))
// for ( i = 0; i < 10000; i++)
// for debug print
// From pM2p->pDancer->b_isprint
// to pM2p->pMyMP3->b_isprint
pM2p->pMyMP3->b_isprint = pM2p->pDancer->b_isprint;
if (pM2p->pMyMP3 !=NULL) myMP3Mgr_Update(pM2p->pMyMP3, pRemote);
// for debug print
// From pM2p->pDancer->b_isprint
// to pM2p->pMyMP3->b_isprint
pM2p->pDancer->b_isprint= pM2p->pMyMP3->b_isprint;
jeWorld_Frame(pM2p->pWorld->World, f_DeltaTime);
//-----------------------
if(!pM2p->b_isGameOver∥!pM2p->b_isStageClear∥!pM2p->jeb_isGameQuit)
Dancer_Update( pM2p->pDancer, pM2p->Engine, f_DeltaTime,
pM2p->pMyMP3->i_currentBeatIndex,
pRemote );
//------------------------
jeVec3d_Copy(&pM2p->pDancer->v_originPointsOfCameraSpin, &pM2p->pView->v_originPositionOfSpin);
// check game stat
pM2p->b_isGameOver = Dancer_IsGameOver( pM2p->pDancer );
if(pM2p->b_isGameOver)
HRESULT hr = S_OK;
hr = SendTo_GameData(GAME_MSGID_GAME_OVER, (LONG)pM2p->b_isGameOver, TRUE);
if( FAILED(hr) )
MessageBox( NULL, TEXT("FAILED. :("), TEXT("g_pDP->SendTo"), MB_OK);
// check game stat
pM2p->b_isStageClear = Dancer_IsStageClear( pM2p->pDancer );
if (pM2p->b_isStageClear)
HRESULT hr = S_OK;
hr = SendTo_GameData(GAME_MSGID_GAME_CLEAR, (LONG)pM2p->b_isStageClear, TRUE);
if( FAILED(hr) )
MessageBox( NULL, TEXT("FAILED. :("), TEXT("g_pDP->SendTo"), MB_OK);
else jeEngine_Printf(pM2p->Engine, 250, 250, "waiting ...");
// all done
return TRUE;
Figure 112006004368641-PCT00004
Figure 112006004368641-PCT00005
void Dancer_Update(
DancerInfo *pD, // tester to move
jeEngine *Engine,
float f_DeltaTime,
int i_BeatIndex_fromMP3,
GAMEMSG_GENERIC2 *pRemote
)
// local
float f_Tempo = 0.0f;
// ensure valid data
assert (pD != NULL );
assert( Engine !=NULL);
//-----------------------
f_Tempo = TimeLine_getTempo( pD->TimeLine );
pD->f_Tempo = f_Tempo;
if ( Dancer_IsBeatScoreOK(pD) == JE_FALSE )
pD->m_current.i_numOfbar = 1;
//TimeLine_SetMotionIndex( pD->TimeLine, pD->m_current.i_index );
else
pD->m_current.f_time = pD->m_current.f_time + (f_DeltaTime * f_Tempo );
//--------
if ( pD->m_current.f_time < pD->m_current.f_lenght )
if(pRemote->b_isLeader_local) Dancer_Update_setKeyInput_Leader(pD, Engine, pRemote);
else Dancer_Update_setKeyInput_Follower(pD, Engine, pRemote);
//---------
pD->b_isMotionEnd = JE_FALSE;
//-----------------------------
//motion end process
if (pD->m_current.f_time >= pD->m_current.f_lenght )
Dancer_Motion_Ending(pD);
//---------------
pD->b_isStepscore_display = FALSE;
pD->b_isStepscore_full = FALSE;
Dancer_Update_setMotionEnd_Proc(pD, Engine, pRemote);
//motion end process
//--------------------------------
// motion render process
if (pD->b_isCurrentMotionProc) Dancer_Motion_Render(pD);
else pD->b_isMotionEnd = JE_TRUE;
// motion processing
//-------------------------
// for debugging
// Dancer_Check_TimeLine( pD, Engine );
//---------------
// rtp sync
float f_term = 0.0f;
BOOL b_rtpIsChange = FALSE;
pD->i_rtp_percent_prev = pD->i_rtp_percent;
if (pD->m_current.f_time == 0)
f_term = 1;
pD->i_rtp_percent = 100;
else if( (pD->m_current.f_time > 0) && (pD->m_current.f_time < pD->m_current.f_lenght) )
f_term = 1- (pD->m_current.f_time/pD->m_current.f_lenght);
pD->i_rtp_percent = (int) (f_term * 100);
else if ( pD->m_current.f_time >= pD->m_current.f_lenght)
f_term = 0;
pD->i_rtp_percent = 0;
if (pD->i_rtp_percent_prev == pD->i_rtp_percent) b_rtpIsChange = FALSE;
else b_rtpIsChange = TRUE;
if (!pD->Energy->bIsGameOver) TimeLine_Update(
pD->TimeLine, Engine, i_BeatIndex_fromMP3,
pD->i_rtp_percent, b_rtpIsChange
);
//----------------
Energy_Update(pD->Energy, Engine);
// Dancer_Update()
//---------------------------------
void Dancer_Update_setKeyInput_Leader(DancerInfo *pD, jeEngine *Engine, GAMEMSG_GENERIC2 *pRemote)
//---------
// notify key input time to the time line
pD->b_isInputTime = JE_TRUE;
if ( ( pD->b_isDisableKeyInput_fromPlayer==JE_FALSE ) )
pD->b_isOK_KeyInput_fromPlayer = Dancer_MotionIndex_Assignments( pD );
//------------
if ( pD->b_isOK_KeyInput_fromPlayer )
// stepscore display control
// b_isStepscore_display : FALSE: Disable display;
// b_isStepscore_full : TRUE : fulled image, FALSE : empty image
pD->b_isStepscore_display = TRUE;
pD->b_isStepscore_full = FALSE;
// game data sending
pD->i_display_index = pD->m_generic.i_index;
if(!pD->b_isTransToRemote)
HRESULT hr=S_OK;
hr = SendTo_GameData(GAME_MSGID_MOTION_REQUEST, (LONG)pD->m_generic.i_index, FALSE);
if( FAILED(hr) )
MessageBox( NULL, TEXT("FAILED. :("), TEXT("g_pDP->SendTo"), MB_OK );
// for debug print
//pD->b_isprint = TRUE;
pD->b_isTransToRemote = JE_TRUE;
// Dancer_MotionIndex_Assignments() closing.
pD->b_isDisableKeyInput_fromPlayer = TRUE;
if ( pD->b_isOK_KeyInput_fromPlayer )
if (pRemote->l_MotionIndex_Request != -1)
// is next motion OK, or fail?
if ( pD->m_generic.i_index != pRemote->l_MotionIndex_Request )
pD->b_isKeyInputOK = JE_FALSE;
else
// stepscore display control
pD->b_isStepscore_display = TRUE;
pD->b_isStepscore_full = TRUE;
// get Motion data
Dancer_GetMotionData(pD);
//------------------------
// for prev. input
Dancer_SetNextMotion(pD);
pD->b_isKeyInputOK = JE_TRUE;
myLog_Printf("pD->b_isKeyInputOK : %d\n", pD->b_isKeyInputOK);
//------------------------
pD->b_isOK_KeyInput_fromPlayer = JE_FALSE;
//-------------
// void Dancer_Update_setKeyInput_Leader()
//---------------------------------
void Dancer_Update_setKeyInput_Follower(DancerInfo *pD, jeEngine *Engine, GAMEMSG_GENERIC2 *pRemote)
//---------
// notify key input time to the time line
pD->b_isInputTime = JE_TRUE;
// recieved motion index from the leader
if (pRemote->l_MotionIndex_Request != -1)
// stepscore display control
// b_isStepscore_display : FALSE: Disable display;
// b_isStepscore_full : TRUE : fulled image, FALSE : empty image
pD->b_isStepscore_display = TRUE;
pD->b_isStepscore_full = FALSE;
pD->i_display_index = pRemote->l_MotionIndex_Request;
if ( ( pD->b_isDisableKeyInput_fromPlayer == JE_FALSE ) )
pD->b_isOK_KeyInput_fromPlayer = Dancer_MotionIndex_Assignments( pD );
//-------------
i f(pRemote->l_MotionIndex_Request != -1)
if ( pD->b_isOK_KeyInput_fromPlayer )
// game data sending
if(!pD->b_isTransToRemote)
HRESULT hr = S_OK;
hr = SendTo_GameData(GAME_MSGID_MOTION_REQUEST, (LONG)pD->m_generic.i_index, FALSE);
if( FAILED(hr) )
MessageBox( NULL, TEXT("FAILED. :("), TEXT("g_pDP->SendTo"), MB_OK );
// for debug print
//pD->b_isprint = TRUE;
pD->b_isTransToRemote = JE_TRUE;
// Dancer_MotionIndex_Assignments() closing.
pD->b_isDisableKeyInput_fromPlayer = TRUE;
// is next motion OK, or fail?
if ( pD->m_generic.i_index != pRemote->l_MotionIndex_Request )
pD->b_isKeyInputOK = JE_FALSE;
else
// stepscore display control
pD->b_isStepscore_display = TRUE;
pD->b_isStepscore_full = TRUE;
// get Motion data
Dancer_GetMotionData(pD);
//-------------------------
// for prev. input
Dancer_SetNextMotion(pD);
pD->b_isKeyInputOK = JE_TRUE;
myLog_Printf("pD->b_isKeyInputOK : %d\n", pD->b_isKeyInputOK);
//------------------------
pD->b_isOK_KeyInput_fromPlayer = JE_FALSE;
if (pD->b_isKeyInputOK)
pD->b_isStepscore_display = TRUE;
pD->b_isStepscore_full = TRUE;
//------------
// void Dancer_Update_setKeyInput_Follower()
//-----------------------------------------
//void Dancer_Update_setMotionEnd_Proc(DancerInfo *pD)//, float f_Tempo)
void Dancer_Update_setMotionEnd_Proc(DancerInfo *pD, jeEngine *Engine, GAMEMSG_GENERIC2 *pRemote)
if (pRemote->l_MotionIndex_Request == -1) pD->b_isKeyInputFailed = JE_TRUE;
if (!pD->b_isKeyInputOK) pD->b_isKeyInputFailed = JE_TRUE;
else pD->b_isKeyInputFailed = JE_FALSE;
pD->b_isInputTime = JE_FALSE;
pD->b_isTransToRemote = JE_FALSE;
// remote motion index init.
pRemote->l_MotionIndex_Request = -1;
if (pD->b_isKeyInputFailed)
Dancer_NextMotionKeyInputISFail(pD, pD->TimeLine, Engine );
//----------------
// Health Adjustment
Dancer_HealthStats_Adjustments( pD, Engine );
//---------
//----------------
Dancer_SetCurrentMotion(pD);
Dancer_GetBarsOfMotion( pD);//, f_Tempo );
pD->b_isMotionEnd = JE_FALSE;
pD->m_current.f_time = 0.0f;
pD->b_isMotionEnd = JE_TRUE;
pD->b_isKeyInputOK = JE_FALSE;
pD->b_isDisableKeyInput_fromPlayer = JE_FALSE;// why ture?
pD->b_isEnergyChange = JE_TRUE;
Figure 112006004368641-PCT00006
Figure 112006004368641-PCT00007
myMP3MgrInfo * myMP3Mgr_Create(
HWND hWnd,
jeEngine *Engine,
jeWorld *World,
BeatScorePool *BeatPool, // Beat Score Pool
const char* DebugPath
)
// local variable
myMP3MgrInfo *myMP3;
TimerProcInfo *TP;
// ensure valid data
// create MP3 manager structue
myMP3 = jeRam_Allocate( sizeof( myMP3MgrInfo ) );
if( myMP3 == NULL) return NULL;
mymemset( myMP3, 0, sizeof( myMP3MgrInfo ) );
// create TimerProcInfo structue
TP = jeRam_Allocate( sizeof( TimerProcInfo ) );
if ( TP == NULL ) return NULL;
mymemset( TP, 0, sizeof( TimerProcInfo ) );
// structer Init.
myMP3Mgr_Init(myMP3);
strcpy(Debug_Path ,DebugPath);
//------------------------
myMP3->Engine = Engine;
myMP3->hWnd = hWnd;
myMP3->World = World;
//create sound system
myMP3Mgr_CreateSoundSystem(myMP3);
// loading MP3
myMP3Mgr_LoadingMP3(myMP3);
//--------------------------
// first MP3 play
if (!myMP3->b_isMP3Playing)
myMP3->LogoFinish = jeMp3_StandbyPlay(myMP3->SoundSystem, DMl);
//--------------------------
myMP3->BeatPool = BeatPool;
//--------------------------------
myMP3->i_currentBeatIndex = 0;
myMP3->f_currntBeatTimeStamp = BeatScorePool_Get( myMP3->BeatPool, myMP3->i_currentBeatIndex );
myMP3->f_PrevPlayTime = BeatScorePool_GetPlayTime( myMP3->BeatPool, myMP3->i_currentBeatIndex );
// for stage Clear test
//myMP3->i_beatUpperLimit = 6 +1;
//myMP3->i_beatUpperLimit = myMP3->BeatPool->BeatScoreCount +1;
myMP3->i_beatUpperLimit = myMP3->BeatPool->BeatScoreCount -1;
myMP3Mgr_TimerSetResolution( myMP3 );
//--------------------------
TP->BeatPool = BeatPool;
TP->i_beatUpperLimit = myMP3->i_beatUpperLimit;
TP->i_currentBeatIndex = 0;
TP->f_PrevPlayTime = myMP3->f_PrevPlayTime;
TP->b_isBeatScoreEnd = myMP3->b_isBeatScoreEnd;
//-----------------------------------------
S_myMP3 = TP;
//---------------------------------------
// all done
return myMP3;
//-------------------------------------------------//
// myMP3Mgr_Update()
//
// Main application function.
//-------------------------------------------------------
jeBoolean myMP3Mgr_Update(myMP3MgrInfo *myMP3, GAMEMSG_GENERIC2 *pRemote)
// ensure valid data
assert(myMP3);
myMP3Mgr_tansData_myMP3Mgr2STP( myMp3);
//-----------------------
/* if (myMP3->LogoFinish == 0 && pRemote->b_isMP3Started == TRUE )
*/
jeMp3_Play(myMP3->SoundSystem, 0, JE_TRUE);
myMP3->b_isMP3Playing = JE_TRUE;
//---------------------
// for myMP3Mgr_TimerProc()
// f_DelayTime : unit : milli-sec
if ( myMP3Mgr_TimerSet( myMP3, 1.0f) ) myMP3->b_isTimerActive = JE_TRUE;
else myMP3->b_isTimerActive = JE_FALSE;
//---------------------
/* else if(myMP3->LogoFinish == 0)
jeMp3_Play(myMP3->SoundSystem, 0, JE_TRUE);
myMP3->b_isMP3Playing = JE_TRUE;
jeMp3_Pause(myMP3->SoundSystem);
if(myMP3->b_isMP3Playing)
PostMessage( myMP3->hWnd,
WM_APP_MP3_STATS, GAME_MSGID_MP3_STATS,
myMP3->b_isMP3Playing
);
*/
// for debugging
myMP3Mgr_Print_Mp3Property(myMP3);
//-----------------
// for mp3 delta time
myMP3->f_current_time = (float)jeMp3_GetCurrentPosition();
myMP3->f_delta_time = myMP3->f_current_time - myMP3->f_current_time_old;
myMP3->f_current_time_old = myMP3->f_current_time;
myMP3Mgr_transData_STP2myMP3Mgr( myMP3);
/*
myLog_Printf( "S_myMP3->b_isBeatScoreEnd :%d\n", S_myMP3->b_isBeatScoreEnd );
myLog_Printf( "S_myMP3->i_beatUpperLimit :%d\n", S_myMP3->i_beatUpperLimit );
myLog_Printf( "S_myMP3->i_currentBeatIndex :%d\n", S_myMP3->i_currentBeatIndex );
myLog_Printf( "myMP3->b_isBeatScoreEnd :%d\n", myMP3->b_isBeatScoreEnd );
myLog_Printf( "myMP3->i_beatUpperLimit :%d\n", myMP3->i_beatUpperLimit );
myLog_Printf( "myMP3->i_currentBeatIndex :%d\n", myMP3->i_currentBeatIndex );
myLog_Printf( "============\n\n" );
*/
return JE_TRUE;
// myMP3Mgr_Update()
void myMP3Mgr_transData_myMP3Mgr2STP( myMP3MgrInfo *myMP3)
//ensure valid data
assert(myMP3);
S_myMP3->BeatPool = myMP3->BeatPool;
S_myMP3->i_beatUpperLimit = myMP3->i_beatUpperLimit;
S_myMP3->i_currentBeatIndex = myMP3->i_currentBeatIndex;
S_myMP3->f_PrevPlayTime = myMP3->f_PrevPlayTime;
S_myMP3->b_isBeatScoreEnd = myMP3->b_isBeatScoreEnd;
void myMP3Mgr_transData_STP2myMP3Mgr( myMP3MgrInfo *myMP3)
//ensure valid data
assert(myMP3);
myMP3->BeatPool = S_myMP3->BeatPool;
myMP3->i_beatUpperLimit = S_myMP3->i_beatUpperLimit;
myMP3->i_currentBeatIndex = S_myMP3->i_currentBeatIndex;
myMP3->f_PrevPlayTime = S_myMP3->f_PrevPlayTime;
myMP3->b_isBeatScoreEnd = S_myMP3->b_isBeatScoreEnd;

Claims (42)

  1. 게임자들 간에 협력하면서 진행하는 댄스를 포함하는 게임 시스템에서 구현되어지는 동작을 동기화하는 방법으로서,
    표준시간에 동기시켜 반복 진행하는 단위시간 중에서, 어느 하나의 단위시간동안에 한 게임자가 입력한 이벤트에 대해 다른 게임자도 동일한 이벤트를 입력하면, 이어지는 다음 단위시간 동안에 상기 입력된 이벤트에 해당하는 단위동작을 구조체를 통해 동시에 표현하게 하는 것을 특징으로 하는 협력 게임 시스템의 동작 동기화 방법.
  2. 제 1 항에 있어서,
    상기 협력 게임 시스템은, 단독 시스템 형태로 구현된 것을 특징으로 하는 협력 게임 시스템의 동작 동기화 방법.
  3. 제 1 항에 있어서,
    상기 협력 게임 시스템은, 네트워크를 통한 원격 클라이언트 시스템 형태로 구현된 것을 특징으로 하는 협력 게임 시스템의 동작 동기화 방법.
  4. 제 1 항 내지 제 3 항 중 어느 하나의 항에 있어서,
    상기 이벤트는, 키보드, 마우스, 트랙 볼 ,조이스틱, 터치 스크린 및 핸드폰 키패드, 댄스 패드, 네트워크 인터페이스 카드(NIC) 중 하나 또는 다수를 조합사용하여 입력하는 것을 특징으로 하는 협력 게임 시스템의 동작 동기화 방법.
  5. 제 1 항 내지 제 3 항 중 어느 하나의 항에 있어서,
    상기 이벤트는, 카메라나 센서를 통한 직접행위 입력장치 또는 마이크와 같은 음성입력장치를 사용하여 입력하는 것을 특징으로 하는 협력 게임 시스템의 동작 동기화 방법.
  6. 제 1 항 내지 제 3 항 중 어느 하나의 항에 있어서,
    상기 표준시간은, 월드타임코드(WTC)로 설정되는 것을 특징으로 하는 협력 게임 시스템의 동작 동기화 방법.
  7. 제 1 항 내지 제 3 항 중 어느 하나의 항에 있어서,
    상기 단위동작은, 동작 장면의 각각에 해당되는 프레임 정점위치와 데이터를 저장하고, 보간법에 의해 계산하여 데이터를 생성하면서 설정되게 하는 것을 특징으로 하는 협력 게임 시스템의 동작 동기화 방법.
  8. 제 1 항 내지 제 3 항 중 어느 하나의 항에 있어서,
    상기 단위동작은, 구조체를 여러 개로 나누어서 각각의 관계를 규정하고, 나누어진 구조체의 데이터를 매 프레임 또는 변화되는 프레임마다 지정하여 데이터를 생성하면서 설정되게 하는 것을 특징으로 하는 협력 게임 시스템의 동작 동기화 방법.
  9. 제 1 항내지 제 3 항 중 어느 하나의 항에 있어서,
    상기 단위동작은, 골격이라는 관절 단위의 구조체 데이터를 바탕으로 각각의 관계를 규정한 계층적 구조를 가지고 위치 값에 따라 움직여 데이터를 생성하면서 설정되게 하는 것을 특징으로 하는 협력 게임 시스템의 동작 동기화 방법.
  10. 제 1 항 내지 제 3 항 중 어느 하나의 항에 있어서,
    상기 단위동작은, 부수적으로 음원을 사용하고, 상기 음원에 동기되어 표시되는 것을 특징으로 하는 협력 게임 시스템의 동작 동기화 방법.
  11. 제 10 항에 있어서,
    상기 음원은, WAV, MP3, WMA, MIDI 중 하나인 것을 특징으로 하는 협력 게임 시스템의 동작 동기화 방법.
  12. 제 10 항에 있어서,
    상기 단위동작은, 음원의 진행 시간에 맞추어 상기 표준시간을 설정하고, 상기 표준시간에 동기되어 표시되는 것을 특징으로 하는 협력 게임 시스템의 동작 동기화 방법.
  13. 제 1 항 내지 제 3 항 중 어느 하나의 항에 있어서,
    상기 단위동작은, 화상출력기와 음원출력기를 통해 출력되면서 표시되는 것을 특징으로 하는 협력 게임 시스템의 동작 동기화 방법.
  14. 제 13 항에 있어서,
    상기 화상출력기는, 모니터, HUD(Head Up Display)장치, LCD 패널중 어느 하나인 것을 특징으로 하는 협력 게임 시스템의 동작 동기화 방법.
  15. 제 13 항에 있어서,
    상기 음원출력기는, 스피커인 것을 특징으로 하는 협력 게임 시스템의 동작 동기화 방법.
  16. 제 1 항에 있어서,
    상기 화상출력기는, 입체로 구성된 대상물과 송수신을 하여, 상기 입체 대상물을 통해 입출력 매개 상태를 확인하는 것을 특징으로 하는 협력 게임 시스템의 동작 동기화 방법.
  17. 청구항 제 1 항의 협력 게임 시스템의 동작 동기화 방법을 적용하여 다수의 협력 게임 시스템 각각의 단위동작들을 개별적으로 실현하는 과정에서 발생하는 다 수의 협력 게임 시스템간의 상호 간섭 작용을 구현하는 방법으로서,
    상기 다수의 협력 게임 시스템의 각각은, 표준시간에 동기시켜 반복 진행하는 단위시간 중에서, 어느 하나의 단위시간 동안에 한 게임자가 입력한 이벤트에 대해 다른 게임자도 동일한 이벤트를 입력하면 이어지는 다음 단위시간 동안에 상기 입력된 이벤트에 해당하는 단위동작을 구조체를 통해 실현하면서, 동시에 각각의 협력 게임 시스템에서 구현된 개별적인 단위동작에 의해 발생하는 상호간섭들도 상기의 협력 게임 시스템의 동작 동기화 방법을 적용하여 새로운 단위동작으로 표현되게 하는 것을 특징으로 하는 다수의 협력 게임 시스템 간 상호 간섭 작용을 구현하는 방법.
  18. 제 17 항에 있어서,
    상기 표준시간은, 월드타임코드(WTC)로 설정된 것을 특징으로 하는 다수의 협력 게임 시스템 간 상호 간섭 작용을 구현하는 방법.
  19. 제 17 항에 있어서,
    상기 다수의 협력 게임 시스템은, 하나의 서버시스템과 다수의 클라이언트 시스템에 의한 서버/클라이언트 형태로 구현된 것을 특징으로 하는 다수의 협력 게임 시스템 간 상호 간섭 작용을 구현하는 방법.
  20. 제 17 항에 있어서,
    상기 다수의 협력 게임 시스템은, 다수의 클라이언트 시스템에 의한 피어투피어 형태로 구현된 것을 특징으로 하는 다수의 협력 게임 시스템 간 상호 간섭 작용을 구현하는 방법.
  21. 제 20 항에 있어서,
    상기 피어투피어 형태는, 정보공유형과 자원공유형 중 어느 하나 또는 둘의 결합을 통해 서비스되는 것을 특징으로 하는 다수의 협력 게임 시스템 간 상호 간섭 작용을 구현하는 방법.
  22. 제 20 항에 있어서,
    상기 피어투피어 형태는, 핑(Ping), 퐁(Pong), 쿼리(Query), 쿼리히트(Queryhit), 푸쉬(Push) 등과 같은 스트립터 중 하나 또는 다수를 사용하는 것을 특징으로 하는 다수의 협력 게임 시스템 간 상호 간섭 작용을 구현하는 방법.
  23. 제 20 항에 있어서,
    상기 클라이언트 시스템은, 별도의 메모리를 가지고 온라인 또는 2인 이상 게임이 가능한 PS2 나 X-box, GameCube, PSP, PSX, N-Gage, Nintendo DS 등의 비디오 게임기를 포함하는 것을 특징으로 하는 다수의 협력 게임 시스템 간 상호 간섭 작용을 구현하는 방법.
  24. 청구항 제 1 항의 협력 게임 시스템의 동작 동기화 방법을 적용하여 다수의 협력 게임 시스템 각각의 단위동작들을 개별적으로 실현하는 과정에서 발생하는 다수의 협력 게임 시스템간의 상호 간섭 작용을 구현하는 방법이 응용된 댄스를 포함하는 협력 게임 방법으로서,
    상기 다수의 협력 게임 시스템의 각각은, 표준시간에 동기시켜 반복 진행하는 단위시간 중에서, 어느 하나의 단위시간 동안에 한 게임자가 입력한 이벤트에 대해 다른 게임자도 동일한 이벤트를 입력하면 이어지는 다음 단위시간 동안에 상기 입력된 이벤트에 해당하는 단위동작을 구조체를 통해 실현하면서, 동시에 각각의 협력 게임 시스템에서 구현된 개별적인 단위동작에 의해 발생하는 상호간섭들도 상기의 협력 게임 시스템의 동작 동기화 방법을 적용하여 새로운 단위동작으로 표현되게 하면서 게임을 진행하는 것을 특징으로 하는 협력 게임 방법.
  25. 제 24 항에 있어서,
    상기 단위동작은, 처음과 끝의 포즈가 일치하는 것을 특징으로 하는 협력 게임 방법.
  26. 제 24 항에 있어서,
    상기 단위동작은, 빠르기에 의해 진행시간이 조절되는 것을 특징으로 하는 협력 게임 방법.
  27. 제 24 항에 있어서,
    상기 단위동작은, 전, 후, 좌, 우 및 전-좌, 전-우, 후-좌, 후-우측의 8방향으로의 이동을 포함하는 것을 특징으로 하는 협력 게임 방법.
  28. 제 27 항에 있어서,
    상기 단위동작은, 90도 회전, 180도 회전, 360도 회전 및 특수 단위동작을 포함하는 것을 특징으로 하는 협력 게임 방법.
  29. 제 27 항에 있어서,
    상기 단위동작은, 앉기, 서기, 구부리기, 연속 회전을 포함하는 것을 특징으로 하는 협력 게임 방법.
  30. 제 27 항에 있어서,
    상기 단위동작은, 구조체를 구성하고 있는 관절 및 이에 의한 동작 변형을 포함하는 것을 특징으로 하는 협력 게임 방법.
  31. 제 27 항에 있어서,
    상기 단위동작은, 구조체를 구성하고 있는 관절 및 이에 의한 다수의 동작의 결합을 포함하는 여러 개를 하나의 단위로 하는 것을 특징으로 하는 협력 게임 방법.
  32. 제 30 항 또는 제 31 항에 있어서,
    상기 구조체의 동작에 대한 조종시, 조종기기의 기계적 제어에 의한 시간적 효과나 항력과 작용/반작용과 같은 공간적, 물리적 효과를 포함하여 처리하는 것을 특징으로 하는 협력 게임 방법.
  33. 제 24 항에 있어서,
    상기 이벤트는, 키보드, 마우스, 조이스틱, 키 패널, 댄스 패드, 네트워크 인터페이스 카드(NIC) 중 하나 또는 다수를 조합 사용하여 입력하는 것을 특징으로 하는 협력 게임 방법.
  34. 제 24 항에 있어서,
    상기 이벤트는, 각종 센서 또는 카메라를 통해 입력된 위치값을 동작 데이터로 입력하는 것을 특징으로 하는 협력 게임 방법.
  35. 제 24 항에 있어서,
    상기 구조체는, 2차원 또는 3차원 오브젝트인 것을 특징으로 하는 협력 게임 방법.
  36. 제 35 항에 있어서,
    상기 오브젝트는, 카메라 등을 통해 입력되는 영상을 바탕으로 제작된 오브젝트와 실제 영상과의 결합을 통해 구현되는 것을 특징으로 하는 협력 게임 방법.
  37. 제 24 항에 있어서,
    상기 구조체는, 별도의 모델 도구를 통해 만들어진 아바타인 것을 특징으로 하는 협력 게임 방법.
  38. 제 24 항에 있어서,
    상기 시스템은, 별도의 채팅 툴을 포함하여 상대방 시스템과 문자 또는 음성으로 의사를 교환하는 것을 특징으로 하는 협력 게임 방법.
  39. 제 24 항에 있어서,
    상기 시스템은, 별도의 메모리를 가지고 온라인 또는 2인 이상 게임이 가능한 PS2 나 X-box, GameCube, PSP, PSX, N-Gags, Nintendo DS 등의 비디오 게임기를 포함하는 것을 특징으로 하는 협력 게임 방법.
  40. 제 24 항에 있어서,
    상기 단위동작은, 스포츠 댄스와 같이 2인이 함께 붙어서 진행되는 것을 특징으로 하는 협력 게임 방법.
  41. 제 40 항에 있어서,
    상기 스포츠 댄스는, 왈츠, 탱고, 폭스트로트, 비엔나 왈츠, 퀵스텝, 자이브, 룸바, 차차차, 삼바, 파도소블, 블루스 중 하나 또는 다수 결합하여 진행하는 것을 특징으로 하는 협력 게임 방법.
  42. 제 24 항에 있어서,
    상기 단위동작은, 스윙, 살사, 디스코, 트위스트, 맘보, 힙합, 수중발레, 아이스댄싱 중 하나 또는 다수의 결합에 의한 것을 특징으로 하는 협력 게임 방법.
KR1020067001342A 2003-07-26 2004-07-23 협력 게임 시스템의 동작 동기화 방법, 이를 적용한 다수의협력 게임 시스템간의 상호간섭 작용 구현 방법 및 협력게임 방법 KR20060082849A (ko)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
KR1020030051714A KR20050012596A (ko) 2003-07-26 2003-07-26 클라이언트 시스템의 동작 동기화 장치와 방법 및 이를이용한 통신망을 통한 상호 작용 시스템 및 게임방법
KR1020030051714 2003-07-26

Publications (1)

Publication Number Publication Date
KR20060082849A true KR20060082849A (ko) 2006-07-19

Family

ID=34101721

Family Applications (2)

Application Number Title Priority Date Filing Date
KR1020030051714A KR20050012596A (ko) 2003-07-26 2003-07-26 클라이언트 시스템의 동작 동기화 장치와 방법 및 이를이용한 통신망을 통한 상호 작용 시스템 및 게임방법
KR1020067001342A KR20060082849A (ko) 2003-07-26 2004-07-23 협력 게임 시스템의 동작 동기화 방법, 이를 적용한 다수의협력 게임 시스템간의 상호간섭 작용 구현 방법 및 협력게임 방법

Family Applications Before (1)

Application Number Title Priority Date Filing Date
KR1020030051714A KR20050012596A (ko) 2003-07-26 2003-07-26 클라이언트 시스템의 동작 동기화 장치와 방법 및 이를이용한 통신망을 통한 상호 작용 시스템 및 게임방법

Country Status (3)

Country Link
US (1) US20060247046A1 (ko)
KR (2) KR20050012596A (ko)
WO (1) WO2005010795A1 (ko)

Cited By (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR101123568B1 (ko) * 2008-10-01 2012-03-15 가부시키가이샤 스퀘어.에닉스 게임 장치 및 게임 프로그램을 기록한 컴퓨터 판독 가능한 기록 매체
KR101488698B1 (ko) * 2013-01-22 2015-02-05 주식회사 넥슨코리아 게임서버 기준에 의한 로컬 클라이언트와 리모트 클라이언트에서의 프레임 동기화 방법 및 그 시스템
KR101488653B1 (ko) * 2013-01-22 2015-02-05 주식회사 넥슨코리아 로컬 클라이언트와 리모트 클라이언트에서의 타격 프레임과 피격 프레임 동기화 방법 및 그 시스템
KR101528491B1 (ko) * 2013-01-22 2015-06-15 주식회사 넥슨코리아 게임서버 기준에 의한 로컬 클라이언트와 리모트 클라이언트에서의 프레임 동기화 방법 및 그 시스템

Families Citing this family (32)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20060139317A1 (en) * 2004-11-23 2006-06-29 The Curators Of The University Of Missouri Virtual environment navigation device and system
US20110053131A1 (en) * 2005-04-27 2011-03-03 Regnier Patrice M Systems and methods for choreographing movement
US10438448B2 (en) * 2008-04-14 2019-10-08 Gregory A. Piccionielli Composition production with audience participation
US7645211B1 (en) 2006-04-17 2010-01-12 Lauranzo, Inc. Personal agility developer
KR100829810B1 (ko) * 2006-09-15 2008-05-19 엔에이치엔(주) 온라인 게임에서 게임 캐릭터 정보 동기화 방법 및 시스템
JP5153122B2 (ja) * 2006-11-15 2013-02-27 任天堂株式会社 ゲームプログラムおよびゲーム装置
EP2173444A2 (en) 2007-06-14 2010-04-14 Harmonix Music Systems, Inc. Systems and methods for simulating a rock band experience
US8678896B2 (en) 2007-06-14 2014-03-25 Harmonix Music Systems, Inc. Systems and methods for asynchronous band interaction in a rhythm action game
US8553028B1 (en) * 2007-10-29 2013-10-08 Julian Michael Urbach Efficiently implementing and displaying independent 3-dimensional interactive viewports of a virtual world on multiple client devices
KR100928349B1 (ko) * 2008-02-27 2009-11-23 허윤주 엑스엠엘을 이용한 3차원 랜더링 엔진, 시스템, 및 방법
US8319825B1 (en) * 2008-06-16 2012-11-27 Julian Urbach Re-utilization of render assets for video compression
US8663013B2 (en) 2008-07-08 2014-03-04 Harmonix Music Systems, Inc. Systems and methods for simulating a rock band experience
US8232989B2 (en) * 2008-12-28 2012-07-31 Avaya Inc. Method and apparatus for enhancing control of an avatar in a three dimensional computer-generated virtual environment
US8142288B2 (en) * 2009-05-08 2012-03-27 Sony Computer Entertainment America Llc Base station movement detection and compensation
US8465366B2 (en) 2009-05-29 2013-06-18 Harmonix Music Systems, Inc. Biasing a musical performance input to a part
US8449360B2 (en) 2009-05-29 2013-05-28 Harmonix Music Systems, Inc. Displaying song lyrics and vocal cues
KR20110015308A (ko) * 2009-08-07 2011-02-15 삼성전자주식회사 디지털 영상 처리장치, 그 제어방법 및 이를 실행하기 위한 프로그램을 저장한 기록매체
US9981193B2 (en) 2009-10-27 2018-05-29 Harmonix Music Systems, Inc. Movement based recognition and evaluation
US10357714B2 (en) 2009-10-27 2019-07-23 Harmonix Music Systems, Inc. Gesture-based user interface for navigating a menu
US8550908B2 (en) 2010-03-16 2013-10-08 Harmonix Music Systems, Inc. Simulating musical instruments
US9358456B1 (en) 2010-06-11 2016-06-07 Harmonix Music Systems, Inc. Dance competition game
US8562403B2 (en) 2010-06-11 2013-10-22 Harmonix Music Systems, Inc. Prompting a player of a dance game
EP2579955B1 (en) 2010-06-11 2020-07-08 Harmonix Music Systems, Inc. Dance game and tutorial
US9024166B2 (en) 2010-09-09 2015-05-05 Harmonix Music Systems, Inc. Preventing subtractive track separation
WO2012051605A2 (en) 2010-10-15 2012-04-19 Jammit Inc. Dynamic point referencing of an audiovisual performance for an accurate and precise selection and controlled cycling of portions of the performance
US8894484B2 (en) * 2012-01-30 2014-11-25 Microsoft Corporation Multiplayer game invitation system
US9519987B1 (en) * 2012-09-17 2016-12-13 Disney Enterprises, Inc. Managing character control in a virtual space
US9857934B2 (en) 2013-06-16 2018-01-02 Jammit, Inc. Synchronized display and performance mapping of musical performances submitted from remote locations
CN103763390B (zh) * 2014-01-29 2018-11-30 北京诺亦腾科技有限公司 运动捕捉数据的处理方法、装置及系统
JP5602963B1 (ja) * 2014-01-30 2014-10-08 グリー株式会社 ゲーム管理プログラム、ゲーム管理方法及びゲーム管理システム
KR20170102669A (ko) * 2016-03-02 2017-09-12 삼성전자주식회사 사용자들의 생체 신호들 간의 정합도를 제공하는 방법 및 장치
CN109756775B (zh) * 2018-08-28 2020-04-28 安徽瑞羽康农业科技有限公司 年代类型吻合度辨识方法

Family Cites Families (14)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4570930A (en) * 1983-10-03 1986-02-18 At&T Bell Laboratories System, method, and station interface arrangement for playing video game over telephone lines
US5350176A (en) * 1991-05-31 1994-09-27 Peter Hochstein Video game
US5442168A (en) * 1991-10-15 1995-08-15 Interactive Light, Inc. Dynamically-activated optical instrument for producing control signals having a self-calibration means
US5613909A (en) * 1994-07-21 1997-03-25 Stelovsky; Jan Time-segmented multimedia game playing and authoring system
JP2919389B2 (ja) * 1996-08-05 1999-07-12 パイオニア株式会社 ビデオダンスゲーム装置及び情報記録媒体
US6280323B1 (en) * 1996-11-21 2001-08-28 Konami Co., Ltd. Device, method and storage medium for displaying penalty kick match cursors in a video soccer game
US6057859A (en) * 1997-03-31 2000-05-02 Katrix, Inc. Limb coordination system for interactive computer animation of articulated characters with blended motion data
JP2922509B2 (ja) * 1997-09-17 1999-07-26 コナミ株式会社 音楽演出ゲーム機、音楽演出ゲーム用の演出操作指示システムおよびゲーム用のプログラムが記録されたコンピュータ読み取り可能な記憶媒体
US6554706B2 (en) * 2000-05-31 2003-04-29 Gerard Jounghyun Kim Methods and apparatus of displaying and evaluating motion data in a motion game apparatus
JP2002066128A (ja) * 2000-08-31 2002-03-05 Konami Co Ltd ゲーム装置、ゲーム処理方法及び情報記憶媒体
JP2003067779A (ja) * 2001-08-23 2003-03-07 Namco Ltd 画像生成システム、プログラム及び情報記憶媒体
JP4050038B2 (ja) * 2001-10-30 2008-02-20 アルゼ株式会社 ゲームプログラム及びこれを記憶した記憶媒体
US7437409B2 (en) * 2003-06-13 2008-10-14 Microsoft Corporation Limiting interaction between parties in a networked session
US20040266528A1 (en) * 2003-06-27 2004-12-30 Xiaoling Wang Apparatus and a method for more realistic video games on computers or similar devices using visible or invisible light and a light sensing device

Cited By (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR101123568B1 (ko) * 2008-10-01 2012-03-15 가부시키가이샤 스퀘어.에닉스 게임 장치 및 게임 프로그램을 기록한 컴퓨터 판독 가능한 기록 매체
KR101488698B1 (ko) * 2013-01-22 2015-02-05 주식회사 넥슨코리아 게임서버 기준에 의한 로컬 클라이언트와 리모트 클라이언트에서의 프레임 동기화 방법 및 그 시스템
KR101488653B1 (ko) * 2013-01-22 2015-02-05 주식회사 넥슨코리아 로컬 클라이언트와 리모트 클라이언트에서의 타격 프레임과 피격 프레임 동기화 방법 및 그 시스템
KR101528491B1 (ko) * 2013-01-22 2015-06-15 주식회사 넥슨코리아 게임서버 기준에 의한 로컬 클라이언트와 리모트 클라이언트에서의 프레임 동기화 방법 및 그 시스템

Also Published As

Publication number Publication date
US20060247046A1 (en) 2006-11-02
KR20050012596A (ko) 2005-02-02
WO2005010795A1 (en) 2005-02-03

Similar Documents

Publication Publication Date Title
KR20060082849A (ko) 협력 게임 시스템의 동작 동기화 방법, 이를 적용한 다수의협력 게임 시스템간의 상호간섭 작용 구현 방법 및 협력게임 방법
US20230016824A1 (en) Voice help system via hand held controller
JP3625212B1 (ja) 3次元仮想空間シミュレータ、3次元仮想空間シミュレーションプログラム、およびこれを記録したコンピュータ読み取り可能な記録媒体
CN110935172B (zh) 虚拟对象处理方法、装置、系统及其存储介质
JP6069528B2 (ja) 画像処理装置、画像処理システム、画像処理方法、及び記憶媒体
US20110293144A1 (en) Method and System for Rendering an Entertainment Animation
JP6576245B2 (ja) 情報処理装置、制御方法及びプログラム
US20220233956A1 (en) Program, method, and information terminal device
US11107183B2 (en) Adaptive mesh skinning in a foveated rendering system
Joselli et al. An architecture for game interaction using mobile
Zikas et al. MAGES 4.0: Accelerating the world’s transition to VR training and democratizing the authoring of the medical metaverse
CN113209618B (zh) 虚拟角色的控制方法、装置、设备及介质
CN109621419A (zh) 游戏角色表情的生成装置方法及装置、存储介质
US20240013502A1 (en) Storage medium, method, and information processing apparatus
JP2020102782A (ja) コンテンツ配信システム、配信装置、受信装置及びプログラム
US20220241692A1 (en) Program, method, and terminal device
JP6974550B1 (ja) コンピュータプログラム、方法、及び、サーバ装置
TWI814318B (zh) 用於使用模擬角色訓練模型以用於將遊戲角色之臉部表情製成動畫之方法以及用於使用三維(3d)影像擷取來產生遊戲角色之臉部表情之標籤值之方法
WO2024024392A1 (ja) エンターテインメントシステム、プログラム、サーバ及び表示制御方法
EP4306192A1 (en) Information processing device, information processing terminal, information processing method, and program
Perl Distributed Multi-User VR With Full-Body Avatars
Lenders Physical Perception of a VR Handshake
JP2021069601A (ja) コンピュータシステム
JP5795345B2 (ja) サーバシステム
CN115546367A (zh) 动画生成方法及装置、存储介质、计算机设备

Legal Events

Date Code Title Description
A201 Request for examination
E902 Notification of reason for refusal
E601 Decision to refuse application
J201 Request for trial against refusal decision
J801 Dismissal of trial

Free format text: REJECTION OF TRIAL FOR APPEAL AGAINST DECISION TO DECLINE REFUSAL REQUESTED 20071011

Effective date: 20080529