国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

混沌,細胞自動機與生命游戲圖形繪制

2019-11-15 01:09:45
字體:
來源:轉載
供稿:網友
混沌,細胞自動機與生命游戲圖形繪制混沌,細胞自動機與生命游戲圖形繪制1.繪制生命方格

方格的是一個矩形,需要繼承Rectangle2D類,使用它的靜態內部類Float的原因是它比靜態內部類Double精度小。

人的眼睛或者是計算機的渲染圖形是不會顯示那些計算中很低的位的,所以采用計算Float更快。

package yumu.chaos.lifegame.gui;import java.awt.geom.Rectangle2D;public class LifeRect extends Rectangle2D.Float {    public LifeRect(float x, float y, float w, float h) {        super(x, y, w, h);    }}

2.圖形顯示的框架

在構造函數中通過Toolkit獲取了屏幕的寬與高,把窗體顯示在屏幕的中央。

設置窗體的標題和圖標,這里可能是圖片本身的問題,設置了的圖標并沒有顯示在窗體上。

設置窗口關閉的時候退出應用,設置窗口可見。

package yumu.chaos.lifegame.gui;import java.awt.Component;import java.awt.Dimension;import java.awt.Image;import java.awt.Toolkit;import javax.swing.ImageIcon;import javax.swing.JFrame;public class GameFrame extends JFrame {    public GameFrame(int width, int height) {                Toolkit toolkit = Toolkit.getDefaultToolkit();        Dimension dimension = toolkit.getScreenSize();        int screenWidth = dimension.width;        int screenHeight = dimension.height;                setTitle("Conway Cellular Automata");                Image image = new ImageIcon("logo-icon.jpg").getImage();        setIconImage(image);                setLocation(screenWidth/2 - width/2, screenHeight/2 - height/2);        setSize(width + 30, height + 50);        setResizable(false);                setDefaultCloSEOperation(JFrame.EXIT_ON_CLOSE);        setVisible(true);    }        @Override    public void remove(Component comp) {        if(comp != null)            super.remove(comp);    }}

3.在面板上繪制圖形

構造函數中設置了需要繪制的數據,這個數據是從世界的存活細胞圖方法中獲得的。

確定方格的單位寬度和單位高度,存活顯示為黑色,死亡顯示為白色,周圍用淺灰色繪制方格的邊框。

畫筆和畫紙的行為被放置在Graphics2D的對象g2中,這里設置畫筆的顏色設置的是g2的內容。

package yumu.chaos.lifegame.gui;import java.awt.Color;import java.awt.Dimension;import java.awt.Graphics;import java.awt.Graphics2D;import java.awt.Paint;import javax.swing.JPanel;public class DrawPanel extends JPanel{        PRivate boolean[][] arr;    private int width;    private int height;        public DrawPanel(boolean[][] arr, int width, int height){        this.arr = arr;        this.width = width;        this.height = height;    }        @Override    public void paint(Graphics g) {        Graphics2D g2 = (Graphics2D) g;                int lenX = arr.length;        int lenY = arr[0].length;        float unitX = (float)width / lenX;        float unitY = (float)height / lenY;                for (int x = 0; x < lenX; ++x) {            for (int y = 0; y < lenY; ++y) {                Paint paint = arr[x][y] ? Color.BLACK : Color.WHITE;                LifeRect rect = new LifeRect(unitX * x, unitY * y, unitX, unitY);                g2.setPaint(paint);                g2.fill(rect);                g2.setPaint(Color.LIGHT_GRAY);                g2.draw(rect);            }        }    }        @Override    public Dimension getPreferredSize() {        return new Dimension(width, height);    }}

4.把繪制好圖形的面板放置在框架中

畫者默認有自己的一個畫板框架,調用繪制方法時,會把當前的畫板卸下來,并安置好新的畫板。

新的畫板已經預設好了圖像,只是看起來還是一張白紙,最后畫板框架使畫板中的圖像顯示出來。

下次的繪制中會重復,卸下白紙,粘上新白紙,顯示圖像的過程。

package yumu.chaos.lifegame.gui;public class Painter {    private static final int DEFAULT_WIDTH = 500;    private static final int DEFAULT_HEIGHT = 500;        private GameFrame frame;    private DrawPanel panel;        public Painter() {        frame = new GameFrame(DEFAULT_WIDTH, DEFAULT_HEIGHT);    }        public void paint(boolean[][] arr){        frame.remove(panel);        panel = new DrawPanel(arr, DEFAULT_WIDTH, DEFAULT_HEIGHT);        frame.add(panel);        frame.paintAll(panel.getGraphics());    }    }

5.夏娃刻下了愛,可世界卻不是培養愛的容器
    static int[][] LOVE = {        {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},        {0,1,1,1,0,0,0,1,0,0,0,0,1,1,0,0,1,0,0,0,1,0,1,1,1,0,0,0,1,0,0,1,0},        {0,0,1,0,0,0,0,1,0,0,0,1,0,0,1,0,1,0,0,0,1,0,1,0,0,0,0,0,1,0,0,1,0},        {0,0,1,0,0,0,0,1,0,0,0,1,0,0,1,0,0,1,0,1,0,0,1,1,1,0,0,0,1,0,0,1,0},        {0,0,1,0,0,0,0,1,0,0,0,1,0,0,1,0,0,1,0,1,0,0,1,0,0,0,0,0,1,0,0,1,0},        {0,1,1,1,0,0,0,1,1,1,0,0,1,1,0,0,0,0,1,0,0,0,1,1,1,0,0,0,0,1,1,0,0},        {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}    };

當種子為LOVE時,運行:deus.createWorld(transpose(LOVE));

參考鏈接:

[混沌,awt和swing繪制平面圖形簡介](http://www.survivalescaperooms.com/kodoyang/p/Chaos_Graphics2D_Awt_Swing.html)

[混沌,細胞自動機與生命游戲](http://www.survivalescaperooms.com/kodoyang/p/Chaos_ConwayCellularAutomata_GameOfLife.html)

本篇是上一篇日志『混沌,細胞自動機與生命游戲』的圖形繪制部分。

請點擊正下方的『關注我』關注我!點擊右下方的推薦圖標推薦這片日志!

本文地址:http://www.survivalescaperooms.com/kodoyang/p/Chaos_ConwayCellularAutomata_GameOfLife_GraphDrawing.html

雨木陽子

2015年8月17日


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 台湾省| 金溪县| 隆尧县| 大荔县| 莎车县| 崇义县| 廊坊市| 东阿县| 孝感市| 富宁县| 安康市| 临洮县| 平利县| 苍溪县| 明光市| 上犹县| 麦盖提县| 萝北县| 镇宁| 汝阳县| 都兰县| 丹巴县| 禹州市| 永丰县| 茂名市| 亚东县| 河北省| 大关县| 台南市| 兴安盟| 唐山市| 航空| 尼勒克县| 西和县| 湖州市| 朝阳县| 柘城县| 新河县| 乌拉特中旗| 武鸣县| 永寿县|