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

📄 lifegame.htm

📁 “常见程式演算”主要收集一些常见的程式练习题目
💻 HTM
字号:
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>




  
  
  
  
  <link rel="stylesheet" href="css/stdlayout.css" type="text/css">




  
  
  
  
  <link rel="stylesheet" href="css/print.css" type="text/css">




  
  
  
  
  <meta content="text/html; charset=gb2312" http-equiv="content-type">




  
  
  
  
  <title>生命游戏</title>
</head>


<body>




<h3><a href="http://caterpillar.onlyfun.net/GossipCN/index.html">From
Gossip@caterpillar</a></h3>




<h1><a href="AlgorithmGossip.htm">Algorithm Gossip: 生命游戏</a></h1>




<h2>&nbsp;说明</h2>

生命游戏(game of life)为1970年由英国数学家J. H. Conway所提出,某一细胞的邻居包括上、下、左、右、左上、左下、右上与右下相邻之细胞,游戏规则如下:<br>

<ol>

  <li>孤单死亡:如果细胞的邻居小于一个,则该细胞在下一次状态将死亡。</li>

  <li>拥挤死亡:如果细胞的邻居在四个以上,则该细胞在下一次状态将死亡。</li>

  <li>稳定:如果细胞的邻居为二个或三个,则下一次状态为稳定存活。</li>

  <li>复活:如果某位置原无细胞存活,而该位置的邻居为三个,则该位置将复活一细胞。</li>

</ol>

<h2>解法</h2>

生命游戏的规则可简化为以下,并使用CASE比对即可使用程式实作:<br>

<ol>

  <li>邻居个数为0、1、4、5、6、7、8时,则该细胞下次状态为死亡。</li>

  <li>邻居个数为2时,则该细胞下次状态为稳定。</li>

  <li>邻居个数为3时,则该细胞下次状态为复活。</li>

</ol>

<h2> 实作</h2>


<ul>

  <li> C
  </li>

</ul>


<pre>#include &lt;stdio.h&gt; <br>#include &lt;stdlib.h&gt; <br>#include &lt;ctype.h&gt; <br><br>#define MAXROW 10 <br>#define MAXCOL 25 <br>#define DEAD 0 <br>#define ALIVE 1 <br>int map[MAXROW][MAXCOL], newmap[MAXROW][MAXCOL]; <br><br>void init(); <br>int neighbors(int, int);<br>void outputMap();<br>void copyMap();<br><br>int main() { <br>   int row, col; <br>   char ans; <br><br>   init();<br><br>   while(1) {<br>      outputMap();<br>      for(row = 0; row &lt; MAXROW; row++) {<br>         for(col = 0; col &lt; MAXCOL; col++) {<br>            switch (neighbors(row, col)) {<br>               case 0: <br>               case 1: <br>               case 4: <br>               case 5: <br>               case 6: <br>               case 7: <br>               case 8: <br>                  newmap[row][col] = DEAD; <br>                  break; <br>               case 2: <br>                  newmap[row][col] = map[row][col]; <br>                  break; <br>               case 3: <br>                  newmap[row][col] = ALIVE; <br>                  break; <br>            } <br>         }<br>      }<br><br>      copyMap();<br><br>      printf("\nContinue next Generation ? ");<br>      getchar();<br>      ans = toupper(getchar());<br><br>      if(ans != 'Y')<br>          break;<br>   }<br>    <br>   return 0; <br>} <br><br>void init() {<br>   int row, col; <br>    <br>   for(row = 0; row &lt; MAXROW; row++) <br>      for(col = 0; col &lt; MAXCOL; col++) <br>         map[row][col] = DEAD; <br><br>   puts("Game of life Program"); <br>   puts("Enter x, y where x, y is living cell");<br>   printf("0 &lt;= x &lt;= %d, 0 &lt;= y &lt;= %d\n", <br>                 MAXROW-1, MAXCOL-1); <br>   puts("Terminate with x, y = -1, -1");<br><br>   while(1) {<br>      scanf("%d %d", &amp;row, &amp;col); <br>      if(0 &lt;= row &amp;&amp; row &lt; MAXROW &amp;&amp; <br>         0 &lt;= col &amp;&amp; col &lt; MAXCOL)<br>         map[row][col] = ALIVE;<br>      else if(row == -1 || col == -1)<br>         break;<br>      else <br>         printf("(x, y) exceeds map ranage!"); <br>   }<br>}<br><br>int neighbors(int row, int col) {<br>   int count = 0, c, r; <br><br>   for(r = row-1; r &lt;= row+1; r++) <br>      for(c = col-1; c &lt;= col+1; c++) { <br>         if(r &lt; 0 || r &gt;= MAXROW || c &lt; 0 || c &gt;= MAXCOL) <br>            continue; <br>         if(map[r][c] == ALIVE) <br>            count++; <br>      } <br><br>   if(map[row][col] == ALIVE) <br>      count--; <br>    <br>   return count; <br>} <br><br>void outputMap() {<br>   int row, col; <br><br>   printf("\n\n%20cGame of life cell status\n"); <br>   for(row = 0; row &lt; MAXROW; row++) { <br>      printf("\n%20c", ' '); <br>      for(col = 0; col &lt; MAXCOL; col++) <br>         if(map[row][col] == ALIVE) <br>            putchar('#'); <br>         else <br>            putchar('-'); <br>   } <br>} <br><br>void copyMap() {<br>   int row, col; <br><br>   for(row = 0; row &lt; MAXROW; row++) <br>      for(col = 0; col &lt; MAXCOL; col++) <br>         map[row][col] = newmap[row][col]; <br>}  <br></pre>


<br>


<ul>

  <li> Java
  </li>

</ul>


<pre>import java.io.BufferedReader;<br>import java.io.IOException;<br>import java.io.InputStreamReader;<br><br>public class LifeGame {<br>    private boolean[][] map;<br>    private boolean[][] newmap;<br>    <br>    public LifeGame(int maxRow, int maxColumn) {<br>        map = new boolean[maxRow][maxColumn];<br>        newmap = new boolean[maxRow][maxColumn];<br>    }<br>    <br>    public void setCell(int x, int y) {<br>        map[x][y] = true;<br>    }<br>    <br>    public void next() {<br>        for(int row = 0; row &lt; map.length; row++) {<br>            for(int col = 0; col &lt; map[0].length; col++) {<br>               switch (neighbors(row, col)) {<br>                  case 0: <br>                  case 1: <br>                  case 4: <br>                  case 5: <br>                  case 6: <br>                  case 7: <br>                  case 8: <br>                     newmap[row][col] = false; <br>                     break; <br>                  case 2: <br>                     newmap[row][col] = map[row][col]; <br>                     break; <br>                  case 3: <br>                     newmap[row][col] = true; <br>                     break; <br>               } <br>            }<br>         }<br><br>         copyMap();<br>    }<br><br>    public void outputMap() throws IOException { <br>        System.out.println("\n\nGame of life cell status"); <br>        for(int row = 0; row &lt; map.length; row++) { <br>            System.out.print("\n "); <br>           for(int col = 0; col &lt; map[0].length; col++) <br>              if(map[row][col] == true) <br>                  System.out.print('#'); <br>              else <br>                  System.out.print('-'); <br>        } <br>    }<br>    <br>    private void copyMap() {<br>        for(int row = 0; row &lt; map.length; row++) <br>           for(int col = 0; col &lt; map[0].length; col++) <br>              map[row][col] = newmap[row][col]; <br>    }<br>    <br>    private int neighbors(int row, int col) {<br>        int count = 0; <br><br>        for(int r = row-1; r &lt;= row+1; r++) <br>           for(int c = col-1; c &lt;= col+1; c++) { <br>              if(r &lt; 0 || r &gt;= map.length ||<br>                 c &lt; 0 || c &gt;= map[0].length) <br>                 continue; <br>              if(map[r][c] == true) <br>                 count++; <br>           } <br><br>        if(map[row][col] == true) <br>           count--; <br>         <br>        return count; <br>    } <br>    <br>    public static void main(String[] args) <br>                 throws NumberFormatException, IOException {<br>        BufferedReader bufReader = <br>            new BufferedReader(<br>                    new InputStreamReader(System.in));<br>        <br>        LifeGame game = new LifeGame(10, 25);<br>        <br>        System.out.println("Game of life Program"); <br>        System.out.println(<br>                   "Enter x, y where x, y is living cell");<br>        System.out.println("0 &lt;= x &lt; 10, 0 &lt;= y &lt; 25"); <br>        System.out.println("Terminate with x, y = -1, -1");<br>        <br>        while(true) {<br>            String[] strs = bufReader.readLine().split(" ");<br>            int row = Integer.parseInt(strs[0]);<br>            int col = Integer.parseInt(strs[1]);<br><br>            if(0 &lt;= row &amp;&amp; row &lt; 10 &amp;&amp; 0 &lt;= col &amp;&amp; row &lt; 25) <br>                game.setCell(row, col);<br>            else if(row == -1 || col == -1) {<br>                break;<br>            }<br>            else { <br>                System.out.print(<br>                         "(x, y) exceeds map ranage!");<br>            }<br>        }<br>        <br>        while(true) {<br>            game.outputMap();<br>            game.next();<br><br>            System.out.print(<br>                         "\nContinue next Generation ? ");<br>            <br>            String ans = bufReader.readLine().toUpperCase();<br><br>            if(!ans.equals("Y"))<br>                break;<br>        } <br>    }<br>}</pre>

<br>




</body>
</html>

⌨️ 快捷键说明

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