Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- using System.Threading.Tasks;
- namespace mrowki
- {
- class Program
- {
- static void Main( string[] args )
- {
- Kij kijNaMrowki = new Kij( 2, 100 );
- Console.WriteLine( kijNaMrowki.SymulujMrowki() );
- Console.ReadKey();
- }
- }
- class Mrowka : IComparable
- {
- public Mrowka(double pozycja, bool kierunek)
- {
- this.pozycja = pozycja;
- this.kierunek = kierunek;
- }
- public double pozycja;
- bool kierunek; // true = prawo, false = lewo
- public bool Martwa { get; private set; }
- static double predkosc = 0.01; // Metry na "krok"
- public override string ToString()
- {
- return "pozycja: " + pozycja.ToString("0.00") + "\nkierunek: " + ( kierunek ? "prawo" : "lewo" ) + "\nmartwa: " + Martwa + "\n";
- }
- public void ZrobKrok( double dlugoscKija )
- {
- if( kierunek )
- pozycja += predkosc;
- else
- pozycja -= predkosc;
- if( 0 > pozycja || pozycja > dlugoscKija )
- Martwa = true;
- }
- public void Odbij() => kierunek = !kierunek;
- public int CompareTo( object obj ) => this.pozycja > ( (Mrowka)obj ).pozycja ? 1 : -1;
- public static bool operator < ( Mrowka m1, Mrowka m2 ) => m1.pozycja < m2.pozycja;
- public static bool operator > ( Mrowka m1, Mrowka m2 ) => m1.pozycja > m2.pozycja;
- }
- class Kij
- {
- public Kij( double dlugosc, int ile_mrowek)
- {
- this.dlugosc = dlugosc;
- listaMrowek = new List<Mrowka>();
- Random rnd = new Random();
- for( int i = 0; i < ile_mrowek; ++i )
- listaMrowek.Add( new Mrowka( rnd.NextDouble() * dlugosc, rnd.NextDouble() > 0.5 ? true : false ) );
- // Poustawiaj mrowki po kolei
- listaMrowek.Sort();
- }
- private double dlugosc;
- List<Mrowka> listaMrowek;
- // DEBGUG
- public void WyswietlMrowki()
- {
- foreach( Mrowka m in listaMrowek )
- Console.WriteLine(m);
- }
- public void RuszMrowki()
- {
- for( int i = 0; i < listaMrowek.Count; ++i )
- {
- if( !listaMrowek[ i ].Martwa )
- listaMrowek[ i ].ZrobKrok( dlugosc );
- if( i > 0 && listaMrowek[ i ] < listaMrowek[ i - 1 ] ||
- i < listaMrowek.Count - 1 && listaMrowek[ i ] > listaMrowek[ i + 1 ]
- )
- listaMrowek[ i ].Odbij();
- }
- }
- public bool WszystkieMrowkiSpadly()
- {
- foreach( Mrowka m in listaMrowek )
- if( !m.Martwa )
- return false;
- return true;
- }
- public int SymulujMrowki()
- {
- int krok = 0;
- while( !WszystkieMrowkiSpadly() )
- {
- RuszMrowki();
- krok++;
- }
- return krok;
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement