Game đơn giản Maze cho iPhone

Mở Xcode và tạo Project, chọn chế độ Single View Application

Creating Simple Maze Game

Chọn Use Authomatic Reference Counting, không chọn vào Use Storyboard. Click vào next and create

Setting Xcode Project Option

Chọn Landscape Right ở trong Supported Interface Orientations để app ko rotate khi user xoay iPhone. Ẩn thanh công cụ của iPhone bang cách chọn vạo Hide during application launch ở mục Status Bar.

Xcode Project Orientation

Thiết kế Maze và nhân vật Game

Chọn AppViewController.xib từ Xcode Navigator để hiển thị View Controller trên Editor Pane. Từ list object thì chọn UIView để thay đổi 1 vài thuộc tính của nó. Từ Utility Pane, chọn Attributes Inspector và thay đổi như dưới

  • Thiết lập orientation về Landscape
  • Thiết lập status bar option về None
  • Thay đổi the background về black Setting the interface option

Chèn Images vào Project

Tiếp, chúng ta phải add tất cả các graphics sử dụng trong project này.

Maze GameMaze GameMaze GameMaze Game

Sau khi down về thì add vào project.

Maze Game - Adding images to Xcode Project

Drag 1 UIImageView từ object library và place vào bên trài của screen. Chọn UIImageView và chọn Attributes Inspector. Chọn file pacman.png. Chỉnh size cho anh. Từu màn hình Xcode, chọn Editor -> Size to Fit Content.

Maze Game - Adding Pacman Image

Lặp lại các bước trên cho phần ảnh còn lại. Cho tất cả element vào vị trí như dưới. Các ghost đc đặt ở gần cạnh màn hình.

Maze Game Interface

Liên kết Image View với Code

Cuối cùng, phải tạo IBOutlets cho UIIamgeViews chúng ta vừa mới create. Để làm vậy thì chọn AppVIewController.xib và thay dổi Editor về Assistant mode. AppViewController.h sẽ đc mở. Ấn Control key và kéo từ UIImageView về AppViewController.h để tạo IBOutlet. Chọn name là pacman, type là UIImageView và lưu là Strong.

Maze Game - Associate ImageView with Code

Lặp lại cùng cách làm với 3 ghost. Đặt tên là ghost1, ghost2, ghost3.

Đối với wall thì phải dung kĩ thuật khác. Thay vì sử dụng IBOutlet ta phải sử dụng IBOutletCollection. Điều này cho pép chúng ta kết hợp tất cả với object NSArray. Chọn wall bất kì và drag vào AppViewController.php.

Maze Game - Associate Wall Image

Để connections, chọn Outlet Collections. Đặt tên là Wall với type là UIIamgeView. Còn phần image wall còn lại thì sử dụng phương thức tương tự với outlet connections.

Code thì sẽ như file  AppViewController.h dưới đây

@interface APPViewController : UIViewController

@property (strong, nonatomic) IBOutlet UIImageView *pacman;
@property (strong, nonatomic) IBOutlet UIImageView *ghost1;
@property (strong, nonatomic) IBOutlet UIImageView *ghost2;
@property (strong, nonatomic) IBOutlet UIImageView *ghost3;
@property (strong, nonatomic) IBOutlet UIImageView *exit;

@property (strong, nonatomic) IBOutletCollection(UIImageView) NSArray *wall;

@end

Chèn thêm Frameworks cần thiết

Chúng ta cần CoreMotion framework để sử dụng accelerometer. Đây là framework ko đc include trong default application cho nên cần phải add vào bằng tay. Chọn project từ Navigator. Trong pane editor chọn Buil Phases và mở Link Binary With Libraries.

Maze Game - Build Phase

Next click on the “+” button to open the list of available frameworks, and from that list, select the CoreMotion and click add:

Maze Game - Adding CoreMotion

Chọn vào nút + để mở list của nhưng framework, chọn CoreMotion và add.

Hơn tất cả, chúng ta cần import QuartzCore framework. Đây là tập hợp các API để xử lý ảnh và video. Chúng ta sẽ sử dụng lớp CABasicAnimation để tạo những animation cơ bản.

Thiết lập chuyển động the Ghost Images bằng QuartzCore

Chúng ta phải config tất cả nhưng elements được yêu cầu bởi game. Đầu tiên chúng ta sẽ animate ảnh của ghost.

#import <QuartzCore/CAAnimation.h>;

Như đã nói ở trên, chúng ta sử dụng lớp CABasicAnimation của  QuartzCore để animate ghost. Đầu tiên, ta phải include những file header. Mở AppViewController.h và chèn đoạn code sau.

CGPoint origin1 = self.ghost1.center;
CGPoint target1 = CGPointMake(self.ghost1.center.x, self.ghost1.center.y-124);

CABasicAnimation *bounce1 = [CABasicAnimation animationWithKeyPath:@“position.y”];
bounce1.fromValue = [NSNumber numberWithInt:origin1.y];
bounce1.toValue = [NSNumber numberWithInt:target1.y];
bounce1.duration = 2;
bounce1.autoreverses = YES;
bounce1.repeatCount = HUGE_VALF;

[self.ghost1.layer addAnimation:bounce1 forKey:@“position”];

Tiếp, mở AppViewController.m và chèn đoạn code như dưới trong viewDidLoad method để animate ghost đầu tiên

Ở 2 hàng đầu tiên, chúng ta định nghĩa điểm bắt đầu và kết thúc của animations. Sau khi create CABasicAnimations bằng việc chỉ định rằng chúng ta muốn di chuyển theo trục x từ origin.y đến target.y point. Chúng ta cũng thiết lập khoảng time cho animations này là 2 giây. Nói 1 cách khác, ghost image nên trở về vị trí ban đầu khi nó chạm vào target points. Cuối cùng, chúng ta muốn animation này lặp lại mãi mãi do đó, chúng ta set repeatCount  thành HUGE_VALF.

CGPoint origin2 = self.ghost2.center;
CGPoint target2 = CGPointMake(self.ghost2.center.x, self.ghost2.center.y+284);
CABasicAnimation *bounce2 = [CABasicAnimation animationWithKeyPath:@“position.y”];
bounce2.fromValue = [NSNumber numberWithInt:origin2.y];
bounce2.toValue = [NSNumber numberWithInt:target2.y];
bounce2.duration = 2;
bounce2.repeatCount = HUGE_VALF;
bounce2.autoreverses = YES;
[self.ghost2.layer addAnimation:bounce2 forKey:@“position”];

CGPoint origin3 = self.ghost3.center;
CGPoint target3 = CGPointMake(self.ghost3.center.x, self.ghost3.center.y-284);
CABasicAnimation *bounce3 = [CABasicAnimation animationWithKeyPath:@“position.y”];
bounce3.fromValue = [NSNumber numberWithInt:origin3.y];
bounce3.toValue = [NSNumber numberWithInt:target3.y];
bounce3.duration = 2;
bounce3.repeatCount = HUGE_VALF;
bounce3.autoreverses = YES;
[self.ghost3.layer addAnimation:bounce3 forKey:@“position”];

Xử lý tương tự với 2 ghost, code như phía dưới.

CGPoint origin2 = self.ghost2.center;
CGPoint target2 = CGPointMake(self.ghost2.center.x, self.ghost2.center.y+284);
CABasicAnimation *bounce2 = [CABasicAnimation animationWithKeyPath:@“position.y”];
bounce2.fromValue = [NSNumber numberWithInt:origin2.y];
bounce2.toValue = [NSNumber numberWithInt:target2.y];
bounce2.duration = 2;
bounce2.repeatCount = HUGE_VALF;
bounce2.autoreverses = YES;
[self.ghost2.layer addAnimation:bounce2 forKey:@“position”];

CGPoint origin3 = self.ghost3.center;
CGPoint target3 = CGPointMake(self.ghost3.center.x, self.ghost3.center.y-284);
CABasicAnimation *bounce3 = [CABasicAnimation animationWithKeyPath:@“position.y”];
bounce3.fromValue = [NSNumber numberWithInt:origin3.y];
bounce3.toValue = [NSNumber numberWithInt:target3.y];
bounce3.duration = 2;
bounce3.repeatCount = HUGE_VALF;
bounce3.autoreverses = YES;
[self.ghost3.layer addAnimation:bounce3 forKey:@“position”];

Compile and Test the App

Sau khi compile và chạy thử, nếu mọi thứ ổn, bạn sẽ thấy pacman và maze.

Tham khảo : http://www.appcoda.com/ios-game-tutorial-maze-part-1/


All Rights Reserved