Товарищи, такая беда - сестра попросила помочь ей задачки порешать/объяснить на шарпе, а я уже 3 года как не писал ничего, в шарпе порядком подзабыл. Наткнулся на задачку, что-то не получается никак ее решить.
Задача:
Представим себе что в центре экрана сидит жучок, который может перемещаться по прямой на указанное расстояние, и перемещаться налево и направо. У жучка есть перо которое может оставлять след, повторяющий движения жучка. Если перо опущено след остаётся, если перо поднято следа нет. Итак, жучок может выполнять следущие приказы: Forward-переместиться на заданое расстояние; Left-повернуть налево на заданный угол; Right-повернуть направо на заданый угол; PenUp-поднять перо ; PenDown-опустить перо. Реализовать процедуры Forward, Left, Right, PenUp, PenDown. Процедуры должны взаимодействовать через глобальные переменные xPos, yPos-координаты жучка на экране; Pen-признак , говорящий о том поднято перо или опущенно; Angle--угол, который образует текущее направление перемещения жучка с осью абцисс.
Необходимо написать 4 цифры - текущий год
Вот что-то попытался наговнокодить, н голова совсем не варит, может подскажете?
Код
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace _452г
{
class Program
{
static bool pen = true;
static int xPos = 10, yPos = 10, xNext = 10, yNext = 10;
static string curSymbol = ".";
static int angle = 0;
static void Main(string[] args)
{
Console.SetCursorPosition(xPos, yPos);
left(45);
forvard(2);
left(45);
forvard(2);
}
static void tmp()
{
xPos = xNext;
yPos = yNext;
}
static void movePos()
{
if((xNext > xPos)&&(yNext > yPos))
{
tmp();
xNext++;
yNext++;
}
if((xNext > xPos)&&(yNext < yPos))
{
tmp();
xNext++;
yNext--;
}
if((xNext < xPos)&&(yNext > yPos))
{
tmp();
xNext--;
yNext++;
}
if((xNext < xPos)&&(yNext < yPos))
{
tmp();
xNext--;
yNext--;
}
if ((xNext == xPos) && (yNext > yPos))
{
tmp();
yNext++;
}
if ((xNext == xPos) && (yNext < yPos))
{
tmp();
yNext--;
}
if ((xNext > xPos) && (yNext == yPos))
{
tmp();
xNext++;
}
if ((xNext < xPos) && (yNext == yPos))
{
tmp();
xNext--;
}
Console.SetCursorPosition(xPos, yPos);
}
static void forvard(int s)
{
for (int i = 0; i < s; i++)
{
if(pen)
Console.Write(curSymbol);
movePos();
changeSymbol();
}
}
static void left(int turn_angle)
{
angle += turn_angle;
changeSymbol();
}
static void changeSymbol()
{
if (angle == 0)
{
curSymbol = "--";
xNext++;
}
if (angle == 45)
{
curSymbol = "/";
xNext++;
yNext--;
}
if (angle == 90)
{
curSymbol = "|";
yNext--;
}
if (angle == 135)
{
curSymbol = "";
xNext--;
yNext--;
}
if (angle == 180)
{
curSymbol = "--";
xNext--;
}
if (angle == 225)
{
curSymbol = "/";
xNext--;
yNext++;
}
if (angle == 270)
{
curSymbol = "|";
yNext++;
}
if (angle == 315)
{
curSymbol = "";
xNext++;
yNext++;
}
if (angle == 360)
{
curSymbol = "--";
xNext++;
}
}
static void right(int turn_angle)
{
angle -= turn_angle;
changeSymbol();
}
static void penUp()
{
pen = false;
}
static void penDown()
{
pen = true;
}
}
}