Archiwum dla tagu C#

Wysłany dnia 28 kwietnia 2011 o godzinie 16:53. Komentarzy: 3, kategorie: Programowanie , tagi: , .

Pisząc(powoli bo powoli, ale pisząc) rozgrywkę sieciową do Kingdoms Clash.NET, odkładałem „na potem” synchronizację dostępu do danych. Nie używam wielu wątków – ot 2 per aplikacja – ale problem dał się we znaki. W końcu stwierdziłem, że nie ma co się bawić w odkładanie tego i trzeba to napisać. Jak postanowiłem tak zrobiłem i wynik mnie zadowala. Czytaj dalej…

Wysłany dnia 29 października 2010 o godzinie 22:14. Skomentuj!, kategorie: Implementacja, Kingdoms Clash.NET , tagi: , .

Od moich pierwszych bojów z OpenTK minęło już trochę czasu. Mogę powiedzieć, że wiem, jak się nim posługiwać. Na początku biblioteka ta wydawała mi się idealna, niestety, wraz z nabywaniem doświadczenia odkrywałem coraz to różniejsze niedoróbki. Jedną z najbardziej denerwujących i najbardziej zignorowanych przeze mnie była obsługa wejścia. OpenTK udostępnia nam szereg klas, by, z założenia, móc wygodnie pobierać informacje od użytkownika. Niestety, tylko z założenia.

Czytaj dalej…

Wysłany dnia 15 października 2010 o godzinie 19:08. Skomentuj!, kategorie: .NET, Kingdoms Clash.NET, Programowanie , tagi: .

W poprzednim odcinku skupiłem się raczej na grze(i jak ją można ulepszyć) niż na, jak tytuł wskazywał, serializacji. Tak szczerze powiedziawszy to o grze samej w sobie jest bardzo mało wpisów, więcej jest o tym, czego użyłem, początkach z bibliotekami czy bojami z silnikiem. Przyznam, że nie wiem, czym to jest do końca spowodowane, możliwe, że gra jest od strony technicznej mało ciekawa :P

Na początku miałem zamiar opisać wszystkie znane mi sposoby na to, lecz po przemyśleniach stwierdziłem, że jest to bez sensu. W Internecie jest już tyle tekstów na ten temat(np. MSDN), że nie ma potrzeby, bym powielał to, co już jest. Opiszę natomiast to, czego ja użyłem i dlaczego akurat tego. Czytaj dalej…

Wysłany dnia 11 października 2010 o godzinie 17:28. Komentarzy: 1, kategorie: Kingdoms Clash.NET, Projektowanie , tagi: , .

Ostatnimi dniami(ściślej: dniem :P ) pisałem serializacje/deserializację danych, do których ma dostęp użytkownik. Już od dłuższego czasu myślałem jak to zrobić, by było dobrze. Było to jednym z głównych czynników zaprojektowania gry tak, a nie inaczej. Na „pierwszy raz” postanowiłem napisać ładowanie nacji z plików. Nad formatem zserializowanych danych nie myślałem długo – do tego świetnie nadaje się XML. Może jest lekko „ociężały”, ale ma świetne wsparcie .NET Frameworka i akurat w tym zastosowaniu ta ociężałość nie będzie jakoś bardzo widoczna. Czytaj dalej…

Wysłany dnia 26 września 2010 o godzinie 16:27. Komentarzy: 3, kategorie: .NET, Kingdoms Clash.NET, Programowanie , tagi: , .

Ostatnie kilka dni przesiedziałem nad samą fizyką. Nie implementowałem jej(w sposób nie-testowy) w grze, gdyż najpierw musiałem poznać tą bibliotekę i opracować „jak to zrobić”. Całe szczęście Box2D jak i Farseer Physics używa się przyjemnie i nie miałem większych problemów z ogarnięciem ich.

Przy pierwszym starciu z silnikiem przejrzałem jego „Hello World”(albo raczej „Hello World” Box2D) i napisałem „coś na wzór”(czyt. przepisałem to jeszcze raz :P ) swojego – oczywiście wszystko w konsoli. Potem zabrałem się u przepisałem to, co napisałem wcześniej, pod mój „silnik”. Hurra! Działa. Co prawda były błędy, ale tylko w wyświetlaniu(nie wiedziałem do końca wtedy „jak to działa”, teraz już wiem ciut więcej). Niestety, był to błąd. Zacząłem implementować poruszanie się jednostek. I, ogólnie rzecz biorąc, nie działało to tak jak chciałem. Niby się wszystko ruszało, kolizje były, ale a to tu coś się przesmykało, to tu „skakało”(choć to „wyłączyłem”), to się ruszać nie chciało. Nie wiedziałem, o co chodzi. Czytaj dalej…

Wysłany dnia 13 sierpnia 2010 o godzinie 00:46. Skomentuj!, kategorie: .NET, Kingdoms Clash.NET, Programowanie , tagi: , .

Postanowiłem sobie odpocząć od „projektowania” silnika(jeśli można to nazwać projektowaniem… ;) ) i napisać klasę, która będzie mi udostępniać podstawowe informacje o komputerze i systemie operacyjnym, np.:

  • wersję SO
  • wersję CLR
  • nazwę procesora, jego taktowanie i liczbę rdzeni
  • ilość zainstalowanej pamięci RAM
  • model karty graficznej, jej pamięć i wersję sterowników

Gdy pisałem coś podobnego w C++ do pobrania informacji o procesorze używałem asemblera i instrukcji cpuid, tutaj „nie ma tak dobrze”. Do pobrania informacji o karcie graficznej używałem OpenGL i glGetString, lecz zdobywałem ich tyle co kot napłakał.

Po krótkim poszukiwaniu dowiedziałem się jak to pobrać – WMI(i System.Environment ;) ). Czytaj dalej…

Wysłany dnia 13 lipca 2010 o godzinie 14:56. Komentarzy: 3, kategorie: .NET, Programowanie , tagi: , , .

Niedawno musiałem wyszukać jakiś program/bibliotekę do tworzenia raportów pod .NET(obsługującą SQL Server 2008). Pierwsze co mi przyszło na myśl to Crystal Reports – jest to rozwiązanie najbardziej rozbudowane, ale płatne. Całe szczęście w SQL Server Express istnieje coś takiego jak Reporting Services. Po przejrzeniu możliwości stwierdziłem, że ma wszystko to czego potrzebuję(z wyłączeniem integracji z VC# EE, ale do tego się przyzwyczaiłem).

Po aktualizacji mojej lokalnej wersji MSSQL do wersji 2008 R2, doinstalowaniu Advanced Services(co łatwe nie było, instalator jest mało intuicyjny) i skonfigurowaniu usługi raportów przystąpiłem do stworzenia testowego raportu. Dość prosty(i aktualny!) video kurs dla laików o tworzeniu raportów jest na Technecie. Raporty w BIDS tworzy się przyjemnie, opublikowanie ich w RS też większych problemów mi nie sprawiło(oprócz nadania uprawnień dla użytkownika, ale co było przyczyną nadal nie wiem, w Firefoxie dostęp do raportów z mojego konta działa, w IE – nie).

Nadszedł czas na uzyskanie dostępu do raportów po stronie aplikacji. Tutaj mamy do dyspozycji dwa Web Services(cztery, ale trzy prawie że niczym się nie różnią) – jeden do zarządzania usługą raportowania(ReportingService2005/2006/2010) i drugą do „wykonywania” raportów(ReportExecution2005). Pierwsza pozwala nam na listowanie, dodawanie, usuwanie, edycję raportów, zmianę uprawnień i inne czynności administracyjne – więcej informacji na MSDN. ReportExecutionService pozwala na renderowanie raportów, wyszukiwanie informacji w nich itp. (po więcej odsyłam do MSDN). Renderowanie raportów jest bajecznie proste. Wystarczy załadować raport, ewentualnie ustawić parametry dla raportu i… wyrenderować go! Całość można zamknąć w kilku linijkach kodu:

ReportExecutionService svc = new ReportExecutionService();
svc.Credentials = System.Net.CredentialCache.DefaultCredentials;
svc.LoadReport(PathToReport, null);
svc.SetExecutionParameters(new ParameterValue[] { new ParameterValue() { Name = "ID", Value = "5" } }, ""); //Przykładowy parametr
string ext, mime, enc;
Renderer.Warning[] warns;
string[] streamIds;
//Pierwszy parametr to żądany format raportu(liste obsługiwanych formatów dostajemy metodą ListRenderingExtensions)
//Drugi to DeviceInfo - http://msdn.microsoft.com/en-US/library/ms155397(v=SQL.90).aspx
//Reszta to rozszerzenie, tym MIME i kodowanie formatu, potem ostrzeżenia renderowania i identyfikatory strumienia(patrz MSDN)
var report = svc.Render("PDF", "", out ext, out mime, out enc, out warns, out streamIds);

W zmiennej report dostajem PDF z wygenerowanym raportem.