Khi Android được pháthành thì một trong số các mục tiêu trong kiến trúc của nó là cho phép các ứngụngcó thể tương tác được với nhau và có thể sử dụng lại các thành phần từ nhữngứng dụng
Trang 1Em xin chân thành cảm ơn!
Sinh viên
Vũ Bảo Đại
Trang 2LỜI CAM ĐOAN
Tôi xin cam đoan:
Những nội dung trong đồ án này không giống hoàn toàn bất kỳ đồ án hoặc cáccông trình đã có trước
Mọi tham khảo trong đồ án đều được trích dẫn rõ ràng tên tác giả, tên công trình,thời gian và địa điểm công bố
Mọi sao chép không hợp lệ, vi phạm quy chế đào tạo, hay gian trá, tôi xin chịuhoàn toàn trách nhiệm trước nhà trường
Sinh viên thực hiện
Vũ Bảo Đại
Trang 3MỤC LỤC
Trang 4DANH MỤC HÌNH ẢNH
Trang 5MỞ ĐẦU
Ngày nay với sự phát triển không ngừng của khoa học kỹ thuật đặc biệtcông nghệ thông tin là lĩnh vực luôn được đưa lên hàng đầu thúc đẩy sự tăngtrưởng phát triển nền kinh tế của mỗi quốc gia Công nghệ thông tin dần khẳngđịnh được vai trò của mình trong các lĩnh vực khoa học, kỹ thuật và giải trí Xuấtkhẩu phần mềm trò chơi giải trí luôn mang lại lợi nhuận cao cho các quốc gia cóngành tin học phát triển mạnh.Khi chiếc điện thoại đã trở thành một phần của đờisống con người, thì những sản phẩm giải trí trên máy ngày càng có cơ hội để pháttriển, đặc biệt là những game mini như game Lines Tuy nhiên yêu cầu đối vớimột game hay cũng rất cao, đồ họa, xử lý sự kiện…Do đó viết game vừa là cơhội vừa là thách thức đối với người lập trình và đó cũng là một phương pháp tốt
để hoàn thiện kĩ năng lập trình của lập trình viên Hiện nay, có rất nhiều ngônngữ lập trình có thể dùng để viết game, Java cũng là một trong những ngôn ngữ
ấy, với kĩ thuật xử lí hình ảnh, âm thanh đã được hỗ trợ sẵn, Javacó đầy đủ sứcmạnh để xây dựng một game hoàn hảo, đó cũng chính là lí do để Java được chọnlàm ngôn ngữ viết lên game được trình bày trong đồ án tốt nghiệp này Game viếttrong báo cáo cũng chỉ dừng ở mức tìm hiểu, chưa thể trở thành một gamethương mại, nhưng cũng giúp người đọc hiểu được những điều cơ bản khi viếtmột game, và những hỗ trợ của Javađối với game Tuy rằng, lĩnh vực xây dựngtrò chơi game không còn mới mẻ, trong suốt thời gian học tập, nghiên cứu vớimong muốn vận dụng kiến thức đã học vào triển khai một đồ án thiết kế một tròchơi game; em đã lựa chọn đồ án tốt nghiệp là: Nghiên cứu về thuật toán loangứng dụng trong thiết kế trò chơi Lines trên nền android
Trang 6Hình 1-1 Android timeline
Và sau tiếp, vào cuối năm 2007, thuộc về Liên minh Thiết bị Cầm tay MãNguồn mở (Open Handset Alliance) gồm các thành viên nổi bật trong ngành viễnthông và thiết bị cầm tay như: Texas Instruments, Broadcom Corporation,Google, HTC, Intel, LG, Marvell Technology Group, Motorola, Nvidia,Qualcomm, Samsung Electronics, Sprint Nextel, T-Mobile, ARMHoldings,Atheros Communications, Asustek ComputerInc, Garmin Ltd, Softbank, SonyEricsson, Toshiba Corp, and Vodafone Group,…
Mục tiêu của Liên minh này là nhanh chóng đổi mới để đáp ứng tốt hơn chonhu cầu người tiêu dùng và kết quả đầu tiên của nó chính là nền tảng Android
Trang 7Android được thiết kế để phục vụ nhu cầu của các nhà sản xuất thiết, các nhàkhai thác và các lập trình viên thiết bị cầm tay Phiênbản SDK lần đầu tiên pháthành vào tháng 11 năm 2007, hãngT-Mobile cũngcông bố chiếc điện thoạiAndroid đầu tiên đó là chiếc T-Mobile G1,chiếc smartphone đầu tiên dựa trênnền tảng Android Một vài ngày sau đó, Google lại tiếp tục công bố sự ra mắtphiên bản Android SDK release Candidate 1.0.Trong tháng 10 năm 2008, Googleđược cấp giấy phép mã nguồn mở cho Android Platform Khi Android được pháthành thì một trong số các mục tiêu trong kiến trúc của nó là cho phép các ứngụngcó thể tương tác được với nhau và có thể sử dụng lại các thành phần từ nhữngứng dụng khác.Việc tái sử dụng không chỉ được áp dụng cho các dịch vụ mà nócòn được áp dụng cho cả các thành phần dữ liệu và giao diện người dùng Vàocuối năm 2008, Google cho phát hành một thiết bị cầm tay được gọi là AndroidDev Phone 1 có thể chạy được các ứng dụng Android mà không bị ràng buộc vàocác nhà cung cấp mạng điện thoại di động Mục tiêu của thiết bị này là cho phépcác nhà phát triển thực hiện các cuộc thí nghiệm trên một thiết bị thực có thểchạy hệ điều hành Android mà không phải ký một bản hợp đồng nào Vàokhoảng cùng thời gian đó thì Google cũng cho phát hành một phiên vản vá lỗi1.1 của hệ điều hành này Ở cả hai phiên bản 1.0 và 1.1 Android chưa hỗ trợ soft-keyboard mà đòi hỏi các thiết bị phải sử dụng bàn phím vật lý Android cố địnhvấn đề này bằng cách phát hành SDK 1.5 vào tháng Tư năm 2009, cùng với một
số tính năng khác Chẳng hạn như nâng cao khả năng ghi âm truyền thông, vậtdụng, và các live folder
1.2 DELVING VỚI MÁY ẢO DALVIK
Dalvik là máy ảo giúp các ứng dụng java chạy được trên các thiết bị độngAndroid Nó chạy các ứng dụng đã được chuyển đổi thành một file thực thiDalvik(dex) Định dạng phù hợp cho các hệ thống mà thường bị hạn chế về bộnhớ và tốc độ xử lý Từ góc nhìn của một nhà phát triển, Dalvik trông giống nhưmáy ảo Java(Java VirtualMachine) nhưng thực tế thì hoàn toàn khác Khi nhàphát triển viết một ứng dụng dành cho Android, các đoạn mã được thực hiện
Trang 8trong môi trường Java Sau đó, nó sẽ được biên dịch sang các bytecode của Java,tuy nhiên để thực thi được ứng dụng này trên Android thì nhà phát triển phải thựcthi một công cụ có tên là dx Đây là công cụ dùng để chuyển đổi bytecode sangmột dạng gọi là dex bytecode "Dex" là từ viết tắt của "Dalvik executable" đóngvai trò như cơ chế ảo thực thi các ứng dụng Android.
1.3 KIẾN TRÚC CỦA ANDROID
Mô hình sau thể hiện một cách tổng quát các thành phần của hệ điều hànhAndroid Mỗi một phần sẽ được đặc tả một cách chi tiết dưới đây
Hình 1-2 Cấu trúc stack hệ thống Android
Android được tích hợp sẵn một số ứng dụng cần thiết cơ bản như:contacts, browser, camera, Phone,… Tất cả các ứng dụng chạy trên hệ điều hànhAndroid đều được viết bằng Java
Trang 9Bằng cách cung cấp một nền tảng phát triển mở, Android cung cấp chocác nhà phát triển khả năng xây dựng các ứng dụng cực kỳ phong phú và sángtạo Nhà phát triển được tự do tận dụng các thiết bị phần cứng, thông tin địa điểmtruy cập, các dịch vụ chạy nền, thiết lập hệ thống báo động, thêm các thông báo
để các thanh trạng thái, và nhiều, nhiều hơn nữa Nhà phát triển có thể truy cậpvào các API cùng một khuôn khổ được sử dụng bởi các ứng dụng lõi Các kiếntrúc ứng dụng được thiết kế để đơn giản hóa việc sử dụng lại các thành phần; bất
kỳ ứng dụng có thể xuất bản khả năng của mình và ứng dụng nào khác sau đó cóthể sử dụng những khả năng (có thể hạn chế bảo mật được thực thi bởi khuônkhổ) Cơ chế này cho phép các thành phần tương tự sẽ được thay thế bởi người
sử dụng Cơ bản tất cả các ứng dụng là một bộ các dịch vụ và các hệ thống, baogồm:
Một tập hợp rất nhiều các View có khả năng kế thừa lẫn nhau dùng đểthiết kế phần giao diện ứng dụng như: gridview, tableview,linearlayout,…
Một “Content Provider” cho phép các ứng dụng có thể truy xuất dữliệu từ các ứng dụng khác (chẳng hạn như Contacts) hoặc là chia sẻ dữliệu giữa các ứng dụng đó
Một “Resource Manager” cung cấp truy xuất tới các tài nguyên khôngphải là mã nguồn, chẳng hạn như: localized strings, graphics, andlayout files
Một “Notifycation Manager” cho phép tất cả các ứng dụng hiển thị cáccustom alerts trong status bar
Activity Manager được dùng để quản lý chu trình sống của ứng dụng vàđiều hướng các activity
Android bao gồm một tập hợp các thư viên C/C++ được sử dụng bởinhiều thành phần khác nhau trong hệ thống Android Điều này được thể hiệnthông qua nền tảng ứng dụng Android Một số các thư viện cơ bản được liệt kêdưới đây:
Trang 10 System C library: aBSD-derived implementation of the standard C systemlibrary (libc), tuned for embedded Linux-based devices
Media Libraries – based on Packet Video's Open CORE; the librariessupport play back and recording of many popular audio and videoformats, as well as static image files, including MPEG4, H.264, MP3,AAC, AMR, JPG, and PNG
Surface Manager – Quản lý việc truy xuất vào hệ thống hiển thị
LibWebCore - a modern web browser engine which powers both theAndroid browser and an embeddable web view
SGL - the underlying 2D graphics engine
3D libraries - an implementation based on OpenGL ES 1.0 APIs; thelibraries use either hardware 3 Dacceleration (whereavailable) or theincluded, highly optimized 3D software rasterizer
FreeType - bitmap and vector font rendering
SQLite - a powerful and lightweight relational database engine available to allapplications
Android bao gồm một tập hợp các thư viện cơ bản mà cung cấp hầu hếtcác chức năng có sẵn trong các thư viện lõi của ngôn ngữ lập trình Java Tất cảcác ứng dụng Android đều chạy trong tiến trình riêng Máy ảo Dalvik đã đượcviết để cho một thiết bị có thể chạy nhiều máy ảo hiệu quả Các VM Dalvik thựcthi các tập tin thực thi Dalvik (dex) Định dạng được tối ưu hóa cho bộ nhớ tốithiểu VM là dựa trên register-based, và chạy các lớp đã được biên dịch bởi mộttrình biên dịch Java để chuyển đổi thành các định dạng dex Các VM Dalvik dựavào nhân Linux cho các chức năng cơ bản như luồng và quản lý bộ nhớ thấp
Android dựa trên Linux phiên bản 2.6 cho hệ thống dịch vụ cốt lõi nhưsecurity, memory management, process management, network stack, and drivermodel Kernel Linux hoạt động như một lớp trừu tượng hóa giữa phần cứng vàphần còn lại của phần mềm stack
Trang 121.4 ANDROID EMULATOR
Android SDK và Plugin Eclipse được gọi là một Android Deverloper Tool(ADT) Các Android coder sẽ cần phải sử dụng công cụ IDE (IntegratedDevelopment Enveronment) này để phát triển, debugging và testing cho ứngdụng Tuy nhiên, các coder cũng có thể không cần phải sử dụng IDE mà thay vào
đó là sử dụng command line để biên dịch và tất nhiên là vẫn có Emulator nhưthường
Android Emulator được trang bị đầy đủ hầu hết các tính năng của mộtthiết bị thật Tuy nhiên, một số đã bị giới hạn như là kết nối qua cổng USB,camera và video, nghe phone, nguồn điện giả lập và bluetooth
Android Emulator thực hiện các công việc thông qua một bộ xử lý mãnguồn mở, công nghệ này được gọi là QEMU (http://bellard.org/qemu/)đượcphát triển bởi Fabrice Bellard
Hình 1-3 Android emulator
Trang 131.5 CÁC THÀNH PHẦN TRONG MỘT ANDROID PROJECT
AndroidManifest.xml
Trong bất kì một project Android nào khi tạo ra đều có một fileAndroidManifest.xml, file này được dùng để định nghĩa các screen sử dụng, cácpermission cũng như các theme cho ứng dụng Đồng thời nó cũng chứa thông tin
về phiên bản SDK cũng như main activity sẽ chạy đầu tiên
File này được tự động sinh ra khi tạo một Android project Trong filemanifest bao giờ cũng có 3 thành phần chính đó là: application, permission vàversion Dưới đây là nội dung của một file AndroidManifest.xml
Trang 15Mã nguồn của file R.java được tự động sinh khi có bất kì một sự kiện nàoxảy xa làm thay đổi các thuộc tính trong ứng dụng Chẳng hạn như, bạn kéo vàthả một file hình ảnh từ bên ngoài vào project thì ngay lập tức thuộc tính đườngdẫn đến file đó cũng sẽ được hình thành trong file R.java hoặc xoá một file hìnhảnh thì đường dẫn tương ứng đến hình ảnh đó cũng tự động bị xoá
Có thể nói file R.java hoàn toàn không cần phải đụng chạm gì đến trong
cả quá trình xây dựng ứng dụng
Dưới đây là nội dung của một file R.java:
/* AUTO-GENERATED FILE.DO NOT MODIFY
*
* This class was automatically generated by the
* aapt tool from the resource data it found.It
* should not be modified by hand.
*/
package exam.android.khmt.activity;
public final class R {
public static final class array {
public static final int array_timeout=0x7f050000;
}
public static final class attr {
}
public static final class drawable {
public static final int add=0x7f020000;
public static final int backup_icon=0x7f020001;
public static final int checkall=0x7f020002;
}
public static final class id {
public static final int Button01=0x7f070006;
public static final int Button02=0x7f070007;
public static final int CheckBox01=0x7f070017;
Trang 16}
public static final class layout {
public static final int contact_list=0x7f030000;
public static final int content_sender=0x7f030001;
public static final int friend_list=0x7f030002;
}
public static final class menu {
public static final int context_menu=0x7f060000;
public static final int menu_options=0x7f060001;
public static final int options_menu=0x7f060002;
}
public static final class string {
public static final int app_name=0x7f040001;
public static final int context_menu_item_delete=0x7f04000b;
public static final int context_menu_item_edit=0x7f04000a;
Những phần của ứng dụng mà hệ thống biết đang chạy
Những phần quan trọng như thế nào đối với người dùng
Bao nhiêu vùng nhớ chiếm lĩnh trong hệ thống
Trang 17 Chu kỳ sống thành phần
Các thành phần ứng dụng có một chu kỳ sống, tức là mỗi thành phần từlúc bắt đầu khởi tạo và đến thời điểm kết thúc Giữa đó, đôi lúc chúng có thể làactive hoặc inactive, hoặc là trong trường hợp activies nó có thể visible hoặcinvisible
Hình 1-4
Bên trong hệ thống các activity được quản lý như một activity stack Khimột Activity mới được start, nó được đặt ở đỉnh của stack và trở thành activityđang chạy activity trước sẽ ở bên dưới activity mới và sẽ không thấy trong suốtquá trình activity mới tồn tại
Nếu người dùng nhấn nút Back thì activity kết tiếp của stack sẽ di duyểnlên và trở thành active
Trang 18Hình 1-5 Activity stack
Hình 1-6 Chu kỳ sống của Activity
Trang 19Một Activity chủ yếu có 3 chu kỳ chính sau:
Active hoặc running: Khi Activity là được chạy trên màn hình Activitynày tập trung vào những thao tác của người dùng trên ứng dụng
Paused: Activity là đượctạm dừng (paused) khi mất focus nhưng ngườidùng vẫn trông thấy Có nghĩa là một Activity mới ở trên nó nhưng khôngbao phủ đầy màn hình Một Activity tạm dừng là còn sống nhưng có thể bịkết thúc bởi hệ thống trong trường hợp thiếu vùng nhớ
Stopped: Nếu nó hoàn toàn bao phủ bởi Activity khác Nó vẫn còn trạngthái và thông tin thành viên trong nó Người dùng không thấy nó và thường bịloại bỏ trong trường hợp hệ thống cần vùng nhớ cho tác vụ khác
Trong một ứng dụng Android có chứa nhiều thành phần và mỗi thànhphần đều có một chu trình sống riêng Và ứng dụng chỉ được gọi là kết thúc khitất cả các thành phần trong ứng dụng kết thúc Activity là một thành phần chophép người dùng giao tiếp với ứng dụng Tuy nhiên, khi tất cả các Activity kếtthúc và người dùng không còn giao tiếp được với ứng dụng nữa nhưng không cónghĩa là ứng dụng đã kết thúc Bởi vì ngoài Activity là thành phần có khả năngtương tác người dùng thì còn có các
thành phần không có khả năng tương tác với người dùng như là Service,Broadcastreceiver Có nghĩa là những thành phần không tương tác người dùng cóthể chạy background dưới sự giám sát của hệ điều hành cho đến khi người dùng
tự tắt chúng
Nếu một Activity được tạm dừng hoặc dừng hẳn, hệ thống có thể bỏ thôngtin khác của nó từ vùng nhớ bởi việc finish() (gọi hàm finish() của nó), hoặc đơngiản giết tiến trình của nó Khi nó được hiển thị lần nữa với người dùng, nó phảiđược hoàn toàn restart và phục hồi lại trạng thái trước Khi một Activity chuyểnqua chuyển lại giữa các trạng thái, nó phải báo việc chuyển của nó bằng việc gọihàm transition
Trang 20Hình 1-7
Tất cả các phương thức là những móc nối mà bạn có thể override để làmtương thich công việc trong ứng dụng khi thay đổi trạng thái Tất cả các Activitybắt buộc phải có onCreate() để khởi tạo ứng dụng.Nhiều Activity sẽ cũng hiệnthực onPause() để xác nhận việc thay đổi dữ liệu và mặt khác chuẩn bị dừng hoạtđộng với người dùng
Bảy phương thức chuyển tiếp định nghĩa trong chu kỳ sống của mộtActivity Thời gian sống của một Activity diễn ra giữa lần đầu tiên gọionCreate() đến trạng thái cuối cùng gọi onDestroy().Một Activity khởi tạo toàn
bộ trạng thái toàn cục trong onCreate(), và giải phóng các tài nguyên đang tồn tạitrong onDestroy()
Visible lifetime của một activity diễn ra giữa lần gọi một onStart() chođến khi gọi onStop() Trong suốt khoảng thời gian này người dùng có thể thấyactivity trên màn hình, có nghĩa là nó không bị foreground hoặc đang tương tácvới người dùng Giữa 2 phương thức người dùng có thể duy trì tài nguyên đểhiển thị activity đến người dùng
Trang 21CHƯƠNG 2
LÝ THUYẾT TRÒ CHƠI2.1 Giới thiệu về lý thuyết trò chơi
Lý thuyết trò chơi là một nhánh của Toán học ứng dụng Ngành này
nghiên cứu các tình huống chiến thuật trong đó các đối thủ lựa chọn các hànhđộng khác nhau để cố gắng làm tối đa kết quả nhận được Ban đầu được pháttriển như là một công cụ để nghiên cứu hành vi kinh tế học, ngày nay Lý thuyếttrò chơi được sử dụng trong nhiều ngành khoa học, từ Sinh học tới Triết học Lýthuyết trò chơi đã có sự phát triển lớn từ khi John von Neumann là người đầu tiênhình thức hóa nó trong thời kỳ trước và trong Chiến tranh Lạnh, chủ yếu do ápdụng của nó trong chiến lược quân sự, nổi tiếng nhất là khái niệm đảm bảo pháhủy lẫn nhau (mutual assured destruction)
Bắt đầu từ những năm 1970, Lý thuyết trò chơi bắt đầu được áp dụng chonghiên cứu về hành vi động vật, trong đó có sự phát triển của các loài qua chọnlọc tự nhiên Do các trò chơi hay như Song đề tù nhân (prisoner's dilemma),trong đó lợi ích cá nhân làm hại cho tất cả mọi người, Lý thuyết trò chơi đã bắtđầu được dùng trong Chính trị học, Đạo đức học và triết học Cuối cùng, Lýthuyết trò chơi gần đây đã thu hút được sự chú ý của các nhà Khoa học máy tính
do ứng dụng của nó trong Trí tuệ nhân tạo và Điều khiển học
Bên cạnh các mối quan tâm có tính chất hàm lâm, lý thuyết trò chơi đãnhận được sự chú ý trong văn hóa đại chúng John Nash, một nhà lý thuyết tròchơi, người đã nhận được giải thưởng Nobel, đã là chủ đề trong cuốn hồi ký năm
1998 của tác giả Sylvia Nasar và trong bộ phim Một tâm hồn đẹp (A Beautiful
Mind) năm 2001 Một số trò chơi truyền hình (game show) đã sử dụng các tính
huống của lý thuyết trò chơi, trong đó có Friend or Foe? và Survivor
Tuy tương tự với Lý thuyết quyết định, nhưng Lý thuyết trò chơi nghiêncứu các quyết định được đưa ra trong một môi trường trong đó các đối thủ tươngtác với nhau Nói cách khác, Lý thuyết trò chơi nghiên cứu cách lựa chọn hành vitối ưu khi chi phí và lợi ích của mỗi lựa chọn là không cố định mà phụ thuộc vàolựa chọn của các cá nhân khác
Trang 222.2 Biểu diễn trò chơi
Các trò chơi được nghiên cứu trong ngành Lý thuyết trò chơi là các đốitượng toán học được định nghĩa rõ ràng Một trò chơi bao gồm một tập các ngườichơi/đấu thủ, một tập các nước đi (hoặc chiến lược) mà người chơi có thể chọn,
và một đặc tả về cơ chế thưởng phạt cho mỗi tổ hợp của các chiến lược Có haicách biểu diễn trò chơi thường thấy trong các tài liệu
2.2.1 Dạng chuẩn tắc
Trò chơi chuẩn tắc (hoặc dạng chiến lược (strategic form)) là một ma trận
cho biết thông tin về các đấu thủ, chiến lược, và cơ chế thưởng phạt (xem ví dụbên phải) Trong ví dụ, có hai đấu thủ, một người chọn hàng, người kia chọn cột.Mỗi đấu thủ có hai chiến lược, mỗi chiến lược được biểu diễn bởi một ô đượcxác định bởi số hiệu hàng và số hiệu cột của nó Mức thưởng phạt được ghi trong
ô đó Giá trị thứ nhất là mức thưởng phạt cho đấu thủ chơi theo hàng (trong ví dụ
là Đấu thủ 1); giá trị thứ hai là mức thưởng phạt cho đấu thủ chơi theo cột (trong
ví dụ là Đấu thủ 2) Giả sử Đấu thủ 1 chơi hàng trên và Đấu thủ 2 chơi cột trái Khi đó, Đấu thủ 1 nhận 4 điểm và Đấu thủ 2 nhận 3 điểm.
Khi một trò chơi được biểu diễn bằng dạng chuẩn tắc, người ta coi rằng mỗiđấu thủ hành động một cách đồng thời, hoặc ít nhất không biết về hành động củangười kia Nếu các đấu thủ có thông tin về lựa chọn của các đấu thủ khác, tròchơi thường được biểu diễn bằng dạng mở rộng
2.2.2 Dạng mở rộng
Các trò chơi dạng mở rộng cố gắng mô tả các trò chơi có thứ tự quan trọng
Ở đây, các trò chơi được biểu diễn bằng cây (như trong hình bên trái) Mỗi đỉnh(hoặc nút) biểu diễn một điểm mà người chơi có thể lựa chọn Người chơi đượcchỉ rõ bằng một số ghi cạnh đỉnh Các đoạn thẳng đi ra từ đỉnh đó biểu diễn cáchành động có thể cho người chơi đó Mức thưởng phạt được ghi rõ tại đáy cây.Các trò chơi mở rộng còn có thể mô tả các trò chơi đi-đồng-thời Hoặc cómột đường chấm chấm hoặc một đường tròn vẽ quanh hai đỉnh khác nhau đểbiểu diễn rằng chúng đều thuộc cùng một tập hợp thông tin (nghĩa là, người chơikhông biết họ đang ở điểm nào)
Trang 232.3 Các loại trò chơi 2.3.1.Trò chơi đối xứng và bất đối xứng
Một trò chơi đối xứng là một trò chơi mà phần lợi cho việc chơi một chiến
thuật nào đó chỉ phụ thuộc vào các chiến thuật được sử dụng, chứ không phụthuộc vào người nào đang chơi Nếu như tính danh của những người chơi có thểthay đổi mà không làm thay đổi phần lợi đối với chiến thuật chơi, thì một tròchơi là đối xứng Nhiều trò chơi 2×2 thường được nghiên cứu là đối xứng.Những biểu diễn chuẩn của trò chơi con gà, song đề tù nhân, đi săn nai là nhữngtrò chơi đối xứng
Đa số những trò chơi bất đối xứng được nghiên cứu là những trò chơi màcác tập hợp chiến thuật khác nhau được sử dụng bởi hai người chơi Chẳng hạn,trò chơi tối hậu thư và tương tự như vậy trò nhà độc tài có chiến thuật khác nhaucho mỗi người chơi Tuy vậy, có thể xảy ra trường hợp một trò chơi có nhữngchiến thuật giống nhau cho cả hai người chơi, nhưng vẫn bất đối xứng Chẳnghạn, trò chơi được minh họa bên phải là bất đối xứng mặc dù cho có cùng tập cácchiến thuật cho cả 2 người chơi
2.3.2 Trò chơi tổng bằng không và trò chơi tổng khác không
Trong trò chơi tổng bằng không, với mọi tổ hợp của các chiến lược chơi,
tổng điểm của tất cả các người chơi trong ván chơi luôn bằng 0 Nói một cách
Trang 24không chính thức, đấu thủ này hưởng lợi trên thiệt hại của các đấu thủ khác Một
ví dụ là trò Poker, trong đó người này thắng số điểm bằng đúng số điểm màngười kia thua Các loại cờ cổ điển như cờ vây, cờ vua và cờ tướng cũng là cáctrò chơi tổng bằng không Nhiều trò chơi mà các nhà lý thuyết trò chơi nghiêncứu, trong đó có song đề tù nhân nổi tiếng, là các trò chơi tổng khác không, do cómột số kết cục có tổng kết quả lớn hơn hoặc nhỏ hơn không Nói một cách khôngchính thức, trong các trò chơi tổng khác không, một thu hoạch của đấu thủ nàykhông nhất thiết tương ứng với một thiệt hại của một đấu thủ khác Có thể biếnđổi một trò chơi bất lỳ thành một trò chơi tổng bằng không bằng cách bổ sungmột đấu thủ "bù nhìn" sao cho các thiệt hại của đấu thủ này bù lại tổng thu hoạchcủa các đấu thủ khác
2.3.3 Trò chơi đồng thời và trò chơi tuần tự
Trong các trò chơi đồng thời (simultaneous game), cả hai đấu thủ thực hiện
các nước đi một cách đồng thời, hoặc nếu không thì đấu thủ này sẽ không biết vềcác hành động trước đó của các đối thủ khác (và như vậy cũng tạo "hiệu ứng"
đồng thời) Trong các trò chơi tuần tự (sequential game), người đi sau có biết
một số (nhưng không nhất thiết toàn bộ) thông tin về các nước đi trước
Biểu diễn dạng chuẩn tắc được dùng để biểu diễn các trò chơi đồng thời,còn Biểu diễn dạng mở rộng được dùng cho các trò chơi tuần tự
2.3.4 Trò chơi thông tin hoàn hảo và Trò chơi có thông tin không hoàn hảo
Các trò chơi thông tin hoàn hảo (games of perfect information) lập thành
một tập con quan trọng của các trò chơi tuần tự Một trò chơi được gọi là cóthông tin hoàn hảo nếu mọi đấu thủ biết tất cả các nước đi mà tất cả các đấu thủkhác đã thực hiện Do vậy chỉ có các trò chơi tuần tự mới có thể là các trò chơithông tin hoàn hảo Hầu hết các trò chơi được nghiên cứu trong lý thuyết trò chơi
là các trò chơi thông tin không hoàn hảo, tuy một số trò chơi hay như cờ vây, cờvua lại là trò chơi thông tin hoàn hảo
Tính chất thông tin hoàn hảo thường bị nhầm lẫn với khái niệm thông tinđầy đủ Tính chất thông tin đầy đủ đòi hỏi rằng mỗi người chơi biết về các chiến
Trang 25lược và thành quả thu được của các người chơi khác, nhưng không nhất thiết biết
về các hành động của họ
Trang 262.3.5 Các trò chơi dài vô tận
Bởi các lý do hiển nhiên, các trò chơi được nghiên cứu bởi các kinh tế gia
và những người chơi trong thế giới thực nhìn chung là kết thúc trò chơi trong hữuhạn các bước đi Các nhà toán học lý thuyết không bị cản trở bởi điều đó, và lýthuyết gia về tập hợp đặc biệt nghiên cứu về các trò chơi kết thúc sau vô hạn các
bước đi, bới người thắng (hay là phần lợi) là không biết được cho đến sau khi các
bước đi đó đã hoàn thành
Sự chú ý thường không phải là quá nhiều về cách nào tốt nhất để chơi tròchơi, mà đơn giản là chỉ phụ thuộc vào người chơi hay người kia có hay khôngmột chiến thuật chiến thắng (Có thể chứng minh rằng, sử dụng tiên đề chọnlựa,là có những trò chơi với—ngay cả là đầy đủ thông tin hoàn toàn, và chỉ có
kết quả là "thắng" hay "thua"— và không người chơi nào có chiến thuật để chiến
thắng.) Sự tồn tại của những chiến thuật như vậy, cho những trò chơi được thiết
kế một cách thông minh, có những kết quả quan trọng trong lý thuyết miêu tả tậphợp
2.4 THIẾT KẾ TRÒ CHƠI
2.4.1 Tổng quan
Game thiết kế bắt đầu với một ý tưởng, thường là một thay đổi trên mộtkhái niệm hiện có Ý tưởng trò chơi có thể nằm trong một hoặc một số thể loại.Nhà thiết kế thường thử nghiệm với thể loại nhạc pha trộn Các nhà thiết kế tròchơi thường tạo ra một tài liệu đề nghị ban đầu của trò chơi có chứa các kháiniệm, trò chơi, danh sách tính năng, thiết lập và câu chuyện, đối tượng mục tiêu,yêu cầu và tiến độ nhân viên, và dự toán ngân sách
Nhiều người được thực hiện trong quá trình phát triển của trò chơi về thiết
kế của trò chơi, nó là trách nhiệm của các nhà thiết kế để quyết định các yếu tố sẽđược thực hiện, dựa trên, ví dụ, phù hợp với ngân sách của trò chơi, thị lực hoặchạn chế phần cứng Thiết kế thay đổi có thể có một tác động tích cực hay tiêucực đáng kể đến nguồn lực cần thiết
Một nhà thiết kế game là một dạng đặc biệt của nhà thiết kế, giống như mộtnhà thiết kế đồ họa, thiết kế công nghiệp, hay kiến trúc sư Một nhà thiết kế trò
Trang 27chơi không nhất thiết phải là một lập trình, thiết kế trực quan, hoặc người quản lý
dự án, Mặc dù đôi khi người đó cũng có thể chơi các vai trò trong việc tạo ramột trò chơi Một nhà thiết kế game có thể làm việc một mình hoặc như mộtphần của một đội bóng lớn Một nhà thiết kế game có thể tạo ra các thẻ trò chơi,trò chơi xã hội, trò chơi video, hoặc các loại khác của game Sự tập trung củamột nhà thiết kế game được thiết kế chơi trò chơi, thụ thai và các quy tắc thiết kế
và cấu trúc kết quả trong một kinh nghiệm cho người chơi
Vì vậy, thiết kế trò chơi, như là một ngành, đòi hỏi phải tập trung vào cáctrò chơi trong và của chính mình Thay vì đặt các trò chơi trong dịch vụ của mộtlĩnh vực như xã hội học, phê bình văn học, hay khoa học máy tính, Mục tiêu củachúng tôi là nghiên cứu các trò chơi trong thời hạn kỷ luật riêng của họ Vì khônggian thiết kế game là một ngành đang phát triển, chúng ta thường vay mượn từcác khu vực khác của kiến thức - từ nhận thức toán học và khoa học; từ ký hiệuhọc và nghiên cứu văn hóa Chúng ta không được vay một cách chính thống nhất,nhưng chúng tôi làm như vậy trong các dịch vụ giúp đỡ để thiết lập một lĩnh vựcthiết kế trò chơi thích hợp
2.4.2 Thiết kế trò chơi
Một nhà thiết kế trò chơi là một người thiết kế trò chơi, đưa ra ý tưởng vàthiết kế các quy tắc và cấu trúc của một trò chơi Nhiều nhà thiết kế bắt đầu sựnghiệp của họ trong bộ phận kiểm tra sản phẩm, nơi mà họ có thể nhìn thấynhững sai xót của người khác để lấy kinh nghiệm cho riêng mình
2.5 CÁC PHƯƠNG PHÁP THIẾT KẾ TRÒ CHƠI
2.5.1 Phương pháp thiết kế game theo hinh hoc 2D , 3D , 4D
Định nghĩa :Game 2D được xây dựng trên hệ thống đồ hoạ máy tính 2 chiều(2 Dimensional), cũng như hệ toạ độ 2 chiều của trục toạ độ, nó phản ánh mộtphong cách đồ hoạ phẳng Đồ hoạ 2 chiều không có sự tham gia hoặc có nhưngrất ít của các hiệu ứng 3 chiều đặc trưng như hiệu ứng chiếu sáng, phản chiếu, độbóng
Trang 28Đặc trưng tiếp theo là mọi thứ đều hoàn toàn bằng 2D từ hậu cảnh, vật thểđến tiền cảnh tạo nên một cái hình giống như phim hoạt hình cắt giấy, mọi thứđều từ hình vẽ trên giấy.
Các game 2D thường là các game platform cổ điển của hệ máy NES hoặcSNES một số game hiện đại cũng theo phong cách 2D
Nếu 2D và 3D dễ định nghĩa và xác định thì 2.5D là một khái niệm trừutượng Theo định nghĩa thì 2.5D là những game sử dụng một phần hệ thống đồhoạ 2D và phần còn lại của 3D hay một game 2D dùng các hiệu ứng đồ hoạ 3D
để mô phỏng tính chất của 3D (giả 3D).Nếu nhìn kỹ bạn sẽ thấy mặt đường vàđống đổ nát là hình hậu cảnh 2D
Các game dùng một phần 2D một phần 3D là các game dùng hậu cảnh 2D
và đặt lên đó những vật thể hình khối 3D hoặc ngược lại Các game 2.5D kiểunày có thể kể ra như Resident Evil các phiên bản 1 – 2 – 3 hay Võ Lâm Truyền
Kỳ 2.Các hiệu ứng gây cảm giác 3D nhưng thực ra cảnh này cấu tạo hoàn toànbằng 2D.Các game thuần 2D giả 3D thường là những game dùng các hiệu ứng đổbóng, phản chiếu và dùng các chi tiết 2D mô phỏng một cảnh vật 3D bằng cách
mô tả chiều sâu của cảnh vật thông qua các hiệu ứng phối màu Các game 2.5Dkiểu này có thể kể ra như Feeding Frenzy, Red Alert 2 hay StarCraft
Game 2.5D do tính chất là trung gian giữa 2 loại game 2D và 3D nên đôi khi rấtkhó phân biệt nó với 2 loại game kia một cách chính xác Cách chuẩn nhất đểphân biệt 3 loại game trên là dựa vào sự khác biệt trên mặt hiển thị vật thể của
nó 2D biểu thị hình phẳng, 2.5D biểu thị một hình 2D phối màu khéo léo để mô
Trang 29tả một hình ảnh 3D giả hoặc dùng pha trộn các thành phần 2D và 3D trong cùnggame, 3D là hình khối thực được xây dựng trên nguyên tắc khối đa giác trongkhông gian.
Định nghĩa : Game 3D được xây dựng trên hệ thống đồ hoạ máy tính 3 chiềuhiện đại (3 Dimentional), hệ thống đồ hoạ này khai thác 3 chiều không gian làchiều ngang – dọc – sâu tạo nên một thế giới hình khối khác hẳn thế giới hìnhphẳng của 2D Đồ hoạ 3D khai thác tối đa các hiệu ứng 3 chiều như đổ bóng,chiều ánh sáng, sự phản chiếu
Đặc trưng của 3D là hậu cảnh lồi lõm không bằng phẳng.Do khai thác hệthống 3 chiều nên các game 3D hầu hết đều xoay góc nhìn được trừ một vàigame do ý đồ của nhà sản xuất nên không cho phép người chơi xoay góc nhìn.Đặc trưng của game 3D là sử dụng các chi tiết hoàn toàn 3D trong hậu cảnh, vậtthể trừ tiền cảnh và một số chi tiết phụ nhỏ bắt buộc phải dùng 2D cho phù hợp(có thể để giảm nhẹ cấu hình) Một đặc điểm khác là đối với 3D hậu cảnh là kếthợp mặt đất vòm trời do thiết kế không gian của game 3D theo hình mái nhàvòm
Đối tượng 3 chiều (three-dimension hay 3-Dimentions hoặc 3D) sử dụng tất
cả 3 chiều (dài, cao và sâu) hoặc các trục tương ứng trong không gian X, Y và Z.Các ứng dụng 3D thực thi theo một chuẩn dựa trên các trục gọi là hệ tọa độ Đề-Các trong không gian, khái niệm được đề cập tới đầu tiên vào những năm giữathế kỷ 17 Hệ trục tọa độ này gồm có các trục X, Y và Z tương ứng với các chiềucủa không gian, tuân theo quy ước:
*X:Chiều rộng
*Y:Chiều cao
*Z:Độ sâu
Trang 30sự mở rộng của các véctơ của không gian 3 chiều thông thường, với các thànhphần được biến đổi như không gian ba chiều và thời gian thông qua biến đổiLorentz Tập hợp các véctơ-4 cùng với biến đổi Lorentz tạo nên nhóm Lorentz.
Nói nôm na thì hệ không gian 4 chiều là hệ 3 chiều gắn thêm 1 trục thờigian,từ nó xuất hiện lý thuyết "đi ngược thời gian" của nhà khoa học Eisntein
2.5.2 Phương pháp thiết kế game theo lứa tuổi của người chơi
EC — Early Childhood: Nội dung phù hợp cho trẻ em từ 3 tuổi trở lên.
Những game này chủ yếu cho trẻ mới tập chơi với máy tính, tập tư duy phát triểnnão qua hình ảnh và những câu đó đơn giản nhất như dòng game Dr Brain haymột số game trong shools bus
E — Everyone: Nội dung thích hợp cho gamer trên 6 tuổi Game giải trí
nhẹ nhàng dành cho trẻ tập tư duy và học hỏi.VD: Sonic Advance, Super MarioAdvance 4, Luigi's Mansion , and Pokémon Ruby and Sapphire
Trang 31E10+ — Everyone 10 and older: Gamer trên 10 tuổi Những game giải
trí giải đố, tìm đường nhẹ nhàng, cartoon nhưng tư duy hơi cao như: Shadow theHedgehog, Project Gotham Racing 3, Donkey Kong Jungle Beat, KingdomHearts 2 and Harry Potter and the Goblet of Fire, Super Smash Bros Melee,Godzilla: Destroy All Monsters Melee, Digimon Rumble Arena 2,SegaSuperstars,Ratchet&Clankseries
T — Teen: Gamer trên 13 tuổi Những game đi cảnh, chiến đấu, dàn trận
không quá bạo lực.Và những game mang tính giáo dục ,trí tuệ cao.VD: StarWars: Rogue Squadron, Prince of Persia: The Sands of Time, Tekken 5,Battlefield 1942
M — Mature:Gamer trên 17 tuổi trở lên.Game có những cảnh bạo lực hoặc
chiến đấu, những game mang tính trí tuệ cao
2.5.3 Phương pháp thiết kế game dựa vào mục đích giải trí ,y học , giáo dục.
Game muc đích giáo dục là thiết kết nhằm giúp người chơi tăng cường
khả năng phát triển về giáo dục đạo đức , về kiến thức khoa học , lịch sử , vănhóa xã hội
Game mục đích y học : tùy theo bệnh lí mà áp dụng các loại trò chơi
khác nhau Mục đích giúp cho các bác sĩ chuẩn đoán được bệnh và giúp chongười bệnh có khả năng phục hồi một số chức năng Bác sĩ và chuyên gia y tếđang nhìn thấy một khía cạnh tích cực hơn của game: giúp trẻ bớt căng thẳng khiđiều trị bệnh, cải thiện kết quả điều trị, tăng cường sức khỏe và sự hiểu biết củatrẻ em và người lớn
Game giải trí : Có rất nhiều đa dạng về nội dung cũng như cách thức chơi
,giúp người chơi thư giãn đầu óc sau khi hoạt động trí óc căng thẳng hay laođộng mệt mỏi Tạo cảm giác thích thú sảng khoái khi chơi Cũng tăng cường suyluận logic của người chơi
Các game Game Offline và Các loại Game Online
Trang 32 Game Phiêu Lưu
Game Á Châu
Game Kinh dị
2.6 LẬP TRÌNH GAME
2.6.1 Giới thiệu quy trình lập trình lên một game
Ý tưởng đưa ra game
Viết nội dung kịch bản cho game
Phân tích thiết kế game
Mã hóa bằng ngôn ngữ lập trình
Kiểm thử , bảo trì , phát triển game
2.6.2 Ngôn ngữ và phương pháp lập trình game
Ngôn ngữ lập trình lên game có rất nhiều như java , visualbasic , c++ ,c#,delphi Các ngôn ngữ này đều có thể dùng để mã hóa lên một game bản demotrong đề tài này mã hóa bằng ngôn ngữ lập c# theo phương pháp lập trình hướngđối tượng kết hợp phương pháp lập trình theo dòng sự kiện
2.6.3 Các phương pháp lập trình trong Game
Rõ ràng là các ngôn ngữ mới với các tính năng mới cần phải được phát triển
để có thể tạo ra các ứng dụng tinh vi hơn Vào cuối các năm trong 1960 và 1970,ngôn ngữ lập trình có cấu trúc ra đời Các chương trình có cấu trúc được tổ chứctheo các công việc mà chúng thực hiện
Về bản chất, chương trình chia nhỏ thành các chương trình con riêng rẽ (còngọi là hàm hay thủ tục) thực hiện các công việc rời rạc trong quá trình lớn hơn,phức tạp hơn Các hàm này được giữ càng độc lập với nhau càng nhiều càng tốt,mỗi hàm có dữ liệu và logic riêng.Thông tin được chuyển giao giữa các hàmthông qua các tham số, các hàm có thể có các biến cục bộ mà không một ai nằmbên ngoài phạm vi của hàm lại có thể truy xuất được chúng Như vậy, các hàm cóthể được xem là các chương trình con được đặt chung với nhau để xây dựng nênmột ứng dụng
Mục tiêu là làm sao cho việc triển khai các phần mềm dễ dàng hơn đối vớicác lập trình viên mà vẫn cải thiện được tính tin cậy và dễ bảo quản chương trình
Trang 33Một chương trình có cấu trúc được hình thành bằng cách bẻ gãy các chức năng
cơ bản của chương trình thành các mảnh nhỏ mà sau đó trở thành các hàm Bằngcách cô lập các công việc vào trong các hàm, chương trình có cấu trúc có thể làmgiảm khả năng của một hàm này ảnh hưởng đến một hàm khác Việc này cũnglàm cho việc tách các vấn đề trở nên dễ dàng hơn Sự gói gọn này cho phépchúng ta có thể viết các chương trình sáng sủa hơn và giữ được điều khiển trêntừng hàm Các biến toàn cục không còn nữa và được thay thế bằng các tham số
và biến cục bộ có phạm vi nhỏ hơn và dễ kiểm soát hơn Cách tổ chức tốt hơnnày nói lên rằng chúng ta có khả năng quản lý logic của cấu trúc chương trình,làm cho việc triển khai và bảo dưỡng chương trình nhanh hơn và hữu hiện hơn vàhiệu quả hơn
Một khái niệm lớn đã được đưa ra trong lập trình có cấu trúc là sự trừu tượnghóa (Abstraction) Sự trừu tượng hóa có thể xem như khả năng quan sát một sựviệc mà không cần xem xét đến các chi tiết bên trong của nó Trong một chươngtrình có cấu trúc, chúng ta chỉ cần biết một hàm đã cho có thể làm được một côngviệc cụ thể gì là đủ Còn làm thế nào mà công việc đó lại thực hiện được làkhông quan trọng, chừng nào hàm còn tin cậy được thì còn có thể dùng nó màkhông cần phải biết nó thực hiện đúng đắn chức năng của mình như thế nào.Điều này gọi là sự trừu tượng hóa theo chức năng (Functional abstraction) và lànền tảng của lập trình có cấu trúc
Ngày nay, các kỹ thuật thiết kế và lập trình có cấu trúc được sử rộng rãi Gầnnhư mọi ngôn ngữ lập trình đều có các phương tiện cần thiết để cho phép lậptrình có cấu trúc Chương trình có cấu trúc dễ viết, dễ bảo dưỡng hơn các chươngtrình không cấu trúc
Sự nâng cấp như vậy cho các kiểu dữ liệu trong các ứng dụng mà các lậptrình viên đang viết cũng đang tiếp tục diễn ra Khi độ phức tạp của một chươngtrình tăng lên, sự phụ thuộc của nó vào các kiểu dữ liệu cơ bản mà nó xử lý cũngtăng theo Vấn đề trở rõ ràng là cấu trúc dữ liệu trong chương trình quan trọngchẳng kém gì các phép toán thực hiện trên chúng Điều này càng trở rõ ràng hơnkhi kích thước của chương trình càng tăng Các kiểu dữ liệu được xử lý trong
Trang 34nhiều hàm khác nhau bên trong một chương trình có cấu trúc Khi có sự thay đổitrong các dữ liệu này thì cũng cần phải thực hiện cả các thay đổi ở mọi nơi có cácthao tác tác động trên chúng Đây có thể là một công việc tốn thời gian và kémhiệu quả đối với các chương trình có hàng ngàn dòng lệnh và hàng trăm hàm trởlên.
Một yếu điểm nữa của việc lập trình có cấu trúc là khi có nhiều lập trìnhviên làm việc theo nhóm cùng một ứng dụng nào đó Trong một chương trình cócấu trúc, các lập trình viên được phân công viết một tập hợp các hàm và các kiểu
dữ liệu Vì có nhiều lập trình viên khác nhau quản lý các hàm riêng, có liên quanđến các kiểu dữ liệu dùng chung nên các thay đổi mà lập trình viên tạo ra trênmột phần tử dữ liệu sẽ làm ảnh hưởng đến công việc của tất cả các người còn lạitrong nhóm Mặc dù trong bối cảnh làm việc theo nhóm, việc viết các chươngtrình có cấu trúc thì dễ dàng hơn nhưng sai sót trong việc trao đổi thông tin giữacác thành viên trong nhóm có thể dẫn tới hậu quả là mất rất nhiều thời gian đểsửa chữa chương trình
Hàm (function) dùng để chỉ các chương trình con nào có giá trị trả về (trong
một kiểu dữ liệu nào đó) thông qua tên của hàm
• Thủ tục (subroutine) dùng để mô tả các chương trình con được thi hành và
dữ liệu Suy cho cùng, công việc mà máy tính thực hiện vẫn thường được gọi là
xử lý dữ liệu Dữ liệu và thao tác liên kết với nhau ở một mức cơ bản (còn có thểgọi là mức thấp), mỗi thứ đều đòi hỏi ở thứ kia có mục tiêu cụ thể, các chươngtrình hướng đối tượng làm tường minh mối quan hệ này
Trang 35Lập trình hướng đối tượng (Object Oriented Programming - gọi tắt là OOP)hay chi tiết hơn là Lập trình định hướng đối tượng, chính là phương pháp lậptrình lấy đối tượng làm nền tảng để xây dựng thuật giải, xây dựng chương trình.Thực chất đây không phải là một phương pháp mới mà là một cách nhìn mớitrong việc lập trình Để phân biệt, với phương pháp lập trình theo kiểu cấu trúc
mà chúng ta quen thuộc trước đây, hay còn gọi là phương pháp lập trình hướngthủ tục (Procedure-Oriented Programming), người lập trình phân tích một nhiệm
vụ lớn thành nhiều công việc nhỏ hơn, sau đó dần dần chi tiết, cụ thể hoá để đượccác vấn đề đơn giản, để tìm ra cách giải quyết vấn đề dưới dạng những thuật giải
cụ thể rõ ràng qua đó dễ dàng minh hoạ bằng ngôn ngữ giải thuật (hay còn gọicác thuật giải này là các chương trình con) Cách thức phân tích và thiết kế nhưvậy chúng ta gọi là nguyên lý lập trình từ trên xuống (top-down), để thể hiện quátrình suy diễn từ cái chung cho đến cái cụ thể
Các chương trình con là những chức năng độc lập, sự ghép nối chúng lại vớinhau cho chúng ta một hệ thống chương trình để giải quyết vấn đề đặt ra Chính
vì vậy, cách thức phân tích một hệ thống lấy chương trình con làm nền tảng,chương trình con đóng vai trò trung tâm của việc lập trình, được hiểu nhưphương pháp lập trình hướg về thủ tục Tuy nhiên, khi phân tích để thiết kế một
hệ thống không nhất thiết phải luôn luôn suy nghĩ theo hướng “làm thế nào đểgiải quyết công việc”, chúng ta có thể định hướng tư duy theo phong cách “vớimột số đối tượng đã có, phải làm gì để giải quyết được công việc đặt ra” hoặcphong phú hơn, “làm cái gì với một số đối tượng đã có đó”, từ đó cũng có thểgiải quyết được những công việc cụ thể Với phương pháp phân tích trong đó đốitượng đóng vai trò trùng tâm của việc lập trình như vậy, người ta gọi là nguyên
lý lập trình từ dưới lên (Bôttm-up)
Lập trình hướng đối tượng liên kết cấu trúc dữ liệu với các thao tác, theocách mà tất cả thường nghĩ về thế giới quanh mình Chúng ta thường gắn một sốcác hoạt động cụ thể với một loại hoạt động nào đó và đặt các giả thiết của mìnhtrên các quan hệ đó
2.6.4 Lập trình dòng sự kiện
Trang 36Khái niệm về event ('sự kiện'):Game sử dụng phương pháp xử lý theo event
và hoạt động như sau: Bất cứ khi nào có một điều gì đó xảy ra trong game, cácinstance của object có "sự kiện" (loại thông điệp cho biết có sự kiện xảy ra) Sau
đó, những instance này có thể "phản ứng" với những thông điệp này bằng cáchthực hiện một số hành động nào đó Đối với mỗi object, bạn phải chỉ ra nó phải
"phản ứng" với sự kiện nào và phải thực hiện hành động nào
Tiếp theo là phần Actions tương ứng với các event
Event này diễn ra khi một instance của object được tạo ra Chức năng nàythường được dùng để thiết lập instance chuyển động hoặc các trạng thái khácnhau của instance
Event này được tạo ra khi instance bị phá huỷ Nói chính xác hơn là nó xảy
ra ngay trước khi instance bị phá huỷ, vì vậy trong quá trình xảy ra event này thìinstance vẫn tồn tại Thường thì event này không được sử dụng, nhưng có thểdùng để thay đổi điểm số hay tạo object khác
Khi người chơi nhấn một phím nào đó, sự kiện keyboard diễn ra đối với tất
cả các instance của mọi object Đối với mỗi phím thì có một sự kiện
Trang 37Sự kiện về chuột diễn ra đối với một instance bất cứ khi nào con trỏ chuộtnằm trong sprite thể hiện instance này Tuỳ vào những phím chuột nào đượcnhấn, có thể có sự kiện "không nhấn chuột", "chuột trái", "chuột phải" hay "chuộtgiữa" Các sự kiện phím chuột được tạo ra khi phím đó được nhấn Còn các sựkiện "thả" chuột được tạo ra khi phím đó được nhả ra Nếu bạn muốn phản ứngvới các sự kiện nhấn chuột hay thả chuột ở một điểm tuỳ ý.Có hai sự kiện đặcbiệt dành cho chuột Một là sự kiện nhấn chuột xảy ra khi chuột được nhấp vàoinstance Sự kiện thả chuột xảy ra khi chuột được thả khỏi instance Những sựkiện này được áp dụng chủ yếu để thay đổi hình ảnh hoặc chơi nhạc Ngoài racòn có rất nhiều sự kiện áp dụng cho bộ điều khiển (joystick) của máy chơi gamechuyên dụng Bạn có thể xác định các hành động cho 4 hướng hay 8 hướng của
// rắn bắt đầu di chuyển
// nut bắt đầu chơi(playButton) trả về giá trị false ẩn
//nút pauseabutton xuất hiện = true
private void PlayButton_Click(object sender, EventArgs e)
{
conRan.Go(true);
PlayButton.Enabled = false;