CÔNG NGHỆ PHẦN MỀM ĐỀ TÀI GAMES TRÒ CHƠI CỜ VUA PHẦN I: GIỚI THIỆU TRÒ CHƠI_phần 1 doc

14 548 0
CÔNG NGHỆ PHẦN MỀM ĐỀ TÀI GAMES TRÒ CHƠI CỜ VUA PHẦN I: GIỚI THIỆU TRÒ CHƠI_phần 1 doc

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

CƠNG NGHỆ PHẦN MỀM ĐỀ TÀI GAMES TRỊ CHƠI CỜ VUA PHẦN I: GIỚI THIỆU TRÒ CHƠI CỜ VUA - Cờ vua, trước gọi cờ quốc tế, trò chơi bàn mơn thể thao trí tuệ cho người chơi Ngày nay, cờ vua trò chơi phổ biến giới với hàng triệu người nhà riêng, câu lạc bộ, trực tuyến, từ xa giải đấu - Trò chơi diễn bảng hình vng, gọi bàn cờ, gồm hàng (đánh số từ đến 8) cột (đánh số từ a đến h), tạo 64 ô hình vuông với màu đậm nhạt xen kẽ nhau, với người chơi có màu nhạt hàng cuối bên tay phải ngồi vào bàn chơi cờ Mỗi người bắt đầu ván cờ với 16 quân cờ quân sau đối phương xong nước (hoàn thành nước đi) - Quân cờ Vua Hậu Xe Tượng Mã Tốt -Cách xếp cờ -Quy tắc chơi Khi ván cờ vua bắt đầu, người chơi cầm quân đen người chơi lại cầm quân trắng Việc chọn lựa cầm quân đen hay trắng phụ thuộc vào thể thức chơi giải trí hay thi đấu hệ thống có tổ chức Nó hai người thỏa thuận (giải trí) định trọng tài giải đấu Bên cầm quân trắng ln ln trước có ưu nhỏ so với bên cầm quân đen Các quân cờ cần phải xếp bàn cờ tiêu chuẩn với ô nằm hàng cuối bên tay phải người chơi có màu nhạt -Các quân cờ có nước khác nhau: + Xe (ký hiệu quốc tế R) di chuyển theo đường thẳng dọc theo cột hay hàng tới cịn trống mà khơng có qn cản đường hay tới bị quân đối phương chiếm giữ (ăn quân) vượt qua qn đứng Ngoại lệ trường hợp nhập thành Khi nhảy qua qn Vua để đứng cạnh Chỉ có Xe có nước + Tượng (ký hiệu quốc tế B) di chuyển theo đường chéo tới có màu với ngun lý tương tự Xe tới cịn trống hay ô bị quân đối phương chiếm giữ (ăn quân) + Hậu (ký hiệu quốc tế Q) có nước tổ hợp đơn giản chuyển động Xe Tượng Trong nước di chuyển theo đường chéo đường thẳng dọc theo cột hay hàng, với nguyên lý ăn quân giống Tượng Xe + Mã (ký hiệu quốc tế N) di chuyển tới cịn trống hay ô bị quân đối phương chiếm giữ (ăn quân) theo dạng hình chữ L Qn Mã khơng bị cản cờ tướng + Tốt (khơng cần ký hiệu) di chuyển thẳng phía trước lần tới cịn trống (đi mà khơng ăn quân), di chuyển quân để ăn quân đối phương chéo Ví dụ, Tốt trắng c4 có quyền ăn quân đối phương b5 d5 hai có qn đối phương chiếm di chuyển xuống ô c5 ô cịn trống, trừ hai trường hợp sau: * Nó di chuyển từ vị trí xuất phát ban đầu tới chưa bị chiếm giữ, nhảy qua qn khác để tới Ví dụ Tốt trắng g2 tới g3 g4 nước ô chưa bị chiếm giữ, tới g4 g3 có qn chiếm giữ * Trong trường hợp quân Tốt bên trắng đạt tới hàng (ví dụ tới e5) qn Tốt thuộc hai cột bên đen nằm bên cạnh cột mà Tốt trắng chiếm giữ (trong trường hợp cho cột d cột f) từ vị trí xuất phát (d7 hay f7) nhảy liền tới d5/f5 Tốt trắng vị trí e5 nước sau có quyền ăn Tốt đen d5/f5 di chuyển tiếp tới ô d6/f6 Quyền tự động mất, nước sau quân trắng di chuyển quân khác Tương tự cho Tốt đen chiếm giữ hàng Đây trường hợp mà cờ vua người ta gọi bắt tốt qua đường (en passant) *Tốt đặc điểm di chuyển đến hàng cuối người chơi có quyền phong cấp cho thành quân nặng hay nhẹ (Hậu, Xe, Tượng, Mã) + Vua (ký hiệu quốc tế K) quân quan trọng nhất, Vua người chơi thua Mỗi lần ăn quân di chuyển sang ô bao quanh ô mà chiếm giữ, tới mà qn chiếm giữ hay bị qn đối phương kiểm sốt Ngoại lệ trường hợp nhập thành Khi di chuyển qua hai đồng thời với việc di chuyển quân Xe để quân Xe đứng bên cạnh phía cột trung tâm Ký hiệu nhập thành 0-0 (nhập thành gần) 0-0-0 (nhập thành xa) *Lưu ý: Khi thực nhập thành thực tế, theo luật FIDE, phải di chuyển Vua trước thực tay + Khi ăn quân đối phương, quân công di chuyển tới ô thay cho quân đối phương vị trí này, bắt tốt qua đường (en passant) ngoại lệ Quân bị ăn loại khỏi bàn cờ Vua không bảo vệ khỏi nước chiếu, bị chiếu người chơi phải thực biện pháp nhằm cứu Vua (di chuyển Vua khỏi vị trí bị chiếu, ăn quân chiếu hay dùng quân khác cản đường chiếu có thể) Nếu khơng thể có nước để cứu Vua người chơi bị chiếu bí thua + Các ván cờ kết thúc chiếu bí Có thể bên xin thua, thua hết phạm luật chơi Có thể xảy ván cờ hịa Một ván cờ vua hòa khi: thỏa thuận hai bên không bên dám mạo hiểm hay không đủ lực lượng để chiếu hết, rơi vào trạng thái (stalemate), hai bên lặp lại nước ba lần hay luật 50 nước (perpetual check) PHẦN II: CÁC LÝ THUYẾT LIÊN QUAN Sau trình tạo ứng dụng mạng kiểu TCP Server * Tạo ServerSocket * Gọi thực thi phương thức accept() để chấp nhận thiết lập kết nối với Client => nhận Socket giao tiếp với Client * Lấy InputStream OutputStream để nhận gửi liệu với Client * Gửi nhận liệu với Client, sử dụng phương thức read() write() lớp đối tượng InputStream OutputStream * Đóng Socket ServerSocket * Kết thúc chương trình Client * Tạo Socket kết nối đến Server * Lấy InputStream OutputStream để nhận gửi liệu với Server * Gửi nhận liệu với Server, sử dụng phương thức read() write() lớp đối tượng InputStream OutputStream * Đóng Socket * Kết thúc chương trình I/ SOCKET Một socket thực bảy thao tác bản: • Kết nối với máy xa (ví dụ, chuẩn bị để gửi nhận liệu • Gửi liệu • Nhận liệu • Ngắt liên kết • Gán cổng • Nghe liệu đến • Chấp nhận liên kết từ máy xa cổng gán Có nhiều kiểu Socket khác tương ứng với kiểu giao thức sử dụng để giao tiếp hai máy mạng Internet Đối với chồng giao thức TCP/IP, có hai kiểu Socket sử dụng stream socket datagram socket Stream socket sử dụng giao thức TCP để cung cấp dịch vụ gửi liệu tin cậy Datagram socket sử dụng giao thức UD để cung cấp dịch vụ gởi gói tin đơn giản Ngơn ngữ lập trình Java hỗ trợ lớp Socket ServerSocket cho kiểu stream socket lớp DatagramPacket DatagramSocket cho kiểu datagram socket Đối với kiểu stream socket, lớp Socket sử dụng client server Lớp Socket có phương thức tương ứng với bốn thao tác thao tác socket trình bày Ba thao tác cuối hỗ trợ server để chờ client liên kết tới Các thao tác cài đặt lớp ServerSocket II/ TCP SOCKET Client thiết lập giao tiếp với server đợi đáp trả từ Server Các socket cho client thường sử dụng theo bước sau: • Tạo Socket sử dụng hàm khởi tạo với địa IP số hiệu cổng dịch vụ máy đích Socket cố gắng liên kết với socket server máy đích • Sau liên kết thiết lập, lấy luồng nhập luồng xuất tạo socket máy gửi - client socket máy đích – server Các luồng sử dụng để gửi liệu cho Kiểu liên kết gọi song công (fullduplex) host nhận gửi liệu đồng thời Ý nghĩa liệu phụ thuộc vào giao thức • Khi việc truyền liệu hồn thành, hai phía ngắt liên kết Một số giao thức, HTTP, đòi hỏi liên kết phải bị đóng sau yêu cầu phục vụ Các giao thức khác, chẳng hạn FTP, cho phép nhiều yêu cầu xử lý liên kết đơn III/ INPUT, OUTPUT STREAM Luồng đơn giản lộ trình mà liệu di chuyển chương trình thiết bị nhập xuất, biểu diễn trừu tượng (cấu trúc liệu, lớp) để liệu trao đổi chương trình thiết bị vật lý Trong java, luồng thiết kế thành nhiều lớp tất chúng dẫn xuất từ hai lớp trừu tượng InputStream OutputStream gói java.io Có hai loại luồng java luồng ký tự luồng bytes Tất task liên quan đến lớp nhập xuất java có lỗi quăng IOException 1)Những lớp Ouput stream -OutputStream lớp trừu tượng để tất lớp xử lý luồng xuất byte kế thừa.Nó có phương thức là: • Write ghi byte liệu tới luồng xuất • Flush xả luồng để tất vùng nhớ (buffer) luồng trạng thái trống sẵn sàng cho việc ghi • Close đóng luồng xuất giải phóng tất tài nguyên hệ thống liên quan đến luồng xuất Dưới lớp kế thừa từ lớp OutputStream: - ObjectOutputStream: dùng để chuyển đối tượng thành dãy byte ghi - ByteArrayOutputStream lớp kế thừa từ lớp OutputStream, dùng để ghi liệu mảng byte, vùng nhớ (buffer) liệu tự động tăng ghi liệu vào - FileOutputStream lớp kế thừa từ lớp OutputStream, dùng để ghi liệu tới tập tin - BufferedOutputStream kế thừa từ lớp FilterOutputStream, dùng để hỗ trợ việc ghi liệu vùng đệm nhằm cải tiến performance ghi liệu - DataOutputStream giúp ứng dụng ghi kiểu liệu (primitive types) boolean, int, float,… tới stream Lớp sinh nhằm giúp dễ dàng việc ghi liệu có nhiều kiểu số nguyên, số thực, ký tự… 2)Những lớp Input stream InputStream lớp trừu tượng dùng để lớp xử lý nhập byte liệu kế thừa InputStream có hàm sau: • Available trả số lượng byte đọc từ inputStream • Read đọc byte liệu từ input stream • Mark đánh dấu vị trí input stream • Skip khơng đọc n byte liệu từ input stream • Reset khởi động lại việc đọc từ vị trí phương thức mark • Close đóng input stream giải phóng tồn tài nguyên hệ thống liên quan đến stream Dưới lớp kế thừa từ lớp InputStream: - ObjectInputStream: lớp đọc dãy byte chuyển thành đối tượng phù hợp - ByteArrayInputStream lớp dùng để chứa byte đọc stream khác, đọc ký tự nhiều ký tự từ stream Còn đọc tư ByteArrayOutputStream lấy mảng byte, việc đọc liệu vùng đệm nhằm cải tiến performance đọc liệu - DataInputStream lớp kế thừa từ filterInputStream, giúp ứng dụng đọc liệu có kiểu kiểu nguyên thủy (primitive types) int, float, boolean, … 3)Những lớp Reader Writer Những lớp thuộc nhóm Reader Writer dùng để giúp việc nhập xuất luồng ký tự (character) ứng dụng thiết bị vật lý Các lớp Reader: Reader, BufferedReader, CharArrayReader, FilterReader, InputStreamReader, StringReader, PipedReader, FileReader, LineNumberReader, PushBackReader Các lớp Writer: Writer, BufferedWriter, CharArrayWriter, FilterWriter, OutputStreamWriter, FileWriter, PipedWriter, PrinterWriter, StringWriter, File, RandomAccessFile, FileDescriptor, FilePermission, StreamTokenizer Reader Writer hai lớp trừu tượng dùng để lớp nhập xuất luồng ký tự kế thừa Reader cho việc đọc, Writer cho việc ghi IV/ THREAD Mỗi chạy ứng dụng Java bạn có Thread Đây Thread chính, thực thi dịng lệnh phương thức: public static void main Đây điểm nhập bắt buộc cho ứng dụng độc lập Để tạo Thread khác Thread trên, Java cung cấp cho hai cách : - Tạo lớp lớp Thread (java.lang.Thread) - Tạo lớp thực interface Runnable Chúng ta tìm hiểu lần lược hai cách 1) Tạo lớp lớp java.lang.Thread Bạn khai báo sau : class A extends Thread { public void run() { // code for the new thread to execute } } A a = new A(); // create the thread object a.start(); // start the new thread executing - Với cách dòng lệnh bạn đặt method run() Method override method nguyên thuỷ lớp Thread.Sau bạn tạo đối tượng từ lớp bạn.Bạn gọi phương thức start() từ đối tượng Lúc Thread bạn thức tạo phương thức start tự gọi method run bạn thực thi dòng lệnh mà bạn đặc tả - Chú ý : method start() method hệ thống, có nhiệu vụ cấp phát nhớ, tạo Thread gọi hàm run() bạn Vì bạn không nên override phương thức Điều dẫn đến khơng tạo Thread 2) Hiện thực interface Runnable Bạn khai báo sau : class B extends … implements Runnable { public void run() { // code for the new thread to execute } } B b = new B(); // create the Runnable object Thread t = new Thread(b); // create a thread object t.start(); // start the new thread - Cũng giống cách trên, dòng lệnh bạn đặt method run() (có thể gọi đến phương thức khác, phải bắt đầu phương thức này) Sau bạn tạo đối tượng B từ lớp thực interface Runnable, tạo thêm đối tượng t lớp Thread với thông số cho constructor đối tượng B Sau bạn gọi phương thức t.start() thức Thread tạo phương thức run() bạn triệu gọi cách tự động Bạn hỏi cách thứ hai phải tạo đối tượng Thread Vậy lại đưa hai cách thực làm ? Câu trả lời : - Bản thân ngôn ngữ Java không hỗ trợ đa thừa kế Bạn extends từ lớp Nhưng bạn lại implements lúc nhiều interface Khi mà lớp bạn [extends] lớp (vd : Applet), bạn implements Runnable để tạo Thread - Việc extends lớp Thread dẫn đến rủi ro bạn override method start(), stop(), làm cho việc tạo Thread Một lời khuyên nên tạo lớp thực interface Runnable (cách thứ hai) muốn tạo Thread Chương trình bạn sáng dễ tìm lỗi ... Tượng Mã Tốt -Cách xếp cờ -Quy tắc chơi Khi ván cờ vua bắt đầu, người chơi cầm quân đen người chơi lại cầm quân trắng Việc chọn lựa cầm quân đen hay trắng phụ thuộc vào thể thức chơi giải trí hay... người chơi bị chiếu bí thua + Các ván cờ khơng phải kết thúc chiếu bí Có thể bên xin thua, thua hết phạm luật chơi Có thể xảy ván cờ hòa Một ván cờ vua hòa khi: thỏa thuận hai bên không bên dám... chiếu người chơi phải thực biện pháp nhằm cứu Vua (di chuyển Vua khỏi vị trí bị chiếu, ăn quân chiếu hay dùng quân khác cản đường chiếu có thể) Nếu khơng thể có nước để cứu Vua người chơi bị chiếu

Ngày đăng: 05/08/2014, 13:20

Từ khóa liên quan

Tài liệu cùng người dùng

Tài liệu liên quan