⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 gameserver.java

📁 本程序实现了网络五子棋的基本功能
💻 JAVA
字号:
import java.io.*;
import java.net.*;
import javax.swing.*;
import java.awt.*;
import java.util.Date;

public class GameServer extends JFrame
		implements GameConstants
{
	//main()
	public static void main(String args[])
	{
		GameServer frame = new GameServer();
	}
	
	//Construct GameServer()
	public GameServer()
	{
		JTextArea jtaLog = new JTextArea();
		
    	JScrollPane scrollPane = new JScrollPane(jtaLog);
    	getContentPane().add(scrollPane, BorderLayout.CENTER);
    	
    	setSize(300, 250);
    	setTitle("GameServer");
    	setVisible(true);
    	setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    	
    	try
    	{
      		ServerSocket serverSocket = new ServerSocket(GAMEPORT);
      		jtaLog.append(new Date() + ": Server started at port " + GAMEPORT + '\n');
      		
       		int gameNo = 1;
      		
      		while(true)
      		{
      			jtaLog.append(new Date() + ": Waiting for players to join game " + gameNo + '\n');
      			
      			// Connect to player1
        		Socket player1 = serverSocket.accept();
        		jtaLog.append(new Date() + ": Player 1 joined game " + gameNo + '\n');
        		jtaLog.append("Player 1's IP address" + player1.getInetAddress().getHostAddress() + '\n');
        		new DataOutputStream(player1.getOutputStream()).writeInt(PLAYER1);
        		
        		// Conncet to player2
        		Socket player2 = serverSocket.accept();
		        jtaLog.append(new Date() + ": Player 2 joined game " + gameNo + '\n');
        		jtaLog.append("Player 2's IP address" +  player2.getInetAddress().getHostAddress() + '\n');
        		new DataOutputStream(player2.getOutputStream()).writeInt(PLAYER2);
        		
        		// Start a thread
        		jtaLog.append(new Date() + ": Start a Thread for Game " + gameNo++ + '\n');
        		HandleGame thread = new HandleGame(player1, player2);
        		thread.start();
        	}//end while
        }
        catch(IOException e)
    	{
      		System.err.println(e);
    	}
    }
}

    
class HandleGame extends Thread 
		implements GameConstants
{
	private Socket player1;
	private Socket player2;

	private char[][] cell =  new char[30][30];   

	private DataInputStream isFromPlayer1;
	private DataOutputStream osToPlayer1;
	private DataInputStream isFromPlayer2;
	private DataOutputStream osToPlayer2;
	
	public HandleGame(Socket player1, Socket player2)
	{
 		this.player1 = player1;
 		this.player2 = player2;

 		for (int i=0; i<30; i++)
   			for (int j=0; j<30; j++)
     			cell[i][j] = ' ';
	}
	
	public void run()
	{
		try
		{
   			DataInputStream isFromPlayer1 = new DataInputStream(player1.getInputStream());
   			DataOutputStream osToPlayer1 = new DataOutputStream(player1.getOutputStream());
   			DataInputStream isFromPlayer2 = new DataInputStream(player2.getInputStream());
   			DataOutputStream osToPlayer2 = new DataOutputStream(player2.getOutputStream());
			
   			// Send to Start
			osToPlayer1.writeInt(1);
			
			while(true)
			{
				//player 1
     			int row = isFromPlayer1.readInt();

     			if(row == STOP)
     			{
     				osToPlayer2.writeInt(STOP);
     				osToPlayer1.writeInt(STOP);
     				break;
     			}
     			
     			int column = isFromPlayer1.readInt();
     			
     			cell[row + 5][column + 5] = 'X';
     			
     			if (isWon(row + 5,column + 5,'X'))
     			{
       				osToPlayer1.writeInt(PLAYER1_WON);
       				osToPlayer2.writeInt(PLAYER1_WON);
       				sendMove(osToPlayer2, row, column);
       				break; 
     			}
     			else if (isFull()) 
     			{
       				osToPlayer1.writeInt(DRAW);
       				osToPlayer2.writeInt(DRAW);
       				sendMove(osToPlayer2, row, column);
       				break;
     			}
     			else
     			{
       				osToPlayer2.writeInt(CONTINUE);
       				sendMove(osToPlayer2, row, column);
    			}
     			
     			//Player 2
     			row = isFromPlayer2.readInt();
     			
     			if(row == STOP)
     			{
     				osToPlayer1.writeInt(STOP);
     				osToPlayer2.writeInt(STOP);
     				break;
     			}
     			
     			column = isFromPlayer2.readInt();
     			
     			
     			
     			cell[row + 5][column + 5] = 'O';
     			
     			if (isWon(row + 5,column + 5,'O'))
     			{
       				osToPlayer1.writeInt(PLAYER2_WON);
       				osToPlayer2.writeInt(PLAYER2_WON);
       				sendMove(osToPlayer1, row, column);
       				break;
     			}
     			else
     			{
       				osToPlayer1.writeInt(CONTINUE);
       				sendMove(osToPlayer1, row, column);
     			}
			}//end while
		}
		catch(IOException e)
 		{
   			System.err.println(e);
 		}
	}
	
	// Send message
  	private void sendMove(DataOutputStream out, int row, int column)
    		throws IOException
  	{
    	out.writeInt(row); 
    	out.writeInt(column);
  	}

  	// isFull()
  	private boolean isFull()
  	{
    	for (int i=5; i<25; i++)
      		for (int j=5; j<25; j++)
        		if (cell[i][j] == ' ')
          			return false; 
    
    	return true;   
  	}

	// isWon()
  	private boolean isWon(int row,int column,char token)
  	{
    	for (int i=0; i<5; i++)
      		if ((cell[row][column+i] == token) && (cell[row][column+i-1] == token) && (cell[row][column+i-2] == token) && (cell[row][column+i-3] == token) &&(cell[row][column+i-4] == token))
              	return true;

    	for (int i=0; i<5; i++)
      		if ((cell[row+i][column] == token) && (cell[row+i-1][column] == token) && (cell[row+i-2][column] == token) && (cell[row+i-3][column] == token) && (cell[row+i-4][column] == token))
              	return true;

    	for (int i=0; i<5; i++)
      		if ((cell[row+i][column+i] == token) && (cell[row+i-1][column+i-1] == token) && (cell[row+i-2][column+i-2] == token) && (cell[row+i-3][column+i-3] == token) && (cell[row+i-4][column+i-4] == token))
              	return true;

    	for (int i=0; i<5; i++)
      		if ((cell[row+i][column-i] == token) && (cell[row+i-1][column-i+1] == token) && (cell[row+i-2][column-i+2] == token) && (cell[row+i-3][column-i+3] == token) && (cell[row+i-4][column-i+4] == token))
              	return true;

    	return false;
  	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -