Sunteți pe pagina 1din 20

COLEGIUL NAȚIONAL „GHEORGHE ŢIŢEICA”

MONKEY
ESCAPE
SERBAN ANDREI OCTAVIAN
CLASA A XII-A E

PROFESOR COORDONATOR:
SERBAN OTILIA

DROBETA TURNU-SEVERIN
- APRILIE 2023 -

1
Cuprins

Argument……………………………………………………………... 3

Medii de programare folosite…………………………….


………......................................... 4

Prezentarea
aplicaţiei………………………………………………....................... 7

Implementare………………………………………………………… 12

Resurse minime necesare…………………………………………… 20

2
Argument
Monkey Escape a fost creat pentru a oferi jucătorilor o experiență
distractivă și antrenantă.Astfel,jucătorul trebuie să colecteze toate bananele de
pe hartă pentru a deschide ușa și a câștiga jocul. Jocul are, de asemenea
obstacole și inamici care îl pot omorî pe jucător, ceea ce adaugă un nivel de
dificultate.

Jucătorul este o maimuță, controlată prin intermediul tastelor săgeți, iar


săriturile se fac cu tasta spațiu. Pe măsură ce jucătorul colectează banane,
scorul crește și, atunci când se colectează toate bananele, ușa se va deschide,
iar jucătorul va putea câștiga jocul.

Jocul oferă, de asemenea, o varietate de elemente interactive, inclusiv


lifturi, obstacole și inamici, care vor pune la încercare abilitățile jucătorilor.Prin
urmare,ei trebuie să fie atenți la inamici și să se ferească de țepi, pentru că la
intrarea în contact cu acestea, vor muri și vor trebui să înceapă din nou nivelul.
Deci, pregătiți-vă să vă antrenați reflexele și să vă distrați în timp ce explorați
lumea jocului!

3
Medii de programare utilizate

Microsoft Visual Studio este un mediu de dezvoltare integrat (integrated


development environment - IDE) de la Microsoft. Acesta poate fi folosit pentru a
dezvolta aplicaţii consolă şi aplicații cu interfaţă grafică pentru toate platformele
suportate de Microsoft Windows (ex. .NET Framework, Windows Mobile etc).
Microsoft Visual Studio oferă editor, compilator/debugger și mediu de
proiectare (designer) pentru mai multe limbaje de programare. Limbaje de
programare incluse: Microsoft Visual C++, Microsoft Visual C#, Microsoft Visual
Basic, Microsoft Visual Web Developer, Team Foundation Server. Limbaje
anterioare: Visual FoxPro (eliminat în 2007), Visual SourceSafe (întrerupt
începând cu Visual Studio 2008), Microsoft Visual J++/ Microsoft Visual J #
(întrerupt începând cu Visual Studio 2008), Visual InterDev (înlocuit cu Microsoft
Visual Web Developer). Pe lângă limbajele amintite anterior, Microsoft Visual
Studio oferă suport și pentru alte limbaje, cum ar fi M, Python, Ruby. De
asemenea, sprijină XML/XSLT, HTML/XHTML, JavaScript și CSS. Visual studio
este oferit în mai multe variante: Express, Professional, Premium, Ultimate, Test
Professional.
.NET Framework este o platformă/cadru (Framework) de dezvoltare
software unitară, înzestrată cu un set mare de clase, structuri, enumerări etc.,
organizate într-un set de spaţii de nume (namespaces) bazate pe un limbaj
comun. .NET Framework este o componentă livrată împreună cu sistemul de
operare Windows. În imaginea de mai jos este sumarizat istoricul versiunilor si
arată versiunea instalată de fiecare versiune de Windows.
Tehnologia .NET pune laolaltă mai multe tehnologii (ASP, XML, OOP,
SOAP, WDSL, UDDI) şi limbaje de programare (ex.: C++, VB, C#) asigurând,
totodată, atât portabilitatea codului compilat între diferite calculatoare cu sistem
Windows, cât şi reutilizarea codului în programe, indiferent de limbajul de
programare utilizat. Pentru a fi integrate în platforma .NET, limbajele de
programare sus amintite respectă un set de caracteristici de bază Common
Language Specification (CLS), astfel asigurându-se interoperabilitatea între
aplicaţii, indiferent de limbajul folosit pentru crearea acestora. CLS-ul definește și
un set de tipuri - Common Type System (CTS). Ca elemente de bază, limbajele
de programare au: clase, interfeţe, delegări, tipuri valoare şi referinţă, iar ca
mecanisme: moştenirea, polimorfismul şi tratarea excepţiilor. Limbajele au o
platformă comună de executare numită Common Language Runtime (CLR).

4
Toate aceste limbaje folosesc un ansamblul de biblioteci necesare în realizarea
aplicaţiilor desktop sau Web, numit Framework Class Library (FCL). În figura de
mai jos este arhitectura pentru .NET Framework.
Un program scris într-unul dintre limbajele .NET conform Common
Language Specification (CLS) este compilat în Microsoft Intermediate Language
(MSIL sau IL). Codul astfel obţinut are extensia ".exe", dar nu este direct
executabil, ci respectă formatul unic MSIL. CLR include o maşină virtuală
asemănătoare cu o maşină Java, ce execută instrucţiunile IL rezultate în urma
compilării. Maşina foloseşte un compilator special JIT (Just In Time).
Compilatorul JIT analizează codul IL corespunzător apelului unei metode şi
produce codul maşină adecvat şi eficient. El recunoaşte secvenţele de cod
pentru care s-a obţinut deja codul maşină adecvat, permiţând reutilizarea
acestuia fără recompilare, ceea ce face ca, pe parcursul rulării, aplicaţiile .NET
să fie din ce în ce mai rapide.
Faptul că programul IL produs de diferitele limbaje este foarte asemănător
are ca rezultat interoperabilitatea între aceste limbaje. Astfel, clasele şi obiectele
create într-un limbaj specific .NET pot fi utilizate cu succes în altul. Pe lângă cele
de mai sus, CLR-ul se ocupă și de gestionarea automată a memoriei (eliberarea
automată a zonelor de memorie asociate unor date devenite inutile). Privitor la
portabilitate, .NET Framework are la bază standardul Common Language
Infrastructure, ceea ce face ca aplicaţiile .NET să ruleze, în afară de Windows, şi
pe unele tipuri de Unix, Linux, Solaris, Mac OS X şi alte sisteme de operare.
Dintre avantajele utilizării platformei .NET Framework putem enumera:
oferă instrumente pe care le putem folosi şi în alte programe; oferă acces uşor la
baze de date; permite realizarea desenelor sau a altor elemente grafice. spaţiul
de nume System.Windows.Forms conţine instrumente (controale) ce permit
implementarea elementelor interfeţei grafice cu utilizatorul; oferă clase care
efectuează majoritatea sarcinilor uzuale cu care se confruntă, reducând astfel
timpul necesar dezvoltării aplicaţiilor.

5
Limbajul C#
Limbajul C# a fost dezvoltat de o echipă de ingineri de la Microsoft în
frunte cu Anders Hejlsberg (autorul limbajului Turbo Pascal şi membru al echipei
care a proiectat Borland Delphi). C# este un limbaj simplu, cu circa 80 de cuvinte
cheie şi 12 tipuri de date predefinite. El permite programarea structurată,
modulară şi orientată obiectual, conform perceptelor moderne ale programării
profesioniste. Principiile de bază ale programării orientate pe obiecte
(încapsulare, moștenire, polimorfism) sunt elemente fundamentale ale
programării C#. La baza acestuia stă limbajul C dar sunt preluate și principiile de
programare din C++. Sintaxa este apropiată și limbajului Java.
Au fost adăugate o serie de tipuri noi de date sau funcţiuni diferite ale
datelor din C++, iar în spiritul realizării unor secvenţe de cod sigure (safe), unele
funcţiuni au fost adăugate (de exemplu, interfeţe şi delegări), diversificate (tipul
struct), modificate (tipul string) sau chiar eliminate (moştenirea multiplă şi
pointerii către funcţii). Unele funcţiuni (cum ar fi accesul direct la memorie
folosind pointeri) au fost păstrate, dar secvenţele de cod corespunzătoare se
consideră „nesigure”. În momentul în care Microsoft a decis să susțină și să
dezvole C# s-a hotărât ca acesta să aibă o legatura deosebita cu mediul sau de
rulare, arhitectura .NET. Pe de o parte, C# a fost dezvoltat pentru crearea codului
pentru arhitectura .NET, iar pe de alta parte bibliotecile utilizate de C# sunt cele
ale arhitecturii .NET. Atunci cand este compilat un program C#, rezultatul
compilarii nu este un cod executabil ci se se produce un fisier într-un limbaj.
Acest fisier IL poate fi copiat in orice calculator care dispune de .NET CLR, prin
intermediul compilatorului JIT (Just In Time), motorul comun de pogramare
transforma codul intermediar in cod executabil.

6
Prezentarea aplicaţiei
Pentru a câștiga jocul, trebuie să colectezi toate bananele afișate pe ecran
și să ajungi la ușa de ieșire (dacă a fost deblocată). In colectarea bananelor,,
trebuie să eviți obstacolele și inamicii, altfel vei pierde odata cu atingerea
acestora.

În prima secțiune, sunt declarate variabilele bool (goLeft, goRight, jumping,


deblocare, nou) care sunt utilizate ulterior pentru a controla acțiunile personajului
si variabile int pentru a seta viteza și scorul jocului. În clasa Form1, se
inițializează componentele formularului. În Form1_Load, setăm culoarea
fundalului și stabilește că elementele nu sunt vizibile. În cazul în care variabila
“nou” este adevărată, este afișat un MessageBox cu instrucțiuni pentru joc.

7
În MainTimerEvent, sunt inițializate și actualizate elementele jocului.
Jucătorul se mișcă spre stânga sau spre dreapta în funcție de direcția indicată,
dar nu poate ieși din marginea ecranului. Imaginea jucătorului se schimbă în
funcție de direcția în care se mișcă. Background-ul jocului se mișcă în direcția
opusă în funcție de direcția indicată de jucator

8
Există o verificare a variabilei force, care este folosită pentru a controla
săritura jucătorului. Variabila jumping este setată la adevărat atunci când
jucătorul sare, iar false altfel. Forța este decrementată pe măsură ce jucătorul se
mișcă în sus.Atunci când forța ajunge la 0, jumping este setat la fals și jucătorul
cade înapoi la sol.

9
În interiorul buclei foreach sunt verificate coliziunile între jucător și
elementele de pe ecran.Astfel,jucatorul poate sa stea pe platforme,unde valoarea
sariturii este resetata. În cazul în care jucătorul atinge un obiect "banana", scorul
este crescut și obiectul dispare .
Dacă jucătorul intersectează un obstacol sau un inamic, jocul se oprește și
este afișat un mesaj de "Ai murit!" cu un buton pentru a restarta jocul. De
asemenea,daca scorul atinge valoarea maxima ,usa se deschide iar jucatorul
poate sa castige jocul.

10
De asemenea,daca scorul atinge valoarea maxima ,usa se deschide iar
jucatorul poate sa castige jocul,totodata putand sa fie rejucat.

IMPLEMENTARE
11
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace proiect_1
{
public partial class Form1 : Form
{
bool goLeft, goRight, jumping, deblocare;
//bool tips;
bool nou = true;

int jumpSpeed = 14;


int force = 6;
int score = 0;

int playerSpeed = 9;
int backgroundSpeed = 13;
int verticalSpeed = 7;
int spiderspeed = 3;
int nr = 1;

public Form1()
{
InitializeComponent();

private void Form1_Load(object sender, EventArgs e)


{

this.BackColor = System.Drawing.ColorTranslator.FromHtml("#1b4905");
pictureBox10.Parent = pictureBox1;
door.Parent = pictureBox1;
skinLift.Parent = pictureBox1;
skinObstacol.Parent = pictureBox1;

12
skinEnemy1.Parent = pictureBox1;
skinEnemy2.Parent = pictureBox1;
skinEnemy3.Parent = pictureBox1;

hitbox_enemy1.Visible = false;
hitbox_enemy2.Visible = false;
hitbox_enemy3.Visible = false;

lift.Visible = false;
obstacol.Visible = false;
hitbox_usa.Visible = false;
hitbox_pl.Visible = false;

if (nou == true)
{
nou = false;
MessageBox.Show("Te poți mișca cu ajutorul săgeților \nPoți sări pe space\nAi
grijă la inamici si la țepi\nColectează toate bananele pentru a scapa", "Instrucțiuni",
MessageBoxButtons.OK, MessageBoxIcon.Information, MessageBoxDefaultButton.Button1,
MessageBoxOptions.RightAlign | MessageBoxOptions.RtlReading);
}
}

private void MainTimerEvent(object sender, EventArgs e)


{
txtScore.Text = "Banane: " + score;
player.Top += jumpSpeed;
hitbox_pl.Top += jumpSpeed;
pictureBox10.Visible = false;
if (goLeft == true && hitbox_pl.Left > 40) //miscare jucator si in acelasi timp,in
sensul opus,miscarea fundalului
{
player.Left -= playerSpeed;
hitbox_pl.Left -= playerSpeed;

if (goRight == true && hitbox_pl.Left + (hitbox_pl.Width + 40) <


this.ClientSize.Width)
{
player.Left += playerSpeed;
hitbox_pl.Left += playerSpeed;

}
if (goRight == false && goLeft == false)
{

13
player.Image = Properties.Resources.maimuta;
}

if (goLeft == true && pictureBox1.Left < 0)


{
pictureBox1.Left += backgroundSpeed;
MoveGameElements("fata");
}

if (goRight == true && pictureBox1.Left > -1100)


{
pictureBox1.Left -= backgroundSpeed;
MoveGameElements("spate");
}
if (force < 0) //saritura asa fel incat sa nu poti sa sari daca esti deja in aer
{
jumping = false;

if (jumping == true)
{
jumpSpeed = -14;
playerSpeed = 1;
force -= 1;
}
else
{
jumpSpeed = 14;

playerSpeed = 9;
}

foreach (Control x in Controls) //interactiunea cu diversele obiecte de pe


ecran
{
if (x is PictureBox && (string)x.Tag == "platform")
{
if (hitbox_pl.Bounds.IntersectsWith(x.Bounds) &&
player.Bounds.IntersectsWith(x.Bounds) && jumping == false)
{
force = 6;
player.Top = x.Top - player.Height + 10;
hitbox_pl.Top = x.Top - hitbox_pl.Height + 10;
jumpSpeed = 0;
}

x.BringToFront();
}

14
if (x is PictureBox && (string)x.Tag == "banana")
if (hitbox_pl.Bounds.IntersectsWith(x.Bounds) && x.Visible == true)
{
x.Visible = false;
score += 1;
}
if (x is PictureBox && (string)x.Tag == "obstacol"|| x is PictureBox &&
(string)x.Tag == "enemy")
{
if (hitbox_pl.Bounds.IntersectsWith(x.Bounds))
{
nou = false;
GameTimer.Stop();
MessageBox.Show("Ai murit!" + Environment.NewLine + "Apasa OK pentru
a te juca iar");
RestartGame();
}
}
}
if (score == 8) //indeplinire obiectiv joc
{

deblocare = true;
door.Visible = false;
pictureBox10.Visible = true;

}
/*
if (hitbox_pl.Bounds.IntersectsWith(hitbox_usa.Bounds) && deblocare ==
false&&tips==false) //usa inchisa
{
MessageBox.Show("Usa este incuiata" + Environment.NewLine + "Colecteaza
toate bananele pentru a o deschide");
tips = true;
}

*/
if (hitbox_pl.Bounds.IntersectsWith(hitbox_usa.Bounds) && deblocare == true)
//castigare joc
{
nou = false;
GameTimer.Stop();
MessageBox.Show("Ai castigat!" + Environment.NewLine + "Apasa OK pentru a
te juca iar");
RestartGame();
}

15
if (hitbox_pl.Top + hitbox_pl.Height-35 > this.ClientSize.Height)
//pierdere joc
{
nou = false;
GameTimer.Stop();
MessageBox.Show("Ai murit!" + Environment.NewLine + "Apasa OK pentru a te
juca iar");
RestartGame();
}
skinLift.Top += verticalSpeed; //miscare lift
lift.Top += verticalSpeed;

hitbox_enemy1.Top += spiderspeed; //miscare paienjeni


skinEnemy1.Top += spiderspeed;
hitbox_enemy2.Top += spiderspeed;
skinEnemy2.Top += spiderspeed;
hitbox_enemy3.Top += spiderspeed;
skinEnemy3.Top += spiderspeed;

if (hitbox_enemy1.Top > 55 || hitbox_enemy1.Top < -104)


{
spiderspeed = -spiderspeed;

if (lift.Top > 550 || lift.Top < 158)


{
verticalSpeed = -verticalSpeed;

private void KeyIsDown(object sender, KeyEventArgs e) //setare controale


{
if (e.KeyCode == Keys.Left)
{
goLeft = true;
}
if (e.KeyCode == Keys.Right)
{
goRight = true;
}
if (e.KeyCode == Keys.Space && jumping == false)

16
{
jumping = true;
}
}

private void KeyIsUp(object sender, KeyEventArgs e)


{
if (e.KeyCode == Keys.Left)
{
goLeft = false;
}
if (e.KeyCode == Keys.Right)
{
goRight = false;
}
if (jumping == true)
{
jumping = false;
}

}
private void Run(double i) //animatie alergat
{
if (goRight == true)
{
switch (i)
{

case 1:
player.Image = Properties.Resources.maimutadreapta1;
break;
case 2:
player.Image = Properties.Resources.maimutadreapta2;
break;
case 3:
player.Image = Properties.Resources.maimutadreapta3;

break;
}

}
else if(goLeft==true)
{
switch (i)
{

17
case 1:
player.Image = Properties.Resources.maimutastanga1;
break;
case 2:
player.Image = Properties.Resources.maimutastanga2;
break;
case 3:
player.Image = Properties.Resources.maimutastanga3;
break;

}
}
}
private void animatie_Tick(object sender, EventArgs e)
{

Run(nr);
nr++;
if (nr > 3)
{
nr = 1;
}

private void enemy2_Click(object sender, EventArgs e)


{

private void skinEnemy3_Click(object sender, EventArgs e)


{

private void CloseGame(object sender, FormClosedEventArgs e)


{
Application.Exit();
}

private void RestartGame()


{
Form1 newWindow = new Form1();
newWindow.Show();
this.Hide();
}

18
private void MoveGameElements(string direction) //miscare obiecte in
acelasi timp cu background-ul
{
foreach (Control x in Controls)
{
if (x is PictureBox && (string)x.Tag == "platform" || x is PictureBox &&
(string)x.Tag == "banana" || x is PictureBox && (string)x.Tag == "door" || x is PictureBox &&
(string)x.Tag == "enemy" || x is PictureBox && (string)x.Tag == "obstacol")
{
if (direction == "spate")
{
x.Left -= backgroundSpeed;
}
if (direction == "fata")
{
x.Left += backgroundSpeed;
}
}
}

}
}
}

RESURSE MINIME NECESARE


VISUAL STUDIO

● Procesor 1.8GHz
● Memorie:2 GB of RAM;

19
● Spatiu: 800MB
● Windows 11/10/8/7

20

S-ar putea să vă placă și