Questions
Assignment Implement Conway’s Game of Life. The Game of Life is a simple simulation that takes...

Assignment

Implement Conway’s Game of Life.

The Game of Life is a simple simulation that takes place in a grid of cells. Each cell can be either alive or dead, and it interacts with its neighbors (horizontally, vertically, or diagonally). In each iteration, a decision will be made to see if living cells stay alive, or if dead cells become alive. The algorithm is as follows:

If a cell is alive:

  • If it has less than two living neighbors, it dies due to loneliness.

  • If it has two or three living neighbors, it lives to the next generation

  • If it has more than three living neighbors, it dies due to overpopulation.

If a cell is dead:

  • and, if it has exactly three live neighbors, it becomes alive due to reproduction.

After each simulation round, your program must print the updated game board to screen.

Functional Requirements

  • MUST correctly play the Game of Life
  • You MUST use this life.h header file to find definitions
  • You MUST use this life.c file as a starting point for your implementation
  • You MUST assume a grid of 15x15
  • The grid size MUST be square
  • Your program MUST start with an initial grid in which cells (5,5) (5,6) (5,7) and (6,6) are alive and all others one are not
  • Your program MUST let the game run for 15 rounds
  • Your program MUST print the game board after each round

Hint

  • When doing a simulation run, define a second two-dimensional array. For each cell in the existing array, count the number of neighbors it has, and decide what its fate will be on the new board. After having done this for all cells, copy the value of your new board over the old one

source code:

life.h
/*
 * life.h
 *
 *  Created on: Sep 13, 2016
 *      Author: leune
 */

#ifndef LIFE_H_
#define LIFE_H_

#define XSIZE   15
#define YSIZE   15
#define DEFAULTROUNDS 15
#define ALIVE   1
#define DEAD    0

// initialize the board to all dead cells
void initBoard(int vBoard[][YSIZE]);

// play a round; updates the cells on the board
void playRound(int vBoard[][YSIZE]);

// print the board
void printBoard(int vBoard[][YSIZE]);

// determine the number of neighbors
int neighbors(int vBoard[][YSIZE], int x, int y);

/* determine if the given coordinates are within bounds
 * returns 0 if the cell is out of bounds; returns 1 if
 * the cell is in bounds
 */
int onBoard(int x, int y);

#endif /* LIFE_H_ */

life.c

/*
 * life.c
 *
 *  Created on: Sep 13, 2016
 *      Author: leune
 */
#include <stdio.h>
#include <unistd.h>
#include "life.h"

int main(int argc, char *argv[]) {
        int board[XSIZE][YSIZE];
        int rounds = DEFAULTROUNDS;

        initBoard(board);
        board[5][5] = ALIVE;
        board[5][6] = ALIVE;
        board[5][7] = ALIVE;
        board[6][6] = ALIVE;

        printf("Playing %d rounds.\n\n", rounds);
        for (int i=0; i<rounds; i++) {
                printf("Round: %d\n", i+1);
                printBoard(board);
                playRound(board);

                sleep(1);
        }

        return 0;
}


void initBoard(int vBoard[][YSIZE]) {
    /* write this function */
}

void playRound(int vBoard[][YSIZE]) {
        int tmpBoard[XSIZE][YSIZE];
        initBoard(tmpBoard);

        // perform the algorithm on vBoard, but update tmpBoard
        // with the new state
        
        /* write this fragment */

    // copy tmpBoard over vBoard
        for (int y=0; y < YSIZE; y++) {
                for (int x=0; x < XSIZE; x++) {
                        vBoard[x][y] = tmpBoard[x][y];
                }
        }
}

int onBoard(int x, int y) {
        if (x < 0 || x >= XSIZE)
                return 0;
        else
                if (y < 0 || y >= YSIZE) return 0;
        else
                return 1;
}

int neighbors(int vBoard[][YSIZE], int x, int y) {
        int n=0;

        int xp1 = x + 1;
        int xm1 = x - 1;
        int yp1 = y + 1;
        int ym1 = y - 1;

        if (onBoard(xm1, y) && vBoard[xm1][y] == ALIVE) n++;
        if (onBoard(xm1, yp1) && vBoard[xm1][yp1] == ALIVE) n++;
        if (onBoard(x, yp1) && vBoard[x][yp1] == ALIVE) n++;
        if (onBoard(xp1, yp1) && vBoard[xp1][yp1] == ALIVE) n++;
        if (onBoard(xp1, y) && vBoard[xp1][y] == ALIVE) n++;
        if (onBoard(xp1, ym1) && vBoard[xp1][ym1] == ALIVE) n++;
        if (onBoard(x, ym1) && vBoard[x][ym1] == ALIVE) n++;
        if (onBoard(xm1, ym1) && vBoard[xm1][ym1] == ALIVE) n++;

        return n;
}

void printBoard(int vBoard[XSIZE][YSIZE]) {
        /* write this fragment */
}

In: Computer Science

q(L,K)=L+2K=100w=30v=40find, graph, and explain cost-minimizing solution (L*,K*)

q(L,K)=L+2K=100

w=30

v=40

find, graph, and explain cost-minimizing solution (L*,K*)

In: Economics

Magnese v phosphate reacts with 9.6 x 10^13 grams iron VII carbonate. calculate the mass of...

Magnese v phosphate reacts with 9.6 x 10^13 grams iron VII carbonate. calculate the mass of the each product produced in the process

In: Chemistry

Explain the significance of the case of Salomon v Salomon and Co Ltd [1897] AC 22....

Explain the significance of the case of Salomon v Salomon and Co Ltd [1897] AC 22. (600 words please without plagiarism due in 12h)

In: Accounting

A 9.0 V potential difference is applied between the ends of a 0.60-mm diameter, 80-cm long...

A 9.0 V potential difference is applied between the ends of a 0.60-mm diameter, 80-cm long nichrome wire. What is the current in the wire?

In: Physics

South Dakota v. Wayfair has been called the "tax case of the millennium." Explain why this...

South Dakota v. Wayfair has been called the "tax case of the millennium." Explain why this SCOTUS decision is so important for nexus purposes.

In: Accounting

Can someone summarize the V(D)J recombination, class switch recombination (CSR) and somatic hypermutation (SHM) with the...

Can someone summarize the V(D)J recombination, class switch recombination (CSR) and somatic hypermutation (SHM) with the mechanism in relationship to antigen and antibody.

In: Biology

A 100mH inductance is connected in parallel with 40 ohms resistance . What is the power...

A 100mH inductance is connected in parallel with 40 ohms resistance . What is the power drawn voltage 220 v AC SOURCE and 60 hz. frequency

In: Electrical Engineering

Explain why the directors were liable for breach of duty in ASIC v Healey [2011] FCA...

  1. Explain why the directors were liable for breach of duty in ASIC v Healey [2011] FCA 717 and also explain why their defences failed?

In: Accounting

Explain why the directors were liable for breach of duty in ASIC v Healey [2011] FCA...

  1. Explain why the directors were liable for breach of duty in ASIC v Healey [2011] FCA 717 and also explain why their defences failed?

In: Accounting