模拟条件超简单的细胞繁衍游戏之一

就像题目说的,这是一个模拟细胞繁衍的游戏,规则是:

  1. 当细胞周围<2 || >3 个细胞时,那个细胞就挂掉(太挤太窄都不行啊,怪我咯);

  2. 当一个死掉的细胞周围恰好有 3 个细胞时(换成2太拥挤,4的话就没得玩了,没几轮就不动了),它就满血复活啦~~

其实这个游戏主要还是想说明这个道理:表现和数据分离,这尼玛到底是怎么来玩的。

就这么简单的规则。来看看怎么样实现;

 先来撸一撸思路啊(其实我是想打捋一捋的~·~),是这样:

  1. 既然是模拟细胞,不用说,必然有个Cell Class;

  2. 既然是表现和数据分离,那我们总的有个表现类和数据类啊。

171121_iazF_2559261.jpg

好丑的图,不忍直视....

下面就开撸吧:

先把一个个类先建好,不要求弄好,先搭个架子

来个最简单的Cell类:

public class Cell {
     private boolean isAlive = false;
     public boolean isAlive() {
          return this.isAlive;
     }
     public void die() {
          this.isAlive = false;
     }
     public void reborn() {
          this.isAlive  = true;
     }
     public void draw(Graphics g, int row, int col, int size){
          g.drawRect(row, col, size, size);
          if(isAlive){
          g.fillRect(row, col, size, size);
          }
     }
}

 再来个复杂点的:

package field;
import java.util.ArrayList;
import java.util.List;
import cell.Cell;

public class Field {
     private int height;
     private int width;
     private Cell[][] cells;
     
    public Field(int height, int width) {
          this.height = height;
          this.width = width;
          cells = new Cell[height][width];
     }

     public int getHeight() {
          return this.height;
     }
     public int getWidth() {
          return this.width;
     }
     public Cell place(int row, int col, Cell cell) {
          Cell ret = cells[row][col];
          cells[row][col] = cell;
          return ret;
     }
     public Cell getCell(int row , int col) {
          return cells[row][col];
     }
    public Cell[] getNeighbour(int row , int col) {   
          List<Cell> list = new ArrayList<Cell>();
          for(int i = -1; i < 2; i ++) {
               for(int j = -1; j < 2; j ++) {
                int r = row + i;
                int c = col + j;
                if(r > -1 && c > -1 && r < this.height && c < this.width 
               && !( r == row && c == col)) {
                list.add(cells[r][c]);
                }
               }
          }
      return list.toArray(new Cell[list.size()]);
     }
}

 

转载于:https://my.oschina.net/u/2559261/blog/551951

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
细胞生命游戏是一种模拟细胞繁衍与死亡的游戏,使用C语言可以很好地实现该游戏。下面是一个简短的示例代码: ```c #include <stdio.h> #define SIZE 10 #define ALIVE 'O' #define DEAD ' ' // 检查指定位置的细胞状态 int checkCellStatus(int x, int y, char grid[][SIZE]) { if (x < 0 || x >= SIZE || y < 0 || y >= SIZE) { return 0; } return grid[x][y] == ALIVE ? 1 : 0; } // 计算周围活细胞数 int countAliveNeighbors(int x, int y, char grid[][SIZE]) { int count = 0; for (int i = -1; i <= 1; i++) { for (int j = -1; j <= 1; j++) { if (i == 0 && j == 0) { continue; } count += checkCellStatus(x + i, y + j, grid); } } return count; } // 更新细胞状态 void updateCellStatus(char grid[][SIZE]) { char newGrid[SIZE][SIZE]; for (int i = 0; i < SIZE; i++) { for (int j = 0; j < SIZE; j++) { int aliveNeighbors = countAliveNeighbors(i, j, grid); if (grid[i][j] == ALIVE) { if (aliveNeighbors < 2 || aliveNeighbors > 3) { // 周围活细胞数小于2或大于3,细胞死亡 newGrid[i][j] = DEAD; } else { newGrid[i][j] = ALIVE; } } else { if (aliveNeighbors == 3) { // 周围活细胞数为3,细胞复活 newGrid[i][j] = ALIVE; } else { newGrid[i][j] = DEAD; } } } } for (int i = 0; i < SIZE; i++) { for (int j = 0; j < SIZE; j++) { grid[i][j] = newGrid[i][j]; } } } // 输出当前细胞状态 void printGrid(char grid[][SIZE]) { for (int i = 0; i < SIZE; i++) { for (int j = 0; j < SIZE; j++) { printf("%c ", grid[i][j]); } printf("\n"); } printf("\n"); } int main() { char grid[SIZE][SIZE] = { { DEAD, DEAD, DEAD, DEAD, DEAD, DEAD, DEAD, DEAD, DEAD, DEAD }, { DEAD, DEAD, DEAD, DEAD, ALIVE, DEAD, DEAD, DEAD, DEAD, DEAD }, { DEAD, DEAD, DEAD, ALIVE, ALIVE, DEAD, DEAD, DEAD, DEAD, DEAD }, { DEAD, DEAD, DEAD, DEAD, DEAD, ALIVE, DEAD, DEAD, DEAD, DEAD }, { DEAD, DEAD, DEAD, ALIVE, DEAD, DEAD, DEAD, DEAD, DEAD, DEAD }, { DEAD, DEAD, DEAD, DEAD, DEAD, DEAD, ALIVE, DEAD, DEAD, DEAD }, { DEAD, DEAD, DEAD, DEAD, DEAD, DEAD, DEAD, DEAD, DEAD, DEAD }, { DEAD, DEAD, DEAD, DEAD, ALIVE, DEAD, DEAD, DEAD, DEAD, DEAD }, { DEAD, DEAD, DEAD, DEAD, DEAD, DEAD, ALIVE, DEAD, DEAD, DEAD }, { DEAD, DEAD, DEAD, DEAD, DEAD, DEAD, DEAD, DEAD, DEAD, DEAD } }; printf("初始状态:\n"); printGrid(grid); for (int i = 0; i < 5; i++) { // 进行5次更新 updateCellStatus(grid); printf("第%d次更新:\n", i+1); printGrid(grid); } return 0; } ``` 以上代码定义了`SIZE`为细胞生命游戏的网格大小,使用`ALIVE`和`DEAD`表示细胞存活和死亡的状态。在`main`函数中,我们定义了一个初始状态的细胞网格,并进行了5次更新。更新使用`updateCellStatus`函数,该函数根据游戏规则计算新的细胞状态,并更新到原始网格。最后,我们使用`printGrid`函数打印当前的细胞状态。 这个示例代码只是一个简单的实现,你可以根据实际需求和规则,修改和优化代码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值