Skip to content

emilijana404/Pac-Man

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

7 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Pac-Man

Проектна задача по предметот Визуелно програмирање изработена од:

  • Емилијана Јовковска (193079)
  • Јана Наумоска (193018)

Oпис на проектот

Windows Forms апликацијата што ја изработивме претставува едноставна верзија на познатата arcade игра Pac-Man дополнета со одредени функционланости.

Главната цел на играта е Pac-Man да изеде што е можно повеќе Pac-Dots движејќи се низ лавиринтот. Играта се состои од само едно ниво и заедно со своите правила за играње претставува вистински предизвик.

Стартување на апликацијата

При стартување на апликацијата се прикажува почетниот екран на кој се наоѓа progress bar и при негово исполнување играта е подготвена и се прикажува нов прозорец.

loading

Мени

Главното мени на играта се состои од Start и Instructions, со кои играчот соодветно може или да ја започне играта или пак да ги прочита правилата за играње. Дополнително е овозможено и аудио во позадина при отварање на самата форма - познатата интро мелодија на Pac-Man.

menu

Правила на игра

  • Играта ја започнувате со три животи

  • Се движите лево-десно-горе-доле со помош на стрелките на тастатурата (arrow keys)

  • Соберете што е можно повеќе Pac-Dots притоа:

    • Одбегнувајте ги духовите !
    • Не ги допирајте ѕидовите од лавиринтот !
  • При секој допир со духовите или некој од ѕидовите, губите живот !

  • Играта завршува кога го губите и последниот живот

  • Соодветно доколку ги соберете сите предвидени поени победувате

    • Еден Pac-Dot носи 1 поен
    • Екстра 15 поени носат црешите поставени на специфични места од лавиринтот
    • Вкупно 100 поени

rules

Пoчеток на игра

Започнувајќи од стартната позиција, Pac-Man треба да собере што е можно повеќе поени движејќи се низ лавиринтот. Секој дух е во различен дел од лавиринтот и има различна насока на движење. Дополнителна препрека се и движечките ѕидови од двете страни на лавиринтот. При секое собирање на Pac-Dots и цреши се вклучуваат различни аудиа, исто како и при допир на дух или ѕид. При губење на живот, Pac-Man се враќа на почетната позиција и трепка како дополнителен знак дека е изгубен живот.

game

Во текот на целата игра поените се пресметуваат во Score, додека највисокиот освоен score се прикажува во High Score и важи се додека е подигната апликацијата. Кога започнатата играта завршува се прикажува group box со соодветните информации како и соодветното аудио.

win

over

Доколку не сакаме да продолжиме со играње притискаме "Quit", каде што дополнително се отвара custom message box за потврда. Истиот message box се вклучува доколку сакаме да ја прекинеме веќе започнатата игра со притискање на копчето "Escape". Исто така за време на играње ако се изгубени еден или два живота и сакаме да започнеме одново притискаме на копчето "R", а доколку се изгубени сите животи, за започнување на нова игра се притиска "Enter".

quit

escape

Структура на проектот

Заедничко за сите класи е начинот на отварање на нова форма. Најпрво треба да се иницијализира нова форма, да се сокрие моменталната, па дури потоа да се прикаже ново иницијализираната форма и на крај да се затвори старата форма. Овие чекори се неопходни за да овозможиме убав тек на приказ на формите.

Покрај обичните слики во .png формат, се со цел за да се овозможи анимација на Pac-Man и на духовите, искористени се слики во .gif формат кои исто така се прикажуваат преку алатката PictureBox. Секој picture box во зависност од содржина на сликата, имаат одредена вредност за својството Tag со која се овозможува полесна манипулација на истите.

Дополнително за да се овозможи аудио за класите се користи библиотеката System.Media. Аудио фајловите се во формат .wav и се embedded in .resx за потоа со помош на SoundPlayer да се пуштат.

Load.cs

Во оваа класа е дефиниран изгледот и акцијата на progress bar преку тајмер. На секое отчукување на тајмерот се зголемува opacity за одредена вредност и кога ќе се постигне максималната вредност тајмерот се прекинува и се прикажува новата форма (затвора старата).

Menu.cs

Menu класата е класа во која се дефинираат акциите при клик на копчињата "Start" и "Instructuions" - отварање/затварање на форми.

Rules.cs

Едноставна класа во која е дефинирата акцијата при клик на копчето "Back" - отварање/затварање на формa.

MessageBox

Класа во која се креира custom message box. Креирана е обична Windows форма, на која покрај естетскиот изглед и се додадени и две копчиња за Yes и No со соодветните вредности за DialogResult = Yes/No. Дополнително на самата форма и се додадени својства како на message box:

  • Locked = True
  • StartPosition = CenterScreen
  • CancelButton = btnNo (името на копчето No)
  • MaximizeBox & MinimizeBoxe = False

Во самата класа е креирана функција ShowBox() со која се иницијалицира нов message box со соодветната лабела поставена во формата како порака, за потоа на ново иницијализираниот message box да се повика ShowDialog().

static MessageBox newMessageBox;

        public void ShowBox(string txtMessage)
        {
            newMessageBox = new MessageBox();
            newMessageBox.lblMessage.Text = txtMessage;
            newMessageBox.ShowDialog();
        }

Game.cs

Главна класа која што ја содржи логиката за функционалностите на играта.

  • keyDown() & keyUp() - ги дефинираат акциите при клик на соодветните копчиња од тастатурата

  • life_index() - проверка на бројот на животи и извршување на соодветната акција

  • gameTimer() - функција во која се одвиваат сите акции кои се од голема важност за самата игра

    • менување на вредностите на Score и High Score, како и проверка на тоа дали е достигнат предвидениот score, за потоа превземање на соодветните акции (вклучување аудио, означување крај на играта, прекинување на тајмерот и приказ на group box со соодветната порака)
    • одредување на брзината и насоката на движење на духовите, ѕидовите и на Pac-Man
    • проверка дали Pac-Man е во судир со нешто и во зависност од тоа со кој има интеракција, се превземаат различни акции (вклучување различно аудио, зголемување на score за одредена вредност, повикување на дополнителен тајмер, одредување на нова почетна позиција на Pac-Man, повикување на функцијата life_index() или намалување на бројот на животи)
  • gameReset() - поставување на почетни вредности за брзина, локација и видливост на елементите како и започнување на тајмерот

  • gameOver() - прекин на играта (означување крај на играта, прекинување на тајмерот и приказ на group box со соодветната порака)

  • HighScore() - помошна функција која овозможува обновување на high score, со тоа што поставува 0 за соодветната променлива која е динамички зачувана во Settings

  • PacmanTimer() - го дефинира дополнителниот тајмер и го започнува истиот

private void PacmanTimer()
        {
            if (blinkTimer.Enabled == false)
            {
                blinkTimer.Interval = 80;
                blinkTimer.Tick += new EventHandler(blinkTimer_Tick);

                timerMax = 0;

                blinkTimer.Start();
            }
            else
            {
                timerMax = 0;
            }
        }       

Дополнителниот тајмер е вклучен за помош при симулирање на анимација - трепкање. Првично тајмерот не е вклучен и се дефинира интервал на тајмерот во милисекунди, акцијата на секој негов тик, поставување на вредноста на timerMax да е 0, се со цел да се "контролира анимацијата" и на крај започнување на тајмерот. Дополнително доколку тајмерот е веќе вклучен, вредноста на timerMax повторно да се постави на 0

  • blinkTimer_Tick() - овозможува "трепкање" на Pac-Man
private void blinkTimer_Tick(object sender, EventArgs e)
        {
            if (timerMax < 10)
            {
                pacman.Visible = !pacman.Visible;
                timerMax++;
            }
        }

При секој тик на дополнителниот тајмер, да се менува видливоста на picture box именуван pacman и со тоа да се зголемува максималната вредност на тајмерот

  • btnQuit_Click() - отварање на нов custom message box
private void btnQuit_Click(object sender, EventArgs e)
        {
            MessageBox messageBox = new MessageBox();

            if (messageBox.ShowDialog() == DialogResult.Yes)
            {
                HighScore();
                Application.Exit();
            }
            else
            {
                this.ActiveControl = null;
            }
        }

Кога играта ќе заврши, доколку корисникот го притисне копчето "Quit" се прикажува message box со порака "Are you sure you want to exit?". Доколку се притисне "Yes", се повикува функцијата HighScore() со која "го пребришува" највисокиот score постигнат за време на играње, апликацијата се затвара и со тоа играта е спремна за повторно стартување на апликацијата. Но доколку корисникот погрешка стиснал на копчето "Quit" или првично сакал да ја затвори апликацијата, се предомислил и притиснал "No", тогаш message box се затвара и може да притисне "Enter" за започнување на нова игра. Ваков тек на настани се постигнува со тоа што ActiveControl на message box (кој потекнува од формата MessageBox) се поставува на null, од причина што целиот фокус на формата Game по default го превзема ново отворената форма MessageBox и доколку се обидеме да притиснеме "Enter" без притоа да го тргнеме фокусот од MessageBox, цело време ќе се притиска копчето "Quit".

  • Game_FormClosed() - доколку апликацијата се затвори на "X" од самата форма, повторно да се повика HighScore()

About

Проектна задача по предметот Визуелно програмирање

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages