2017-12-04 12 views
1

나는 java에서 Two Dice Pig이라는 게임을 만들었습니다. 이 게임은 두 개의 주사위면과 선수 점수 및 이름을 보여주는 간단한 GUI 인터페이스를 가지고 있습니다. 게임은 두 선수의 이름을 묻는 간단한 대화 메시지로 시작되며 게임이 시작됩니다. 두 플레이어는 단 하나의 GUI 인터페이스로 상호 작용하고 차례대로 진행됩니다. 게임이 완전히 코딩되었습니다. 자, 내가 원하는 것은 서버를 만드는 것입니다 (For now I want to try it on my local server) 그리고 두 선수는 자신의 GUI를해야합니다. 그리고 플레이어 A가 게임을하고있을 때, 플레이어 B는 인터페이스로 아무 것도 할 수 없어야합니다. 나는 그것이 사라지기를 바란다. 그것은 내 네트워킹 프로젝트지만, 어떻게 할 지 전혀 모르겠습니다. 어떤 도움이라도 대단히 감사하겠습니다.TCP - 로컬 호스트 서버의 두 플레이어간에 Java 게임을하는 방법

Note: I want to apply the same idea asthisman applied. Just watch only for 15 seconds. Thanks! , 당신은 "나머지 자바 서비스"또는 같은 것을 인터넷 검색을 시작합니다

+0

(코드는 일관성있는 방식으로 모든 클라이언트에 동일한 결과를 제공한다) 도박을하고 4 초래한다 완전히 서버 통신을 허용합니다. 물론 아무 것도 시도하지 않았다면 정말 도움이되지 않습니다. See [ask]. – AxelH

+0

@AxelH 나는 그것에 대해 많이 읽었습니다. 그리고 많은 수의 튜토리얼을 보았습니다. 그래서 나는 완전히 공백이 아니다. 코드가 완전히 코딩되었습니다. 하지만 로컬 서버에서 두 명의 플레이어 만 게임을하고 싶습니다. 너가 또한 뜻깊은 링크를 참조 할 수 있으면. 감사합니다. – SHEIKH

+0

클라이언트가 로그하고 함께 이야기 할 수 있도록 간단한 서버를 구현하기 시작하십시오. 아이디어를 얻고 논리를 업데이트 할 수 있습니다. SO가 링크, 튜토리얼, 가이드 등을 제공하지 않고 기존 문제에 도움을주기 때문에 당신이 가지고있는 것부터 도울 수 없습니다. 시작을위한 소켓 사용 방법보기 – AxelH

답변

0

.

두 개의 Android 게임 세션의 게임 상태를 관리하는 중앙 구성 요소가 필요합니다. 예를 들어 localhost://myService/Dice과 같은 URL을 가지고있는 경우 POST 새 주사위 던지기. 다른 누군가가 그 자원을 GET으로 만들면 게임 중에 게시 한 던져진 주사위를 검색 할 수 있습니다. 플레이어가 상호 작용할 수 없게하려는 경우 플레이어가 수행 할 수없는 경우 플레이어가 POST 새 주사위를 허용하지 않을 수 있으며 GUI에이를 반영해야합니다. 주사위를 올린 후에 버튼을 비활성화 할 수도 있습니다.

더 많은 것이 있지만, 어떻게 든 시작해야합니다. 멀티 플레이어 게임이 사소한 일이 아니다 만들기

package com.sun.jersey.samples.helloworld.resources; 

import javax.ws.rs.GET; 
import javax.ws.rs.Produces; 
import javax.ws.rs.Path; 

// The Java class will be hosted at the URI path "/helloworld" 
@Path("/helloworld") 
public class HelloWorldResource { 

    // The Java method will process HTTP GET requests 
    @GET 
    // The Java method will produce content identified by the MIME Media 
    // type "text/plain" 
    @Produces("text/plain") 
    public String getClichedMessage() { 
     // Return some cliched textual content 
     return "Hello World"; 
    } 
} 
+0

응답 해 주셔서 감사합니다. 실제로, 나는 [this] (https://youtu.be/aIaFFPatJjY?t=1s) youtube tutorial에서 얻은 간단한 게임을 내 게임에 적용하고 싶습니다. 단 15 초만 보시면 내가 찾고있는 것을 알게 될 것입니다. 어떻게 할 수 있는지 알려 주시면 고맙겠습니다. – SHEIKH

+0

Socket 클래스를 사용하는 사람처럼 보입니다. https://docs.oracle.com/javase/7/docs/api/java/net/Socket.html 기본 아이디어는 해당 소켓에 메시지를 보내고 그에 따라 메시지를 처리하는 것입니다 . 그러나 당신이 인터넷을 통해 그것을하고 싶다면, 이것은 선택 사항이 아닙니다, 나는 말할 것입니다. – Simons0n

+0

예, 제 요지가 있습니다. 지금 들어, 나는 단지 이것처럼 연주하고 싶다. 당신이 그것을 얻기 위해 뭔가를 참조 할 수 있습니까? – SHEIKH

0

:

https://docs.oracle.com/javaee/6/tutorial/doc/gilik.html

URL에서 중요한 코드 부분은 위의이 같은 인사의 세계 일 것이다. 멀티 플레이어 코드를 처음부터 작성하지 않았던 것처럼 대부분의 코드를 다시 작성할 준비를하십시오.

방법 1 : 게임 로직의 대부분은 서버에서 수행해야

벙어리 클라이언트 여기에 두 개의 서로 다른 전략이다. 클라이언트는 서버가 말한 것을 표시합니다. 또한 게임 상태를 변경하기 위해 서버에 명령을 보냅니다.

예 :

  • 플레이어 X는 롤에 주사위 버튼을 클릭합니다.
  • 클라이언트 X가 서버 에 전송합니다.
  • 서버가 X 턴인지 여부를 확인하고 그렇지 않은 경우 오류를 반환합니다.
  • 서버가 주사위를 굴립니다. 서버를 3으로 가정하십시오.
  • 서버가 Y로 바뀝니다.
  • 서버는 모든 클라이언트에게 주사위가 3이고 Y의 차례라는 메시지를 보냅니다.

기본적으로 서버는 플레이어의 명령을 기다리고 순서대로 수행합니다. 세계를 업데이트하고 새로운 세계를 모든 고객에게 방송하십시오. 클라이언트는 서버에서 업데이트를 가져 와서 사용자에게 표시하기 만하면됩니다.

방법 2 : 록 스텝 시뮬레이션

게임 로직의 대부분은 클라이언트에서 수행되며, 서버는 단지 명령을 전달하기 위해 그들 사이에 중재. 명령 만 전송되고 각 클라이언트에서 상태가 시뮬레이트됩니다. 동기화 버그가 발생하지 않도록주의해야합니다 (명령이 늦게 또는 다른 일이 발생할 수 있음). 동일한 상태의 각 클라이언트에서 명령을 적용해야합니다. 예를 들어 랜덤 씨드는 동일해야만 랜덤 함수가 두 클라이언트에서 같은 값을 반환합니다.

예 :

  • 플레이어 X는 주사위 롤에 클릭합니다.
  • 클라이언트 X가 주사위를 굴려서 4라고 말합니다.
  • 클라이언트 X가 서버로 롤 명령을 보냅니다.
  • 클라이언트 Y로 서버 브로드 캐스트 롤 명령.
  • 클라이언트 Y 수신 롤 명령. 당신은 거의 컨트롤러를 업데이트해야하기 때문에
  • 클라이언트 Y는 ... 난 당신이 MVC를 사용하고 희망
+0

감사합니다. 너는 내가 할 수있는 것에 대해 내 마음을 맑게했다. 지금 당장은 그것을 더 잘 이해하고 어떤 방법으로 내 게임에 적용 할 수 있습니까? – SHEIKH

+0

@SHEIKH 환영합니다. https://gafferongames.com/categories/networked-physics/과 같은 것들이 있지만 나는 그것이 당신이 필요로하는 것 이상이라고 생각합니다. 어쩌면 간단한 채팅 자바 응용 프로그램을 만드는 것으로 시작할 수 있습니다. –