📄 ball.java
字号:
package com.cz.ball;
import java.awt.*;
import javax.swing.*;
import java.io.*;
import java.net.*;
import java.awt.event.*;
import java.util.EventListener;
public class Ball extends JFrame {
int width = 300;
int height = 400;
Ball() {
this.setSize(width , height);
MyPanel mp = new MyPanel(width , height);
this.add(mp);
this.addKeyListener(mp);
}
public static void main(String[] args) {
Ball w = new Ball();
w.setVisible(true);
}
}
class MyPanel extends JPanel implements Runnable , KeyListener {
private int width;
private int height;
int xs = 30;
int ys = 30;
int xc = 250;
int yc = 350;
Socket s;
boolean b = true;
MyPanel(int width , int height) {
this.width = width;
this.height = height;
Thread t = new Thread(this);
t.start();
}
public void paint(Graphics g) {
super.paint(g);
this.setBackground(Color.BLACK);
g.setColor(Color.RED);
g.fillOval(xs , ys , 10 , 10);
g.setColor(Color.BLUE);
g.fillOval(xc , yc , 10 , 10);
}
public void run() {
try {
ServerSocket ss = new ServerSocket(8000);
System.out.println("Server Start.....");
b = true;
s = ss.accept();
InputStream is = s.getInputStream();
InputStreamReader isr = new InputStreamReader(is);
BufferedReader br = new BufferedReader(isr);
while(true) {
String xyc = br.readLine();
// System.out.println(xyc);
xc = Integer.parseInt(xyc.split("%")[0]);
yc = Integer.parseInt(xyc.split("%")[1]);
repaint();
}
}
catch(Exception ex) {
// ex.printStackTrace();
try {
b = false;
s = new Socket("127.0.0.1" , 8000);
InputStream is = s.getInputStream();
InputStreamReader isr = new InputStreamReader(is);
BufferedReader br = new BufferedReader(isr);
while(true) {
String xys = br.readLine();
// System.out.println(xys);
xs = Integer.parseInt(xys.split("%")[0]);
ys = Integer.parseInt(xys.split("%")[1]);
repaint();
}
}
catch(Exception ee) {
}
}
}
public void keyTyped(KeyEvent e) {
}
public void keyPressed(KeyEvent e) {
// 判断机制,无论在键盘敲下任何键都会激活该函数,函数运行后先判断true还是false
// 然后才把得到的键盘与下面的对比。而不是你敲下相应的键它才运行
// 例如b是true状态,而我敲下w,那它也会激活函数,然后判断b的值,嗯,是真,那它把w值与下面的四个键判断
// 没有一个相等,则都不运行if语句中相应的代码,继续往下执行,到了System.out.println这句,并不会因为
// 上面四个不相等而不运行,因为它在if(b)语句中而不包括在那四个键值里,所以它也会运行
// 如果b是false状态,那也一样,当我敲下向上,那它检测到b是假那则把向上与下面的四个判断,都不一相等,那
// 四个if中的语句则也都不运行,直接跑到System.out.println
// 如果我们在这个函数里不写任何代码,只写一句system.exit(0)那可以想象我们随便敲任何一键它都会运行。
try {
OutputStream os = s.getOutputStream();
OutputStreamWriter osw = new OutputStreamWriter(os);
PrintWriter pw = new PrintWriter(osw , true);
System.out.println(b);
if(b) {
if(e.getKeyCode() == KeyEvent.VK_UP) {
ys--;
}
if(e.getKeyCode() == KeyEvent.VK_DOWN) {
ys++;
}
if(e.getKeyCode() == KeyEvent.VK_LEFT) {
xs--;
}
if(e.getKeyCode() == KeyEvent.VK_RIGHT) {
xs++;
}
System.out.println(xs + "%" + ys);
pw.println(xs + "%" + ys);
} else {
if(e.getKeyCode() == KeyEvent.VK_W) {
yc--;
}
if(e.getKeyCode() == KeyEvent.VK_S) {
yc++;
}
if(e.getKeyCode() == KeyEvent.VK_A) {
xc--;
}
if(e.getKeyCode() == KeyEvent.VK_D) {
xc++;
}
System.out.println(xc + "%" + yc);
pw.println(xc + "%" + yc);
}
repaint();
}
catch(Exception ex) {
}
}
public void keyReleased(KeyEvent e) {
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -