2012-04-17 20 views
5

Tôi đang phát triển một trang web là một loại trò chơi. Tiến trình của người dùng được lưu trong cơ sở dữ liệu MySQL.Cách lưu tiến trình trò chơi trong cơ sở dữ liệu MySQL

Tôi muốn thực hiện việc này bằng cách lưu bảng bằng cột tiết kiệm (ID) và tiến trình cột, trong đó tiến trình là văn bản kiểu dữ liệu. Khi người dùng bắt đầu, tiến trình được đặt thành (ví dụ: '0'. Nếu anh ta tiến tới cấp độ 1, tiến trình được đặt thành '0 # 1', cấp hai làm cho nó '0 # 1 # 2'. Thứ tự các cấp là miễn phí và tôi muốn lưu nó. Vì vậy, tiến trình có thể là '0 # 4 # 2 # 15' và cứ tiếp tục như vậy.

Đây có phải là cách hay để thực hiện việc này không? Tôi không có kinh nghiệm với SQL và tôi không muốn làm điều gì đó cực kỳ ngu ngốc. Tôi đã đọc rất nhiều thông tin khó hiểu về các bảng, các phím nước ngoài và cái gì đó ...

Tôi muốn cảm ơn bạn đã dành thời gian đọc sách này và tôi đang mong chờ câu trả lời.

Ryan

+0

Vui lòng chia thành nhiều câu hỏi. –

+0

Bạn có lẽ có nghĩa là 'bộ nhớ cache' thay vì 'bộ đệm'? – Widor

+0

@Jan Bạn nói đúng. – Ryan

Trả lời

2

trả lời cho câu hỏi 1

của bạn tôi sẽ không tiếp cận vấn đề của bạn theo cách này. Tôi sẽ tạo ra 3 bảng: một bảng Levels (khóa chính của 'levelKey'), một bảng Users (khóa chính của 'userKey') và một bảng User_Levels với khóa tổng hợp 'levelKey' và 'userKey'. Khi người dùng hoàn thành một cấp độ, chỉ cần chèn vào bảng User_Levels. Sau đó, để xem nếu một người sử dụng đã hoàn thành một mức độ là một đơn giản chọn:

SELECT 'a' FROM User_Levels WHERE userKey = ? AND levelKey = ? 

Nếu số hàng là> 0, người dùng đã hoàn thành mức

+0

Đây là một cách tiếp cận nhiều trong quan điểm của tôi. Nếu bạn cần giữ lại thứ tự trong đó một mức đã được hoàn thành, bạn có thể có một cột thứ ba trong User_Levels có giá trị thứ tự. Ví dụ: nếu Người dùng 2 hoàn thành Cấp 1, 4 và 2 theo thứ tự đó, bảng sẽ có cho '(userKey, levelKey, ordinalValue) 'các mục' (1,1,1), (1,4,2), (1,2,3) '. – mdoyle

+0

Đúng, tôi chỉ liệt kê các cột trong câu trả lời cần thiết (các phím). Bạn có thể tack vào bất kỳ số lượng thông tin nào mô tả Levels, Users, hoặc mối quan hệ giữa hai người dùng (User_Levels). –

+0

"Đây là một cách tiếp cận nhiều" = "người xem là một cách tiếp cận tốt hơn nhiều". Sheesh. – mdoyle

1

Về câu hỏi đầu tiên của bạn, nếu trò chơi/mức độ là phi tuyến tính cá nhân tôi sẽ có một cách tiếp cận khác nhau; Tôi chỉ cần thêm một bảng có chứa một cột cho ID người dùng và một cột cho cấp độ hoàn thành. Vì vậy, nếu sử dụng 1 đã hoàn thành mức 0, 4 và 7, bàn của tôi sẽ có 3 hàng:

UID levels_completed 
1 0 
1 4 
1 7 

Về câu hỏi khác của bạn, bạn có thể sử dụng javascript sự kiện và ajax để phát hiện việc đóng cửa trang nhưng tôi sẽ không dựa vào đó; Tôi sẽ chỉ chạy các truy vấn bất cứ khi nào cần thiết. Và nếu phiên của bạn bị hủy, bạn đã quá muộn ...

+0

Vâng, các cấp độ sẽ giống như "phần" và sẽ có một loạt trong số họ. Thứ tự là quan trọng bởi vì người chơi có thể đi qua lại. Tôi đang đọc tiến trình thành một mảng khi người chơi tiếp tục trò chơi. Với một số lượng lớn người dùng và một số lượng lớn các phần cho mỗi người dùng, đó vẫn là một cách tiếp cận tốt? – Ryan

+0

@Ryan Đây chỉ là một ví dụ cơ bản nhưng nếu bạn muốn thêm thông tin, bạn có thể thêm các cột có chứa thông tin bổ sung. Cách thức hoạt động sẽ dễ dàng hơn trên một bảng như thế này hơn là một bảng với rất nhiều thông tin được nén vào một trường. – jeroen

2

Đối với Câu hỏi 2, tôi muốn nói số lượng truy vấn không phải là vấn đề. Sau khi tất cả, bạn đang ghi dữ liệu vào cơ sở dữ liệu, không truy cập vào cơ sở dữ liệu đó. Cá nhân, tôi sẽ gửi một "lưu" vào cơ sở dữ liệu, bất cứ khi nào người dùng thực sự hoàn thành một cấp độ.

người xem đã đăng một cách tiếp cận tốt để chia nhỏ các cấp và người dùng thành các bảng khác nhau. Trình tự của tiến trình có thể được nhìn thấy từ thứ tự tiến trình được đăng nhập vào User_Levels, do đó không cần phải lưu trữ thứ gì đó như 1 # 3 # 4 # 9

Bạn có thể sẽ gửi lưu dưới nền với ajax, vì vậy bạn không làm gián đoạn quá trình chơi trò chơi. Hãy xem ví dụ jQuery's $.post method. Hoặc nếu trò chơi của bạn ở chế độ flash, bạn có thể sử dụng URLRequest.

Các vấn đề liên quan