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

📄 gameclient.java

📁 双 人 连 机 的 贪吃蛇
💻 JAVA
字号:
import javax.swing.*;
import java.net.*;
import java.awt.*;
import java.awt.event.*;
import java.io.*;
import java.lang.*;

public class GameClient {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
          new ClientFrame().show();
          
	}

}
class ClientFrame extends JFrame implements KeyListener,WindowListener
{
	  static GamePanel gp;	  
	  ClientThread c;
	  static Graphics g;
	  int gamespeed;
	  int[] speed=new int[5];
	    int level=0;
	  int currentspeed;
	  ClientThread.Snake3 snk;
	  ClientThread.Snake3 yoursnk;
	  Food fd;
	 
	  ClientFrame()
	  {      setLayout(null);
	  	     setSize(800,700);
	  	     setBackground(Color.cyan);	  	     
	  	     c=new ClientThread(5000,"127.0.0.1");	  	    	  	     
	  	     gp=new GamePanel();
	  	     add(gp);
	  	     gp.setBounds(20,20,750,650);
	  	     addWindowListener(this);
	  	     addKeyListener(this);
	  }	  
	  public void keyPressed(KeyEvent e)
	  	     {    
		          if(e.getKeyCode()==e.VK_UP)
		          {
		        	   snk.cmdUp();
		        	   c.sendToServer("%up%");
		          }
		          if(e.getKeyCode()==e.VK_DOWN)
		          {
		        	  snk.cmdDown(); 
		        	  c.sendToServer("%down%");
		          }
		          if(e.getKeyCode()==e.VK_LEFT)
		          {
		        	  snk.cmdLeft();  
		        	  c.sendToServer("%left%");
		          }
		          if(e.getKeyCode()==e.VK_RIGHT)
		          {
		        	  snk.cmdRight();
		        	  c.sendToServer("%right%");
		          }
		          
	  	     } 
	  	     public void keyReleased(KeyEvent e)
	  	     {	  	     	    	     	
	  	     }
	  	     public void keyTyped(KeyEvent e)
	  	     {
	  	     	    
	  	     }       
	  private class GamePanel extends JPanel 
	  {        	  	       	  	      
	  	      public MyThread mt;
	  	      public YourThread yt;
	  	      GamePanel()
	  	      {   
                  mt=new MyThread();
                  yt=new YourThread();                                                        		  	      	    
	  	      }
	  	     public void paint(Graphics g)
	  	     {  	           
	  	           g.drawRect(0,0,700,560);
	  	           for(int i=0;i<snk.length;i++)
	  	           {
	  	               g.fill3DRect(snk.bd[i].x,snk.bd[i].y,20,20,true); 	
	  	           }
	  	           for(int i=0;i<yoursnk.length;i++)
	  	           {
	  	        	   g.fill3DRect(yoursnk.bd[i].x,yoursnk.bd[i].y,20,20,true);
	  	           }	  	           
	  	     }
	  	     private class YourThread extends Thread
	  	     {
	  	    	 public void tdStart()
	  	    	 {
	  	    		 this.start();
	  	    	 }
	  	    	 public void run()
	  	    	 {
	  	    		while(true)
	  	    		 {
	  	    			try
	  	    			{
	  	    				this.sleep(yoursnk.gamespeed);
	  	    			}
	  	    			catch(Exception e)
	  	    			{
	  	    				e.printStackTrace();
	  	    			}
	  	    			yoursnk.move();
	  	    			ClientFrame.this.repaint();
	  	    		 }
	  	    	 }
	  	    	
	  	     }
	  	     private class MyThread extends Thread
	  	     {
	  	    	 
	  	    	 public void tdStart()
	  	    	 {
	  	    		 this.start();
	  	    	 }
	  	    	 public void run()
	  	    	 {
	  	    		 while(true)
	  	    		 {
	  	    			try
	  	    			{
	  	    				this.sleep(snk.gamespeed);
	  	    			}
	  	    			catch(Exception e)
	  	    			{
	  	    				e.printStackTrace();
	  	    			}
	  	    			snk.move();
	  	    			ClientFrame.this.repaint();
	  	    		 }
	  	    	 }
	  	     }
	  	     
	  }
	  private class Food
	  {
		  public int x;
		  public int y;
		  Food(int x,int y)
		   {
			   this.x=x;
			   this.y=y;
		   }
	  }
	  private class ClientThread extends Thread
	  {
		  
		   private Socket sk=null;
		   
		   private InetAddress serverIP=null;
		   private DataOutputStream outToServer=null;
		  
		   private int port;
		   public Reciever rcv;
		   private String serverAddress;
		   public ClientThread(int port,String serverAddress)
		   {
			   ClientFrame.this.snk=new Snake3(500,400,2);
			   ClientFrame.this.yoursnk=new Snake3(100,100,1);
			   yoursnk.order=1;
			   this.port=port;
			   this.serverAddress=serverAddress;
			   this.start();
			   rcv=new Reciever(); 
		   }
		   public void run()
		   {
			   while(true)
			   {
				   try
					   {
						   serverIP=InetAddress.getByName(serverAddress);
						   sk=new Socket(serverIP,port);
						   if(sk!=null)break; 
					   }
					   catch(Exception e)
					   {
						   e.printStackTrace();
					   }
			   }
					   try
					   {
						   outToServer=new DataOutputStream(sk.getOutputStream());
						    //inFromServer=new DataInputStream(sk.getInputStream());
					   }
					   catch(Exception e)
					   {
						   e.printStackTrace();
					   }
		   }
		   public void sendToServer(String str)
		   {
			   try
	  		    {
	  		    	outToServer.writeUTF(str); 
	  		    }
	  		    catch(Exception e)
	  		    {
	  		    	e.printStackTrace();
	  		    }
		   }
		  
		    private class Snake3
			  {
			  	  int length=2;
			  	  int order=2;
			  	 
			  	  Body[] bd=new Body[100];
			  	  public int gamespeed;
			  	   boolean orderchange=true;		  
			  		  int[] speed=new int[5];
			  		    int level;
			  		  int currentspeed;
			  	  class Body
			  	  {
			  	  	 int x;
			  	  	 int y;
			  	  	 Body(int newx,int newy)
			  	  	 {
			  	  	     x=newx;
			  	  	     y=newy; 
			  	  	 } 
			  	  }
			  	public Snake3(int startx,int starty,int order)
			   	  {
			  	                                                
			  	       bd[0]=new Body(startx,starty);
			  	       bd[1]=new Body(startx+20,starty); 
			  	         speed[0]=200;
			  	  	     speed[1]=200;
			  	  	     speed[2]=200;
			  	  	     speed[3]=200;
			  	  	     speed[4]=200;
			  	  	     level=0;
			  	  	     this.order=order;
			  	  	     currentspeed=speed[level];
			  	  	     gamespeed=currentspeed;
			  	  	     
			  	  }
			  	  public void changeOrder(int order)
			  	  {
			  		  this.order=order;
			  	  }
			  	  public void move()
			  	  {
			  	  	  if(order==1)
			  	  	  {  
			  	  	  	  for(int i=length-2;i>=0;i--)
			  	  	  	  {
			  	  	  	  	  bd[i+1].x=bd[i].x;
			  	  	  	  	  bd[i+1].y=bd[i].y;  
			  	  	  	  }
			  	  	  	  bd[0].x+=20;   
			  	  	  } 
			  	  	  if(order==2)
			  	  	  {
			  	  	  	  for(int i=length-2;i>=0;i--)
			  	  	  	  {
			  	  	  	  	  bd[i+1].x=bd[i].x;
			  	  	  	  	  bd[i+1].y=bd[i].y;	  	  	  	 
			  	  	  	  }
			  	  	  	  bd[0].x-=20;
			  	  	  }
			  	  	   if(order==3)
			  	  	  {
			  	  	  	  for(int i=length-2;i>=0;i--)
			  	  	  	  {
			  	  	  	  	  bd[i+1].x=bd[i].x;
			  	  	  	  	  bd[i+1].y=bd[i].y;	  	  	  	 
			  	  	  	  }
			  	  	  	  bd[0].y+=20;
			  	  	  }
			  	  	  	if(order==4)
			  	  	  {
			  	  	  	  for(int i=length-2;i>=0;i--)
			  	  	  	  {
			  	  	  	  	  bd[i+1].x=bd[i].x;
			  	  	  	  	  bd[i+1].y=bd[i].y;	  	  	  	 
			  	  	  	  }
			  	  	  	  bd[0].y-=20;
			  	  	  }
			  	  	  orderchange=true; 
			  	  	  	      	     
			  	  }
			  	  public void cmdUp()
			  	  {		  	
			  		   
			  		  if((order==1||order==2)&&orderchange==true)
			  		    	{
			  		    	 order=4;
			  		    	 orderchange=false;
			  		    	}
			  		    if(order==4)
			  		    {
			  		    	if(level<4)
			  		    	{
			  		         level++;
			  		    	 currentspeed=speed[level];
			  		    	 gamespeed=currentspeed;
			  		    	}
			  		    }
			  		    if(order==3)
			  		    {
			  		    	level=0;
			  		    	gamespeed=speed[level];
			  		    }
			  		    
			  	  }
			  	  public void cmdDown()
			  	  {
			  		  if((order==1||order==2)&&orderchange==true)
			  		    	{
			  			       order=3;
			  		    	   orderchange=false;
			  		    	}
			  		    if(order==3)
			  		    {
			  		    	if(level<4)
			  		    	{level++;
			  		    	 currentspeed=speed[level];
			  		    	 gamespeed=currentspeed;
			  		    	}
			  		    }
			  		    if(order==4)
			  		    {
			  		    	level=0;
			  		    	gamespeed=speed[level];
			  		    } 
			  		  
			  	  }
			  	  public void cmdLeft()
			  	  {
			  		  if((order==3||order==4)&&orderchange==true)
			  		    	{
			  			      order=2;
			  		    	  orderchange=false;
			  		    	}
			  		    if(order==2)
			  		    {
			  		    	if(level<4)
			  		    	{level++;
			  		    	 currentspeed=speed[level];
			  		    	 gamespeed=currentspeed;
			  		    	}
			  		    }
			  		    if(order==1)
			  		    {
			  		    	level=0;
			  		    	gamespeed=speed[level];
			  		    } 
			  		  
			  	  }
			  	  public void cmdRight()
			  	  {
			  		  if((order==3||order==4)&&orderchange==true)
			  		    	{
			  			       order=1;
			  			       orderchange=false;
			  		    	}
			  		    if(order==1)
			  		    {
			  		    	if(level<4)
			  		    	{
			  		    		level++;
			  		    	
			  		    	    currentspeed=speed[level];
			  		    	    gamespeed=currentspeed;
			  		    	}
			  		    }
			  		    if(order==2)
			  		    {
			  		    	gamespeed=speed[0];
			  		    }
			  		  
			  	  }
			  	 
			  	  public void eat()
			  	  {
			  	  	   length++;
			  	  	   bd[length-1]=new Body(bd[length-2].x,bd[length-2].y);
			  	  	    
			  	  }	
			  	  
			  	  
			  }
		  	  
		  
		   class Reciever extends Thread
		   {
			   ServerSocket svsk;
			   Socket sk;
			   DataInputStream InfromClient;
			   Reciever()
			   {
				   try
				   {
					   svsk=new ServerSocket(5001);
				   }
				   catch(Exception e)
				   {
					   e.printStackTrace();
				   }
				   
				   start();
				   
			   }
			   public void threadStart()
			   {
				   this.start();
			   }
			   public void run()
			   {
				   while(true)
				   {   try
					   {
						   sk=svsk.accept();
						   if(sk!=null)
						   {
							   InfromClient=new DataInputStream(sk.getInputStream());
							   break;							    
						   }
					   }
					   catch(Exception e)
					   {
						   e.printStackTrace();
					   } 
					  
				   }
				   gp.mt.tdStart();
				   gp.yt.tdStart();
				   while(true)
					   try    
					   {  String str=InfromClient.readUTF();
					       if(str.equals("%up%"))
					       {
					    	   yoursnk.cmdUp();
					       }
					       if(str.equals("%down%"))
					       {
					    	   yoursnk.cmdDown();
					       }
					       if(str.equals("%left%"))
					       {
					    	   yoursnk.cmdLeft();
					       }
					       if(str.equals("%right%"))
					       {
					    	   yoursnk.cmdRight();
					       }
						   if(str.equals("%youdie%"))
						   {
							   snk=new Snake3(500,400,2);
							   yoursnk=new Snake3(100,100,1);
						   }
						   if(str.equals("%idie%"))
						   {
							   snk=new Snake3(500,400,2);
							   yoursnk=new Snake3(100,100,1);
						   }
						   if(str.startsWith("%x%"))
						   {
                               int x=str.indexOf("x");
                               int y=str.indexOf("y");
							   int xvalue=Integer.parseInt(str.substring(x+2,y-2));
							   int yvalue=Integer.parseInt(str.substring(y+2));
							   fd=new Food(xvalue,yvalue); 
						   }
						   if(str.equals("%break%"))
						   {
							   System.exit(1);
						   }
						   		
					   }
					   catch(Exception e)
					   {
						   e.printStackTrace();
					   }
				   }   
			   }
		   }
	public void windowActivated(WindowEvent e) {
		// TODO Auto-generated method stub
		
	}
	public void windowClosed(WindowEvent e) {
		// TODO Auto-generated method stub
		
	}
	public void windowClosing(WindowEvent e) {
		// TODO Auto-generated method stub
		c.sendToServer("%break%");
	}
	public void windowDeactivated(WindowEvent e) {
		// TODO Auto-generated method stub
		
	}
	public void windowDeiconified(WindowEvent e) {
		// TODO Auto-generated method stub
		
	}
	public void windowIconified(WindowEvent e) {
		// TODO Auto-generated method stub
		
	}
	public void windowOpened(WindowEvent e) {
		// TODO Auto-generated method stub
		
	}
	  
	 
 }
	  

⌨️ 快捷键说明

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