PONG przy użyciu biblioteki windows.h

PONG przy użyciu biblioteki windows.h
WL
  • Rejestracja:około 13 lat
  • Ostatnio:ponad 8 lat
  • Postów:23
0

Cześć !
Mam do was takie pytanie próbowaliście może napisać kiedyś ponga przy użyciu biblioteki windows.h ?
Nie mam jeszcze dokładnego planu jak to ma działać nie znam za bardzo komend, ma ktoś może jakiś ciekawy tutorial, który pokazuje jak tworzyć dwuwymiarowe elementy wykorzystując właśnie tą biblioteke ?

MVC
Próbowałem kilka razy i skończyłem na poruszasjącej się kulce :P Zrezygnowałem...
0
43
  • Rejestracja:prawie 14 lat
  • Ostatnio:ponad 6 lat
  • Postów:61
1

Nie polecam pisać w surowym WinApi. Jest to męczarnia.

Zamiast tego, należy sobie wybrać jedną z popularnych bibliotek ( MFC, Qt, wxWidgets lub cokolwiek innego ) lub... zainteresować się .NET i C++/CLI albo C#.

flowCRANE
Moderator Delphi/Pascal
  • Rejestracja:ponad 13 lat
  • Ostatnio:minuta
  • Lokalizacja:Tuchów
  • Postów:12150
0
4ggr35510n napisał(a)

Nie polecam pisać w surowym WinApi. Jest to męczarnia.

Piszesz tak, jakby WinAPI nie miało żadnych zalet, a jest ich dużo; Oczywiście wadą jest długość kodu, bo potrafi być znacznie dłuższy od wygenerowanego z VCL, ale ma się pełną kątrolę nad aplikacją, ta działa bardzo szybko i przy okazji zajmuje bardzo mało miejsca na dysku;

Żeby jednak sprawnie pisać w surowym WinAPI trzeba mieć dużą wiedzę i umiejętności;


Pracuję nad własną, arcade'ową, docelowo komercyjną grą z gatunku action/adventure w stylu retro (pixel art), programując silnik i powłokę gry od zupełnych podstaw, przy użyciu Free Pascala i SDL3. Więcej informacji znajdziesz na moim mikroblogu.
edytowany 1x, ostatnio: flowCRANE
Zobacz pozostałe 3 komentarze
flowCRANE
Jeśli chodzi o "pełną kontrolę" to mam na myśli to, że pisząc pod VCL nie kontrolujemy w sposób bezpośredni tego, co automatycznie jest generowane; W WinAPI sami dbamy o każdy szczegół, obsługujemy komunikaty systemu (bo zdarzeń nie ma), co pod VCL nie jest najwygodniejsze, dosłownie panujemy nad każdą instrukcją w kodzie; VCL zwalnia nas z wielu rzeczy, ale też niejako upośledza aplikację; Najbardziej mnie denerwujący jest fakt, że czysty formularz (BD7) zajmuje ok. 360kb, gdzie to samo pod WinAPI mieści się w granicach 20kb;
xxx_xx_x
tylko pisząc w winapi ograniczysz swoją aplikacje tylko do windowsa, chyba ze masz na tyle cierpliwości(i przede wszystkim czasu) że napiszesz tez odpowiedniki swoich funkcji dla innych systemów... tylko po co, skoro to już istnieje (np. wxWidgets, QT, itd). Podsumowując winapi: zysk prędkości? Dla aplikacji okienkowej niezauważalny. Czytelność? porażka. Uważasz ze napiszesz lepsza bibliotekę niż masa ludzi która to poprawia od lat? Wątpię. Przenośność? Żadna. Wielkość exe? przy obecnych dyskach, jak exe dostanie mały zastrzyk kb to nikt nie zauważy.
flowCRANE
Racja, to jest tak samo, jak ze znajomością asm'a - mimo tego, że już od dawna są języki wysokopoziomowe i tak jest masa ludzi, którzy w nim piszą; Jeśli ma się czas i chęci - warto uczyć się WinAPI; W dobie dzisiejszych komputerów wielkość exe'ków nie ma więszego znaczenia, bo zarówno ilość pamięci, taktowanie procesowów oraz pojemność dysków twardych wciąż rośnie, tak że większego sensu pisanie w czystym WinAPI nie ma; Jednak zaletą jest pisanie programów właśnie w czystym WinAPI;
xxx_xx_x
Z asm różnica jest taka że uzywa sie go do optymalizacji pod sprzęt lub pisania aplikacji embedded, natomiast optymalizacja kodu przez użycie winapi nie ma sensu. Obsługa GUI okienkowego nigdy nie powinna miec wpływu na wydajność pracy aplikacji. Mozna sie zapoznać z winapi, ale tworzenie całej aplikacji tylko w nim to juz raczej przejaw tylko i wyłacznie masochizmu, a w przypadku pracy z całym zespołem i sadyzmu =P
flowCRANE
Ciekawe co na to @olesio :P
WL
  • Rejestracja:około 13 lat
  • Ostatnio:ponad 8 lat
  • Postów:23
0

Dobra zdecydowałem się już na SFML próbuję się go nauczyć z pewnej strony jednak nie idzie tak łatwo jakby się wydawało.
Biblioteka na pewno mi działa bo sprawdzałem sposobem pokazanym pod koniec tego filmiku zreszta w taki sam sposob instalowalem biblioteke

a to kurs z któego korzystam

http://cpp0x.pl/kursy/Kurs-SFML-C++/Obsluga-zdarzen-klawiatura-mysz-i-inne/329

wklejam do kompilatora ten kod, który już rzekomo powinien działać, mignąć jakimś oknem czy coś ...

Kopiuj
 #include <SFML/Window.hpp>

int main()
{
    sf::Window oknoAplikacji( sf::VideoMode( 800, 600, 32 ), "Kurs SFML - http://cpp0x.pl" );
    while( oknoAplikacji.IsOpened() )
    {
        sf::Event zdarzenie;
        while( oknoAplikacji.GetEvent( zdarzenie ) )
        {
            if( zdarzenie.Type == sf::Event::Closed )
                 oknoAplikacji.Close();
            
            if( zdarzenie.Type == sf::Event::KeyPressed && zdarzenie.Key.Code == sf::Key::Escape )
                 oknoAplikacji.Close();
            
            if( zdarzenie.Type == sf::Event::MouseButtonPressed && zdarzenie.MouseButton.Button == sf::Mouse::Middle )
                 oknoAplikacji.Close();
            
        }
        oknoAplikacji.Display();
    }
    return 0;
}

a tu wyskakuje taki szereg błędów w Outpucie:

1>------ Build started: Project: sfmlnowy, Configuration: Debug Win32 ------
1> main.cpp
1>main.obj : error LNK2019: unresolved external symbol "public: virtual __thiscall sf::Window::~Window(void)" (??1Window@sf@@UAE@XZ) referenced in function _main
1>main.obj : error LNK2019: unresolved external symbol "public: void __thiscall sf::Window::Display(void)" (?Display@Window@sf@@QAEXXZ) referenced in function _main
1>main.obj : error LNK2019: unresolved external symbol "public: void __thiscall sf::Window::Close(void)" (?Close@Window@sf@@QAEXXZ) referenced in function _main
1>main.obj : error LNK2019: unresolved external symbol "public: bool __thiscall sf::Window::GetEvent(class sf::Event &)" (?GetEvent@Window@sf@@QAE_NAAVEvent@2@@Z) referenced in function _main
1>main.obj : error LNK2019: unresolved external symbol "public: bool __thiscall sf::Window::IsOpened(void)const " (?IsOpened@Window@sf@@QBE_NXZ) referenced in function _main
1>main.obj : error LNK2019: unresolved external symbol "public: __thiscall sf::Window::Window(class sf::VideoMode,class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const &,unsigned long,struct sf::WindowSettings const &)" (??0Window@sf@@QAE@VVideoMode@1@ABV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@KABUWindowSettings@1@@Z) referenced in function _main
1>main.obj : error LNK2019: unresolved external symbol "public: __thiscall sf::VideoMode::VideoMode(unsigned int,unsigned int,unsigned int)" (??0VideoMode@sf@@QAE@III@Z) referenced in function _main
1>C:\Documents and Settings\admin\moje dokumenty\visual studio 2010\Projects\sfmlnowy\Debug\sfmlnowy.exe : fatal error LNK1120: 7 unresolved externals
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========

matek3005
  • Rejestracja:prawie 15 lat
  • Ostatnio:prawie 5 lat
  • Postów:358
0

takie błędy wyskakują przeważnie w momencie gdy spartaczysz coś przy dodawaniu bibliotek linkerowi - to tak na przyszłość. Teraz druga rada na przyszłość zanim klepniesz jakiś temat na forum spróbowałbyś przeszukać sieć (powinien wystarczyć serwis, z którego prawdopodobnie się uczysz) bo być może na całym świecie nie jesteś jedyny z takim problemem. Sprawdź czy ta dyskusja ci pomoże.

edytowany 1x, ostatnio: matek3005
Hixohe
  • Rejestracja:około 14 lat
  • Ostatnio:około 12 lat
  • Postów:27
0

Cztery proste kroki.

  1. Dodanie katalogu z include w opcjach / lub przerzucenie do odpowiedniego katalogu w Visualu.
  2. Include w projekcie
  3. Dodanie lib w w opcjach linkera->input
  4. AFAIK potrzeba jeszcze wrzucić pliki dll do katalogu projektu

Jeśli potrzebujesz pomocy, śmiało pisz GG#27355
Realizuje zlecenia w C/C++/C#, JAVA, Pascal, JS
Kurs ABAP Programista ABAP
WL
  • Rejestracja:około 13 lat
  • Ostatnio:ponad 8 lat
  • Postów:23
0
Hixohe napisał(a):
  1. AFAIK potrzeba jeszcze wrzucić pliki dll do katalogu projektu

ale w które dokłądnie miejsce ?

Bo wszystkie z powyższych kroków wykonalem tak jak tu:

z tym, że zamiast system dałem window biblioteka system mi działa jak robie tak jak na filmiku a window nie :/

edytowany 1x, ostatnio: WL
Kliknij, aby dodać treść...

Pomoc 1.18.8

Typografia

Edytor obsługuje składnie Markdown, w której pojedynczy akcent *kursywa* oraz _kursywa_ to pochylenie. Z kolei podwójny akcent **pogrubienie** oraz __pogrubienie__ to pogrubienie. Dodanie znaczników ~~strike~~ to przekreślenie.

Możesz dodać formatowanie komendami , , oraz .

Ponieważ dekoracja podkreślenia jest przeznaczona na linki, markdown nie zawiera specjalnej składni dla podkreślenia. Dlatego by dodać podkreślenie, użyj <u>underline</u>.

Komendy formatujące reagują na skróty klawiszowe: Ctrl+B, Ctrl+I, Ctrl+U oraz Ctrl+S.

Linki

By dodać link w edytorze użyj komendy lub użyj składni [title](link). URL umieszczony w linku lub nawet URL umieszczony bezpośrednio w tekście będzie aktywny i klikalny.

Jeżeli chcesz, możesz samodzielnie dodać link: <a href="link">title</a>.

Wewnętrzne odnośniki

Możesz umieścić odnośnik do wewnętrznej podstrony, używając następującej składni: [[Delphi/Kompendium]] lub [[Delphi/Kompendium|kliknij, aby przejść do kompendium]]. Odnośniki mogą prowadzić do Forum 4programmers.net lub np. do Kompendium.

Wspomnienia użytkowników

By wspomnieć użytkownika forum, wpisz w formularzu znak @. Zobaczysz okienko samouzupełniające nazwy użytkowników. Samouzupełnienie dobierze odpowiedni format wspomnienia, zależnie od tego czy w nazwie użytkownika znajduje się spacja.

Znaczniki HTML

Dozwolone jest używanie niektórych znaczników HTML: <a>, <b>, <i>, <kbd>, <del>, <strong>, <dfn>, <pre>, <blockquote>, <hr/>, <sub>, <sup> oraz <img/>.

Skróty klawiszowe

Dodaj kombinację klawiszy komendą notacji klawiszy lub skrótem klawiszowym Alt+K.

Reprezentuj kombinacje klawiszowe używając taga <kbd>. Oddziel od siebie klawisze znakiem plus, np <kbd>Alt+Tab</kbd>.

Indeks górny oraz dolny

Przykład: wpisując H<sub>2</sub>O i m<sup>2</sup> otrzymasz: H2O i m2.

Składnia Tex

By precyzyjnie wyrazić działanie matematyczne, użyj składni Tex.

<tex>arcctg(x) = argtan(\frac{1}{x}) = arcsin(\frac{1}{\sqrt{1+x^2}})</tex>

Kod źródłowy

Krótkie fragmenty kodu

Wszelkie jednolinijkowe instrukcje języka programowania powinny być zawarte pomiędzy obróconymi apostrofami: `kod instrukcji` lub ``console.log(`string`);``.

Kod wielolinijkowy

Dodaj fragment kodu komendą . Fragmenty kodu zajmujące całą lub więcej linijek powinny być umieszczone w wielolinijkowym fragmencie kodu. Znaczniki ``` lub ~~~ umożliwiają kolorowanie różnych języków programowania. Możemy nadać nazwę języka programowania używając auto-uzupełnienia, kod został pokolorowany używając konkretnych ustawień kolorowania składni:

```javascript
document.write('Hello World');
```

Możesz zaznaczyć również już wklejony kod w edytorze, i użyć komendy  by zamienić go w kod. Użyj kombinacji Ctrl+`, by dodać fragment kodu bez oznaczników języka.

Tabelki

Dodaj przykładową tabelkę używając komendy . Przykładowa tabelka składa się z dwóch kolumn, nagłówka i jednego wiersza.

Wygeneruj tabelkę na podstawie szablonu. Oddziel komórki separatorem ; lub |, a następnie zaznacz szablonu.

nazwisko;dziedzina;odkrycie
Pitagoras;mathematics;Pythagorean Theorem
Albert Einstein;physics;General Relativity
Marie Curie, Pierre Curie;chemistry;Radium, Polonium

Użyj komendy by zamienić zaznaczony szablon na tabelkę Markdown.

Lista uporządkowana i nieuporządkowana

Możliwe jest tworzenie listy numerowanych oraz wypunktowanych. Wystarczy, że pierwszym znakiem linii będzie * lub - dla listy nieuporządkowanej oraz 1. dla listy uporządkowanej.

Użyj komendy by dodać listę uporządkowaną.

1. Lista numerowana
2. Lista numerowana

Użyj komendy by dodać listę nieuporządkowaną.

* Lista wypunktowana
* Lista wypunktowana
** Lista wypunktowana (drugi poziom)

Składnia Markdown

Edytor obsługuje składnię Markdown, która składa się ze znaków specjalnych. Dostępne komendy, jak formatowanie , dodanie tabelki lub fragmentu kodu są w pewnym sensie świadome otaczającej jej składni, i postarają się unikać uszkodzenia jej.

Dla przykładu, używając tylko dostępnych komend, nie możemy dodać formatowania pogrubienia do kodu wielolinijkowego, albo dodać listy do tabelki - mogłoby to doprowadzić do uszkodzenia składni.

W pewnych odosobnionych przypadkach brak nowej linii przed elementami markdown również mógłby uszkodzić składnie, dlatego edytor dodaje brakujące nowe linie. Dla przykładu, dodanie formatowania pochylenia zaraz po tabelce, mogłoby zostać błędne zinterpretowane, więc edytor doda oddzielającą nową linię pomiędzy tabelką, a pochyleniem.

Skróty klawiszowe

Skróty formatujące, kiedy w edytorze znajduje się pojedynczy kursor, wstawiają sformatowany tekst przykładowy. Jeśli w edytorze znajduje się zaznaczenie (słowo, linijka, paragraf), wtedy zaznaczenie zostaje sformatowane.

  • Ctrl+B - dodaj pogrubienie lub pogrub zaznaczenie
  • Ctrl+I - dodaj pochylenie lub pochyl zaznaczenie
  • Ctrl+U - dodaj podkreślenie lub podkreśl zaznaczenie
  • Ctrl+S - dodaj przekreślenie lub przekreśl zaznaczenie

Notacja Klawiszy

  • Alt+K - dodaj notację klawiszy

Fragment kodu bez oznacznika

  • Alt+C - dodaj pusty fragment kodu

Skróty operujące na kodzie i linijkach:

  • Alt+L - zaznaczenie całej linii
  • Alt+, Alt+ - przeniesienie linijki w której znajduje się kursor w górę/dół.
  • Tab/⌘+] - dodaj wcięcie (wcięcie w prawo)
  • Shit+Tab/⌘+[ - usunięcie wcięcia (wycięcie w lewo)

Dodawanie postów:

  • Ctrl+Enter - dodaj post
  • ⌘+Enter - dodaj post (MacOS)