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

Lập trình game bằng ngôn ngữ c++

34 3,6K 10
Tài liệu đã được kiểm tra trùng lặp

Đ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

Tiêu đề Lập trình game bằng ngôn ngữ c++
Tác giả Nguyễn Thị Minh
Người hướng dẫn T.S Phan Lê Na
Trường học Trường Đại Học
Chuyên ngành Lập trình
Thể loại Đồ án tốt nghiệp
Định dạng
Số trang 34
Dung lượng 347 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

C++ là ngôn ngữ lập trình hớng đối tợng, do vậy nó có đầy đủ các tính chất của một ngôn ngữ lập trình hớng đối tợng: tính kế thừa,tính đóng kín, tính đa dạng.. Một cách giản lợc, đây là

Trang 1

Mục lụC Trang

Lời mở đầu 3

Chơng I : Giới thiệu ngôn ngữ C++ 5

1 Khái niệm lập trình hớng đối tợng 5

2 Các tính chất cơ bản của lập trình hớng đối tợng 6

2.1 Tính trừu tợng (abstraction) 7

2.2 Tính đóng gói (encapsulation) và che dấu thông tin (information hiding) 7

2.3 Tính đa hình (polymorphism) 7

2.4 Tính kế thừa (inheritance) 8

3 Các khái niệm liên quan đến các ngôn ngữ lập trình OOP hiện đại 8

3.1 Lớp (class) 8

3.2 Lớp con (subclass) 9

3.3 Lớp trừu tợng hay lớp cơ sở trừu tợng (abstract class) 9

3.4 Phơng thức (method) 9

3.5 Thuộc tính (attribute) 10

3.6 Thực thể (instance) 10

3.7 Công cộng (public) 11

3.8 Riêng t (private) 11

3.9 Bảo tồn (protected) 11

3.10 Đa kế thừa (muliple inheritance) 11

4 Sự cần thiết của C++ 12

Chơng II: Lý thuyết Game 14

1 Mở đầu 14

2 Một số khái niệm cơ bản 14

3 Nguyên lý MinMax 18

Trang 2

4 Nguyên lý Minimax 20

Chơng III: Chơng trình Game bắn bóng 24

I Bài toán, ý tởng thuật toán và giao diện của chơng trình Game bắn bóng 24

1 Bài toán 24

2 ý tởng thuật toán 24

3 Các giao diện của chơng trình bắn bóng 26

3.1 Màn hình menu chính 26

3.2 Màn hình chế độ chơi Normal 27

3.3 Màn hình Chế độ chơi Hard 28

3.4 Màn hình Chế độ chơi Hardest 29

3.5 Màn hình ghi tên ngời chơi 30

3.6 Màn hình kết thúc trò chơi 31

Kết luận 32

Tài liệu tham khảo 33

Trang 3

lời nói đầu

Ngày nay việc áp dụng các công nghệ khoa học kỹ thuật vào lĩnh vực đờisống của con ngời ngày càng tăng và không ngừng can thiệp vào hầu hết cáccông việc trong đời sống CNTT là một trong những ngành khoa học đó Đi đôivới sự phát triển của công nghệ chế tạo các thiết bị máy tính thì việc các sảnphẩm phần mềm ứng dụng ra đời có tính chất quyết định đối với việc áp dụngngành khoa học này

Trên thế giới cũng nh ở Việt Nam, CNTT đã trở thành một ngành côngnghiệp mũi nhọn, nó là một ngành khoa học kỹ thuật không thể thiếu trong việc

áp dụng vào các hoạt động xã hội nh : Quản lý, kinh tế, thông tin ở nớc ta hiệnnay, việc áp dụng vi tính hoá trong việc quản lý tại các cơ quan, xí nghiệp đangrất phổ biến và trở nên cấp thiết

Nói đến công nghệ thông tin chúng ta không thể không nhắc đến các ngônngữ lập trình, các ngôn ngữ lập trình đóng vai trò hết sức quan trọng trong lĩnhvực công nghệ thông tin Công nghệ thông tin phát triển dẫn đến sự ra đời củanhiều ngôn ngữ lập trình mới thân thiện hơn với ngời sử dụng nh: Visual Basic,Java, C#

Đời sống của con ngời ngày càng đợc nâng cao do đó nhu cầu về vui chơigiải trí ngày càng lớn Các trò chơi đợc thiết kế bằng máy tính đã ra đời và trên

đà phát triển nhằm đáp ứng một phần nhu cầu về giải trí của con ngời Chính vìvậy tôi đã nghiên cứu ngôn ngữ lập trình là ngôn ngữ C++ và chọn đề tài Lập trình Game bằng ngôn ngữ C++ làm đồ án tốt nghiệp đại học

Mục tiêu của chơng trình là xây dựng trò chơi đơn giản nhằm giúp ngờichơi th giãn sau những giờ học và làm việc căng thẳng Đồ án Lập trình Game bằng ngôn ngữ C++ ngoài phần mở đầu và kết luận gồm 3 chơng:Chơng I: Giới thiệu ngôn ngữ C++

Chơng II: Giới thiệu lý thuyết Game

Trang 4

Chơng III: Chơng trình Game bắn bóng.

Vì vốn kiến thức về phân tích và thiết kế trò chơi nói chung cũng nh tròchơi bắn bóng nói riêng còn nhiều hạn chế, kỹ thuật xây dựng giao diện chơngtrình còn rất có hạn Do đó qua báo cáo này tôi rất mong nhận đợc ý kiến đónggóp từ phía thầy cô giáo và các bạn để tôi có thể xây dựng và hoàn thiện hơn hệthống trò chơi này

Mặc dù đã cố gắng hết sức nhng do lần đầu tiên đi theo lĩnh vực viết tròchơi, tài liệu lý thuyết game lại không có nhiều, do những lý do khách quan vàkhả năng hạn chế của bản thân nên chơng trình chắc chắn không thể tránh khỏinhững thiếu sót Và một lần nữa tôi xin chân thành cảm ơn cô giáo, Tiến sỹPhan Lê Na đã tận tình giúp đỡ tôi hoàn thành đồ án này Tôi cũng xin chânthành cảm ơn thầy cô giáo trong khoa CNTT cùng các bạn trong lớp 45K đã

đóng góp nhiều ý kiến bổ ích để tôi hoàn thành đồ án tốt hơn

Vinh , ngày 15 tháng 4 năm 2009 Sinh viên thực hiện:

Nguyễn Thị Minh

Trang 5

Chơng I Giới thiệu ngôn ngữ C++

Ngôn ngữ C++ đợc phát triển từ ngôn ngữ C Có thể coi C++ là một cảitiến của C Nó mang đầy đủ các đặc tính của C Một chơng trình viết bằng C cóthể biên dịch đợc bằng trình biên dịch của C++ ở những phiên bản đầu tiên,thực chất mã nguồn C++ đầu tiên đợc dịch sang mã nguồn C, rồi từ mã nguồn Ctiếp tục đợc biên dịch tiếp C++ là ngôn ngữ lập trình hớng đối tợng, do vậy nó

có đầy đủ các tính chất của một ngôn ngữ lập trình hớng đối tợng: tính kế thừa,tính đóng kín, tính đa dạng Nhng C++ không phải là ngôn ngữ hớng đối tợnghoàn toàn mà là ngôn ngữ "đa hớng" Vì C++ hỗ trợ cả lập trình hớng hành

động và lập trình hớng đối tợng C++ kết hợp những ý tởng hay nhất của lậptrình có cấu trúc với việc phân chia một bài toán thành các nhóm nhỏ có quan

hệ với nhau, mỗi nhóm con đó là một đối tợng chứa các lệnh và dữ liệu riêngcủa nó C++ đa vào các khái niệm hàm ảo, quá tải hàm, quá tải toán tử cho phéptạo ra các kiểu dữ liệu trừu tợng, hỗ trợ thừa kế bội Mục tiêu của C++ là tiếpcận những ý tởng của phơng pháp luận hớng đối tợng và trừu tợng dữ liệu Các

đặc tính của C++ cho phép ngời lập trình xây dựng những th viện phần mềm cóchất lợng cao phục vụ những đề án lớn C++ là ngôn ngữ thích hợp cho việc xâydựng những chơng trình lớn nh các hệ soạn thảo, chơng trình dịch, các hệ quảntrị cơ sở dữ liệu, các hệ truyền thông,

1 Khái niệm lập trình hớng đối tợng

Lập trình hớng đối tợng (gọi tắt là OOP, từ chữ Anh ngữ object-orientedprgramming), hay còn gọi là lập trình định hớng đối tợng, là kỹ thuật lập trình

hỗ trợ công nghệ đối tợng OOP đợc xem là giúp tăng năng suất, đơn giản hoá

độ phức tạp khi bảo trì cũng nh mở rộng phần mềm bằng cách cho phép lậptrình viên tập trung vào các đối tợng phần mềm ở bậc cao hơn Ngoài ra, nhiều

Trang 6

ngời còn cho rằng OOP dễ tiếp thu hơn cho những ngời mới học về lập trìnhhơn là các phơng pháp trớc đó

Một cách giản lợc, đây là khái niệm và là một nỗ lực nhằm giảm nhẹ cácthao tác viết mã cho ngời lập trình, cho phép họ tạo ra các ứng dụng mà các yếu

tố bên ngoài có thể tơng tác với các chơng trình đó giống nh là tơng tác với các

đối tợng vật lý Những đối tợng trong một ngôn ngữ OOP là các kết hợp giữamã và dữ liệu mà chúng đợc nhìn nhận nh là một đơn vị duy nhất Mỗi đối tợng

có một tên riêng biệt và tất cả các tham chiếu đến đối tợng đó đợc tiến hành quatên của nó Nh vậy, mỗi đối tợng có khả năng nhận vào các thông báo, xử lý dữliệu (bên trong của nó) và gửi ra hay trả lời đến các đối tợng khác hay đến môitrờng

2 Các tính chất cơ bản của lập trình hớng đối tợng

Đối tợng (object): Các dữ liệu và chỉ thị đợc kết hợp vào một đơn vị đầy

đủ tạo nên một đối tợng Đơn vị này tơng đơng với một chơng trình con Các

đối tợng sẽ đợc chia thành hai bộ phận chính: phần các phơng thức (method) vàphần các thuộc tính (property) Trong thực tế, các phơng thức của đối tợng làcác hàm và các thuộc tính của nó là các biến, các tham số hay hằng nội tại củamột đối tợng (hay nói cách khác tập hợp các dữ liệu nội tại tạo thành thuộc tínhcủa đối tợng) Các phơng thức là phơng tiện để sử dụng một đối tợng trong khicác thuộc tính sẽ mô tả đối tợng có những tính chất gì

Các phơng thức và các thuộc tính thờng gắn chặt với thực tế các đặc tính

và sử dụng của một đối tợng Trong thực tế, các đối tợng thờng đợc trừu tợnghoá qua việc định nghĩa của các lớp (class)

Tập hợp các giá trị hiện có của các thuộc tính tạo nên trạng thái của một

đối tợng Mỗi phơng thức hay mỗi dữ liệu nội tại cùng với các tính chất đợc

định nghĩa (bởi ngời lập trình) đợc xem là một đặc tính riêng của đối tợng Nếukhông có gì nhầm lẫn thì tập hợp các đặc tính này gọi chung là đặc tính của đốitợng

Trang 7

2.1 Tính trừu tợng (abstraction)

Đây là khả năng của chơng trình bỏ qua hay không chú ý đến một số khíacạnh của thông tin mà nó đang trực tiếp làm việc lên, nghĩa là nó có khả năngtập trung vào những cốt lõi cần thiết Mỗi đối tợng phục vụ nh là một "động tử"

có thể hoàn tất các công việc một cách nội bộ, báo cáo, thay đổi trạng thái của

nó và liên lạc với các đối tợng khác mà không cần cho biết làm cách nào đối ợng tiến hành đợc các thao tác Tính chất này thờng đợc gọi là sự trừu tợng củadữ liệu

t-Tính trừu tợng còn thể hiện qua việc một đối tợng ban đầu có thể có một

số đặc điểm chung cho nhiều đối tợng khác nh là sự mở rộng của nó nhng bảnthân đối tợng ban đầu này có thể không có các biện pháp thi hành Tính trừu t-ợng này thờng đợc xác định trong khái niệm gọi là lớp trừu tợng hay lớp cơ sởtrừu tợng

2.2 Tính đóng gói (encapsulation) và che dấu thông tin

(information hiding)

Tính chất này không cho phép ngời sử dụng các đối tợng thay đổi trạngthái nội tại của một đối tợng Chỉ có các phơng thức nội tại của đối tợng chophép thay đổi trạng thái của nó Việc cho phép môi trờng bên ngoài tác độnglên các dữ liệu nội tại của một đối tợng theo cách nào là hoàn toàn tuỳ thuộcvào ngời viết mã Đây là tính chất đảm bảo sự toàn vẹn của đối tợng

2.3 Tính đa hình (polymorphism)

Thể hiện thông qua việc gửi các thông điệp (message) Việc gửi cácthông điệp này có thể so sánh nh việc gọi các hàm bên trong của một đối tợng.Các phơng thức dùng trả lời cho một thông điệp sẽ tuỳ theo đối tợng mà thông

điệp đó đợc gửi tới sẽ có phản ứng khác nhau Ngời lập trình có thể định nghĩamột đặc tính (chẳng hạn thông qua tên của các phơng thức) cho một loạt các đốitợng gần nhau nhng khi thi hành thì dùng cùng một tên gọi mà sự thi hành của

Trang 8

mỗi đối tợng sẽ tự động xảy ra tơng ứng theo đặc tính của từng đói tợng màkhông bị nhầm lẫn

Ví dụ: Khi định nghĩa hai đối tợng "hinh_vuong" và "hinh_tron" thì có một

ph-ơng thức chung là "chu_vi" Khi gọi phph-ơng thức này thì nếu đối tợng là

"hinh_vuong" nó sẽ tính theo công thức khác với khi đối tợng là "hinh_tron"

Một lớp đợc hiểu là một kiểu dữ liệu bao gồm các thuộc tính và các

ph-ơng thức đợc định nghĩa từ trớc Đây là sự trừu tợng hoá của đối tợng Một đốitợng sẽ đợc xác lập khi nó đợc thực thể hoá từ một lớp Khác với kiểu dữ liệuthông thờng, một lớp là một đơn vị (trừu tợng) bao gồm sự kết hợp giữa các ph-

ơng thức và các thuộc tính Để có một đối tợng (mà có thể đợc xem nh là mộtbiến) hoạt động đợc thì việc thực thể hoá sẽ có thể bao gồm việc cài đặt các giátrị ban đầu của các thuộc tính cũng nh việc đăng ký bộ nhớ, mà công việc nàythờng đợc giao cho các phơng thức gọi là "máy kết cấu" (constructor) hay hàmdựng Ngợc lại khi một đối tợng thuộc về một lớp không còn sử dụng nữa thìcũng có thể có một phơng thức để xử lý gọi là "máy huỷ diệt" (destructor) hayhàm huỷ

Nh vậy, để có đợc các đối tợng thì ngời lập trình OOP cần phải thiết kếlớp của các đối tợng đó bằng cách xây dựng các thuộc tính và các phơng thức

có các đặc tính riêng

Mỗi phơng thức hay một thuộc tính đầy đủ của một lớp còn đợc gọi

Trang 9

tên là một thành viên (member) của lớp đó.

3.2 Lớp con (subclass)

Lớp con là một lớp thông thờng nhng có thêm tính chất kế thừa mộtphần hay toàn bộ các đặc tính của một lớp khác Lớp mà chia sẻ sự kế thừa gọi

là lớp phụ mẫu (parent class)

3.3 Lớp trừu tợng hay lớp cơ sở trừu tợng (abstract class)

Lớp trừu tợng là một lớp mà nó không thể thực thể hoá thành một đối ợng thực dụng đợc Lớp này đợc thiết kế nhằm tạo ra một lớp có các đặc tínhtổng quát nhng bản thân lớp đó cha có ý nghĩa (hay không đủ ý nghĩa)

t-để có thể tiến hành viết mã cho việc thực thể hoá

3.4 Phơng thức (method)

Là hàm nội tại của một lớp (hay một đối tợng) Tuỳ theo đặc tính mà ngờilập trình gán cho, một phơng pháp có thể chỉ đợc gọi bên trong các hàm kháccủa lớp đó, có thể cho phép các câu lệnh bên ngoài lớp gọi tới nó, hay chỉ chophép các lớp có quan hệ đặc biệt nh là quan hệ lớp con, và quan hệ bạn bè(friend) đợc phép gọi tới nó Mỗi phơng pháp đều có thể có kiểu trả về, chúng

có thể trả các kiểu dữ liệu cổ điển hay trả về một kiểu là một lớp đã đợc địnhnghĩa từ trớc Một tên gọi khác của phơng pháp của một lớp là hàm thành viên

Ngoài ra còn định nghĩa thêm vài loại phơng pháp đặc biệt:

- Hàm dựng (constructor) là hàm đợc dùng để cài đặt các gía trịban đầu cho các biến nội tại và đôi khi còn dùng để khai báo về việc sử dụng bộnhớ

- Hàm huỷ (destructor) là hàm dùng vào việc làm sạch bộ nhớ vàhuỷ bỏ tên của một đối tợng sau khi đã dùng xong, trong đó có thể bao gồm cảviệc xoá các con trỏ nội tại và trả về các phần bộ nhớ mà đối tợng đã dùng.Trong một số trờng hợp thì hàm huỷ hay hàm dựng có thể đợc tự động hoá bởingôn ngữ OOP nh là trờng hợp của Visual C++, C#

Trang 10

- Tiện ích (utility) là các hàm chỉ hoạt động bên trong của một lớp

mà không cho phép môi trờng bên ngoài gọi tới Các hàm này có thể là nhữngtính toán trung gian nội bộ của một đối tợng mà xét thấy không cần thiết phảicho thế giới bên ngoài của đối tợng biết là gì

3.5 Thuộc tính (attribute)

Thuộc tính của một lớp bao gồm các biến, các hằng, hay tham số nội tạicủa lớp đó ở đây, vai trò quan trọng nhất của các thuộc tính là các biến vìchúng sẽ có thể bị thay đổi trong suốt quá trình hoạt động của một đối tợng.Các thuộc tính có thể đợc xác định kiểu và kiểu của chúng có thể là các kiểu dữliệu cổ điển hay đó là một lớp đã định nghĩa từ trớc Khi một lớp đã đợc thựcthể hoá thành đối tợng cụ thể thì tập hợp các giá trị của các biến nội tại làmthành trạng thái của đối tợng Tuỳ theo ngời viết mã, biến nội tại có thể chỉ đợcdùng bên trong các phơng pháp của chính lớp đó, có thể cho phép các câu lệnhbên ngoài lớp, hay chỉ cho phép các lớp có quan hệ đặc biệt nh là quan hệ lớpcon, (và quan hệ bạn bè (friend) trong C++) đợc dùng tới nó (hay thay đổi giátrị của nó) Mỗi thuộc tính của một lớp còn đợc gọi là thành viên dữ liệu của lớp

đó

3.6 Thực thể (instance)

Thực thể hoá (instantiate) là quá trình khai báo để có một tên (có thể đợcxem nh là một biến) trở thành một đối tợng từ một lớp nào đó

Một lớp sau khi đợc tiến hành thực thể hoá để có một đối tợng cụ thể gọi

là một thực thể Ngợc lại một thực thể là một đối tợng riêng lẽ của một lớp đã

đ-ợc định trớc Nh các biến thông thờng, hai thực thể của cùng một lớp có thể cótrạng thái nội tại khác nhau (xác định bởi các giá trị hiện có của các biến nộitại) và do đó hoàn toàn độc lập nhau nếu không có yêu cầu gì đặc biệt từ ngờilập trình

3.7 Công cộng (public)

Trang 11

Công cộng là một tính chất đợc dùng để gán cho các phơng pháp, cácbiến nội tại, hay các lớp mà khi khai báo thì ngời lập trình đã cho phép các câulệnh bên ngoài cũng nh các đối tợng khác đợc dùng đến nó.

Ví dụ: Trong C++ khai báo public: int my_var; thì biến my_var có haitính chất là tính công cộng và là một integer, cả hai tính chất này hợp thành đặctính của biến my_var khiến nó có thể đợc sử dụng hay thay đổi giá trị của nó(bởi các câu lệnh) ở mọi nơi bên ngoài lẫn bên trong của lớp

3.8 Riêng t (private)

Riêng t là sự thể hiện tính chất đóng mạnh nhất (của một đặc tính haymột lớp) Khi dùng tính chất này gán cho một biến, một phơng pháp thì biếnhay phơng pháp đó chỉ có thể đợc sử dụng bên trong của lớp mà chúng đợc địnhnghĩa Mọi nỗ lực dùng đến chúng từ bên ngoài qua các câu lệnh hay từ các lớpcon sẽ bị phủ nhận hay bị lỗi

3.9 Bảo tồn (protected)

Tuỳ theo ngôn ngữ, sẽ có vài điểm nhỏ khác nhau về cách hiểu tính chấtnày Nhìn chung đây là tính chất mà khi dùng để áp dụng cho các phơng pháp,các biến nội tại hay các lớp thì chỉ có trong nội bộ của lớp đó hay các lớp concủa nó (hay trong nội bộ một gói nh trong java) đợc phép gọi đến hay dùng đếncác phơng pháp, biến hay lớp đó

So với tính chất riêng t thì tính chất bảo tồn rộng rãi hơn về nghĩa chia sẻdữ liệu hay chức năng Nó cho phép một số trờng hợp đợc dùng tới các đặc tínhcủa một lớp (từ một lớp con chẳng hạn)

3.10 Đa kế thừa (muliple inheritance)

Đây là một tính chất cho phép một lớp con có khả năng kế thừa trực tiếpcùng lúc nhiều lớp khác

Lu ý khi viết mã dùng tính chất đa kế thừa:

- Khi muốn có một sự kế thừa từ nhiều lớp phụ mẫu thì các lớp nàycần phải độc lập và đặc biệt tên của các dữ liệu hay làm cho phép kế thừa phải

Trang 12

có tên khác nhau để tránh lỗi "ambiguilty" Vì lúc đó phần mềm chuyển dịch sẽkhông thể xác định đợc là lớp con sẽ thừa kế tên nào của các lớp phụ mẫu.

- Không phải ngôn ngữ OOP loại phân lớp nào cũng hỗ trợ chotính chất này

Ngoài các khái niệm trên, tuỳ theo ngôn ngữ, có thể sẽ có các chức năng OOPriêng biệt đợc cấp thêm vào

4 sự cần thiết của c++

Trong suốt thập niên 70 và 80, C trở thành ngôn ngữ lập trình nổi trội và

nó vẫn còn đợc sử dụng cho đến ngày nay C là một ngôn ngữ thành công vàhữu ích

Trong lịch sử của lập trình, sự gia tăng tính phức tạp của các chơng trình

đã dẫn đến yêu cầu cần có một cách tốt hơn để quản lý nó C++ đáp ứng sự cầnthiết đó Để hiểu rõ hơn tại sao quản lý tính phức tạp của chơng trình là cơ sởcho sự ra đời của C++, ta xem những vấn đề sau:

Khi máy tính mới đợc phát minh, lập trình đợc thực hiện bởi việc đa vàocác chỉ dẫn máy nhị phân bằng cách sử dụng các front panel Cách tiếp cận nàylàm việc với các chơng trình nhỏ vài trăm chỉ dẫn Sau đó, ngôn ngữ assembly

đợc phát minh, các lập trình viên có thể làm việc với chơng trình lớn hơn, phứctạp hơn bằng cách sử dụng các biểu diễn ký hiệu của các chỉ dẫn máy Tiếp tục,ngôn ngữ cấp cao đợc giới thiệu nhằm cung cấp cho lập trình viên các công cụ

có thể quản lý đợc tính phức tạp của chơng trình

Ngôn ngữ phổ biến đầu tiên là fortran Trong khi fortran là sự đột phá

đầu tiên, nó không phải là ngôn ngữ dễ hiểu và dễ sử dụng Những năm 60 đánhdấu sự ra đời của ngôn ngữ lập trình có cấu trúc Sử dụng ngôn ngữ lập trình cócấu trúc cho phép lập trình viên viết các chơng trình có tính phức tạp vừa phảimột cách dễ dàng Tuy nhiên, khi kích thớc của dự án (project) đến một mứcnào đó, tính phức tạp của nó vợt ra khỏi tầm kiểm soát của lập trình viên

Trang 13

Đầu những năm 80, nhiều dự án đợc tiếp cận theo cấu trúc đã vợt quagiới hạn của nó Để giải quyết vấn đề này, một cách thức lập trình mới ra đời, đ-

ợc gọi là lập trình hớng đối tợng (OOP – object oriented programming) Lậptrình hớng đối tợng là phơng thức lập trình giúp cho việc tổ chức các chơngtrình phức tạp thông qua sự kế thừa, sự gói gọn và đa dạng

Mặc dù C là một trong những ngôn ngữ lập trình vĩ đại của thế giới, cógiới hạn về khả năng quản lý độ phức tạp Khi một chơng trình nhiều hơn từ25.000 đến 100.000 dòng lệnh, nó trở nên quá khó khăn để hiểu đợc tổng thể.C++ cho phép vợt qua giới hạn này, giúp cho lập trình viên hiểu và quản lý đợccác chơng trình lớn hơn

C++ đợc phát minh bởi Bjarne Stroustrup vào năm 1979 khi đang làmcho bell laboratories Stroustrup mới đầu gọi ngôn ngữ mới là “C with classes”.Tuy nhiên, vào năm 1983, đợc đổi thành C++ Ngôn ngữ C++ mở rộng C bằngcách thêm vào các đặc điểm hớng đối tợng Bởi vì C++ đợc xây dựng dựa trên

cở sở của C nên nó bao gồm tất cả các đặc điểm của C, tính chất và lợi íchmang lại Đây là nguyên nhân cốt yếu làm nên sự thành công của ngôn ngữ C++ Sự phát minh ra C++ không phải là tạo ra một ngôn ngữ lập trình hoàn toànmới mà nó đợc nâng cấp từ một ngôn ngữ đã thành công trớc đó

chơng II GIớI THIệU lý thuyết Game

Trang 14

1 Mở đầu

Khi nghiên cứu một số bài toán thực tế trong các lĩnh vực kinh tế, xã hộihay trong chiến tranh ngời ta thờng gặp những tình huống trong đó hai bên cóquyền lợi đối lập nhau Mỗi bên đều tìm cách hành động sao cho mình có lợinhất Những tình huống nh thế đợc gọi là các tình huống xung đột Có rất nhiềutình huống xung đột nh : xung đột vũ trang giữa hai quốc gia, giữa hai phe phái,cạnh tranh kinh tế giữa hai công ty, cuộc mặc cả giữa bên mua và bên bán…Việc nghiên cứu, phân tích những tình huống nh thế nhằm nắm đợc bảnchất của nó và đề ra những giải pháp tốt nhất đối với mỗi bên tham gia đã dẫn

đến sự ra đời của một môn toán học mới Lý thuyết trò chơi Lý thuyết trò

chơi là lý thuyết toán học về các tình huống xung đột

Để nắm bắt đợc bản chất của vấn đề cần nghiên cứu, một cách quen thuộc

là mô hình hóa dới dạng toán học Ngời ta loại bỏ những nhân tố thứ yếu, cáctrờng hợp ngoại lệ, chỉ giữ lại những điểm chính, những quy tắc, điều kiện quantrọng nhất chi phối diễn biến của tình huống xung đột đang nghiên cứu Nhữngmô hình nhận đợc nh vậy sẽ rất giống với mô hình trò chơi mà ta thờng gặphàng ngày Vì lẽ đó mà ta gọi là các trò chơi và sử dụng các thuật ngữ của tròchơi thờng nhật

2 Một số khái niệm cơ bản

+ Trò chơi tay đôi, trò chơi tập thể: Một trò chơi có thể có hai hay nhiều bên

tham gia Nếu hai bên đối lập ta gọi đó là trò chơi tay đôi, nếu có nhiều hơn gọi làtrò chơi tập thể Ta chỉ hạn chế xét trò chơi tay đôi Hai bên tham gia đợc gọi là đốithủ A và đối thủ B

+ Quy tắc trò chơi: Một trò chơi đợc tiến hành theo những quy tắc nhất

định Tập hợp những quy định mà các bên tham gia đều phải tuân thủ gọi là cácquy tắc chơi (các luật chơi)

+ Phần chi trả: Một trò chơi từ lúc bắt đầu đến lúc kết thúc trải qua nhiều

giai đoạn gọi là các bớc đi Tại thời điểm kết thúc cuộc chơi mỗi đối thủ sẽ đợc

Trang 15

nhận một phần thởng mà ta sẽ ớc lợng bằng một con số Nếu con số này dơng,

đối thủ là ngời thắng cuộc và đó là phần thắng Nếu con số này là âm, đối thủ làngời thua cuộc và đó là phần chi trả

+ Trò chơi gọi là có tổng bằng không: Nếu một đối thủ chỉ thắng bằng

phần mà đối thủ kia bị thua Nói cách khác, tổng các phần thởng cho tất cả các

đối thủ bằng không

+ Các yếu tố diễn biến trò chơi: Diễn biến của một trò chơi có thể là phụ

thuộc vào yếu tố ngẫu nhiên hoặc kỹ năng của các bên tham gia hoặc cả hai Cónhững trò chơi hoàn toàn phụ thuộc vào yếu tố ngẫu nhiên nh sấp ngửa,roullete…đó là trò chơi may rủi Có những trò chơi phụ thuộc hoàn toàn vào kỹnăng của các bên tham gia nh đánh cờ Các trò chơi nh tú lơ khơ, tam cúc… có

sự tham gia của yếu tố ngẫu nhiên (tình trạng quân bài lúc đầu và các lá bài bốc

đợc tiếp theo) và yếu tố kỹ năng ngời tham gia Nh vậy, các bớc đi đợc chia làmhai loại : Bớc đi lựa chọn và bớc đi may rủi.

+ Thông tin đầy đủ, thông tin không đầy đủ: Một trò chơi gọi là thông tin

đầy đủ nếu mỗi đối thủ đều biết rõ kết quả của tất cả các bớc trớc Các trò chơibài không thuộc loại này Đó là các trò chơi với thông tin không đầy đủ Hầuhết các mô hình trò chơi có ý nghĩa đều thuộc loại thông tin không đầy đủ vìmột nét tiêu biểu trong các tình huống xung đột là các bên đều tìm cách giấuhoạt động của mình

+ Tập chiến lợc: Tham gia vào một trò chơi, mỗi đối thủ phải lựa chọn

một trong số nhiều quyết định có thể cho mỗi bớc đi Lựa chọn này phụ thuộcvào tình huống cụ thể lúc đó Nghĩa là đối thủ phải có sẵn một phơng án hành

động cho một tình huống cụ thể có thể xẩy ra Tập hợp các phơng án này cho tấtcả các tình huống có thể gọi là một chiến lợc Trong thực tế, số các tình huống

có thể rất nhiều và phức tạp Các đối thủ thờng chỉ lựa chọn phơng án hành

động ngay lúc đó nhng về mặt toán học hoàn toàn có thể coi rằng các phơng ánnày đã đợc tính toán từ trớc

Trang 16

+ Ma trận trò chơi: Trò chơi gọi là hữu hạn nếu các đối thủ đều chỉ có một

số hữu hạn các chiến lợc Khi đối thủ A có m chiến lợc và đối thủ B có n chiếnlợc thì ta gọi đó là trò chơi m x n

+ Kí hiệu các chiến lợc của đối thủ A là A1, A2, … Am và đối thủ B là B1,

B2, … Bn Nếu nh trò chơi thuần tuý kĩ năng thì khi hai đối thủ lựa chọn xongchiến lợc chơi của mình, chẳng hạn Ai và Bj, kết cục của trò chơi đã hoàn toànxác định Nghĩa là nếu kí hiệu aij là phần thởng của đối thủ A (và cũng là phầnchi trả của đối thủ B trong trờng hợp trò chơi tổng không), thì mỗi cặp (Ai, Bj )xác định đơn trị một số aij tơng ứng Quan hệ hàm số này đợc gọi là hàm chi trả(payoff function)

+ Khi trò chơi có sự tham gia của các yếu tố ngẫu nhiên ta có thể thay thế

số aij bằng giá trị trung bình (kì vọng) của nó sau nhiều lần áp dụng cặp chiến

l-ợc (Ai, Bj) Nếu ta sắp xếp các giá trị aij này thành một bảng chữ nhật, dòng thứ

i ứng với Ai của đối thủ A và cột thứ j ứng với chiến lợc Bj của đối thủ B thì ta

sẽ nhận đợc một ma trận chi trả của trò chơi tơng ứng hay đơn giản gọi là matrận của trò chơi

Trang 17

+ Chiến lợc hỗn hợp và chiến lợc đơn nhất

Định nghĩa : Xét một trò chơi m x n nghĩa là ma trận có m hàng và n

cột Ta hiểu chiến lợc (hỗn hợp) của đối thủ A là một véctơ m chiều

y

1

Một chiến lợc đơn nhất là một véctơ đơn vị, chỉ có một thành phần bằng 1còn mọi thành phần khác đều bằng 0

3 Nguyên lý MinMax

Mục đích của lý thuyết trò chơi là mô hình hoá, phân tích và nghiên cứu

nó để rút ra những chỉ dẫn các đối thủ cần phải hành động nh thế nào cho có lợinhất Nói cách khác, mục đích để tìm ra những chiến lợc tối u đối với mỗi đốithủ Các chiến lợc này đợc xây dựng dựa trên giả thiết là các bên đều cùng biếtphân tích và lựa chọn một cách thông minh nh nhau Yếu tố nào mạo hiểm hoặcsai lầm của đối phơng trong tính toán bị loại trừ Nghĩa là tính trung bình khi tròchơi đợc lặp lại nhiều lần thì chiến lợc tối u đảm bảo một phần thắng lớn nhất

Ngày đăng: 19/12/2013, 15:01

HÌNH ẢNH LIÊN QUAN

3.3. Màn hình Chế độ chơi Hard - Lập trình game bằng ngôn ngữ c++
3.3. Màn hình Chế độ chơi Hard (Trang 27)
3.4. Màn hình chế độ chơi Hardest - Lập trình game bằng ngôn ngữ c++
3.4. Màn hình chế độ chơi Hardest (Trang 28)
3.5. Màn hình ghi tên cho ngời chơi - Lập trình game bằng ngôn ngữ c++
3.5. Màn hình ghi tên cho ngời chơi (Trang 29)
3.6. Màn hình Kết thúc trò chơi - Lập trình game bằng ngôn ngữ c++
3.6. Màn hình Kết thúc trò chơi (Trang 30)

TỪ KHÓA LIÊN QUAN

w