Skip to content

antonio-ivanovski/rocket-science

Repository files navigation

„Rocket Scince Games“

Антонио Ивановски
Петар Папалевски
Трајче Шопоски

За игрите

Овој проект претставува колекција од три игри: XOception, Знамиња на држави и Меморија. Тие се имплементирани како независни, но на почетниот прозорец преку едноставен интерфејс играчот си избира која игра сака да ја игра.

Слика со имиња за објектите на екранот

Tic-Tac-Toe-ception

Добродојдовте во Tic-Tac-Toe-ception!

Основни работи за играта

Играта зодржи една главна Tic-Tac-Toe табла, но во секоја нејзина келија се наоѓа уште една стандарна (мини) Tic-Tac-Toe табла. Слика со имиња за објектите на екранот

Играта започнува со сите мини табли отворени за игра. Следната мини табла која ќе се отвори, се одлучува според келијата која е кликната во минатото движење во мини таблата. Слика со концепт на кој се менува отворената табла

Пример: Ако играчот со X изигра во горно-левата келија, играчот со O „мора“ да игра во горно-левата мини табла. Ако мини таблата е веќе освоена од некој играч, тогаш играчот на ред може да игра во сите табли.

Ако една мини табла е нерешена, тогаш таа мини табла се преигрува одново од почеток. Слика со имиња за објектите на екранот Слика со имиња за објектите на екранот

Како до победа:

Да се победи една мини табла, треба да имате 3 исти во редица, колона или дијагонала. Да се победи играта, треба да имате 3 победени мини табли во една редица, колона или дијагонала. Слика со имиња за објектите на екранот Слика со имиња за објектите на екранот

Имплементација

Имплементацијата на играта е катастрофа. Во формата се наоѓат 81 копче кој се задолжени за прикажување и контролирање на играта. Во позадина се наоѓа класа која ја чува моменталната состојба на играта заедно со главната табла. Исто така преку ова метода се бира мини таблата која ќе се игра следна, и прикажвување на лабелите која некоја е освоена. Главната табла е класа која содржи 9 мини-табли, заедно со методите кој одлучуват дали има победа на цела главна табла. Малите табли чуваат своја состојба (playing, x-won, o-won) и дуплицирани методи од главната табела.

Сакав играта да биде комплетно моја имплементација и не гледав други кодови кој би ми помогнале, па можи затоа наидов на голем број на проблеми и мораше да користам не многу елегантни решенија. Научив многу од грешките кој ги направив, кој ќе поправам во наредната верзија на играта.

Знамиња на држави

Основни работи за играта

Играта се состои од една почетна форма во која во средината во еден TextBox се испишува името на една случајно генерирана држава. Под случајно генерираната држава се одбираат 4 случајни знамиња кои се прикажуваат во PicturesBox. Кога корисникот ќе одбере една од четирите случајно избрани држави се проверува дали избраното знаме е точно. Доколку корисникот го погоди знамето се прикажува следната слика.

Слика со точен одговор

Доколку се избере погрешно на корисникот му се прикажува кое знаме е точното при што играта продолжува со следна генерирана држава.

Слика со точен одговор

Во играта постои тајмер кој е конфигуриран на 1 минута при што на корисникот со еден ProgressBar му се прикажува преостанатото време. Откако ќе истече тајмерот со помош на MessageBox се прикажува колу знамиња корисникот има погодено при што има опција за започнување на нова игра или крај на играњето.

Слика со точен одговор

Имплементација

Имплементацијата на играта е едноставна. Се состои само од една класа Game. Во класата Game во една листа се вчитуваат сите имиња на знамињата кои што се наоѓаат во папката Flags_Pictures. При стартување на играта генерираната листа се меша по случаен редослед со функцијата shuffle. На секое генерирање на ново прашање се прикажива едно точно знаменце и три неточни. Подолу се прикажани некој од поважните функции на класата Game.

/* метод за генерирање на наредно прашање
од листата со држави ја зема следната држава
при што избира 4 случајни знаменца како одговори 
од кој едното е точниот одговор
*/ 
void generateNextQuestion()

// метод кој ги превзема сите слики од фолдерот Flags_Pictures
private void getListOfCountry()
{
  DirectoryInfo MyRoot = new DirectoryInfo("Flags_Pictures");
  FileInfo[] fileList = MyRoot.GetFiles();
  foreach (FileInfo file in fileList)
  countryList.Add(file.Name);
}

// метод кој прима листа од String со држави и ги меша во случаен редослед
private List<String> shuffle(List<String> input)
{
  List<String> output = new List<String>();
  Random rnd = new Random();

  int FIndex;
  while (input.Count > 0)
  {
    FIndex = rnd.Next(0, input.Count);
    output.Add(input[FIndex]);
    input.RemoveAt(FIndex);
  }

  input.Clear();
  input = null;
  rnd = null;

  return output;
}

Меморија

Основни работи за играта

Целта на играта е да се отворат сите полиња по парови. По стартувањето на играта се појавува прозорец за избор на ниво.

Слика со почетниот прозорец за избор на ниво во играта Меморија

Има три нивоа Easy, Normal и Hard. Во Easy нивото има 35 секунди време за да се заврши играта и во табелата има 4x4 вкупно 16 полиња. Во нивоата Normal и Hard времето се зголемува на 55 секунди и 80 секунди, но бројот на полиња се зголемува на 24 односнно 36 полиња соодветно.

Менито за избор на ниво е составено од 4 копчиња, од кои 3 копчиња за избор на ниво и едно копче за почеток на играта. По селектирање на ниво на играта истото соодветно се означува и со притискање на копчето за старт започнува играта. Неможе да се стартува играта без избор на ниво, доколку се обидеме да го направиме тоа се испишува соодветна порака за грешка. По стартувањето на играта се појавува прозорец во кој случајно се генерираат соодветен број на полиња кои треба да се отворат и се прикажува преостанатото време за завршување на играта.

Слика од почетокот на играта Меморија

Полињата кои треба да се отворат се сместени во TableLayoutPanel и истите се имплементирани како Label со посебен фонт "Webdings" кој служи за прикажување на икони. Со кликање на некое од полињата тоа се отвора и треба да се кликне на уште едно поле, доколку двете полиња се исти тие се прикажуваат, доколку не се исти после неколку секунти тие повторно се затвораат.

Слика на играта Меморија во Normal ниво

Преостанатото време се прикажува во Label и ProgressBar. Со отворањето на сите полиња или со истекување на времето играта завршува и се прикажува порака во која ги пишува освоените поени и да избереме дали сакаме повторно да играме или да ја затвориме играта.

Слика со завршена Меморија игра

Имплементација

Играта Меморија е имплементирана со две форми, една за избор на ниво и една за самата игра. Има четири класи NewGame и EasyGame, NormalGame, HardGame кои наследуваат од класата NewGame. Во класата NewGame се чуваат информации за играта и се генерираат и иницијализираат полињата. Другите класи се користат за иницијализација на специфичните променливи на секое од нивоата, како што се преостанатото време и бројот на икони.

Во зависност кое ниво ќе ке избереме таа класа се креира во формата. Сите полиња во време на извршување случајно се генерираат, иницијализираат и додаваат во табелата. Исто така динамички се додава клик настанот на полињата(Label). Својствата на TableLayoutPanel се подесуваат во време на извршување во зависност од изборот на нивото.

Се користат два тајмери еден за времето после кое треба повторно да се затворат полињата доколку не се совпаѓаат и другит за одбројување на преостанатото време на играта.

При селектирањето на второто поле и во секој интервал на timer2 се проверува дали е завршена играта со настанот checkForWinner. Доколку е завршена играта се повикува настанот gameOver(). Кога ќе селектираме поле проверуваме дали тоа е прво или второ од парот, доколку е второ проверуваме дали се исти двете полиња доколку тие се исти се прикажуваат, доколку не се исти се затвораат после неколку секунди.

Подолу се прикажани некој од поважните функции на класата Game.

// метод кој случајно ги генерира полињата
private void generateIcons()
        {
            Random random = new Random();
            while (icons.Count != ColumnCount * RowCount)
            {
                char c = (char)random.Next(48, 122);
                if (!icons.Contains(Char.ToString(c)))
                {
                    icons.Add(Char.ToString(c));
                    Shuffle(icons);
                    icons.Add(Char.ToString(c));
                }
            }
        }

// метод кој ги додава полињата во табелата 
private void addIcons()
        {
            for (int i = 0; i < game.ColumnCount; i++)
            {
                for (int j = 0; j < game.RowCount; j++)
                {
                    Label label = new Label();
                    inicializeLabel(ref label);
                    label.Name = "label" + i + j;
                    tblPanel.Controls.Add(label, j, i);
                }
            }
        }

About

Rocket Science Games

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages