1. Trang chủ
  2. » Luận Văn - Báo Cáo

Thiết kế hđh iOS ứng dụng lập trình game mê cung

74 525 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 74
Dung lượng 6,48 MB

Nội dung

MỤC LỤC DANH MỤC CÁC HÌNH ẢNH MỞ ĐẦU Tình hình nghiên cứu nước Trong guồng quay hối sống nay, thiết bị di động với ưu nhỏ gọn tích hợp giới văn phòng giải trí mini trở thành người bạn đồng hành thân thiết hầu hết người, đặc biệt giới trẻ động Với tăng trưởng mạnh mẽ thị trường này, không hãng sản xuất di động mà nhà phân phối doanh nghiệp công nghệ khác chen chân vào đua phát triển ứng dụng mobile để khai thác hết tính thiết bị di động đỉnh cao như: iPhone, iPad, Samsung Galaxy, Nokia Lumia, Blackberry, HTC, … Việt Nam không nằm xu hướng Điều đặt yêu cầu phải có đội ngũ nhân lập trình giỏi đời tiện ích độc đáo thiết thực, đáp ứng đòi hỏi ngày cao người dùng Tuy nhiên, toán nhân chất lượng tốt đến chưa có lời đáp Lập trình ứng dụng di động nghề sử dụng ngôn ngữ lập trình để phát triển phần mềm nhằm gia tăng tiện ích cho thiết bị di động, đặc biệt di động sử dụng hệ điều hành Có thể kể đến số ứng dụng di động phổ biến game, chat, truy cập mạng xã hội điện thoại, từ điển Anh – Việt, đọc truyện, điều khiển di động giọng nói, tổng hợp thông tin chứng khoán, giá vàng … Tính cấp thiết để tài Sự bùng nổ phát triển nhanh chóng công nghệ đặng biệt năm gần điện thoại di động nói chung smartphone nói riêng thiết bị thiếu sống thường ngày Việc phát triển ứng dụng cho thiết bị di động ngày phát triển mạnh mẽ nhằm tạo tạo ứng dụng, trò chơi hay cần thiết phục vụ cho người dùng Năm 2007 Apple giới thiệu Iphone đầu thiên sử dụng hệ điều hành IOS kéo theo phát triển mạnh mẽ việc xây dựng ứng dụng cho hệ điều hành Đến có hàng triệu ứng dụng trò chơi xây dựng cho phát triển hệ điều hành IOS Cùng với Android IOS hệ điều hành thu hút phần lớn lập trình viên xây dựng ứng dụng cho thiết bị di đông.việc xây dựng ứng dụng đòi hỏi lập trình viên phải có trình độ cao có khả tư lập trình tốt Việc làm quen xây dựng ứng dụng hệ điều hành tạo điều kiện thuận lợi cho việc xây dựng phát triền chương trình ứng dụng lớn Iphone thành công trở thành điện thoại bán chạy giới Đến Iphone chiếm khoảng 17% thị phần smartphone giới Năm 2010 Apple giới thiệu Ipad chạy hệ điều hành IOS Giống Iphone Ipad phát triển mạnh mẽ tạo trường cho thiết bị di động Việc phát triển phần cứng đòi hỏi hệ thống ứng dụng cho phải phong phú đa dạng Đây hội lơn cho lập trình viên xây dựng phát triển ứng dụng cho hệ điều hành Hệ điều hành IOS không ngừng nâng cấp phát triển thời gian gần làm cho việc chạy ứng dụng hệ điều hành mượt mà Ngoài việc chạy đa nhiệm giúp bạn chạy nhiều ứng dụng thiết bị thời gian giống Window máy tính Vớ phát triển thị phần, thiết bị, phần mềm việc phát triển ứng dụng cho hệ điều hành IOS lập trình viên quan tâm phát triền Việc tìm hiểu lập trình cho hệ điều hành IOS mở hội cho việc phát triển ứng dụng hội việc làm cho sinh viên sau trường Mục tiêu đề tài Với đề tài: “Tìm hiều hệ điều hành IOS ứng dụng lập trình game Mê Cung” yêu cầu sinh viên phải tìm hiểu nắm bắt hệ điều hành MacOS, IOS, phần mềm phục vụ cho việc lập trình mô Xcode, IOSsimulator Nắm bắt phương pháp xây dựng phát triển ứng dụng hệ điều hành IOS 4 Phương pháp phạm vi nghiên cứu - Phương pháp nghiên cứu: Nghiên cứu dựa báo, hướng dẫn Apple, giáo trình hướng dẫn lập trình IOS Xcode, ngôn ngữ - Objective-C Các ví dụ nhà sản xuất lập trình viên Phạm vi nghiên cứu: • Nghiên cứu hệ điều hành MacOS, IOS • Nghiên cứu phần mềm Xcode, IOSSimulator • Nghiên cứu ngôn ngữ lập trình Objective-C • Nghiên cứu thị trường game Mobile Việt Nam Thế Giới • Nghiên cứu game Mê Cung • Lập trình game Mê Cung hệ điều hành IOS CHƯƠNG I: TÌM HIỂU HỆ ĐIỀU HÀNH IOS, XCODE VÀ IOS SIMULATOR Chương giới thiệu hệ điều hành IOS, công cụ Xcode công cụ giả lập hệ điều hành IOS IOS Simulator Qua kiến thức cung cấp, bạn nắm rõ giao diện, số tính công dụng Xcode IOS Simulator Ngoài ra, bạn hướng dẫn số thao tác sử dụng Xcode, IOS Simulator từ bạn dễ dàng việc sử dụng công cụ trình lập trình ứng dụng IPhone sau 1.1 Giới thiệu hệ điều hành IOS 1.1.1 Tổng quan hệ điều hành IOS IOS hệ điều hành thiết bị di động Apple Ban đầu hệ điều hành phát triển để chạy IPhone, sau mở rộng để chạy thiết bị Apple iPod touch, iPad Apple TV Ngày 31 tháng 5, 2011, App Store Apple chứa khoảng 500000 ứng dụng IOS, tải tổng cộng khoảng 15 tỷ lần Giao diện người dùng IOS dựa sở thao tác tay Người dùng tương tác với hệ điều hành thông qua nhiều động tác tay hình cảm ứng thiết bị Apple 1.1.2 Lịch sử hệ điều hành IOS Hệ điều hành giới thiệu Hội nghị Triển lãm Macworld diễn vào tháng năm 2007 phát hành vào tháng năm Khi đó, hệ điều hành chưa có tên riêng nên đơn giản "IPhone chạy OS X" Ban đầu, ứng dụng bên thứ ba không hỗ trợ Steve Jobs nhà phát triển xây dựng ứng dụng web mà "sẽ cư xử ứng dụng ban đầu IPhone" Vào ngày 17 tháng 10 năm 2007, Apple thông báo phát triển phần mềm xây dựng họ dự định đưa đến "tay nhà phát triển vào tháng 2" Ngày tháng năm 2008, Apple phát hành dùng thử đầu tiên, với tên cho hệ điều hành, "IPhone OS" Tháng năm 2010, Apple đổi tên IPhone OS thành IOS Nhãn hiệu "IOS" Cisco dùng để đặt tên cho hệ điều hành Để tránh vụ kiện cáo, Apple xin giấy phép sử dụng nhãn hiệu IOS từ Cisco Để lập trình cho hệ điều hành IOS cần có máy tính chạy hệ điều hành MACOS (hệ điều hành Apple dùng cho máy tính – giống Window Microsoft) 1.2 TÌM HIỂU XCODE 1.2.1 Giới thiệu Xcode Phần mềm Xcode công cụ Apple cung cấp cho lập trình viên để lập trình ứng dụng cho thiết bị chạy hệ điều hành Apple Phiên Xcode Xcode trang Developer Apple Hình 1 Xcode trang Apple Giao diện làm việc Xcode gồm có phần chính: Toolbar area, Editor area, Navigator area, Debug area, Utility area •Debug area: Đây vùng hỗ trợ bạn trình debug lỗi chương trình •Toolbar area: Vùng chứa công cụ tiện ích giúp bạn đơn giản việc chạy, debug ứng dụng, lựa chọn IOS Simulator, đóng mở vùng khác… •Editor area: Vùng để bạn thiết kế giao diện, viết chỉnh sửa code chương trình •Utility area: Vùng cho phép bạn tùy chỉnh tham số, giá trị đối tượng giao diện, cho phép bạn kéo thả sử dụng đối tượngcó sẵn Xcode Button, Label, Slider… hay đoạn code mẫu ( If, Switch…) •Navigator area: Cung cấp cho bạn cách nhìn trực quan, tiện lợi cho việc quản lý ứng dụng, xem thông báo lỗi, tìm kiếm đoạn code chương trình hay kiểm tra mức độ hoạt động RAM, CPU chạy ứng dụng… Hình Hình giao diện Xcode Xcode cung cấp cho bạn chế độ gỡ lỗi thông minh hỗ trợ bạn việc phát lỗi, cảnh báo lỗi gợi ý thay khắc phục Hình Cơ chế báo lỗi sửa lỗi Xcode Hơn nữa, kèm theo Xcode tài liệu hướng dẫn bước, chi tiết tiện lợi nhằm hỗ trợ người dùng việc lập trình Trong trình viết ứng dụng, bạn muốn tìm hiểu thêm đối tượng, bạn sử dụng tới tài liệu để có hướng dẫn Bạn xem tài liệu hướng dẫn apple cung cấp địa https://developer.apple.com/library/IOS/documentation/ToolsLanguages/Conceptual /Xcode_Overview/About_Xcode/about.html 1.2.2 Thao tác tạo ứng dụng Mới Khi khởi động Xcode lên, giao diện cho phép bạn tạo project mới, mở lại project gần 10 Hình 10 Kết chơi game - Sau có kết chơi game người chơi chi sẻ kết chơi lên mạng xã hội Facebook, Twitter, chia sẻ thông qua Email 60 Hình 11 Chia sẻ kết lên mạng xã hội 3.5 Kết luận chương Nội dung chương tác giả giới thiệu game Mê Cung, thành phần có game, giao diện game Với luật chơi đơn giản phù hợp với nhu cầu giải trí thời gian ngắn Ngoài người chơi chia sẻ kết đạt với người thân bạn bè thông qua mạng xã hội Email 61 KẾT LUẬN Qua trình thực đồ án tác giả tìm hiểu ngôn ngữ lập trình Objective-C phần mềm lập trình Xcode, IOS Simulator Tác giả tìm hiểu hệ điều hành MacOS, IOS Ngoài bạn cần phải biết phương pháp cài đặt ứng dụng lên máy chạy IOS Nếu iPhone bạn jailbreak, bạn dùng JailCoder để đưa ứng dụng lên iPhone Nếu bạn có tài khoản Developer ID bạn chuyển ứng dụng sang dạng ipa chia sẻ Mê cung game cổ điển đơn giản dễ chơi Việc tìm hiểu xây dựng ứng dụng Game cho hệ điều hành IOS nhằm tạo kiến thức sở cho việc phát triển xây dựng chương trình có quy mô lớn Sau hoàn thành đề tài với lượng kiên thức có tìm hiểu thêm thời gian tới tác giả xây dựng chương trình ứng dụng lớn hơn, có phương pháp quản lý ứng dụng tốt Ngày lập trình thiết bị di động phát triển mạnh mẽ nhu cầu tuyển dụng lập trình viên lớn có lâp tình viên cho IOS Việc học lập trình cho thiết bị di động giúp bạn có thêm định hướng việc 62 TÀI LIỆU THAM KHẢO [1] Scott Knaster, Wagar Malik, Mark Dalrymple, 2012, Learn Objective-C on the Mac For OS X and iOS, publisher Apress [2] Aaron Hillegass ,Mikey Ward, Objective-C Programming: The Big Nerd Ranch Guide, Published October 18th 2011 by Addison-Wesley Professional [3] Rory Lewis, Chad Mello, 2013, iPhone and iPad Apps for Absolute Beginners, publisher Apress [4] Dan Pilone, Tracey Pilone, 12/2012, Head First iPhone & iPad Development, Publisher O’Reilly Media [5] David Mark, Jack Nuttinh, jeff LaNarche, Fredrink Olsson, Beginning ios development xploring the IOS SDK, www.it-ebooks.info [6] Nguyễn Anh Tiệp, Cao Thanh Vàng, 20/11/2013 Tài liệu hướng dẫn xây dựng ứng dung iPhone, Đại Học Lạc Hồng [7]http://congdongios.com/archive/index.php/f-189.html? s=5965e5f8525dc6ff68a27b759c622bb1 [8]http://vi.wikipedia.org/wiki/IOS_(Apple) [9]https://developer.apple.com/library/IOS/documentation/UserExperience/Concept ual/UIKitUICatalog/index.htmltml [10]https://developer.apple.com/library/IOS/documentation/IDEs/Conceptual/IOS_S imu[1] lator_Guide/Introduction/Introduction.html [11]https://developer.apple.com/library/IOS/documentation/ToolsLanguages/Conce ptual/Xcode_Overview/About_Xcode/about.htm 63 PHỤ LỤC Phần giới tiệu chương trình tạo mê cung với kích thước n x n MapGame.m #import "MapGame.h" @implementation MapGame { int map[MAX_SIZE][MAX_SIZE]; BOOL wallRows[MAX_SIZE][MAX_SIZE], wallCols[MAX_SIZE] [MAX_SIZE]; } // tao me cung kich thuoc n x n - (void)createMapWithRow:(NSInteger)row col:(NSInteger)col { NSLog(@"calll mmee"); if (row < || col < 2) { return; } 64 _row = row; _col = col; [self randomMap]; } - (void)randomMap { int i, j, counter = 0; for(i = 0; i < _row; i++) { for(j = 0; j < _col; j++) { map[i][j] = counter; counter++; } } for(i = 0; i < _row - 1; i++) { 65 for(j = 0; j < _col; j++) { wallRows[i][j] = YES; } } for(i = 0; i < _row; i++) { for(j = 0; j < _col - 1; j++) { wallCols[i][j] = YES; } } while (![self checkFinishRamdomMap]) {// KT finish hay chua if (arc4random_uniform(2) == 0) {// lay tuong ngau nhien (theo hang) i = arc4random_uniform(_row - 1); j = arc4random_uniform(_col); if (wallRows[i][j] && (map[i][j] != map[i+1][j])) {// neu tuong tai va gai tri thu i khac i+1 66 wallRows[i][j] = NO;// xoa tuong int = MIN(map[i][j], map[i+1][j]); int max = MAX(map[i][j], map[i+1][j]); [self relaceMapOld:max byNew:min]; // thay the tat ca cac gia tri max bang gia tri minS } } else { i = arc4random_uniform(_row); j = arc4random_uniform(_col - 1); if (wallCols[i][j] && (map[i][j] != map[i][j+1])) { wallCols[i][j] = NO; int = MIN(map[i][j], map[i][j+1]); int max = MAX(map[i][j], map[i][j+1]); [self relaceMapOld:max byNew:min]; } } }} - (BOOL)checkFinishRamdomMap { 67 NSLog(@"%d", map[0][1]); int i, j, start = map[0][0]; for(i = 0; i < _row; i++) { for(j = 0; j < _col; j++) { if(map[i][j] != start) return NO; }} return YES; } - (void)relaceMapOld:(int)old byNew:(int)new { int i, j; for(i = 0; i < _row; i++) { for(j = 0; j < _col; j++) 68 { if(map[i][j] == old) map[i][j] = new; } }} - (BOOL)hasColWallAtRow:(int)row col:(int)col { if(row >= && col >= && row < self.row && col < self.col - 1) { return wallCols[row][col]; } return YES; } - (BOOL)hasRowWallAtRow:(int)row col:(int)col { if(row >= && col >= && row < self.row - && col < self.col) { return wallRows[row][col]; 69 } return YES; } - (NSMutableArray*)wayFromRow:(int)row col:(int)col finish:(NSIndexPath*)end { if (col >= && col < _col && row >= && row < _row && col >= && col < _col && row >= && row < _row) { int i, j; for(i = 0; i < _row; i++) { for(j = 0; j < _col; j++) { map[i][j] = 0; }} return [self startFromRow:row col:col toEnd:end]; } else { return nil; } 70 return nil; } - (NSMutableArray*)startFromRow:(int)row col:(int)col toEnd:(NSIndexPath*)end { map[row][col] = 1; NSMutableArray *way; if (row == end.row && col == end.section) { way = [[NSMutableArray alloc] initWithObjects:end, nil]; return way; } if (![self hasUpWallRow:row col:col] && map[row-1][col] != 1) { way = [self startFromRow:row - col:col toEnd:end]; if (way) { [way addObject:[NSIndexPath indexPathForRow:row inSection:col]]; return way; }} if (![self hasDownWallRow:row col:col] && map[row+1][col] != 1) { 71 way = [self startFromRow:row + col:col toEnd:end]; if (way) { [way addObject:[NSIndexPath indexPathForRow:row inSection:col]]; return way; }} if (![self hasLeftWallRow:row col:col] && map[row][col-1] != 1) { way = [self startFromRow:row col:col-1 toEnd:end]; if (way) { [way addObject:[NSIndexPath indexPathForRow:row inSection:col]]; return way; }} if (![self hasRightWallRow:row col:col] && map[row][col+1] != 1) { way = [self startFromRow:row col:col+1 toEnd:end]; if (way) { [way addObject:[NSIndexPath indexPathForRow:row inSection:col]]; return way; }} 72 map[col][row] = 0; return nil; } - (BOOL)hasUpWallRow:(int)row col:(int)col { return [self hasRowWallAtRow:(row-1) col:col]; } - (BOOL)hasDownWallRow:(int)row col:(int)col { return [self hasRowWallAtRow:row col:col]; } - (BOOL)hasLeftWallRow:(int)row col:(int)col { return [self hasColWallAtRow:row col:col-1]; } - (BOOL)hasRightWallRow:(int)row col:(int)col { 73 return [self hasColWallAtRow:row col:col]; } @end 74 [...]... kiểm tra lỗi của ứng dụng a Thực thi ứng dụng Khi bạn muốn chạy thử và đưa ứng dụng lên IOS Simulator, bạn sử dụng các button chuyên dụng trên Toolbar Để chạy ứng dụng, trước tiên bạn phải chọn lựa thiết bị mà bạn muốn chạy ứng dụng lên đó Bạn có thể chọn chạy lên thiết bị thật hoặc trên IOS Simulator Trong IOS Simulator, tùy theo ứng dụng của bạn viết cho thiết bị nào mà lựa chọn thiết bị đó, ví dụ... danh sách các đoạn code mẫu để bạn lựa chọn sử dụng trong quá trình viết ứng dụng Objects hiển thị các đối tượng của Xcode cho bạn sử dụng thiết kế giao diện ứng dụng 19 1.2.4 Thiết kế giao diện Giao diện ứng dụng trong Xcode được thiết kế thông qua Interface Builder, các đối tượng của Interface Builder được cung cấp trong Utility area Để tiến hành thiết kế giao diện, bạn kéo thả đối tượng trong Utility... phiên bản IOS khác nhau như 6.0, 6.1, 7.0… Do đó bạn có thể dễ dàng xây dựng ứng dụng của mình dành cho phiên bản IOS mới hoặc dùng cho cả phiên bản IOS cũ Với IOS Simulator, bạn có thể kiểm thử ứng dụng của bạn về thiết kế giao diện, về tính năng của ứng dụng, từ đó có thể khắc phục các lỗi phát sinh, tối ưu hóa ứng dụng trước khi bạn đem ứng dụng lên thiết bị thật Bạn có thể đọc thêm tài liệu IOS Simulator... Hình 1 38 Ẩn/Hiện keyboard trong IOS Simulator 35 d Cài đặt và gỡ bỏ ứng dụng trên IOS Simulator Ứng dụng trong IOS Simulator được cài đặt thông qua Xcode Khi bạn chạy ứng dụng bằng Xcode thì Xcode sẽ cài đặt ứng dụng đó vào IOS Simulator Cách thức gỡ bỏ ứng dụng cũng giống như trên thiết bị IOS thật Bạn chỉ cần nhấp và giữ chuột ( hoặc trackpad) trên biểu tượng của ứng dụng cho đến khi xuất hiện biểu... để gỡ bỏ ứng dụng Sau khi hoàn tất chỉ cần ấn Home để trở lại ban đầu Hình 1 39 Gỡ ứng dụng trong IOS Simulator e Bổ sung thêm các phiên bản IOS và các thiết bị IOS IOS Simulator cho phép bạn có thể chạy ứng dụng trên nhiều loại thiết bị như IPhone, IPhone Rentina, iPad, iPad Rentina Đồng thời, IOS Simulator cũng cho phép bạn sử dụng nhiều phiên bản khác nhau của IOS như IOS 6.0, IOS 6.1, IOS 7.0 36... quá trình chạy ứng dụng trên IOS Simulator để kiểm thử, đôi lúc bạn cần sử dụng tới chức năng xoay màn hình để có thể kiểm tra tính tương thích của ứng dụng với từng kiểu màn hình ( ngang, ứng ) hoặc để phù hợp với ứng dụng của bạn ( chẳng hạn viết ứng dụng sử dụng màn hình ngang) Nếu là thiết bị thật, thật dễ dàng để bạn có thể xoay màn hình cho phù hợp Tuy nhiên với IOS Simulator, bạn cần phải sử dụng. .. dễ nhìn 1.3 Tìm hiểu IOS SIMULATOR 1.3.1 Giới thiệu IOS Simulator IOS Simulator là một phần trong bộ công cụ kèm theo của phần mềm Xcode IOS Simulator chứa IOS SDK cho phép bạn chạy trên Mac OS để giả lập môi 31 trường IPhone, iPad nhằm phục vụ cho việc kiểm thử ứng dụng được viết ra trước khi kiểm thử ứng dụng trên thiết bị thật IOS Simualtor cho phép bạn cài đặt nhiều thiết bị IOS khác nhau như IPhone,... tìm hiểu một số điểm cơ bản của IOS Simulator để hỗ trợ bạn tốt hơn trong quá trình viết ứng dụng cho IOS a Thao tác cơ bản với IOS Simulator Thao tác mở và thoát IOS simulator: Để mở IOS Simulator bạn có hai cách Một là bạn chạy ứng dụng trong Xcode để khởi động IOS Simulator Với cách này bạn chỉ cần chọn IOS Simulator phù hợp rồi chọn Run 32 Hình 1 34 Chọn Run để mở IOS Simulator Cách thứ hai là bạn... được thể hiện trong Content area • Find Navigator: Sử dụng để tìm kiếm một cách nhanh chóng các string trong ứng dụng, tìm kiếm nội dung mở rộng • Issue Navigator: Quản lý các thông báo lỗi, cảnh báo của ứng dụng • Debug Navigator: Theo dõi quá trình debug ứng dụng b Editor Area Editor area cho phép bạn thiết kế giao diện, viết và sửa code cho ứng dụng Khi bạn chọn tập tin storyboard bên Content area... Hình 1 28 Lựa chọn thiết bị IOS Simulator Sau khi chọn lựa xong phần thiết bị, bạn nhấn Run để chạy chương trình Nếu muốn dừng chương trình, bạn nhấn Stop Hình 1 29 Nhấn Stop để dừng chương trình 29 b Kiểm tra lỗi của ứng dụng Vùng Debug area hỗ trợ bạn debug ứng dụng để kiểm tra từng bước, ngoài ra còn có vùng Debug Navigator cho phép bạn theo dõi các tiến trình, cũng như việc sử dụng RAM, CPU Hình

Ngày đăng: 29/06/2016, 07:54

Nguồn tham khảo

Tài liệu tham khảo Loại Chi tiết
[1] Scott Knaster, Wagar Malik, Mark Dalrymple, 2012, Learn Objective-C on the Mac For OS X and iOS, publisher Apress Khác
[2] Aaron Hillegass ,Mikey Ward, Objective-C Programming: The Big Nerd Ranch Guide, Published October 18th 2011 by Addison-Wesley Professional Khác
[3] Rory Lewis, Chad Mello, 2013, iPhone and iPad Apps for Absolute Beginners, publisher Apress Khác
[4] Dan Pilone, Tracey Pilone, 12/2012, Head First iPhone &amp; iPad Development, Publisher O’Reilly Media Khác
[5] David Mark, Jack Nuttinh, jeff LaNarche, Fredrink Olsson, Beginning ios 6 development xploring the IOS SDK, www.it-ebooks.info Khác
[6] Nguyễn Anh Tiệp, Cao Thanh Vàng, 20/11/2013 Tài liệu hướng dẫn xây dựng ứng dung iPhone, Đại Học Lạc Hồng Khác

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w