Inupiaq | The Arctic Game

Kropyvnytskyi

Team Updates

#import "MyScene.h"
#import "AppDelegate.h"
#import "SIAlertView.h"
#import <Social/Social.h>
#define ARC4RANDOM_MAX 0x100000000
#define HIGH_HERO 35
#define HIGH_COLUMN self.frame.size.height * .3
#define WIDE_HERO 16
#define WIDE_STICK 2
#define NAME_HERO @"hero"
#define NAME_COLUMN @"column1"
#define NAME_COLUMN2 @"column2"
#define NAME_STICK @"stick"
#define ACTION_WALK @"walk"
#define POSITION_COLUMN self.frame.size.width * .15
#define ZPOSITION_SCORE 3;
#define ZPOSITION_HERO 1;
#define ZPOSITION_COLUMN 2;
#define ZPOSITION_GAMEOVER 4;
#define ACTION_STICK @"long"
#define ACTION_COLUMNMOVE @"columnmove"
#define ACTION_HEROMOVE @"heromove"
#define GAMEOVER NSLocalizedString(@"Game Over", nil)
#define TEXTLEVEL NSLocalizedString(@"TEXTLEVEL", nil)
#define TEXTWATCH NSLocalizedString(@"TEXTWATCH", nil)
#define TEXTRESULT NSLocalizedString(@"TEXTRESULT", nil)
#define TEXTRETRY NSLocalizedString(@"Retry", nil)
#define TEXTHOME NSLocalizedString(@"Home", nil)
#define TEXTNOTBAD NSLocalizedString(@"TEXTNOTBAD", nil)
#define TEXTJUST NSLocalizedString(@"TEXTJUST", nil)
#define TEXTWANT NSLocalizedString(@"TEXTWANT", nil)
@interface MyScene() <SKPhysicsContactDelegate>
{
AVAudioPlayer *backgroundAudioPlayer;
BOOL bonusReceived;
}
@property (strong, nonatomic)SKSpriteNode *worldNode;
@property (strong, nonatomic)SKSpriteNode *hero;
@property (strong, nonatomic)SKLabelNode *score;
@property (strong, nonatomic)SKLabelNode *addOne;
@property (strong, nonatomic)SKLabelNode *getScore;
@property (strong, nonatomic)SKAction *actionWalk;
@property (nonatomic)float columnDistance;
@property (nonatomic)float columnWide1;
@property (nonatomic)float columnWide2;
@property (nonatomic)float columnHigh;
@property (nonatomic)int scoreNum;
@property (nonatomic)BOOL isLengthen;
@property (nonatomic)BOOL isAllow;
@end
@implementation MyScene
@synthesize delegate;
-(id)initWithSize:(CGSize)size withParameters:(NSDictionary *) parameters
{
self.background = parameters[@"background"];
self.color = parameters[@"color"];
self.figure = parameters[@"figure"];
self.soundBackground = parameters[@"soundBackground"];
if (self = [super initWithSize:size])
{
self.physicsWorld.contactDelegate = self;
self.getScore = [SKLabelNode labelNodeWithFontNamed:@"MarkerFelt-Thin"];
self.getScore.text = @"+1";
self.getScore.fontColor = self.color;
self.getScore.fontSize = 17;
self.score = [SKLabelNode labelNodeWithFontNamed:@"MarkerFelt-Thin"];
self.score.text = [NSString stringWithFormat:@"%d", self.scoreNum];
self.score.fontColor = self.color;
self.score.fontSize = 45;
self.score.position = CGPointMake(self.frame.size.width / 2, self.frame.size.height - 100);
self.score.zPosition = ZPOSITION_SCORE;
[self startWithScore:0];
}
return self;
}
-(void)startWithScore:(int) score
{
AppDelegate *appDelegate = [[UIApplication sharedApplication] delegate];
[appDelegate.backgroundAudioPlayer stop];
if (![[NSUserDefaults standardUserDefaults] boolForKey:@"SoundMute"])
{
backgroundAudioPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:[[NSURL alloc] initFileURLWithPath:[[NSBundle mainBundle] pathForResource:self.soundBackground ofType: @"mp3"]] error:nil];
backgroundAudioPlayer.numberOfLoops = -1; //infinite loop
[backgroundAudioPlayer play];
}
self.backgroundColor = [SKColor clearColor];
self.worldNode = [SKSpriteNode spriteNodeWithTexture:[SKTexture textureWithImageNamed:self.background] size:CGSizeMake(self.scene.size.width * (self.scene.size.height/self.scene.size.width + 1)/2, self.scene.size.height)];
self.worldNode.position = CGPointMake(self.scene.size.width / 2, self.scene.size.height / 2);
[self addChild:self.worldNode];
self.columnWide1 = arc4random() % 50 + 15;
self.columnWide2 = arc4random() % 50 + 15;
self.columnDistance = arc4random() % 240;
while (self.columnDistance <= (self.columnWide1 / 2 + self.columnWide2 / 2 + 3))
self.columnDistance = arc4random() % 240;
[self addHeroNode];
self.isLengthen = NO;
self.isAllow = NO;
self.scoreNum = score;
self.score.text = [NSString stringWithFormat:@"%d", self.scoreNum];
[self addChild:self.score];
SKSpriteNode *column1 = [SKSpriteNode spriteNodeWithColor:self.color size:CGSizeMake(self.columnWide1, HIGH_COLUMN)];
column1.name = NAME_COLUMN;
column1.position = CGPointMake(POSITION_COLUMN, HIGH_COLUMN / 2);
SKSpriteNode *column2 = [SKSpriteNode spriteNodeWithColor:self.color size:CGSizeMake(self.columnWide2, HIGH_COLUMN)];
column2.name = NAME_COLUMN;
column2.position = CGPointMake(column1.position.x + self.columnDistance, HIGH_COLUMN / 2);
[self addChild:column1];
[self addChild:column2];
}
-(void)addHeroNode
{
NSMutableArray *textures = [[NSMutableArray alloc]initWithCapacity:3];
for(int i = 0; i < 2; i++)
{
NSString *str = [NSString stringWithFormat:@"%@%d", self.figure, i + 1];
SKTexture *tex = [SKTexture textureWithImageNamed:str];
[textures addObject:tex];
}
SKAction *actionWalk1 = [SKAction setTexture:[textures objectAtIndex:0]];
SKAction *actionWalk2 = [SKAction setTexture:[textures objectAtIndex:1]];
SKAction *wait = [SKAction waitForDuration:0.15];
self.actionWalk = [SKAction sequence:@[actionWalk1, wait, actionWalk2, wait, actionWalk1]];
self.hero = [SKSpriteNode spriteNodeWithImageNamed: [NSString stringWithFormat:@"%@2", self.figure]];
self.hero.size = CGSizeMake(WIDE_HERO, HIGH_HERO);
self.hero.name = NAME_HERO;
self.hero.zPosition = ZPOSITION_HERO;
float temp = self.columnWide1 / 2 > (WIDE_HERO / 2 + 3) ? self.columnWide1 / 2 - (WIDE_HERO / 2 + 3) : 0;
self.hero.position = CGPointMake(POSITION_COLUMN + temp, HIGH_COLUMN + HIGH_HERO / 2);
self.hero.physicsBody = [SKPhysicsBody bodyWithRectangleOfSize:CGSizeMake(WIDE_HERO, HIGH_HERO)];
self.hero.physicsBody.affectedByGravity = NO;
self.hero.physicsBody.allowsRotation = NO;
[self addChild:self.hero];
}
-(void)addColumnNode
{
SKSpriteNode *stick = [SKSpriteNode spriteNodeWithColor:self.color size:CGSizeMake(WIDE_STICK, 1)];
stick.name = NAME_STICK;
stick.size = CGSizeMake(WIDE_STICK, 1);
stick.position = CGPointMake(self.hero.position.x + 5 + 3, HIGH_COLUMN - 1);
[self addChild:stick];
self.columnWide1 = self.columnWide2;
self.columnWide2 = arc4random() % 50 + 15;
self.columnDistance = arc4random() % 240;
while (self.columnDistance <= (self.columnWide1 / 2 + self.columnWide2 / 2 + 3))
self.columnDistance = arc4random() % 240;
SKSpriteNode *column = [SKSpriteNode spriteNodeWithColor:self.color size:CGSizeMake(self.columnWide2, HIGH_COLUMN)];
column.name = NAME_COLUMN;
column.position = CGPointMake(self.size.width + self.columnWide2 / 2, HIGH_COLUMN / 2);
SKAction *columnMove = [SKAction moveToX:self.columnDistance + POSITION_COLUMN duration:0.5];
[column runAction:columnMove];
[self addChild:column];
}
- (void)playSoundNamed:(NSString *)soundName
{
if (![[NSUserDefaults standardUserDefaults] boolForKey:@"SoundMute"])
{
SystemSoundID soundID;
AudioServicesCreateSystemSoundID ((__bridge CFURLRef)[NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource:soundName ofType:@"mp3"]], &soundID);
AudioServicesPlaySystemSound(soundID);
}
}
-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
[self playSoundNamed:@"touchStart"];
if(self.isLengthen == NO && self.isAllow == NO)
{
self.isLengthen = YES;
SKSpriteNode *stick = [SKSpriteNode spriteNodeWithColor:self.color size:CGSizeMake(WIDE_STICK, 1)];
stick.name = NAME_STICK;
stick.position = CGPointMake(self.hero.position.x + 5 + 3, HIGH_COLUMN - 1);
stick.anchorPoint = CGPointMake(1, 0);
[self addChild:stick];
int high = self.size.height - HIGH_COLUMN;
SKAction *addStick = [SKAction resizeToHeight:stick.size.height + high duration:1.5];
[stick runAction:addStick withKey:ACTION_STICK];
}
}
-(void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event
{
[self playSoundNamed:@"touchEnd"];
if(self.isLengthen == YES && self.isAllow == NO)
{
self.isAllow = YES;
[self enumerateChildNodesWithName:NAME_STICK usingBlock:^(SKNode *node, BOOL *stop){
[node removeActionForKey:ACTION_STICK];
}];
SKAction *getDown = [SKAction rotateToAngle:-M_PI / 2 duration:0.4];
[self enumerateChildNodesWithName:NAME_STICK usingBlock:^(SKNode *node, BOOL *stop){
[node runAction: getDown];
self.columnHigh = ((SKSpriteNode *)node).size.height;
}];
[self heroGo];
}
}
-(void)heroGo
{
float speed = 110;
float dis;
if(self.columnHigh > (self.columnDistance - self.columnWide1 / 2 + self.columnWide2 / 2) || self.columnHigh < (self.columnDistance - self.columnWide1 / 2 - self.columnWide2 / 2))
{
dis = self.hero.position.x + self.columnHigh + WIDE_HERO + 3;
SKAction *heroMove = [SKAction moveToX:dis duration:self.columnHigh / speed];
[self.hero runAction:[SKAction sequence:@[[SKAction waitForDuration:0.7], heroMove]]];
[self.hero runAction:[SKAction sequence:@[[SKAction waitForDuration:0.7], [SKAction repeatActionForever:self.actionWalk]]]withKey:ACTION_WALK];
[self.hero runAction:[SKAction sequence:@[[SKAction waitForDuration:self.columnHigh / speed + 0.7], [SKAction performSelector:@selector(changeGravity) onTarget:self], [SKAction waitForDuration:0.6], [SKAction performSelector:@selector(gameOver) onTarget:self]]]];
}
else
{
dis = self.columnWide2 / 2 > (WIDE_HERO / 2 + 3) ? self.columnWide2 / 2 - (WIDE_HERO / 2 + 3) : 0;
dis += (self.columnDistance + POSITION_COLUMN);
SKAction *heroMove = [SKAction moveToX:dis duration:self.columnDistance / speed];
[self.hero runAction:[SKAction sequence:@[[SKAction waitForDuration:0.7], heroMove]]];
[self.hero runAction:[SKAction sequence:@[[SKAction waitForDuration:0.7], [SKAction repeatActionForever:self.actionWalk]]]withKey:ACTION_WALK];
[self runAction:[SKAction sequence:@[[SKAction waitForDuration:(dis - POSITION_COLUMN) / speed + 0.7], [SKAction performSelector:@selector(changeColumnPosition) onTarget:self]]]];
}
}
-(void)changeColumnPosition
{
[self.hero removeActionForKey:ACTION_WALK];
self.getScore.position = CGPointMake(self.hero.position.x + 5, self.hero.position.y + 10);
[self addChild:self.getScore];
[self enumerateChildNodesWithName:NAME_COLUMN usingBlock:^(SKNode *node, BOOL *stop){
if(((SKSpriteNode *)node).position.x <= POSITION_COLUMN)
[node runAction: [SKAction sequence:@[[SKAction moveToX:-((SKSpriteNode *)node).size.width duration:0.3]]]];
else if(((SKSpriteNode *)node).position.x < 0)
[node removeFromParent];
else
[node runAction:[SKAction moveToX:POSITION_COLUMN duration:0.5]];
}];
[self enumerateChildNodesWithName:NAME_STICK usingBlock:^(SKNode *node, BOOL *stop){
[node runAction:[SKAction sequence:@[[SKAction moveToX:-self.columnHigh duration:0.3],[SKAction performSelector:@selector(removeStickNode)onTarget:self]]]];
}];
[self enumerateChildNodesWithName:NAME_HERO usingBlock:^(SKNode *node, BOOL *stop){
float temp = self.columnWide2 / 2 >= (WIDE_HERO / 2 + 3) ? self.columnWide2 / 2 - (WIDE_HERO / 2 + 3) : 0;
[node runAction:[SKAction sequence:@[[SKAction moveToX:POSITION_COLUMN + temp duration:0.5], [SKAction performSelector:@selector(changeBool) onTarget:self]]]];
}];
[self addColumnNode];
self.scoreNum ++;
self.score.text = [NSString stringWithFormat:@"%d", self.scoreNum];
}
-(void)changeBool
{
[self.getScore removeFromParent];
self.isLengthen = NO;
self.isAllow = NO;
}
-(void)changeGravity
{
self.hero.physicsBody.affectedByGravity = YES;
[self enumerateChildNodesWithName:NAME_STICK usingBlock:^(SKNode *node, BOOL *stop){
[node runAction:[SKAction rotateByAngle:-M_PI / 2 duration:0.4]];
}];
}
-(void)removeStickNode
{
[self enumerateChildNodesWithName:NAME_STICK usingBlock:^(SKNode *node, BOOL *stop){
[node removeFromParent];
}];
}
-(void)gameOver
{
[self playSoundNamed:@"failure"];
[self.hero removeActionForKey:ACTION_WALK];
if (self.scoreNum >= 10 && !bonusReceived)
{
[self showNotBad];
}
else
{
[self showGameOver];
}
}
-(void)showGameOver
{
SIAlertView *alertView = [[SIAlertView alloc] initWithTitle:GAMEOVER andMessage:[NSString stringWithFormat:TEXTLEVEL, self.scoreNum]];
if (self.scoreNum > 1)
{
[alertView addButtonWithTitle:TEXTRESULT
type:SIAlertViewButtonTypeCancel
handler:^(SIAlertView *alert)
{
[self playSoundNamed:@"button"];
AAShareBubbles *shareBubbles = [[AAShareBubbles alloc] initWithPoint:CGPointMake([[UIScreen mainScreen] bounds].size.width/2, [[UIScreen mainScreen] bounds].size.height/2)
radius:110
inView:self.view];
shareBubbles.delegate = self;
shareBubbles.showFacebookBubble = YES;
shareBubbles.showTwitterBubble = YES;
shareBubbles.showGooglePlusBubble = YES;
shareBubbles.showVkBubble = YES;
[shareBubbles show];
}];
}
[alertView addButtonWithTitle:TEXTRETRY
type:SIAlertViewButtonTypeDefault
handler:^(SIAlertView *alert)
{
if (arc4random()%5 == 0)
{
}
[self playSoundNamed:@"button"];
bonusReceived = NO;
[self removeAllChildren];
[self startWithScore:0];
}];
[alertView addButtonWithTitle:TEXTHOME
type:SIAlertViewButtonTypeDefault
handler:^(SIAlertView *alert)
{
[backgroundAudioPlayer stop];
[self.delegate goBack];
}];
alertView.buttonsListStyle = SIAlertViewButtonsListStyleRows;
alertView.transitionStyle = SIAlertViewTransitionStyleBounce;
[alertView show];
}
-(void)showNotBad
{
SIAlertView *alertView = [[SIAlertView alloc] initWithTitle:TEXTNOTBAD andMessage:TEXTWANT];
[alertView addButtonWithTitle:TEXTWATCH
type:SIAlertViewButtonTypeDestructive
handler:^(SIAlertView *alert)
{
}];
[alertView addButtonWithTitle:TEXTJUST
type:SIAlertViewButtonTypeDefault
handler:^(SIAlertView *alert)
{
[self showGameOver];
}];
alertView.buttonsListStyle = SIAlertViewButtonsListStyleRows;
alertView.transitionStyle = SIAlertViewTransitionStyleSlideFromTop;
[alertView show];
}
-(void)aaShareBubbles:(AAShareBubbles *)shareBubbles tappedBubbleWithType:(AAShareBubbleType)bubbleType
{
[backgroundAudioPlayer stop];
[self playSoundNamed:@"button"];
switch (bubbleType)
{
case AAShareBubbleTypeFacebook:
[self.delegate shareFacebookScores:self.scoreNum];
break;
case AAShareBubbleTypeTwitter:
[self.delegate shareTwitterScores:self.scoreNum];
break;
case AAShareBubbleTypeGooglePlus:
[self.delegate shareGoogleScores:self.scoreNum];
break;
case AAShareBubbleTypeVk:
[self.delegate shareVKScores:self.scoreNum];
break;
default:
break;
}
}
@end
view raw INUPIAQ TWIST hosted with ❤ by GitHub
Z
Zozulya Vitalii

This game is about inupacks. The game is aimed at acquaintance with their nationality, as well as the development of motor skills, logic and memory.

Z
Zozulya Vitalii
NASA Logo

SpaceApps is a NASA incubator innovation program.