Informatika gyűjtemény

Egy szinttel feljebb 5. óra - Karaktergrafika

2004050607080910

NézetNyomtat

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
DarkBluesö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);
        //NE WriteLine legyen, mert görget

        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);

        //nos azért a Write is görgetne, tehát
        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 (= 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 (= 0; j < 80; j++) {
            for (= 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();
        //innentől r-et véletlenszerű számok készítésére használhatjuk
        
        for (= 0; j < 80; j++) {
            //véletlenszerű szám 0 és 79 között
            oszlop = r.Next(0, 80);
            
            for (= 0; i < 23; i++) {
                szam = r.Next(0, 10);
                //véletlenszerű szám 0 és 10 között
                
                Console.SetCursorPosition(oszlop, i);
                if (szam % 4 == 0) {
                    //a 4-el osztható számok fehérek
                    Console.ForegroundColor = ConsoleColor.White;
                } else {
                    //a 4-el nemosztható számok zöldek
                    Console.ForegroundColor = ConsoleColor.Green;
                }
                
                Console.Write( szam );
                Thread.Sleep(20);
            }
        }
    
        Console.ForegroundColor = ConsoleColor.Gray;
        Console.Clear(); //töröljük a képernyőt
        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)
    {
        //gyorsulás-vektor:
        double ax = 0;
        double ay = 1;

        //hely-vektor
        double x = 0;
        double y = 20;
        
        //sebesség-vektor
        double vx = 1;
        double vy = 0;

        //egy lépés ideje
        double dt = 1.0;
        
        int kx, ky; //a képernyő-koordinátákra átváltott helyvektor

        while (Console.KeyAvailable == false) {
            //új helyzet
            x = x + vx * dt + ax*dt*dt / 2;
            y = y + vy * dt + ay*dt*dt / 2;
            
            //új sebesség
            vx = vx + ax*dt;
            vy = vy + ay*dt;
            
            //visszapattanások
            if (> 100) {
                x = 100;
                vx = -vx;
            }
            if (< 0) {
                x = 0;
                vx = -vx;
            }
            if (> 100) {
                y = 100;
                vy = -vy;
            }
            if (< 0) {
                y = 0;
                vy = -vy;
            }
            
            kx = (int) (/ 5);
            ky = (int) (/ 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) {
            // golyók régi helyének törlése
            for (int i = 0; i < 3; i++) {
                PutString(x[i], y[i], " ");
            }
            // golyók új helyének kiszámítása+rajzolád
            for (int i = 0; i < 3; i++) {
                //i-edik golyó
                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);
    }
}