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:
using System;
namespace ora7
{
class Program
{
public static void Main(string[] args)
{
int sor;
int oszlop;
char ch;
sor = 1;
oszlop = 1;
while (true)
{
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;
}
}
}
}
}
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 = ' ';
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;
}
}
}
}
}
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 = ' ';
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;
}
}
}
}
}
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 = ' ';
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;
}
}
}
}
}
Figyeld meg, mi történik, ha kimegy a nyúl a szélére! Mi lehet az oka?