Xây dựng thẻ chơi Twitter Bot: Lưu trữ và truy xuất trạng thái trò chơi ...


Nguyễn Ngọc Tuyết
1 năm trước
Hữu ích 2 Chia sẻ Viết bình luận 0
Đã xem 4345

Gần đây tôi đã xây dựng một Twitter Bot chơi Blackjack . Đây là những bài viết trước đây của tôi cho đến nay nếu bạn đang theo kịp:

Vì tương tác với Bot thông qua Twitter, nên sẽ có một khoảng thời gian không xác định giữa khi người chơi chọn trả lời và tương tác với bot, có thể là giây, phút hoặc ngày. Do đó, chúng tôi cần lưu trữ trạng thái chơi trò chơi cho mỗi người chơi, truy xuất nó trong lần tương tác tiếp theo từ người dùng và lưu lại sau khi phản hồi từ bot trong khi chúng tôi chờ đợi tương tác của người chơi tiếp theo.

Bot có thể hỗ trợ bất kỳ số lượng người chơi song song. Đối với mỗi tương tác bot / người chơi, chúng tôi cần lưu trữ như sau:

  • tay cầm twitter của người chơi
  • thẻ hiện tại còn lại trong bộ bài
  • thẻ trong tay người chơi
  • thẻ trong tay bot
  • đến lượt ai

Trong mô hình dữ liệu "truyền thống", chúng ta có thể dễ dàng mô hình hóa điều này với một số bảng quan hệ, nhưng với DynamoDB là kho lưu trữ dữ liệu dựa trên khóa / giá trị / tài liệu, vì chúng ta chỉ cần lưu trữ một trạng thái tương tác cho mỗi người dùng, chúng ta có thể lưu trữ toàn bộ dữ liệu này cấu trúc trong một hàng duy nhất được khóa bởi tay cầm Twitter của người dùng.

Các loại giá trị vô hướng (số, chuỗi) và loại thiết lập được hỗ trợ của DynamoDB cho phép chúng tôi lưu trữ mọi thứ chúng tôi cần trong trạng thái trò chơi (tôi đã xem xét loại tài liệu, duy trì tài liệu JSON), nhưng để truy xuất giá trị trạng thái trò chơi trong một định dạng dễ sử dụng, điều này không có vẻ hữu ích và đơn giản như các kiểu và tập vô hướng).

Duyệt bảng trong DynamoDB bằng bảng điều khiển AWS, đây là lược đồ hiện tại trông như thế nào cho một trò chơi đã hoàn thành:

AWS DynamoDB cung cấp ba API khác nhau để tương tác với các bảng và dữ liệu của bạn, được mô tả trong các tài liệu ở đây: mức độ thấp , tài liệu , trình ánh xạ đối tượng cấp cao . Với API SDK Java AWS, sử dụng các lớp Java POJO để thể hiện dữ liệu của bạn cùng với API Trình ánh xạ đối tượng DynamoDB có lẽ là cách đơn giản nhất trong ba cách tiếp cận và sẽ cảm thấy quen thuộc nếu bạn đã sử dụng JPA, Hibernate hoặc các trình ánh xạ loại đối tượng / quan hệ khác trước.

Tương tự như JPA, API AWS DynamoDB cung cấp một số chú thích để ánh xạ Pojos Java vào các bảng và cột DynamoDB của bạn. Đây là lớp Pojo đại diện cho trạng thái trò chơi:

@DynamoDBTable(tableName = "twitterbot-blackjack")
public class PlayerGameState {

  private String twitterhandle;
  private Hand playerHand;
  private Hand botHand;
  private Deck deck;
...
}

twitterhandle là chìa khóa. Chú thích cho cột khóa trông như thế này:

@DynamoDBHashKey
public String getTwitterhandle() {
  return this.twitterhandle;
}

bộ bài, playerHand và botHand đều là các bộ sưu tập Thẻ. Là loại "tài liệu phụ" được sử dụng bởi mỗi bộ sưu tập Thẻ khác này, loại được chú thích bằng @D xạoDBDocument (thay vì @D xạoDBTable):

@DynamoDBDocument
public class Card {

  private Suit suit;
  private CardName name;
  private int pointsValue;

  ...
}

DynamoDB hỗ trợ các bản đồ của các giá trị vô hướng, vì vậy những giá trị này rất phù hợp để thể hiện một cỗ bài và tay bài của người chơi. Nếu một Thẻ duy nhất là bản đồ các giá trị, thì bộ sưu tập Thẻ là bản đồ Thẻ, do đó, bản đồ của các bản đồ. Để ánh xạ các cấu trúc phức tạp hơn này, cần có Bộ chuyển đổi loại DynamoDB để cho API DynamoDB biết cách ánh xạ cấu trúc vào bảng và quay lại:

@DynamoDBDocument
public class Hand {

  private List<Card> cards = new ArrayList<>();

  @DynamoDBTypeConverted(converter = ListOfCardsToMapOfMapsConverter.class)
  public List<Card> getCards(){
    return this.cards;
  }

  ...

}

Tiếp theo, tôi sẽ mô tả cách các Bộ chuyển đổi Loại này được sử dụng chi tiết hơn và chúng tôi sẽ xem xét việc lưu trữ và truy xuất từ ​​bảng DynamoDB.

Hữu ích 2 Chia sẻ Viết bình luận 0
Đã xem 4345