Informatika gyűjtemény

Egy szinttel feljebb 7. óra - Még több karaktergrafika

2004050607080910

NézetNyomtat

7. óra

Feladat

A cél egy olyan program készítése volt, ami egy figurát rajzol ki a képernyőre, amit az a,s,d,w billentyűkkel lehet mozgatni balra, le, jobbra és fel. Az első megoldás ez volt:
//a két perjellel kezdődő sorok csak megjegyzést tárolnak
//a fordító nem veszi figyelembe
using System;

namespace ora7
{
    class Program
    {
        public static void Main(string[] args)
        {
            int sor;
            int oszlop;
            char ch;
            sor = 1;
            oszlop = 1;
            while (true) //a következő kapcsoszárójel-pár belseje mindig újra meg újra lefut
            {
                Console.SetCursorPosition(oszlop, sor);
                Console.Write("#");
                
                //beolvassuk a lenyomott billentyűt ch-ba
                ch = Console.ReadKey(true).KeyChar;
                
                //kiszámoljuk a figura új helyét
                if (ch == 'w') {
                    //ha a w billentyűt nyomták le, akkor
                    //felfelé lép a figura, "csökken a sor"
                    sor = sor - 1;
                }//if
                if (ch == 's') {
                    //ha az s billentyűt nyomták le, akkor
                    //felfelé lép a figura, "nő a sor"
                    sor = sor + 1;
                }//if
                if (ch == 'd') {
                    //ha a d billentyűt nyomták le, akkor
                    //jobbra lép a figura, "nő az oszlop"
                    oszlop = oszlop + 1;
                }//if
                if (ch == 'a') {
                    //ha az a billentyűt nyomták le, akkor
                    //balra lép a figura, "csökken az oszlop"                   
                    oszlop = oszlop - 1;
                }//if
                //vissza a ciklus elejére
            }//while
        }//Main
    }//class
}//namespace
Ez a program "örökké" fog futni, mert a while ciklusban feltételnek true van megadva. Cseréljük le ezt, hogy az x betű kilépést okozzon. Ehhez a ch-nak kezdőértéket is kell adni. Egy másik probléma, hogy a képernyő széleit elérve hibát dob a programunk. Ennek elkerülésére if-eket lehet csinálni, amik vizsgálják, hogy a sor vagy oszlop változók értéke kilép-e a megfelelő tartományból, másszóval kilógnak-e a képernyőről.
using System;

namespace ora7
{
    class Program
    {
        public static void Main(string[] args)
        {
            int sor;
            int oszlop;
            char ch;
            sor = 1;
            oszlop = 1;
            ch = ' '; //adni kell valami kezdőértéket
                      //advanced megoldás: ch = (char) 0;
            while (ch != 'x')
            {
                Console.SetCursorPosition(oszlop, sor);
                Console.Write("#");
                
                ch = Console.ReadKey(true).KeyChar;
                
                if (ch == 'w') {
                    sor = sor - 1;
                }
                if (ch == 's') {
                    sor = sor + 1;
                }
                if (ch == 'd') {
                    oszlop = oszlop + 1;
                }
                if (ch == 'a') {
                    oszlop = oszlop - 1;
                }
                
                if (oszlop < 0) {
                    oszlop = 0;
                }
                if (oszlop > 79) {
                    oszlop = 79;
                }
                if (sor < 0) {
                    sor = 0;
                }
                if (sor > 23) {
                    sor = 23;
                }
                
            }
        }//public
    }//class
}//namespace
Ebből aztán lehet csinálni egy szines rajzolóprogramot.
using System;

namespace ora7
{
    class Program
    {
        public static void Main(string[] args)
        {
            int sor;
            int oszlop;
            char ch;
            sor = 1;
            oszlop = 1;
            ch = ' '; //adni kell valami kezdőértéket
                      //advanced megoldás: ch = (char) 0;
            while (ch != 'x')
            {
                Console.SetCursorPosition(oszlop, sor);
                Console.Write("#");
                
                ch = Console.ReadKey(true).KeyChar;
                
                if (ch == 'w') {
                    sor = sor - 1;
                }
                if (ch == 's') {
                    sor = sor + 1;
                }
                if (ch == 'd') {
                    oszlop = oszlop + 1;
                }
                if (ch == 'a') {
                    oszlop = oszlop - 1;
                }
                
                if (oszlop < 0) {
                    oszlop = 0;
                }
                if (oszlop > 79) {
                    oszlop = 79;
                }
                if (sor < 0) {
                    sor = 0;
                }
                if (sor > 23) {
                    sor = 23;
                }
                
                if (ch == '0') {
                    Console.ForegroundColor = ConsoleColor.Black;
                }
                if (ch == '1') {
                    Console.ForegroundColor = ConsoleColor.Gray;
                }
                if (ch == '2') {
                    Console.ForegroundColor = ConsoleColor.White;
                }
                if (ch == '3') {
                    Console.ForegroundColor = ConsoleColor.Blue;
                }
                if (ch == '4') {
                    Console.ForegroundColor = ConsoleColor.Green;
                }
                if (ch == '5') {
                    Console.ForegroundColor = ConsoleColor.Red;
                }
                if (ch == '6') {
                    Console.ForegroundColor = ConsoleColor.Yellow;
                }               
            }
        }//public
    }//class
}//namespace
Ebből pedig szines mászkáló nyuszit.
using System;

namespace ora7
{
    class Program
    {

        private static void Rajzol(int x, int y)
        {
            Console.SetCursorPosition(x, y);
            Console.Write(" (\\_/)");
            Console.SetCursorPosition(x, y+1);
            Console.Write("(='.'=)");
            Console.SetCursorPosition(x, y+2);
            Console.Write("(\")_(\")");
        }
        
        private static void Torol(int x, int y)
        {
            Console.SetCursorPosition(x, y);
            Console.Write("      ");
            Console.SetCursorPosition(x, y+1);
            Console.Write("       ");
            Console.SetCursorPosition(x, y+2);
            Console.Write("       ");
        }           
        
        public static void Main(string[] args)
        {
            int sor;
            int oszlop;
            char ch;
            sor = 1;
            oszlop = 1;
            ch = ' '; //adni kell valami kezdőértéket
                      //advanced megoldás: ch = (char) 0;
            while (ch != 'x')
            {
                Rajzol(oszlop, sor);
                ch = Console.ReadKey(true).KeyChar;
                Torol(oszlop, sor);
                
                if (ch == 'w') {
                    sor = sor - 1;
                }
                if (ch == 's') {
                    sor = sor + 1;
                }
                if (ch == 'd') {
                    oszlop = oszlop + 1;
                }
                if (ch == 'a') {
                    oszlop = oszlop - 1;
                }
                
                if (oszlop < 0) {
                    oszlop = 0;
                }
                if (oszlop > 79) {
                    oszlop = 79;
                }
                if (sor < 0) {
                    sor = 0;
                }
                if (sor > 23) {
                    sor = 23;
                }
                
                if (ch == '0') {
                    Console.ForegroundColor = ConsoleColor.Black;
                }
                if (ch == '1') {
                    Console.ForegroundColor = ConsoleColor.Gray;
                }
                if (ch == '2') {
                    Console.ForegroundColor = ConsoleColor.White;
                }
                if (ch == '3') {
                    Console.ForegroundColor = ConsoleColor.Blue;
                }
                if (ch == '4') {
                    Console.ForegroundColor = ConsoleColor.Green;
                }
                if (ch == '5') {
                    Console.ForegroundColor = ConsoleColor.Red;
                }
                if (ch == '6') {
                    Console.ForegroundColor = ConsoleColor.Yellow;
                }               
            }
        }//public
    }//class
}//namespace
Figyeld meg, mi történik, ha kimegy a nyúl a szélére! Mi lehet az oka?