⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 philosopherarea.java

📁 北大Java 语言程序设计 ppt课件及源码
💻 JAVA
字号:
import java.awt.*;public class PhilosopherArea extends Canvas {    PhilAnimator controller;    Image[] imgs = new Image[3];    Chopstick[] chopsticks = new Chopstick[NUMPHILS];    String[] names = { "Arisduktle" ,		       "Dukrates",		       "Pythagorduke",		       "Duko",		       "Dukimedes" };    static final int NUMPHILS = 5;    private static final double MARGIN = 10.0f;    private double spacing;    private Philosopher[] philosophers = new Philosopher[NUMPHILS];    private boolean[] redraw = new boolean[NUMPHILS];    private boolean running = false;    public PhilosopherArea(PhilAnimator controller) {        super();        this.controller = controller;        MediaTracker mt;        mt = new MediaTracker(this);        imgs[0] = controller.getImage(controller.getCodeBase(),				      "hungryduke.gif");        mt.addImage(imgs[0], 0);        imgs[1] = controller.getImage(controller.getCodeBase(),				      "rightspoonduke.gif");        mt.addImage(imgs[1], 1);        imgs[2] = controller.getImage(controller.getCodeBase(),				      "bothspoonsduke.gif");        mt.addImage(imgs[2], 2);        try {            mt.waitForID(0);            mt.waitForID(1);            mt.waitForID(2);        } catch (java.lang.InterruptedException e) {            System.out.println("Couldn't load one of the images");        }        spacing = imgs[0].getWidth(this) + MARGIN;        createPhilosophersAndChopsticks();    }    public void paint(Graphics g) {        g.setColor(Color.lightGray);        g.fillRect(0, 0, size().width, size().height);        for (int i = 0; i < NUMPHILS; i++) {            redraw[i] = true;        }        update(g);    }    public void update(Graphics g) {        for (int i = 0; i < NUMPHILS; i++) {            if (redraw[i]) {                philosophers[i].paint(g);                redraw[i] = false;            }        }    }    public boolean mouseDown(java.awt.Event evt, int x, int y) {        if (running) {            for (int i = 0; i < NUMPHILS; i++)                philosophers[i].suspend();        } else {            for (int i = 0; i < NUMPHILS; i++)                philosophers[i].resume();        }        running = !running;        return true;    }    public synchronized void repaintPhil(int id) {        redraw[id] = true;        repaint();    }    public void startPhilosophers() {        for (int i = 0; i < NUMPHILS; i++)            philosophers[i].start();        running = true;    }    public void stopPhilosophers() {        for (int i = 0; i < NUMPHILS; i++)            philosophers[i].stopRequested();    }    public void createPhilosophersAndChopsticks() {        double x, y;        double radius = 80.0;        double centerAdj = 85.0;        double radians;/* for a straight line        y = MARGIN;*/        for (int i = 0; i < NUMPHILS; i++)            chopsticks[i] = new Chopstick();        for (int i = 0; i < NUMPHILS; i++) {/* for a straight line            x = i * spacing;*/            radians = i*(2.0 * Math.PI /(double)NUMPHILS);            x = Math.sin(radians) * radius + centerAdj;             y = Math.cos(radians) * radius + centerAdj;             philosophers[i] = new Philosopher(this, x, y, i);            repaintPhil(i);           }    }}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -