Vai al contenuto

[Objective C] Prime prove: pareri e correzioni


Messaggi raccomandati

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 :fiorellino:

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

Archiviato

Questa discussione è archiviata e chiusa a future risposte.

×
×
  • Crea Nuovo...