private void NapraviNovuHranu(ref List <Point> hrana, int foodMax, List <Point> zmija, ref List <Instrukcija> Lista) { Random r = new Random(); Point food = new Point { X = r.Next(0, sirinaMatrice + 1), Y = r.Next(0, visinaMatrice + 1) }; Instrukcija instrukcija = new Instrukcija(); for (int i = hrana.Count; i < foodMax; i++) { while (hrana.Contains(food) || zmija.Contains(food)) //trazi se random lokacija na kojoj nema ni zmije ni hrane { food = new Point { X = r.Next(0, sirinaMatrice + 1), Y = r.Next(0, visinaMatrice + 1) } } ; hrana.Add(food); //kada se nadje doda se u listu //dodavanje instrukcije u listu instrukcija.xy = hrana[i]; instrukcija.oboj = true; instrukcija.telo = false; Lista.Add(instrukcija); } }
//promene u listi zmijice i desavanja u zavisnosti od njene pozicije, kreiranje instrukcija private void ZmijaUpdate(ref List <Point> teloZmije, Point glava, ref List <Instrukcija> Lista, int interval) { Instrukcija instrukcija = new Instrukcija(); //da li se sudara (sudara se ako je lokacija glave jednaka sa nekim delom tela zmijice) if (teloZmije.Contains(glava)) { //kreiranje instrukcije glava.X = -1; //nepostojeca lokacija kao znak za kraj igrice instrukcija.xy = glava; Lista.Add(instrukcija); //dodaje se u listu instrukcija KrajIgrice(); } //ako se ne sudara else { //glava se uvek dodaje teloZmije.Insert(0, glava); //pravi se instrukcija za bojenje lokacije na kojoj je glava instrukcija.xy = glava; instrukcija.oboj = true; instrukcija.telo = true; Lista.Add(instrukcija); //dodaje se u listu instrukcija //provera da li glava ima isti lokaciju kao neki clan iz liste hrana for (int i = 0; i < hrana.Count; i++) { if (hrana[i] == glava) //ako postoji takav clan { currentScore += (int)Math.Pow(2, (400 - interval) / 50); //score se povecava pokupljeno = true; instrukcija.xy = hrana[i]; instrukcija.oboj = false; instrukcija.telo = false; Lista.Add(instrukcija); hrana.RemoveAt(i); //hrana se uklanja iz liste hranaZvuk.Play(); break; } else { pokupljeno = false; //ako ne postoji } } //rep se brise kada se ne pokupi hrana, ili ako nema hrane, a bool je ostao true if (!pokupljeno || hrana.Count == 0) { //pravljenje istrukcije za brisanje repa instrukcija.xy = teloZmije[teloZmije.Count - 1]; //rep je uvek poslednji clan liste instrukcija.oboj = false; instrukcija.telo = true; Lista.Add(instrukcija); //dodaje se u listu instrukcija teloZmije.RemoveAt(teloZmije.Count - 1); //uklanja se iz liste delova tela zmijice } //nasumicno generisanje hrane po frame-u Random r = new Random(); if (r.Next(0, 5) == 1) { NapraviNovuHranu(ref hrana, r.Next(1, foodMax + 1), teloZmije, ref Lista); } } }