首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java Agario单机

Java Agario单机
EN

Stack Overflow用户
提问于 2015-10-04 20:08:47
回答 1查看 2.2K关注 0票数 2

如何制作java单播放器版本的agario?我想使用面向对象的编程。所以应该有Dot,Blob和Controller对象。(我只想分享我的代码,所以不要投反对票:)

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-10-04 20:08:47

我是这样做的。有随机颜色的圆点,从20个大小开始。线程每隔几毫秒检查一次碰撞。

点:

代码语言:javascript
复制
package agario;

import java.awt.Color;
import java.awt.Component;
import java.awt.Graphics;
import java.util.Random;

public class Dot extends Component{
    public int x;
    public int y;
    public Color c;
    public int size;
    Dot(int x, int y){
        this.x = x;
        this.y = y;
        Random rand = new Random();
        int r = rand.nextInt(255);
        int green = rand.nextInt(255);
        int b = rand.nextInt(255);
        this.c = new Color(r,green,b);
        this.size = rand.nextInt(50);
    }
    public void paint(Graphics g){
        g.setColor(c);
        g.fillOval(this.x, this.y, this.size, this.size);
    }
}

布洛布:

代码语言:javascript
复制
package agario;

import java.awt.Color;
import java.awt.Component;
import java.awt.Graphics;

public class Blob extends Component{
    public int x;
    public int y;
    public int size;
    public Color color;
    public static Blob blob = new Blob(800,100,40,Color.blue);
    Blob(int x, int y, int size, Color c){
        this.x = x;
        this.y = y;
        this.size = size;
        this.color = c;
    }
    public void paint(Graphics g){

        g.setColor(color);
        g.fillOval(x, y, size, size);
    }
}

主计长:

代码语言:javascript
复制
package agario;

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Frame;
import java.awt.Graphics;
import java.awt.Label;
import java.awt.Rectangle;
import java.awt.event.MouseEvent;
import java.awt.event.MouseMotionAdapter;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.Random;

public class Controller {
    ArrayList<Blob> blobs = new ArrayList<Blob>();
    public ArrayList<Dot> dots = new ArrayList<Dot>();
    Blob b = new Blob(50,50,10,Color.CYAN);
    MyFrame mf = new MyFrame("Agario");
    Label l = new Label("10");
    int mouseX = 0;
    int mouseY = 0;
    static int score = 30;
    static int xDis = 0;
    static int yDis = 0;
    public static void main(String[] args){
        new Controller().startGame();
    }
    public void startGame(){
        mf.addMouseMotionListener(new MyMouseMoveListener());
        mf.add(l,BorderLayout.NORTH);
        Refresh rf = new Refresh();
        Thread t = new Thread(rf);
        t.start();

        while(true){
            try{
                Random r = new Random();
                Thread.sleep(r.nextInt(40));

                double dis = Math.sqrt(xDis*xDis + yDis*yDis);
                double easingAmount = 20;
                b.x += xDis / easingAmount;
                b.y += yDis / easingAmount;


                if(r.nextInt(10) == 5){
                    int randX = r.nextInt(600);
                    int randY = r.nextInt(600);
                    Dot d = new Dot(randX,randY);
                    synchronized(dots){
                        dots.add(d);
                    }
                    mf.add(d);
                    mf.repaint();
                }
            }catch(Exception e){

            }
        }
    }
    class Refresh implements Runnable{

        public void run() {
            while(true){
                Random ran = new Random();
                try{
                    Thread.sleep(ran.nextInt(20));
                }catch(Exception e){
                    System.out.println("error");
                }
                Rectangle r = new Rectangle(b.x,b.y,b.size,b.size);
                synchronized(dots){
                    Iterator i = dots.iterator();
                    while(i.hasNext()){
                        Dot d = (Dot) i.next();
                        Rectangle r1 = new Rectangle(d.x,d.y,d.size,d.size);
                        if(r1.intersects(r)){
                            i.remove();
                            b.size += 1;
                            l.setText(String.valueOf(Integer.parseInt(l.getText())+1));
                            score += 1;
                        }
                    }
                }
                mf.repaint();
            }

        }
    }
    class MyMouseMoveListener extends MouseMotionAdapter{
        public void mouseMoved(MouseEvent m){
            mouseX = m.getX();
            mouseY = m.getY();
            xDis = mouseX-b.x;
            yDis = mouseY-b.y;
        }
    }
    class MyFrame extends Frame{
        MyFrame(String s){
            super(s);
            setBounds(0,0,900,900);
            add(b);
            blobs.add(b);
            setVisible(true);
        }
        public void paint(Graphics g){
            for(Blob b : blobs)
                b.paint(g);
            synchronized(dots){
                Iterator i = dots.iterator();
                while(i.hasNext()){
                    Dot d = (Dot) i.next();
                    d.paint(g);
                }
            }
        }
    }
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32937857

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档