Je crée un jeu simple (application iPhone) et je veux que les utilisateurs aient un classement basé sur des points. Quel serait le meilleur moyen de stocker tous les points utilisateurs et d'attribuer un rang à un utilisateur lors du premier lancement de l'application? J'ai un serveur (un site web), donc je peux utiliser SQL si nécessaire. Des idées?Meilleure façon de stocker le «rang» d'un utilisateur - iPhone App
Répondre
vous pouvez utiliser un NSMutableURLRequest pour accéder à une page php qui lit le classement (s) à partir d'une base de données mySQL. Avoir le php de sortie XML et analyser le résultat. Le code suivant envoie une requête à une page php, puis analyse le fichier XML renvoyé par cette page. (Vous pouvez également publier des données sur une page php différente pour mettre à jour les entrées de la base de données, etc.).
//IN THE .h class (of a viewController)
... : UIViewController {
//I use a label to display the data
IBOutlet UILabel *label1;
//Create global variable
NSString *tempString;
//Dataset for response from HTTP Request
NSMutableData *receivedData;
NSXMLParser *xmlParser;
}
-(void) initiateAPIConnection;
@property (nonatomic, retain) NSString *tempString;
@property (nonatomic, retain) UILabel *label1;
@end
//IN THE .h class
//IN THE .m class
//...
@synthesize label1, tempString;
//...
-(void)initiateAPIConnection{
NSString *post = [NSString stringWithFormat:@"user=Chris"];
NSData *postData = [post dataUsingEncoding:NSASCIIStringEncoding allowLossyConversion:YES];
NSString *postLength = [NSString stringWithFormat:@"%d", [postData length]];
NSMutableURLRequest *request = [[[NSMutableURLRequest alloc] init] autorelease];
[request setURL:[NSURL URLWithString:@"http://www.yourDomain.com/yourPhpPage.php"]];
[request setHTTPMethod:@"POST"];
[request setValue:postLength forHTTPHeaderField:@"Content-Length"];
[request setValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"Content-Type"];
[request setTimeoutInterval:10.0]; //fail after 10 seconds with no response
[request setHTTPBody:postData];
NSURLConnection *conn=[[[NSURLConnection alloc] initWithRequest:request delegate:self] autorelease];
if (conn){
NSLog(@"In if conn");
receivedData = [[NSMutableData data] retain];
NSLog(@"End of if conn");
}
else{
UIAlertView *alert = [[UIAlertView alloc]initWithTitle:@"Conn error" message:@"No Server" delegate:nil cancelButtonTitle:@"ok" otherButtonTitles:nil];
[alert show];
[alert release];
}
}//initiateAPIConnection
-(void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error{
UIAlertView *alert = [[UIAlertView alloc]initWithTitle:@"Connection error" message:[error localizedDescription] delegate:self cancelButtonTitle:@"ok" otherButtonTitles:nil];
[alert show];
[alert release];
}
-(void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response{
NSHTTPURLResponse *urlResponse = (NSHTTPURLResponse *)response;
NSLog(@"%i",[urlResponse statusCode]);
[receivedData setLength:0];
}
-(void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data{
[receivedData appendData:data];
}
-(void)connectionDidFinishLoading:(NSURLConnection *)connection{
xmlParser = [[NSXMLParser alloc]initWithData:receivedData];
[xmlParser setDelegate:self];
//you may want to enable these features of NSXMLParser.
[xmlParser setShouldProcessNamespaces:NO];
[xmlParser setShouldReportNamespacePrefixes:NO];
[xmlParser setShouldResolveExternalEntities:NO];
[xmlParser parse];
}
//XMLdeligate methods
-(void)parserDidStartDocument:(NSXMLParser *)parser{
NSLog(@"Started Parsing");
}
-(void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qualifiedName attributes:(NSDictionary *)attributeDict{
NSLog(@"Started Element name: %@", elementName);
}
-(void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string{
NSLog(@"Found characters: %@", string);
tempString = string;
}
-(void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName{
NSLog(@"Finished Element name: %@", elementName);
//my outputted xml would have <ranking>...ValueFromDb...</ranking> in it's response
if([elementName isEqualToString:@"ranking"]){
//display result in a label (you could save it to a local variable instead)
label1.text = tempString;
}
}
-(void)parserDidEndDocument:(NSXMLParser *)parser{
NSLog(@"Finished Parsing");
}
//...
//Don't forget to dealloc
-(void)dealloc {
//...
[label1 release];
[tempString release];
[xmlParser release];
[receivedData release];
//...
[super dealloc];
}
//IN THE .m class
Vous devrez définir la logique requise pour rechercher la base de données pour l'utilisateur dans les questions de classement. Vous pouvez transmettre les informations de connexion en annexant (par exemple)? User = NomUtilisateur & passe = MOT DE PASSE à la fin du fichier .php ... à savoir ...
[request setURL:[NSURL URLWithString:@"http://www.yourDomain.com/yourPhpPage.php?user=USERNAME&pass=PASSWORD"]];
nomUtilisateur et motDePasse serait valeurs lues à partir du bac à sable etc ... vous devez formater le URLWithString (comme vous le faites avec stringWithFormat)
-Chris Allinson
Je vous suggère de jeter un oeil à Apple Game Center. Il contient (presque) des classements préconstruits.
ouais c'est la meilleure option à mon avis, que pour utiliser la fonction de rang dans cet écran où vous récupérez ou l'affichage des informations des utilisateurs ..
vous pouvez utiliser différentes fonctions pour cet écran où vous devez sélectionner triée utilisateur par là score de decremently, vous n'avez pas par ce genre de programmation pour faire du travail supplémentaire ay
- 1. Meilleure façon de stocker référenceur?
- 2. Meilleure façon de stocker des données de jeu sur iPhone?
- 3. Meilleure façon de recréer l'interface utilisateur de l'application iPhone SMS?
- 4. Meilleure façon de stocker une chaîne dans une application iPhone?
- 5. Calcul d'un rang utilisateur
- 6. Meilleure façon de valider le formulaire iPhone
- 7. La meilleure façon de stocker le nombre variable de préférences?
- 8. meilleure façon de stocker/utiliser plusieurs langues
- 9. Meilleure façon de stocker les critères Badge?
- 10. Meilleure façon de stocker des données
- 11. Meilleure façon de stocker le système de points utilisateur dans la base de données
- 12. Meilleure façon de stocker les balises hiérarchiques
- 13. iPad - meilleure façon de stocker des données
- 14. Meilleure façon de stocker des données
- 15. Meilleure façon de stocker des URL localement
- 16. Meilleure façon de stocker la réponse JSON?
- 17. La meilleure façon de stocker des données ou des données de requête sur google app engine
- 18. Meilleure façon de stocker le champ de type muti
- 19. Meilleure façon de stocker des données constantes sur Google App Engine
- 20. Meilleure façon de gérer le dépôt git
- 21. Quelle est la meilleure façon de stocker (éventuellement des centaines) de chaînes dans l'application iPhone?
- 22. meilleure façon de stocker les "favoris" de l'utilisateur dans MySQL
- 23. meilleure façon d'identifier de façon unique un utilisateur d'une application iPhone
- 24. Meilleure façon de concevoir l'interface utilisateur Android?
- 25. Meilleure façon de stocker des données sur l'iphone
- 26. Objective-C: La meilleure façon de stocker les messages d'erreur
- 27. Iphone App Enregistrement des données utilisateur
- 28. Yii app updateCounters (pages vues) meilleure façon?
- 29. Quelle est la meilleure façon de stocker cette information?
- 30. remote_api dans google app engine est la meilleure façon de stocker des données?
Bien sûr, cela ne fonctionne qu'avec des appareils 4.1 ou plus. Pour les aînés les plus âgés, décidez si cela vaut la peine de les soutenir. Si c'est le cas, affichez des scores élevés dans le serveur SQL. Triez-les et recherchez l'identifiant de l'utilisateur avec lequel vous avez enregistré le score. Puis retournez le rang correspondant. S'il y a plusieurs scores, vous pouvez simplement ajouter les rangs, les mettre dans une autre liste triée et obtenir le rang à partir de là. – FeifanZ
Eh bien, vous n'avez rien mentionné concernant les limitations dans les versions iOS. Vous devez décider si cela vaut la peine de supporter les anciennes versions - en particulier avec iOS 5 juste au coin de la rue. –