tiện ích online

TIỆN ÍCH ONLINE

Tin tức cập nhật

Thống kê

  • truy cập   (chi tiết)
    trong hôm nay
  • lượt xem
    trong hôm nay
  • thành viên
  • thống kê truy cập

    free counters

    HỌP MẶT VIOLET OPEN HÈ 2017

    Gốc > Lập trình Flash >

    Bài 54: Trò chơi điền từ

    Trò chơi điền từ
    [Hoàng Ngọc Giao]

    Theo đề nghị của một bạn đọc, trong bài này ta thử vận dụng kiến thức về xử lý tình huống gõ phím để làm trò chơi điền từ. Thực chất, trò chơi là cách thức kiểm tra kiến thức đã được dùng phổ biến trong việc học ngoại ngữ: hiển thị một câu có chừa trống một phần để người chơi điền vào. Bảng 1 giúp bạn hình dung những câu như vậy.

    Bảng 1 - Câu hỏi điền từ

    STT

    Câu hỏi

    Trả lời

    1

    He has dinner __ home.

    at

    2

    My father w____ hard everyday.

    orks

    3

    How many people are _____ in your family?

    there

    4

    In the afternoon, I __ my homework at home.

    do

    5

    She walks _o the farm and picks the vegetables.

    t

    6

    My little daughter is interested __ dancing.

    in

    7

    I am hungry. Let's go to the f___ stall.

    ood

    8

    I like to ____ the piano, too.

    play

    9

    What ____ your father do?

    does

    10

    They go to school ____ Monday to Friday.

    from

    11

    Mai likes flowers because ____ are beautiful.

    they

    12

    After dinner, my mother checks my homework b_____ bedtime.

    efore

    13

    I want to see the animals. Let's go to the ___.

    zoo

    14

    I'd like __ orange, please.

    an

    15

    Today I go shopping because I want to b__ some new clothers.

    uy

    16

    Let's buy a big present ___ her birthday party.

    for

    17

    This is the story ab___ my uncle Minh.

    out

    18

    Write your name __ the board, please.

    on

    19

    The museum __ behind the park.

    is

    20

    Are you a teacher __ a doctor?

    or

    Việc đầu tiên cần làm là đưa bảng 1 vào chương trình. Bạn hãy khởi động Flash và mở bảng Actions - Frame ứng với khung 1. Để biểu diễn một bảng gồm nhiều hàng và cột trong chương trình, ta dùng dãy hai chiều như sau:
    var words = [["He has dinner __ home.", "at"],["My father w____ hard everyday.", "orks"],["How many people are _____ in your family?", "there"],["In the afternoon, I __ my homework at home.", "do"],["She walks _o the farm and picks the vegetables.", "t"],["My little daughter is interested __ dancing.", "in"],["I am hungry. Let's go to the f___ stall.", "ood"],["I like to ____ the piano, too.", "play"],["What ____ your father do?", "does"],["They go to school ____ Monday to Friday.", "from"],["Mai likes flowers because ____ are beautiful.", "they"],["After dinner, my mother checks my homework b_____ bedtime.", "efore"],["I want to see the animals. Let's go to the ___.", "zoo"],["I'd like __ orange, please.", "an"],["Today I go shopping because I want to b__ some new clothers.", "uy"],["Let's buy a big present ___ her birthday party.", "for"],["This is the story ab___ my uncle Minh.", "out"],["Write your name __ the board, please.", "on"],["The museum __ behind the park.", "is"],["Are you a teacher __ a doctor?", "or"]];
    Câu lệnh vừa nêu định nghĩa biến words. Bạn có thể dùng từ chốt var hoặc không khi định nghĩa biến toàn cục (không nằm trong hàm nào). Luôn dùng từ chốt var khi định nghĩa biến giúp ta dễ nhận ra định nghĩa biến, làm cho chương trình dễ đọc hơn.
    Biến words trỏ đến một dãy hai chiều, tức là một dãy mà mỗi phần tử của nó cũng là một dãy. Chẳng hạn, phần tử đầu của dãy words là dãy gồm hai phần tử ["He has dinner __ home.", "at"], chứa câu hỏi và câu trả lời tương ứng.

    Bạn hiểu ngay: "dãy mẹ" biểu diễn các hàng của bảng 1, "dãy con" biểu diễn các cột. Khi viết dãy hai chiều như trên, dù có nhiều câu hỏi, bạn đừng gõ phím Enter để xuống dòng vì Flash sẽ hiểu nhầm rằng bạn muốn kết thúc câu lệnh.

    Có được "kho câu hỏi" (bạn có thể bổ sung để có càng nhiều câu hỏi càng tốt), ta cần tính đến ngay việc hiển thị câu hỏi. Ta sẽ dùng khung chữ động (dynamic text) vào việc này.
    Trước hết, bạn nên quy định màu nền cho sân khấu. Bạn bấm vào sân khấu, mở bảng Properties để thấy những thuộc tính ứng với sân khấu. Bạn bấm nút Background, chọn màu nào đó trong bảng màu.
    Bạn chọn công cụ Text Tool (hoặc gõ phím T), căng khung chữ khá rộng trên sâu khấu (vì câu hỏi có thể khá dài). Sau này, phần còn trống bên ngoài khung chữ có thể dùng để hiển thị điểm số, mức chơi và các hình trang trí vui mắt.
    Bảng Properties tự động trình bày những thuộc tính của khung chữ (hình 1). Trong ô liệt kê Text Type, bạn chọnDynamic Text. Bấm vào ô Instance Name, bạn gõ sentence để đặt tên cho khung chữ. Trong ô Line Type, bạn chọn Multiline để khung chữ có thể cuộn chữ xuống dòng khi hiển thị câu hỏi dài. Bạn bấm nút Text (fill) color, chọn màu chữ sao cho nổi bật trên màu nền đã quy định.
     
    Bạn đóng bảng Properties, chọn công cụ Selection Tool (hoặc gõ phím V), bấm vào sân khấu để thôi chọn khung chữ vừa tạo ra. Trở lại với bảng Actions - Frame, bạn viết thêm như sau để hiển thị câu hỏi đầu tiên trong khung chữ:

    ...

    var index = 0;

    displayQuestion();

     

    function displayQuestion() {

      sentence.text = words[index][0];

    }

    Đoạn mã vừa thêm gán trị 0 cho biến toàn cục index và gọi hàm displayQuestion để hiển thị câu hỏi tương ứng với trị số của biến index. Chắc chắn ta sẽ còn thay đổi trị số của index và dùng hàm displayQuestion ở chỗ khác trong chương trình.
    Trong định nghĩa hàm displayQuestion, ta quy định nội dung của khung chữ (biến sentence.text) bằng cách lấy câu hỏi từ dãy words (phần tử ở hàng index, cột 0).
    Ấn Ctrl+Enter để chạy thử chương trình, bạn thấy câu hỏi đầu tiên xuất hiện như ý (hình 2).
     
    Sau khi hiển thị câu hỏi, ta cần "lắng nghe" bàn phím để biết người chơi gõ những phím gì và hiển thị các ký tự được gõ vào chỗ trống trong câu hỏi. Bạn giao nhiệm vụ lắng nghe bàn phím cho khung chữ sentence bằng cách viết thêm vào chương trình như sau:

    ...

    sentence.onKeyDown = doKeyDown;

    Key.addListener(sentence);

     

    function doKeyDown() {

    }

    Đoạn mã vừa thêm quy định hàm xử lý tình huống onKeyDown của khung chữ sentence là hàm doKeyDown. Theo "thủ tục" đã biết, bạn còn phải thêm câu lệnh đăng ký Key.addListener(sentence); để khung chữ sentence thực sự được phép lắng nghe bàn phím.
    Bạn định nghĩa hàm doKeyDown như sau để nhận từng ký tự được gõ và đưa vào chỗ trống của câu hỏi:

    ...

    sentence.onKeyDown = doKeyDown;

    Key.addListener(sentence);

     

    var chars = "";

    function doKeyDown() {

      var ch = String.fromCharCode(Key.getAscii());

      if(ch == "")

        return;

      chars += ch;

      displayChars();

    }

     

    function displayChars() {

      var str = words[index][0];

      var ndx = str.indexOf("_");

      var ndx2 = str.lastIndexOf("_");

      str = str.substring(0, ndx) + chars + str.substring(++ndx2);

      sentence.text = str;

    }

    Trong hàm doKeyDown, ta dùng hàm fromCharCode của lớp String để có được ký tự tương ứng với mã ASCII nhận từ bàn phím. Nếu người chơi gõ các phím điều khiển (phím Shift, phím Ctrl,...), hàm String.fromCharCode trả về chuỗi rỗng "". Trong trường hợp đó, không cần làm gì cả:

    var ch = String.fromCharCode(Key.getAscii());

    if(ch == "")

      return;

    Nếu chuỗi do hàm String.fromCharCode trả về không phải là chuỗi rỗng, tức là thực sự nhận được một ký tự, ta "cộng" ký tự đó vào chuỗi chars và gọi hàm displayChars. Hàm displayChars đọc câu hỏi, tách lấy phần phía trước ký tự "gạch dưới" đầu tiên (phần đầu), tách lấy phần phía sau ký tự "gạch dưới" sau cùng (phần đuôi), từ đó tạo ra chuỗi mới gồm phần đầu, phần giữa (biến chars) và phần đuôi. Chuỗi đó được đưa vào khung chữ sentence.
    Bạn thử chạy chương trình và gõ vài phím xem sao nha.

    Nhắn tin cho tác giả
    Đỗ Thanh Dương @ 07:57 06/04/2012
    Số lượt xem: 1206
    Số lượt thích: 0 người
     
    Gửi ý kiến

    HỖ TRỢ QUẢN TRỊ WEBSITE

    Thay tên website / Chọn thư mục / Mở ra
    Giao diện Module Thư mục Thành viên Tài nguyên Xóa Code
    http://