Przepisanie kodu z C++ na C#.

0

Witam,
ogólnie rzecz biorąc muszę przepisać kod z C++ na C#. Dodam, że nigdy nie robiłem nic w C#, zatem stąd pare pytań. Może ułatwi mi to wstępną pracę z C# i oszczędzi trochę czasu / szukania informacji.

Wiem, że C# nie ma dyrektywy include, co zupełnie wyklucza pliki nagłówkowe, lecz mam np. (w c++ ) plik który includuje 2 klasy i porównuje pewne warości między nimi. Jak coś takiego wygląda w c#. Jak tutaj wyglądają zasiegi. Z tego co widzę cały projekt jest jakby w jednym namespace, więc mam otwarty dostęp / zasięg do wszystkiego co sobie zapiszę w różnych plikach *.cs ? Nie muszę ich w żadnen sposób łączyć etc ? Ew może jak ktoś się przesiadał z c++ na c# to może się podzielić na czym można się na początku potknąć lub na co należy zwrócić uwagę. Jeszcze na marginesie mogę dodać, że pracujęz biblioteką SFML. Z góry dziękuję :)

1

To aż się prosi o napisanie kodu C++ w C#, a rezultacie wyjdzie z tego potworek. Warto poczytać o konwencjach C# i podpatrzyć jakiś projekt na GitHub'ie żeby napisać to tak jak należy. Miałem "przyjemność" pracować kiedyś z kodem w C# który był po prosty przepisany z Visual Basic bez przestrzegania żadnych konwencji i wyglądało to strasznie.

Chociażby wrzucanie wszystkiego do jednego namespace'a to nie najlepszy pomysł. Kod powinien być logicznie uporządkowany.

0

Brakuje ci elementarnej wiedzy na temat C# i platformy NET. Nawet nie chce mi się robić wykładu na takie błahe tematy żeby nie wzbudzić śmiechu na forum,
Pokaż ten program w C++ to spróbuje go przepisać na C#.. Mam jeszcze pytanie czy masz Visual Studio ?

0

Przesyłam w załączniku, ale nie sądzę, by chciało Ci się tyle przepisywać, chyba, że jakoś z pomocą convertera. W każdym razie i tak dziękuję za propozycję. Wiem, że nie mam elementarnej wiedzy i nie planowałem jeszcze jej zdobywać, ale po prostu taki mam wymóg. C# albo Java, więc wybrałem od biedy C#.

Pozdrawiam

0

Aha i tak, korzystam z Visual Studio 2017 ( oraz w tym przypadku z biblioteki sfml )

0

Wklej ten program w C++. Zobaczymy co to jest .

0

Program jest podzielony na ok. 7 plików nagłówkowych & źródłowych oraz maina. Wysłałem wszystko w pliku .rar 2 posty wcześniej. Może tak będzie łatwiej. Chyba, że tak Ci wygodniej / boisz sie o jakiegoś virusa to napisz jak możesz jeszcze raz, to przekleję, bo może nie zauważyłęś pliku i na marne bym to wklejał.

0

Przejrzałem ten program . Nie kumam o co w nim biega ale nawet efektowna grafika jest , Korzystasz gotowych bibliotek SFML .
Nie znam się na tym . Może ktoś w tym robi to ci pomoże .

0

Gdybyś miał jakieś konkretne pytania jak coś zrobić w C# to wal śmiało . Służę pomocą !

0

Okej, i tak dzięki za próbę :) Myślę, że podeprę się w miarę możliwości jakimś konwerterem i zobaczymy jak to wyjdzie.

0

Nie ma tego dużo, więc powinieneś sobie poradzić sam, największym wyzwaniem dla ciebie będzie moim zdaniem ogarnięcie SFML w C#, jest nawet zrobiony oficjalny binding do c# (https://www.sfml-dev.org/download/sfml.net/) aczkolwiek nie jest to najnowsza wersja.
Na twoim miejscu zaczął bym od tego właśnie, pobranie SFML i spięcie tego z c#, jeżeli będziesz w stanie odpalić okno gry to potem pójdzie już z górki. Możesz nawet spróbować mniej więcej zrobić copy-paste kodu który już masz, zobaczyć czy działa, naprawić błędy i na koniec refaktorować aby dopasować nazwy klas, zmiennych, funkcji itp do konwencji C#.




Btw. Mała podpowiedź do kodu c++, w funkcji CBlue::update() zamiast pisać całego drzewka ifów może zrobić coś takiego

const MovingData& MoveData = SpriteMoving[choise];
	
sprite.move(MoveData.Direction);
sprite.setRotation(MoveData.Rotation);

gdzie wypełnienie SpriteMoving byłoby wykonywane tylko raz, np w konstruktorze

struct MovingData
{
	sf::Vector2f Direction;
	float Rotation;
	
	MovingData(){}
	
	MovingData(float InX, float InY, float InRotation )
	: Direction(InX, InY)
	, Rotation(InRotation)
	{}
};

std::map<SIDE, MovingData> SpriteMoving;

SpriteMoving.emplace(SIDE::W, MovingData(-velocity, 0.f, 0.f) );
SpriteMoving.emplace(SIDE::E, MovingData(velocity, 0.f, 180.f) );
SpriteMoving.emplace(SIDE::N, MovingData(0.f, -velocity, 90.f) );
SpriteMoving.emplace(SIDE::S, MovingData(0.f, -velocity, 270.f) );
SpriteMoving.emplace(SIDE::SW, MovingData(-velocity, velocity, 315.f) );
SpriteMoving.emplace(SIDE::NW, MovingData(-velocity, -velocity, 45.f) );
SpriteMoving.emplace(SIDE::NE, MovingData(velocity, -velocity, 135.f) );
SpriteMoving.emplace(SIDE::SE, MovingData(velocity, velocity, 225.f) );

możesz pójść jeszcze dalej i zrobić tą mapę jako pole statyczne, wtedy przy uzupełnianiu mapy każde velocity zamienisz na 1.0f

SpriteMoving.emplace(SIDE::W, MovingData(-1.f, 0.f, 0.f) );
SpriteMoving.emplace(SIDE::E, MovingData(1.f, 0.f, 180.f) );
SpriteMoving.emplace(SIDE::N, MovingData(0.f, -1.f, 90.f) );
SpriteMoving.emplace(SIDE::S, MovingData(0.f, -1.f, 270.f) );
SpriteMoving.emplace(SIDE::SW, MovingData(-1.f, 1.f, 315.f) );
SpriteMoving.emplace(SIDE::NW, MovingData(-1.f, -1.f, 45.f) );
SpriteMoving.emplace(SIDE::NE, MovingData(1.f, -1.f, 135.f) );
SpriteMoving.emplace(SIDE::SE, MovingData(1.f, 1.f, 225.f) );

i poruszanie robisz tak:

const MovingData& MoveData = SpriteMoving[choise];
	
sprite.move(MoveData.Direction * velocity);

a rotacja zostaje bez zmiany.

0

Po co konwerter. Gramatyka c# jest jeszcze prostsza niż c++. Jak ktoś zna c++ to c# nauczy się w 5 minut
. Biblioteki załączasz w eksploratorze rozwiązania.

1 użytkowników online, w tym zalogowanych: 0, gości: 1