📄 贪吃蛇.txt
字号:
public SingleFrame singleframe;
public MyActionListener(SingleFrame sf) {
this.singleframe = sf;
}
public void actionPerformed(ActionEvent event) {
if (event.getSource() == newGameMenuItem) {
singleframe.multibabypanel.user1.newGame();
}
else
if (event.getSource() == pauseGameMenuItem) {
singleframe.multibabypanel.user1.runFlag = !singleframe.multibabypanel.user1.runFlag;
}
else
if (event.getSource() == exitMenuItem) {
singleframe.dispose();
}
}
}
}
//////////////////////////////////////////////////////////////
class MultiFrame extends JFrame {
MultiBabyPanel multibabypanel;
public static final int WIDTH = 700;
public static final int HEIGHT = 400;
public JMenuBar menubar;
public JMenu fileMenu;
public JMenuItem newGameMenuItem;
public JMenuItem exitMenuItem;
public JMenuItem pauseGameMenuItem;
public MultiFrame() {
//Container c = this.getContentPane();
multibabypanel = new MultiBabyPanel(2);
//c.add(multibabypanel);
//babyframe.setVisible(false);
//this.setVisible(true);
this.setSize(700,400);
this.setTitle("贪食蛇=======本机双打");
Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
setLocation((int)(screenSize.getWidth()/2 - WIDTH/2),(int)(screenSize.getHeight()/2 - HEIGHT/2));
this.setResizable(false);
menubar = new JMenuBar();
fileMenu = new JMenu("File");
fileMenu.setMnemonic(′F′);
newGameMenuItem = new JMenuItem("New",′N′);
newGameMenuItem.addActionListener(new MyActionListener(this));
pauseGameMenuItem = new JMenuItem("Pause",′P′);
pauseGameMenuItem.addActionListener(new MyActionListener(this));
exitMenuItem = new JMenuItem("Exit",′X′);
exitMenuItem.addActionListener(new MyActionListener(this));
fileMenu.add(newGameMenuItem);
fileMenu.add(pauseGameMenuItem);
fileMenu.add(exitMenuItem);
menubar.add(fileMenu);
setJMenuBar(menubar);
Container c = this.getContentPane();
c.add(multibabypanel);
}
private class MyActionListener implements ActionListener {
public MultiFrame multiframe;
public MyActionListener(MultiFrame mf) {
this.multiframe = mf;
}
public void actionPerformed(ActionEvent event) {
if (event.getSource() == newGameMenuItem) {
multiframe.multibabypanel.user1.newGame();
multiframe.multibabypanel.user2.newGame();
}
else
if (event.getSource() == pauseGameMenuItem) {
multiframe.multibabypanel.user1.runFlag = !multiframe.multibabypanel.user1.runFlag;
multiframe.multibabypanel.user2.runFlag = !multiframe.multibabypanel.user2.runFlag;
}
else
if (event.getSource() == exitMenuItem) {
multiframe.dispose();
}
}
}
}
class MultiBabyPanel extends JPanel implements Runnable{
User user1,user2;
public Thread thread;
public int userNum;
public Random random;
public int color_choose = 0;
public MultiBabyPanel(int userNum) {
random = new Random(100);
this.userNum = userNum;
user1 = new User(KeyEvent.VK_UP,KeyEvent.VK_DOWN,KeyEvent.VK_LEFT,KeyEvent.VK_RIGHT,KeyEvent.VK_SPACE,KeyEvent.VK_R,280,280,0,0);
myKeyListenerUser1 keyListener_user1 = new myKeyListenerUser1();
addKeyListener(keyListener_user1);
if (userNum == 2) {
System.out.println("User2 inited....");
user2 = new User(KeyEvent.VK_W,KeyEvent.VK_S,KeyEvent.VK_A,KeyEvent.VK_D,KeyEvent.VK_1,KeyEvent.VK_2,640,280,360,0);
myKeyListenerUser2 keyListener_user2 = new myKeyListenerUser2();
addKeyListener(keyListener_user2);
}
thread = new Thread(this);
thread.start();
}
public boolean isFocusTraversable() {
return true;
}
public void run() {
while (true) {
user1.goOne();
if (userNum == 2) user2.goOne();
try {
thread.sleep(5);
}catch (InterruptedException e) { }
repaint();
}
}
private class myKeyListenerUser1 implements KeyListener {
public void myKeyListenr() {}
public void keyPressed(KeyEvent ke) {
user1.doMessage(ke.getKeyCode());
}
public void keyReleased(KeyEvent ke) {}
public void keyTyped (KeyEvent ke) {}
}
///////////////keyListener for user2////////////////////////////////
private class myKeyListenerUser2 implements KeyListener {
public void myKeyListenr() {}
public void keyPressed(KeyEvent ke) {
user2.doMessage(ke.getKeyCode());
}
public void keyReleased(KeyEvent ke) {}
public void keyTyped (KeyEvent ke) {}
}
public void paintComponent(Graphics g)
{
super.paintComponent(g);
g.setColor(Color.black);
if (userNum == 2) {
g.fill3DRect(user2.panelx+10,user2.panely+10,300,300,false);
g.setColor(Color.white);
g.fill3DRect(user2.panelx+20,user2.panely+20,280,280,true);
g.setColor(Color.BLACK);
g.drawRect(user2.panelx+10,user2.panely+320,70,19);
g.fillRect(user2.panelx+12,user2.panely+322,67,16);
g.setColor(Color.WHITE);
g.drawString("Score : " + (user2.babyCount - 6),user2.panelx+17,user2.panely+334);
g.setColor(Color.BLACK);
g.drawRect(user2.panelx+241,user2.panely+320,70,19);
g.fillRect(user2.panelx+243,user2.panely+322,67,16);
g.setColor(Color.WHITE);
g.drawString("Level : " + (10-user2.sleepTime),user2.panelx+252,user2.panely+334);
}
g.setColor(Color.black);
g.fill3DRect(user1.panelx+10,user1.panely+10,300,300,false);
g.setColor(Color.white);
g.fill3DRect(user1.panelx+20,user1.panely+20,280,280,true);
g.setColor(Color.BLACK);
g.drawRect(user1.panelx+10,user1.panely+320,70,19);
g.fillRect(user1.panelx+12,user1.panely+322,67,16);
g.setColor(Color.WHITE);
g.drawString("Score : " + (user1.babyCount - 6),user1.panelx+17,user1.panely+334);
g.setColor(Color.BLACK);
g.drawRect(user1.panelx+241,user1.panely+320,70,19);
g.fillRect(user1.panelx+243,user1.panely+322,67,16);
g.setColor(Color.WHITE);
g.drawString("Level : " + (10-user1.sleepTime),user1.panelx+252,user1.panely+334);
///////////////////////////if user2 exist then draw user2//////////////////
if (userNum == 2) {
//显示图像
for (int i = 0; i < user2.Baby.size(); i++) {
//得到图像位置
int x = (int)((Point)user2.Baby.get(i)).getX();
int y = (int)((Point)user2.Baby.get(i)).getY();
//g.drawRect(x+1,y +1,18,18);
g.setColor((Color)user2.BabyColor.get(i));
g.fill3DRect(x+1,y+1,18,18,true);
}
g.setColor(Color.MAGENTA);
g.fill3DRect(user2.posx+1,user2.posy+1,18,18,true);
g.setColor(Color.red);
if ((user2.runFlag == false)&(user2.gameFlag == true)) g.drawString("PAUSE...",user2.panelx+130,user2.panely+130);
if (user2.gameFlag == false) g.drawString("Game Over!",user2.panelx+130,user2.panely+130);
}
//////////////////////draw user1/////////////////////////////////
//显示图像
for (int i = 0; i < user1.Baby.size(); i++) {
//得到图像位置
int x = (int)((Point)user1.Baby.get(i)).getX();
int y = (int)((Point)user1.Baby.get(i)).getY();
//g.drawRect(x+1,y +1,18,18);
g.setColor((Color)user1.BabyColor.get(i));
g.fill3DRect(x+1,y+1,18,18,true);
}
g.setColor(Color.MAGENTA);
g.fill3DRect(user1.posx+1,user1.posy+1,18,18,true);
g.setColor(Color.black);
if ((user1.runFlag == false)&(user1.gameFlag == true)) g.drawString("PAUSE...",user1.panelx+130,user1.panely+130);
if (user1.gameFlag == false) g.drawString("Game Over!",user1.panelx+130,user1.panely+130);
}
}
//////////////////////////////////////////////////////////////
class NetMultiBabyPanel extends JPanel implements Runnable{
public User user1,user2;
public Thread thread;
boolean is_serverFlag;
public BufferedReader in;
public PrintWriter out;
public String message_temp;
public int message;
public ServerSocket serversocket;
public Socket socket,socket_on_server;
public InetAddress a;
public int PORT=9999;
public String IP;
public boolean isConected;
public NetMultiBabyPanel(String ip,int port) {
this.is_serverFlag = false;
isConected = false;
this.IP = ip;
this.PORT = port;
user1 = new User(KeyEvent.VK_UP,KeyEvent.VK_DOWN,KeyEvent.VK_LEFT,KeyEvent.VK_RIGHT,KeyEvent.VK_SPACE,KeyEvent.VK_R,280,280,0,0);
user2 = new User(KeyEvent.VK_W,KeyEvent.VK_S,KeyEvent.VK_A,KeyEvent.VK_D,KeyEvent.VK_1,KeyEvent.VK_2,640,280,360,0);
myKeyListenerUser1 keyListenerUser1 = new myKeyListenerUser1();
myKeyListenerUser2 keyListenerUser2 = new myKeyListenerUser2();
try {
InetAddress a = InetAddress.getByName(IP);
socket = new Socket(a,PORT);
in =
new BufferedReader(new InputStreamReader(socket.getInputStream()));
out =
new PrintWriter(new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())));
}catch(IOException e) {}
addKeyListener(keyListenerUser2);
System.out.println("keyListenerUser2");
System.out.println("addListener");
thread = new Thread(this);
}
///////////////////////////////////////////////////////////////////////////////
public NetMultiBabyPanel(int port) {
this.PORT = port;
this.is_serverFlag = true;
isConected = false;
user1 = new User(KeyEvent.VK_UP,KeyEvent.VK_DOWN,KeyEvent.VK_LEFT,KeyEvent.VK_RIGHT,KeyEvent.VK_SPACE,KeyEvent.VK_R,280,280,0,0);
user2 = new User(KeyEvent.VK_W,KeyEvent.VK_S,KeyEvent.VK_A,KeyEvent.VK_D,KeyEvent.VK_1,KeyEvent.VK_2,640,280,360,0);
myKeyListenerUser1 keyListenerUser1 = new myKeyListenerUser1();
myKeyListenerUser2 keyListenerUser2 = new myKeyListenerUser2();
try {
serversocket = new ServerSocket(PORT);
}catch (IOException e) {}
System.out.println("Server inited!");
new MyThread().start();
addKeyListener(keyListenerUser1);
System.out.println("keyListenerUser1");
thread = new Thread(this);
}
class MyThread extends Thread {
MyThread() {
}
public void run() {
try {
socket_on_server = serversocket.accept();
in = new BufferedReader(
new InputStreamReader(
socket_on_server.getInputStream()));
System.out.println("In inited");
out = new PrintWriter(
new BufferedWriter(
new OutputStreamWriter(
socket_on_server.getOutputStream())));
isConected = true;
System.out.println("Out inited");
}catch(IOException e) {}
}
}
public boolean isFocusTraversable() {
return true;
}
public void run() {
while (true) {
if (is_serverFlag) {
if (isConected) {
try {
user1.goOne();
out.println("Go");
out.flush();
message_temp = in.readLine();
if (message_temp.startsWith("Go")) {
user2.goOne();
}
else {
message = Integer.parseInt(message_temp);
user2.doMessage(message);
}
}catch (IOException e) {}
}
}
else {
try {
out.println("Go");
out.flush();
user2.goOne();
//System.out.println("Listening....");
message_temp =in.readLine();
if (message_temp.startsWith("Go")) {
user1.goOne();
}
else
{
message = Integer.parseInt(message_temp);
user1.doMessage(message);
}
}catch (IOException e) {}
}
repaint();
try {
thread.sleep(5);
}catch(InterruptedException e ) {
}
}
}
//////////////////////keyListener for user1////////////////////////////////
private class myKeyListenerUser1 implements KeyListener {
public void myKeyListenrUser1() {}
public void keyPressed(KeyEvent ke) {
user1.doMessage(ke.getKeyCode());
out.println(ke.getKeyCode());
out.flush();
}
public void keyReleased(KeyEvent ke) {}
public void keyTyped (KeyEvent ke) {}
}
//////////////////////keyListener for user2////////////////////////////////
private class myKeyListenerUser2 implements KeyListener {
public void myKeyListenrUser2() {}
public void keyPressed(KeyEvent ke) {
user2.doMessage(ke.getKeyCode());
out.println(ke.getKeyCode());
out.flush();
}
public void keyReleased(KeyEvent ke) {}
public void keyTyped (KeyEvent ke) {}
}
//////////////////////override the paint method////////////////////////////
public void paintComponent(Graphics g)
{
super.paintComponent(g);
//System.out.println("paintComponent.....");
g.setColor(Color.black);
g.fill3DRect(user2.panelx+10,user2.panely+10,300,300,false);
g.setColor(Color.white);
g.fill3DRect(user2.panelx+20,user2.panely+20,280,280,true);
g.setColor(Color.BLACK);
g.drawRect(user2.panelx+10,user2.panely+320,70,19);
g.fillRect(user2.panelx+12,user2.panely+322,67,16);
g.setColor(Color.WHITE);
g.drawString("Score : " + (user2.babyCount - 6),user2.panelx+17,user2.panely+334);
g.setColor(Color.BLACK);
g.drawRect(user2.panelx+241,user2.panely+320,70,19);
g.fillRect(user2.panelx+243,user2.panely+322,67,16);
g.setColor(Color.WHITE);
g.drawString("Level : " + (10-user2.sleepTime),user2.panelx+252,user2.panely+334);
g.setColor(Color.black);
g.fillRect(user1.panelx+10,user1.panely+10,300,300);
g.setColor(Color.white);
g.fillRect(user1.panelx+20,user1.panely+20,280,280);
g.setColor(Color.BLACK);
g.drawRect(user1.panelx+10,user1.panely+320,70,19);
g.fillRect(user1.panelx+12,user1.panely+322,67,16);
g.setColor(Color.WHITE);
g.drawString("Score : " + (user1.babyCount - 6),user1.panelx+17,user1.panely+334);
g.setColor(Color.BLACK);
g.drawRect(user1.panelx+241,user1.panely+320,70,19);
g.fillRect(user1.panelx+243,user1.panely+322,67,16);
g.setColor(Color.WHITE);
g.drawString("Level : " + (10-user1.sleepTime),user1.panelx+252,user1.panely+334);
g.setColor(Color.blue);
//显示图像
for (int i = 0; i < user2.Baby.size(); i++) {
//得到图像位置
int x = (int)((Point)user2.Baby.get(i)).getX();
int y = (int)((Point)user2.Baby.get(i)).getY();
//g.drawRect(x+1,y +1,18,18);
g.setColor((Color)user2.BabyColor.get(i));
g.fill3DRect(x+1,y+1,18,18,true);
}
g.setColor(Color.MAGENTA);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -