Silver Shadow Inviato 31 Marzo 2010 Segnala Condividi Inviato 31 Marzo 2010 Ciao a tutti, sto muovendo i primi passi con l'objective C, con precedenti esperienze sia in C che Java. Attualmente starei provando a prendere la mano con classi e oggetti, e mi piacerebbe avere un parere da qualcuno di più esperto per verificare se sono sulla buona strada. Posto un semplice programma stupido di prova, in cui l'obbiettivo è dichiarare delle classi, e verificare il corretto utilizzo dei metodi. Funzionare funziona come ci si aspetterebbe, ma vorrei più pareri sul corretto utilizzo delle funzionalità di Obj-C (ad esempio, utilizzo correttamente la dichiarazione di metodi con più di un parametro?). Grazie Questo il progetto in sintesi: creo dei personaggi e delle porte. Un personaggio può provare a sbloccare e aprire una porta in base al suo livello. Tutto qui... Door.h #import <Foundation/Foundation.h> #import <Cocoa/Cocoa.h> static NSInteger count = 0; @interface Door : NSObject { @private BOOL isOpen; BOOL canBeOpen; NSInteger number; NSInteger level; } @property (readonly) BOOL isOpen, canBeOpen; @property (readonly) NSInteger number, level; -(id)init; -(id)initWithLevel:(NSInteger) aLevel; -(id)initWithNumber:(NSInteger) aNumber withLevel:(NSInteger) aLevel; -(BOOL)tryOpen; -(BOOL)unlock:(NSInteger) playerLevel; @end Door.m #import "Door.h" @implementation Door @synthesize isOpen, canBeOpen, number, level; -(id)initWithNumber:(NSInteger)aNumber withLevel:(NSInteger)aLevel { if (self = [super init]) { number = aNumber; level = aLevel; } return self; } -(id)initWithLevel:(NSInteger)aLevel { return self = [self initWithNumber:(++count) withLevel:aLevel]; } -(id)init { return self = [self initWithNumber:(++count) withLevel:1]; } -(BOOL)tryOpen { if (canBeOpen) isOpen = YES; return isOpen; } -(BOOL)unlock:(NSInteger)playerLevel { if (playerLevel >= level) canBeOpen = YES; return canBeOpen; } @end Character.h #import <Foundation/Foundation.h> #import <Cocoa/Cocoa.h> #import "Door.h"; @interface Character : NSObject { @private NSString *nickname; NSInteger level; } @property (copy) NSString *nickname; @property NSInteger level; -(id)init; -(id)initWithNickname:(NSString *)name; -(id)initWithNickname:(NSString *)name withLevel:(NSInteger)aLevel; -(BOOL)tryOpen:(Door *)door; -(BOOL)tryUnlock:(Door *)door; @end Character.m #import "Character.h" @implementation Character @synthesize nickname, level; -(id)initWithNickname:(NSString *)name withLevel:(NSInteger)aLevel { if (self = [super init]) { nickname = [name copy]; level = aLevel; } return self; } -(id)initWithNickname:(NSString *)name { return self = [self initWithNickname:name withLevel:1]; } -(id)init { return self = [self initWithNickname:@"Default" withLevel:1]; } -(BOOL)tryOpen:(Door *)door { return [door tryOpen]; } -(BOOL)tryUnlock:(Door *)door { return [door unlock:level]; } @end main.m (sì, è un po ripetitivo ma ho aggiunto poco a poco i casi di prova e non era la priorità sistemarli) #import <Foundation/Foundation.h> #import <Cocoa/Cocoa.h> #import "Character.h" #import "Door.h" int main(int argc, char *argv[]) { NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; //Creo 3 personaggi Character *playerOne = [[Character alloc] init]; Character *playerTwo = [[Character alloc] initWithNickname:@"Fox"]; Character *playerThree = [[Character alloc] initWithNickname:@"Silver" withLevel:13]; //Testo la corretta creazione dei personaggi NSLog(@"Primo giocatore: %@ con livello: %u", [playerOne nickname], [playerOne level]); NSLog(@"Secondo giocatore: %@ con livello: %u", [playerTwo nickname], [playerTwo level]); NSLog(@"Terzo giocatore: %@ con livello: %u", [playerThree nickname], [playerThree level]); [playerOne setNickname:@"Shadow"]; NSLog(@"Nuovo nick primo giocatore: %@", [playerOne nickname]); //Creo 3 porte Door *doorOne = [[Door alloc] init]; Door *doorTwo = [[Door alloc] initWithLevel:2]; Door *doorThree = [[Door alloc] initWithNumber:3 withLevel:4]; //Testo la correttezza creazione delle porte NSLog(@"Prima porta: %u con livello %u", [doorOne number], [doorOne level]); NSLog(@"Seconda porta: %u con livello %u", [doorTwo number], [doorTwo level]); NSLog(@"Terza porta: %u con livello %u", [doorThree number], [doorThree level]); BOOL result = [playerOne tryOpen:doorOne]; if (result) NSLog(@"Porta 1 aperta"); else NSLog(@"Porta 1 non aperta"); result = [playerOne tryOpen:doorThree]; if (result) NSLog(@"Porta 3 aperta"); else NSLog(@"Porta 3 non aperta"); result = [playerThree tryUnlock:doorThree]; if (result) NSLog(@"Porta 3 sbloccata"); else NSLog(@"Porta 3 non sbloccata"); result = [playerThree tryOpen:doorThree]; if (result) NSLog(@"Porta 3 aperta"); else NSLog(@"Porta 3 non aperta"); [pool drain]; } Just when things went right, it doesn't mean they were always wrong ~ » Use Your Illusion « Link al commento Condividi su altri siti Altre opzioni di condivisione...
Silver Shadow Inviato 7 Aprile 2010 Autore Segnala Condividi Inviato 7 Aprile 2010 Nessuno nessuno? Capisco che possa sembrare lunghetto e noioso ma non c'è bisogno di veder tutto, é semplice semplice e a me basta qualche parere/indicazione minimale Just when things went right, it doesn't mean they were always wrong ~ » Use Your Illusion « Link al commento Condividi su altri siti Altre opzioni di condivisione...
Messaggi raccomandati
Archiviato
Questa discussione è archiviata e chiusa a future risposte.