Lưu HighScore trong game rắn săn mồi

Em đang làm game rắn săn mồi nhưng em đang mắc ở phần lưu HighScore.Ý tưởng của em là :

  • Tạo sẵn 1 file Highscore.txt bao gồm 5 tên là Player với cùng điểm 0.
  • Đọc file lưu vào mảng 2 chiều High.name và High.score.
  • Sau khi kết thúc lượt chơi thì High.name và High.score sẽ được sắp xếp và lưu ngược trở lại vào file.
  • Đến lượt tiếp theo thì ta lại đọc file và lưu vào mảng 2 chiều.

Nhưng em đang mắc không biết đọc file như nào để tên sẽ lưu vào high.name và điểm sẽ lưu vào high.score. Mọi người có thể cho em hướng giải quyết hoặc 1 cách làm khác được không ạ.

Là sao ạ , em chưa hiểu lắm ạ

Hmm… Có 2 cách:

  1. Lưu dưới dạng tên|score\n: Đây là cách cơ bản nhất, và dễ nhất đối với một số ngôn ngữ lập trình không hỗ trợ sẵn JSON. Ở cách này thì em lưu trường tên, score, hay trường này cách nhau bằng | hoặc bất kì kí tự nào mà em muốn trừ số, chữ và khoảng trắng ra. Còn \n là dùng để ngăn cách thông tin giữa các Player, em có thể thay \n bằng bất kì cái gì em muốn, tất nhiên là trừ số, chữ và khoảng trắng(\n là kí tự đại diện cho kí tự xuống dòng nha, không phải chữ hay số đâu). Muốn đọc được file thì cần phải spilt kí tự \n ra thành các mảng chứa thông tin của Player rồi trong mỗi mảng đó lại spilt tiếp kí tự | để lấy name và score của từng Player. Ý tưởng của em phù hợp với cách này.

  2. Dùng JSON: Cách này cực kì phù hợp với những ngôn ngữ lập trình đã hỗ trợ sẵn JSON như Python, Javascript (Nodejs là Javascript runtime chứ không phải là NNLT),… Dùng JSON sẽ dễ dàng và khi đọc file sẽ trông “pro” hơn nhiều so với cách trên. Cách này đơn giản chỉ là: Ghi [] vào trong file, khi lưu điểm thì lưu score và name dưới dạng một object, đọc file trên rồi chuyển sang list/array rồi push item/element dạng object mới vào list/array đó rồi sắp xếp. Cuối cùng là lấy 5 item/element đầu, chuyển chúng sang dạng chuỗi JSON rồi ghi vào file.

P/s: Cái này chỉ là sửa một chút thôi, không cần phải quan tâm đâu. Mà em nên tích solution để những bạn sau này tới đây (nếu có) biết đây là solution.

5 Likes

Em viết bằng C thì theo như cách 1 em có thể thay | bằng 1 khoảng trắng để tách giữa name và score còn \n để tách giữa các người chơi đúng không ạ

À tí nữa thì quên, dùng khoảng trắng không được đâu nha. Nếu name có chứa khoảng trắng thì không được và dùng khoảng trắng sẽ trông không cách biệt giữa các trường (field) lắm. Ngoài ra thì kí tự cách player và field phải khác nhau.

3 Likes

Sao vậy ạ? Em nghĩ là sẽ cho đọc từng ký tự lưu vào mảng name nếu gặp khoảng trắng sẽ chuyển sang lưu vào score ạ. Vậy cái | là bắt buộc ạ?

Bất kì cái gì trừ chữ, số và khoảng trắng là được. Khi lưu name thì player có thể nhập name chứa dấu cách thành ra khi split chuỗi sẽ gặp vấn đề. Ví dụ như: Nguyen Van A 10 khi split bằng khoảng trắng sẽ ra:

{"Nguyen", "Van", "A", "10"}

trong khi đúng ra phải là:

{"Nguyen Van A", "10"}
4 Likes

OKEE , thankss anh ạ :heart_eyes: :heart_eyes: :heart_eyes:

83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?