pacman

public override void Start()

{

// Xây dựng một vòng lặp vô hạn,

// liên tục tiếp nhận thông tin từ bản đồ, các Pacman và Ghost khác

// để quyết định hướng đi tiếp theo.

// Vòng lặp này hoạt động trong suốt thời gian trò chơi diễn ra.

do

{

// Nếu trước đó Pacman đứng yên

// hoặc không thể di chuyển theo hướng đã đi trước đó nữa (gặp vật cản)

// thì sẽ tính toán để tìm ra hướng đi mới.

if (this.Direction == DirectionType.None ||

!this.CanGo(this.Direction))

Cúp Sáng Tạo Công Nghệ Thông Tin 2010

Năng động - Sáng tạo - Thân thiện - Phát triển Trang 8

{

// Lấy tập hợp tất cả các hướng đi có thể đi được

// từ vị trí hiện tại và chuyển thành cấu trúc danh sách

var dirs = Map.GetMovableDirections(this.Location).ToList();

// Nếu có nhiều hướng đi thì ưu tiên không đi theo đường ngược lại

// bằng cách xóa bỏ hướng đi ngược lại ra khỏi danh sách.

if (dirs.Count > 1)

dirs.Remove(Utils.GetOppositeDirection(this.Direction));

// Nếu có ít nhất một hướng đi thì chọn hướng đi ngẫu nhiên.

if (dirs.Count > 0)

this.Direction = dirs[Utils.GetRandom(dirs.Count)];

// Nếu không có hướng đi nào khác thì quyết định đứng yên.

else

this.Direction = DirectionType.None;

}

}

while (true);

}

E. API tham khảo

Các API dưới đây đều được cung cấp dưới namespace VCProjects.PacmanGame.Models.

1. Kiểu dữ liệu

Bản đồ của mê cung được mô hình hóa thành một ma trận kích thước Map.Height x Map.Width. Các ô trong ma trận có tọa độ dòng và cột được đánh số bắt đầu từ 0, do đó dòng cuối cùng có số thứ tự là Map.Height - 1, và cột cuối cùng có số thứ tự là Map.Width - 1.

Mỗi ô của ma trận có giá trị thuộc kiểu CellType, mô tả ô này đang chứa vật gì:

- CellType.Empty: ô này đang trống.

- CellType.Point: ô đang có chứa điểm. Khi di chuyển đến ô này, Pacman được cộng thêm điểm và ô chuyển sang giá trị CellType.Empty.

Cúp Sáng Tạo Công Nghệ Thông Tin 2010

Năng động - Sáng tạo - Thân thiện - Phát triển Trang 14

- CellType.Magic: ô đang có chứa vật Magic. Khi di chuyển đến ô này, Pacman biến tất các các Pacman và Ghost khác sang trạng thái yếu, gây ra hiệu ứng dễ bị tổn thương và giảm ½ tốc độ. Khi này ô chuyển sang giá trị CellType.Empty.

- CellType.Wall: ô có chứa vật cản, Pacman và Ghost không thể di chuyển đến đây.

Tại ô (i, j), Pacman và Ghost có thể di chuyển theo 4 hướng kế cận hoặc đứng yên. Hướng đi được mô tả bằng một giá trị thuộc kiểu DirectionType như sau:

- DirectionType.North: di chuyển theo hướng Bắc, đến ô có tọa độ (i - 1, j) nếu i > 0, ngược lại đến ô có tọa độ (Map.Height - 1, j).

- DirectionType.East: di chuyển theo hướng Đông, đến ô có tọa độ (i, j + 1) nếu j + 1 < Map.Width, ngược lại đến ô có tọa độ (i, 0).

- DirectionType.South: di chuyển theo hướng Nam, đến ô có tọa độ (i + 1, j) nếu i + 1 < Map.Height, ngược lại đến ô có tọa độ (0, j).

- DirectionType.West: di chuyển theo hướng Tây, đến ô có tọa độ (i, j - 1) nếu j > 0, ngược lại đến ô có tọa độ (i, Map.Width - 1).

- DirectionType.None: không di chuyển, giữ nguyên tọa độ (i, j).

Thay vì mô tả tọa độ bằng một cặp giá trị số nguyên (dòng, cột) như trên, lập trình viên có thể sử dụng kiểu dữ liệu Coordinate được xây dựng sẵn như sau:

- Coordinate.X: hoành độ của tọa độ, tương đương với số thứ tự cột, có giá trị thuộc kiểu Int32.

- Coordinate.Y: tung độ của tọa độ, tương đương với số thứ tự dòng, có giá trị thuộc kiểu Int32.

- Coordinate.MaxValue: giá trị lớn nhất được cho phép của một tọa độ, thuộc kiểu Coordinate.

- Coordinate.MinValue: giá trị nhỏ nhất được cho phép của một tọa độ, thuộc kiểu Coordinate, tất nhiên trong trò chơi này đó là (0, 0).

- Các phép so sánh bằng (=) và so sánh khác (≠) giữa 2 giá trị thuộc kiểu Coordinate.

- Coordinate.ToString(): tạo một chuỗi mô tả tọa độ theo dạng "x,y".

- Coordinate.Parse(string s): tạo một đối tượng tọa độ từ một chuỗi mô tả s có dạng "x,y".

2. Map

Cung cấp các hàm tiện ích để làm việc với bản đồ. Đây là những hàm static có thể gọi trực tiếp từ lớp Map. Prototype Mô tả Map.CommandKey Nhận các mệnh lệnh của người dùng từ bàn phím. Giá trị trả về thuộc kiểu System.Windows.Input.Key. Lưu ý: thuộc tính này chỉ được dùng để hỗ trợ kiểm thử trong giai đoạn lập trình, để sử dụng cần tham chiếu đến thư viện Windows Base.

Map.GetCell(Coordinate coor)

Lấy mô tả của ô trong mê cung có tọa độ coor. Giá trị trả về thuộc kiểu CellType. Map.GetCell(Coordinate coor, DirectionType dir) Lấy mô tả của ô trong mê cung nằm theo hướng dir cạnh bên ô có tọa độ coor. Giá trị trả về thuộc kiểu CellType.

Map.GetCell(Int32 i, Int32 j)

Lấy mô tả của ô trong mê cung tại dòng i, cột j. Giá trị trả về thuộc kiểu CellType. Map.GetCell(Int32 i, Int32 j, DirectionType dir) Lấy mô tả của ô trong mê cung nằm theo hướng dir cạnh bên ô tại dòng i, cột j. Giá trị trả về thuộc

Cúp Sáng Tạo Công Nghệ Thông Tin 2010

Năng động - Sáng tạo - Thân thiện - Phát triển Trang 15

kiểu CellType.

Map.GetGhost(Int32 index)

Lấy đối tượng Ghost theo số thứ tự index (được đánh số bắt đầu từ 0). Giá trị trả về thuộc kiểu Ghost, hoặc trả về null nếu Ghost này không còn tồn tại. Map.GetGhostMoves() Lấy toàn bộ dữ liệu lịch sử về hướng đi của tất cả các Ghost đã và đang xuất hiện trong mê cung. Giá trị trả về thuộc kiểu Dictionary<Ghost, DirectionType[]>.

Map.GetGhosts()

Lấy mảng toàn bộ các Ghost có trong mê cung. Giá trị trả về thuộc kiểu Ghost[]. Map.GetGhosts(Coordinate coor) Lấy mảng các Ghost hiện đang nằm tại tọa độ coor trên mê cung. Giá trị trả về thuộc kiểu Ghost[].

Map.GetGhosts(Int32 i, Int32 j)

Lấy mảng các Ghost hiện đang nằm tại dòng i, cột j trên mê cung. Giá trị trả về thuộc kiểu Ghost[]. Map.GetInitCell(Int32 i, Int32 j) Lấy mô tả của ô trong mê cung khởi đầu tại dòng i, cột j. Giá trị trả về thuộc kiểu CellType.

Map.GetInitCell(Coordinate coor)

Lấy mô tả của ô trong mê cung khởi đầu có tọa độ coor. Giá trị trả về thuộc kiểu CellType. Map.GetInitMatrix() Lấy mô tả tình trạng khởi đầu của mê cung. Giá trị trả về thuộc kiểu CellType[,].

Map.GetLocation(Coordinate coor, DirectionType dir)

Lấy tọa độ ô trên mê cung nằm theo hướng dir cạnh bên ô có tọa độ coor. Giá trị trả về thuộc kiểu Coordinate. Map.GetLocation(Int32 i, Int32 j, DirectionType dir) Lấy tọa độ ô trên mê cung nằm theo hướng dir cạnh bên ô tại dòng i, cột j. Giá trị trả về thuộc kiểu Coordinate.

Map.GetMatrix()

Lấy mô tả tình trạng hiện thời của mê cung. Giá trị trả về thuộc kiểu CellType[,]. Map.GetMovableDirections( Coordinate coor) Lấy tập hợp các hướng đi có thể di chuyển được xung quanh ô có tọa độ coor. Giá trị trả về thuộc kiểu IEnumerable<DirectionType>.

Map.GetMovableDirections(Int32 i, Int32 j)

Lấy tập hợp các hướng đi có thể di chuyển được xung quanh ô tại dòng i, cột j. Giá trị trả về thuộc kiểu IEnumerable<DirectionType>. Map.GetMovableLocations( Coordinate coor) Lấy tập hợp các tọa độ có thể di chuyển được xung quanh ô có tọa độ coor. Giá trị trả về thuộc kiểu IEnumerable<Coordinate>.

Map.GetMovableLocations(Int32 i, Int32 j)

Lấy tập hợp các tọa độ có thể di chuyển được xung quanh ô tại dòng i, cột j. Giá trị trả về thuộc kiểu IEnumerable<Coordinate>. Map.GetMove(Ghost gho, Int32 turn) Lấy dữ liệu lịch sử về hướng đi của Ghost gho tại lượt có chỉ số là turn. Giá trị trả về thuộc kiểu DirectionType. Lưu ý: nếu tại lượt này gho chưa xuất hiện thì trả về DirectionType.None.

Map.GetMove(Pacman man, Int32 turn)

Lấy dữ liệu lịch sử về hướng đi của Pacman man tại lượt có chỉ số là turn. Giá trị trả về thuộc kiểu DirectionType. Map.GetMoves(Ghost gho, Int32 start, Int32 count) Lấy dữ liệu lịch sử về count hướng đi của Ghost gho bắt đầu từ lượt có chỉ số là start. Giá trị trả về thuộc kiểu DirectionType[].

Map.GetMoves(Pacman man, Int32 start,

Lấy dữ liệu lịch sử về count hướng đi của Pacman

Cúp Sáng Tạo Công Nghệ Thông Tin 2010

Năng động - Sáng tạo - Thân thiện - Phát triển Trang 16

Int32 count)

man bắt đầu từ lượt có chỉ số là start. Giá trị trả về thuộc kiểu DirectionType[]. Map.GetPacman(Int32 index) Lấy đối tượng Pacman theo số thứ tự index (được đánh số bắt đầu từ 0). Giá trị trả về thuộc kiểu Pacman, hoặc trả về null nếu Pacman này không còn tồn tại.

Map.GetPacmanMoves()

Lấy toàn bộ dữ liệu lịch sử về hướng đi của tất cả các Pacman đã và đang xuất hiện trong mê cung. Giá trị trả về thuộc kiểu Dictionary<Pacman, DirectionType[]>. Map.GetPacmans() Lấy mảng toàn bộ các Pacman có trong mê cung. Giá trị trả về thuộc kiểu Pacman[].

Map.GetPacman(Coordinate coor)

Lấy Pacman hiện đang nằm tại tọa độ coor trên mê cung. Giá trị trả về thuộc kiểu Pacman. Nếu không có Pacman nào thì trả về null. Map.GetPacman(Int32 i, Int32 j) Lấy Pacman hiện đang nằm tại dòng i, cột j trên mê cung. Giá trị trả về thuộc kiểu Pacman. Nếu không có Pacman nào thì trả về null.

Map.GhostDuration

Lấy số lượt di chuyển mà cứ sau số lượt này, một Ghost mới sẽ được sinh ra. Giá trị trả về thuộc kiểu Int32. Lưu ý: do mỗi lượt di chuyển cách nhau 0.2 giây nên Map.GhostDuration ÷ 5 chính là khoảng thời gian tính theo giây giữa các lần xuất hiện của Ghost. Map.Height Lấy chiều cao của mê cung. Giá trị trả về thuộc kiểu Int32.

Map.IsPaused

Kiểm tra trò chơi có đang bị tạm dừng hay không. Thuộc tính này ít khi được sử dụng. Map.IsPlaying Kiểm tra trò chơi có đang diễn ra hay không. Thuộc tính này ít khi được sử dụng.

Map.IsStarted

Kiểm tra trò chơi đã được bắt đầu hay chưa. Thuộc tính này ít khi được sử dụng. Map.IsStopped Kiểm tra trò chơi đã được kết thúc hay chưa. Thuộc tính này ít khi được sử dụng.

Map.NextGhostDuration

Lấy số lượt di chuyển tiếp theo mà một Ghost mới sẽ xuất hiện. Giá trị trả về thuộc kiểu Int32. Map.NextGhostLocation Lấy tọa độ tiếp theo mà một Ghost mới sẽ xuất hiện. Giá trị trả về thuộc kiểu Coordinate.

Map.NoGhosts

Lấy số lượng Ghost hiện tại có trong mê cung. Giá trị trả về thuộc kiểu Int32. Lưu ý: số thứ tự của các Ghost được đánh số từ 0 đến NoGhosts - 1. Map.NoMagics Lấy số lượng ô chứa vật Magic còn trong mê cung. Giá trị trả về thuộc kiểu Int32.

Map.NoPacmans

Lấy số lượng Pacman hiện tại có trong mê cung. Giá trị trả về thuộc kiểu Int32. Lưu ý: số thứ tự của các Pacman được đánh số từ 0 đến NoPacmans - 1. Map.NoPoints Lấy số lượng ô chứa điểm còn trong mê cung. Giá trị trả về thuộc kiểu Int32.

Map.Turns

Lấy số lượt di chuyển đã trải qua kể từ khi trò chơi bắt đầu. Giá trị trả về thuộc kiểu Int32. Map.WeakDuration Lấy số lượt di chuyển mà Pacman hay Ghost phải

Cúp Sáng Tạo Công Nghệ Thông Tin 2010

Năng động - Sáng tạo - Thân thiện - Phát triển Trang 17

trải qua để trở lại trạng thái bình thường kể từ khi rơi vào trạng thái yếu do tác dụng của vật Magic. Giá trị trả về thuộc kiểu Int32. Mặc định, giá trị này là một nửa chu vi của mê cung.

Map.Width

Lấy chiều rộng của mê cung. Giá trị trả về thuộc kiểu Int32.

3. Pacman

Cung cấp các hàm tiện ích để làm việc với Pacman. Đây là những hàm gắn với một đối tượng Pacman P cụ thể. Prototype Mô tả Pacman.CanEat(Pacman man) Kiểm tra Pacman P có khả năng ăn được Pacman man hay không.

Pacman.CanEat(Ghost gho)

Kiểm tra Pacman P có khả năng ăn được Ghost gho hay không. Pacman.CanGo(DirectionType dir) Kiểm tra Pacman P có thể đi tiếp theo hướng dir hay không.

Pacman.Color

Lấy màu sắc của Pacman P, trả về giá trị màu thuộc kiểu System.Windows.Media.Color. Pacman.Direction Gán hoặc lấy hướng đi hiện tại của Pacman P, trả về giá trị hướng đi thuộc kiểu DirectionType. Lưu ý: Pacman P không thể gán hướng đi cho Pacman khác hoặc ngược lại.

Pacman.EatenGhosts

Lấy số lượng Ghost mà Pacman P đã ăn được kể từ lúc bắt đầu trò chơi. Giá trị trả về thuộc kiểu Int32. Pacman.Index Lấy số thứ tự chỉ mục của Pacman P trong danh sách các Pacman có mặt ở mê cung. Giá trị trả về thuộc kiểu Int32. Lưu ý: nếu Pacman đã bị tiêu diệt thì trả về -1.

Pacman.IsDead

Kiểm tra Pacman P đã bị tiêu diệt hay chưa. Pacman.Location Lấy tọa độ hiện thời của Pacman P trên mê cung, trả về giá trị tọa độ thuộc kiểu Coordinate.

Pacman.Name

Trả về tên của Pacman P dưới dạng chuỗi. Pacman.NextGhostPoints Trả về số điểm sẽ được cộng thêm nếu Pacman P tiếp tục ăn được một Ghost nữa.

Pacman.Points

Lấy số điểm mà Pacman P đã ghi được từ khi bắt đầu trò chơi. Số điểm này là số nguyên dương kiểu Int32. Pacman.Start() Hàm khởi động của Pacman P được gọi bởi chương trình chơi khi trò chơi bắt đầu.

Pacman.Weak

Lấy trạng thái hiện tại của Pacman P. Nếu P đang bình thường, trả về giá trị 0. Nếu P đang ở trạng thái yếu, trả về số nguyên dương kiểu Int32 biểu diễn số lượt di chuyển mà P cần phải trải qua để trở lại trạng thái bình thường.

Cúp Sáng Tạo Công Nghệ Thông Tin 2010

Năng động - Sáng tạo - Thân thiện - Phát triển Trang 18

4. Ghost

Cung cấp các hàm tiện ích để làm việc với Ghost. Đây là những hàm gắn với một đối tượng Ghost G cụ thể. Prototype Mô tả Ghost.CanEat(Pacman man) Kiểm tra Ghost G có khả năng ăn được Pacman man hay không.

Ghost.CanGo(DirectionType dir)

Kiểm tra Ghost G có thể đi tiếp theo hướng dir hay không. Ghost.Direction Lấy hướng đi hiện tại của Ghost G, trả về giá trị hướng đi thuộc kiểu DirectionType.

Ghost.Index

Lấy số thứ tự chỉ mục của Ghost G trong danh sách các Ghost có mặt ở mê cung. Giá trị trả về thuộc kiểu Int32. Lưu ý: nếu Ghost đã bị tiêu diệt thì trả về -1. Ghost.IsDead Kiểm tra Ghost G đã bị tiêu diệt hay chưa.

Ghost.Location

Lấy tọa độ hiện thời của Ghost G trên mê cung, trả về giá trị tọa độ thuộc kiểu Coordinate. Ghost.Weak Lấy trạng thái hiện tại của Ghost G. Nếu G đang bình thường, trả về giá trị 0. Nếu G đang ở trạng thái yếu, trả về số nguyên dương kiểu Int32 biểu diễn số lượt di chuyển mà G cần phải trải qua để trở lại trạng thái bình thường.

5. Utils

Cung cấp một số hàm tiện ích hỗ trợ cho công việc lập trình. Đây là những hàm static có thể gọi trực tiếp từ lớp Utils. Prototype Mô tả Utils.FillArray(T[] array, T value) Gán value làm giá trị của tất cả các phần tử thuộc mảng một chiều array.

Utils.FillArray(T[,] array, T value)

Gán value làm giá trị của tất cả các phần tử thuộc mảng 2 chiều array. Utils.GetColor(String color) Lấy giá trị màu từ một chuỗi mô tả. Giá trị trả về thuộc kiểu System.Windows.Media.Color.

Utils.GetOppositeDirection( DirectionType dir)

Trả về hướng đi ngược lại với hướng đi dir được cung cấp. Ví dụ, nếu dir là DirectionType.North thì hàm trả về DirectionType.South. Utils.GetRandom() Trả về một số nguyên dương kiểu Int32 có giá trị ngẫu nhiên.

Utils.GetRandom(Int32 maxValue)

Trả về một số nguyên dương kiểu Int32 có giá trị ngẫu nhiên nhỏ hơn maxValue. Utils.GetRandom(Int32 minValue, Int32 maxValue) Trả về một số nguyên kiểu Int32 có giá trị ngẫu nhiên trong khoảng minValue và maxValue.

Utils.GetRandomDouble()

Trả về một số thực có giá trị ngẫu nhiên trong khoảng từ 0 đến 1. Utils.SetRandomBytes(Byte[] buffer) Gán các giá trị số nguyên kiểu Byte ngẫu nhiên vào từng vị trí của mảng buffer.

Utils.Shuffle(IEnumerable<T> list)

Trả về một hợp gồm các phần tử đã được xáo trộn ngẫu nhiên từ tập hợp list.

Bạn đang đọc truyện trên: AzTruyen.Top

Tags: #ast