Π Π°Π·Π½ΠΎΠ΅

Sfml ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅: Π£Ρ€ΠΎΠΊ 1. ΠŸΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ SFML ΠΊ срСдС Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Microsoft Visual Studio 2013 | kychka-pc

ΠŸΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ SFML ΠΊ Visual Studio

Π‘Ρ€Π΅Π΄Π° программирования:Β 

Π’ этом ΡƒΡ€ΠΎΠΊΠ΅ я Ρ…ΠΎΡ‚Π΅Π» Π±Ρ‹ ΠΏΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ, ΠΊΠ°ΠΊ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ SFML ΠΊ срСдС Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Visual Studio.

SFML содСрТит ряд ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ для простого программирования ΠΈΠ³Ρ€ ΠΈ ΠΌΡƒΠ»ΡŒΡ‚ΠΈΠΌΠ΅Π΄ΠΈΠ° ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ.

ΠŸΠ΅Ρ€Π΅Π΄ Ρ‚Π΅ΠΌ ΠΊΠ°ΠΊ Π½Π°Ρ‡Π°Ρ‚ΡŒ. НуТно ΠΏΡ€ΠΎΠΉΡ‚ΠΈ ΠΏΠΎ ссылкС: http://www.sfml-dev.org/download/sfml/2.3.2/ (это ΠΎΡ„ΠΈΡ†ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΉ сайт) ΠΈ ΡΠΊΠ°Ρ‡Π°Ρ‚ΡŒ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ. Π’Ρ‹Π±ΠΈΡ€Π°ΠΉΡ‚Π΅ Π²Π΅Ρ€ΡΠΈΡŽ для своСй VS.

РаспаковываСм ΠΊΡƒΠ΄Π° Π²Π°ΠΌ ΡƒΠ³ΠΎΠ΄Π½ΠΎ, Π½Π° всякий случай ΡΡ‚Π°Ρ€Π°ΠΉΡ‚Π΅ΡΡŒ ΠΈΠ·Π±Π΅Π³Π°Ρ‚ΡŒ русских Π±ΡƒΠΊΠ² Π² ΠΏΠ°ΠΏΠΊΠ°Ρ… ΠΏΡƒΡ‚ΠΈ.

ЗапускаСм Visual Studio, Ρ„Π°ΠΉΠ»->ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ->ΠΏΡ€ΠΎΠ΅ΠΊΡ‚->пустой ΠΏΡ€ΠΎΠ΅ΠΊΡ‚. (Имя ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°, Ρ€Π΅ΡˆΠ΅Π½ΠΈΠΉ ΠΈ ΠΏΡƒΡ‚ΡŒ Π²Ρ‹Π±ΠΈΡ€Π°ΠΉΡ‚Π΅ сами).

ДобавляСм исходный ΠΊΠΎΠ΄ – для этого слСва Π² ΠΎΠ±ΠΎΠ·Ρ€Π΅Π²Π°Ρ‚Π΅Π»Π΅ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠΉ Π½Π°Ρ…ΠΎΠ΄ΠΈΠΌ Π²ΠΊΠ»Π°Π΄ΠΊΡƒ Β«Π€Π°ΠΉΠ»Ρ‹ исходного ΠΊΠΎΠ΄Π°Β»->ΠΏΡ€Π°Π²Ρ‹ΠΉ ΠΊΠ»ΠΈΠΊ->Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ->ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ элСмСнт->Ρ„Π°ΠΉΠ» C++ (имя main.cpp)->Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ.

Π”Π°Π»Π΅Π΅ вставляСм Π²ΠΎΡ‚ этот тСстовый ΠΊΠΎΠ΄ Π² Ρ„Π°ΠΉΠ» main.cpp

#include <SFML/Graphics.hpp>
Β 
int main()
{
	sf::RenderWindow window(sf::VideoMode(200, 200), "SFMLworks");
	sf::CircleShape shape(100.f);
	shape.setFillColor(sf::Color::Green);
Β 
	while (window.isOpen())
	{
		sf::Event event;
		while (window.pollEvent(event))
		{
			if (event.type == sf::Event::Closed)
				window.close();
		}
Β 
		window.clear();
		window.draw(shape);
		window.display();
	}
Β 
	return 0;
}

ПослС ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΠΈ запуска ΠΌΡ‹ сталкиваСмся с ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎΠΉ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΎΠΉ:

Для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ всё это Ρ€Π°Π±ΠΎΡ‚Π°Π»ΠΎ – Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ SFML.

Для Π½Π°Ρ‡Π°Π»Π°, всС дСйствия ΠΌΡ‹ Π΄Π΅Π»Π°Π΅ΠΌ для ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ Debug.

Π—Π°Ρ…ΠΎΠ΄ΠΈΠΌ Π²Π²Π΅Ρ€Ρ…Ρƒ Β«ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Β»->свойства β€œΠΈΠΌΡ проСкта”->свойства ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ->C++->ΠΎΠ±Ρ‰ΠΈΠ΅

Π’ ΠΏΡƒΠ½ΠΊΡ‚Π΅ Β«Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ΠΈ Π²ΠΊΠ»ΡŽΡ‡Π°Π΅ΠΌΡ‹Ρ… Ρ„Π°ΠΉΠ»ΠΎΠ² прописываСм ΠΏΡƒΡ‚ΡŒ Π΄ΠΎ Ρ€Π°Π½Π½Π΅Π΅ распакованного Π°Ρ€Ρ…ΠΈΠ²Π° с Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΎΠΉ (+ \include.)

НапримСр: C:\Program Files\SFML-2.3.2\include

Π—Π°Ρ‚Π΅ΠΌ ΠΈΠ΄Π΅ΠΌ Π² ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²Ρ‰ΠΈΠΊ->ΠΎΠ±Ρ‰ΠΈΠ΅ ΠΈ Π² ΠΏΡƒΠ½ΠΊΡ‚Π΅ Β«Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΒ» прописываСм ΠΏΡƒΡ‚ΡŒ ΠΊ ΠΏΠ°ΠΏΠΊΠ΅ lib;

Π”Π°Π»Π΅Π΅ ΠΈΠ΄Π΅ΠΌ Π² ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²Ρ‰ΠΈΠΊΠ΅ Π²ΠΎ Π²ΠΊΠ»Π°Π΄ΠΊΡƒ Π²Π²ΠΎΠ΄ ΠΈ Π² ΠΏΠ΅Ρ€Π²ΠΎΠΉ строкС Β«Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ зависимости» вписываСм ΠΏΠ΅Ρ€Π΅Π΄ всСми Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°ΠΌΠΈ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΡƒΡŽ строчку:

sfml-graphics-d.lib;sfml-window-d.lib;sfml-system-d.lib;sfml-audio-d.lib;

Волько Ρ‡Ρ‚ΠΎ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΠ»ΠΈ основныС Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Π΅ для Ρ€Π°Π±ΠΎΡ‚Ρ‹ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ.

ПослСдний ΡˆΡ‚Ρ€ΠΈΡ… – ΠΈΠ΄Π΅ΠΌ Π²ΠΎ Π²ΠΊΠ»Π°Π΄ΠΊΡƒ C++->прСпроцСссор ΠΈ Π² ΠΏΠ΅Ρ€Π²ΠΎΠΉ строкС Β«ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ прСпроцСссора» Π² самом Π½Π°Ρ‡Π°Π»Π΅ дописываСм: SFML_DYNAMIC;

Напоминаю, всС дСйствия ΠΌΡ‹ Π΄Π΅Π»Π°Π»ΠΈ для ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ Debug. ВсС Ρ‚ΠΎΠΆΠ΅ самоС Π½ΡƒΠΆΠ½ΠΎ ΠΏΡ€ΠΎΠ΄Π΅Π»Π°Ρ‚ΡŒ для ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ Release.
Π—Π°Ρ…ΠΎΠ΄ΠΈΠΌ Π²Π²Π΅Ρ€Ρ…Ρƒ Β«ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Β»->свойства β€œΠΈΠΌΡ проСкта”->свойства ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ. Π’ Π»Π΅Π²ΠΎΠΌ Π²Π΅Ρ€Ρ…Π½Π΅ΠΌ ΡƒΠ³Π»Ρƒ Π½Π°Ρ…ΠΎΠ΄ΠΈΠΌ ΠšΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ, Π½Π°ΠΆΠΈΠΌΠ°Π΅ΠΌ Π½Π° слайдСр ΠΈ Π²Ρ‹Π±ΠΈΡ€Π°Π΅ΠΌ Release.
И повторяСм нСсколько ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΡ… ΠΏΡƒΠ½ΠΊΡ‚ΠΎΠ².

Запустим ΠΈ словим ΠΎΡˆΠΈΠ±ΠΊΡƒ. Π—Π°Ρ‚ΠΎ собСрСтся ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ ΠΈ появится ΠΏΠ°ΠΏΠΊΠ° debug.

Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΈΠ΄Π΅ΠΌ Π² ΠΏΠ°ΠΏΠΊΡƒ Π±ΠΈΠ½Π°Ρ€Π½ΠΈΠΊΠΎΠ² β€œbin”, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ Π²Ρ‹ скачали ΠΈ распаковали с Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΎΠΉ (ΠΌΠΎΠΉ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ D:\SFML-2.2\bin\) ΠΈ ΠΊΠΎΠΏΠΈΡ€ΡƒΠ΅ΠΌ всё содСрТимоС этой ΠΏΠ°ΠΏΠΊΠΈ (dll Ρ„Π°ΠΉΠ»Ρ‹ Ρ‚ΠΈΠΏΠ° sfml-graphics-2.dll) Π² ΠΏΠ°ΠΏΠΊΡƒ с вашим ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠΌ Π² ΠΏΠ°ΠΏΠΊΡƒ debug (послС сборки появилась эта ΠΏΠ°ΠΏΠΊΠ°), Π½ΠΎ Π½Π΅ Π² Ρ‚ΠΎΡ‚ debug, Π³Π΄Π΅ Π»Π΅ΠΆΠΈΡ‚ Ρ„Π°ΠΉΠ» с исходным ΠΊΠΎΠ΄ΠΎΠΌ β€œmain.cpp”, Π° Ρ‚ΠΎΡ‚, Π³Π΄Π΅ появляСтся exe Ρ„Π°ΠΉΠ».

Π’ эту ΠΆΠ΅ ΠΏΠ°ΠΏΠΊΡƒ ΠΊΠΎΠΏΠΈΡ€ΡƒΠ΅ΠΌ ΠΈ Π²ΠΎΡ‚ эти Ρ„Π°ΠΉΠ»Ρ‹ :

msvcp100d.dll;msvcp110.dll;msvcp110d.dll;msvcr100d.dll;msvcr110.dll;msvcr110d.dll;

ВсС эти Ρ„Π°ΠΉΠ»Ρ‹ ΠΌΠΎΠΆΠ½ΠΎ ΡΠΊΠ°Ρ‡Π°Ρ‚ΡŒ Π² zip Π°Ρ€Ρ…ΠΈΠ²Π΅, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ я ΠΏΡ€ΠΈΠΊΡ€Π΅ΠΏΠΈΠ» снизу.

Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ ΠΌΠΎΠΆΠ½ΠΎ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ ΠΈ Ссли Π²Ρ‹ всё сдСлали ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ, Ρ‚ΠΎ ΡƒΠ²ΠΈΠ΄ΠΈΡ‚Π΅ Π·Π΅Π»Ρ‘Π½Ρ‹ΠΉ ΠΊΡ€ΡƒΠ³ ΠΊΠ°ΠΊ Π½Π° ΡΠΊΡ€ΠΈΠ½ΡˆΠΎΡ‚Π΅ Π½ΠΈΠΆΠ΅:

Если Π²ΠΎΠ·Π½ΠΈΠΊΠ»Π° Π²ΠΎΡ‚ такая ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°:

Π‘ΠΎΠ²Π΅Ρ‚ΡƒΡŽ Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΎΠΉ: Dll-Files Fixer.

ΠŸΡ€ΠΈΠΊΡ€Π΅ΠΏΠ»Π΅Π½Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ»Π Π°Π·ΠΌΠ΅Ρ€
msvcp.zip550.93 ΠΊΠ±
msvcr.zip1.61 Мб

ΠŸΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ SFML ΠΊ срСдС Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ DEV-CPP 5.11 | kychka-pc

Π”ΠΎΠ±Ρ€ΠΎΠ³ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ суток!

РСшил ΠΏΠΎΠΌΠΎΡ‡ΡŒ ΡΠΎΠ·Π΄Π°Ρ‚Π΅Π»ΡŽ сайта с Π½Π°ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ΠΌ Π΅Π³ΠΎ ΠΊΠΎΠ½Ρ‚Π΅Π½Ρ‚ΠΎΠΌ, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ ΠΎΠ±ΡƒΡ‡Π°ΡŽΡ‰ΠΈΠΌ ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»ΠΎΠΌ. Π’Π°ΠΊ ΠΊΠ°ΠΊ Π½Π° сайтС ΡƒΠΆΠ΅ Ρ€Π°Π·Π±ΠΈΡ€Π°Π»ΠΎΡΡŒ использованиС MS Visual Studio для сборки ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠ², я Ρ€Π°Π·Π±Π΅Ρ€Ρƒ использованиС связки SFML 2.4.2 ΠΈ срСды Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Dev-Cpp 5.11 с поставляСмым ΠΊ Π½Π΅ΠΌΡƒ компилятором TDM-GCC 4.9.2.

Π’Π°ΠΊ ΠΊΠ°ΠΊ данная ΡΡ‚Π°Ρ‚ΡŒΡ ΠΎ Β«ΠΏΡ€ΠΈΠΊΡ€ΡƒΡ‚ΠΊΠ΅Β» Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ SFML ΠΊ Dev-Cpp ΠΎΠΏΠΈΡΡ‹Π²Π°Ρ‚ΡŒ ΠΊΠ°ΠΊ достоинства ΠΈ нСдостатки использования Π΄Π°Π½Π½ΠΎΠΉ срСды, Ρ‚Π°ΠΊ ΠΈ всС Ρ‚ΠΎΠ½ΠΊΠΎΡΡ‚ΡŒ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ ΠΈ установки срСды смысла Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ‚, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ ΠΏΡ€ΠΈΠ²Π΅Π΄Ρ‘Ρ‚ ΠΊ Ρ€Π°Π·Π΄ΡƒΠ²Π°Π½ΠΈΡŽ ΡΡ‚Π°Ρ‚ΡŒΠΈ. Π­Ρ‚Π° ΡΡ‚Π°Ρ‚ΡŒΡ для Ρ‚Π΅Ρ…, ΠΊΡ‚ΠΎ сдСлал Π²Ρ‹Π±ΠΎΡ€ Π½Π° этой связкС.
Для Π½Π°Ρ‡Π°Π»Π° ΠΊΠ°Ρ‡Π°Π΅ΠΌ Ρ‚Ρ€Π΅Π±ΡƒΠ΅ΠΌΡ‹ΠΉ для нас Π³ΠΎΡ‚ΠΎΠ²Ρ‹ΠΉ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ:ΠΈ/ΠΈΠ»ΠΈ:Π’ ΠΊΡ€Π°ΠΉΠ½Π΅ΠΌ случаС Π·Π°Π³Ρ€ΡƒΠΆΠ°Π΅ΠΌ исходники ΠΈ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΡƒΠ΅ΠΌ сами. Как это Π΄Π΅Π»Π°Ρ‚ΡŒ написано здСсь. (Π°Π½Π³Π».яз)

ПослС Ρ‚ΠΎΠ³ΠΎ ΠΊΠ°ΠΊ Π·Π°Π³Ρ€ΡƒΠ·ΠΈΠ»ΠΈ, распаковываСм Π°Ρ€Ρ…ΠΈΠ² Π² ΡƒΠ΄ΠΎΠ±Π½ΠΎΠΌ для нас мСстС. Для сСбя сдСлал Ρ‚Π°ΠΊΠΎΠΉ Π²Ρ‹Π±ΠΎΡ€:
<мСсто размСщСния компилятора>/SFML/x32 , ΠΈ
<мСсто размСщСния компилятора>/SFML/x64
– ΠΎΠ±Π΅ вСрсии для Ρ€Π°Π·Π½Ρ‹Ρ… Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€. Если Π²Π°ΠΌ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠ° Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄Π½Π°, Ρ‚ΠΎ ΠΊΠ°Ρ‡Π°Π΅ΠΌ Π½ΡƒΠΆΠ½ΡƒΡŽ. ΠžΡΡ‚Π°Π²Π»ΡΠ΅ΠΌ лишь ΠΏΠ°ΠΏΠΊΠΈ: \bin, \include ΠΈ \lib.
ΠŸΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ΠΈΠΌ ΠΊ Ρ„ΠΈΠ½Π°Π»ΡŒΠ½ΠΎΠΉ части: ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅ΠΌ срСдС Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ мСсто располоТСниС всСх частСй Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ. ЗапускаСм IDE ΠΈ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ΠΈΠΌ Π² Π²Π΅Ρ€Ρ…Π½Π΅ΠΌ мСню: БСрвис -> ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ компилятора.
НаТимаСм Π½Π° Π²ΠΊΠ»Π°Π΄ΠΊΡƒ β€œΠšΠ°Ρ‚Π°Π»ΠΎΠ³ΠΈβ€ ΠΈ Π½Π°Ρ‡ΠΈΠ½Π°Π΅ΠΌ Π΄ΠΎΠ±Π°Π²Π»ΡΡ‚ΡŒ мСста располоТСний частСй SFML, набивая ΠΏΠΎΠ»Π½Ρ‹ΠΉ ΠΏΡƒΡ‚ΡŒ сами, Π»ΠΈΠ±ΠΎ находя ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ΠΈ Ρ‡Π΅Ρ€Π΅Π· ΠΊΠ½ΠΎΠΏΠΎΡ‡ΠΊΡƒ справа:Π”Π΅Π»Π°Π΅ΠΌ это для:
Β«ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹Β» – <мСсто размСщСния Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ>\bin,
Β«Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈΒ» – <мСсто размСщСния Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ>\lib,
Β«Π’ΠΊΠ»ΡŽΡ‡Π°Π΅ΠΌΡ‹Π΅ Ρ„Π°ΠΉΠ»Ρ‹ Π‘++Β» – <мСсто размСщСния Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ>\include,
– ΠΈ повторяСм для всСх Ρ‚Ρ€Π΅Π±ΡƒΠ΅ΠΌΡ‹Ρ… для вас Π½Π°Π±ΠΎΡ€ΠΎΠ² настроСк компилятора:

Π’Π΅ΠΏΠ΅Ρ€ΡŒ SFML ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ Π³ΠΎΡ‚ΠΎΠ²Π° для использования Π² Π²Π°ΡˆΠΈΡ… ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°Ρ…. Π’ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ ΡΡ‚Π°Ρ‚ΡŒΠ΅ я расскаТу Π½ΡŽΠ°Π½ΡΡ‹ использованиС Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ SFML Π² Π²Π°ΡˆΠΈΡ… ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°Ρ… Π² срСдС Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Dev-Cpp.

Π‘ΡƒΠ΄Ρƒ Π±Π»Π°Π³ΠΎΠ΄Π°Ρ€Π΅Π½, Ссли ΠΏΠΎΠ΄Π΅Π»ΠΈΡ‚Π΅ΡΡŒ:

Π£Ρ€ΠΎΠΊ 33 SFML C++, Π·Π°Π³Ρ€ΡƒΠΆΠ°Π΅ΠΌ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ | kychka-pc

#include <SFML/Graphics.hpp>

#include <SFML/Audio.hpp>

#include «view.h»

#include <iostream>

//#include <sstream>//сСйчас Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ. Ρ€Π°Π½ΡŒΡˆΠ΅ Π²Ρ‹Π²ΠΎΠ΄ΠΈΠ»ΠΈ тСкст ( Π² 13 ΠΎΠΌ ΡƒΡ€ΠΎΠΊΠ΅ )

#include «mission.h»

#include «iostream»

#include «level.h»

#include <vector>

#include <list>

Β 

Β 

Β 

using namespace sf;

////////////////////////////////////ΠžΠ±Ρ‰ΠΈΠΉ класс-Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒ//////////////////////////

class Entity {

public:

std::vector<Object> obj;

float dx, dy, x, y, speed,moveTimer;

int w,h,health;

bool life, isMove, onGround;

Texture texture;

Sprite sprite;

String name;

Entity(Image &image, String Name, float X, float Y, int W, int H){

x = X; y = Y; w = W; h = H; name = Name; moveTimer = 0;

speed = 0; health = 100; dx = 0; dy = 0;

life = true; onGround = false; isMove = false;

texture.loadFromImage(image);

sprite.setTexture(texture);

sprite.setOrigin(w / 2, h / 2);

}

Β 

FloatRect getRect(){

return FloatRect(x, y, w, h);

}

Β 

virtual void update(float time) = 0;//всС ΠΏΠΎΡ‚ΠΎΠΌΠΊΠΈ ΠΏΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‚ эту Ρ„-Ρ†ΠΈΡŽ

Β 

};

////////////////////////////////////////////////////ΠšΠ›ΠΠ‘Π‘ Π˜Π“Π ΠžΠšΠ////////////////////////

class Player :public Entity

{

public:

enum { left, right, up, down, jump, stay, right_Top } state;

int playerScore;

bool isShoot;

Β 

Player(Image &image, String Name, Level &lev, float X, float Y, int W, int H) :Entity(image, Name, X, Y, W, H ){

Β Β  playerScore = isShoot = 0; state = stay; obj = lev.GetAllObjects();

Β Β  if (name == «Player1»){

Β Β  sprite.setTextureRect(IntRect(4, 19, w, h));

Β Β  }

Β Β  }

Β 

Β Β  void control()

Β Β  {

Β Β  if (Keyboard::isKeyPressed){

Β Β  if (Keyboard::isKeyPressed(Keyboard::Left)) {

Β Β  state = left; speed = 0.1;

Β Β  }

Β Β  if (Keyboard::isKeyPressed(Keyboard::Right)) {

Β Β  state = right; speed = 0.1;

Β Β  }

Β 

Β Β  if ((Keyboard::isKeyPressed(Keyboard::Up)) && (onGround)) {

Β Β  state = jump; dy = -0.6; onGround = false;

Β Β  }

Β 

Β Β  if (Keyboard::isKeyPressed(Keyboard::Down)) {

Β Β  state = down;

Β Β  }

Β 

Β Β  if ((Keyboard::isKeyPressed(Keyboard::Right)) && (Keyboard::isKeyPressed(Keyboard::Up))) {

Β Β  state = right_Top;

Β Β  }

Β 

Β Β  /////выстрСл

Β Β  if (Keyboard::isKeyPressed(Keyboard::Space)) {

Β Β  isShoot = true;

Β Β  }

Β Β  }

Β Β  }

Β 

Β Β 

Β 

Β Β  void checkCollisionWithMap(float Dx, float Dy)

Β Β  {

Β 

Β Β  for (int i = 0; i<obj.size(); i++)

Β Β  if (getRect().intersects(obj[i].rect))

Β Β  {

Β Β  if (obj[i].name == «solid»)

Β Β  {

Β Β  if (Dy>0) { y = obj[i].rect.top — h;Β Β dy = 0; onGround = true; }

Β Β  if (Dy<0) { y = obj[i].rect.top + obj[i].rect.height;Β Β  dy = 0; }

Β Β  if (Dx>0) { x = obj[i].rect.left — w; }

Β Β  if (Dx<0) { x = obj[i].rect.left + obj[i].rect.width; }

Β Β  }

Β Β // else { onGround = false; }

Β Β  }

Β Β  }

Β Β Β Β 

Β Β  void update(float time)

Β Β  {

Β Β  control();

Β Β  switch (state)

Β Β  {

Β Β  case right:dx = speed; break;

Β Β  case left:dx = -speed; break;

Β Β  case up: break;

Β Β  case down: dx = 0; break;

Β Β  case stay: break;

Β Β  case right_Top: dx = speed; break;//состояниС Π²ΠΏΡ€Π°Π²ΠΎ Π²Π²Π΅Ρ€Ρ…, просто ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ°Π΅ΠΌ ΠΈΠ΄Ρ‚ΠΈ Π²ΠΏΡ€Π°Π²ΠΎ

Β Β  }

Β Β  x += dx*time;

Β Β  checkCollisionWithMap(dx, 0);

Β Β  y += dy*time;

Β Β  checkCollisionWithMap(0, dy);

Β Β  sprite.setPosition(x+w/2,y+h/2);

Β Β  if (health <= 0){ life = false; }

Β Β  if (!isMove){ speed = 0; }

Β Β  if (life) { setPlayerCoordinateForView(x, y); }

Β Β  dy = dy + 0.0015*time;

Β Β  }

};

Β 

Β 

Β 

class Enemy :public Entity{

public:

Enemy(Image &image, String Name,Level &lvl, float X, float Y, int W, int H) :Entity(image, Name, X, Y, W, H){

obj = lvl.GetObjects(«solid»);//ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΡƒΠ΅ΠΌ.ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ Π½ΡƒΠΆΠ½Ρ‹Π΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ для взаимодСйствия Π²Ρ€Π°Π³Π° с ΠΊΠ°Ρ€Ρ‚ΠΎΠΉ

if (name == «EasyEnemy»){

sprite.setTextureRect(IntRect(0, 0, w, h));

dx = 0.1;

}

}

Β 

void checkCollisionWithMap(float Dx, float Dy)

{

for (int i = 0; i<obj.size(); i++)

if (getRect().intersects(obj[i].rect))

{

if (obj[i].name == «solid»)//Ссли встрСтили прСпятствиС

{

if (Dy>0) { y = obj[i].rect.top — h;Β Β dy = 0; onGround = true; }

if (Dy<0) { y = obj[i].rect.top + obj[i].rect.height;Β Β  dy = 0; }

if (Dx>0) { x = obj[i].rect.left — w;Β Β dx = -0.1; sprite.scale(-1, 1); }

if (Dx<0) { x = obj[i].rect.left + obj[i].rect.width; dx = 0.1; sprite.scale(-1, 1); }

}

}

}

Β 

Β 

void update(float time)

{

if (name == «EasyEnemy»){

//moveTimer += time;if (moveTimer>3000){ dx *= -1; moveTimer = 0; }//мСняСт Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π½ΠΎ ΠΊΠ°ΠΆΠ΄Ρ‹Π΅ 3 сСк(Π°Π»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Π½Π°Ρ вСрсия смСны направлСния)

checkCollisionWithMap(dx, 0);

x += dx*time;

sprite.setPosition(x+w/2, y+h/2);

if (health <= 0){ life = false; }

}

}

};

Β 

class Bullet :public Entity//класс ΠΏΡƒΠ»ΠΈ

{

public:

float targetX, targetY;//ΠΎΡ‚Π²Π΅Ρ‡Π°ΡŽΡ‚ Π·Π° Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ двиТСния ΠΏΡƒΠ»ΠΈ ΠΊ Ρ†Π΅Π»ΠΈ

float vx,vy, distance;

Bullet(Image &image, String Name, Level &lvl, float X, float Y, int W, int H, float tX, float tY) :Entity(image, Name, X, Y, W, H){//всё Ρ‚Π°ΠΊ ΠΆΠ΅, Ρ‚ΠΎΠ»ΡŒΠΊΠΎ взяли Π² ΠΊΠΎΠ½Ρ†Π΅ состояниС ΠΈΠ³Ρ€ΠΎΠΊΠ° (int dir)

obj = lvl.GetObjects(«solid»);//ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΡƒΠ΅ΠΌ .ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ Π½ΡƒΠΆΠ½Ρ‹Π΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ для взаимодСйствия ΠΏΡƒΠ»ΠΈ с ΠΊΠ°Ρ€Ρ‚ΠΎΠΉ

x = X;

y = Y;

targetX = tX;

targetY = tY;

speed = 0.2;

w = h = 16;

life = true;

distance = sqrt((targetX — x) — (targetY — y));

vx = (targetX — x)/100; // 100 — дистанция

vy = (targetY — y)/100;

//Π²Ρ‹ΡˆΠ΅ инициализация Π² конструкторС

}

Β 

Β 

void update(float time)

{

//x += speed*time*(targetX — x) /20;//само Π΄Π²ΠΈΠΆΠ΅Π½ΠΈΠ΅ ΠΏΡƒΠ»ΠΈ ΠΏΠΎ Ρ…

//y += speed*time*(targetY — y) /20;//ΠΏΠΎ Ρƒ

Β 

x += vx*time*speed;

y += vy*time*speed;

Β 

if (x <= 0) x = 1;// Π·Π°Π΄Π΅Ρ€ΠΆΠΊΠ° ΠΏΡƒΠ»ΠΈ Π² Π»Π΅Π²ΠΎΠΉ стСнС, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€ΠΈ просСдании ΠΊΠ°Π΄Ρ€ΠΎΠ² ΠΎΠ½Π° случайно Π½Π΅ Π²Ρ‹Π»Π΅Ρ‚Π΅Π»Π° Π·Π° ΠΏΡ€Π΅Π΄Π΅Π» ΠΊΠ°Ρ€Ρ‚Ρ‹ ΠΈ Π½Π΅ Π±Ρ‹Π»ΠΎ ошибки

if (y <= 0) y = 1;

for (int i = 0; i < obj.size(); i++) {//ΠΏΡ€ΠΎΡ…ΠΎΠ΄ ΠΏΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌ solid

if (getRect().intersects(obj[i].rect)) //Ссли этот ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ столкнулся с ΠΏΡƒΠ»Π΅ΠΉ,

{

life = false;// Ρ‚ΠΎ пуля ΡƒΠΌΠΈΡ€Π°Π΅Ρ‚

}

}

Β 

sprite.setPosition(x+w/2, y+h/2);//задаСтся ΠΏΠΎΠ·ΠΈΡ†ΠΈΡŽ ΠΏΡƒΠ»Π΅

}

};

Β 

Β 

Β 

Β 

class MovingPlatform : public Entity{//класс двиТущСйся ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹

public:

MovingPlatform(Image &image, String Name, Level &lvl, float X, float Y, int W, int H) :Entity(image, Name, X, Y, W, H){

sprite.setTextureRect(IntRect(0, 0, W, H));//ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊ

dx = 0.08;//ΠΈΠ·Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠ΅ ускорСниС ΠΏΠΎ Π₯

}

Β 

void update(float time)//функция обновлСния ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹.

{

x += dx * time;//рСализация двиТСния ΠΏΠΎ Π³ΠΎΡ€ΠΈΠ·ΠΎΠ½Ρ‚Π°Π»ΠΈ

moveTimer += time;//Π½Π°Ρ€Π°Ρ‰ΠΈΠ²Π°Π΅ΠΌ Ρ‚Π°ΠΉΠΌΠ΅Ρ€

if (moveTimer>2000) { dx*= -1; moveTimer = 0; }//Ссли ΠΏΡ€ΠΎΡˆΠ»ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π½ΠΎ 2 сСк, Ρ‚ΠΎ мСняСтся Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ двиТСния ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹, Π° Ρ‚Π°ΠΉΠΌΠ΅Ρ€ обнуляСтся

sprite.setPosition(x+w/2, y+h/2);//Π·Π°Π΄Π°Π΅ΠΌ ΠΏΠΎΠ·ΠΈΡ†ΠΈΡŽ спрайту

}

};

Β 

void changeLevel(Level &lvl,int &numberLevel) {

if (numberLevel == 1) { lvl.LoadFromFile(«map.tmx»); }

if (numberLevel == 2) { lvl.LoadFromFile(«map2.tmx»); }

if (numberLevel == 3) { lvl.LoadFromFile(«map3.tmx»); }

}

Β 

bool startGame(RenderWindow &window,int &numberLevel){

view.reset(FloatRect(0, 0, 640, 480));

Β 

Level lvl;

changeLevel(lvl,numberLevel);//для Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ ΠΊΠ°Ρ€Ρ‚Ρ‹ для Π½ΡƒΠΆΠ½ΠΎΠ³ΠΎ уровня

Β 

SoundBuffer shootBuffer;//создаём Π±ΡƒΡ„Π΅Ρ€ для Π·Π²ΡƒΠΊΠ°

shootBuffer.loadFromFile(«shoot.ogg»);//Π·Π°Π³Ρ€ΡƒΠΆΠ°Π΅ΠΌ Π² Π½Π΅Π³ΠΎ Π·Π²ΡƒΠΊ

Sound shoot(shootBuffer);//создаСм Π·Π²ΡƒΠΊ ΠΈ Π·Π°Π³Ρ€ΡƒΠΆΠ°Π΅ΠΌ Π² Π½Π΅Π³ΠΎ Π·Π²ΡƒΠΊ ΠΈΠ· Π±ΡƒΡ„Π΅Ρ€Π°

Β 

Music music;//создаСм ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ ΠΌΡƒΠ·Ρ‹ΠΊΠΈ

music.openFromFile(«music.ogg»);//Π·Π°Π³Ρ€ΡƒΠΆΠ°Π΅ΠΌ Ρ„Π°ΠΉΠ»

music.play();//воспроизводим ΠΌΡƒΠ·Ρ‹ΠΊΡƒ

music.setLoop(true);

Β 

Β 

Image heroImage;

heroImage.loadFromFile(«images/MilesTailsPrower.gif»);

Β 

Image easyEnemyImage;

easyEnemyImage.loadFromFile(«images/shamaich.png»);

easyEnemyImage.createMaskFromColor(Color(255, 0, 0));

Β 

Image movePlatformImage;

movePlatformImage.loadFromFile(«images/MovingPlatform.png»);

Β 

Image BulletImage;//ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ для ΠΏΡƒΠ»ΠΈ

BulletImage.loadFromFile(«images/bullet.png»);//Π·Π°Π³Ρ€ΡƒΠ·ΠΈΠ»ΠΈ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π² ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ изобраТСния

BulletImage.createMaskFromColor(Color(0, 0, 0));//маска для ΠΏΡƒΠ»ΠΈ ΠΏΠΎ Ρ‡Π΅Ρ€Π½ΠΎΠΌΡƒ Ρ†Π²Π΅Ρ‚Ρƒ

Β 

std::list<Entity*>Β Β entities;

std::list<Entity*>::iterator it;

std::list<Entity*>::iterator it2;//Π²Ρ‚ΠΎΡ€ΠΎΠΉ ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΠΎΡ€.для взаимодСйствия ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌΠΈ списка

Β 

Β 

std::vector<Object> e = lvl.GetObjects(«EasyEnemy»);

Β 

for (int i = 0; i < e.size(); i++) entities.push_back(new Enemy(easyEnemyImage, «EasyEnemy», lvl, e[i].rect.left, e[i].rect.top, 200, 97));

Β 

Object player = lvl.GetObject(«player»);

Β 

Player p(heroImage, «Player1», lvl, player.rect.left, player.rect.top, 40, 30);

Β 

e = lvl.GetObjects(«MovingPlatform»);//Π·Π°Π±ΠΈΡ€Π°Π΅ΠΌ всС ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹ Π² Π²Π΅ΠΊΡ‚ΠΎΡ€

Β 

for (int i = 0; i < e.size(); i++) entities.push_back(new MovingPlatform(movePlatformImage, «MovingPlatform», lvl, e[i].rect.left, e[i].rect.top, 95, 22));//Π·Π°ΠΊΠΈΠ΄Ρ‹Π²Π°Π΅ΠΌ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡƒ Π² список.ΠΏΠ΅Ρ€Π΅Π΄Π°Π΅ΠΌ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ имя ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹ появлСния (взяли ΠΈΠ· tmx ΠΊΠ°Ρ€Ρ‚Ρ‹), Π° Ρ‚Π°ΠΊ ΠΆΠ΅ Ρ€Π°Π·ΠΌΠ΅Ρ€Ρ‹

Clock clock;

while (window.isOpen())

{

float time = clock.getElapsedTime().asMicroseconds();

Β 

clock.restart();

time = time / 800;

Β 

Event event;

while (window.pollEvent(event))

{

if (event.type == sf::Event::Closed)

window.close();

if (event.type == Event::MouseButtonPressed)//Ссли Π½Π°ΠΆΠ°Ρ‚Π° клавиша ΠΌΡ‹ΡˆΠΈ

if (event.key.code == Mouse::Left) //Π° ΠΈΠΌΠ΅Π½Π½ΠΎ лСвая, Ρ‚ΠΎ стрСляСм

{ //ΠΈ Ρ‚ΡƒΡ‚ ΠΆΠ΅ снимаСм ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹ ΠΌΡ‹ΡˆΠΈ Π² этом мСстС

Vector2i pixelPos = Mouse::getPosition(window);//Π·Π°Π±ΠΈΡ€Π°Π΅ΠΌ ΠΊΠΎΠΎΡ€Π΄ курсора

Vector2f pos = window.mapPixelToCoords(pixelPos);//ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄ΠΈΠΌ ΠΈΡ… Π² ΠΈΠ³Ρ€ΠΎΠ²Ρ‹Π΅ (ΡƒΡ…ΠΎΠ΄ΠΈΠΌ ΠΎΡ‚ ΠΊΠΎΠΎΡ€Π΄ ΠΎΠΊΠ½Π°)

entities.push_back(new Bullet(BulletImage, «Bullet», lvl, p.x, p.y, 16, 16, pos.x, pos.y)); //ΠΈ ΠΏΠ΅Ρ€Π΅Π΄Π°Π΅ΠΌ Π² конструктор ΠΏΡƒΠ»ΠΈ. создаСтся пуля

shoot.play();//ΠΈΠ³Ρ€Π°Π΅ΠΌ Π·Π²ΡƒΠΊ ΠΏΡƒΠ»ΠΈ

}

}

Β 

for (it = entities.begin(); it != entities.end();)//Π³ΠΎΠ²ΠΎΡ€ΠΈΠΌ Ρ‡Ρ‚ΠΎ проходимся ΠΎΡ‚ Π½Π°Ρ‡Π°Π»Π° Π΄ΠΎ ΠΊΠΎΠ½Ρ†Π°

{

Entity *b = *it;//для удобства, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π½Π΅ ΠΏΠΈΡΠ°Ρ‚ΡŒ (*it)->

b->update(time);//Π²Ρ‹Π·Ρ‹Π²Π°Π΅ΠΌ Ρ„-Ρ†ΠΈΡŽ update для всСх ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² (ΠΏΠΎ сути для Ρ‚Π΅Ρ…, ΠΊΡ‚ΠΎ ΠΆΠΈΠ²)

if (b->life == false) { it = entities.erase(it); delete b; }// Ссли этот ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ ΠΌΠ΅Ρ€Ρ‚Π², Ρ‚ΠΎ удаляСм Π΅Π³ΠΎ

else it++;//ΠΈ ΠΈΠ΄Π΅ΠΌ курсором (ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠΌ) ΠΊ слСд ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρƒ. Ρ‚Π°ΠΊ Π΄Π΅Π»Π°Π΅ΠΌ со всСми ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌΠΈ списка

}

Β 

for (it = entities.begin(); it != entities.end(); it++)//проходимся ΠΏΠΎ эл-Ρ‚Π°ΠΌ списка

{

if (((*it)->name == «MovingPlatform») && ((*it)->getRect().intersects(p.getRect())))//Ссли ΠΈΠ³Ρ€ΠΎΠΊ столкнулся с ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΌ списка ΠΈ имя этого ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° movingplatform

{

Entity *movPlat = *it;

if ((p.dy>0) || (p.onGround == false))//ΠΏΡ€ΠΈ этом ΠΈΠ³Ρ€ΠΎΠΊ находится Π² состоянии послС ΠΏΡ€Ρ‹ΠΆΠΊΠ°, Ρ‚.Π΅ ΠΏΠ°Π΄Π°Π΅Ρ‚ Π²Π½ΠΈΠ·

if (p.y + p.h<movPlat->y + movPlat->h)//Ссли ΠΈΠ³Ρ€ΠΎΠΊ находится Π²Ρ‹ΡˆΠ΅ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹, Ρ‚.Π΅ это Π΅Π³ΠΎ Π½ΠΎΠ³ΠΈ ΠΌΠΈΠ½ΠΈΠΌΡƒΠΌ (Ρ‚ΠΊ ΠΌΡ‹ ΡƒΠΆΠ΅ провСряли Ρ‡Ρ‚ΠΎ ΠΎΠ½ столкнулся с ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠΎΠΉ)

{

p.y = movPlat->y — p.h + 3; p.x += movPlat->dx*time; p.dy = 0; p.onGround = true; // Ρ‚ΠΎ Π²Ρ‹Ρ‚Π°Π»ΠΊΠΈΠ²Π°Π΅ΠΌ ΠΈΠ³Ρ€ΠΎΠΊΠ° Ρ‚Π°ΠΊ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ½ ΠΊΠ°ΠΊ Π±Ρ‹ стоял Π½Π° ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ΅

}

}

Β 

if (((*it)->name == «EasyEnemy») && ((*it)->getRect().intersects(p.getRect())))

{

////////Π²Ρ‹Ρ‚Π°Π»ΠΊΠΈΠ²Π°Π½ΠΈΠ΅ Π²Ρ€Π°Π³Π°

if ((*it)->dx>0)//Ссли Π²Ρ€Π°Π³ ΠΈΠ΄Π΅Ρ‚ Π²ΠΏΡ€Π°Π²ΠΎ

{

std::cout << «(*it)->x» << (*it)->x << «\n»;//ΠΊΠΎΠΎΡ€Π΄ ΠΈΠ³Ρ€ΠΎΠΊΠ°

std::cout << «p.x» << p.x << «\n\n»;//ΠΊΠΎΠΎΡ€Π΄ Π²Ρ€Π°Π³Π°

Β 

(*it)->x = p.x — (*it)->w; //ΠΎΡ‚Ρ‚Π°Π»ΠΊΠΈΠ²Π°Π΅ΠΌ Π΅Π³ΠΎ ΠΎΡ‚ ΠΈΠ³Ρ€ΠΎΠΊΠ° Π²Π»Π΅Π²ΠΎ (Π²ΠΏΡ€ΠΈΡ‚Ρ‹ΠΊ)

(*it)->dx = 0;//останавливаСм

Β 

std::cout << «new (*it)->x» << (*it)->x << «\n»;//новая ΠΊΠΎΠΎΡ€Π΄ Π²Ρ€Π°Π³Π°

std::cout << «new p.x» << p.x << «\n\n»;//новая ΠΊΠΎΠΎΡ€Π΄ ΠΈΠ³Ρ€ΠΎΠΊΠ° (останСтся ΠΏΡ€Π΅ΠΆΠ½Π΅ΠΉ)

}

if ((*it)->dx < 0)//Ссли Π²Ρ€Π°Π³ ΠΈΠ΄Π΅Ρ‚ Π²Π»Π΅Π²ΠΎ

{

(*it)->x = p.x + p.w; //Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½ΠΎ — ΠΎΡ‚Ρ‚Π°Π»ΠΊΠΈΠ²Π°Π΅ΠΌ Π²ΠΏΡ€Π°Π²ΠΎ

(*it)->dx = 0;//останавливаСм

}

///////Π²Ρ‹Ρ‚Π°Π»ΠΊΠΈΠ²Π°Π½ΠΈΠ΅ ΠΈΠ³Ρ€ΠΎΠΊΠ°

if (p.dx < 0) { p.x = (*it)->x + (*it)->w; }//Ссли ΡΡ‚ΠΎΠ»ΠΊΠ½ΡƒΠ»ΠΈΡΡŒ с Π²Ρ€Π°Π³ΠΎΠΌ ΠΈ ΠΈΠ³Ρ€ΠΎΠΊ ΠΈΠ΄Π΅Ρ‚ Π²Π»Π΅Π²ΠΎ Ρ‚ΠΎ Π²Ρ‹Ρ‚Π°Π»ΠΊΠΈΠ²Π°Π΅ΠΌ ΠΈΠ³Ρ€ΠΎΠΊΠ°

if (p.dx > 0) { p.x = (*it)->x — p.w; }//Ссли ΡΡ‚ΠΎΠ»ΠΊΠ½ΡƒΠ»ΠΈΡΡŒ с Π²Ρ€Π°Π³ΠΎΠΌ ΠΈ ΠΈΠ³Ρ€ΠΎΠΊ ΠΈΠ΄Π΅Ρ‚ Π²ΠΏΡ€Π°Π²ΠΎ Ρ‚ΠΎ Π²Ρ‹Ρ‚Π°Π»ΠΊΠΈΠ²Π°Π΅ΠΌ ΠΈΠ³Ρ€ΠΎΠΊΠ°

}

Β 

for (it2 = entities.begin(); it2 != entities.end(); it2++)

{

if ((*it)->getRect() != (*it2)->getRect())//ΠΏΡ€ΠΈ этом это Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ Ρ€Π°Π·Π½Ρ‹Π΅ ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊΠΈ

if (((*it)->getRect().intersects((*it2)->getRect())) && ((*it)->name == «EasyEnemy») && ((*it2)->name == «EasyEnemy»))//Ссли ΡΡ‚ΠΎΠ»ΠΊΠ½ΡƒΠ»ΠΈΡΡŒ Π΄Π²Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° ΠΈ ΠΎΠ½ΠΈ Π²Ρ€Π°Π³ΠΈ

{

(*it)->dx *= -1;//мСняСм Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ двиТСния Π²Ρ€Π°Π³Π°

(*it)->sprite.scale(-1, 1);//ΠΎΡ‚Ρ€Π°ΠΆΠ°Π΅ΠΌ спрайт ΠΏΠΎ Π³ΠΎΡ€ΠΈΠ·ΠΎΠ½Ρ‚Π°Π»ΠΈ

}

}

Β 

}

Β 

if (Keyboard::isKeyPressed(Keyboard::T)) { lvl.levelNumber++; return true; }

if (Keyboard::isKeyPressed(Keyboard::Tab)) { return true; }//Ссли Ρ‚Π°Π±, Ρ‚ΠΎ ΠΏΠ΅Ρ€Π΅Π·Π°Π³Ρ€ΡƒΠΆΠ°Π΅ΠΌ ΠΈΠ³Ρ€Ρƒ

if (Keyboard::isKeyPressed(Keyboard::Escape)) { return false; }//Ссли эскСйп, Ρ‚ΠΎ Π²Ρ‹Ρ…ΠΎΠ΄ΠΈΠΌ ΠΈΠ· ΠΈΠ³Ρ€Ρ‹

Β 

Β 

Β 

p.update(time);//пСрСнСсли сюда update ΠΈΠ³Ρ€ΠΎΠΊΠ°

window.setView(view);

window.clear(Color(77, 83, 140));

lvl.Draw(window);

Β 

Β 

for (it = entities.begin(); it != entities.end(); it++){

window.draw((*it)->sprite);

}

window.draw(p.sprite);

window.display();

}

}

Β 

void gameRunning(RenderWindow & window, int & numberLevel){//Ρ„-ция ΠΏΠ΅Ρ€Π΅Π·Π°Π³Ρ€ΡƒΠΆΠ°Π΅Ρ‚ ΠΈΠ³Ρ€Ρƒ , Ссли это Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ

if (startGame(window,numberLevel)) { numberLevel++; gameRunning(window,numberLevel); }//ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ с ΠΊΠ°ΠΊΠΎΠ³ΠΎ уровня Π½Π°Ρ‡Π°Ρ‚ΡŒ ΠΈΠ³Ρ€Ρƒ

}

Β 

int main()

{

RenderWindow window(VideoMode(640, 480), «Lesson 33. kychka-pc.ru»);

int numberLevel = 1;//сначала 1-Ρ‹ΠΉ ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ

gameRunning(window,numberLevel);

return 0;

}

Π£Ρ€ΠΎΠΊ 22 SFML C++ Ρ€Π°Π±ΠΎΡ‚Π° с Tiled Map Editor | kychka-pc

#ifndef LEVEL_H

#define LEVEL_H

Β 

#include <string>

#include <vector>

#include <map>

#include <SFML/Graphics.hpp>

#include <iostream>

#include «TinyXML/tinyxml.h»

Β 

struct Object

{

int GetPropertyInt(std::string name);//Π½ΠΎΠΌΠ΅Ρ€ свойства ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Π² нашСм спискС

float GetPropertyFloat(std::string name);

std::string GetPropertyString(std::string name);

Β 

std::string name;//объявили ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ name Ρ‚ΠΈΠΏΠ° string

std::string type;//Π° здСсь ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ type Ρ‚ΠΈΠΏΠ° string

sf::Rect<float> rect;//Ρ‚ΠΈΠΏ Rect с Π½Π΅Ρ†Π΅Π»Ρ‹ΠΌΠΈ значСниями

std::map<std::string, std::string> properties;//создаём ассоциатиный массив. ΠΊΠ»ΡŽΡ‡ — строковый Ρ‚ΠΈΠΏ, Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ — строковый

Β 

sf::Sprite sprite;//объявили спрайт

};

Β 

struct Layer//слои

{

int opacity;//Π½Π΅ΠΏΡ€ΠΎΠ·Ρ€Π°Ρ‡Π½ΠΎΡΡ‚ΡŒ слоя

std::vector<sf::Sprite> tiles;//Π·Π°ΠΊΠΈΠ΄Ρ‹Π²Π°Π΅ΠΌ Π² Π²Π΅ΠΊΡ‚ΠΎΡ€ Ρ‚Π°ΠΉΠ»Ρ‹

};

Β 

class Level//Π³Π»Π°Π²Π½Ρ‹ΠΉ класс — ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ

{

public:

bool LoadFromFile(std::string filename);//Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ false Ссли Π½Π΅ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ»ΠΎΡΡŒ Π·Π°Π³Ρ€ΡƒΠ·ΠΈΡ‚ΡŒ

Object GetObject(std::string name);

std::vector<Object> GetObjects(std::string name);//Π²Ρ‹Π΄Π°Π΅ΠΌ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Π² наш ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ

std::vector<Object> GetAllObjects();//Π²Ρ‹Π΄Π°Π΅ΠΌ всС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ Π² наш ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ

void Draw(sf::RenderWindow &window);//рисуСм Π² ΠΎΠΊΠ½ΠΎ

sf::Vector2i GetTileSize();//ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ Ρ€Π°Π·ΠΌΠ΅Ρ€ Ρ‚Π°ΠΉΠ»Π°

Β 

private:

int width, height, tileWidth, tileHeight;//Π² tmx Ρ„Π°ΠΉΠ»Π΅ width height Π² Π½Π°Ρ‡Π°Π»Π΅,Π·Π°Ρ‚Π΅ΠΌ Ρ€Π°Π·ΠΌΠ΅Ρ€ Ρ‚Π°ΠΉΠ»Π°

int firstTileID;//ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ Π°ΠΉΠ΄ΠΈ ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ Ρ‚Π°ΠΉΠ»Π°

sf::Rect<float> drawingBounds;//Ρ€Π°Π·ΠΌΠ΅Ρ€ части ΠΊΠ°Ρ€Ρ‚Ρ‹ ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ рисуСм

sf::Texture tilesetImage;//тСкстура ΠΊΠ°Ρ€Ρ‚Ρ‹

std::vector<Object> objects;//массив Ρ‚ΠΈΠΏΠ° ΠžΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΡ‹ создали

std::vector<Layer> layers;

};

Β 

///////////////////////////////////////

Β 

Β 

int Object::GetPropertyInt(std::string name)//Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌ Π½ΠΎΠΌΠ΅Ρ€ свойства Π² нашСм спискС

{

return atoi(properties[name].c_str());

}

Β 

float Object::GetPropertyFloat(std::string name)

{

return strtod(properties[name].c_str(), NULL);

}

Β 

std::string Object::GetPropertyString(std::string name)//ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ имя Π² Π²ΠΈΠ΄Π΅ строки.Π²Ρ€ΠΎΠ΄Π΅ понятно

{

return properties[name];

}

Β 

bool Level::LoadFromFile(std::string filename)//двоСточия-ΠΎΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠ΅ ΠΊ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°ΠΌ класса Π²Π½Π΅ класса

{

TiXmlDocument levelFile(filename.c_str());//Π·Π°Π³Ρ€ΡƒΠΆΠ°Π΅ΠΌ Ρ„Π°ΠΉΠ» Π² TiXmlDocument

Β 

// Π·Π°Π³Ρ€ΡƒΠΆΠ°Π΅ΠΌ XML-ΠΊΠ°Ρ€Ρ‚Ρƒ

if (!levelFile.LoadFile())//Ссли Π½Π΅ ΡƒΠ΄Π°Π»ΠΎΡΡŒ Π·Π°Π³Ρ€ΡƒΠ·ΠΈΡ‚ΡŒ ΠΊΠ°Ρ€Ρ‚Ρƒ

{

std::cout << «Loading level \»» << filename << «\» failed.» << std::endl;//Π²Ρ‹Π΄Π°Π΅ΠΌ ΠΎΡˆΠΈΠ±ΠΊΡƒ

return false;

}

Β 

// Ρ€Π°Π±ΠΎΡ‚Π°Π΅ΠΌ с ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠΌ map

TiXmlElement *map;

map = levelFile.FirstChildElement(«map»);

Β 

// ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΊΠ°Ρ€Ρ‚Ρ‹: <map version=»1.0″ orientation=»orthogonal»

// tilewidth=»34″ tileheight=»34″>

width = atoi(map->Attribute(«width»));//ΠΈΠ·Π²Π»Π΅ΠΊΠ°Π΅ΠΌ ΠΈΠ· нашСй ΠΊΠ°Ρ€Ρ‚Ρ‹ Π΅Π΅ свойства

height = atoi(map->Attribute(«height»));//Ρ‚Π΅ свойства, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π·Π°Π΄Π°Π²Π°Π»ΠΈ ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ Π²

tileWidth = atoi(map->Attribute(«tilewidth»));//Ρ‚Π°ΠΉΠ»ΠΌΠ°ΠΏ Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€Π΅

tileHeight = atoi(map->Attribute(«tileheight»));

Β 

// Π‘Π΅Ρ€Π΅ΠΌ описаниС тайлсСта ΠΈ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ Ρ‚Π°ΠΉΠ»Π°

TiXmlElement *tilesetElement;

tilesetElement = map->FirstChildElement(«tileset»);

firstTileID = atoi(tilesetElement->Attribute(«firstgid»));

Β 

// source — ΠΏΡƒΡ‚ΡŒ Π΄ΠΎ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠΈ Π² ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π΅ image

TiXmlElement *image;

image = tilesetElement->FirstChildElement(«image»);

std::string imagepath = image->Attribute(«source»);

Β 

// пытаСмся Π·Π°Π³Ρ€ΡƒΠ·ΠΈΡ‚ΡŒ тайлсСт

sf::Image img;

Β 

if (!img.loadFromFile(imagepath))

{

std::cout << «Failed to load tile sheet.» << std::endl;//Ссли Π½Π΅ ΡƒΠ΄Π°Π»ΠΎΡΡŒ Π·Π°Π³Ρ€ΡƒΠ·ΠΈΡ‚ΡŒ тайлсСт-Π²Ρ‹Π²ΠΎΠ΄ΠΈΠΌ ΠΎΡˆΠΈΠ±ΠΊΡƒ Π² консоль

return false;

}

Β 

Β 

img.createMaskFromColor(sf::Color(255, 255, 255));//для маски Ρ†Π²Π΅Ρ‚Π°.сСйчас Π½Π΅Ρ‚ маски

tilesetImage.loadFromImage(img);

tilesetImage.setSmooth(false);//сглаТиваниС

Β 

// ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ количСство столбцов ΠΈ строк тайлсСта

int columns = tilesetImage.getSize().x / tileWidth;

int rows = tilesetImage.getSize().y / tileHeight;

Β 

// Π²Π΅ΠΊΡ‚ΠΎΡ€ ΠΈΠ· ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊΠΎΠ² ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ (TextureRect)

std::vector<sf::Rect<int>> subRects;

Β 

for (int y = 0; y < rows; y++)

for (int x = 0; x < columns; x++)

{

sf::Rect<int> rect;

Β 

rect.top = y * tileHeight;

rect.height = tileHeight;

rect.left = x * tileWidth;

rect.width = tileWidth;

Β 

subRects.push_back(rect);

}

Β 

// Ρ€Π°Π±ΠΎΡ‚Π° со слоями

TiXmlElement *layerElement;

layerElement = map->FirstChildElement(«layer»);

while (layerElement)

{

Layer layer;

Β 

// Ссли присутствуСт opacity, Ρ‚ΠΎ Π·Π°Π΄Π°Π΅ΠΌ ΠΏΡ€ΠΎΠ·Ρ€Π°Ρ‡Π½ΠΎΡΡ‚ΡŒ слоя, ΠΈΠ½Π°Ρ‡Π΅ ΠΎΠ½ ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ Π½Π΅ΠΏΡ€ΠΎΠ·Ρ€Π°Ρ‡Π΅Π½

if (layerElement->Attribute(«opacity») != NULL)

{

float opacity = strtod(layerElement->Attribute(«opacity»), NULL);

layer.opacity = 255 * opacity;

}

else

{

layer.opacity = 255;

}

Β 

// Β ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ <data>

TiXmlElement *layerDataElement;

layerDataElement = layerElement->FirstChildElement(«data»);

Β 

if (layerDataElement == NULL)

{

std::cout << «Bad map. No layer information found.» << std::endl;

}

Β 

// Β ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ <tile> — описаниС Ρ‚Π°ΠΉΠ»ΠΎΠ² ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ слоя

TiXmlElement *tileElement;

tileElement = layerDataElement->FirstChildElement(«tile»);

Β 

if (tileElement == NULL)

{

std::cout << «Bad map. No tile information found.» << std::endl;

return false;

}

Β 

int x = 0;

int y = 0;

Β 

while (tileElement)

{

int tileGID = atoi(tileElement->Attribute(«gid»));

int subRectToUse = tileGID — firstTileID;

Β 

// УстанавливаСм TextureRect ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ Ρ‚Π°ΠΉΠ»Π°

if (subRectToUse >= 0)

{

sf::Sprite sprite;

sprite.setTexture(tilesetImage);

sprite.setTextureRect(subRects[subRectToUse]);

sprite.setPosition(x * tileWidth, y * tileHeight);

sprite.setColor(sf::Color(255, 255, 255, layer.opacity));

Β 

layer.tiles.push_back(sprite);//Π·Π°ΠΊΠΈΠ΄Ρ‹Π²Π°Π΅ΠΌ Π² слой спрайты Ρ‚Π°ΠΉΠ»ΠΎΠ²

}

Β 

tileElement = tileElement->NextSiblingElement(«tile»);

Β 

x++;

if (x >= width)

{

x = 0;

y++;

if (y >= height)

y = 0;

}

}

Β 

layers.push_back(layer);

Β 

layerElement = layerElement->NextSiblingElement(«layer»);

}

Β 

// Ρ€Π°Π±ΠΎΡ‚Π° с ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌΠΈ

TiXmlElement *objectGroupElement;

Β 

// Ссли Π΅ΡΡ‚ΡŒ слои ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ²

if (map->FirstChildElement(«objectgroup») != NULL)

{

objectGroupElement = map->FirstChildElement(«objectgroup»);

while (objectGroupElement)

{

// Β ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ <object>

TiXmlElement *objectElement;

objectElement = objectGroupElement->FirstChildElement(«object»);

Β 

while (objectElement)

{

// ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ всС Π΄Π°Π½Π½Ρ‹Π΅ — Ρ‚ΠΈΠΏ, имя, позиция, ΠΈ Ρ‚Π΄

std::string objectType;

if (objectElement->Attribute(«type») != NULL)

{

objectType = objectElement->Attribute(«type»);

}

std::string objectName;

if (objectElement->Attribute(«name») != NULL)

{

objectName = objectElement->Attribute(«name»);

}

int x = atoi(objectElement->Attribute(«x»));

int y = atoi(objectElement->Attribute(«y»));

Β 

int width, height;

Β 

sf::Sprite sprite;

sprite.setTexture(tilesetImage);

sprite.setTextureRect(sf::Rect<int>(0, 0, 0, 0));

sprite.setPosition(x, y);

Β 

if (objectElement->Attribute(«width») != NULL)

{

width = atoi(objectElement->Attribute(«width»));

height = atoi(objectElement->Attribute(«height»));

}

else

{

width = subRects[atoi(objectElement->Attribute(«gid»)) — firstTileID].width;

height = subRects[atoi(objectElement->Attribute(«gid»)) — firstTileID].height;

sprite.setTextureRect(subRects[atoi(objectElement->Attribute(«gid»)) — firstTileID]);

}

Β 

// экзСмпляр ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°

Object object;

object.name = objectName;

object.type = objectType;

object.sprite = sprite;

Β 

sf::Rect <float> objectRect;

objectRect.top = y;

objectRect.left = x;

objectRect.height = height;

objectRect.width = width;

object.rect = objectRect;

Β 

// «ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅» ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°

TiXmlElement *properties;

properties = objectElement->FirstChildElement(«properties»);

if (properties != NULL)

{

TiXmlElement *prop;

prop = properties->FirstChildElement(«property»);

if (prop != NULL)

{

while (prop)

{

std::string propertyName = prop->Attribute(«name»);

std::string propertyValue = prop->Attribute(«value»);

Β 

object.properties[propertyName] = propertyValue;

Β 

prop = prop->NextSiblingElement(«property»);

}

}

}

Β 

Β 

objects.push_back(object);

Β 

objectElement = objectElement->NextSiblingElement(«object»);

}

objectGroupElement = objectGroupElement->NextSiblingElement(«objectgroup»);

}

}

else

{

std::cout << «No object layers found…» << std::endl;

}

Β 

return true;

}

Β 

Object Level::GetObject(std::string name)

{

// Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ с Π·Π°Π΄Π°Π½Π½Ρ‹ΠΌ ΠΈΠΌΠ΅Π½Π΅ΠΌ

for (int i = 0; i < objects.size(); i++)

if (objects[i].name == name)

return objects[i];

}

Β 

std::vector<Object> Level::GetObjects(std::string name)

{

// всС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ с Π·Π°Π΄Π°Π½Π½Ρ‹ΠΌ ΠΈΠΌΠ΅Π½Π΅ΠΌ

std::vector<Object> vec;

for (int i = 0; i < objects.size(); i++)

if (objects[i].name == name)

vec.push_back(objects[i]);

Β 

return vec;

}

Β 

Β 

std::vector<Object> Level::GetAllObjects()

{

return objects;

};

Β 

Β 

sf::Vector2i Level::GetTileSize()

{

return sf::Vector2i(tileWidth, tileHeight);

}

Β 

void Level::Draw(sf::RenderWindow &window)

{

// рисуСм всС Ρ‚Π°ΠΉΠ»Ρ‹ (ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ Π½Π΅ рисуСм!)

for (int layer = 0; layer < layers.size(); layer++)

for (int tile = 0; tile < layers[layer].tiles.size(); tile++)

window.draw(layers[layer].tiles[tile]);

}

Β 

#endif

Π£Ρ€ΠΎΠΊ 11 SFML ВзаимодСйствиС пСрсонаТа с ΠΊΠ°Ρ€Ρ‚ΠΎΠΉ | kychka-pc

#include <SFML/Graphics.hpp>

#include <iostream>

#include «map.h»

#include «view.h»

using namespace sf;

Β 

Β 

Β 

////////////////////////////////////////////////////ΠšΠ›ΠΠ‘Π‘ Π˜Π“Π ΠžΠšΠ////////////////////////

class Player {

private: float x, y ;

public:

float w, h, dx, dy, speed ;

int dir;

String File;

Image image;

Texture texture;

Sprite sprite;

Player(String F, float X, float Y, float W, float H){

Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β dx=0; dy=0; speed=0; dir =0;

File = F;

w = W; h = H;

image.loadFromFile(«images/» + File);

image.createMaskFromColor(Color(41, 33, 59));

texture.loadFromImage(image);

sprite.setTexture(texture);

x = X; y = Y;

sprite.setTextureRect(IntRect(0, 0, w, h));

}

void update(float time)

{

switch (dir)

{

case 0: dx = speed; dy = 0; break;

case 1: dx = -speed; dy = 0; break;

case 2: dx = 0; dy = speed; break;

case 3: dx = 0; dy = -speed; break;

}

Β 

x += dx*time;

y += dy*time;

Β 

speed = 0;

sprite.setPosition(x,y);

interactionWithMap();//Π²Ρ‹Π·Ρ‹Π²Π°Π΅ΠΌ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ, ΠΎΡ‚Π²Π΅Ρ‡Π°ΡŽΡ‰ΡƒΡŽ Π·Π° взаимодСйствиС с ΠΊΠ°Ρ€Ρ‚ΠΎΠΉ

}

Β 

Β 

void interactionWithMap()//Ρ„-ция взаимодСйствия с ΠΊΠ°Ρ€Ρ‚ΠΎΠΉ

{

Β 

for (int i = y / 32; i < (y + h) / 32; i++)//проходимся ΠΏΠΎ Ρ‚Π°ΠΉΠ»ΠΈΠΊΠ°ΠΌ, ΠΊΠΎΠ½Ρ‚Π°ΠΊΡ‚ΠΈΡ€ΡƒΡŽΡ‰ΠΈΠΌ с ΠΈΠ³Ρ€ΠΎΠΊΠΎΠΌ,, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ ΠΏΠΎ всСм ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚ΠΈΠΊΠ°ΠΌ Ρ€Π°Π·ΠΌΠ΅Ρ€Π° 32*32, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΡ‹ ΠΎΠΊΡ€Π°ΡˆΠΈΠ²Π°Π»ΠΈ Π² 9 ΡƒΡ€ΠΎΠΊΠ΅. ΠΏΡ€ΠΎ условия Ρ‡ΠΈΡ‚Π°ΠΉΡ‚Π΅ Π½ΠΈΠΆΠ΅.

for (int j = x / 32; j<(x + w) / 32; j++)//икс Π΄Π΅Π»ΠΈΠΌ Π½Π° 32, Ρ‚Π΅ΠΌ самым ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ Π»Π΅Π²Ρ‹ΠΉ ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚ΠΈΠΊ, с ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ пСрсонаТ соприкасаСтся. (ΠΎΠ½ вСдь большС Ρ€Π°Π·ΠΌΠ΅Ρ€Π° 32*32, поэтому ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ ΡΡ‚ΠΎΡΡ‚ΡŒ Π½Π° Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚Π°Ρ…). А j<(x + w) / 32 — условиС ограничСния ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚ ΠΏΠΎ иксу. Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Π° самого ΠΏΡ€Π°Π²ΠΎΠ³ΠΎ ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ соприкасаСтся с пСрсонаТСм. Ρ‚Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ ΠΈΠ΄Π΅ΠΌ Π² Ρ†ΠΈΠΊΠ»Π΅ слСва Π½Π°ΠΏΡ€Π°Π²ΠΎ ΠΏΠΎ иксу, проходя ΠΏΠΎ ΠΎΡ‚ Π»Π΅Π²ΠΎΠ³ΠΎ ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚Π° (ΡΠΎΠΏΡ€ΠΈΠΊΠ°ΡΠ°ΡŽΡ‰Π΅Π³ΠΎΡΡ с Π³Π΅Ρ€ΠΎΠ΅ΠΌ), Π΄ΠΎ ΠΏΡ€Π°Π²ΠΎΠ³ΠΎ ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚Π° (ΡΠΎΠΏΡ€ΠΈΠΊΠ°ΡΠ°ΡŽΡ‰Π΅Π³ΠΎΡΡ с Π³Π΅Ρ€ΠΎΠ΅ΠΌ)

{

if (TileMap[i][j] == ‘0’)//Ссли наш ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚ΠΈΠΊ соотвСтствуСт символу 0 (стСна), Ρ‚ΠΎ провСряСм «Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ скорости» пСрсонаТа:

{

if (dy>0)//Ссли ΠΌΡ‹ шли Π²Π½ΠΈΠ·,

{

y = i * 32 — h;//Ρ‚ΠΎ стопорим ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρƒ ΠΈΠ³Ρ€Π΅ΠΊ пСрсонаТа. сначала ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρƒ нашСго ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚ΠΈΠΊΠ° Π½Π° ΠΊΠ°Ρ€Ρ‚Π΅(стСны) ΠΈ Π·Π°Ρ‚Π΅ΠΌ Π²Ρ‹Ρ‡ΠΈΡ‚Π°Π΅ΠΌ ΠΈΠ· высоты спрайта пСрсонаТа.

}

if (dy<0)

{

y = i * 32 + 32;//Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½ΠΎ с Ρ…ΠΎΠ΄ΡŒΠ±ΠΎΠΉ Π²Π²Π΅Ρ€Ρ…. dy<0, Π·Π½Π°Ρ‡ΠΈΡ‚ ΠΌΡ‹ ΠΈΠ΄Π΅ΠΌ Π²Π²Π΅Ρ€Ρ… (вспоминаСм ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹ ΠΏΠ°ΠΈΠ½Ρ‚Π°)

}

if (dx>0)

{

x = j * 32 — w;//Ссли ΠΈΠ΄Π΅ΠΌ Π²ΠΏΡ€Π°Π²ΠΎ, Ρ‚ΠΎ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Π° Π₯ Ρ€Π°Π²Π½Π° стСна (символ 0) минус ΡˆΠΈΡ€ΠΈΠ½Π° пСрсонаТа

}

if (dx < 0)

{

x = j * 32 + 32;//Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½ΠΎ ΠΈΠ΄Π΅ΠΌ Π²Π»Π΅Π²ΠΎ

}

}

Β 

if (TileMap[i][j] == ‘s’) { //Ссли символ Ρ€Π°Π²Π΅Π½ ‘s’ (камСнь)

x = 300; y = 300;//ΠΊΠ°ΠΊΠΎΠ΅ Ρ‚ΠΎ дСйствиС… Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ тСлСпортация гСроя

TileMap[i][j] = ‘ ‘;//ΡƒΠ±ΠΈΡ€Π°Π΅ΠΌ камСнь, Ρ‚ΠΈΠΏΠ° взяли бонус. ΠΌΠΎΠΆΠ΅ΠΌ ΠΈ Π½Π΅ ΡƒΠ±ΠΈΡ€Π°Ρ‚ΡŒ, кстати.

}

}

}

Β 

float getplayercoordinateX(){

return x;

}

float getplayercoordinateY(){

return y;

}

};

Β 

Β 

Β 

int main()

{

RenderWindow window(sf::VideoMode(640, 480), «Lesson 11. kychka-pc.ru»);

Β 

Β 

view.reset(sf::FloatRect(0, 0, 640, 480));

Β 

Image map_image;

map_image.loadFromFile(«images/map.png»);

Texture map;

map.loadFromImage(map_image);

Sprite s_map;

s_map.setTexture(map);

Β 

Player p(«hero.png», 250, 250, 96.0, 96.0);

Β 

float CurrentFrame = 0;

Clock clock;

Β 

while (window.isOpen())

{

Β 

float time = clock.getElapsedTime().asMicroseconds();

clock.restart();

time = time / 800;

Β 

Β 

sf::Event event;

while (window.pollEvent(event))

{

if (event.type == sf::Event::Closed)

window.close();

}

Β 

float coordinatePlayerX, coordinatePlayerY = 0;

coordinatePlayerX = p.getplayercoordinateX();

coordinatePlayerY = p.getplayercoordinateY();

Β 

///////////////////////////////////////////Π£ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ пСрсонаТСм с Π°Π½ΠΈΠΌΠ°Ρ†ΠΈΠ΅ΠΉ////////////////////////////////////////////////////////////////////////

if (Keyboard::isKeyPressed(Keyboard::Left)) {

p.dir = 1; p.speed = 0.1;

CurrentFrame += 0.005*time;

if (CurrentFrame > 3) CurrentFrame -= 3;

p.sprite.setTextureRect(IntRect(96 * int(CurrentFrame), 96, 96, 96));

}

Β 

if (Keyboard::isKeyPressed(Keyboard::Right)) {

p.dir = 0; p.speed = 0.1;

CurrentFrame += 0.005*time;

if (CurrentFrame > 3) CurrentFrame -= 3;

p.sprite.setTextureRect(IntRect(96 * int(CurrentFrame), 192, 96, 96));

}

Β 

if (Keyboard::isKeyPressed(Keyboard::Up)) {

p.dir = 3; p.speed = 0.1;

CurrentFrame += 0.005*time;

if (CurrentFrame > 3) CurrentFrame -= 3;

p.sprite.setTextureRect(IntRect(96 * int(CurrentFrame), 288, 96, 96));

}

Β 

if (Keyboard::isKeyPressed(Keyboard::Down)) {

p.dir = 2; p.speed = 0.1;

CurrentFrame += 0.005*time;

if (CurrentFrame > 3) CurrentFrame -= 3;

p.sprite.setTextureRect(IntRect(96 * int(CurrentFrame), 0, 96, 96));

}

getplayercoordinateforview(coordinatePlayerX, coordinatePlayerY);

p.update(time);

Β 

Β 

window.setView(view);

window.clear();

Β 

/////////////////////////////РисуСм ΠΊΠ°Ρ€Ρ‚Ρƒ/////////////////////

for (int i = 0; i < HEIGHT_MAP; i++)

for (int j = 0; j < WIDTH_MAP; j++)

{

if (TileMap[i][j] == ‘ ‘)Β Β s_map.setTextureRect(IntRect(0, 0, 32, 32));

if (TileMap[i][j] == ‘s’)Β Β s_map.setTextureRect(IntRect(32, 0, 32, 32));

if ((TileMap[i][j] == ‘0’)) s_map.setTextureRect(IntRect(64, 0, 32, 32));

Β 

s_map.setPosition(j * 32, i * 32);

Β 

window.draw(s_map);

}

Β 

Β 

window.draw(p.sprite);

window.display();

}

Β 

return 0;

}

Π‘Π΅Ρ‚Π΅Π²ΠΎΠΉ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ (SFML / Learn / 2.5.1 ДокумСнтация)

ΠšΠΎΠΌΠΌΡƒΠ½ΠΈΠΊΠ°Ρ†ΠΈΡ Ρ‡Π΅Ρ€Π΅Π· сокСты, ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Ρ‹ ΠΈ сСтСвыС ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»Ρ‹ Π±ΠΎΠ»Π΅Π΅ высокого уровня (HTTP, FTP).
ΠŸΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅ …

ΠšΠ»Π°ΡΡΡ‹

class sf :: Ftp
FTP-ΠΊΠ»ΠΈΠ΅Π½Ρ‚. ΠŸΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅ …
class sf :: Http
HTTP-ΠΊΠ»ΠΈΠ΅Π½Ρ‚. ΠŸΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅ …
class sf :: IpAddress
Π˜Π½ΠΊΠ°ΠΏΡΡƒΠ»ΠΈΡ€ΡƒΠ΅Ρ‚ сСтСвой адрСс IPv4.ΠŸΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅ …
class sf :: Packet
Π‘Π»ΡƒΠΆΠ΅Π±Π½Ρ‹ΠΉ класс для создания Π±Π»ΠΎΠΊΠΎΠ² Π΄Π°Π½Π½Ρ‹Ρ… для ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ ΠΏΠΎ сСти. ΠŸΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅ …
class sf :: Socket
Π‘Π°Π·ΠΎΠ²Ρ‹ΠΉ класс для всСх Ρ‚ΠΈΠΏΠΎΠ² Ρ€ΠΎΠ·Π΅Ρ‚ΠΎΠΊ. ΠŸΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅ …
class sf :: SocketSelector
ΠœΡƒΠ»ΡŒΡ‚ΠΈΠΏΠ»Π΅ΠΊΡΠΎΡ€, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰ΠΈΠΉ Ρ‡ΠΈΡ‚Π°Ρ‚ΡŒ с Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… сокСтов.ΠŸΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅ …
class sf :: TcpListener
Π‘ΠΎΠΊΠ΅Ρ‚, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΏΡ€ΠΎΡΠ»ΡƒΡˆΠΈΠ²Π°Π΅Ρ‚ Π½ΠΎΠ²Ρ‹Π΅ TCP-соСдинСния. ΠŸΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅ …
class sf :: TcpSocket
Π‘ΠΏΠ΅Ρ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ сокСт, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰ΠΈΠΉ ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ» TCP. ΠŸΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅ …
class sf :: UdpSocket
Π‘ΠΏΠ΅Ρ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ сокСт, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰ΠΈΠΉ ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ» UDP.ΠŸΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅ …

ΠŸΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎΠ΅ описаниС

ΠšΠΎΠΌΠΌΡƒΠ½ΠΈΠΊΠ°Ρ†ΠΈΡ Ρ‡Π΅Ρ€Π΅Π· сокСты, ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Ρ‹ ΠΈ сСтСвыС ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»Ρ‹ Π±ΠΎΠ»Π΅Π΅ высокого уровня (HTTP, FTP).

.

Π½ΠΎΠ²Π΅ΠΉΡˆΠΈΡ… вопросов sfml — qaru

ΠŸΠ΅Ρ€Π΅ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ стСка

  1. Около
  2. ΠŸΡ€ΠΎΠ΄ΡƒΠΊΡ‚Ρ‹

  3. Для ΠΊΠΎΠΌΠ°Π½Π΄
  1. ΠŸΠ΅Ρ€Π΅ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ стСка
    ΠžΠ±Ρ‰Π΅ΡΡ‚Π²Π΅Π½Π½Ρ‹Π΅ вопросы ΠΈ ΠΎΡ‚Π²Π΅Ρ‚Ρ‹

  2. ΠŸΠ΅Ρ€Π΅ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ стСка для ΠΊΠΎΠΌΠ°Π½Π΄
    Π“Π΄Π΅ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ ΠΈ Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈ дСлятся частными знаниями с ΠΊΠΎΠ»Π»Π΅Π³Π°ΠΌΠΈ

  3. Вакансии
    ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈ связанныС с Π½ΠΈΠΌ тСхничСскиС возмоТности ΠΊΠ°Ρ€ΡŒΠ΅Ρ€Π½ΠΎΠ³ΠΎ роста

  4. Π’Π°Π»Π°Π½Ρ‚
    НанимайтС тСхничСских спСциалистов ΠΈ создавайтС свой Π±Ρ€Π΅Π½Π΄ работодатСля

  5. Π Π΅ΠΊΠ»Π°ΠΌΠ°
    ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ΡΡŒ ΠΊ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°ΠΌ ΠΈ Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³Π°ΠΌ со всСго ΠΌΠΈΡ€Π°

  6. О компании

.

Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ

Π’Π°Ρˆ адрСс email Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Π½. ΠžΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ поля ΠΏΠΎΠΌΠ΅Ρ‡Π΅Π½Ρ‹ *