5. óra - Bevezetés a karaktergrafikába
"Rajzolás" konzol ablakba
A konzol ablak 25 oszlopból és 80 sorból áll, az utolsó oszlopba és az utolsó sorba nem célszerű "írni", mert elgöröghet a kép. A karakterpozíciók koordinátái balról jobbra és felülről lefelé nőnek.
Parancsok
Kiírás
Console.Write("Nem ugrunk új sorba");
Console.WriteLine("Most ugrunk");
Kiírási pozíció (kurzor pozíció) beállítása
Console.SetCursorPosition(10,10);
Console.Write("x");
Kiírás színének beállítása
Console.ForegroundColor = ConsoleColor.Red;
Console.Write("Ez most piros...");
Színek
Black | fekete |
DarkBlue | sötétkék |
DarkGreen | sötét zöld |
DarkCyan | sötét kékes-zöld |
DarkRed | sötét piros |
DarkMagenta | sötét lila |
DarkYellow | sötét sárga |
Gray | szürke |
DarkGray | sötét szürke |
Blue | kék |
Green | zöld |
Cyan | cián |
Red | piros |
Magenta | lila |
Yellow | sárga |
White | fehér |
A csoport
Első próba
using System;
class Program
{
public static void Main(string[] args)
{
string s = "A windows most csökkentet módban fut";
Console.SetCursorPosition(0, 0);
Console.ForegroundColor = ConsoleColor.Red;
Console.Write(s);
Console.SetCursorPosition(80-s.Length, 0);
Console.ForegroundColor = ConsoleColor.Blue;
Console.Write(s);
Console.SetCursorPosition(0, 24);
Console.ForegroundColor = ConsoleColor.Green;
Console.Write(s);
Console.SetCursorPosition(80-s.Length, 24);
Console.ForegroundColor = ConsoleColor.Cyan;
Console.Write(s);
Console.SetCursorPosition(0, 0);
Console.ReadKey(true);
}
}
Egyoszlopos "mátrix"
using System;
using System.Threading;
class Program
{
public static void Main(string[] args)
{
int i;
int j;
j = 4;
Console.ForegroundColor = ConsoleColor.Green;
for (i = 0; i < 23; i++) {
Console.SetCursorPosition(j, i);
Console.Write( i % 10 );
Thread.Sleep(20);
}
Console.ReadKey(true);
}
}
Teljes "mátrix"
using System;
using System.Threading;
class Program
{
public static void Main(string[] args)
{
int i;
int j;
Console.ForegroundColor = ConsoleColor.Green;
for (j = 0; j < 80; j++) {
for (i = 0; i < 23; i++) {
Console.SetCursorPosition(j, i);
Console.Write( i % 10 );
Thread.Sleep(20);
}
}
Console.ReadKey(true);
}
}
Szuper "mátrix"
Kiegészítések a szakkörön készült programhoz. Véletlenszerű számokkal.
using System;
using System.Threading;
class Program
{
public static void Main(string[] args)
{
int i;
int j;
int szam;
int oszlop;
Random r = new Random();
for (j = 0; j < 80; j++) {
oszlop = r.Next(0, 80);
for (i = 0; i < 23; i++) {
szam = r.Next(0, 10);
Console.SetCursorPosition(oszlop, i);
if (szam % 4 == 0) {
Console.ForegroundColor = ConsoleColor.White;
} else {
Console.ForegroundColor = ConsoleColor.Green;
}
Console.Write( szam );
Thread.Sleep(20);
}
}
Console.ForegroundColor = ConsoleColor.Gray;
Console.Clear();
Console.WriteLine("Vége");
Console.ReadKey(true);
}
}
B csooport
Pattogó golyó
Ezt csináltuk órán. A visszapattanásoknál valamilyen végig nem gondolt pontatlanság miatt egyre gyorsul.
using System;
using System.Threading;
class Program
{
public static void Main(string[] args)
{
double ax = 0;
double ay = 1;
double x = 0;
double y = 20;
double vx = 1;
double vy = 0;
double dt = 1.0;
int kx, ky;
while (Console.KeyAvailable == false) {
x = x + vx * dt + ax*dt*dt / 2;
y = y + vy * dt + ay*dt*dt / 2;
vx = vx + ax*dt;
vy = vy + ay*dt;
if (x > 100) {
x = 100;
vx = -vx;
}
if (x < 0) {
x = 0;
vx = -vx;
}
if (y > 100) {
y = 100;
vy = -vy;
}
if (y < 0) {
y = 0;
vy = -vy;
}
kx = (int) (x / 5);
ky = (int) (y / 5);
Console.SetCursorPosition(kx, ky);
Console.Write("O");
Thread.Sleep(50);
Console.SetCursorPosition(kx, ky);
Console.Write(" ");
}
}
}
Pattogó golyók
Kiegészítés a szakköri programhoz. Rugalmatlan ütközés és több golyó.
using System;
using System.Threading;
class Program {
public static void PutString(double x, double y, string s) {
int ix = (int) (x/5);
int iy = (int) (y/5);
Console.SetCursorPosition(ix, iy);
Console.Write(s);
}
public static void Main(string[] args)
{
double ax = 0;
double ay = 1;
double[] x = {0, 20, 40};
double[] y = {0, 0, 0};
double[] vx = {-2, 4, 2};
double[] vy = {2, 3, 4};
ConsoleColor[] colors = {ConsoleColor.Red, ConsoleColor.Green, ConsoleColor.Blue};
double k = 0.9;
double dt = 0.3;
while (Console.KeyAvailable == false) {
for (int i = 0; i < 3; i++) {
PutString(x[i], y[i], " ");
}
for (int i = 0; i < 3; i++) {
x[i] = x[i] + vx[i] * dt + ax*dt*dt / 2;
y[i] = y[i] + vy[i] * dt + ay*dt*dt / 2;
vx[i] = vx[i] + ax*dt;
vy[i] = vy[i] + ay*dt;
if (x[i] > 100) {
x[i] = 100;
vx[i] = -k*vx[i];
}
if (x[i] < 0) {
x[i] = 0;
vx[i] = -k*vx[i];
}
if (y[i] > 100) {
y[i] = 100;
vy[i] = -k*vy[i];
}
if (y[i] < 0) {
y[i] = 0;
vy[i] = -k*vy[i];
}
Console.ForegroundColor = colors[i];
PutString(x[i], y[i], "O");
}
Console.SetCursorPosition(0, 0);
Thread.Sleep(50);
}
Console.ReadKey(true);
}
}