2014-02-10 2 views
0

Java에서 간단한 게임을 만들려고합니다. 여러 플레이어를 허용하는 서버를 코딩하고 싶습니다. 다음은 게임의 메타입니다 :공유 리소스가있는 멀티 스레딩 서버

플레이어는 서버를 연결하여 게임을하고 숫자를 나타냅니다. 각 플레이어는 하나의 게임만을 플레이합니다. 이 게임은 4 명이 연결되면 시작되거나 해결됩니다. 모든 선수 수의 합이 21보다 크면 모두 잃고, 그렇지 않으면 모두 승리합니다. 게임이 끝난 후에 각 플레이어는 승리했는지 또는 잃어 버렸는 지 경고해야합니다.

승패 패를위한 알고리즘이나 여러 클라이언트를 받아 들일 수 있습니다. 내 의심은 스레드 (또는 실행 가능한 개체) 및/또는 공유 리소스 란 무엇이어야합니다. 몇 줄의 가이드 라인만으로 구현할 수 있습니다.

+0

당신은 무엇을 시도 했습니까? 정확히 무엇이 당신이 기대했던대로 작동하지 않았습니까? – Philipp

+0

나는 동시성이 작동하는 방식과 약간 혼동 스럽다. 게임을 플레이어 목록이있는 실행 가능한 개체로 만들고 4 명의 플레이어가있을 때 시작/생성되도록하는 등 코드 및 수정 방법으로이 작업을 수행 할 수 있습니다. 게임이 해결되면 각 클라이언트에게 결과가 인쇄됩니다. 하지만 진정으로 원하는 것은 각 클라이언트가 숫자를 입력 한 후에 차단 된 상태 (기다림)이고 모든 플레이어가 숫자를 입력하면 계속해서 결과를 인쇄하도록하는 스레드라는 것입니다. – Duozhasht

+1

가능한 경우 멀티 스레딩을 피해야합니다. 여러 스레드로 인해 교착 상태가 발생하고 경쟁 조건이 발생하여 버그를 재현 할 수 없게됩니다. Java는 한 스레드에서 많은 수의 클라이언트를 처리하는 [New-IO] (http://tutorials.jenkov.com/java-nio/index.html)를 제공합니다. – Philipp

답변

0

귀하의 성명서에서 내가 이해 한 것은 정확한 4 명의 선수가 게임 결과를 결정해야한다는 것입니다. 각 플레이어는 서버에 연결하는 동안 숫자를 전달하고 더 많은 것을 입력하거나 전달할 수 없습니다.

이렇게 공유 된 리소스를 연결의 총 SUM번호이며, 스레드 서버연결입니다. 따라서 플레이어가 연결을 요청할 때마다 새 스레드를 시작하고이 스레드가 공유를 증가시킵니다 총 SUM연결 번호 그리고 증가한 후에도 총계 및 아니오의 값을 확인하십시오. 연결의.

+0

그래서 게임 클래스 (존재한다면)에서 어떻게 시작해야합니까? 좀 더 구체적으로 말하면, 어떻게 플레이어와 게임을 관련시킬 수 있습니까? – Duozhasht

+0

당신은 runnable을 구현하는 GAME 클래스를 가질 수 있으며, 모든 공유 리소스와 run 메소드를 가지고 있습니다. 생성자는 숫자를 입력 받아이 내부 스레드를 시작합니다. 내부 스레드 또는 실행 메소드는 모든 게임 로직을 구현합니다. GAME 스레드를 만들고 시작하는 또 다른 클래스 CONNECTION이 있습니다. –