Witam!
Piszę grę Sokoban (zakładałem już z tym wcześniej temat) jednak teraz mam inny problem. Mianowicie chciałbym aby program można było uruchamiać z poziomu wiersza poleceń, chodzi mi o coś takiego:
Sokoban.exe 1, gdzie: Sokoban.exe - nazwa pliku, a ta 1 to numer planszy.
Gdy chcę uruchomić tak program to wyskakuje mi czarne okno (utworzone przez SDL'a) jednak jest w nim tylko czarne tło. Czy wie ktoś może dlaczego tak się dzieje?
[SDL]Uruchamienie programu z poziomu...
- Arcymistrz
- Użytkownik
- Posty: 134
- Rejestracja: 9 sty 2012, o 17:08
- Płeć: Mężczyzna
- Podziękował: 22 razy
- Pomógł: 3 razy
[SDL]Uruchamienie programu z poziomu...
Z fusów nie wróżę, pokaż kod to może będę w stanie pomóc.
Jeżeli chcesz przyjmować argumenty wywołania to musisz w main zrobić coś takiego:
W argc jest przechowywana liczba argumentów wywołania, a w tablicy będziesz miał wartości poszczególnych argumentów.
np. Sobokan.exe arg1 arg2
Wówczas do wartości argumentów wywołania możesz się odwoływać za pomocą tablicy stringów:
argv[0] == Sokoban
argv[1] == arg1
argv[2] == arg2
Jeżeli chcesz przyjmować argumenty wywołania to musisz w main zrobić coś takiego:
Kod: Zaznacz cały
int main(int argc, char* argv[])
{
return 0;
}
np. Sobokan.exe arg1 arg2
Wówczas do wartości argumentów wywołania możesz się odwoływać za pomocą tablicy stringów:
argv[0] == Sokoban
argv[1] == arg1
argv[2] == arg2
Ostatnio zmieniony 22 maja 2013, o 19:01 przez Arcymistrz, łącznie zmieniany 5 razy.
- Peter Zof
- Użytkownik
- Posty: 585
- Rejestracja: 30 cze 2012, o 16:07
- Płeć: Mężczyzna
- Lokalizacja: Warszawa (MIMUW) / Pułtusk
- Podziękował: 88 razy
- Pomógł: 66 razy
[SDL]Uruchamienie programu z poziomu...
Panowie...przecież w SDL'u aby nawet utworzyć okno trzeba argumenty do maina dać
@edit: Zrobiłem to już innym sposobem, ale teraz mam nowy problem. Mam tablicę, która przechowuje nazwy map:
Tworzę zmienną:
i wszystkie odczyty z pliku robie tak, że wysyłam: tablica_leveli[aktualny_poziom];
Chcę zrobić coś takiego, że gdy użytkownik wciśnie np Enter to do zmiennej aktualny_poziom ma dodać jeden (do jej dotychczasowej wartości). Problem jednak w tym, że nie mogę tak zrobić, mogę ustawić tą zmienną na konkretną wartość ale nic więcej. Jak zrobie tak:
@edit: Zrobiłem to już innym sposobem, ale teraz mam nowy problem. Mam tablicę, która przechowuje nazwy map:
Kod: Zaznacz cały
char *tablica_leveli[10] = {"level_1.txt", "level_2.txt"...} i tak dalej.
Kod: Zaznacz cały
int aktualny_poziom = 0;
Chcę zrobić coś takiego, że gdy użytkownik wciśnie np Enter to do zmiennej aktualny_poziom ma dodać jeden (do jej dotychczasowej wartości). Problem jednak w tym, że nie mogę tak zrobić, mogę ustawić tą zmienną na konkretną wartość ale nic więcej. Jak zrobie tak:
Kod: Zaznacz cały
if( uzytkownik_wcisnal_enter )
{
aktualny_poziom = 1;
//aktualny_poziom++; ---> Źle! Jak tak zrobie to program przestanie działać! (po wciśnięciu ENTERA)
}
-
- Użytkownik
- Posty: 199
- Rejestracja: 24 maja 2012, o 23:36
- Płeć: Mężczyzna
- Lokalizacja: Wrocław
- Podziękował: 5 razy
- Pomógł: 30 razy
[SDL]Uruchamienie programu z poziomu...
Na podstawie tego nie da się za bardzo stwierdzić dlaczego. Nie pamiętam jak tam SDL działa z samo-powtarzaniem klawiszy, bo być może wykracza poza zakres tablicy. Jeżeli działają Ci inne klawisze to spróbuj tam przeprowadzić inkrementacje (choć pewnie już to zrobiłeś). Może to też zależeć od momentu, w którym wywołujesz nazwę z tablicy w pętli głównej.
- Peter Zof
- Użytkownik
- Posty: 585
- Rejestracja: 30 cze 2012, o 16:07
- Płeć: Mężczyzna
- Lokalizacja: Warszawa (MIMUW) / Pułtusk
- Podziękował: 88 razy
- Pomógł: 66 razy
[SDL]Uruchamienie programu z poziomu...
Na pewno nie wychodzę poza zakres tablicy, zadeklarowałem ją jako tablicę 10 elementów. Zmienna,
na której chcę dokonać postinkrementacji ma wartość zero, czyli po wciśnięciu klawisza miałaby wartość 1 (czyli nie przekraczam tablicy). Jak chcesz to napisz na PW i wyślę Ci kod (chociaż ostrzegam, że ciężko może być go ogarnąć).
Też myślałem, że może chodzi o miejsca w programie, ale gdy do tej zmiennej (po wciśnięciu klawisza) podstawiam normalnie jedynkę to ładuje mi się nowa mapa (:
na której chcę dokonać postinkrementacji ma wartość zero, czyli po wciśnięciu klawisza miałaby wartość 1 (czyli nie przekraczam tablicy). Jak chcesz to napisz na PW i wyślę Ci kod (chociaż ostrzegam, że ciężko może być go ogarnąć).
Też myślałem, że może chodzi o miejsca w programie, ale gdy do tej zmiennej (po wciśnięciu klawisza) podstawiam normalnie jedynkę to ładuje mi się nowa mapa (: