TRƢỜNG ĐẠI HỌC SƢ PHẠM HÀ NỘI 2
KHOA CÔNG NGHỆ THÔNG TIN
---------***---------
NGUYỄN THỊ KIM HOA
TÌM HIỂU
MỘT SỐ NGÔN NGỮ LẬP TRÌNH GAME
TRÊN ĐIỆN THOẠI DI ĐỘNG
KHÓA LUẬN TỐT NGHIỆP ĐẠI HỌC
Chuyên ngành: Tin học
Ngƣời hƣớng dẫn khoa học
PGS. TS. TRỊNH ĐÌNH THẮNG
HÀ NỘI – 2014
LỜI CẢM ƠN
Em xin chân thành cảm ơn PGS. TS Trịnh Đình Thắng đã giúp đỡ
em hoàn thành khóa luận.
Em xin chân thành cảm ơn các thầy cô trong khoa Công nghệ thông
tin – trƣờng Đại học sƣ phạm Hà Nội 2 đã truyền đạt vốn kiến thức quý báu
cho em trong nghiên cứu đề tài và trong công việc sau này.
Vì vốn kiến thức và khả năng của bản thân em còn hạn chế nên bài
khóa luận còn nhiều thiếu sót, em mong nhận đƣợc ý kiến đóng góp của
các thầy cô để em có thể hoàn thiện hơn bài khóa luận.
Em xin chân thành cảm ơn!
Hà Nội, tháng 5 năm 2014
Sinh viên
Nguyễn Thị Kim Hoa
LỜI CAM ĐOAN
Tên em là: NGUYỄN THỊ KIM HOA
Sinh viên lớp: K36 – Tin học, khoa Công nghệ thông tin, trƣờng Đại
học sƣ phạm Hà Nội 2.
Em xin cam đoan:
1. Đề tài: “Tìm hiểu một số ngôn ngữ lập trình game trên điện
thoại di động” là sự nghiên cứu của riêng em, dƣới sự hƣớng dẫn của thầy
giáo PGS.TS. Trịnh Đình Thắng.
2. Khóa luận hoàn toàn không sao chép của tác giả nào khác.
Nếu sai em xin hoàn toàn chịu trách nhiệm.
Hà Nội, tháng 5 năm 2014
Ngƣời cam đoan
Nguyễn Thị Kim Hoa
MỤC LỤC
MỞ ĐẦU ....................................................................................................... 1
CHƢƠNG 1: CƠ SỞ LÝ THUYẾT ............................................................ 3
1.1. Lịch sử phát triển của điện thoại di động............................................ 3
1.2. Hệ điều hành Android ....................................................................... 12
1.3. Ngôn ngữ lập trình game .................................................................. 22
CHƢƠNG 2: MỘT SỐ NGÔN NGỮ LẬP TRÌNH GAME ..................... 23
2.1. Java .................................................................................................... 23
2.1.1. Java là gì? ...................................................................................... 23
2.1.2. Đặc trƣng của Java ........................................................................ 23
2.1.3. Máy ảo Java (JVM – Java Virtual Machine) ................................ 26
2.1.4. Bộ công cụ phát triển JDK (Java Development Kit) .................... 30
2.1.5. Các ứng dụng Java ........................................................................ 31
2.2. Objective-C ....................................................................................... 32
2.2.1. Objective-C là gì? ......................................................................... 32
2.2.2. Lịch sử phát triển .......................................................................... 32
2.2.3. Phƣơng thức trong Objective-C .................................................... 33
2.2.4. Category trong Objective-C .......................................................... 33
2.2.5. Protocol trong Objective-C ........................................................... 33
2.2.6. Selector trong Objective-C ........................................................... 34
2.2.7. Kế thừa trong Objective-C ............................................................ 34
2.2.8. Xử lý ngoại lệ................................................................................ 34
2.2.9. Quản lý bộ nhớ .............................................................................. 34
2.3. C# ....................................................................................................... 37
2.3.1. C# là gì? ........................................................................................ 37
2.3.2. Đặc điểm C# ................................................................................. 40
2.3.3. Kiểu dữ liệu của C# ...................................................................... 40
2.3.4. Lớp đối tƣợng trong C# ................................................................ 41
2.3.5. Kế thừa – đa hình .......................................................................... 42
2.3.6. Cấu trúc trong C# .......................................................................... 42
2.3.7. Thực thi giao diện. ........................................................................ 42
2.3.8. Mảng, chỉ mục............................................................................... 43
2.3.9. Xử lý ngoại lệ ................................................................................ 43
CHƢƠNG 3: XÂY DỰNG CHƢƠNG TRÌNH ỨNG DỤNG.................. 44
3.1. Giới thiệu bài toán ............................................................................. 44
3.2. Một số phƣơng thức .......................................................................... 45
3.2.1. Phƣơng thức start Level ................................................................ 45
3.2.2. Phƣơng thức tạo đƣờng bay của viên đạn ..................................... 46
3.2.3. Phƣơng thức kiểm tra anchor xung quanh star ............................. 48
3.2.4. Phƣơng thức tìm star cùng type với star ....................................... 49
3.2.5. Phƣơng thức Game Over............................................................... 50
3.3. Thiết kế chƣơng trình ........................................................................ 53
3.3.1. Giao diện chính ............................................................................. 53
3.3.2. Cửa hàng game.............................................................................. 53
3.3.3. Bắt đầu game ................................................................................. 54
3.3.4. Kết hợp các ngôi sao cùng màu .................................................... 54
3.3.5. Kết thúc game ............................................................................... 55
KẾT LUẬN VÀ HƢỚNG PHÁT TRIỂN .................................................. 56
TÀI LIỆU THAM KHẢO ........................................................................... 57
DANH MỤC HÌNH
Hình 1.1 Chiếc điện thoại đầu tiên .............................................................. 4
Hình 1.2 Motorola DynaTAC 8000X ........................................................... 4
Hình 1.3 Nokia Mobira Senator ................................................................... 5
Hình 1.4 PDA Simon Personal Communicator ........................................... 5
Hình 1.5 Motorola StarTAC......................................................................... 6
Hình 1.6 Nokia 6160 và Nokia 8260 ............................................................ 7
Hình 1.7 Kyocera QCP6035 ........................................................................ 7
Hình 1.8 Handspring Treo 180 .................................................................... 8
Hình 1.9 Danger Hiptop .............................................................................. 8
Hình 1.10 BlackBerry 5810.......................................................................... 9
Hình 1.11 Sanyo SCP-5300.......................................................................... 9
Hình 1.12 Nokia N-Gate ............................................................................ 10
Hình 1.13 Motorola Razt v3 ....................................................................... 10
Hình 1.14 Motorola Rokr ........................................................................... 11
Hình 1.15 BlackBerry Pearl....................................................................... 11
Hình 1.16 Iphone ........................................................................................ 12
Hình 1.17 Các phiên bản của hệ điều hành Android ................................. 15
Hình 1.18 Android Market ......................................................................... 19
Hình 1.19 Cấu trúc stack hệ thống Android ............................................. 21
Hình 3.1 Form kích hoạt trò chơi .............................................................. 53
Hình 3.2 Form cửa hàng game .................................................................. 53
Hình 3.3 Form bắt đầu game ..................................................................... 54
Hình 3.4 Form kết hợp các ngôi sao cùng màu ......................................... 54
Hình 3.5 Form kết thúc game..................................................................... 55
MỞ ĐẦU
1. Lý do chọn đề tài
Hiện nay với sự phát triển của khoa học công nghệ, chiếc điện thoại di
động không chỉ đơn thuần để liên lạc với nhau mà nó còn có thể chơi game,
nghe nhạc, kết nối internet, gửi mail, … Sự phát triển mạnh mẽ của các
thiết bị di động thông minh smartphone, tablet, … yêu cầu các ứng dụng
trên thiết bị di động phải đáp ứng đƣợc nhu cầu của ngƣời sử dụng. Lập
trình game trên điện thoại di động là một lĩnh vực thu hút rất nhiều bạn trẻ
hiện nay.
Nói đến lập trình chúng ta không thể không nhắc tới ngôn ngữ lập
trình. Hiện nay có rất nhiều ngôn ngữ lập trình và mỗi một ngôn ngữ lập
trình có một thế mạnh riêng. Chính vì vậy em đã chọn đề tài Tìm hiểu một
số ngôn ngữ lập trình game trên điện thoại di động để làm khóa luận tốt
nghiệp đại học.
2. Mục đích nghiên cứu
- Nghiên cứu các ngôn ngữ lập trình game điện thoại di động nhƣ: Java,
Objective-C, C#.
- Ứng dụng ngôn ngữ Java để lập trình game trên điện thoại có hệ điều
hành Android.
3. Nhiệm vụ nghiên cứu
- Tìm hiểu một số ngôn ngữ lập trình game thƣờng dùng: Java, ObjectiveC, C#.
- Ứng dụng ngôn ngữ lập trình Java để xây dựng một game cho điện thoại
di động sử dụng hệ điều hành Android.
1
4. Đối tƣợng nghiên cứu
Các ngôn ngữ lập trình game điện thoại di động: Java, Objective-C,
C#.
5. Phạm vi nghiên cứu
Lập trình game trên điện thoại thông minh và các ngôn ngữ lập trình
game thƣờng đƣợc sử dụng.
6. Phƣơng pháp nghiên cứu
Phương pháp nghiên cứu tự luận: Nghiên cứu thực trạng, đọc các tài
liệu, giáo trình có liên quan tới các ngôn ngữ lập trình game và lập trình
game trên điện thoại di động thông minh.
Phương pháp tổng kết kinh nghiệm: Qua việc nghiên cứu tài liệu,
giáo trình, rút ra kinh nghiệm lựa chọn ngôn ngữ lập trình phù hợp.
Phương pháp lấy ý kiến chuyên gia: Lấy ý kiến giảng viên trực tiếp
hƣớng dẫn, các giảng viên bộ môn để hoàn thiện về mặt nội dung và hình
thức của bài khóa luận.
7. Cấu trúc bài khóa luận
Ngoài phần mở đầu, kết luận và hƣớng phát triển bài khóa luận có
những nội dung sau:
Chƣơng 1: Cơ sở lý thuyết – Chƣơng này sẽ trình bày đôi nét về lịch
sử phát triển của điện thoại di động, hệ điều hành Android và ngôn ngữ lập
trình game.
Chƣơng 2: Một số ngôn ngữ lập trình game – Chƣơng này sẽ trình
bày rõ hơn về một số ngôn ngữ lập trình game điện thoại di động phổ biến
hiện nay: Java, Objective-C, C#.
Chƣơng 3: Xây dựng chƣơng trình ứng dụng – Xây dựng game
bằng ngôn ngữ Java cho điện thoại sử dụng hệ điều hành Android.
2
CHƢƠNG 1: CƠ SỞ LÝ THUYẾT
1.1. Lịch sử phát triển của điện thoại di động
Tiến sĩ Martin Cooper, cựu tổng giám đốc đơn vị hệ thống của
Motorola, đƣợc coi là “cha đẻ” của thiết bị liên lạc di động cầm tay và cũng
là ngƣời đầu tiên thực hiện một cuộc gọi thông qua công cụ này.
Ngày 3/4/1973, đứng trên một phố gần khách sạn Manhattan Hilton,
Cooper quyết định thử thực hiện một cuộc gọi riêng trƣớc khi đi lên gác
tham dự một cuộc họp báo giới thiệu thiết bị. Cú điện thoại ấy đƣợc ông
gọi tới chính đối thủ cạnh tranh của mình: Joel Engel, Giám đốc Trung tâm
thí nghiệm Bell Labs.
Thật tuyệt vời, “hòn gạch” biết nói nặng hơn 1kg của Cooper đã hoạt
động rất tốt, kết nối ông với trạm thu phát đặt trên nóc tòa tháp Burlington
Consolidated (nay là tòa nhà Alliance Capital Building) ở New York, đồng
thời liên lạc đƣợc với cả đƣờng dây cố định. Những ngƣời qua đƣờng tỏ ra
rất ngạc nhiên khi thấy một ngƣời đàn ông bấm bấm một công cụ gì đó, áp
sát vào tai và rồi say sƣa nói chuyện.
Chiếc điện thoại Motorola Dyna Tac là chiếc điện thoại di động đầu
tiên. Chiếc điện thoại này có kích thƣớc 22,86 x 12,7 x 4,44 cm, trọng
lƣợng 1,13kg. Chiếc điện thoại này không có màn hình nhƣng thời lƣợng
thoại của chiếc điện thoại này đƣợc 35 phút và thời lƣợng pin là 10 tiếng.
Số bo mạch điện của chiếc điện thoại này là 30. Tính năng mà chiếc điện
thoại này có thể thực hiện đó là nói, nghe và quay số.
3
Hình 1.1 Chiếc điện thoại đầu tiên
Chiếc điện thoại di động của tiến sĩ Cooper đã đặt nền móng cho sự
phát triển nhƣ vũ bão của điện thoại di động sau này.
1.1.1. Motorola DynaTAC 8000X (1983)
Dù Martin Cooper thực hiện cuộc gọi đầu tiên vào năm 1973 nhƣng
phải một thập niên nữa thì chiếc điện thoại di động thƣơng mại đầu tiên
mới ra đời. Motorola DynaTAC 8000X cho phép đàm thoại một giờ, bộ
nhớ có thể lƣu 30 số. Trông bề ngoài thiết bị này không đẹp mắt nhƣng lại
cho phép bạn vừa đi vừa nói chuyện ở bất kỳ đâu.
Hình 1.2 Motorola DynaTAC 8000X
4
1.1.2. Nokia Mobira Senator (1982)
Hình 1.3 Nokia Mobira Senator
Nokia Mobira Senator trông giống hộp bom hơn điện thoại di động,
nhƣng thiết bị hình hộp to đồ sộ này là điện thoại đầu tiên của Nokia. Đƣợc
giới thiệu năm 1982, Nokia Mobira Senator đƣợc thiết kế sử dụng trong xe
ô tô. Nó nặng khoảng 10kg.
1.1.3. Simon Personal Communicator (1993)
Hình 1.4 PDA Simon Personal Communicator
5
Đây là chiếc smartphone đầu tiên trên thế giới. Simon Personal
Communicator là điện thoại đầu tiên có tính năng của liên minh IBM và
BellSouth đƣợc ra mắt năm 1993. Nó là điện thoại kiêm máy tính, sổ địa
chỉ, máy fax và e-mail... Giá 900 USD.
1.1.4. Motorola StarTAC (1996)
Hình 1.5 Motorola StarTAC
Trƣớc khi Motorola Star TAC đƣợc giới thiệu năm 1996, các tính
năng điện thoại di động đƣợc chú trọng nhiều hơn thời trang. Nhƣng thiết
bị nhỏ bé có thể gập này đã cho thấy rằng phong cách là cực kỳ quan trọng.
Motorola StarTAC 3.1 ounce là nhỏ nhất trong thời điểm đó và đến nay nó
vẫn nhỏ và nhẹ hơn nhiều "dế" khác.
6
1.1.5. Nokia 6160 (1998) và Nokia 8260 (2000)
Hình 1.6 Nokia 6160 và Nokia 8260
Vào những năm 1990, các điện thoại hình thỏi kẹo của Nokia xuất
hiện hàng loạt. Nhƣng Nokia 6160 và Nokia 8260 gây đƣợc sự chú ý của
nhiều ngƣời. Nokia 6160 có màn hình đen trắng, ăng-ten ngoài, thân 5,2
inch, nặng 6 ounce. Nokia 8260 ra mắt năm 2000 ấn tƣợng hơn khi đƣợc tô
điểm chiếc áo màu, dài 4 inch, nặng chỉ 3,4 ounce.
1.1.6. Phần mềm Palm với Kyocera QCP6035 (2000)
Hình 1.7 Kyocera QCP6035
Nếu bạn là một trong những ngƣời hâm mộ điện thoại Treo sử dụng
hệ điều hành Palm thì có thể cảm ơn Kyocera. Dế thông minh QCP6035
7
của công ty này thống lĩnh thị trƣờng bán lẻ năm 2001. Với giá 400 USD
và 500 USD, đây là điện thoại dùng phần mềm Palm đầu tiên đƣợc phân
phối rộng rãi. Sản phẩm có 8 MB bộ nhớ, màn hình trắng đen.
1.1.7. Handspring Treo 180 (2001)
Hình 1.8 Handspring Treo 180
Trở lại khi Palm và Handspring còn là đối thủ. Handspring đã khuấy
động thị trƣờng với sản phẩm Treo 180 gồm hai phiên bản: một với bàn
pím QWERTY và một Treo 180g với thiết bị nhập liệu Graffiti. Nhƣ
Kyocera QCP6035, nó có màn hình đen trắng nhƣng có 16MB bộ nhớ.
1.1.8. Danger Hiptop (2002)
Hình 1.9 Danger Hiptop
8
T-Mobile Sidekick từng đƣợc mệnh danh là sản phẩm của năm 2003.
Mặc dù các khả năng đàm thoại của nó xoàng, nhƣng là một trong những
thiết bị đầu tiên cung cấp tính năng duyệt web, truy cập email và nhắn tin.
Hơn thế nữa, nó là ngƣời tiên phong về thiết kế xoay tròn.
1.1.9. BlackBerry 5810 (2002)
Hình 1.10 BlackBerry 5810
BlackBerry 5810 đƣợc biết đến nhƣng một thiết bị điển hình về các
khả năng xử lý dữ liệu. Đây là sản phẩm đầu tiên cung cấp các tính năng
voice, GSM.
1.1.10. Sanyo SCP-5300 (2002)
Hình 1.11 Sanyo SCP-5300
9
Sanyo SCP-5300 PCS là "dế" đầu tiên có tính năng chụp ảnh đƣợc
Sanyo và Sprint giới thiệu năm 2002. Ở độ phân giải cao nhất nó có thể
chụp đƣợc các ảnh VGA (640 x 480).
1.1.11. Nokia N-Gage (2003)
Hình 1.12 Nokia N-Gate
Dòng máy N-Gage tạo đƣợc nhiều dƣ luận khi xuất hiện trên thị
trƣờng năm 2003, nhƣng thật không may, đó lại là sản phẩm bất lợi. Sự kết
hợp điện thoại di động/thiết bị chơi game đƣợc kỳ vọng sẽ quyến rũ đƣợc
game thủ từ bỏ máy chơi game cầm tay của họ. Nhƣng thay vào đó, nó gây
phản cảm bởi thiết kế hình bán nguyệt kỳ quặc.
1.1.12. Motorola Razr v3 (2004)
Hình 1.13 Motorola Razt v3
10
Điện thoại di động ngày càng mỏng và phong cách hơn, nhƣng
Motorola Razr v3 là sản phẩm đầu tiên gây ấn tƣợng về thiết kế thời
thƣợng mỏng và nhẹ vào 2004. Ba năm sau "dế" này vẫn đƣợc đánh giá là
một trong những điện thoại phổ biến nhất trên thị trƣờng.
1.1.13. Motorola Rokr (2005)
Hình 1.14 Motorola Rokr
Motorola Rokr – điện thoại di động kiêm máy nghe nhạc đầu tiên sử
dụng phần mềm nghe nhạc của Apple. Với thiết bị này, ngƣời dùng có thể
thƣởng thức các bài hát, bản nhạc từ dịch vụ iTunes.
1.1.14. BlackBerry Pearl (2006)
Hình 1.15 BlackBerry Pearl
11
Thiết kế mỏng, bàn phím SureType, tính năng chụp ảnh, nghe nhạc,
xem video, hỗ trợ dịch vụ e-mail ấn tƣợng và nhiều khả năng đa phƣơng
tiện khác, BlackBerry Pearl trở thành viên ngọc quý của không ít ngƣời.
1.1.15. Cách tân với Apple iPhone (2007)
Hình 1.16 Iphone
Sau những tháng chờ đợi, Apple khẳng định tháng 6 là thời điểm quan
trọng để iPhone sẽ xuất hiện trên thị trƣờng. Đây là thiết kế cách tân với
màn hình cảm ứng cảm ứng đa điểm sẽ mang lại một thế giới sinh động với
e-mail bằng giọng nói, bàn phím "mềm" dạng Qwerty có thể đoán từ, trình
duyệt web Safari, tích hợp camera2-megapixel. iPhone là thiết bị gây tò mò
nhất trong giới chơi điện thoại di động, dùng hệ điều hành Mac OS X. Giá
bán: 500 USD cho mẫu 4 GB, 600 USD cho mẫu 8 GB.
1.2. Hệ điều hành Android
Android là một hệ điều hành dành cho thiết bị di động nhƣ
smartphone, tablet hay netbook. Android do Google phát triển dựa trên nền
tảng Linux kernel và các phần mềm mã nguồn mở.
Android là hệ điều hành mở mã nguồn chính duy nhất vớis 12 triệu
dòng mã bao gồm 3 triệu dòng mã XML, 2.8 triệu dòng mã C, 2.1 triệu
dòng Java và 1.75 triệu dòng C++.
12
Ban đầu nền tảng này đƣợc phát triển bởi Android Inc (sau đó đƣợc
Google mua lại) và gần đây nó trở thành một trong những phần mềm đứng
đầu của liên minh OHA (Open Handset Alliance - với khoảng 78 thành
viên bao gồm cả nhà sản xuất, nhà phát triển ứng dụng, ... cho thiết bị di
động mà dẫn đầu là Google).
Android đƣợc phát triển nhằm cạnh tranh với các hệ điều hành di động
khác nhƣ iOS (Apple), BlackBerry OS, Windows Mobile (Microsoft),
Symbian (Nokia), Samsung (Bada), WebOS (Palm), ... Tính đến thời điểm
này, Android đã trở thành nền tảng di động tăng trƣởng nhanh nhất thế
giới.
1.2.1. Lịch sử phát triển của Android
Tháng 10/2003, Android (Inc) đƣợc thành lập tại Palo Alto,
California, Hoa Kỳ do Andy Rubin (đồng sáng lập của Danger Inc), Rich
Miner (đồng sáng lập của Wildfire Communications Inc và cựu phó chủ
tịch công nghệ và tƣơng lai ở Orange) và một số thành viên khác chủ trì,
với mục đích để phát triển hay tạo ra các thiết bị di động thông minh hơn
phục vụ các mục đích cho lợi ích con ngƣời.
Bƣớc đầu, hệ điều hành Android chỉ đơn thuần là phần mềm trên điện
thoại di động.
Tháng 8/2005, Google mua lại Android Inc với giá 50 triệu USD. Các
nhân viên chính của Android Inc, trong đó có Andy Rubin, Rich Miner vẫn
tiếp tục làm việc tại công ty.
Tại Google, nhóm kĩ sƣ do Rubin đứng đầu đã phát triển một nền tảng
di động dựa trên hạt nhân Linux. Sau đó, họ đã giới thiệu cho các nhà sản
xuất thiết bị cầm tay và các nhà mạng trên những tiền đề về việc cung cấp
một hệ thống mềm dẻo, có khả năng nâng cấp mở rộng cao.
13
Google cũng lên danh sách các thành phần phần cứng đáp ứng nền
tảng và các đối tác phần mềm, đồng thời cam kết với các nhà mạng rằng họ
sẵn sàng hợp tác ở nhiều cấp độ khác nhau. Thời gian này, một loạt nguồn
tin khẳng định Google sẽ sớm tham gia phát triển hệ điều hành riêng cho
điện thoại di động.
Tháng 9/2007, InformationWeek đăng tải một nghiên cứu của
Evalueserve cho biết Google đã nộp một số đơn xin cấp bằng sáng chế
trong lĩnh vực điện thoại di động.
Tháng 11/2007, Liên minh thiết bị cầm tay mở rộng (Open Handset
Alliance) với sự đồng thuận của Texas Instruments, Tập đoàn Broadcom,
Google, HTC, Intel, LG, Tập đoàn Marvell Technology, Motorola, Nvidia,
Qualcomm, Samsung Electronics, Sprint Nextel và T-Mobile đã thành lập
với mục đích phát triển các tiêu chuẩn mở cho thiết bị di động.
Android chính thức gia nhập Liên minh thiết bị cầm tay mã nguồn mở,
đồng thời Google đã công vố việc họ bắt tay phát triển hệ điều hành mã
nguồn mở cho thiết bị di động nhằm cạnh tranh với Symbian, Windows
Mobile và các đối thủ khác.
Hãng cũng giới thiệu sản phẩm Android đầu tiên là T-Mobile G1. Đây
là một thiết bị di động có hệ điều hành dựa trên nhân Linux phiên bản 2.6.
Từ tháng 10/2008, hệ điều hành Android đã chính thức trở thành phần
mềm mã nguồn mở. Theo đó, các công ty thứ ba đƣợc phép thêm những
ứng dụng của riêng của họ vào Android và bán chúng mà không cần phải
hỏi ý kiến Google.
Tháng 11/2008, Liên minh OHA ra mắt gói phát triển phần mềm
Android SDK cho nhà lập trình.
14
- Xem thêm -