Logo Search packages:      
Sourcecode: lapispuzzle.app version File versions  Download package

LPController.m

/*
 * LPController.m

 * Copyright (C) 2004 Banlu Kemiyatorn.
 * July 19, 2004
 * Written by Banlu Kemiyatorn <object at gmail dot com>
 * This library is free software; you can redistribute it and/or
 * modify it under the terms of the GNU Library General Public
 * License as published by the Free Software Foundation; either
 * version 2 of the License, or (at your option) any later version.

 * This library is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 * Library General Public License for more details.

 * You should have received a copy of the GNU Library General Public
 * License along with this library; if not, write to the Free
 * Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111 USA.
 */


#include <AppKit/AppKit.h>
#include "LPController.h"

#define ROUND_TIME 0.8
#define AI_SPEED 0.1
#define REFRESH_RATE 0.2

@implementation LPController

- (void) applicationWillFinishLaunching: (NSNotification*)aNotification
{
      NSTimer *tickr = nil;
      srandom([[NSCalendarDate date] timeIntervalSince1970]);
      [lpview1 setBackgroundImage:[NSImage imageNamed:@"bg1.jpg"]];
      [lpview2 setBackgroundImage:[NSImage imageNamed:@"bg2.jpg"]];
      [lpview2 toggleAI];
      [next1 setBackgroundImage:[NSImage imageNamed:@"bg1.jpg"]];
      [next2 setBackgroundImage:[NSImage imageNamed:@"bg2.jpg"]];

      ASSIGN(tick, [NSTimer scheduledTimerWithTimeInterval:ROUND_TIME
                                                                          target:self
                                                                        selector:@selector(round)
                                                                        userInfo:nil
                                                                         repeats:YES]);


      ASSIGN(tickr, [NSTimer scheduledTimerWithTimeInterval:REFRESH_RATE
                                                                           target:self
                                                                         selector:@selector(refresh)
                                                                         userInfo:nil
                                                                          repeats:YES]);
      ASSIGN(tickr, [NSTimer scheduledTimerWithTimeInterval:AI_SPEED
                                                                           target:self
                                                                         selector:@selector(AIMove)
                                                                         userInfo:nil
                                                                          repeats:YES]);
      [[lpview1 window] makeFirstResponder:lpview1];
}

- (void) simpleAI:(id)view
{
      if ([view currentUnit] == nil)
      {
            return;
      }

      if ([[view currentUnit] X] > 3)
      {
            if (![view processDir:LP_MOVE_RIGHT])
            {
                  [view processDir:LP_MOVE_FALL];
            }
      }
      else if(![view processDir:LP_MOVE_LEFT])
      {
            if ([[view currentUnit] X] < 3)
            {
                  [view processDir:LP_MOVE_FALL];
            }
            else if (![view processDir:LP_MOVE_RIGHT])
            {
                  [view processDir:LP_MOVE_FALL];
            }
      }
}

- (void) player:(id)pl addStoneToOp:(int)num
{
      id op;
      if (pl == lpview1)
      {
            pl = lpview2;
      }
      else
      {
            pl = lpview1;
      }
      [pl addStone:num];
}

- (void) op:(id)pl processDir:(LPDirType)dir
{
      if (pl == lpview1)
      {
            [lpview2 processDir:dir];
      }
      else
      {
            [lpview1 processDir:dir];
      }
}



- (void) refresh
{
      [lpview1 refresh];
      [lpview2 refresh];
      [next1 refresh];
      [next2 refresh];
}

- (void) AIMove
{
      if ([lpview1 useAI])
      {
            [self simpleAI:lpview1];
      }
      if ([lpview2 useAI])
      {
            [self simpleAI:lpview2];
      }

}

- (void) round
{
      [lpview1 round];
      [lpview2 round];
}

- (void) lapisPuzzleView:(LapisPuzzleView *)sender
 didFinishUnitWithResult:(LPResultType)result
{
      id unit;
      switch(result)
      {
            case LP_RESULT_REQUEST:
                  if (sender == lpview1)
                  {
                        [next1 fallEmDown];
                        [next1 addJewelUnit];
                        unit = [next1 getUnitAtX:0 Y:0];
                        if (unit)
                        {
                              [unit setOwner:lpview1];
                              [unit rMoveX:3 Y:14];
                              [lpview1 addUnit:unit];
                              [next1 removeUnit:unit];
                        }
                        [next1 fallEmDown];
                        [next1 setNeedsDisplay:YES];
                  }
                  else
                  {
                        [next2 fallEmDown];
                        [next2 addJewelUnit];
                        unit = [next2 getUnitAtX:0 Y:0];
                        if (unit)
                        {
                              [unit setOwner:lpview2];
                              [unit rMoveX:3 Y:14];
                              [lpview2 addUnit:unit];
                              [next2 removeUnit:unit];
                        }
                        [next2 fallEmDown];
                        [next2 setNeedsDisplay:YES];
                  }

                  break;
            case LP_RESULT_GAMEOVER:
                  [tick invalidate];
                  tick = nil;
                  break;
      }
}

- (void) restart:(id)sender
{
      [tick invalidate];
      tick = nil;

      [lpview1 restart];
      [lpview2 restart];

      ASSIGN(tick, [NSTimer scheduledTimerWithTimeInterval:ROUND_TIME
                                                                          target:self
                                                                        selector:@selector(round)
                                                                        userInfo:nil
                                                                         repeats:YES]);
}

@end


Generated by  Doxygen 1.6.0   Back to index