public void SpawningTrain() { //Spawnowanie pociągu if (IsTrainIs == false) //jeżeli nie istnieje żaden pociąg { IsTrainIs = true; //zmieniamy że istnieje //Thread.Sleep(1); lock (Ekran) // blokada mapy sceny i wypełnienie trasy pociągu '2' { for (int i = 0; i < 1932; i++) { for (int j = 250; j < 340; j++) { if (Ekran[i, j] != 1) //pomijamy miejsca gdzie na torach jest auto, aby zdążyło zjechać { Ekran[i, j] = 2; } } } } bool TrainFlag = false; //Flaga ruszenia pociągu while (TrainFlag == false) //Czekamy aż tory będą puste { TrainFlag = true; //ustawiamy tory na wolne for (int i = 0; i < 1932; i++) { for (int j = 250; j < 340; j++) { if (Ekran[i, j] != 1) //sprawdzamy czy jest auto na torach { lock (Ekran) { Ekran[i, j] = 2; } //miejsca gdzie już nie ma samochodów wypełniamy '2' } else { TrainFlag = false; //gdy znajdzie się chociaż jeden piksel gdzie jeszcze jest auto na torach ustawiamy tory na zajęte } } } } //Po wyjściu z pętli tory na pewno są puste int Losowanie; Losowanie = rnd.Next(1, 5000) % 2; //losujemy strone z której pojedzie pociąg Action action; Train Train1 = new Train(Losowanie); //tworzymy pociąg Point Punkt = new Point(); //oraz punkt w którym zostanie umieszczony if (Losowanie == 1) { Punkt.X = -100; } //pociąg jedzie z lewej współrzędna X else { Punkt.X = 1900; } //pociąg jedzie z prawej Punkt.Y = 258; //współrzędna Y Train1.Location = Punkt; //ustawiamy pociąg w odpowiedniej lokalizacji Train1.Height = 70; //nadajemy mu wysokośc Train1.Width = 400; //i szerokość Train1.BackColor = Color.Yellow; //oraz kolor action = () => { this.Controls.Add(Train1); }; //dodajemy go do formatki za pomocą delegata this.Invoke(action); IsTrainIs = true; if (Losowanie == 1) //jeżeli pociąg jedzie z lewej - przesuwamy go w prawo { Point Punkt1 = Train1.Location; //tworzymy nowy punkt Action action1; //i delegata while (Punkt1.X < 1900) // dopóki pociąg nie wyjedzie za mapę { Punkt1.X += 8; //przesuwamy go w każdym kroku o 8px w prawo action1 = () => { Train1.Location = Punkt1; Train1.Update(); }; //i updatujemy jego położenie na formatce this.Invoke(action1); Thread.Sleep(80); //usypiamy wątek by dać szanse innym na dostęp do procesora } IsTrainIs = false; // jeżeli dojechał do końca mapy ustawiamy flage na brak pociągu } else if (Losowanie == 0) //jeżeli z prawej - w lewo { Point Punkt1 = Train1.Location; //tworzymy nowy punkt Action action1; //i delegata while (Punkt1.X > -200) // dopóki pociąg nie wyjedzie za mapę { Punkt1.X -= 8; //przesuwamy go w każdym kroku o 8px w lewo action1 = () => { Train1.Location = Punkt1; Train1.Update(); }; //i updatujemy jego położenie na formatce this.Invoke(action1); this.Invoke(action1); Thread.Sleep(80); //usypiamy wątek by dać szanse innym na dostęp do procesora } IsTrainIs = false; // jeżeli dojechał do końca mapy ustawiamy flage na brak pociągu } for (int i = 0; i < 1932; i++) //mapę sceny w miejscu gdzie przebiegała trasa pociągu wypełniamy zerami { for (int j = 250; j < 340; j++) { lock (Ekran) { Ekran[i, j] = 0; } } } if (IsTrainIs == false) // jeżeli pociąg dojechał do końca mapy - usuwamy go z formatki { action = () => { this.Controls.Remove(Train1); }; this.Invoke(action); } } }
private void SpawningPeople() { //Spawnowanie ludzia if (IsPeopleIs == false) //jeżeli nie istnieje żaden ludź { IsPeopleIs = true; //zmieniamy że istnieje //Thread.Sleep(1); lock (Ekran) // blokada mapy sceny i wypełnienie trasy ludzia '2' { for (int i = 600; i < 1200; i++) { for (int j = 670; j < 800; j++) { if (Ekran[i, j] != 1) //pomijamy miejsca gdzie na pasach jest auto, aby zdążyło zjechać { Ekran[i, j] = 2; } } } } bool PeopleFlag = false; //Flaga ruszenia ludzia while (PeopleFlag == false) //Czekamy aż pasy będą puste { PeopleFlag = true; //ustawiamy pasy na wolne for (int i = 600; i < 1200; i++) { for (int j = 670; j < 800; j++) { if (Ekran[i, j] != 1) //sprawdzamy czy jest auto na pasach { lock (Ekran) { Ekran[i, j] = 2; } //miejsca gdzie już nie ma samochodów wypełniamy '2' } else { PeopleFlag = false; //gdy znajdzie się chociaż jeden piksel gdzie jeszcze jest auto na pasach ustawiamy pasy na zajęte } } } } //Po wyjściu z pętli pasy na pewno są puste int Losowanie; Losowanie = rnd.Next(1, 5000) % 2; //losujemy strone z której pojdzie ludź Action action; Train People1 = new Train(Losowanie); //tworzymy ludzia Point Punkt = new Point(); //oraz punkt w którym zostanie umieszczony if (Losowanie == 1) { Punkt.X = 600; } //ludź idzie z lewej współrzędna X else { Punkt.X = 1200; } //ludź idzie z prawej Punkt.Y = 715; //wspóżędna Y People1.Location = Punkt; //ustawiamy ludzia w odpowiedniej lokalizacji People1.Height = 30; //nadajemy mu wysokośc People1.Width = 30; //i szerokość People1.BackColor = Color.Green; //oraz kolor action = () => { this.Controls.Add(People1); }; //dodajemy go do formatki za pomocą delegata this.Invoke(action); IsPeopleIs = true; if (Losowanie == 1) //jeżeli ludź idzie z lewej - przesuwamy go w prawo { Point Punkt1 = People1.Location; //tworzymy nowy punkt Action action1; //i delegata while (Punkt1.X < 1200) // dopóki ludź nie zejdzie z pasów, żeby go przypadkiem coś nie rozjechało na miazgę { Punkt1.X += 3; //przesuwamy go w każdym kroku o 3pks w prawo action1 = () => { People1.Location = Punkt1; People1.Update(); }; //i updatujemy jego położenie na formatce this.Invoke(action1); Thread.Sleep(80); //usypiamy wątek by dać szanse innym na dostęp do procesora } IsPeopleIs = false; // jeżeli doszedł do końca pasów - ustawiamy flagę na brak ludzia (heheszki) } else if (Losowanie == 0) //jeżeli z prawej - w lewo { Point Punkt1 = People1.Location; //tworzymy nowy punkt Action action1; //i delegata while (Punkt1.X > 600) // dopóki ludź nie zejdzie z pasów { Punkt1.X -= 3; //przesuwamy go w każdym kroku o 3pks w lewo action1 = () => { People1.Location = Punkt1; People1.Update(); }; //i updatujemy jego położenie na formatce this.Invoke(action1); this.Invoke(action1); Thread.Sleep(80); //usypiamy wątek by dać szanse innym na dostęp do procesora } IsPeopleIs = false; // jeżeli doszedł do końca pasów ustawiamy flagę na brak ludzia } for (int i = 600; i < 1200; i++) //mapę sceny w miejscu gdzie przebiegała trasa ludzia wypełniamy zerami { for (int j = 670; j < 800; j++) { lock (Ekran) { Ekran[i, j] = 0; } } } if (IsPeopleIs == false) // jeżeli pociąg dojechał do końca mapy - usuwamy go z formatki { action = () => { this.Controls.Remove(People1); }; //naprawic this.Invoke(action); } } }