Temat 6. Przechowywanie danych w IOS Gra w kulki

Transkrypt

Temat 6. Przechowywanie danych w IOS Gra w kulki
Temat 6.
Przechowywanie danych w IOS
Gra w kulki - część 3
Wymagana wiedza wstępna:
1) Student musi
1) Umieć stworzyć projekt aplikacji konsolowej w XCode z wykorzystaniem
Objective-C
2) Umieć skompilować i uruchomić program w XCode
3) Skorzystać z podstawowych klas i funkcji Objective-C
4) Nauczyć się zasad wywoływania metod w Objective-C
5) Znać pojecie wskaźnika
6) Umieć tworzyć hierarchę klas w Objective-C
7) Umieć wykorzystywać późne wywołanie metod w Objective-C
8) Umieć korzystać z kolekcji
9) Umieć tworzyć własne inicjalizatory
10) Tworzyć referencje do obiektów znajdujących się na widoku
11) Obsługiwać domyślne interakcje z obiektami za pomocą własnych
metod
12) Znać zasady korzystania z @property i @synthesize
13) Rozumieć ideę MVC - model - view - controller
14) Rozumieć ideę delegata dla widoku (kontrolera)
2) Student powinien
1) Znać jezyk Java lub C# lub C++
Cel dydaktyczny
1) Student musi
1) Umieć przechowywać ustawienia w pamięci stałej IOS
2) Umieć uzyskać dostęp do plików
3) Umieć serializować dane do plików
2) Student powinien
1) Umieć korzystać z iCloud i zapisywać tam dane w postaci par kluczwartość
3) Student może
1) Umieć korzystać z GameKit
2) Umieć korzystać z dodatkowych Frameworków
3) Umieć korzystać z iCloud w zakresie zapisywnia w nim danych
UIDocument
Zakres tematyczny wykładu i laboratorium
Niniejsze zajęcia wprowadzają wiedzę z zakresu przechowywania danych na
urządzeniach IOS oraz zapamiętywania danych w chmurze z wykorzystaniem iCloud oraz
GameKit.
 Core Data - możliwości
 Grupowanie filtrowanie i organizowanie danych
 NSPredicate – obiekty ograniczeń zapytań
 Architektura CoreData - Konteksty i obiekty zarządzalne
 NSManagedObject i NSManagedObject
 Tworzenie obiektu zarządzalnego
 NSUserDefaults - konfigurowanie preferencji użytkownika
 CFPreferences API - Zarządzanie preferencjami użytkownika i urządzenia / aplikacji
Programowanie Urządzeń Mobilnych Apple - materiały do laboratorium - 1/4
 Dane w chmurze iCloud
o Klucz-wartosć - dla prostych danych – ustawień, preferencji, stanu aplikacji.
o Document - dla danych widzialnych w formie dokumentów bezpośrednio dla
użytkownika
o Core Data – dla danych strukturalnych niewidocznych bezpośrednio dla
użytkownika
 NSUbiquitousKeyValueStore
 UbiquityContainer
 GameCenter - Baza danych gry w chmurze
 Framework GameKit
 Uzyskiwanie dostępu do GameCenter
Załączniki
1. Prezentacja_6.pdf - slajdy prezentacji wykładu
Zadania na laboratorium
Stwórz projekt gry „Uciekająca kulka”
Zasady gry.
Gra polega na śledzeniu i blokowaniu ruchów kulki. Kulka porusza się w losowo wybranym
kierunku. Jeśli wypadnie poza krawędź ekranu, gra kończy się.
Aby zapobiec wypadnięciu, należy na krawędzi ekranu ustawić blokadę, tak aby przeciąć
tor ruchu kulki. Kulka odbije się od blokady i będzie kontynuowała ruch w nowym kierunku.
Program ma rozpoczynać się od menu, w którym można rozpocząć grę. Po przegranej,
gra ma powrócić do menu.
Zadanie 1.
Dodaj do klasy kulka pole tekstowe, które będzie wyświetlało na kulce aktualny wynik gry.
Podpowiedzi
1) Pole tekstowe to UILabel. Należy stworzyć odpowiednią właściwość i przypisać do niej
nowy obiekt tego typu. Następnie należy umieścić ten obiekt na widoku kulki,
pamiętając o odpowiedniej kolejności.
self.l = [[UILabel alloc]init];
[l setFont:[UIFont fontWithName:@"AmericanTypewriter-Bold" size:52.0]];
[l setTextColor:[UIColor whiteColor]];
[l setBackgroundColor:[UIColor clearColor]];
[l setTextAlignment:NSTextAlignmentCenter];
[self addSubview:l];
2) Uaktualnianie właściwości pola należy wykonać w metodzie addPoint wywoływanej przy
każdym odbiciu kulki
-(void)addPoint{
self.result+=1;
l.text=[[NSString alloc]initWithFormat:@"%d",self.result];
}
Zadanie 2.
Programowanie Urządzeń Mobilnych Apple - materiały do laboratorium - 2/4
W momencie zakończenia gry zapisz aktualny wynik w ustawieniach aplikacji.
Podpowiedzi
1) Wykorzystaj NSUserDefaults
[[NSUserDefaults standardUserDefaults] setValue:self.result forKey:@"wynik"];
2) Sprawdź wcześniej czy poprzedni wynik był mniejszy od aktualnego i tylko w tym
przypadku zmodyfikuj wartość ustawienia.
Zadanie 3.
Zapamiętaj wynik korzystając w pliku.
Podpowiedzi
1) Wykorzystaj NSMutableArray do zapamiętywania wyników tymczasowo
storedScores = [[NSMutableArray alloc] init];
2) Wykorzystaj framework NSData do zapisywania danych w pamięci masowej
NSData * archivedScore = [NSKeyedArchiver archivedDataWithRootObject:storedScores];
NSError * error;
[archivedScore writeToFile:storedScoresFilename options:NSDataWritingFileProtectionNone
error:&error];
3) Odczyt danych
NSArray * unarchivedObj = [NSKeyedUnarchiver
unarchiveObjectWithFile:storedScoresFilename];
if (unarchivedObj){
storedScores = [[NSMutableArray alloc] initWithArray:unarchivedObj];
}
Zadanie 4.
Zapamiętaj status gry korzystając z zapisywania par klucz-wartosć w iCloud.
Zadania dodaktowe *
Zadanie 1.
Wykorzystaj GameKit do wysłania danych o wynikach do bazy Apple
Podpowiedzi
1) Zmodyfikuj zapamiętywnie wyników tak, aby obiekty w tablicy były typu GKScore
NSString * leaderboardCategory = @"pl.umk.kulki.scores";
GKScore * score = [storedScores objectAtIndex:index];
GKScore * submitScore = [[GKScore alloc] initWithCategory:leaderboard];
[submitScore setValue:self.result];
[submitScore setShouldSetDefaultLeaderboard:YES];
[submitScore setContext:1];
Zadanie 2.
Dodaj wyświetlanie najlepszych wyników za pomocą GameKit
Programowanie Urządzeń Mobilnych Apple - materiały do laboratorium - 3/4
- (void)showLeaderboard:(NSString *)leaderboard
{
GKLeaderboardViewController * leaderboardViewController = [[GKLeaderboardViewController alloc]
init];
[leaderboardViewController setCategory:leaderboard];
[leaderboardViewController setLeaderboardDelegate:self];
[self presentModalViewController:leaderboardViewController animated:YES];
}
- (void)leaderboardViewControllerDidFinish:(GKLeaderboardViewController *)viewController
{
[self dismissModalViewControllerAnimated: YES];
}
Programowanie Urządzeń Mobilnych Apple - materiały do laboratorium - 4/4