• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Arkanoid - Prace, subiektywna ocena

Mały hosting, OGROMNE możliwości
0 głosów
410 wizyt
pytanie zadane 31 maja 2015 w C i C++ przez Adrian1999 Nałogowiec (34,570 p.)

Witam wszystkich serdecznie, ostatnio zaczełem pracę nad Arkanoidem, no cóż idą dobrze lecz coś mi w kodzie nie pasuję, jeżeli mógłbym prosić o różnego rodzaju wskazówki co mógłbym zmienić, poprawić prosiłbym bardzo. Zależy mi na surowej ocenie ! Ponieważ człowiek jak wiadomo uczy się na błędach

/*COPYRIGHT BIELEC ADRIAN*/
/*Arkanoid.H*/
#pragma once
#include <SFML\Graphics.hpp>
#include <string>

class Arkanoid
{
private:
	
	sf::Vector2f rozmiaryokna; // trzyma rozmiar okna 
	sf::RenderWindow okno; 
	sf::RectangleShape paletka;
	sf::Event event;
	sf::CircleShape kolo;
	float vx= 0.9f,vy=-0.9f; // predkosc kola
public:
	Arkanoid(); // konstruktor
	void WindowsHandleEvent(); // główna pętla
	void glowna(); // tworzenie paletki piłki
private:
	void nadajv(); // nadawanie predkosci piłce
};

class level : 
	public sf::Drawable
{private:
	sf::RectangleShape cegla; // stwórz cegiełke
protected:
	int i=1; // zmienna definiująca pozycje cegły
	void sprawdz_czy_uderzyl(sf::CircleShape&, float&, float&);
	int ile = bricki; // ile cegiel jeszcze zostalo
	float y=1; // zmienna oznaczająca pozycje y 
	std::vector<sf::RectangleShape>cegielki; // trzyma ilość cegieł
	
public:
	
	int bricki; // ilość cegieł
	 void levelplay(); // rozstawianie bricków
	 void sprawdzkolizje(sf::CircleShape&,float&,float&); // jak nazwa mówi sprawdza kolizje
	 virtual void ustaw()=0;
private:
	virtual void draw(sf::RenderTarget& target, sf::RenderStates state) const // rysuje cegiełki
	{
		for (int q = 0; q <= ile; q++)
		{
			target.draw(cegielki[q],state);
		}
	}

};
class lvlv1 :
	public level
{
private:
	void ustaw();
	
};
class lvlv2 :
	public level
{
private:
	void ustaw();
};
/*COPYRIGHT BIELEC ADRIAN*/
/*Arkanoid.cpp*/
#include "Arkanoid.h"
#include <SFML\Graphics.hpp>
#include <string>
#include <iostream>
#include <vector>

Arkanoid::Arkanoid()
{
	// konstruktor
	kolo.setRadius(8);
	kolo.setPosition(100, 400);
	sf::Vector2f rozmiaryokna(1024, 612);
	paletka.setSize(sf::Vector2f(100, 20));
	paletka.setPosition(rozmiaryokna.x / 2-50, rozmiaryokna.y - 50);
	okno.create(sf::VideoMode(rozmiaryokna.x, rozmiaryokna.y), "Arkanoid!");
}
void level::levelplay()
{
	//rozstawianie briców
	for (int q = 0; q <= bricki; q++)
	{


		if (72 * i >= 1024 - 72) // jeżeli 72 * i jest większe od szerokości ekranu wyzeruj i czyli ustaw x na 72 i zwiększ y o półtora kwadrata
		{
			i = 1;
			y += 1;
		}
		cegla.setSize(sf::Vector2f(50, 15));
		cegla.setFillColor(sf::Color::Red);
		 cegla.setPosition(72 * i, y * 72); // stwórz cegłe
		cegielki.push_back(cegla); // następnie ją włóż do vektora
		i++; // zmienna która daje nam znać że jest o jedną cegłe więcej i należy następny klocek położyć w odległośći wyznaczoej wyżej

	
	}
}
void level::sprawdzkolizje(sf::CircleShape& kolo,float& vx,float& vy)
{
	

	for (int i = 0; i <= ile; i++)
	{
			// sprawdzanie czy nie ma kolizji
	sf::FloatRect bkolo = kolo.getGlobalBounds(); 
	sf::FloatRect bcegla = cegielki[i].getGlobalBounds();
	// jeżeli zaszła kolizja
	if (bcegla.intersects(bkolo))
	{
		std::cout << ile << std::endl;
		
	//usuń cegłe z vektora
		cegielki.erase(cegielki.begin()+i);
		// zmiejsz pętle rysowania o 1
		ile--;
		
		vy = -vy;
		
	}
	}

}
void lvlv2::ustaw()
{
	bricki = 30;
	ile = bricki;
	levelplay();
}
void Arkanoid::glowna()
{	//Polimorficzny wskaźnik ( ma służyć zmianie lvl-a)
	level *lvl1 = new lvlv1;
	lvl1->ustaw();
	while (okno.isOpen())
	{
		nadajv();
		lvl1->sprawdzkolizje(kolo,vx,vy);
		WindowsHandleEvent();
		okno.clear(sf::Color::Cyan);
		okno.draw(paletka);

			okno.draw(*lvl1);
		okno.draw(kolo);
		okno.display();

	}
}

void lvlv1::ustaw()
	{
		bricki = 20;
		ile = bricki;
		levelplay();
	}
void Arkanoid::WindowsHandleEvent()
{

	while(okno.pollEvent(event))
		{
			switch (event.type)
			{
			case sf::Event::Closed:
				okno.close(); break;
			case sf::Event::KeyPressed:
			{
				switch (event.key.code)
				{
				case sf::Keyboard::A: paletka.move(-25, 0); break;
				case sf::Keyboard::W: kolo.move(0, -25); break;
				case sf::Keyboard::S: kolo.move(0, 25); break;
				case sf::Keyboard::D: paletka.move(25, 0); break;
				}
			}break;
			}
		}
	
}
void Arkanoid::nadajv()
{
	kolo.move(vx, vy);
	///////FIlozofia odbijania
	// górna podstawa paletki
	if ((kolo.getPosition().x >= paletka.getPosition().x) && (kolo.getPosition().x <= paletka.getPosition().x + 100) && (kolo.getPosition().y >= paletka.getPosition().y))
	{
		vy = -vy;

	}
	// srodek paletki (piłka zwolni)
	else if (kolo.getPosition().x >= paletka.getPosition().x + 40 && kolo.getPosition().x <= paletka.getPosition().x + 60 && kolo.getPosition().y >= paletka.getPosition().y)
	{

		vy -=0.2f;
		if (vx <= 0)
			vx += 0.2f;
		else
			vx -= 0.2f;
		vx = -vx;	
		std::cout << vx<<std::endl;
	}
	//  lewy bok paletki
	else if (kolo.getPosition().x == paletka.getPosition().x && kolo.getPosition().y >= paletka.getPosition().y && kolo.getPosition().y <= paletka.getPosition().y + 20)
	{
		vy = -vy;
		vx = -vx;
	}
	// prawy bok paletki
	else if (kolo.getPosition().x == paletka.getPosition().x + 100 && kolo.getPosition().y >= paletka.getPosition().y && kolo.getPosition().y <= paletka.getPosition().y + 20)
	{
		vy = -vy;
		vx = -vx;
	}
	// wierzchołek paletki (prawy)
	else if (kolo.getPosition().x == paletka.getPosition().x + 100 && kolo.getPosition().y == paletka.getPosition().y)
	{
		
		vy = -vy;
		vx = -vx;
	}
	// wierzchołek paletki (lewy)
	else if (kolo.getPosition().x == paletka.getPosition().x && kolo.getPosition().y == paletka.getPosition().y-5)
	{
		vy = -vy;
	}

	// lewy bok ekranu
	else if (kolo.getPosition().x <= 0){
		vx = -vx;
	}
	// sufit
	else if (kolo.getPosition().y <= 0){
		vy = -vy;

	}
	// prawy bok ekranu
	else if (kolo.getPosition().x >= 1024)
		vx = -vx;

}

 

1 odpowiedź

+1 głos
odpowiedź 31 maja 2015 przez Pan Kulomb Pasjonat (18,630 p.)

Usuń zbędne komentarze jeśli można to osiągnąć poprzez zmianę nazwy np.

int i=1; // zmienna definiująca pozycje cegły

na

int brickPosition = 1;

Sformatuj kod np. to:

        okno.draw(paletka);
 
            okno.draw(*lvl1);
        okno.draw(kolo);
        okno.display();

 

komentarz 31 maja 2015 przez krecik1334 Maniak (58,390 p.)

Czysty kod... yes

Podobne pytania

0 głosów
1 odpowiedź 920 wizyt
pytanie zadane 11 grudnia 2017 w C i C++ przez seba360pl Początkujący (260 p.)
0 głosów
0 odpowiedzi 976 wizyt
pytanie zadane 10 listopada 2016 w Nasze projekty przez L33TT12 Gaduła (3,950 p.)
0 głosów
3 odpowiedzi 825 wizyt
pytanie zadane 28 maja 2015 w C i C++ przez Adrian1999 Nałogowiec (34,570 p.)

93,718 zapytań

142,631 odpowiedzi

323,262 komentarzy

63,266 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

Twierdza Linux. Bezpieczeństwo dla dociekliwych

Aby uzyskać rabat -10%, użyjcie kodu pasja-linux, wpisując go w specjalne pole w koszyku.

...