Mục lục:

Trò chơi cạnh tranh 2 người chơi VS tính thời gian: 4 bước
Trò chơi cạnh tranh 2 người chơi VS tính thời gian: 4 bước

Video: Trò chơi cạnh tranh 2 người chơi VS tính thời gian: 4 bước

Video: Trò chơi cạnh tranh 2 người chơi VS tính thời gian: 4 bước
Video: Tập 1 - 2 | Tải Một Trò Chơi Tôi Trở Thành Người Giàu Nhất | Kay Review 2024, Tháng mười một
Anonim
Trò chơi cạnh tranh giữa 2 người chơi và tính thời gian
Trò chơi cạnh tranh giữa 2 người chơi và tính thời gian

Bạn sẽ cần:

1. Digilent Basys 3, FPGA Board (hoặc bất kỳ FPGA nào khác,)

2. Phiên bản tương đối cập nhật của Vivado hoặc một số môi trường VHDL khác

3. Một máy tính có thể chạy chương trình được đề cập.

Bước 1: Bản thân trò chơi

Bản thân trò chơi
Bản thân trò chơi

Cách thức FSM tương tác với các mô-đun.

Cách chơi

Để bắt đầu, bạn nhấn nút giữa. Điều này sẽ làm cho “99”, đại diện cho sức khỏe của người chơi thứ hai, hiển thị trên màn hình bảy phân đoạn. Sau đó, các đèn LED sẽ sáng theo tuần tự từ phải sang trái. Điều này tạo thành một thanh nguồn. Khi thanh nguồn đầy, nó sẽ đặt lại. Mục tiêu của người chơi là lật công tắc của họ khi thanh càng cao càng tốt. Càng nhiều đèn LED sáng lên, người chơi một gây ra nhiều thiệt hại hơn cho người chơi hai. Sau khi người chơi một lật công tắc của họ, sát thương gây ra được trừ vào máu của người chơi hai. Sau đó, nó chuyển sang lượt của hai người chơi. Giờ đây, con số được hiển thị đại diện cho sức khỏe của một người chơi và thanh nguồn lấp đầy từ trái sang phải. Sau khi người chơi thứ hai thực hiện bước đi của họ, thiệt hại sẽ bị trừ và nó sẽ quay trở lại lượt của người chơi một lần nữa. Điều này lặp lại cho đến khi một người chơi đạt 0 máu. Video về hoạt động này được đính kèm.

Bước 2: FSM

FSM
FSM
FSM
FSM
FSM
FSM
FSM
FSM

Trò chơi này về cơ bản là một máy trạng thái hữu hạn lớn, mà một số logic phức tạp xảy ra dựa trên trạng thái mà FSM đang ở.

Trạng thái 1: Menu Trạng thái đầu tiên là màn hình menu, là một trong những trạng thái đơn giản hơn. Nó bao gồm màn hình bảy phân đoạn hiển thị từ “CHƠI” và nút khiến trò chơi bắt đầu. Nút, BTN, dẫn chúng ta đến trạng thái tiếp theo, đó là lượt người chơi.

Trạng thái 2: Lượt của người chơi

Lượt của Người chơi một kích hoạt tín hiệu khiến màn hình bảy đoạn hiển thị sức khỏe của Người chơi hai. Một tín hiệu khác bật để kích hoạt một thanh ghi dịch chuyển được nhập từ một mô-đun khác mà chúng tôi đã tạo (Pone.vhd). Thanh ghi dịch chuyển này làm cho đèn LED sáng lên giống như một dụng cụ đo công suất ngày càng tăng trong các trò chơi khác và sau đó nó sẽ đặt lại về 0 khi đạt đến lượng đèn LED tối đa có thể phát sáng. Nó cập nhật về cạnh lên của đồng hồ thu được từ barclock.vhd, được sửa đổi từ một tệp lab mượn. Chúng tôi đã để thanh của một trình phát bắt đầu từ bên phải và lấp đầy ở bên trái, vì công tắc của một trình phát cũng ở bên trái (để có trải nghiệm người dùng trực quan). Sau khi bật công tắc, trạng thái chuyển sang đầu phát một khoản khấu trừ và lượng đèn LED đang hoạt động được lưu trong một tín hiệu.

Trạng thái 3: Người chơi một bị trừ Tín hiệu có lượng đèn LED đang hoạt động xác định lượng máu bị trừ. Điều này được thực hiện bằng cách có một thanh ghi dịch chuyển khác (retuctor1.vhd) thay vì tăng các đèn LED, hãy giảm chúng. Điều này giảm trên cạnh lên của một trong các mô-đun div đồng hồ mà chúng tôi đã mượn và sửa đổi (downcounterclock.vhd). Ngay khi một đèn LED bị tắt, một điểm máu sẽ bị trừ khỏi tổng số máu của người chơi hai. Nếu trong quá trình này, hai người chơi đạt 0 máu, chúng tôi dừng lại và ngay lập tức chuyển sang trạng thái “Trò chơi kết thúc”. Nếu không, khi vectơ LED đạt đến “0000000000000000”, chúng tôi chuyển sang lượt của hai người chơi.

Trạng thái 4: Lượt của người chơi Hai lượt của người chơi giống hệt như lượt của người chơi một, ngoại trừ thanh ghi dịch chuyển cho nó (Ptwo.bhd) đi từ trái sang phải và công tắc nằm ở phía bên phải của bàn cờ. Một tín hiệu kích hoạt để hiển thị sức khỏe của Người chơi 1. Sau khi công tắc 2 hoạt động, công tắc này sẽ chuyển sang lượt trừ của Người chơi thứ hai.

Giai đoạn 5: Người chơi hai khoản khấu trừ Cũng giống như lượt của người chơi hai, khoản khấu trừ của người chơi hai hành động giống như người chơi một bị trừ. Sự khác biệt chính là thanh ghi dịch chuyển điều khiển đèn LED tắt đi theo hướng ngược lại, đây là một sửa đổi dễ dàng thực hiện khi bạn có khoản khấu trừ của người chơi hoạt động bình thường.

Giai đoạn 6: Trận đấu kết thúc Nếu tại bất kỳ thời điểm nào một trong hai người chơi không còn máu, trò chơi sẽ chuyển sang trạng thái này. Không có gì hiển thị ưa thích. Nếu nhấn BTN một, thì máu sẽ được đặt lại thành 99 và trạng thái sẽ quay trở lại menu, bắt đầu lại trò chơi một cách hiệu quả.

Bước 3: Mô-đun

Mô-đun
Mô-đun

Sơ đồ hộp đen cho trò chơi

Downcounterclock (dựa trên mô-đun clk_div.vhd của Bryan Mealy):

Đây là đồng hồ xử lý thời gian của các bộ trừ. Hằng số có tên max_count cao gấp 3 lần hằng số max_count của barclock. Điều này sẽ làm cho các bộ trừ chậm hơn 3 lần so với tốc độ của thanh.

Barclock - (dựa trên mô-đun clk_div.vhd của Bryan Mealy):

Đồng hồ này xử lý thời gian của đồng hồ đo năng lượng, chúng tôi đã tăng nhanh chóng để tăng thêm độ khó cho trò chơi. Thời gian này có thể được điều chỉnh theo ý muốn của bạn, tăng tốc độ bằng cách đặt max_count không đổi thành một số lớn hơn hoặc giảm nó bằng cách làm cho max_count một số nhỏ hơn. Sseg_dec - (Viết bởi Bryan Mealy): Mô-đun này lấy một số 8 bit làm đầu vào, nó sẽ giải mã, chuyển đổi số thành số thập phân tương đương và sau đó xuất ra màn hình bảy phân đoạn. Để tệp này hoạt động, bạn cần đảm bảo rằng các ràng buộc của bạn phù hợp với các ràng buộc của chúng tôi.

Pone:

Đây là một thanh ghi dịch chuyển các bit sang trái, thêm một bit nóng để làm cho nó trông giống như công suất kế đang tăng lên. Khi tất cả các bit đều nóng, tất cả các bit sẽ được đặt lại về "0" và chu kỳ bắt đầu lại.

Ptwo:

Đây là phiên bản lật của mô-đun P1.

Deductor1:

Đây là sự kết hợp của một thanh ghi shift và một bộ trừ. Thanh ghi dịch chuyển đi theo hướng ngược lại với thanh ghi dịch chuyển của P1, cho biết một khoản khấu trừ. Điều này cũng trừ đi 1 từ máu của Người chơi 2 cho mỗi chu kỳ đồng hồ, do đó, với sự kết hợp của hai chức năng này, có vẻ như sức khỏe của đối phương giảm đi 1 cho mỗi điểm dẫn của thanh máu đi xuống.

Deductor2: Đây là phiên bản lật của mô-đun Deductor1.

PlayDecoder (được mượn và sửa đổi từ ekchen35649 có thể hướng dẫn 133 của anh ấy): Điều này được sử dụng trong trạng thái menu để hiển thị từ “PLAY” trên bộ giải mã bảy đoạn.

Bước 4: Kiểm tra

Trò chơi này ban đầu được lấy cảm hứng từ một trong những minigame từ Kirby. Đây là một trò chơi hai người chơi đơn giản có thể chơi trên Bảng Basys 3 hoặc bất kỳ FPGA nào.

Bước 1: Vật liệu cần thiết

Bạn sẽ cần: Digilent Basys 3, FPGA Board (hoặc bất kỳ thứ gì khác) Một phiên bản tương đối cập nhật của Vivado hoặc một số môi trường vhdl khác Một máy tính có thể chạy chương trình đã đề cập A brain

Bước 2: Bản thân trò chơi

Cách chơi

Để bắt đầu, bạn nhấn nút giữa. Điều này sẽ làm cho “99”, đại diện cho sức khỏe của người chơi thứ hai, hiển thị trên màn hình bảy phân đoạn. Sau đó, các đèn LED sẽ sáng theo tuần tự từ phải sang trái. Điều này tạo thành một thanh nguồn. Khi thanh nguồn đầy, nó sẽ đặt lại. Mục tiêu của người chơi là lật công tắc của họ khi thanh càng cao càng tốt. Càng nhiều đèn LED sáng lên, người chơi một gây ra nhiều thiệt hại hơn cho người chơi hai. Sau khi người chơi một lật công tắc của họ, sát thương gây ra được trừ vào máu của người chơi hai. Sau đó, nó chuyển sang lượt của hai người chơi. Giờ đây, con số được hiển thị đại diện cho sức khỏe của một người chơi và thanh nguồn lấp đầy từ trái sang phải. Sau khi người chơi thứ hai thực hiện bước đi của họ, thiệt hại sẽ bị trừ và nó sẽ quay trở lại lượt của người chơi một lần nữa. Điều này lặp lại cho đến khi một người chơi đạt 0 máu. Video về hoạt động này được đính kèm.

Để chơi trò chơi, hãy tải trò chơi lên bảng đáy và nhấn nút ở giữa. Cố gắng lật công tắc khi có nhiều đèn LED đang hoạt động nhất có thể, sau đó chờ và xem bảng trừ các điểm đó khỏi lượng máu của đối thủ. Sau đó, chuyển nó cho bạn của bạn, và

Bước 3: FSM

Trò chơi này về cơ bản là một cỗ máy trạng thái hữu hạn lớn, mà một số logic phức tạp xảy ra dựa trên trạng thái mà FSM đang ở đó.

(Biểu đồ trạng thái)

Trạng thái 1: Thực đơn

Trạng thái đầu tiên là màn hình menu, đây là một trong những trạng thái đơn giản hơn. Nó bao gồm màn hình bảy phân đoạn hiển thị từ “CHƠI” và nút khiến trò chơi bắt đầu. Nút, BTN, dẫn chúng ta đến trạng thái tiếp theo, đó là lượt của người chơi.

Trạng thái 2: Lượt của người chơi

Lượt của Người chơi một kích hoạt tín hiệu khiến màn hình bảy đoạn hiển thị sức khỏe của Người chơi hai. Một tín hiệu khác bật để kích hoạt một thanh ghi dịch chuyển được nhập từ một mô-đun khác mà chúng tôi đã tạo (Pone.vhd). Thanh ghi dịch chuyển này làm cho đèn LED sáng lên giống như một dụng cụ đo công suất ngày càng tăng trong các trò chơi khác và sau đó nó sẽ đặt lại về 0 khi đạt đến lượng đèn LED tối đa có thể phát sáng. Nó cập nhật về cạnh lên của đồng hồ thu được từ barclock.vhd, được sửa đổi từ một tệp lab mượn. Chúng tôi đã để thanh của một trình phát bắt đầu từ bên phải và lấp đầy ở bên trái, vì công tắc của một trình phát cũng ở bên trái (để có trải nghiệm người dùng trực quan). Sau khi bật công tắc, trạng thái chuyển sang đầu phát một khoản khấu trừ và mức độ hoạt động của đèn LED được lưu trong một tín hiệu.

Trạng thái 3: Người chơi Một khấu trừ

Tín hiệu có số lượng đèn LED đang hoạt động xác định mức độ khỏe mạnh được khấu trừ. Điều này được thực hiện bằng cách có một thanh ghi dịch chuyển khác (retuctor1.vhd) thay vì tăng các đèn LED, hãy giảm chúng. Điều này giảm trên cạnh lên của một trong các mô-đun div đồng hồ mà chúng tôi đã mượn và sửa đổi (downcounterclock.vhd). Ngay khi một đèn LED bị tắt, một điểm máu sẽ bị trừ vào tổng số máu của người chơi hai. Nếu trong quá trình này, hai người chơi đạt 0 máu, chúng tôi dừng lại và ngay lập tức chuyển sang trạng thái “Trò chơi kết thúc”. Nếu không, khi vectơ LED đạt đến “0000000000000000”, chúng tôi chuyển sang lượt của hai người chơi.

Trạng thái 4: Lượt của người chơi thứ hai

Lượt của người chơi hai giống hệt như lượt của người chơi một, ngoại trừ thanh ghi dịch chuyển cho lượt đó (Ptwo.bhd) đi từ trái sang phải và công tắc nằm ở phía bên phải của bàn cờ. Một tín hiệu kích hoạt để hiển thị sức khỏe của Người chơi 1. Sau khi công tắc 2 hoạt động, công tắc này sẽ chuyển sang lượt trừ của Người chơi thứ hai.

Giai đoạn 5: Người chơi hai khấu trừ

Cũng giống như lượt của người chơi hai, khoản khấu trừ của người chơi hai hành động giống như lần trừ của người chơi một. Sự khác biệt chính là thanh ghi dịch chuyển điều khiển việc tắt của đèn LED đi theo hướng ngược lại, đây là một sửa đổi dễ dàng thực hiện khi bạn có khoản khấu trừ của người chơi hoạt động bình thường.

Giai đoạn 6: Trận đấu kết thúc Nếu tại bất kỳ thời điểm nào một trong hai người chơi không còn máu, trò chơi sẽ chuyển sang trạng thái này. Không có gì hiển thị ưa thích. Nếu nhấn BTN một, thì máu sẽ được đặt lại thành 99 và trạng thái sẽ quay trở lại menu, bắt đầu lại trò chơi một cách hiệu quả.

Hộp đen

Bước 4: Mô-đun

Downcounterclock (dựa trên mô-đun clk_div.vhd của Bryan Mealy):

Đây là đồng hồ xử lý thời gian của các bộ trừ. Hằng số có tên max_count cao gấp 3 lần hằng số max_count của barclock. Điều này sẽ làm cho các bộ trừ chậm hơn 3 lần so với tốc độ của thanh.

Barclock - (dựa trên mô-đun clk_div.vhd của Bryan Mealy): Đồng hồ này xử lý thời gian của đồng hồ đo điện, chúng tôi đã tăng nhanh để tăng thêm độ khó cho trò chơi. Thời gian này có thể được điều chỉnh theo ý muốn của bạn, tăng tốc độ bằng cách đặt max_count không đổi thành một số lớn hơn hoặc giảm nó bằng cách làm cho max_count một số nhỏ hơn. Sseg_dec - (Viết bởi Bryan Mealy): Mô-đun này lấy một số 8 bit làm đầu vào, nó sẽ giải mã, chuyển đổi số thành số thập phân tương đương và sau đó xuất ra màn hình bảy phân đoạn. Để tệp này hoạt động, bạn cần đảm bảo rằng các ràng buộc của bạn phù hợp với tệp của chúng tôi.

Pone: Đây là một thanh ghi dịch chuyển các bit sang trái, thêm một bit nóng để làm cho nó trông giống như công suất đo đang tăng lên. Khi tất cả các bit đều nóng, tất cả các bit được đặt lại về "0" và chu kỳ bắt đầu lại.

Ptwo: Đây là phiên bản lật của mô-đun P1.

Deductor1: Đây là sự kết hợp của một thanh ghi shift và một bộ trừ. Thanh ghi dịch chuyển theo hướng ngược lại với thanh ghi dịch chuyển của P1, cho biết một khoản khấu trừ. Điều này cũng trừ đi 1 từ máu của Người chơi 2 cho mỗi chu kỳ đồng hồ, do đó, với sự kết hợp của hai chức năng này, có vẻ như sức khỏe của đối phương giảm đi 1 cho mỗi điểm dẫn của thanh máu đi xuống.

Deductor2: Đây là phiên bản lật của mô-đun Deductor1.

PlayDecoder (mượn và sửa đổi một chút từ ekchen35649 133 có thể hướng dẫn của anh ấy):

Điều này được sử dụng trong trạng thái menu để hiển thị từ "PHÁT" trên bộ giải mã bảy đoạn.

Việc cần làm: hình ảnh, video

Đề xuất: