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

Báo cáo chuyên Đề học phần lập trình python Đề ti xây dựng trò chơi rắn săn mồi

40 0 0
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 đề Xây Dựng Trò Chơi Rắn Săn Mồi
Tác giả Phạm Đức Anh, Nguyễn Bá Chí Công
Người hướng dẫn Trần Thị Minh Thu
Trường học Trường Đại Học Điện Lực
Chuyên ngành Công Nghệ Thông Tin
Thể loại báo cáo chuyên đề
Năm xuất bản 2023
Thành phố Hà Nội
Định dạng
Số trang 40
Dung lượng 2,85 MB

Cấu trúc

  • CHƯƠNG 1. TỔNG QUAN VỀ PYTHON (9)
    • 1.1 Giới thiệu (9)
    • 1.2 Các tính năng của Python (10)
    • 1.3 Tại sao lại là Python? (10)
    • 1.4 Cài đặt Python? (12)
    • 1.5 Các Khái Niệm Cơ Bản Trong Lập Trình Python (13)
      • 1.5.1 Comments trong Python (13)
      • 1.5.2 Cấu trúc dữ liệu là gì, các kiểu cấu trúc dữ liệu trong Python (13)
    • 1.6 Cấu trúc điều khiển trong python (15)
      • 1.6.1 Lệnh if (15)
      • 1.6.2 Lệnh for (16)
      • 1.6.3 Lệnh while (17)
    • 1.7 Cài đặt các gói thư viện cơ bản trong python (18)
      • 1.7.1 Cài đặt pip (18)
      • 1.7.2 Một số gói thư viện thông dụng cho Python (18)
    • 1.8 Cấu trúc dữ liệu là gì, các kiểu cấu trúc dữ liệu trong python (19)
      • 1.8.1 Hàm (Function) (19)
      • 1.8.2 Các thông số của Hàm (Function Parameters) (20)
      • 1.8.3 Câu lệnh return trong Python (21)
      • 1.8.4 DocStrings trong Python (22)
  • CHƯƠNG 2. TỔNG QUAN VỀ TRÒ CHƠI RẮN SĂN MỒI (23)
    • 2.2 Mô tả đề tài (23)
    • 2.3 Phân tích yêu cầu (25)
      • 2.3.1 Yêu cầu chức năng (25)
      • 2.3.2 Yêu cầu phi chức năng (25)
  • CHƯƠNG 3. LẬP TRÌNH TRÒ CHƠI RẮN SĂN MỒI (26)
    • 3.1 Thêm các thư viện cần được sử dụng cho trò chơi (26)
    • 3.2 Thiết lập cửa sổ của trò chơi (26)
    • 3.3 Tạo các ô caro trên cửa sổ (27)
    • 3.4 Tạo con rắn (28)
    • 3.5 Tạo mồi cho trò chơi (31)
    • 3.6 Tạo hàm chính – nơi những quy định của game được cấu hình (32)
    • 3.7 Tạo hàm theo dõi thời gian (34)
    • 3.8 Khai báo các đối tượng cần có của trò chơi (36)
    • 3.9 Vòng lặp chính của game (37)
    • 3.10 Phần chính của trò chơi (38)
    • 3.11 Trò chơi sau khi chạy (39)
  • KẾT LUẬN (40)

Nội dung

- Lên kịch bản cho hệ thống1.2 Các tính năng của Python Phân tích dữ liệu và học máy với mã Python Với lượng dữ liệu ngày càng tăng mà chúng ta có ngày nay, điều quan trọng làphải sử dụn

TỔNG QUAN VỀ PYTHON

Giới thiệu

Python được phát triển vào cuối những năm 1980, bắt đầu bởi Guido van Rossum tại CWI, Hà Lan vào tháng 12/1989 Ngôn ngữ này là sự kế thừa của ABC, được thiết kế để xử lý ngoại lệ và giao tiếp với hệ điều hành Amoeba Van Rossum không chỉ là tác giả chính của Python mà còn đóng vai trò quyết định trong hướng phát triển của ngôn ngữ này, được cộng đồng Python tôn vinh với danh hiệu "Độc tài nhân từ cho cuộc sống" (BDFL).

Python 2.0 được phát hành vào ngày 16/10/2000, với nhiều tính năng chính mới bao gồm một bộ dọn rác đầy đủ và hỗ trợ Unicode Với phiên bản này, quá trình phát triển đã được thay đổi và trở thành minh bạch hơn và được cộng đồng ủng hộ.

Python 3 0 (còn được gọi là Python 3000 hoặc Py3k), một bản phát hành lớn, không tương thích ngược, được phát hành vào ngày 03/12/2008 sau một thời gian dài thử nghiệm Nhiều trong số các tính năng chính của nó đã được điều chỉnh để tương thích ngược với Python 2 6 và 2 7 Các tính năng và triết lý phát triển Python là 1 ngôn ngữ lập trình đa hình: lập trình hướng đối tượng và hướng cấu trúc được hỗ trợ đầy đủ, và có 1 số tính năng của ngôn ngữ hỗ trợ lập trình theo chức năng và lập trình hướng khía cạnh (Aspect-oriented programming) Nhiều mô hình khác được hỗ trợ bằng việc sử dụng các phần mở rộng, bao gồm thiết kế theo hợp đồng (design by contract) và lập trình luận lý.

Các trang như Mozilla, Reddit, Instagram và PBS đều được viết bằng Python. Ngôn ngữ lập trình Python được dùng vào các mục đích:

- Phát triển web (trên máy chủ)

- Tính toán một cách khoa học

- Lên kịch bản cho hệ thống

Các tính năng của Python

Phân tích dữ liệu và học máy với mã Python

Với sự gia tăng không ngừng của dữ liệu hiện nay, việc sử dụng dữ liệu trong quyết định trở nên thiết yếu Công nghệ máy học và phân tích dữ liệu giúp chúng ta đạt được điều này Đặc biệt, ngôn ngữ lập trình Python đóng vai trò quan trọng trong việc thu thập, tổ chức và xử lý dữ liệu hiệu quả.

Phát triển web và phát triển phần mềm

Ngôn ngữ lập trình Python là lựa chọn hàng đầu cho phát triển web và phần mềm, nhờ vào sự hỗ trợ của nhiều khung như Pyramid, Django và Flask Những khung này đã giúp xây dựng các trang web nổi tiếng như Spotify, Reddit và Mozilla Với tính năng quản lý nội dung, ủy quyền và truy cập cơ sở dữ liệu, Python khẳng định vị thế của mình trong lĩnh vực phát triển web.

Tự động hóa hoặc viết kịch bản bằng mã Python

Viết kịch bản là quá trình tạo mã để tự động hóa các tác vụ, và Python là một ngôn ngữ lập trình lý tưởng cho mục đích này Việc sử dụng kịch bản thường được áp dụng trong các công việc lặp đi lặp lại, giúp tiết kiệm thời gian và công sức Mã Python có khả năng tự động hóa quy trình một cách hiệu quả, mang lại nhiều lợi ích cho người dùng.

Nó giúp tiết kiệm thời gian, tài nguyên và công sức thủ công.

Kiểm thử phần mềm và tạo nguyên mẫu

Python có khả năng theo dõi lỗi, kiểm soát tòa nhà, phát triển web, phát triển phần mềm và kiểm tra phần mềm hiệu quả Sử dụng mã Python giúp tối ưu hóa thời gian cho các hoạt động này, cho phép bạn tập trung vào những nhiệm vụ quan trọng hơn.

Tại sao lại là Python?

Tại sao bạn nên sử dụng mã Python khi chúng ta có nhiều ngôn ngữ lập trình phổ biến khác? Đây là những lý do:

Python là một ngôn ngữ lập trình dễ học nhờ vào cú pháp rõ ràng và sự liên kết với tiếng Anh, giúp người mới dễ dàng tiếp cận Điều này làm cho việc sử dụng Python trong phát triển phần mềm và thực hiện các tác vụ khác trở nên đơn giản và hiệu quả hơn.

Cộng đồng hỗ trợ tích cực cho ngôn ngữ Python là một điểm mạnh nổi bật, giúp người dùng dễ dàng tìm kiếm sự trợ giúp chuyên nghiệp trong quá trình phát triển phần mềm và tự động hóa Khi gặp phải vấn đề, bạn có thể nhanh chóng truy cập diễn đàn để tìm câu trả lời cho mọi thắc mắc liên quan đến Python Sự hiện diện của cộng đồng này đảm bảo rằng bạn không bao giờ phải đơn độc trong hành trình lập trình của mình.

Python cung cấp một môi trường linh hoạt cho lập trình viên, cho phép họ không bị giới hạn trong một lĩnh vực cụ thể Đây là một trong những ngôn ngữ lập trình đa mục đích, có thể được áp dụng trong phát triển web, phát triển phần mềm và giải pháp tự động, bất kể mức độ phức tạp hay lĩnh vực sử dụng.

Nhiều thư viện và khung có sẵn: Theo thời gian, Python Software

Foundation đã phát triển nhiều thư viện và khung như NumPy, SciPy và Django, giúp lập trình viên tiết kiệm thời gian trong quá trình phát triển phần mềm Nhờ vào những thư viện này, bạn không cần phải bắt đầu viết mã từ đầu.

Nền tảng phần mềm Python giúp đơn giản hóa các công nghệ phức tạp, cho phép bạn dễ dàng quản lý các nhiệm vụ tự động hóa tốn thời gian và đòi hỏi kiến thức chuyên môn Học mã Python không chỉ giúp bạn làm quen với ngôn ngữ lập trình này mà còn mở ra cơ hội để xử lý các công việc phức tạp một cách hiệu quả hơn.

Cú pháp và ngữ nghĩa của Python rất quan trọng trong lập trình Cú pháp Python bao gồm các quy tắc giúp ngôn ngữ dễ đọc và dễ hiểu, trong khi ngữ nghĩa thể hiện ý nghĩa của các câu lệnh So với nhiều ngôn ngữ lập trình khác, Python có quy định và hàm ý đơn giản hơn, giúp người mới bắt đầu dễ dàng tiếp cận Việc sử dụng ngôn ngữ dễ đọc và sự hiện diện của khoảng trắng trong phần thụt đầu dòng giúp giảm khả năng nhầm lẫn Python, với vai trò là ngôn ngữ lập trình đa mục đích, được thiết kế để thân thiện và toàn diện, tạo điều kiện cho mọi người có thể sử dụng dễ dàng.

Môi trường phát triển phần mềm tích hợp Python cung cấp cho lập trình viên các công cụ toàn diện để phát triển ứng dụng và phần mềm đa dạng Khung Python cơ bản đã được thiết lập, giúp cả nhà phát triển và người không chuyên dễ dàng tùy chỉnh hoặc tạo ra các ứng dụng, dịch vụ và sản phẩm kỹ thuật số mới.

Cài đặt Python?

Để download Python, ta truy cập địa chỉ trang chủ của python qua địa chỉ: https://www.python.org/downloads/ và tải python bản mới nhất.

Sau khi tải xong, hãy nhấn vào file exe vừa tải về để bắt đầu quá trình cài đặt Tiếp theo, bạn chỉ cần làm theo hướng dẫn từng bước, bao gồm việc chọn các thành phần cài đặt, xác định đường dẫn cần thiết và điều chỉnh các thông số khác.

Hình 1.1: Giao diện trang web để tải python

Các Khái Niệm Cơ Bản Trong Lập Trình Python

Trong Python bất kỳ văn bản nào ở bên phải biểu tượng # thì sẽ được trình biên dịch hiểu là một comment và không biên dịch phần đó

Việc sử dụng nhiều comment hữu ích trong chương trình của bạn sẽ giúp công việc lập trình trở nên dễ dàng hơn Các comment này có thể giải thích các giả định, quyết định quan trọng, và chi tiết cần thiết, đồng thời nêu rõ vấn đề bạn đang cố gắng giải quyết cũng như các vấn đề mà bạn đang khắc phục trong mã nguồn của mình.

Hằng số (Literal Constants) là những giá trị không thay đổi, ví dụ như số 5, 1.23 hoặc chuỗi như 'python' và "It's a string!" Chúng được gọi là hằng số vì giá trị của chúng luôn đại diện cho chính chúng mà không có sự thay đổi nào Số 2 là một ví dụ điển hình, luôn luôn giữ nguyên giá trị của nó Tất cả những giá trị này đều được phân loại là hằng số.

Số (Numbers): Số chủ yếu có hai loại – số nguyên (integer) và số thực (float).

Chuỗi (String): Một chuỗi là một dãy các ký tự Chuỗi về cơ bản chỉ là một loạt các từ.

Biến trong lập trình Python là thành phần có khả năng thay đổi giá trị, cho phép lưu trữ thông tin trong bộ nhớ máy tính Đối tượng trong Python được hiểu là bất kỳ thứ gì được sử dụng trong chương trình, mang đến sự linh hoạt và khả năng tổ chức dữ liệu hiệu quả.

1.5.2 Cấu trúc dữ liệu là gì, các kiểu cấu trúc dữ liệu trong Python.

Việc tổ chức, quản lý và lưu trữ dữ liệu rất quan trọng vì nó cho phép truy cập

Cấu trúc dữ liệu trong Python giúp bạn dễ dàng quản lý và sửa đổi dữ liệu, cho phép tổ chức các bộ dữ liệu một cách hiệu quả Việc sắp xếp dữ liệu theo cách có hệ thống không chỉ giúp lưu trữ thông tin liên quan mà còn tạo điều kiện thuận lợi để thực hiện các thao tác cần thiết.

Python hỗ trợ các cấu trúc dữ liệu như List, Dictionary, Tuple và Set, cho phép lưu trữ và truy cập dữ liệu hiệu quả Người dùng có thể tạo ra các cấu trúc dữ liệu tùy chỉnh, mang lại quyền kiểm soát toàn diện về chức năng Một số cấu trúc dữ liệu nổi bật khác như Stack, Queue, Tree và Linked List cũng có sẵn trong nhiều ngôn ngữ lập trình khác.

Cấu trúc dữ liệu tích hợp trong Python giúp lập trình viên dễ dàng hơn trong việc lập trình và tìm kiếm giải pháp nhanh chóng Các kiểu cấu trúc dữ liệu này được tích hợp sẵn, mang lại nhiều lợi ích cho việc phát triển ứng dụng.

Danh sách là một cấu trúc dữ liệu cho phép lưu trữ các loại dữ liệu khác nhau theo thứ tự Mỗi thành phần trong danh sách được gán một địa chỉ, được gọi là chỉ mục Giá trị chỉ mục bắt đầu từ 0 và tăng dần cho đến phần tử cuối cùng, được gọi là chỉ số dương.

Dictionary trong Python được sử dụng để lưu trữ các cặp key-value, tương tự như một thư mục điện thoại chứa hàng trăm tên và số điện thoại Trong trường hợp này, các tên và số điện thoại là các khóa (keys), trong khi các giá trị (values) tương ứng là những tên và số khác nhau Khi truy cập vào các giá trị của các khóa, bạn sẽ nhận được tất cả tên và số điện thoại Đây chính là cách hoạt động của cặp key-value trong cấu trúc Dictionary.

Tập hợp là một nhóm các yếu tố không có thứ tự, và mỗi yếu tố trong tập hợp là duy nhất Điều này có nghĩa là dù dữ liệu có thể xuất hiện nhiều lần, nó chỉ được ghi nhận một lần trong tập hợp.

Tuple (các bộ dữ liệu) là cấu trúc dữ liệu tương tự như list, nhưng điểm khác biệt chính là dữ liệu trong Tuple không thể thay đổi sau khi đã được nhập vào Tuy nhiên, nếu dữ liệu bên trong Tuple là kiểu có thể thay đổi, thì chỉ lúc đó dữ liệu trong Tuple mới có thể được điều chỉnh.

Cấu trúc điều khiển trong python

Python thực hiện các câu lệnh theo thứ tự từ trên xuống một cách chính xác Các câu lệnh điều khiển được sử dụng để điều chỉnh luồng thực thi của chương trình Trong Python, có ba cấu trúc điều khiển chính: if, for và while.

1.6.1 Lệnh if Được sử dụng để kiểm tra một điều kiện: nếu điều kiện là đúng sẽ chạy một khối các câu lệnh (được gọi là if-block), nếu sai chương trình sẽ xử lý một khối các câu lệnh khác (được gọi là else-block ).

Cho một số nguyên đã cho, hãy nhập vào một số nguyên khác và thông báo các kết quả Nếu các điều kiện được thỏa mãn, hãy in ra các kết quả khác nhau.

Hình 1.3: So sánh list và tuple

Hình 1.4: Ví dụ lệnh if trong bài toán

Khi nhập một số nguyên bất kỳ, nếu số đó thỏa mãn điều kiện bằng với số đã cho trước, hệ thống sẽ in ra thông báo “chính xác” Ngược lại, nếu số nhập vào lớn hơn hoặc nhỏ hơn số cho trước, kết quả sẽ khác.

Hình 1.5: Kết quả ví dụ lệnh if

Câu lệnh for in là một cấu trúc lặp trong lập trình, cho phép lặp qua từng mục trong một chuỗi các đối tượng Nó giúp dễ dàng truy cập và xử lý từng phần tử trong chuỗi một cách hiệu quả.

Sequences trong Python là tập hợp các items, bao gồm chuỗi, danh sách và tuple Chúng cho phép lưu trữ và truy cập dữ liệu một cách có tổ chức Việc hiểu rõ về cấu trúc dữ liệu này là rất quan trọng để tối ưu hóa việc lập trình và xử lý thông tin trong Python.

Hình 1.6: Ví dụ lệnh for

Vòng lặp for trong Python có sự khác biệt rõ rệt so với vòng lặp trong C/C++ Cụ thể, vòng lặp for trong Python tương tự như vòng lặp foreach trong C# Trong khi C/C++ yêu cầu cú pháp như for(int i = 0; i < 5; i++), Python chỉ cần sử dụng for i in range(0, 5) Điều này cho thấy vòng lặp for trong Python đơn giản hơn, biểu cảm hơn và ít xảy ra lỗi hơn.

Hình 1.7: Kết quả ví dụ lệnh for

Trong Python, câu lệnh while cho phép thực hiện liên tục một khối lệnh miễn là điều kiện vẫn đúng Đây là một ví dụ điển hình của câu lệnh lặp, và nó có thể bao gồm một mệnh đề khác tùy chọn.

Nhập vào một số nguyên đáp ứng các điều kiện đã được đề ra Sau khi thực hiện một loạt lệnh theo yêu cầu, hãy in ra kết quả "Hoàn thành".

Hình 1.8: Ví dụ lệnh while

Cài đặt các gói thư viện cơ bản trong python

Pip là công cụ quản lý gói thư viện Python, giúp cài đặt dễ dàng các gói thư viện cần thiết Để tải pip, bạn có thể truy cập [đường link này](https://pip.pypa.io/en/stable/installation/) Để cập nhật pip lên phiên bản mới nhất, mở cmd và sử dụng lệnh: ```bashpython -m pip install upgrade pip```Để cài đặt một thư viện Python bất kỳ, hãy mở cmd trên Windows và gõ:```bashpip install “tên thư viện”```

1.7.2 Một số gói thư viện thông dụng cho Python

NumPy: Được tạo bởi Travis Oliphant, NumPy là một “ngựa kéo” phân tích thực

Mảng trong Python cho phép người dùng làm việc với các cấu trúc dữ liệu nhiều chiều và cung cấp nhiều hàm để xử lý các toán tử toán học phức tạp Chúng được tổ chức dựa trên các véc tơ và ma trận, giúp lưu trữ dữ liệu hiệu quả và thực hiện các phép toán nhanh chóng Điều này đặc biệt quan trọng trong các ứng dụng khoa học dữ liệu, nơi mà việc tính toán với ma trận là thiết yếu.

SciPy, originally developed by Travis Oliphant, Pearu Peterson, and Eric Jones, enhances the capabilities of NumPy by offering a range of algorithms for linear algebra, matrix operations, signal processing, image processing, optimization, and Fourier transforms.

Pandas là một thư viện mạnh mẽ bổ sung cho NymPy và SciPy, cho phép xử lý các đối tượng dữ liệu cấu trúc như DataFrames và Chuỗi (Series) Thư viện này giúp bạn làm việc với các bảng dữ liệu phức tạp và chuỗi thời gian, vượt xa khả năng của các mảng NumPy Với Pandas, bạn có thể dễ dàng tải dữ liệu từ nhiều nguồn khác nhau, xử lý các thành phần thiếu sót, thêm, đổi tên, tổng hợp và định hình lại dữ liệu, cũng như trực quan hóa chúng theo cách bạn mong muốn.

Scikit-learn, ban đầu là một phần của SciKits, đã trở thành nền tảng quan trọng cho khoa học dữ liệu trên Python Thư viện này cung cấp đầy đủ công cụ cần thiết cho việc tiền xử lý dữ liệu, học giám sát và không giám sát, lựa chọn mô hình, cũng như đánh giá và đo lường lỗi.

IPython là một công cụ mạnh mẽ được phát triển bởi Fernando Perez, nhằm hỗ trợ việc thử nghiệm nhanh các giả thuyết khoa học trong thời gian ngắn Nó kết hợp lệnh Shell Python với giao diện đồ họa tích hợp, cho phép người dùng tùy chỉnh các lệnh và lưu trữ lịch sử phong phú dưới định dạng JSON Bên cạnh đó, IPython còn cung cấp khả năng tính toán song song, giúp nâng cao hiệu suất trong các tác vụ tính toán phức tạp.

Cấu trúc dữ liệu là gì, các kiểu cấu trúc dữ liệu trong python

Các phần tái sử dụng trong chương trình được gọi là hàm Hàm cho phép đặt tên cho một khối câu lệnh, giúp người dùng có thể gọi và thực thi khối lệnh đó ở bất kỳ đâu trong chương trình với số lần không giới hạn.

Hàm trong Python được khai báo bằng từ khóa “def”, theo sau là tên hàm và một cặp dấu ngoặc đơn có thể chứa các tham số Dòng khai báo hàm kết thúc bằng dấu hai chấm, sau đó là khối lệnh thực thi của hàm.

Hình 1.10: Ví dụ về hàm

1.8.2 Các thông số của Hàm (Function Parameters)

Hàm có thể nhận tham số, là các giá trị mà bạn cung cấp để sử dụng cho mục đích cụ thể Các tham số này tương tự như biến ngoại, nhưng giá trị của chúng được xác định khi gọi hàm và gán trong quá trình thực thi Tham số được chỉ định trong cặp dấu ngoặc trong khai báo hàm, phân tách bằng dấu phẩy Khi gọi hàm, bạn cung cấp các giá trị tương ứng với tham số Cần lưu ý rằng các tên trong định nghĩa hàm được gọi là tham số, trong khi các giá trị cung cấp khi gọi hàm được gọi là đối số.

Hình 1.11: Ví dụ hàm Function parameters

1.8.3 Câu lệnh return trong Python

Lệnh return trong lập trình thường được sử dụng để thoát khỏi hàm và trở về vị trí gọi hàm Nó có thể bao gồm một biểu thức được tính toán để trả về giá trị Nếu không có biểu thức hoặc lệnh return trong hàm, hàm sẽ mặc định trả về giá trị None Lệnh return có thể trả về một giá trị cụ thể hoặc đơn giản là không trả về gì cả Khi lệnh return được thực thi, hàm sẽ kết thúc, và cần lưu ý rằng return không phải là lệnh bắt buộc trong thân hàm.

Cú pháp: return [danh_sach_bieu_thuc]

Lệnh return có thể được sử dụng để so sánh hai số x và y nhằm tìm ra số lớn nhất Nếu x bằng y, kết quả sẽ trả về thông báo rằng hai số bằng nhau Nếu x lớn hơn y, lệnh sẽ in ra giá trị của x, ngược lại, nếu y lớn hơn x, kết quả sẽ là giá trị của y.

Hình 1.14: Ví dụ lệnh returnHình 1.12: Kết quả ví dụ hàmFunction parameters

Kết quả: in ra giá trị lớn nhất trong hai số cho trước

Chuỗi đầu tiên ngay sau tiêu đề hàm, được gọi là docstring, là phần giải thích chức năng của hàm Mặc dù không bắt buộc, việc thêm docstring giúp người dùng dễ dàng hiểu được mục đích của hàm mà không cần xem lại định nghĩa Điều này không chỉ hỗ trợ trong việc ghi nhớ chi tiết khi quay lại với code mà còn nâng cao tính rõ ràng và dễ hiểu của chương trình Python cung cấp tính năng docstrings, là công cụ quan trọng để ghi lại và cải thiện khả năng hiểu biết của mã nguồn, cho phép chúng ta in hoặc sử dụng các chuỗi này trong các hàm.

Hình 1.15: Kết quả ví dụ lệnh return

TỔNG QUAN VỀ TRÒ CHƠI RẮN SĂN MỒI

Mô tả đề tài

Trò chơi "Rắn Săn Mồi" là một trong những trò chơi điện tử cổ điển, được yêu thích từ những năm 1970 và hiện vẫn phổ biến trên nhiều nền tảng Bài viết này sẽ khám phá cách xây dựng một phiên bản đặc biệt của trò chơi này bằng ngôn ngữ lập trình Python.

Trong trò chơi Rắn Săn Mồi, người chơi sẽ hóa thân thành một con rắn trong môi trường 2D, với mục tiêu chính là ăn thức ăn xuất hiện ngẫu nhiên, thường dưới dạng hình vuông hoặc hình tròn Mỗi khi rắn ăn mồi, chiều dài của nó sẽ tăng lên, tạo ra thách thức lớn hơn cho người chơi, buộc họ phải khéo léo quản lý chiều dài của rắn để tránh va chạm với chính mình hoặc các biên của màn hình.

Người chơi điều khiển con rắn bằng các phím mũi tên để di chuyển và mục tiêu là ăn thức ăn nhằm tăng điểm số Đồng thời, họ cần tránh va chạm với chính mình và các biên của màn hình Nếu xảy ra va chạm, trò chơi sẽ kết thúc và điểm số của người chơi sẽ được hiển thị.

Trong phiên bản này, chúng tôi đã thêm một số chức năng đặc biệt nhằm làm phong phú và tăng thêm sự thú vị cho trò chơi.

- Điểm Số: Một điểm số sẽ được tính toán dựa trên số lượng mồi đã ăn bởi người chơi.

Mức độ khó của trò chơi sẽ tăng lên khi rắn ăn nhiều mồi hơn, dẫn đến việc rắn di chuyển với tốc độ nhanh hơn.

- Ghi Điểm Tốt Nhất: Sẽ hiển thị và lưu trữ điểm số tốt nhất của người chơi. Quy Luật Trò Chơi

- Rắn sẽ liên tục di chuyển theo hướng mà người chơi chỉ định.

- Mồi xuất hiện ngẫu nhiên trên màn hình và biến mất sau khi được ăn.

- Nếu rắn va chạm vào mình hoặc vào biên của màn hình, trò chơi kết thúc.

- Mỗi khi rắn ăn một mồi, điểm số tăng lên và rắn dài ra.

- Mục tiêu cuối cùng là ăn càng nhiều mồi càng tốt và duy trì trò chơi trong thời gian dài nhất.

Trò chơi "Rắn Săn Mồi" là một ví dụ xuất sắc về lập trình trò chơi đơn giản bằng Python Bài viết này sẽ hướng dẫn chi tiết từng bước để phát triển trò chơi, bao gồm việc tạo môi trường, di chuyển rắn, quản lý mồi, và giải quyết những thách thức thú vị cho lập trình viên trong quá trình phát triển.

Phân tích yêu cầu

- Di Chuyển Rắn: Người chơi có thể điều khiển con rắn di chuyển lên, xuống, trái hoặc phải sử dụng bàn phím hoặc các phím điều hướng.

Trong trò chơi Ăn Mồi, người chơi sẽ thấy các mồi hình vuông hoặc hình tròn xuất hiện ngẫu nhiên trên màn hình Mục tiêu của trò chơi là ăn những mồi này để tăng điểm số và kéo dài chiều dài của con rắn.

- Kiểm Tra Va Chạm: Trò chơi cần kiểm tra xem con rắn có va chạm vào bản thân mình không Nếu có va chạm, trò chơi kết thúc.

- Điểm Số: Trò chơi cần theo dõi và hiển thị điểm số của người chơi dựa trên số lượng mồi đã ăn.

- Mức Độ Khó: Cung cấp mức độ khó khác nhau với tốc độ di chuyển tăng dần.

2.3.2 Yêu cầu phi chức năng

- Hiệu Năng: Trò chơi cần hoạt động mượt mà và không gây trễ hoặc giật lag.

- Giao Diện Người Dùng: Giao diện trò chơi cần thiết kế dễ sử dụng và thân thiện với người chơi.

- Thiết Kế Hấp Dẫn: Trò chơi cần có một thiết kế hấp dẫn để thu hút và giữ chân người chơi.

- Hướng Dẫn Sử Dụng: Cung cấp hướng dẫn hoặc hướng dẫn sử dụng để người chơi có thể nắm bắt cách chơi.

- Tương Thích: Đảm bảo rằng trò chơi tương thích với các phiên bản Python và các thư viện cần thiết.

LẬP TRÌNH TRÒ CHƠI RẮN SĂN MỒI

Thêm các thư viện cần được sử dụng cho trò chơi

Pygame là một thư viện Python mạnh mẽ được sử dụng để phát triển trò chơi và ứng dụng đa phương tiện Thư viện này cung cấp các công cụ và chức năng cần thiết cho đồ họa, âm thanh và xử lý sự kiện, giúp tạo ra các ứng dụng trực quan hấp dẫn Đoạn mã trên bao gồm việc nhập thư viện pygame cùng với một số thư viện Python khác, tạo nền tảng cho việc phát triển các trò chơi.

- import pygame: cho phép bạn sử dụng các chức năng và lớp được cung cấp bởi thư viện pygame.

- import sys: import thư viện sys cho việc quản lý các thao tác hệ thống.

Thư viện random trong Python cho phép tạo số ngẫu nhiên, rất hữu ích trong việc xác định vị trí các phần tử hoặc sự kiện ngẫu nhiên trong các trò chơi.

Thiết lập cửa sổ của trò chơi

GRID_WIDTH = SCREEN_WIDTH / GRIDSIZE

GRID_HEIGHT = SCREEN_HEIGHT / GRIDSIZE

Đoạn code bạn cung cấp định nghĩa các hằng số và biến cần thiết cho trò chơi rắn săn mồi cổ điển Hãy cùng phân tích chi tiết từng phần của mã nguồn này.

`SCREEN_WIDTH` và `SCREEN_HEIGHT` là hai hằng số quan trọng, xác định kích thước của màn hình trò chơi, với kích thước cụ thể là 480x480 điểm ảnh.

`GRIDSIZE` là kích thước mỗi ô trong lưới trò chơi, đặc biệt quan trọng trong trò chơi rắn Kích thước này xác định kích thước của từng ô, và trong trường hợp này, mỗi ô có kích thước 10x10 điểm ảnh.

`GRID_WIDTH` và `GRID_HEIGHT` xác định số ô trong lưới trò chơi theo chiều rộng và chiều cao Chúng được tính bằng cách chia kích thước màn hình cho `GRIDSIZE` Với màn hình 480x480 chia thành các ô 10x10, ta có 48 ô theo chiều rộng và 48 ô theo chiều cao.

Trong trò chơi rắn, các hằng số `UP`, `DOWN`, `LEFT`, và `RIGHT` đại diện cho các hướng di chuyển của nhân vật Người chơi có thể di chuyển lên, xuống, trái hoặc phải, với các hằng số này tương ứng với các vectơ hướng Di chuyển được thể hiện dưới dạng tọa độ (delta_x, delta_y) trong không gian 2D, ví dụ `(0, -1)` cho hướng lên và `(1, 0)` cho hướng sang phải.

Tạo các ô caro trên cửa sổ

0 0 for y in range(0 , int( GRID_HEIGHT )):

0 0 0 0 for x in range(0 , int( GRID_WIDTH )):

0 0 0 0 0 0 0 0 r = pygame Rect ((x * GRIDSIZE , y * GRIDSIZE ), ( GRIDSIZE , GRIDSIZE))

0 0 0 0 0 0 0 0 rr = pygame Rect ((x * GRIDSIZE , y * GRIDSIZE ), ( GRIDSIZE , GRIDSIZE))

Hàm `drawGrid` trong Pygame được sử dụng để vẽ lưới trên màn hình của trò chơi rắn, với đoạn mã `pygame.draw.rect(surface, (255, 255, 255), rr)` để xác định màu sắc và vị trí của các ô lưới.

1 `def drawGrid(surface):`: Đây là khai báo hàm `drawGrid`, với đối số `surface`.

`surface` thường là một đối tượng màn hình pygame mà bạn muốn vẽ lưới lên.

- `for y in range(0, int(GRID_HEIGHT)):`: Vòng lặp chạy qua các giá trị từ

0 đến `GRID_HEIGHT - 1` Trong trường hợp này, với `GRID_HEIGHT` bằng 48 (như đã tính toán trong đoạn mã trước), vòng lặp này sẽ chạy từ 0 đến 47.

Trong mỗi vòng lặp `y`, có một vòng lặp bên trong chạy qua các giá trị từ 0 đến `GRID_WIDTH - 1`, tương ứng với việc lặp từ 0 đến 47.

3 Điều kiện kiểm tra `(x + y) % 2 == 0` kiểm tra xem tổng của `x` và `y` có chia hết cho 2 hay không Nếu kết quả là `True`, nghĩa là `(x + y)` là một số chẵn, điều này xảy ra khi chúng ta muốn vẽ ô lưới với màu khác nhau để tạo hiệu ứng ô vuông.

4 Nếu `(x + y) % 2 == 0`, chúng ta tạo một hình chữ nhật (ô vuông) màu trắng (`(255, 255, 255)`) tại vị trí `(x * GRIDSIZE, y * GRIDSIZE)` với kích thước

`(GRIDSIZE, GRIDSIZE)` bằng cách sử dụng `pygame.Rect` và vẽ nó trên màn hình `surface` bằng `pygame.draw.rect`.

5 Nếu `(x + y) % 2 != 0`, nghĩa là `(x + y)` là một số lẻ, chúng ta tạo một hình chữ nhật khác với cùng màu trắng và cùng kích thước như trên.

Kết quả là, hàm `drawGrid` sẽ tạo ra một lưới ô vuông đan xen màu trắng được vẽ lên màn hình pygame, tạo hiệu ứng lưới ô vuông.

Tạo con rắn

0 0 0 0 self positions [(( = SCREEN_WIDTH ), ( / 2 SCREEN_HEIGHT ))] / 2

0 0 0 0 self direction = random choice ([ UP , DOWN , LEFT , RIGHT ])

0 0 def get_head_position( self ):

0 0 0 0 if self length > 1 and ( point[0 ] * -1 , point[1 ] * -1 ) == self direction :

0 0 0 0 cur = self get_head_position ()

0 0 0 0 if len( self positions ) > 2 and new in self positions [ :]: 2

0 0 0 0 0 0 if len( self positions ) > self length :

0 0 0 0 self positions [(( = SCREEN_WIDTH ), ( / 2 SCREEN_HEIGHT ))] / 2

0 0 0 0 self direction = random choice ([ UP , DOWN , LEFT , RIGHT ])

0 0 0 0 0 0 pygame draw rect ( surface , self color , ) r

0 0 0 0 for event in pygame event get ():

0 0 0 0 0 0 if event type == pygame QUIT :

0 0 0 0 0 0 elif event type == pygame KEYDOWN :

0 0 0 0 0 0 0 0 if event key == pygame K_UP :

0 0 0 0 0 0 0 0 elif event key == pygame K_DOWN :

0 0 0 0 0 0 0 0 elif event key == pygame K_LEFT :

0 0 0 0 0 0 0 0 elif event key == pygame K_RIGHT :

Lớp `Snake` được định nghĩa để đại diện cho đối tượng rắn trong trò chơi Các phần quan trọng trong lớp này bao gồm các thuộc tính và phương thức cần thiết để điều khiển rắn, quản lý vị trí và trạng thái của nó trong trò chơi.

Phương thức khởi tạo ` init ` của lớp `Snake` xác định các thuộc tính ban đầu của đối tượng `Snake` Một số thuộc tính này bao gồm các thông tin cơ bản cần thiết cho việc khởi tạo đối tượng.

- - `self.length`: Độ dài ban đầu của con rắn, được đặt là 1.

- - `self.positions`: Danh sách các vị trí (x, y) của các phần của rắn Ban đầu, rắn được đặt ở giữa màn hình.

- - `self.direction`: Hướng di chuyển ban đầu của rắn, được chọn ngẫu nhiên từ UP, DOWN, LEFT, RIGHT.

- - `self.color`: Màu sắc của rắn, được đặt là (0, 0, 0) (màu đen).

2 `def get_head_position(self):`: Phương thức này trả về vị trí của đầu của con rắn, nằm ở vị trí `self.positions[0]`.

Phương thức `def turn(self, point):` cho phép rắn thay đổi hướng di chuyển Nếu rắn có chiều dài lớn hơn 1 và hướng mới (được biểu diễn bởi `point`) ngược với hướng hiện tại, thì việc thay đổi hướng sẽ không được phép Ngược lại, rắn sẽ thay đổi hướng di chuyển.

Phương thức `move(self)` điều khiển chuyển động của con rắn bằng cách tính toán vị trí mới cho đầu rắn dựa trên hướng di chuyển hiện tại Nó cập nhật danh sách vị trí của rắn và nếu đầu rắn chạm vào cạnh màn hình, nó sẽ xuất hiện ở phía đối diện Trong trường hợp rắn va phải chính nó, phương thức này sẽ gọi `reset()` để khởi tạo lại con rắn.

Phương thức `reset(self):` có chức năng thiết lập lại trạng thái ban đầu của rắn sau khi thua cuộc, bao gồm việc phục hồi độ dài, vị trí ban đầu và hướng di chuyển.

Phương thức `draw(self, surface)` chịu trách nhiệm vẽ hình dạng của rắn lên màn hình bằng cách lặp qua danh sách vị trí của nó Mỗi phần của rắn được thể hiện dưới dạng các hình chữ nhật (`pygame.Rect`) màu đen, tạo nên hình dáng hoàn chỉnh của rắn.

Phương thức `handle_keys(self)` xử lý sự kiện từ bàn phím, cho phép người chơi điều khiển hướng di chuyển của rắn bằng các phím mũi tên (lên, xuống, trái, phải) và thoát khỏi trò chơi khi nhấn phím thoát.

Lớp `Snake` này giúp quản lý và thực hiện các chức năng cơ bản của con rắn trong trò chơi rắn săn mồi.

Tạo mồi cho trò chơi

0 0 0 0 0 0 random randint ( 0 , int(GRID_WIDTH ) ) - 1 * GRIDSIZE ,

0 0 0 0 0 0 random randint ( 0 , int(GRID_HEIGHT ) ) - 1 * GRIDSIZE ,

0 0 0 0 r = pygame Rect (( self position [ 0 ], self position [1 ]), ( GRIDSIZE , GRIDSIZE))

0 0 0 0 pygame draw rect ( surface , self color , ) r

Lớp `Food` đại diện cho thức ăn (hoặc mồi) trong trò chơi Dưới đây là mô tả các phần quan trọng trong lớp này:

Phương thức khởi tạo ` init ` của lớp `Food` thiết lập các thuộc tính ban đầu cho đối tượng `Food`, bao gồm nhiều thuộc tính quan trọng.

- `self.position`: Vị trí ban đầu của thức ăn, được đặt là (0, 0).

- `self.color`: Màu sắc của thức ăn, được đặt là (233, 163, 49) (một tông màu cam).

Phương thức `randomize_position()` được gọi ngay sau để xác định một vị trí ngẫu nhiên ban đầu cho thức ăn.

Phương thức `randomize_position(self)` được sử dụng để tạo vị trí ngẫu nhiên cho thức ăn trong trò chơi Vị trí này được xác định trong phạm vi của lưới trò chơi, dựa trên các tham số `GRID_WIDTH` và `GRID_HEIGHT` Để chọn vị trí ngẫu nhiên, phương thức này sử dụng hàm `random.randint()`, đảm bảo rằng vị trí mới phù hợp với kích thước của lưới và kích thước ô vuông.

Phương thức `draw(self, surface)` chịu trách nhiệm vẽ thức ăn lên màn hình bằng cách sử dụng một hình chữ nhật màu cam để biểu thị thức ăn, kết hợp với một viền màu xanh lam xung quanh, tạo nên hình dạng hình chữ nhật với viền xanh lam và phần bên trong màu cam.

Lớp `Food` chịu trách nhiệm quản lý và hiển thị thức ăn trên màn hình trò chơi Khi rắn tiêu thụ thức ăn, phương thức `randomize_position()` sẽ được gọi để di chuyển thức ăn đến một vị trí ngẫu nhiên mới.

Tạo hàm chính – nơi những quy định của game được cấu hình

0 0 screen = pygame display set_mode (( SCREEN_WIDTH , SCREEN_HEIGHT ), , 0 32 )

0 0 surface = pygame Surface ( screen get_size ())

0 0 myfont = pygame font SysFont ( "monospace" , 16 )

0 0 0 0 if snake.get_head_position () == food position :

0 0 0 0 text = myfont render ( "Score {0}" format ( score ), , ( , , )) 1 0 0 0

Hàm `main()` trong đoạn code trên định nghĩa các phần chính của trò chơi, bao gồm việc cập nhật hiển thị bằng `pygame.display.update()` Các thành phần quan trọng trong hàm này sẽ được mô tả chi tiết để người đọc hiểu rõ hơn về cách hoạt động của trò chơi.

1 `pygame.init()`: Dòng này khởi tạo thư viện Pygame để sử dụng trong trò chơi.

2 `clock = pygame.time.Clock()`: Tạo một đối tượng đồng hồ (`Clock`) để kiểm soát tốc độ khung hình của trò chơi.

3 `screen = pygame.display.set_mode((SCREEN_WIDTH, SCREEN_HEIGHT), 0, 32)`: Tạo cửa sổ trò chơi có kích thước được xác định bởi các hằng số

`SCREEN_WIDTH` và `SCREEN_HEIGHT`.

Dòng lệnh `surface = pygame.Surface(screen.get_size())` tạo ra một bề mặt có kích thước tương đương với cửa sổ trò chơi Bề mặt này sẽ được sử dụng để vẽ các yếu tố trong trò chơi trước khi hiển thị chúng lên màn hình.

5 `snake = Snake()`: Tạo một đối tượng rắn (Snake) bằng cách gọi hàm khởi tạo của lớp `Snake`.

6 `food = Food()`: Tạo một đối tượng thức ăn (Food) bằng cách gọi hàm khởi tạo của lớp `Food`.

7 `myfont = pygame.font.SysFont("monospace", 16)`: Tạo một đối tượng font cho việc hiển thị điểm số lên màn hình Font này có kiểu "monospace" với kích thước 16.

8 `score = 0`: Khởi tạo biến `score` để lưu trữ điểm số của người chơi.

9 Vào vòng lặp `while True`, trò chơi bắt đầu Dưới đây là các bước trong vòng lặp:

- `clock.tick(10)`: Điều này giới hạn trò chơi chạy với tốc độ 10 khung hình mỗi giây

- `snake.handle_keys()`: Gọi phương thức `handle_keys()` của đối tượng rắn (Snake) để xử lý sự kiện từ bàn phím (người chơi di chuyển rắn)

- `drawGrid(surface)`: Vẽ lưới trò chơi lên bề mặt (surface) trước khi vẽ các đối tượng khác

- `snake.move()`: Di chuyển rắn

Kiểm tra xem đầu rắn có nằm trùng với vị trí thức ăn hay không Nếu có, hãy tăng độ dài của rắn, nâng điểm số và di chuyển thức ăn đến một vị trí mới.

- `snake.draw(surface)`: Vẽ rắn lên bề mặt

- `food.draw(surface)`: Vẽ thức ăn lên bề mặt

- `screen.blit(surface, (0, 0))`: Vẽ bề mặt lên màn hình chính của trò chơi

- `text = myfont.render("Score {0}".format(score), 1, (0, 0, 0))`: Tạo văn bản hiển thị điểm số dựa trên giá trị của biến `score`

- `screen.blit(text, (5, 10))`: Vẽ văn bản điểm số lên màn hình.

- `pygame.display.update()`: Cập nhật màn hình để hiển thị những thay đổi vừa thực hiện.

Vòng lặp này được thực hiện liên tục, tạo nên sự cập nhật và tương tác của trò chơi.

Tạo hàm theo dõi thời gian

The provided code initializes Pygame, creates a clock to manage the frame rate, and sets up the display window with specified dimensions It also generates a surface that matches the size of the screen and converts it for optimal performance.

Để bắt đầu sử dụng thư viện Pygame, bạn cần thực hiện lệnh `pygame.init()` Lệnh này khởi tạo Pygame và chuẩn bị môi trường cho việc vẽ, xử lý sự kiện và các tính năng khác trong trò chơi, đảm bảo rằng bạn có thể sử dụng đầy đủ các chức năng của thư viện.

Dòng lệnh `clock = pygame.time.Clock()` tạo ra một đối tượng đồng hồ trong Pygame, giúp kiểm soát tốc độ khung hình của trò chơi Đối tượng này cho phép bạn điều chỉnh tốc độ vòng lặp trò chơi, đảm bảo trò chơi hoạt động với tốc độ ổn định, cụ thể là 10 khung hình mỗi giây.

3 `screen = pygame.display.set_mode((SCREEN_WIDTH, SCREEN_HEIGHT), 0, 32)`: Đây là dòng tạo cửa sổ trò chơi với kích thước được xác định bởi

`SCREEN_WIDTH` và `SCREEN_HEIGHT` là các tham số quan trọng trong việc xác định kích thước cửa sổ Tham số 0 cho biết rằng cửa sổ không sử dụng các chế độ đặc biệt như chế độ toàn màn hình, trong khi tham số 32 chỉ ra rằng cửa sổ là 32-bit, cho phép mỗi pixel hiển thị nhiều màu sắc phong phú.

Dòng lệnh `surface = pygame.Surface(screen.get_size())` tạo ra một bề mặt có kích thước giống như cửa sổ trò chơi, được sử dụng để vẽ các đối tượng trò chơi trước khi hiển thị lên màn hình Phương pháp này giúp cải thiện hiệu suất bằng cách tránh việc vẽ trực tiếp các phần tử lên màn hình.

Hàm `convert()` được gọi trên bề mặt (surface) để tối ưu hóa hiệu suất vẽ trong trò chơi Bằng cách chuyển đổi bề mặt sang định dạng tương thích với màn hình, hàm này giúp giảm thiểu quá trình chuyển đổi màu sắc khi vẽ, từ đó nâng cao tốc độ vẽ và cải thiện trải nghiệm người chơi.

Khai báo các đối tượng cần có của trò chơi

drawGrid( surface ) snake = Snake() food = Food() myfont = pygame font Font ( None, 36 ) score = 0

1 `drawGrid(surface)`: Đây là một lời gọi hàm để vẽ lưới trò chơi trên bề mặt

`surface` Hàm này có nhiệm vụ vẽ lưới ô vuông lên màn hình, có vẻ nó sẽ làm lưới nền của trò chơi.

2 `snake = Snake()`: Dòng này tạo một đối tượng "rắn" (Snake) và gán nó vào biến

`snake` Đây là khởi tạo của rắn trong trò chơi Đối tượng rắn được tạo dựa trên lớp (class) `Snake` bạn đã định nghĩa trước đó.

Dòng lệnh `food = Food()` tạo ra một đối tượng "mồi" từ lớp `Food` mà bạn đã định nghĩa trước đó và gán đối tượng này vào biến `food`.

Dòng lệnh `myfont = pygame.font.Font(None, 36)` trong Pygame tạo ra một đối tượng phông chữ với kích thước ký tự là 36, cho phép sử dụng để vẽ chữ lên màn hình Đối tượng phông chữ này có thể được áp dụng để tạo các văn bản với kích thước và kiểu chữ cụ thể trong các ứng dụng đồ họa.

Dòng lệnh `score = 0` khởi tạo biến `score` với giá trị ban đầu là 0, nhằm theo dõi điểm số của người chơi trong trò chơi và hiển thị thông tin này trên màn hình.

Vòng lặp chính của game

0 0 if snake.get_head_position () == food position :

0 0 text = myfont render ( "Score {0}" format ( score ), , ( , , )) 1 0 0 0

0 0 pygame display update () Đoạn code này tạo một vòng lặp chính cho trò chơi:

Dòng lệnh `clock.tick(10)` trong mã nguồn giới hạn tốc độ của vòng lặp chính, đảm bảo rằng vòng lặp chỉ chạy tối đa 10 lần mỗi giây, từ đó giúp kiểm soát tốc độ của trò chơi một cách hiệu quả.

Hàm `handle_keys` của đối tượng `snake` được sử dụng để xử lý các sự kiện từ bàn phím, cho phép người chơi điều khiển hướng di chuyển của rắn một cách linh hoạt.

3 `drawGrid(surface)`: Hàm này vẽ lưới trò chơi lên màn hình Nó thường được gọi ở mỗi vòng lặp để vẽ lại lưới trò chơi.

4 `snake.move()`: Hàm này di chuyển rắn trên màn hình dựa trên hướng mà người chơi đã chọn và tạo thêm đầu mới cho rắn.

Dòng lệnh `if snake.get_head_position() == food.position` kiểm tra xem đầu của rắn có trùng với vị trí của mồi hay không Khi rắn ăn được mồi, chiều dài của nó sẽ tăng thêm 1, điểm số cũng được nâng lên, và mồi sẽ được đặt lại ở một vị trí ngẫu nhiên.

Hàm `snake.draw(surface)` chịu trách nhiệm vẽ hình ảnh của rắn lên màn hình, dựa trên vị trí hiện tại của từng phần của nó Mỗi phần của rắn sẽ được tạo hình và hiển thị trên bề mặt màn hình.

7 `food.draw(surface)`: Hàm này vẽ mồi lên màn hình tại vị trí hiện tại của mồi.

8 `screen.blit(surface, (0, 0))`: Dòng này sao chép nội dung của bề mặt `surface` lên màn hình `screen`.

The line of code `text = myfont.render("Score {0}".format(score), 1, (0, 0, 0))` generates a text display of the player's score using the `score` variable, with the text rendered in black color `(0, 0, 0)`.

10 `screen.blit(text, (5, 10))`: Dòng này vẽ dòng văn bản lên màn hình tại vị trí (5,

11 `pygame.display.update()`: Dòng này cập nhật màn hình, hiển thị những thay đổi đã được thực hiện trong vòng lặp trò chơi lên màn hình.

Phần chính của trò chơi

clock.tick( 10 ) if snake.get_head_position() == food.position:

0 0 food.randomize_position() snake.draw(surface) food.draw(surface) screen.blit(surface, ( , )) 0 0 text myfont.render( = "Score {0}" format(score), , ( , , )) 1 0 0 0 screen.blit(text, ( , 5 10 )) pygame display update() main()

1 `clock.tick(10)`: Dòng này đảm bảo rằng trò chơi chạy tối đa 10 lần mỗi giây.

Nó tạo một hạn chế về tốc độ của trò chơi.

Câu lệnh `if snake.get_head_position() == food.position:` kiểm tra xem đầu của con rắn có trùng với vị trí của mồi hay không Nếu điều kiện này đúng, con rắn đã ăn mồi, dẫn đến việc chiều dài của con rắn (`snake.length`) tăng thêm 1 và điểm số (`score`) cũng được nâng cao Sau đó, mồi sẽ được đặt lại ở một vị trí ngẫu nhiên.

3 `snake.draw(surface)`: Hàm này vẽ con rắn lên màn hình.

4 `food.draw(surface)`: Hàm này vẽ mồi lên màn hình.

5 `screen.blit(surface, (0, 0))`: Dòng này sao chép nội dung của bề mặt (`surface`) lên màn hình (`screen`) Điều này giúp hiển thị rắn và mồi trên màn hình.

Dòng mã `text = myfont.render("Score {0}".format(score), 1, (0, 0, 0))` tạo ra một văn bản hiển thị điểm số của người chơi, được đặt ở góc trái màn hình với màu đen.

7 `screen.blit(text, (5, 10))`: Dòng này vẽ dòng văn bản lên màn hình.

8 `pygame.display.update()`: Dòng này cập nhật màn hình để hiển thị những thay đổi đã xảy ra trong vòng lặp trò chơi.

Trò chơi sau khi chạy

Hình 3.16: Giao diện của trò chơi rắn săn mồi

Ngày đăng: 22/01/2025, 14:49

TRÍCH ĐOẠN

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

TÀI LIỆU LIÊN QUAN

w