Skip to content

ivankrstev96/7MinutesInHELL

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

12 Commits
 
 
 
 
 
 
 
 

Repository files navigation

7MinutesInHELL

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

Изработиле:

Иван Крстев 151202

Ирина Ќосева 151036

Горан Илиоски 151102

Опис

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

Начин на играње

Правила

На мапата на играта се исцртуваат на полу-случајни камени пречки кои играчот не може да ги премине, ниту може да пука преку нив.

Играчот е опремен со пиштол со ограничена рата на пукање. За да добиете привремено убрзување на пиштолот, собирајте power-ups! Power-ups имаат некоја шанса да се појават на рандомизирана позиција во мапата и чекаат да бидат собрани 30 секунди, после што исчезнуваат. Ако играчот ги собере, пукањето му е убрзано неколку секунди.

Убивање на демон е наградено со 100 поени, додека демон кој сте го избегнале, но излегол од мапата само со 10.

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

Карактеристики

На главното мени, играчот може да започне нова игра, или пак да продолжи со претходно зачувана игра. (Слика 1)

Играта може да се паузира со притискање на копчето Esc. При пауза, се прикажува мени од кое може да се зачува играта. (Слика 3)

Кога се завршува со играта, поените се зачувуваат во Leaderboards, придружени со името кое сте го дале на почетокот на новата игра. Во Leaderboards се зачувани и се прикажуваат играчите со највисоките 10 поени. Играчот може да влезе во Leaderboards и кога не успеал да се врати преку порталот, но преминување во порталот му дава бонус од 10000 поени. (Слика 4)

Губење или победување на играта прикажува нова форма со соодветна порака.

Претставување на проблемот

Елементи кои се креираат со почеток на игра:

class GameDoc()

Во класата GameDoc() се зачувани сите објекти кои се употребуваат во една игра, односно играч (Player), името на играчот, порталот (Portal), како и листи од пречките (Rock), демоните (Demon), проектилите (Projectile) од пиштолот и power-ups (PowerUp) кои што се наоѓаат во моменалната игра.

Оваа класа, (како и останатите класи на елементите во играта од кои се чуваат објекти), поседуваат атрибут serializable, што го овозможува зачувувањето на моменталната/пуштањето на зачувана игра.

При креирање на нова игра, играчот се исцртува во центарот на мапата. Околу него се исцртуваат и пречките.

Во GameDoc() се дефинирани функции за движење на сите елементи на мапата, кои користат дополнителни функции од соодветните класи.

Game() форма (слика 2)

Во формава се чува објект од типот GameDoc(), кој што се ажурира во два типови моменти:

  1. Во зависност од тајмерите на играта

    • Timer1 – се користи за исцртување и проверка на колизии меѓу објектите во мапата на играта (играч/мапа, демон/играч, проектил/демон, играч/пречка, итн.).

    • Timer2 – се користи за одбројување на седумте минути кои ги има играчот, ажурирање на соодветната панела која го прикажува преостанатото време, како и подесување на тешкотијата на играта во зависност од изминување на времето. (See code in part 3)

  2. При некаков настан

    • KeyDown/KeyUp – за движење се користат копчињата Up, Down, Left, Right и за пукање копчето spacebar. За паузирање на играта се користи копчето ESC.

    • Button clicks – соодветно однесување при клик на некоја од опциите од менито при пауза.

Краток опис за класите користени во GameDoc – Player, Demon, Projectile, Rock, Portal, PowerUp

Секоја од класите се состои од атрибути за позиција, големина, BitMap (слика која се користи за објектот) и функции за цртање, проверка за колизија, поместување (Move) – каде што е потребно.

Пример код

Цртање на објектите

Во класата за пречка чуваме битмапа со сликата од камен. Во конструкторот користиме функција MakeTransparent() која ги прави проѕирни пикселите кои ја имаат истата боја со пикселот (1,1).

public Bitmap image;
public Rock(Point center)
{
      this.center = center;
      image = new Bitmap(Resources.rocks);
      image.MakeTransparent();
}
public void Draw(Graphics g)
{
      g.DrawImage(image, center.X - width / 2, center.Y - height / 2, width, height);            
}

Полу-случајни појавувања (пример – powerups)

На секои 15 секунди постои 40% шанса да се појави powerup. Тоа е направено со помош на Random r. Следната функција се наоѓа во функцијата на timer2 кој отчукува (се зголемува secs) на 1 секунда.

if(secs % 15 == 0)
{
      if (r.Next(10) < 4)
      {
           gd.addPowerUp(this.Width, this.Height, pnlStatus.Height, r);
      }
}

Зачувување поени во Leaderboards

Секој име-поени пар се зачувува во елемент од типот playerPoints, во листата players во LeaderBoardsList.

[Serializable]
public class playerPoints
{
    public String name;
    public int points;
    public playerPoints(String name, int points)
    {
        this.name = name;
        this.points = points;
    }
}
[Serializable]
public class LeaderBoardsList
{
    public List<playerPoints> players;
    public LeaderBoardsList()
    {
        players = new List<playerPoints>();
    }
    public void addNew(String name, int points)
    {
        if(players.Count >= 10)
        {
            players.Add(new playerPoints(name, points));
            players.Sort((a, b) => b.points.CompareTo(a.points));
            players.RemoveAt(10);
        }
        else
        {
            players.Add(new playerPoints(name, points));
            players.Sort((a, b) => b.points.CompareTo(a.points));
        }        
    }
}

Screenshots

Main menu Слика 1 - Main menu

In game Слика 2 - In game

Paused Слика 3 - Paused

Leaderboards Слика 4 - Leaderboards

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages