LifeGame

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LifeGame相关的知识,希望对你有一定的参考价值。

LifeGame

用例说明&用例图

技术分享图片

用例名: 设置细胞颜色
说明 用户可以根据自己的喜好来设置细胞的颜色
主事件流 在菜单出点击需要的颜色
游戏检测到菜单的返回的颜色
更改细胞的颜色,最后显示出来(刷新)
异常事件
用例名: 设置方格大小
说明: 用户可以根据自己的喜好来设置方格的大小
主事件流 1.在菜单出点击需要的大小
2.游戏检测到菜单的返回大小
3.更改方格的大小,将窗口的大小改变,刷新
异常事件流
用例名: 设置速度
说明: 用户可以根据自己的喜好来设置算法演变的速度
主事件流 在菜单出点击需要的速度
游戏检测到菜单的返回的速度值
更改算法演变的速度(刷新)
异常事件
用例名: 控制游戏进停
说明: 用户运行或者暂停
主事件流 用户按空格或者点击菜单开关
游戏改变运行状态
暂停或者开始游戏(刷新)
异常事件

技术分享图片

lifegame 算法类

设置一个数组,来存放生命;用Initialization()初始化;
刚开始方格内没有生命,所有都设为false

public void Initialization() {//初始化//将rectangle中的值初始化为false
        for(int x = 0;x<HEIGH;x++) {
            for(int y = 0;y<WIDTH;y++) {
                rectangle[x][y] = false;
                neighbors[x][y] = 0;
            }
        }
    }

判断周围的细胞个数

public void getNeighbors() {//看这个世界周围的环境个数
        int x,y;
        for(x= 0;x < HEIGH;x++)
            for(y = 0;y < WIDTH;y++) {
                neighbors[x][y] = 0;
                neighbors[x][y] += Torf(x-1,y-1);
                neighbors[x][y] += Torf(x-1, y);
                neighbors[x][y] += Torf(x-1, y+1);
                neighbors[x][y] += Torf(x, y-1);
                neighbors[x][y] += Torf(x, y+1);
                neighbors[x][y] += Torf(x+1, y-1);
                neighbors[x][y] += Torf(x+1, y);
                neighbors[x][y] += Torf(x+1, y+1);
            }
    }

判断下一个地方是否为墙壁或空,空返回0,非空返回1

public int Torf(int x,int y) {//返回这个值是不是为墙壁或者是空,比较是否为No
        boolean Next = (x<0||y<0||x>=HEIGH||y>=WIDTH||rectangle[x][y]== false);
        return Next?0:1;
    }

通过上一个世界计算下一个世界的细胞(核心算法)

public void nextworld() {
        int x=0,y=0;
            for(x = 0;x<HEIGH;x++)
                for(y = 0;y<WIDTH;y++) {                    
                    if(neighbors[x][y] == 3) {
                        rectangle[x][y] = true;
                    }
                    else if(neighbors[x][y]<2||neighbors[x][y]>3) {
                        rectangle[x][y] = false;
                    }
//                  neighbors[x][y]=0;
                }
    }
    

lifegame 窗口绘制类

添加一个监听器达到 运行的开始和暂停效果

addKeyListener(new KeyAdapter() {
            public void keyPressed(KeyEvent e) {
                if(e.getKeyCode() == 32) {
                    running = !running;
                }
            }
        });

绘制表格

public void paintComponents(Graphics s) {
        try {
            //super.paintComponents(s);
            s.setColor(Color.red);
            s.drawRect(sx, sy, px*w, py*w);//sx sy 起始位置,rw rw目标大小
            System.out.println("px:py"+px+py);
            for(int i =1;i<px;i++) {
                s.drawLine(sx+(i*w), sy , sx+(i*w), sy + (py*w));
            }
            for(int j = 1;j<py;j++) {
                s.drawLine(sx, sy+(j*w), sx+(px*w), sy+(j*w));
            }
        }catch(Exception e ) {
                e.printStackTrace();
            }
    
    }

鼠标点击的时候改变细胞的颜色

private void compare(int cx, int cy) {//鼠标点击的颜色
        // TODO 自动生成的方法存根
        lg.rectangle[cx][cy] = !lg.rectangle[cx][cy];
        if(lg.rectangle[cx][cy] == true)
        setGrid(cx,cy,selectcolor);
        else{
            setGrid(cx,cy,backcolor);
        }
    }

为菜单添加监听器 例:细胞蓝色监听器

JMenuItem blue = new JMenuItem("blue");
        blue.addActionListener(new blueActionListener(this));









以上是关于LifeGame的主要内容,如果未能解决你的问题,请参考以下文章

Haskell 生命游戏在启动时崩溃

CocosCreator生命游戏

Idea配置文件的读取

微信小程序代码片段

VSCode自定义代码片段——CSS选择器

谷歌浏览器调试jsp 引入代码片段,如何调试代码片段中的js