ArchivVorführaufgaben07

Game of Life

Vorführaufgabe 07 · C

  • Datei: vorfuehraufgabe07.c
  • Stand:
  • Umfang: 100 Zeilen

Anmerkung 2026: Bindet die Header-Datei MyConIO.h ein, die nicht Teil der Veröffentlichung war.

#include <stdio.h>
#include "MyConIO.h"

void clear_field(char field[79][25])
{
	int x,y;
	for(x=0;x<79;x++)
		for(y=0;y<25;y++)
			field[x][y]=' ';
}

void sow_field(char field[79][25])
{
	int x,y;
	char Dateiname[12],zeile[79];
	FILE *vorgabe;
	printf("Dateiname: ");
	scanf("%s",&Dateiname);
	vorgabe = fopen(Dateiname,"r");
	for(y=0;y<25;y++)
	{		
		fscanf(vorgabe,"%s",&zeile);
		for(x=0;x<79;x++)
		{
			field[x][y]=zeile[x];
		}
	}
}

void display_field(char field[79][25])
{
	int x,y;
	mc_gotoxy(1,1);
	for(x=0;x<79;x++)
		for(y=0;y<25;y++)
		{
			mc_gotoxy(x,y);
			putchar(field[x][y]);
		}
}

	char get_field(int x,int y,char field[79][25])
	{
		if (x==-1) x=78;
		if (y==-1) y=24;
		if (x==79) x=0;
		if (y==25) y=0;
		return field[x][y];
	}

void advance_generation(char field[79][25])
{
	int x,y;
	char status[79][25];
	for(x=0;x<79;x++)
		for(y=0;y<25;y++)
		{
			status[x][y]=0;
			if (get_field(x-1,y-1,field)=='#') status[x][y]=status[x][y]+1;
			if (get_field(x  ,y-1,field)=='#') status[x][y]=status[x][y]+1;
			if (get_field(x+1,y-1,field)=='#') status[x][y]=status[x][y]+1;
			if (get_field(x-1,y  ,field)=='#') status[x][y]=status[x][y]+1;
			if (get_field(x+1,y  ,field)=='#') status[x][y]=status[x][y]+1;
			if (get_field(x-1,y+1,field)=='#') status[x][y]=status[x][y]+1;
			if (get_field(x  ,y+1,field)=='#') status[x][y]=status[x][y]+1;
			if (get_field(x+1,y+1,field)=='#') status[x][y]=status[x][y]+1;
		}	
	for(x=0;x<79;x++)
		for(y=0;y<25;y++)
		{
			if ((status[x][y]==2) || (status[x][y]==3))
			{
				if (status[x][y]==3) field[x][y]='#';
			}
			else
			{
				field[x][y]=' ';
			}

		}
}

int main(void)
{
	char spielfeld[79][25];
	clear_field(spielfeld);
	sow_field(spielfeld);
	mc_init();
	mc_clrscr();
	do
	{
		advance_generation(spielfeld);
		display_field(spielfeld);
		mc_delay(100);
	}
	while (!mc_keypressed());

	mc_exit();
	return 0;
}