Mục lục:

Liên kết từ các biến trong Twine với Sugarcube: 10 bước
Liên kết từ các biến trong Twine với Sugarcube: 10 bước

Video: Liên kết từ các biến trong Twine với Sugarcube: 10 bước

Video: Liên kết từ các biến trong Twine với Sugarcube: 10 bước
Video: tarot: chọn tụ bài: liên kết quan trọng trong 2021 2024, Tháng bảy
Anonim
Liên kết từ các biến trong Twine với Sugarcube
Liên kết từ các biến trong Twine với Sugarcube

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

Tạo trình phát của bạn
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

Mã phòng mới
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

Tạo liên kết từ một biến
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

Thử nghiệm
Thử nghiệm
Thử nghiệm
Thử nghiệm

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

Thêm danh sách phòng
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

Loại bỏ phòng
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

Thử nghiệm
Thử nghiệm
Thử nghiệm
Thử nghiệm

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

Những điều kỳ lạ với Sugarcube và các đối tượng
Những điều kỳ lạ với Sugarcube và các đối tượng
Những điều kỳ lạ với Sugarcube và các đối tượng
Những điều kỳ lạ với Sugarcube và các đối tượng
Những điều kỳ lạ với Sugarcube và các đối tượng
Những điều 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 ()

Hàm Clone ()
Hàm Clone ()
Hàm Clone ()
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ờ

Đó là Nó cho Bây giờ!
Đó là Nó cho 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: