Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 21 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
21
Dung lượng
407,7 KB
Nội dung
HỌC VIỆN CƠNG NGHỆ BƯU CHÍNH VIỄN THƠNG - - KIẾN TRÚC MÁY TÍNH BÁO CÁO BÀI TẬP LỚN CHỦ ĐỀ Xây dựng mô phần mềm emu8086 TRÒ CHƠI TIK TAE TOK Giảng viên : VŨ HỒI NAM Nhóm : Nhóm mơn học: 05 Sinh viên : Hồ Văn Thành Minh-B19DCDT142 Nguyễn Thị Trang-B20DCAT188 Nguyễn Viết Nam-B20DCAT128 Đỗ Minh Ngọc-B20DCAT132 Đỗ Thị Lâm Oanh-B20DCAT136 LỜI CẢM ƠN Lời chúng em xin chân thành cảm ơn thầy thầy tạo điều kiện thuận lợi cho chúng em hoàn thành tập lớn mơn học Kiến trúc máy tính Chúng em với kiến thức hạn chế nên tránh khỏi nhiều sai sót với mong muốn học hỏi, chúng em mong nhận góp ý hướng dẫn thêm thầy để chúng em rút kinh nghiệm cho tập tốt Chúng em xin chân thành cảm ơn! I - QUÁ TRÌNH THỰC HIỆN Lựa chọn đề tài: Trị chơi Tik Tae Tok( tên gọi khác Cờ Caro) Tìm hiểu kiến thức internet cách thức làm việc, thảo luận Code nạp code cho thiết bị Chạy demo sản phẩm Trình bày báo cáo sản phẩm trước lớp II CÔNG VIỆC CỦA TỪNG THÀNH VIÊN Hồ Văn Thành Minh: - Chạy demo sản phẩm - Thuyết trình Nguyễn Viết Nam - Lên kế hoạch cho tập lớn - Tìm phân tích code - Tìm nguồn tài liệu Đỗ Minh Ngọc, Đỗ Thị Lâm Oanh - Tìm phân tích code - Tìm tài liệu Nguyễn Thị Trang - Tìm tài liệu - Làm báo cáo III CÁCH HOẠT ĐỘNG 1.Ý tưởng Tạo trò chơi đơn giản, quen thuộc, dễ hiểu mà người chơi với 2.Luật chơi: Khi bắt đầu, hai người chơi phải định quân cờ X hay O lựa chọn người đánh trước, người đánh sau.Tiếp đến, người chơi thứ đánh quân cờ lên giấy, cách dùng bút để đánh X O Tờ giấy cần có kẻ phân chia trống Sau đó, lượt người thứ hai Lượt tương tự người thứ nhất, người đầu chọn X người thứ hai chọn O ngược lại Người chơi đánh tuyệt đối không phép đánh dấu vào đánh ký hiệu vi phạm luật chơi không phép Người thắng cuối người có liên tiếp quân ngang, quân quân dọc quân chéo mà không bị đối thủ chặn Vì trị chơi có để nên vậy, hết mà khơng có người chiến thắng hai người chơi hòa lại ván 3.Code data segment new_line db 13, 10, "$" game_draw db "_|_|_", 13, 10 db "_|_|_", 13, 10 db "_|_|_", 13, 10, "$" game_pointer db DUP(?) win_flag db player db "0$" game_over_message db "Chuc mung ban da gianh chien thang!", 13, 10, "$" game_start_message db "ChaoMungCacBanDenVoiTroChoiCuaNhom3ChungToi", 13, 10, "$" player_message db "PLAYER $" win_message db " WIN!$" type_message db "TYPE A POSITION: $" ends stack segment dw 128 dup(?) ends extra segment ends code segment start: ; khoi tao ds mov ax, data mov ds, ax mov ax, extra mov es, ax ; bat dau game call set_game_pointer main_loop: call clear_screen lea dx, game_start_message call print lea dx, new_line call print lea dx, player_message call print lea dx, player call print lea dx, new_line call print lea dx, game_draw call print lea dx, new_line call print lea dx, type_message call print ; doc vi tri call read_keyboard ; tinh toan vi tri sub al, 49 mov bh, mov bl, al call update_draw call check ; kiem tra xem tro choi ket thuc chua cmp win_flag, je game_over call change_player jmp main_loop change_player: lea si, player xor ds:[si], ret update_draw: mov bl, game_pointer[bx] mov bh, lea si, player cmp ds:[si], "0" je draw_x cmp ds:[si], "1" je draw_o draw_x: mov cl, "x" jmp update draw_o: mov cl, "o" jmp update update: mov ds:[bx], cl ret check: call check_line ret check_line: mov cx, check_line_loop: cmp cx, je first_line cmp cx, je second_line second_line: mov si, jmp do_check_line do_check_line: inc cx cmp cx, je third_line call check_column ret first_line: mov si, jmp do_check_line third_line: mov si, jmp do_check_line mov bh, mov bl, game_pointer[si] mov al, ds:[bx] cmp al, "_" je check_line_loop inc mov cmp jne inc mov cmp jne mov ret si bl, game_pointer[si] al, ds:[bx] check_line_loop si bl, game_pointer[si] al, ds:[bx] check_line_loop win_flag, check_column: mov cx, check_column_loop: cmp cx, je first_column cmp cx, je second_column cmp cx, je third_column call check_diagonal ret first_column: mov si, jmp do_check_column do_check_column: inc cx second_column: mov si, jmp do_check_column third_column: mov si, jmp do_check_column mov bh, mov bl, game_pointer[si] mov al, ds:[bx] cmp al, "_" je check_column_loop add mov cmp jne add mov si, bl, game_pointer[si] al, ds:[bx] check_column_loop si, bl, game_pointer[si] cmp jne mov ret al, ds:[bx] check_column_loop win_flag, check_diagonal: mov cx, check_diagonal_loop: cmp cx, je first_diagonal cmp cx, je second_diagonal ret first_diagonal: mov si, mov dx, jmp do_check_diagonal do_check_diagonal: inc cx second_diagonal: mov si, mov dx, jmp do_check_diagonal mov bh, mov bl, game_pointer[si] mov al, ds:[bx] cmp al, "_" je check_diagonal_loop add mov cmp jne add mov si, dx bl, game_pointer[si] al, ds:[bx] check_diagonal_loop si, dx bl, game_pointer[si] cmp jne mov ret al, ds:[bx] check_diagonal_loop win_flag, game_over: call clear_screen lea dx, game_start_message call print lea dx, new_line call print lea dx, game_draw call print lea dx, new_line call print lea dx, game_over_message call print lea dx, player_message call print lea dx, player call print lea dx, win_message call print jmp fim set_game_pointer: lea si, game_draw lea bx, game_pointer mov cx, loop_1: cmp cx, je add_1 cmp cx, je add_1 jmp add_2 add_1: add si, jmp add_2 add_2: mov ds:[bx], si add si, inc bx loop loop_1 ret print: ; in noi dung dx mov ah, int 21h ret clear_screen: mov ah, 0fh int 10h mov ah, int 10h ret read_keyboard: ; doc keybord tra ve noi dung ah mov ah, int 21h ret fim: jmp fim code ends end start 3.Giải thích mã nguồn: data segment new_line db 13, 10, "$" game_draw db "_|_|_", 13, 10 db "_|_|_", 13, 10 db "_|_|_", 13, 10, "$" game_pointer db DUP(?) win_flag db player db "0$" game_over_message db "Chuc mung ban da gianh chien thang!", 13, 10, "$" game_start_message db "ChaoMungCacBanDenVoiTroChoiCuaNhom3ChungToi", 13, 10, "$" player_message db "PLAYER $" win_message db " WIN!$" type_message db "TYPE A POSITION: $" ends stack segment dw 128 dup(?) ends -Dữ liệu chương trình(data) main_loop: call clear_screen ; gọi hàm clear_screen lea dx, game_start_message ; trỏ đến game_start_message call print; gọi đến hàm print để in lea dx, new_line; trỏ đến new_line call print lea dx, player_message;trỏ đến player_message call print lea dx, player;trỏ đến player call print lea dx, new_line; trỏ đến new_line call print lea dx, game_draw; trỏ đến game_draw call print lea dx, new_line; trỏ đến new_line call print lea dx, type_message; trỏ đến type_message call print -Trỏ đến liệu data để in ; ; doc vi tri call read_keyboard tinh toan vi tri sub al, 49 ; al=al-49 mov bh, 0; gán cho bh=0 mov bl, al; bl=al call update_draw ; gọi hàm update_draw call check; gọi hàm check -Đọc vị trí Tính tốn ; kiem tra xem tro choi ket thuc chua cmp win_flag, 1; so sánh win_flag với je game_over; win_flag=1 call change_player; gọi hàm change_player jmp main_loop -Kiểm tra xem trò chơi kết thúc chưa change_player: lea si, player xor ds:[si], ret -Hoán đổi người chơi(Player 0, Player 1) update_draw: mov bl, game_pointer[bx] mov bh, lea si, player; trỏ đến player cmp ds:[si], "0";so sánh nội dung địa si với “0” je draw_x ; nội dung địa si=”0” thi nhảy đến draw_x cmp ds:[si], "1";so sánh nội dung địa si với”1” je draw_o ;nếu nội dung địa si=”1” nhảy đến draw_o draw_x: mov cl, "x"; gán cl=”X” jmp update draw_o: mov jmp update: mov ret cl, "o" ; gán cl=”o” update ds:[bx], cl -Cập nhật vẽ bắt đầu khởi tạo”X” “O” vào bảng check_line: mov cx, check_line_loop: cmp cx, 0; so sánh cx với je first_line; nhảy đến first_line cmp cx, 1; so sanh cx với je second_line; nhảy đến second_line second_line: mov si, 3;gán si=3 jmp do_check_line do_check_line: inc cx cmp cx, 2; so sánh cx với je third_line ; nhảy đến first_line call check_column ret first_line: mov si, 0; gán si=0 jmp do_check_line third_line: mov si, 6; gán si=6 jmp do_check_line mov bh, mov bl, game_pointer[si] mov al, ds:[bx] cmp al, "_" je check_line_loop inc mov cmp jne inc mov cmp jne mov ret si bl, game_pointer[si] al, ds:[bx] check_line_loop si bl, game_pointer[si] al, ds:[bx] check_line_loop win_flag, -Kiểm tra dòng(check line) check_column: mov cx, 0; gán cx=0 second_column: mov si, 1; gán si=1 jmp do_check_column do_check_column: inc cx check_column_loop: cmp cx, 0; so sánh cx với je first_column; nhảy đến first_line cmp cx, je second_column; cx=1 nhảy đến second_line cmp cx, je third_column ; cx=2 nhảy đến third_column call check_diagonal ret first_column: mov si, 0; gán si=0 jmp do_check_column third_column: mov si, 2; gán si=2 jmp do_check_column mov bh, 0;gán bh=0 mov bl, game_pointer[si]; gán cho bl giá trị địa si game_pointer mov al, ds:[bx]; al=nội dung địa bx cmp al, "_"; so sanh al với “_” je check_column_loop add mov cmp jne add mov cmp jne si, 3;si=si+3 bl, game_pointer[si]; gán bl=địa si game_pointer[si] al, ds:[bx];so sánh al với địa bx check_column_loop si, bl, game_pointer[si] al, ds:[bx] check_column_loop mov ret -Kiểm win_flag, tra vòng lặp cột( cột ngang, cột dọc) check_diagonal: mov cx, check_diagonal_loop: cmp cx, je first_diagonal cmp cx, je second_diagonal ret first_diagonal: mov si, ; gán si=0 mov dx, ; gán dx=4 jmp do_check_diagonal do_check_diagonal: inc cx second_diagonal: mov si, 2;si=2 mov dx, 2;dx=2 jmp do_check_diagonal mov bh, 0;bh=0 mov bl, game_pointer[si] mov al, ds:[bx] cmp al, "_" je check_diagonal_loop add mov cmp jne add si, dx; si=si+dx bl, game_pointer[si] ;bl=địa si game_pointer al, ds:[bx]; al=nội dung địa bx check_diagonal_loop si, dx mov cmp jne mov ret bl, game_pointer[si] al, ds:[bx] check_diagonal_loop win_flag, -Kiểm tra đường chéo game_over: call clear_screen lea dx, game_start_message; trỏ đến game_start_message call print; gọi hàm print lea dx, new_line call print lea dx, game_draw call print lea dx, new_line call print lea dx, game_over_message call print lea dx, player_message call print lea dx, player call print lea dx, win_message call print jmp fim -Kết thúc trò chơi print: ; in noi dung dx mov ah, int 21h ret -In nội dung dùng hàm mov ah,9 int 21h - 4.Demo _Nếu Player dấu “X” hang dọc, hang ngang, đường chéo chiến thắng trị chơi _Nếu Player dấu “O” hang dọc, hàng ngang, đường chéo chiến thắng trị chơi ... cho tập tốt Chúng em xin chân thành cảm ơn! I - Q TRÌNH THỰC HIỆN Lựa chọn đề tài: Trị chơi Tik Tae Tok( tên gọi khác Cờ Caro) Tìm hiểu kiến thức internet cách thức làm việc, thảo luận Code nạp