📄 gameclient.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 + -