📄 gameserver.java
字号:
import java.net.*;
import java.awt.*;
import java.awt.event.*;
import java.io.*;
import javax.swing.*;
public class GameServer {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
ServerFrame sf=new ServerFrame();
sf.show();
}
}
class ServerFrame extends JFrame implements KeyListener,WindowListener
{
static GamePanel gp;
//CounterPanel ct;
ServerThread st;
static Graphics g;
Sender sender=null;
Food fd;
public Snake snk;
public Snake2 yoursnk;
ServerFrame()
{ setLayout(null);
setSize(800,700);
gp=new GamePanel();
add(gp);
gp.setBounds(20,20,750,650);
addWindowListener(this);
addKeyListener(this);
st=new ServerThread(5000);
sender=new Sender("127.0.0.1",5001);
}
public void keyPressed(KeyEvent e)
{
if(e.getKeyCode()==e.VK_UP)
{
snk.cmdUp();
sender.sendCmd("%up%");
}
if(e.getKeyCode()==e.VK_DOWN)
{
snk.cmdDown();
sender.sendCmd("%down%");
}
if(e.getKeyCode()==e.VK_LEFT)
{
snk.cmdLeft();
sender.sendCmd("%left%");
}
if(e.getKeyCode()==e.VK_RIGHT)
{
snk.cmdRight();
sender.sendCmd("%right%");
}
}
public void keyReleased(KeyEvent e)
{
}
public void keyTyped(KeyEvent e)
{
}
private class Sender extends Thread
{
private DataOutputStream outToClient=null;
private Socket sk=null;
private String ip;
private int port;
Sender(String ip,int port)
{
this.ip=ip;
this.port=port;
this.start();
}
public void run()
{
while(true)
{
try
{
sk=new Socket(InetAddress.getByName(ip),port);
}
catch(Exception e)
{
e.printStackTrace();
}
if(sk!=null)break;
}
try
{
outToClient=new DataOutputStream(sk.getOutputStream());
}
catch(Exception e)
{
e.printStackTrace();
}
}
public void sendCmd(String str)
{
try
{
outToClient.writeUTF(str);
System.out.println(str);
}
catch(Exception e)
{
e.printStackTrace();
}
}
}
private class ServerThread extends Thread
{
private ServerSocket svsk;
private String yourip="127.0.0.1";
private DataInputStream inFromClient;
Socket sk=null;
private int gameport=5000;
public Socket getSocket()
{
return sk;
}
ServerThread(int port)
{
setPort(port);
try
{
svsk=new ServerSocket(gameport);
}
catch(Exception e)
{
e.printStackTrace();
}
this.start();
}
public void gameStart()
{
}
public void run()
{
try
{
sk=svsk.accept();
inFromClient=new DataInputStream(sk.getInputStream());
}
catch(Exception e)
{
e.printStackTrace();
}
fd=new Food();
gp.tdStart();
getCmd();
}
public void wt()
{
}
public void setPort(int newport)
{
this.gameport=newport;
}
public void getCmd()
{
String str=null;
while(true)
{
try
{
str=inFromClient.readUTF();
System.out.println(str);
}
catch(Exception e)
{
e.printStackTrace();
}
if(str!=null)
{
if(str.equals("%break%"))
{
try{
inFromClient.close();sk.close();
}
catch(IOException e)
{
e.printStackTrace();
}
break;
}
else cmd(str);
}
}
}
private void cmd(String str)
{
if(str.equals("%down%"))
{
ServerFrame.this.yoursnk.cmdDown();
}
if(str.equals("%up%"))
{
ServerFrame.this.yoursnk.cmdUp();
}
if(str.equals("%left%"))
{
ServerFrame.this.yoursnk.cmdLeft();
}
if(str.equals("%right%"))
{
ServerFrame.this.yoursnk.cmdRight();
}
}
}
class Food
{
int i;
int j;
int x;
int y;
Food()
{
Map map=new Map();
double e=10000*Math.random();
double f=10000*Math.random();
int a=(int)e;
int b=(int)f;
int i=a%35;
int j=b%20;
x=map.x[i];
y=map.y[j];
sender.sendCmd("%x%"+Integer.toString(x)+"%y%"+Integer.toString(y));
}
}
private class GamePanel extends JPanel implements Runnable
{
Thread thread=new Thread(this);
public YourSnake yoursnake;
public MySnake mysnake;
GamePanel()
{
snk=new Snake(100,100);
yoursnk=new Snake2(500,400);
}
private class YourSnake implements Runnable
{
Thread thread;
YourSnake()
{
thread=new Thread(this);
thread.start();
}
public void run()
{
while(true)
{
try
{thread.sleep(yoursnk.gamespeed);}
catch(InterruptedException e)
{
System.out.println(e);
}
yoursnk.move();
if(yoursnk.bd[0].x<0||yoursnk.bd[0].x>680||yoursnk.bd[0].y<0||yoursnk.bd[0].y>540)
{
snk=new Snake(100,100);
yoursnk=new Snake2(500,400);
sender.sendCmd("%youdie%");
fd=new Food();
}
for(int i=1;i<yoursnk.length;i++)
{
if(yoursnk.bd[0].x==yoursnk.bd[i].x&&yoursnk.bd[0].y==yoursnk.bd[i].y)
{
yoursnk=new Snake2(500,400);
fd=new Food();
sender.sendCmd("%youdie%");
snk=new Snake(100,100);
}
}
for(int i=0;i<snk.length;i++)
{
if(yoursnk.bd[0].x==snk.bd[i].x&&yoursnk.bd[0].y==snk.bd[i].y)
{
sender.sendCmd("%youdie%");
snk=new Snake(100,100);fd=new Food();yoursnk=new Snake2(500,400);
}
}
if(yoursnk.bd[0].x==fd.x&&snk.bd[0].y==fd.y)
{
yoursnk.eat();
fd=new Food();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -