你只需要把客户端做成 applet 即可,服务器不需要直接面对客户

解决方案 »

  1.   


    现在问题是我不太会改,我看了下百度的,很多人是继承了java.applet,但我文件继承了Frame,
    java又不能多继承,真的不太会改,最重要是我完全没接触过Applet,能帮我改一下吗
      

  2.   

    package main;
    import game.framework.Animation;
    import java.applet.Applet;
    import java.awt.BorderLayout;
    import java.awt.Color;
    import java.awt.Font;
    import java.awt.Frame;
    import java.awt.Graphics;
    import java.awt.Image;
    import java.awt.event.KeyEvent;
    import java.awt.event.KeyListener;
    import java.lang.Thread.State;
    import java.net.URL;
    import java.util.ArrayList;
    import java.util.Random;
    import javax.swing.JButton;
    import javax.swing.JPanel;//add speedboost
    public class Main extends Applet implements Runnable, KeyListener{
        enum GameState {
            Running, Dead
        }
        static GameState state = GameState.Running;
    private Background bg2, bg1;
    private boolean restart = false;    
    private Player player;
    private SpeedBoost sb1;
    private Image image;
    private Image backsprite1, backsprite2;
    private Image player1, dad1, dad2, dad3;
    private Image player2;
    private Image player3;
    private Image back1;
    private Image back2, endscreen;
    private Image back3, coin, bigcoin;
     private Image back4, sbimg;
     public Image tilebase, platform;
     private Block block1, block2, block3, block4;
    private Coin coin1, coin2, coin3, coin4, coin5;
    private LargeCoin bc1; 
    //use for the base...
    private Dad dad;
    private Graphics second;
    private Animation playwalk, dadwalk;
    private URL base;
    private Platform plat1, plat2, plat3, plat4, plat5, plat6, plat7;
    public static int score = 1, coinsint = 1;
    public static String score2, coins = "1";
    public static int scorespeed = 1;
    public int hs1, hs2, hs3, hs4, hs5, totcoins;
    public String hs1s, hs2s, hs3s, hs4s, hs5s, totcoinss;
    public Ends ends;
        @Override
            public void init() {
            setSize(800, 480);
            setBackground(Color.WHITE);
            setFocusable(true);
            addKeyListener(this);
            Frame frame = (Frame) this.getParent().getParent();
            frame.setTitle("Game v1.2.2");
            try {
                base = getDocumentBase();
            } catch (Exception e) {
                // TODO: handle exception
            }        endscreen = getImage(base, "data/endscreen.png");        coin = getImage(base, "data/coin.png");
      bigcoin = getImage(base, "data/bigcoin.png");      tilebase = getImage(base, "data/tilebase.png");
     platform = getImage(base, "data/blocksmall.png");
           back1 = getImage(base, "data/back1.png");
            back2 = getImage(base, "data/back2.png");
            back3 = getImage(base, "data/back3.png");
            back4 = getImage(base, "data/back4.png");`enter code here`        sbimg = getImage(base, "data/speedboost.png");
            player1 = getImage(base, "data/player1.png");
            player2 = getImage(base, "data/player2.png");
            player3 = getImage(base, "data/player3.png");        dad1 = getImage(base, "data/dad1.png");
            dad2 = getImage(base, "data/dad2.png");
            dad3 = getImage(base, "data/dad3.png");        backsprite1 = back1;
            backsprite2 = back2;        playwalk = new Animation();
          playwalk.addFrame(player1, 80);
          playwalk.addFrame(player2, 80);
          playwalk.addFrame(player3, 80);dadwalk = new Animation();
    dadwalk.addFrame(dad1, 80);
    dadwalk.addFrame(dad2, 80);
    dadwalk.addFrame(dad3, 80);
        }
    public void animate() {
        playwalk.update(15); 
    dadwalk.update(15);
        }
    @Override
            public void start() {
        state = state.Running;
              ends = new Ends(-3, 0);
                     //create objects at positions
                @Override
                    public void stop() {
                    // TODO Auto-generated method stub
                }            @Override
                public void destroy() {
                    // TODO Auto-generated method stub
                }            @Override
                public void run() {
                    if (state == GameState.Running) {
                    while (true) {
                        //selecting sprites for the background                    //updates go here
    if(bg1.getBgX() < -2100){
        bg1.setBgX(2100);
    }
     if(bg2.getBgX() < -2100){
        bg2.setBgX(2100);
    } //backgrounds arent working
     if(bg1.getBgX() > 2000){
                               Random rand = new Random();                            int  nel = rand.nextInt(4) + 1;
                                 if(nel == 1){
                                    backsprite1 = back1;
                                 }if(nel == 2){
                                     backsprite1 = back2;
                                 }if(nel == 3){
                                     backsprite1 = back3;
                                 }if(nel == 4){
                                    backsprite1 = back4;
                                 }
                        }                    player.update();                    dad.update();                    bg1.update();
                       bg2.update();                   coin1.update();
                       coin2.update();
                       coin3.update();
                       coin4.update();
                       coin5.update();
                       plat1.update();
                        plat2.update();
                        plat3.update();
                        plat4.update();
                        plat5.update();
                        plat6.update();
                        plat7.update();                    if(Block.lives < 0){
                            state = GameState.Dead; }                    animate();
                        repaint();
                        try {
                            Thread.sleep(17);
                        } catch (InterruptedException e) {
                            e.printStackTrace();
                        }
                    }
                }            }
                @Override
                public void update(Graphics g) {
                    if (image == null) {
                        image = createImage(this.getWidth(), this.getHeight());
                        second = image.getGraphics();
                    }
       
                    second.setColor(getBackground());
                    second.fillRect(0, 0, getWidth(), getHeight());
                    second.setColor(getForeground());
                    paint(second);                g.drawImage(image, 0, 0, this);
                }
                @Override
                public void paint(Graphics g) {
                    if (state == GameState.Running) {
                    //main graphics identifyers here
                // first are drawn below last
                     //need to make the platform lower down, see class for explanation                    g.drawImage(backsprite1, bg1.getBgX(), bg1.getBgY(), this);
                        g.drawImage(backsprite2, bg2.getBgX(), bg2.getBgY(), this);
                     g.drawImage(playwalk.getImage(), player.getCenterX(), player.getCenterY(), this);                 g.drawImage(platform, plat1.getCenterX(), plat1.getCenterY(), this);
                        g.drawImage(platform, plat2.getCenterX(), plat2.getCenterY(), this);
                        g.drawImage(platform, plat3.getCenterX(), plat3.getCenterY(), this);
                        g.drawImage(platform, plat4.getCenterX(), plat4.getCenterY(), this);
                        g.drawImage(platform, plat5.getCenterX(), plat5.getCenterY(), this);
                        g.drawImage(platform, plat6.getCenterX(), plat6.getCenterY(), this);
                        g.drawImage(platform, plat7.getCenterX(), plat7.getCenterY(), this);                    g.drawImage(sbimg, sb1.getCenterX(), sb1.getCenterY(), this);                    g.drawImage(bigcoin, bc1.centerX, bc1.centerY, this);                    g.drawImage(dadwalk.getImage(), dad.centerX, dad.centerY, this);           g.drawImage(tilebase, block1.getCenterX(), block1.getCenterY(), this);
                g.drawImage(tilebase, block2.getCenterX(), block2.getCenterY(), this);
                g.drawImage(tilebase, block3.getCenterX(), block3.getCenterY(), this);
                g.drawImage(tilebase, block4.getCenterX(), block4.getCenterY(), this);            g.drawImage(coin, coin1.getCenterX(), coin1.getCenterY(), this);
                g.drawImage(coin, coin2.getCenterX(), coin2.getCenterY(), this);
                g.drawImage(coin, coin3.getCenterX(), coin3.getCenterY(), this);
                g.drawImage(coin, coin4.getCenterX(), coin4.getCenterY(), this);
                g.drawImage(coin, coin5.getCenterX(), coin5.getCenterY(), this);            g.setColor(Color.MAGENTA);
                g.drawString(score2, 700, 25);
                Font font = new Font("Serif", Font.PLAIN, 36);
                g.setFont(font);            g.drawString(coins, 20, 25);
                }else if (state == GameState.Dead) {
                    totcoins += coinsint;
                    coinsint = 0;
                    hs1s = String.valueOf(hs1);
                    hs2s = String.valueOf(hs2);
                    hs3s = String.valueOf(hs3);
                    hs4s = String.valueOf(hs4);
                    hs5s = String.valueOf(hs5);
                    totcoinss = String.valueOf(totcoins);
                    if(score > hs1){
                        hs1 = score;
                    }else if(score > hs2){
                        hs2 = score;
                    }else if(score > hs3){
                            hs3 = score;
                        }else if(score > hs4){
                            hs4 = score;
                        }else if(score > hs5){
                            hs5 = score;
                        }
                    scorespeed = 0;
                  //format this shit up in here
                    //when restart is init, then this will be tested
                    g.setColor(Color.BLACK);
                    g.fillRect(0, 0, 800, 480);
                g.setColor(Color.WHITE);
                g.drawString(hs1s, 230, 220);
                g.drawString(hs2s, 230, 250);
                g.drawString(hs3s, 230, 280);
                g.drawString(hs4s, 230, 310);
                g.drawString(hs5s, 230, 340);
               g.drawString(totcoinss, 700, 100);
               g.drawImage(endscreen, ends.cornX, ends.cornY, this);                }            }
        //fix the android stuff
    }参照这个试试
      

  3.   

    Quote: 引用 8 楼 defonds 的回复:

    但是我的class继承了frame,java不能多继承,那applet怎么继承,还是不懂
      

  4.   

    版主,能改出来么,我自己今天弄了一早上还是不行
    对不起版主,有个小问题,我想把服务端也做一个窗口出来,就加了了点东西,但为什么窗口打开瞬间又关闭了,一执行了start()就会这样
    import java.awt.BorderLayout;
    import java.awt.Frame;
    import java.awt.TextArea;
    import java.io.*;
    import java.net.*;
    import java.util.*;public class Server extends Frame{

    boolean started = false;
    ServerSocket ss = null;
    TextArea taContent = new TextArea();

    List<Client> clients = new ArrayList<Client>();

    public static void main(String[] args) {
    new Server().launchFrame();
    }

    public void launchFrame() {
    setLocation(400, 300);
    this.setSize(300, 300);
    add(taContent, BorderLayout.NORTH);

    setVisible(true);
    start();
    }


    public void start() {
    try {
    ss = new ServerSocket(8888);
    started = true;
    } catch (BindException e) {
    //System.out.println("1");
    //System.out.println("2");
    System.exit(0);
    } catch (IOException e) {
    e.printStackTrace();
    }

    try {

    while(started) {
    Socket s = ss.accept();
    Client c = new Client(s);
    System.out.println("a client connected!");
    new Thread(c).start();
    clients.add(c);
    //dis.close();
    }
    } catch (IOException e) {
    e.printStackTrace();
    } finally {
    try {
    ss.close();
    } catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }
    }
    }

    class Client implements Runnable {
    private Socket s;
    private DataInputStream dis = null;
    private DataOutputStream dos = null;
    private boolean bConnected = false;

    public Client(Socket s) {
    this.s = s;
    try {
    dis = new DataInputStream(s.getInputStream());
    dos = new DataOutputStream(s.getOutputStream());
    bConnected = true;
    } catch (IOException e) {
    e.printStackTrace();
    }
    }

    public void send(String str) {
    try {
    dos.writeUTF(str);
    } catch (IOException e) {
    clients.remove(this);
    //System.out.println("3");
    //e.printStackTrace();
    }
    }

    public void run() {
    try {
    while(bConnected) {
    String str = dis.readUTF();
    System.out.println(str);
    for(int i=0; i<clients.size(); i++) {
    Client c = clients.get(i);
    c.send(str);
    //System.out.println(" a string send !");
    }
    /*
    for(Iterator<Client> it = clients.iterator(); it.hasNext(); ) {
    Client c = it.next();
    c.send(str);
    }
    */
    /*
    Iterator<Client> it = clients.iterator();
    while(it.hasNext()) {
    Client c = it.next();
    c.send(str);
    }
    */
    }
    } catch (EOFException e) {
    System.out.println("Client closed!");
    } catch (IOException e) {
    e.printStackTrace();
    } finally {
    try {
    if(dis != null) dis.close();
    if(dos != null) dos.close();
    if(s != null)  {
    s.close();
    //s = null;
    }

    } catch (IOException e1) {
    e1.printStackTrace();
    }


    }
    }

    }
    }