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

Usprawnienie i przemyślenia dotyczące najprostszej gry napisanej przez nowicjusza + pytanie o wczytywanie znaku w C

Object Storage Arubacloud
+1 głos
266 wizyt
pytanie zadane 8 lutego 2016 w C i C++ przez Jędrzej Dembowski Użytkownik (740 p.)
Na początku wrzucam kody do programu, jest to projekt na zaliczenie, jednym z kryteriów było rozdzielnie kodu na kilka plików, dlatego zamieszczam go w takiej formie.

http://wklej.org/id/1932707/

http://wklej.org/id/1932709/

http://wklej.org/id/1932710/

Na wstępie chciałem przeprosić jeśli robię coś nie tak, to mój pierwszy post na jakimkolwiek forum programistycznym, stawiam pierwsze kroki w programowaniu i chciałem zacząć, zgodnie z radą pana Mirosława Zelenta, zamieszczać na bieżąco moje kody aby poddać je ocenie i poprawkom. Będę wdzieczny za wszelkie odpowiedzi. Tak jak pisałem wcześniej prosiłbym o uwagi dotyczące powyższego kodu, rady co mógłbym poprawić w tym krótkim projekcie.

Mam również pytanie dotyczące mojego przyszłego projektu(stworzonego dla siebie, a nie jako praca wymagana na uczelnię). Czy istnieje jakiś łatwy sposób pobierania znaku od użytkownika bez potwierdzania go (enterem) i wyświetlania go w konsoli?  

Chciałbym również zapytać o możliwe rozwiązanie problemu "odswieżania" dwuwymiarowej tablicy, czy istnieje sposób, który pozwala na przesunięcie piłki bez "mrygania" całej tablicy.

Co myślicie o regularnym zamieszczaniu kodów na tym forum i poddawaniu ich ocenie? Może to nie najlepsze miejsce do tego typu rzeczy? Może powinienem zamieszczać takie rzeczy w innym dziale?

Za wszelkie odpowiedzi będę bardzo wdzięczny.

4 odpowiedzi

+4 głosów
odpowiedź 8 lutego 2016 przez Sedi Stary wyjadacz (10,200 p.)

Twój kod jest długi. Jest to ponad 300 linii kodu, a czas na tej Ziemii człowiek ma ograniczony. Wierz mi lub nie, ale mało kto będzie chciał analizować kod linijka po linijce :) W miarę możliwości samodzielnie szukaj tego co Twoim zdaniem jest nieefektywne. Małe fragmenty wrzucaj na forum, na które pewnie ktoś chętnie udzieli Ci wskazówki :)

Przeglądając kod, mogę stwierdzić, że jest ładny. Nie używasz (co jest bardzo ważne) zmiennych globalnych, tworzysz dużo funkcji, dzięki czemu zrozumienie kodu jest prostsze. Nazywasz też funkcje po tym co robią, a nie np.funkcja1. To bardzo dobrze.

Co do Twoich pytań, to:

  1. Nie wiem jak jest w C, ale w C++ mógłbyś napisać :
#include <iostream>
#include <conio.h>
using namespace std;

int main()
{

    int znak;
    znak=getch();
    std::cout<<static_cast<char>(znak)<<'\n';

    return 0;
}

Z racji tego, że piszesz w C nie możesz napisać static_cast, które jest lepsze. Możesz za spróbować zamienić to static_cast <char>(znak) na :

(char)(znak)

I oczywiście pozamieniać funkcje, które nie występują w C.


Co do pytania drugiego, to wszystko się da, więc najlepiej zapytać się nie czy się da, ale jak :) 

W sprawie pytania trzeciego, to tak jest to dobre. Z tym, że lepszym pomysłem nie jest wrzucanie kodu, który zajmuje dużo lini kodu, tylko pojedyńcze funkcje/problemy. Ludzie mają jedno życie :)

Pozdrawiam i fajnie, że się rozwijasz :)

+1 głos
odpowiedź 8 lutego 2016 przez Paweł Głomski Obywatel (1,650 p.)
Co do 2 pytania to pisząc w c++ użyłbym funkcji gotoxy(), by ustawić kursor w "stare" miejsce piłki i je wyczyścić, oraz ustawić kolejny raz, w "nowym" miejscu i tam wstawić piłkę. W taki sposób rysujesz tylko 2 pola. Nie wiem jednak jak to się ma do języka C.
0 głosów
odpowiedź 8 lutego 2016 przez Jędrzej Dembowski Użytkownik (740 p.)
Dziękuję bardzo za odpowiedź, z rad skorzystam bardzo chętnie, jeśli chodzi o język to pisałem to w c, dlatego że musiałem, następny projekt mam zamiar napisać w C++. Dorzucam również plik z archiwum do plików źródłowych, przez roztargnienie zapomniałem zrobić to w pierwszym poście, a dzięki temu można uruchomić program i zobaczyć jak działa.

http://www100.zippyshare.com/v/nYmaJ8LW/file.html
0 głosów
odpowiedź 8 lutego 2016 przez jpacanowski VIP (101,940 p.)
	if(tab[pierwsza+1][druga+1]=='|' || tab[pierwsza+1][druga+1]=='_')
	{
		printf("TRAFILES W SCIANE\n");
		tab[pierwsza][druga]='*'; int i,j;
		Sleep(500);
		system("cls");
	    wyswietl(tab);
	    getch();
	    return 0;
	}

W 4. linijce: 

int i,j;

jest zbędne.

Używasz dużo printf() bez użycia opcjonalnych argumentów. Zamiast tego lepiej używać puts() gdyż jest szybsze. Ale to szczegół.

Podobne pytania

+1 głos
2 odpowiedzi 313 wizyt
pytanie zadane 14 września 2015 w C i C++ przez C☺ndzi Stary wyjadacz (12,100 p.)
+1 głos
2 odpowiedzi 2,686 wizyt
pytanie zadane 4 lutego 2016 w C# przez MichK Użytkownik (550 p.)
0 głosów
1 odpowiedź 432 wizyt
pytanie zadane 24 maja 2018 w C i C++ przez jankowa1ski Gaduła (3,560 p.)

92,579 zapytań

141,429 odpowiedzi

319,657 komentarzy

61,963 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!

...