Dzień dobry
Czy możliwe jest wykonanie gry typu "air hockey" konsolowo?
Stworzyłem mapę i przy pomocy conio.h moge ruszać się postacią.
Póki co są to dopiero początki i bardziej próbuje się bawić funkcjami ale pytanie czy taka gra (z dosyć prostym mechanizmem) jest do wykonania konsolowo?

- Rejestracja:ponad 5 lat
- Ostatnio:3 miesiące
- Postów:19

- Rejestracja:ponad 5 lat
- Ostatnio:3 miesiące
- Postów:19
kq napisał(a):
Jak najbardziej jest do wykonania konsolowo. Np. możesz użyć ncurses.
nie znam póki co za bardzo tej biblioteki i jeżeli chodzi o samo progrmaowanie to jestem bardzo zielony więc pytanie może głupie no ale cóż ;)
czy mape stworzoną przy pomocy ascii mogę połączyć tak żeby krążek odbijał się od tych znaków?
- Bez tytułu.png (1 KB) - ściągnięć: 71

- Rejestracja:około 22 lata
- Ostatnio:około 2 godziny
- Postów:6687
Trad d napisał(a):
czy mape stworzoną przy pomocy ascii mogę połączyć tak żeby krążek odbijał się od tych znaków?
Tak.
Zanim Twój krążek zmieni pozycję, wiesz dokładnie w którą stronę leci, więc możesz sprawdzić na jaki znak trafi.

- Rejestracja:ponad 5 lat
- Ostatnio:3 miesiące
- Postów:19
troche czasu już minęło, ale w końcu się za to zabrałem
zacząłem powoli bawić się biblioteką allegro i teraz kolejne pytanie
wstępnie narysowałem boisko, oraz graczy statycznie
coś w stylu
void gracz1(){
int x=240;
int y=460;
circle(screen, x, y, 20, makecol(255, 0, 0));
}
teraz pytanie/// jak w nieskończonej pętli while prawidłowo wprawić postać w ruch/ bądź całkowicie inaczej prawidłowo powinno sie rysować postać, więc jak zabrać sie do tego żeby było dobrze?

- Rejestracja:około 22 lata
- Ostatnio:około 2 godziny
- Postów:6687
W najprostszym przypadku musisz przed pętlą zadeklarować zmienne x, y i nadać im początkową wartość. W pętli sprawdzasz czy odpowiednie klawisze są naciśnięte i w zależności od naciśniętego klawisza zwiększasz bądź zmniejszasz wartości zmiennych x, y o ustalone wartości, stanowiące prędkość poruszania się. Jeśli ustalisz stałą liczbę klatek na sekundę, to nie będziesz musiał mnożyć prędkości poruszania przez czas trwania klatki. I tak przy typie int dla pozycji postaci mnożenie przez czas klatki jest bez sensu ;)

- Rejestracja:ponad 5 lat
- Ostatnio:3 miesiące
- Postów:19
cały dom obudziłem jak postać sie poruszyła :D no ale niestety nie działa to tak jak chyba chciałem żbey działało
funkcję gracza przerobiłem tak
void gracz1(int x, int y){
circle(screen, x, y, 20, makecol(255, 0, 0));
}
przed pętlą raz jeszcze zainicjowałem x i y
int x=240;
int y=460;
a pętla nieskończona wygląda tak, przez co kółko sie powiela i robi smugę taką jak na obrazku
https://www33.zippyshare.com/v/nKuzbXsz/file.html
while (!key[KEY_ESC])
{
gracz1(x,y);
if(key[KEY_A]) x--;
to pewnie przez tą inicjację gracza na początku pętli
jak to moge obejść //

- Rejestracja:około 22 lata
- Ostatnio:około 2 godziny
- Postów:6687
Musisz w tej pętli nieskończonej przy każdym obrocie czyścić ekran. Bo inaczej ciągle rysujesz na tym samym buforze.
W pętli musisz zachować taką kolejność.
- Czyszczenie bufora ekranu.
- Rysowanie wszystkich obiektów w buforze - tło, gracz, wrogowie...
- Wrzucenie bufora na ekran.

- Rejestracja:ponad 5 lat
- Ostatnio:3 miesiące
- Postów:19
Postać sie odświeża i działa płynnie! no ot jedno z głowy, więc męcze was dalej :D
teraz pytanie co zrobić w przypadku gdy postać dotknie linii
nie wiem czy dobrze myśle, ale w pętli nieskończonej zaraz za sterowaniem umieszczam warunek if z założeniem że jeśli np. gracz1_x==1 (1 piksel to wtępnie moje obramowanie) to... no właśnie
czym mogę "odciąć" klawisz żeby już nie dało sie przejechać dlaej?

- Rejestracja:około 22 lata
- Ostatnio:około 2 godziny
- Postów:6687
Jeśli to jest krawędź ekranu (nie potrzebujesz obustronnej kolizji z linią), to wystarczy w kodzie obsługi klawisza skrócić przesunięcie gracza tak, żeby nigdy nie przekroczył linii.
Np. jak wciśnięta jest strzałka w lewo, to jeśli gracz1_x - przesunięcie_x < 1
, to gracz1_x = 1;
W przeciwnym razie wykonujemy normalny kod przesunięcia gracz1_x -= przesunięcie_x;


- Rejestracja:około 22 lata
- Ostatnio:około 2 godziny
- Postów:6687
http://cpp0x.pl/kursy/Kurs-Allegro-4-x-C++/Podwojne-buforowanie/69 - pewnie stary C++, może już jest nowsza wersja allegro, ale analogicznie powinieneś załapać o co biega.
Nie napisałeś w czym problem.
Prawidłowo to dobrze by było napisać jakieś klasy zgodne z allegro i Twoim silnikiem. Znacznie łatwiej się połapać w programowaniu obiektowym, niż strukturalnym. Obiekty, które się ruszają, wyświetlają itp. mają cechy wspólne. Więc można je wsadzić w jeden vector. Klasy obiektów mogą spokojnie dziedziczyć po klasie bazowej Twojego silnika, która by miała metody wirtualne służące do rysowania i poruszania. Te wszystkie metody Twoich obiektów z vectora będziesz mógł wywoływać w odpowiednich miejscach pętli nieskończonej.
Niestety Allegro i C++ nie ułatwiają zbytnio prowadzenia projektu gry. Zanim zrobisz rzeczy "jak należy", musisz sporo się nauczyć i zaprogramować odpowiednie mechanizmy.
W takim Unity 3D wyświetlanie, obiektów i ładowanie plików graficznych masz w standardzie. Wrzucasz obrazek na scenę, dołączasz do niego pusty skrypt i już możesz kodować zachowanie tego obiektu korzystając z bogatego zestawu klas i metod.

- Rejestracja:ponad 5 lat
- Ostatnio:3 miesiące
- Postów:19
Chwilowo z powodu braku czasu będę zmuszony odłożyć projekt
Myśle że w przyszłości do niego wrócę ale już w innej bibliotece ;
mimo wszyskto i tak chyba jestem zadowolony z tego co zrobiłem zabierając sie z zerową wiedzą na temat tworzenia gier ;
Dziękuje każdemu za pomoc a w szczególności @Spine
Zarejestruj się i dołącz do największej społeczności programistów w Polsce.
Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.