2017-01-02 8 views
0

学校のために私はマルチプレイヤーゲームを構築しています。このゲームでは、私はロビーの選手のリストを持っています。このリストには、プレーヤのIDとプレーヤのスピリット名が含まれます。あなたの価値は私の価値です。キーとして、私はロビーの鍵を入れます。一緒に働いているハッシュマップのフォーム。同じキーを持つハッシュマップにある値の整数を取得する方法はありますか?

ロビーに接続したいときは、プレイヤーがすでにハッシュマップに入っているかどうかを知る必要があります。そのためにforeachループが必要です。しかし、私はそれをどうやって行うのか、それが可能であってもわからない。

+4

'値のみ1.あなたがハッシュマップで重複キーを持つことはできません、それがポイントです。) – AxelH

+1

あなた' PUT'-ロジックがかなりあります遠く離れていても、すべてのロビーに1人のプレイヤーしかいないことがあります。そして、「出版者」とは何か、それは何のためのものなのでしょうか?あなたは今、プレイヤーがロビーに2回いるか、同時に2つのロビーにいないようにしようとしていますか? – luk2302

+0

目的のために[Guava Multimap](https://github.com/google/guava/wiki/NewCollectionTypesExplained#Multimap)を使用することができます –

答えて

0

抽象度が高い場合は、これが解決しやすくなります。ロビーIDをロビーにマッピングするMap<Integer, Lobby>と、IDとスプライトの名前を集約するPlayerクラスを作成した場合。それは単純に次のようになります。同じkey`とハッシュマップで

private final Map<Integer, Lobby> lobbiesByID; 

private boolean isPlayerInLobby(Player player) { 
    return lobbiesByID.values().stream().anyMatch(l -> l.hasPlayer(player)); 
} 

public IRemotePublisherForListener connect(Player player, int lobbyID) { 
    if(!isPlayerInLobby(player)) { 
     //.. insert null-check unless you trust the id 
     lobbiesByID.get(lobbyID).addPlayer(player); 
    } 
    //.. else, log an error, or throw 
    return publisher; 
} 
+0

ありがとう、私はこれを使用することができます。 –

関連する問題