Mục lục:
2025 Tác giả: John Day | [email protected]. Sửa đổi lần cuối: 2025-01-23 15:14
Tôi rất vui vì bạn đã tham gia lại với tôi! Điều này có nghĩa là Wumpus vẫn chưa ăn thịt bạn. Tốt!
Đối với những bạn chưa quen thuộc, đây là tập hợp các hướng dẫn mà tôi đang thực hiện để giúp người em họ góa bụa đáng yêu của tôi với dự án cấp cao của cô ấy. Những hướng dẫn này nhằm mục đích tham khảo những gì bạn có thể làm với một số tính năng lập trình của Twine và Sugarcube. Nếu bạn muốn làm theo, bạn có thể tìm thấy hướng dẫn đầu tiên tại đây.
Trong hướng dẫn cuối cùng, tôi đã xây dựng một nhóm nhỏ các phòng mà người chơi có thể khám phá. Tôi đã thêm một đối tượng Wumpus và tạo một số mã phòng chung để thay đổi những gì được hiển thị trong mỗi phòng tùy thuộc vào vị trí của Wumpus.
Bước 1: Tạo trình phát của bạn
Bước này rất đơn giản. Về cơ bản, tôi chỉ đang sử dụng cùng một mã với $ wumpus của mình, nhưng thay vào đó là một biến $ player.
Bước 2: Mã phòng mới
Đã thay đổi mã phòng chung của bạn để giá trị của $ player là phòng hiện tại. Sau đó, so sánh $ wumpus với $ player thay vì phòng hiện tại.
Đây là một thay đổi nhỏ và không hoàn toàn cần thiết, nhưng tôi muốn giữ cho mã của mình có tổ chức.
Bước 3: Tạo liên kết từ một biến
Cuối cùng, muốn thay thế liên kết trong phòng bắt đầu của tôi thành liên kết thay đổi dựa trên giá trị của $ player. Điều này có thể được thực hiện với hàm "" trong Sugarcube. Bạn có thể đọc thêm về điều đó trong trang tài liệu của Sugarcube.
Chuỗi đầu tiên sau lệnh của chúng tôi là cụm từ sẽ xuất hiện trong đoạn văn của chúng tôi. Thứ hai là tên của đoạn văn mà chúng ta muốn liên kết đến. Tôi đang sử dụng "Hunt the Wumpus!" như cụm từ của tôi, nhưng chúng tôi có thể sử dụng biến của chúng tôi ở đó thay thế nếu chúng tôi muốn người chơi biết trước họ đang đi đâu, như thế này:
Bước 4: Kiểm tra
Khi bạn kiểm tra mã của mình, bạn sẽ thấy rằng liên kết của bạn đã được thay thế bằng bất kỳ cụm từ nào bạn đã viết trước đó. Nhấp vào nó sẽ đưa bạn đến một phòng ngẫu nhiên trong trò chơi của bạn.
Thật không may, điều này cũng có thể đưa bạn đến thẳng phòng Wumpus! Điều đó không quan trọng ngay bây giờ, nhưng trong một trò chơi thực sự sẽ là một trò chơi kết thúc ngay lập tức. Chúng tôi cần phải khắc phục điều đó.
Bước 5: Thêm danh sách phòng
Đầu tiên, chúng ta sẽ tạo một danh sách phòng để giúp quản lý phòng dễ dàng hơn. Bằng cách khai báo mảng này, chúng ta có thể sử dụng nó để đặt các giá trị $ player và $ wumpus mà không cần lặp lại mã. Nó cũng có một lợi thế khác mà chúng ta sẽ khám phá tiếp theo.
Thử nghiệm với mã này sẽ hoạt động giống như trước đây.
Bước 6: Loại bỏ phòng
Tôi đã thêm một dòng mã vào mã từ trước (được đánh dấu).
Mảng trong Sugarcube có một chức năng tích hợp cho phép bạn xóa các phần tử khỏi chúng theo tên. Trong trường hợp này, sau khi chỉ định cho $ wumpus một phòng, chúng ta có thể xóa phòng đó khỏi danh sách phòng $ của mình. Tuy nhiên, chức năng này khá phức tạp. Nó sẽ không hoạt động trừ khi đầu ra của hàm được gán hoặc sử dụng theo một cách nào đó. Để giải quyết vấn đề đó, tôi đã tạo biến tạm thời _temp.
Trong Sugarcube, các biến tạm thời bắt đầu bằng dấu gạch dưới (_) thay vì đô la ($). Chúng hữu ích vì chúng sẽ bị xóa sau khi đoạn văn được chạy, vì vậy bạn không phải lo lắng về các tên biến trùng lặp.
Tôi cũng đang xóa phòng chơi $ khỏi danh sách phòng của $, như một điều tất nhiên.
Bước 7: Kiểm tra
Mặc dù chúng tôi có thể chạy mã như hiện tại, nhưng đó không phải là một bài kiểm tra kỹ lưỡng. Nếu chúng tôi chạy mã và thấy rằng $ player và $ wumpus được chỉ định vào các phòng khác nhau, chúng tôi không biết đó là do mã hoạt động hay chỉ là do may rủi. Chắc chắn, chúng tôi có thể chạy mã nhiều lần và giả sử rằng nếu nó không bao giờ gán cho cả hai cùng một phòng thì điều đó sẽ không bao giờ xảy ra, nhưng điều đó sẽ mất vĩnh viễn và nó vẫn không phải là đảm bảo 100% rằng điều đó không bao giờ có thể xảy ra.
Thay vào đó, chúng ta cần một cách để kiểm tra.
Tôi đã thêm ba dòng vào đầu đoạn giới thiệu sẽ cho chúng ta thấy giá trị của các biến $ wumpus, $ player và $ roomlist. Do cách thiết lập mã của mình, chúng tôi biết rằng phòng $ wumpus và phòng $ player nên bị loại khỏi danh sách phòng $.
Khi chúng tôi chạy mã này, chúng tôi có thể kiểm tra để chắc chắn rằng đó là trường hợp.
Bước 8: Kỳ lạ với Sugarcube và các đối tượng
Các đối tượng hình khối hơi kỳ quặc. Hãy để tôi chứng minh điều này.
Trong khi tôi đang xây dựng dự án này ban đầu, tôi muốn lưu $ roomlist của mình vào biến $ saveroom trước khi bắt đầu xóa các phòng khỏi đó. Tôi nghĩ rằng nó sẽ có ích sau này.
Khi tôi nhận được một số hành vi kỳ lạ từ mã này, tôi đã thêm một dòng khác vào trang giới thiệu của mình để cho phép tôi xem biến $ saveroom của mình (hình thứ hai).
Tôi đã bị sốc khi thấy rằng các thành phần tôi đã xóa khỏi $ roomlist cũng đã bị xóa khỏi danh sách đã lưu của tôi! Bạn có thể thấy điều này đang hoạt động trong hình thứ ba.
Điều này là do khi bạn sao chép một mảng như thế này, bạn không thực sự yêu cầu Twine sao chép mảng, bạn đang nói với Twine rằng hai biến này là cùng một mảng. Khi bạn làm điều gì đó với mảng bằng cách sử dụng một biến, nó sẽ thay đổi cùng một mảng mà biến kia đang xem!
Chúng ta có thể sửa lỗi này bằng hàm clone ().
Bước 9: Hàm Clone ()
Bạn có thể đọc về hàm clone () trên trang tài liệu của Sugarcube.
Một bản sao "nông cạn" là những gì chúng tôi đã làm trước đây. Thay vì tạo một bản sao hoàn chỉnh của toàn bộ mảng, nó chỉ giả sử rằng biến của bạn đang hoạt động với cùng một mảng. Thay vì một bản sao cạn, clone () thực hiện một bản sao "sâu", hoạt động như bạn mong đợi. Mỗi phần tử của mảng được sao chép vào một mảng mới và hoàn toàn tách biệt với phần gốc.
Nếu chúng tôi kiểm tra mã mới này, chúng tôi thấy nó hoạt động như mong đợi.
Tất nhiên, không quan trọng bạn có giữ $ roomlist hay không. Đối với mục đích của dự án của tôi, tôi sẽ không. Tất cả chỉ để chứng minh các bản sao sâu và nông.
Bước 10: Đó là ngay bây giờ
Chúng tôi đã thêm mã cho phép người chơi của chúng tôi bắt đầu trong một phòng ngẫu nhiên. Ngoài ra, chúng tôi đã loại bỏ một lỗi trong đó người chơi sẽ bắt đầu trong cùng một phòng với Wumpus.
Chúng ta đã tìm hiểu về cách tạo liên kết từ các biến và cách Sugarcube xử lý sao chép mảng.
Mọi thứ đang tăng lên, nhưng chúng tôi chỉ mới bắt đầu!
Đi săn vui nhé!
Đề xuất:
Cảm biến thời tiết nhỏ gọn với liên kết dữ liệu GPRS (thẻ SIM): 4 bước
Cảm biến thời tiết nhỏ gọn với GPRS (Thẻ SIM) Liên kết dữ liệu: Tóm tắt dự án Đây là cảm biến thời tiết chạy bằng pin dựa trên cảm biến nhiệt độ / áp suất / độ ẩm BME280 và MCU ATMega328P. Nó chạy bằng hai pin lithium thionyl AA 3,6 V. Nó có mức tiêu thụ khi ngủ cực thấp là 6 µA. Nó gửi dữ liệu
Kết nối và trang bị thêm các giải pháp được kết nối của bạn với Hologram Nova và Ubidots: 9 bước
Kết nối và trang bị thêm các giải pháp được kết nối của bạn với Hologram Nova và Ubidots: Sử dụng Hologram Nova của bạn để trang bị thêm cơ sở hạ tầng. Thiết lập Hologram Nova bằng Raspberry Pi để gửi dữ liệu (nhiệt độ) đến Ubidots. Trong hướng dẫn sau, Ubidots sẽ trình bày cách thiết lập Hologram Nova bằng Raspberry Pi và hiển thị
Phòng Chung trong Twine Với Sugarcube: 11 bước
Phòng Chung trong Twine Với Sugarcube: Xin chào và chào mừng bạn đến với hướng dẫn của tôi về cách xây dựng Wumpus Hunt trong Twine với Sugarcube! Twine là một công cụ rất đơn giản, được thiết kế để tạo các trò chơi phiêu lưu văn bản! Cô em họ yêu thích của tôi đã chọn làm một trò chơi với Twine cho dự án cấp cao của cô ấy, một
Các nút radio liên kết điện tử (* cải tiến! *): 3 bước
Các nút radio liên kết điện tử (* cải tiến! *): Thuật ngữ " nút radio " đến từ thiết kế của những chiếc radio ô tô cũ, nơi sẽ có một số nút nhấn được điều chỉnh trước cho các kênh khác nhau và được khóa vào nhau một cách cơ học để mỗi lần chỉ có thể nhấn một nút
Giao diện liên kết máy tính Yaesu FT-100 cho các chế độ kỹ thuật số: 3 bước
Giao diện liên kết PC Yaesu FT-100 cho các chế độ kỹ thuật số: Sau đây tôi trình bày các hướng dẫn để xây dựng giao diện liên kết PC cho Yaesu FT-100. Giao diện này cho phép bạn truyền và nhận tín hiệu âm thanh từ card âm thanh để vận hành các chế độ kỹ thuật số HAM (FT8, PSK31, v.v.). Thông tin bổ sung có sẵn