C# Wstęp
Typy danych
-
- bool, char, int, double, …
-
- struktury
-
- klasy
- interfejsy
- string
- tablice
- tablice Arrays
Klasy
Wielomian
public class Wielomian { private int stopień ; private double [] współczynniki = null; public Wielomian() { stopień = 0; współczynniki = new double[1] ; współczynniki[0] = 0; } public Wielomian(double[] współczynniki) { stopień = współczynniki.Length - 1; this.współczynniki = new double[współczynniki.Length]; for(int i=0;i<współczynniki.Length;i++) this.współczynniki[i]=współczynniki[i]; } public double Wartość(double x) { double y = 0; // tu obliczenia wartości return y; } }
System.Console
MSDN : System.Console
- wyświetlanie/wczytywanie danych
- pozycjonowane tekstu
- Console.SetCursorPosition() - określenie pozycji kursora
- Console.CursorTop Console.CursorLeft - aktualna pozycja kursora
- czyszczenie
- Clear() - czyszczenie bufora
- własności konsoli
- BufferWidth, BufferHeight - wysokość i szerokość bufora
- Title - tytuł okna
- kolory
- Console.ForegroundColor kolor pierwszoplanowy (znaki)
- Console.BackgroundColor kolor tła (znaków)
- animacje
- Console.MoveBufferArea() przesuwanie fragmentu konsoli
- klawisze
- inne przydatne
- System.Console.CursorVisible - widoczność kursora (true/false)
- System.Threading.Thread.Sleep() uśpienie wątku
- System.Random generator liczb (pseudo)losowych
- NextDouble() - zwraca liczbę double z zakresu [0,1]
Tworzenie gier w konsoli Windows: Understanding C#: Use System.Console to build text-mode games By Andrew Stellman
Hello World
using System; class PositionText { static void Main(string[] args) { Console.WriteLine("Witaj świecie!."); Console.Write("Podaj swoje imię: "); string text = Console.ReadLine(); int left = Console.CursorLeft; int top = Console.CursorTop; Console.SetCursorPosition(15, 20); Console.Write("Witaj -> {0} <-", text); Console.SetCursorPosition(left, top); Console.WriteLine("Koniec."); } }
Zadania
Gra Life
Wikipedia: Gra_w_życie
Reguły:
- plansza nieskończona (zawinięta góra/dół, lewo/prawo)
- komórka, która ma dokładnie 3 żywych sąsiadów, staje się żywa w następnej jednostce czasu (rodzi się)
- żywa komórka z 2 albo 3 żywymi sąsiadami pozostaje nadal żywa; przy innej liczbie sąsiadów umiera (z „samotności” albo „zatłoczenia”)
Utwórz klasę Plansza
która zawiera stan gry oraz pozwala sterować przebiegiem gry.
Pola wymagane:
- wymiary planszy (wysokość i szerokość, domyślnie 20×20)
- ilość żywych komórek (zależy od losowania, domyślnie komórka jest inicjowana jako żywa z prawdopodobieństwem 1/4)
- symbol (znak) reprezentujący żywą komórkę (domyślnie
*
) - plansza (tablica o odpowiednich wymiarach)
Inne możliwe pola opcjonalne:
- kolor znaku, kolor tła planszy
Metody wymagane:
- Konstruktory
- domyślny (plansza o wymiarach 10×10, losowo zainicjowane 25 żywych komórek)
- pozwalający zainicjować planszę o odpowiednich wymiarach oraz ustawić początkowy stan planszy dla danego prawdopodobieństwa pojawienia się żywej komórki.
- (dla chętnych) jak wyżej + pozwalać określić znak wizualizujący żywą komórkę oraz kolorystykę (kolor znaku i tło).
- Metoda inicjująca rozkład początkowy żywych komórek dla danej wartości prawdopodobieństwa pojawienia się żywej komórki w danej pozycji
- Metoda pozwalająca wykonać jeden cykl (zmiana stanu na planszy)
- Metoda rysująca aktualny stan planszy w konsoli (wyczyszczenie konsoli, narysowanie planszy oraz żywych komórek, wyświetlenie liczby żywych komórek oraz numeru cyklu)
- Metoda prywatna wyznaczająca liczbę sąsiadów dla danej komórki na pozycji
[x,y]
.
Metody opcjonalne:
- Metoda pozwalająca zapisać planszę do pliku tekstowego o podanej nazwie.
Zobacz: System.IO klasy związane z obsługą wejścia-wyjścia, System.IO.FileStream, StreamWriter zapis do strumienia (np. do pliku)
Zaimplementuj program który wyświetli animację obrazującą proces rozwoju komórek na planszy.
Diagram UML - przykład