Game
Документација за “NO redrawing NO jumping”
*Објаснување на проблемот
Играта претставува поедноставна имплементација на веќе познатата игра“One touch drawing ”. Составена е од 12 графови кои всушност ги репрезентираат левелите на играта. Основните правила за начинот на игра како што кажува и самото име на играта (“NO redrawing NO jumping”) се да се измине секоја форма без да се прецрта патеката од едно до друго теме два пати. Скокање од едно на друго теме без да се поврзани меѓусебно не е дозволено . Со успешно прецртување на секоја форма (граф) се ослободува секој нареден левел. За секој неуспешен обид да ја прецртате формата рестартирајте го левелот ;)
*Решение на проблемот
За реализација на играта имлементирани се 4 класи и 3 форми.
Во првата класа (Node) се чуваат информации за позицијата на јазлите односно нејзините координати во фомата и бојата на јазлите. Во неа има 2 методи, DrawNode(Graphics g) со помош на кој се исцртува јазелот и IsHit(int x, int y) кој го проверува секој клик на формата дали е погоден некој од јазлите.
Втората класа (Edge) содржи 2 објекти од класата Node, бидејќи реброто се исцртува помеѓу два јазли, и боја на реброто, а истото се исцртува со помош на имплементираниот метод во истата класа DrawEdge(Graphics g).
Во третата класа (Graph) има 2 листи , една е листа од јазли, а другата листа од ребра, и една целобројна променлива која го содржи бројот на јазли. Со методот DrawGraph(Graphics g, List lst, List lste) се изминуваат двете листи и се исцртуваат нивните елементи.
Последната класа (Game) содржи листа од графови, објекти од класата Graph, и целобројна променлива која ќе го чува бројот на графот кој е отворен. Во конструкторот на класата се исцртуваат графовите.
*Опис на имплементација на MouseClick event
Во настанот Play_MouseClick каде што Play е името на формата во која се исцртуваат графиците, е имплементацијата за играта. Во настанот прво се изминуваат сите јазли од тој граф и се проверува дали previusPoint.IsEmpty, каде што previusPoint претставува точка во која се зачувува првото погодување на јазол во графот од страна на играчот со помош на функцијата node.IsHit(e.X, e.Y) која е имплеметирана во класата Node и проверува дали јазолот е погоден при клик на глувчето.Ако играчот го погодил јазолот тогаш :
previusPoint = node.Position;
node.color = Color.Pink;
и се повикува функцијата Invalidate() за повторно исцртување на графот каде веќе previusPoint ја содржи позицијата на првиот погоден јазол и неговата боја од црна се променува во розова. Ова се извршува само со првото погодување на јазолот при отварање на формата, а истото е имплементирано и на копчето refresh. Понатаму кога веќе previusPoint не е празно, односно кога веќе еднаш играчот има кликнато на формата и има погодено јазол од графот, при секое наредно кликање ако погоди јазол од графот во currentPoint се зачувува позицијата на моментално погодениот јазол, се изминуват сите ребра во тој граф и ако бојата на тоа ребро е црна (односно непроменета, бидејќи за исцртување на реброто во класата Edge се поставува бојата да е црна) се извршува
if ((edge.Node1.Position == previusPoint && edge.Node2.Position == currentPoint) || (edge.Node2.Position == previusPoint && edge.Node1.Position == currentPoint))
каде што се проверува дали постои ребро помеѓу тие два јазли и ако постои тогаш бројата на јазолот на кој е кликнато се променува од црна во розова, бојата на реброто што постои помеѓу тие два јазли се променува од црна во бела, се зголемува број на numEdges за еден (numEdges преставува број на ребра кои ја смениле својата боја од црна во бела), се поставува во previusPoint мометално јазолот врз кој е кликнато и се повикува функцијата Invalidate() за повторно исцртување на графот.
*Screenshots
Почетна форма за избор на нова игра или напуштање на играта.
Втора форма за избор на левел. Стартниот (прв) е секогаш отклучен , а секој следен се отклучува доколку предходниот е поминат.
Трета форма на која во зависност од тоа кој левел е селектиран се исцртува соодветната форма.
Изработиле:
Надица Цуцулова 115076
Анастасија Вршковска 115015
Ивана Трајкова 115072