Dodanie komunikacji sieciowej do gry

0

Witam,
Chciałbym w swojej grze zrobić komunikacje sieciową, tzn w czasie gry przeciwnicy będą mogli ze sobą pisać w czacie, niestety nie wiem jak rozwiązać umiejscowanie okienka czat i miejsca w którym pisali, tak, żeby działało to poprawnie. Myślałem, że wystarczy zwykłe podpięcie JFielda i JTextArea do paneli i umiejscowienie ich z boku ekranu ale niestety nie wyświetla ich poprawnie i gra nie działa(postac sie nie rusza).

Ogólnie to chodzi mi o coś takiego:
http://postimg.org/image/asosh1wc9/

Kod programu

package game;



public class CreateMap extends JFrame {
	/**
		 * 
		 */
	private Image dbImage;
	private Graphics dbGraphics;
	private static final long serialVersionUID = 1L;
	private List<GameObjects> objects = new ArrayList<GameObjects>();
	private Player player;
	int[][] arr = new int[34][25];
	double time = 0.00;
	int diamondcounter = 0;
	Boolean gameover = false;

	private JTextField userText;
	private JTextArea chatWindow;

	private List<Stone> stoneList = new ArrayList<Stone>();

	public CreateMap(String gamename, Boolean multi) {

		super("Mapa ");

		if (multi) {
			
			  setLayout(null);                        //tutaj chciałem podłączyć czata niestety z mizernym skutkiem
			  userText = new JTextField();
			  userText.setPreferredSize(new Dimension(200, 23));
			  JPanel pane =  new JPanel();
			  JPanel pane1 = new JPanel(); 
			  JPanel pane2 = new JPanel(); 
			  chatWindow = new JTextArea(25, 18); 
			  JLabel info = new JLabel("Chat");
			  
			  pane.add(info);
			  pane1.add(new JScrollPane(chatWindow));
			  pane2.add(userText);
			  pane.setBounds(1000, 100, 200, 20);
			  pane1.setBounds(1000, 120, 200, 400); 
			  pane2.setBounds(1000, 520, 200, 100);
			  add(pane); 
			  add(pane1); 
			  add(pane2);
			  pane1.setVisible(true); 
			  pane2.setVisible(true);
			  pane.setVisible(true);
		}

		objects.add(new Grass());
		objects.add(new Stone(-5, -5));
		objects.add(new Diamond());
		objects.add(new Background());
		objects.add(new Playerobj());

		timeCounter(true);

		try { // wpisywanie zawartości pliku do tablicy2D
			String line;
			BufferedReader br = new BufferedReader(new FileReader(gamename));
			int j = 0;
			while ((line = br.readLine()) != null) {
				for (int i = 0; i < line.length(); i++) {
					arr[j][i] = Integer.parseInt(line.substring(i, 1 + i));
					if (arr[j][i] == 2)
						stoneList.add(new Stone(j, i));
				}
				j++;
			}

			br.close();
		} catch (FileNotFoundException e) {
			System.out.println("Nie znaleziono pliku");
		} catch (IOException e) {
		}

		RandomGenerator randomPlace = new RandomGenerator(); // Generuje losowo
																// miejsce w
																// którym
																// powstaje
																// gracz
		player = new Player(randomPlace.a, randomPlace.b);

		this.addKeyListener(new KeyListener() {

			@Override
			public void keyTyped(KeyEvent e) {
			}

			@Override
			public void keyReleased(KeyEvent e) {
			}

			@Override
			public void keyPressed(KeyEvent e) {
				Point playerposition = player.returnPosition();

				switch (e.getKeyCode()) {

				case KeyEvent.VK_LEFT:
					if (arr[playerposition.x / 30 - 1][playerposition.y / 30] != 2)
						player.moveHorizontal(-1);
					if (playerposition.x <= 0)
						player.moveHorizontal(1);
					checkObject();
					break;
				case KeyEvent.VK_RIGHT:
					if (arr[playerposition.x / 30 + 1][playerposition.y / 30] != 2)
						player.moveHorizontal(1);
					if (playerposition.x >= 960)
						player.moveHorizontal(-1);
					checkObject();
					break;
				case KeyEvent.VK_UP:
					if (arr[playerposition.x / 30][playerposition.y / 30 - 1] != 2)
						player.moveVertical(-1);
					if (playerposition.y <= 30)
						player.moveVertical(1);
					checkObject();
					break;
				case KeyEvent.VK_DOWN:
					if (arr[playerposition.x / 30][playerposition.y / 30 + 1] != 2)
						player.moveVertical(1);
					if (playerposition.y >= 690)
						player.moveVertical(-1);
					checkObject();
					break;
				}
				repaint();

				// try { Thread.sleep(100); } catch(InterruptedException ex) {}

			}
		});
	}

	@Override
	public void paint(Graphics g) {
		dbImage = createImage(990, 720);
		dbGraphics = dbImage.getGraphics();
		paintComponent(dbGraphics);
		g.drawImage(dbImage, 0, 0, this);
	}

	public void paintComponent(Graphics g) {
		Boolean wingame = true;
		Point playerposition = player.returnPosition();// testy

		for (int i = 0; i < 33; i++) {
			for (int j = 1; j < 24; j++) {
				if (arr[i][j] == 1)
					g.drawImage(((Grass) (objects.get(0))).objpic, (i * 30),
							(j * 30), 30, 30, null);

				else if (arr[i][j] == 2)
					g.drawImage(((Stone) (objects.get(1))).objpic, (i * 30),
							(j * 30), 30, 30, null);

				else if (arr[i][j] == 3) {
					g.drawImage(((Diamond) (objects.get(2))).objpic, (i * 30),
							(j * 30), 30, 30, null);
					wingame = false;
				} else if (arr[i][j] == -1)
					g.drawImage(((Background) (objects.get(3))).objpic,
							(i * 30), (j * 30), 30, 30, null);
			}
		}
		g.drawImage(((Playerobj) (objects.get(4))).objpic, playerposition.x,
				playerposition.y, 30, 30, null);

		for (int i = 0; i < stoneList.size(); i++) {

			if (arr[stoneList.get(i).x][stoneList.get(i).y + 1] == -1)
				rollingStones(stoneList.get(i).x, stoneList.get(i).y, i);

		}

		g.setFont(new Font("MV Boli", Font.ITALIC, 20));
		g.setColor(Color.RED);
		g.drawString("Diamonds: " + diamondcounter, 800, 70);
		g.drawString(String.format("Time: %.2f", time), 800, 90);
		if (wingame == true) {
			timeCounter(false);
			winGameMassage();
		}
	}

	void checkObject() {
		Point playerposition = player.returnPosition();
		playerposition.x /= 30;
		playerposition.y /= 30;
		if (arr[playerposition.x][playerposition.y] == 1) {
			arr[playerposition.x][playerposition.y] = -1; // zmien z trawy na
															// tło!
			try {
				AudioInputStream audio = AudioSystem
						.getAudioInputStream(new File("lib/jar/trawasound.wav")); // wczytanie
																					// dźwięków
				Clip clip = AudioSystem.getClip();
				clip.open(audio);
				clip.start();
			} catch (UnsupportedAudioFileException uae) {
				System.out.println(uae);
			} catch (IOException ioe) {
				System.out.println(ioe);
			} catch (LineUnavailableException lua) {
				System.out.println(lua);
			}
		} else if (arr[playerposition.x][playerposition.y] == 3) {
			arr[playerposition.x][playerposition.y] = -1;
			diamondincrease();
			try {
				AudioInputStream audio = AudioSystem
						.getAudioInputStream(new File(
								"lib/jar/diamentsound.wav"));
				Clip clip = AudioSystem.getClip();
				clip.open(audio);
				clip.start();
			} catch (UnsupportedAudioFileException uae) {
				System.out.println(uae);
			} catch (IOException ioe) {
				System.out.println(ioe);
			} catch (LineUnavailableException lua) {
				System.out.println(lua);
			}
		}
	}

	int diamondincrease() {
		return this.diamondcounter++;
	}

	void winGameMassage() {
		WinGameMassage w = new WinGameMassage(time);
		w.setSize(300, 100);
		w.setVisible(true);
		w.setResizable(false);
		w.setLocationRelativeTo(null);
		dispose();
	}

	void timeCounter(Boolean start) // Funkcja licząca czas
	{
		Thread t = new Thread() {
			@Override
			public void run() {
				while (start) {
					try {
						Thread.sleep(10);
						time = time + 0.01;
						repaint();
					} catch (InterruptedException e) {
						e.printStackTrace();
					}
				}
			}
		};
		t.start();
	}

	long iteration = 0;

	void rollingStones(int x, int y, int i) // Funkcja dotycząca upadku kamieni
	{
		// long t1= System.currentTimeMillis();

		/*
		 * if(iteration%50==0)
		 * 
		 * 
		 * //kod przerysowywania 
		 * long t2 = System.currentTimeMillis(); 
		 * long dt = t2-t1;
		 */
		/*
		 * if(dt<10) Thread.sleep(dt);
		 */
		Thread t1 = new Thread() {
			@Override
			public void run() {
				while (arr[x][y + 1] == -1 && !gameover) {
					try {
						Thread.sleep(500);
						arr[x][y] = -1;
						stoneList.get(i).y = y + 1;
						arr[x][y + 1] = 2;
						Point playerposition = player.returnPosition();
						playerposition.x /= 30;
						playerposition.y /= 30;
						repaint();
						if (arr[playerposition.x][playerposition.y] == 2) {
							gameover = true;
							gameOver();
						}
						rollingStones(x, y + 1, i);
					} catch (InterruptedException e) {
					}
					;
				}
			}
		};
		t1.start();
	}

	void gameOver() {
		timeCounter(false);
		JOptionPane.showMessageDialog(null, "You lose!");
		System.exit(0);
	}
}
1

Wrzuć wyniki testów jednostkowych ;]

0

Niestety, przeglądam poradniki, bo nigdy takich nie robiłem i nie wiem jak je przeprowadzić na moim przykładzie.

1 użytkowników online, w tym zalogowanych: 0, gości: 1