matematykaszkolna.pl
kulki Mariusz: http://www.gamesforthebrain.com/game/colorlines/ Macie pomysł jak oprogramować taką gierkę Myślę że planszę do gry można reprezentować za pomocą tablicy wskaźników na liczbę całkowitą NULL oznaczałby puste pole w przeciwnym przypadku wskazywalibyśmy na liczbę całkowitą z numerem RGB koloru Licznik zbić kulek mógłby być liczbą całkowitą Pozostaje jeszcze napisać funkcje rysujące planszę z kulkami i zajmujące się logiką rozgrywki
21 lis 12:53
jc: Kiedyś napisałem jawie, znajdziesz w sieci.
21 lis 13:05
Mariusz: Tę gierkę łatwo znaleźć w sieci jednak nie widziałem aby był udostępniany kod źródłowy
21 lis 13:21
jc: Ja akurat udostępniłem. Kod źródłowy spakowałem razem z bytcodem w pliku jar.
21 lis 13:41
Filip: a w czym chcesz to pisac? Sadzac po wygladzie da sie napisac te gierke w C++/SFML max w 3 dni emotka
21 wrz 17:47
Filip: nie wiem jaki jest warunek zakonczenie gry −−− zalozmy ze jak gracz zdobedzie 100 punktow gra sie konczy, glowna petla moze tak wygladac: auto score = 0; while (score != 100) { // pobieramy wspolrzedne x i y klikniecia myszka if (canMoveBallToPosition(grid, x, y)) { moveBallToPosition(grid, x, y); } // sprawdzamy czy nastepuje zbicie if (moreThanFourBallsInARowOrACol(grid)) { removeBalls(grid); score += ...; } } wiekszej filozofii tu nie widze
21 wrz 17:59
Filip: no i jeszcze tam trzeba dodac pomiedyz tymi ifami dodawanie kulek na planszy
21 wrz 18:02
Filip: takiego grida latwo przedstawic −−− zalozmy ze nasze okienko do gry ma wymiary 550x550 i jest to plansza10x10 kwadratow o dlugosci wektora 55 (to graficznie) Od zaplecza mozna to uznac, ze bedziemy miec przykladowo: std::array<std::array<sf::CircleShape, 10>, 10>> grid; I teraz przykladowo jak wykryc w ktore miejsce klika nam myszka. Kliknieciem myszki dostaniemy wspolrzedne, czyli np klikniecie zwroci nam wspolrzedne (x, y) −> (329, 400) Indeksy w naszej tablicy otrzymamy nastepujaco (grid[a][b]) (x i y to inty) a −> y / 55 + 1 −> 400 / 55 + 1 −> 8 b −> x / 55 + 1; −> 329 / 55 + 1 −> 6 czyli wiemy juz ktore "kolko" przesuwamy −−−> grid[8][6]
21 wrz 22:18
Filip: I jak Mariusz, cos napisales?
25 wrz 13:08
Mariusz: " nie wiem jaki jest warunek zakonczenie gry" Liczba wolnych pól równa zero Nie lepiej byłoby dać jako planszę tablicę liczb całkowitych int grid[9][9]; //liczba pól na planszy jest stała równa 81 Jeśli chodzi o losowanie to można by kulkę reprezentować jako dwie liczby całkowite (jedna liczba całkowita to pozycja kulki na planszy , a druga odpowiedzialna za kolor kulki) Na początku myślałem aby planszę reprezentować jako tablicę 9x9 liczb całkowitych a wyszukiwanie drogi dla kulki zrealizować jakimś algorytmem grafowym Wprowadzenie licznika wolnych pól też byłoby niezłym pomysłem Jakoś nie bardzo mi idzie poza tym oprócz tzw logiki gry zostało jeszcze wybranie jakiejś biblioteki graficznej Jaką proponowałbyś bibliotekę graficzną dla języka C ?
25 wrz 19:09
Filip: Nie wiem jak jest w C, w C++/SFML to bardzo prosto mógłbyś to zrobić, bo jest sf::CircleShape, które ma metody takie jak: void setRadius(float radius); void setFillColor(const Color& color); void setPosition(float x, float y); Kolor mógłbyś nawet losować, bo jest tam opcja RGB. no i po ustaleniu tych danych na naszym "kole" (docelowo kulce) dostaniemy taka kulke jak w grze (2D) Tak, przy szukaniu najkrótszej drogi można zinterpretować planszę jako graf, o 81 wierzchołkach, gdzie przejście z wi −> wj ma wagę 1 i jest stałę dla wszystkich i, j . Kiedyś pisałem kilka takich algorytmów, nie są aż tak skomplikowane − jeden opierał się na algorytmie DFS(int i). Co do losowania, trzeba uwzględnić, aby współrzędne kulki losowały się dopóki pole o tych współrzędnych będzie puste − z czego co pamiętam jc wrzucał raz tutaj taki mechanizm. (oczywiście nie jest to nic trudnego, ale jc miał jakiś fajny sposób na to). Ja już tak dobrze nie pamiętam C i C++ bo dawno w nich nie siedziałem, aktualnie od kilku miesięcy pracuje w Javie, ale głównie pod testy automatyczne. Do "stricte" programowania może wrócę w kolejnej przerwie wakacyjnej. Aktualnie nie mam czasu, gdyż mam prace + studia.
25 wrz 19:34
Filip: Zawsze w C możesz pójść na łatwiznę i zrobić coś takiego: int grid[9][9] = {0}; I się umówić, że gdy grid[i][j] == 0 to tam nie ma kulki, a gdy grid[i][j] > 0 to jest tam kulka, i grid[i][j] to jej kolor.
25 wrz 19:36
Filip: A funkcje sprawdzające zbicie można zrobić "chamsko", np: void checkRows(int grid[gridSize][gridSize]) { for (int i = 0; i < gridSize; i++) { for (int j = 0; j < gridSize − 5; j++) { if (grid[i][j] == grid[i][j + 1] && grid[i][j] == grid[i][j + 2] && grid[i][j + 2] == grid[i][j + 3] && grid[i][j + 3] == grid[i][j + 4] && grid[i][j + 4] == grid[i][j + 5]) { for (int k = j; k < 5; k++) { grid[i][k] = 0; } } } } }
25 wrz 20:04
Filip: (k < j − 5)*
25 wrz 20:07