TlačiťTlačiť Slovenčina English Hľadať RSS

© 2005 – 2024 Roman Horváth, všetky práva vyhradené. Dnes je 20. 4. 2024.

Stránka sa načítava, prosím čakajte…

Dátum: 4. 8. 2018, pred niekoľkými rokmi, aktualizované: 2. 12. 2019, pred piatimi rokmi

Tento projekt súvisí s projektom hry na život. Tiež ide o bunkový automat, ale pravidlá jeho fungovania sú odlišné, čím sa mení výsledný efekt projektu.

~

import knižnica.Bod;
import knižnica.GRobot;

import static knižnica.Svet.*;
import static java.lang.Math.*;

public class LesnýPožiar extends GRobot
{
	private final static char OHEŇ = 'w';
	private final static char STROM = 'Y';
	private final static char ZEM = '.';

	private double KEDY_OHEŇ = 0.01;
	private double KEDY_STROM = 0.05;
	private double HUSTOTA_LESA = 0.0;

	private int šírka, výška;
	private char les[][][];

	private int k = 0;
	private int l = 1;


	private void inicializuj(int nováŠírka, int nováVýška)
	{
		if (nováŠírka > 3) šírka = nováŠírka; else šírka = 3;
		if (nováVýška > 3) výška = nováVýška; else výška = 3;

		les = new char[2][výška][šírka];

		for (int i = 0; i < výška; ++i)
		{
			for (int j = 0; j < šírka; ++j)
			{
				if (random() < HUSTOTA_LESA)
					les[k][i][j] = STROM;
				else
					les[k][i][j] = ZEM;
			}
		}
	}


	private LesnýPožiar()
	{
		skry();
		nekresli();
		farbaPozadia(antracitová);
		inicializuj(300, 300);
		vypĺňajTvary();
		veľkosť(2.0);
		spustiČasovač(0.050);
		aktivuj();
	}

	private boolean horí(int a, int b)
	{
		int c = a > 0 ? a - 1 : a;
		int d = a < (výška - 1) ? a + 1 : a;

		int e = b > 0 ? b - 1 : b;
		int f = b < (šírka - 1) ? b + 1 : b;

		for (int i = c; i <= d; ++i)
			for (int j = e; j <= f; ++j)
				if (OHEŇ == les[k][i][j]) return true;

		return false;
	}

	@Override public void aktivita()
	{
		vymaž();
		Bod poloha = poloha();
		preskoč(šírka * (veľkosť() / 2.0), výška * (veľkosť() / 2.0));

		for (int i = 0; i < výška; ++i)
		{
			for (int j = 0; j < šírka; ++j)
			{
				switch (les[k][i][j])
				{
				case OHEŇ:
					les[l][i][j] = ZEM;
					break;

				case STROM:
					if (horí(i, j))
						les[l][i][j] = OHEŇ;
					else
						les[l][i][j] = random() < KEDY_OHEŇ ? OHEŇ : STROM;
					break;

				default:
					les[l][i][j] = random() < KEDY_STROM ? STROM : ZEM;
					break;
				}

				switch (les[l][i][j])
				{
				case OHEŇ: farba(svetložltá); break;
				case STROM: farba(zelená); break;
				default: farba(čierna);
				}

				štvorec();
				preskočVľavo();
			}
			odskoč();
			preskočVpravo(veľkosť() * šírka);
		}

		poloha(poloha);

		if (0 == k)
		{
			k = 1;
			l = 0;
		}
		else
		{
			k = 0;
			l = 1;
		}

		prekresli();
	}

	public static void main(String[] args)
	{
		použiKonfiguráciu("LesnýPožiar.cfg");
		new LesnýPožiar();
	}
}

Výsledok

obrázok