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

Arkanoid - Prace, subiektywna ocena

Object Storage Arubacloud
0 głosów
292 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ź 690 wizyt
pytanie zadane 11 grudnia 2017 w C i C++ przez seba360pl Początkujący (260 p.)
0 głosów
0 odpowiedzi 862 wizyt
pytanie zadane 10 listopada 2016 w Nasze projekty przez L33TT12 Gaduła (3,950 p.)
0 głosów
3 odpowiedzi 666 wizyt
pytanie zadane 28 maja 2015 w C i C++ przez Adrian1999 Nałogowiec (34,570 p.)

92,576 zapytań

141,426 odpowiedzi

319,652 komentarzy

61,961 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.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...