[Dịch] Beginning C++ Game Programming,dành cho những ai chưa học C++

Thảo luận trong 'Lập trình & Đồ hoạ' bắt đầu bởi Hyutars, 1/12/06.

  1. Hyutars

    Hyutars Mario & Luigi

    Tham gia ngày:
    26/11/05
    Bài viết:
    713
    Nơi ở:
    Ragnarok World
    Bài 2.6: Dùng vòng lặp do

    Giống như vòng lặp while, vòng lặp do cho phép bạn lặp lại một đoạn code dựa theo điều kiện nào đó. Điểm khác biệt của vòng lặp do là nó kiểm tra điều kiện sau khi thực hiện mỗi vòng lặp (while là kiểm tra điều kiện trước mỗi vòng lặp). Có nghĩa là, thân vòng lặp luôn được thực hiện ít nhất một lần. Sau đây là cú pháp:

    Mã:
    do
         statement;
    while (expression);
    Chương trình thi hành statement trước, sau đó mới kiểm tra expression, nếu nó true, vòng lặp sẽ tiếp tục. Ngược lại, nếu expression trả về giá trị false thì vòng lặp sẽ kết thúc.

    Giới thiệu chương trình Play Again 2.0:

    Chương trình Play Again 2.0 giống y như chương trình Play Again ở bài trước. Chỉ có điều chương trình dùng vòng lặp do thay cho vòng lặp while. Hình 2.6 cho thấy chương trình đang hoạt động:

    [​IMG]

    Mã:
    // Play Again 2.0
    // Demonstrates do loops
    
    #include <iostream>
    
    using namespace std;
    
    int main()
    {
        char again;
        do
        {
            cout << "\n**Played an exciting game**";
            cout << "\nDo you want to play again? (y/n):";
            cin >> again;
        } while (again == 'y');
    
        cout << "\nOkay, bye.";
    
        return 0;
    }
    Tạo vòng lặp với do:

    Trước khi vòng lặp do bắt đầu, tôi khai báo biến again thuộc kiểu char. Tôi không cần phải khởi tạo nó vì nó chưa được kiểm tra cho đến khi chương trình thực hiện xong vòng lặp thứ nhất. Tôi nhận giá trị mới cho biến again từ người chơi ở thân vòng lặp. Sau đó tôi kiểm tra expression. Nếu nó bằng ‘y’, vòng lặp được lặp lại, ngược lại, vòng lặp kết thúc.

    Trong thực tế: Mặc dù bạn có thể dùng vòng lặp while và do để thay thế lẫn nhau, nhưng đa số lập trình viên thường dùng vòng lặp while. Có thể là vòng lặp do nhìn tự nhiên hơn trong một số trường hợp, nhưng lợi thế của vòng lặp while là expression xuất hiện ngay phía trên vòng lặp, bạn không cần phải tìm kiếm đến dòng cuối của vòng lặp để thấy nó.

    Bẫy: Nếu bạn đã từng mắc kẹt khi chơi một game nào đó bởi chu trình không bao giờ kết thúc, bạn đã có kinh nghiệm về vòng lặp vô hạn (infinite loop) – vòng lặp không bao giờ kết thúc. Sau đây là một ví dụ đơn giản của vòng lặp vô hạn:

    Mã:
    int test = 10;
    while (test == 10)
        cout << test;
    Trong trường hợp này, vòng lặp được thực hiện vì test là 10. Nhưng vì test không bao giờ thay đổi, vòng lặp sẽ không bao giờ kết thúc. Kết quả, người dùng phải “kill” chương trình đang chạy để kết thúc nó. Bài học? Hãy luôn chắc rằng expression của vòng lặp đến một lúc nào đó phải trả về giá trị false.
    (hyutars: Có một số kĩ thuật lập trình rất hay dùng vòng lặp vô hạn, chẳng hạn như để tạo menu ... nếu bạn muốn xài vòng lặp vô hạn thì nhớ dùng break hoặc exit(1) để kết thúc nó, bạn không cần vội, cứ học đến các bài sau thì bạn sẽ biết ^^).
     
  2. Hyutars

    Hyutars Mario & Luigi

    Tham gia ngày:
    26/11/05
    Bài viết:
    713
    Nơi ở:
    Ragnarok World
    Dùng câu lệnh break và continue:

    Chúng ta có thể dung 2 câu lệnh này để thay đổi quy luật bình thường của vòng lặp. Bạn có thể thoát khỏi vòng lặp với câu lệnh break, và bạn có thể nhảy đến phần đầu vòng lặp với câu lệnh continue. Nó rất hữu dụng trong một số trường hợp.

    Giới thiệu chương trình Finicky Counter:

    Chương trình Finicky Counter đếm từ 1 đến 10 bằng cách sử dụng vòng lặp while. Nó finicky (khó tính) vì nó không thích số 5 – nó sẽ bỏ qua con số này. Hình 2.7 cho thấy chương trình đang hoạt động:

    [​IMG]
    Hình 2.7 – Số 5 được bỏ qua với câu lệnh continue, và vòng lặp kết thúc với câu lệnh break.

    Mã:
    // Finicky Counter
    // Demonstrates break and continue statements
    
    #include <iostream>
    using namespace std;
    
    int main()
    {
    
        int count = 0;
        while (true)
        {
    
           count += 1;
    
           //end loop if count is greater than 10
           if (count > 10)
               break;
    
          //skip the number 5
          if (count == 5)
              continue;
    
          cout << count << endl;
       }
    
       return 0;
    }
    Tạo vòng lặp while(true):

    Tôi tạo vòng lặp với dòng này:

    Mã:
    while (true)
    Kĩ thuật này dùng để tạo nên một vòng lặp vô hạn. Nó có vẻ kì cục đúng không? Vì tôi đã cảnh báo là coi chừng rơi vào vòng lặp vô hạn. Nhưng thực ra đây không phải là vòng lặp vô hạn thực sự vì tôi để điều kiện thoát cho nó ở thân vòng lặp.

    Lưu ý: Mặc dù while (true) nhìn có vẻ rõ ràng hơn vòng lặp truyền thống, nhưng bạn cũng nên cố gắng hạn chế dùng vòng lặp này. Nếu chương trình có sử dụng vòng lặp while (true), nó thường là vòng lặp chính bao gồm một số lượng lớn code.

    Dùng câu lệnh break để thoát khỏi vòng lặp:

    Sau đây là điều kiện thoát khỏi mà tôi đặt vào vòng lặp:

    Mã:
    //end loop if count is greater than 10
    if (count > 10)
        break;
    Vì count được tăng lên 1 mỗi lần thân vòng lặp bắt đầu, cho nên nó sẽ đạt giá trị 11. Khi đó, câu lệnh break (có nghĩa là thoát khỏi vòng lặp) được thực thi và vòng lặp kết thúc.

    Dùng câu lệnh continue để nhảy về phần đầu vòng lặp:

    Trước khi biến count được xuất ra màn hình, tôi đặt đoạn code này:

    Mã:
    //skip the number 5
    if (count == 5)
        continue;
    Câu lệnh continue có nghĩa là “nhày về phần đầu vòng lặp”. Ở phần đầu vòng lặp (while (true)), điều kiện của vòng lặp while được kiểm tra và vòng lặp được thực thi lần nữa (vì nó là true). Cho nên khi count bằng 5, chương trình không đến được dòng cout << count << endl;. Thay vào đó, nó quay trở lại phần đầu của vòng lặp. Như kết quả, 5 được bỏ qua và không bao giờ được hiển thị.

    Hiểu khi nào dùng break và continue:

    Bạn có thể dùng break và continue trong mọi vòng lặp mà bạn tạo ra, chúng không chỉ dành cho vòng lặp while. Nhưng bạn nên dùng chúng ở một mức vừa phải. Nếu không sẽ rất khó xác định đường đi của vòng lặp.
     
  3. tuthanden03

    tuthanden03 Mr & Ms Pac-Man

    Tham gia ngày:
    31/8/06
    Bài viết:
    272
    Nơi ở:
    Bãi Cỏ Mênh Mông....
    cám ơn anh Hyutars bản thân em rất thích lắp ráp cài đặt ,lập trình vi tính nhưng vì bây giờ em đang bận học ôn thi đại học
    những bài của anh rất hửu ích cho em tập tành vào lập trình . Mong anh rãnh dịch nhìu hơn cho em và mọi người cùng học hỏi
    cám ơn anh nhiều
     
  4. Hyutars

    Hyutars Mario & Luigi

    Tham gia ngày:
    26/11/05
    Bài viết:
    713
    Nơi ở:
    Ragnarok World
    Đầu tiên rất cám ơn bạn đã ủng hộ :D . Sự thực là mình mới thi xong, tưởng rãnh lắm, ai ngờ bây giờ trường nó chơi ác, bắt học kinh dị luôn, học cả ngày, ca tối cũng có, học cả chủ nhật, giờ suy ra lúc ôn thi còn rảnh hơn :whew: . Mình sẽ cố gắng có bản dịch tiếp theo, tối nay nếu thức được thì mai mình sẽ up ::)
     
  5. trantien2006

    trantien2006 Youtube Master Race

    Tham gia ngày:
    22/1/07
    Bài viết:
    5
    bai hay wa anh oi
    co gi anh giang not cho tui em nghe voi
    uh :x :x ::) ::( :D :D :D :D
     
  6. Hyutars

    Hyutars Mario & Luigi

    Tham gia ngày:
    26/11/05
    Bài viết:
    713
    Nơi ở:
    Ragnarok World
    Cám ơn bạn, mình sẽ cố gắng ^^
    Bài 2.8: Dùng toán tử logic:

    Cho đến lúc này bạn đã khá nhuần nhuyễn khi xác định giá trị true hay false của các biểu thức (expression). Bạn có thể kết hợp các biểu thức với nhau bởi toán tử logic để tạo thành một biểu thức phức tạp hơn. Bảng 2.2 cho thấy danh sách các toán tử:

    [​IMG]
    Giới thiệu chương trình Designers Network:

    Chương trình Designers Network tài hiện lại một mạng máy tính, trong đó chỉ có những thành viên của nhóm game designers mới được truy cập. Giống như trong hệ thống máy tính ngoài đời vậy, mỗi member phải nhập tên (Username) và mật mã (Password) để login. Nếu login thành công, member đó sẽ được chào mừng. Guest (khách) cũng có thể login, nhưng quyền (hyutars: trong bản gốc là security level, nhưng mình thấy để từ này thích hợp hơn) của họ thấp hơn member. Để login với tư cách là guest, người dùng phải nhập vào từ “guest” ở ô username hoặc pasword. Hình 2.8 cho đến hình 2.10 cho thấy chương trình đang hoạt động:

    [​IMG]
    Hình 2.8: Nếu bạn không phải là member hoặc guest, bạn không thể login.

    [​IMG]
    Hình 2.9: Nếu bạn login với tư cách là guest, quyền (biến security) của bạn sẽ được set ở mức thấp.

    [​IMG]
    Hình 2.10: Có vẻ như một người thuộc nhóm member login.

    Mã:
    // Designers Network
    // Demonstrates logical operators
    
    #include <iostream>
    #include <string>
    
    using namespace std;
    
    int main()
    {
        cout << "\tGame Designer's Network\n";
        int security = 0;
    
        string username;
        cout << "\nUsername:";
        cin >> username;
    
        string password;
        cout << "Password:";
        cin >> password;
    
        if (username == "S.Meier" && password == "civilization")
        {
            cout << "\nHey, Sid.";
            security = 5;
    }
    
        if (username == "S.Miyamoto" && password == "mariobros")
        {
            cout << "\nWhat's up, Shigeru?";
            security = 5;
        }
    
        if (username == "W.Wright" && password == "thesims")
        {
            cout << "\nHow goes it, Will?";
            security = 5;
        }
    
        if (username == "guest" || password == "guest")
        {
            cout << "\nWelcome, guest.";
            security = 1;
        }
    
        if (!security)
             cout << "\nYour login failed.";
    
        return 0;
    }
    Dùng toán tử logic AND:

    Toán tử logic AND, &&, cho phép bạn kết hợp hai expression (biểu thức) thành một cái lớn hơn, expression lớn hơn này cũng trả về giá trị true và false. Expression lớn là true khi và chỉ khi cả hai expression nhỏ là true; ngược lại, nó là false. Trong tiếng Anh, “and” có nghĩa là cả hai. Cả hai expression nhỏ phải là true để expression lớn là true. Sau đây là ví dụ cụ thể từ chương trình Designers Network:

    Mã:
    if (username == "S.Meier" && password == "civilization")
    Expression: username == "S.Meier" && password == "civilization" là true khi và chỉ khi cả hai expression username == "S.Meier" và password == "civilization" là true. Đoạn code này hoạt động rất tốt vì tôi chỉ muốn cho Sid được truy cập nếu anh ta nhập đúng cả username và password. Những người khác sẽ không vào được tài khoản của anh ta.

    Một cách khác để hiểu toàn tử && hoạt động như thế nào, đó là nhìn vào bảng 2.3 sau đây:

    [​IMG]

    Tất nhiên, chương trình Designers Network cũng cho phép các user khác ngoài Sid Meier. Thông qua một dãy các câu lệnh if và toán tử &&, chương trình kiểm tra tiếp 3 cặp username và password nữa. Nếu người dùng nhập đúng, anh ta sẽ được chào mừng và được cấp phát security level (hyutars: dịch là “quyền” cho dễ hiểu nhé).

    Dùng toán tử logic OR:

    Toán tử logic OR, ||, cho phép bạn kết hợp hai expression (biểu thức) thành một cái lớn hơn, expression lớn hơn này cũng trả về giá trị true và false. Expression lớn là true khi có ít nhất một trong hai expression nhỏ là true; ngược lại (tức là cả hai expression nhỏ đều false), nó là false. Trong tiếng Anh, “or” có nghĩa là “hoặc”. Nếu có ít nhất một trong hai expression là true thì expression lớn sẽ là true. Sau đây là ví dụ từ chương trình Designers Network:

    Mã:
    if (username == "guest" || password == "guest")
    Expression: username == "guest" || password == "guest" là true nếu username == "guest" là true hoặc password == "guest" là true (nếu cả hai cái true luôn thì càng tốt). Nếu người dùng nhập vào từ guest ở ô username hay ở ô password hoặc cả hai thì người dùng được login vào với tư cách là guest.

    Sau đây là bảng 2.4 để minh họa toàn tử OR ( || ):

    [​IMG]

    Dùng toán tử logic NOT:

    Toán tử logic NOT, ! (dấu cảm than), cho phép bạn hoán đổi giữa giá trị true và false của một biểu thức. Nếu expression ban đầu là true, expression mới sẽ là false; nếu expression ban đầu là false, expression mới sẽ là true. Giống như trong tiếng Anh, “not” có nghĩa là ngược lại. Expression mới có giá trị ngược lại với expression ban đầu. Sau đây là ví dụ:

    Mã:
    if (!security)
    Expression: !security là true khi security là false (hoặc 0). Trong chương trình, biến security là 0 khi và chỉ khi việc login bị thất bại, trong trường hợp này, tôi sẽ thông báo cho người dùng biết việc login đã thất bại: Your login failed.
    Expression !security là false khi security là true hoặc là một giá trị khác 0. Nếu security khác 0, người dùng đăng nhập thành công, thông điệp Your login failed sẽ không xuất hiện.
    Nhìn vào bảng 2.5 để hiểu hơn về toán từ !:

    [​IMG]

    Độ ưu tiên của các toán tử:

    Giống như các toán tử số học, toán tử logic cũng có độ ưu tiên quy định cái nào được thực hiện trước và cái nào được thực hiện sau. Toán tử logic NOT, !, có độ ưu tiên cao hơn toán tử AND, &&, và toán tử này lại có độ ưu tiên cao hơn OR, || (! > && > ||).
    Giống như toán tử số học, nếu bạn muốn toán tử có độ ưu tiên thấp hơn được thực hiện trước thì hãy để nó trong dấu ngoặc đơn. Bạn có thể tạo ra biểu thức (expression) phức tạp bao gồm toán tử số học, toán tử quan hệ và toán tử logic. Độ ưu tiên của toán tử quyết định thứ tự thực hiện. Như thế nào đi nữa, tốt nhất là nên tạo ra các expression đơn giản dễ nhìn, sẽ không có ai phải nhìn vào bảng thứ tự ưu tiên để đọc trật tự expression của bạn cả.
    Để xem bảng độ ưu tiên của các toán tử các bạn có thể lục lại ở mấy bài trước, mình đã post rồi.

    Mẹo: Nếu bạn dùng dấu ngoặc đơn trong một expression lớn để thay đổi trật tự thực hiện, bạn nên dùng redundant parentheses (dấu ngoặc đơn thừa) – dấu này không làm thay đổi giá trị của expression – nó làm cho expression rõ ràng hơn. Ví dụ:

    Mã:
    (username == "S.Meier" && password == "civilization")
    Bây giờ hãy thử dùng dấu ngoặc đơn thừa:

    Mã:
    ((username == "S.Meier") && (password == "civilization"))
    Dấu ngoặc đơn thừa không làm thay đổi giá trị của expression lớn, nhưng nó giúp tách biệt hai expression nhỏ hơn. Đoạn code trông có vẻ rõ ràng hơn đúng không?
    Dùng dấu ngoặc đơn thừa là một thủ thuật nhỏ trong các thủ thuật lập trình, sử dụng các thủ thuật lập trình? đó là công việc mà bạn – một lập trình viên giỏi – phải làm.
     
  7. tuthanden03

    tuthanden03 Mr & Ms Pac-Man

    Tham gia ngày:
    31/8/06
    Bài viết:
    272
    Nơi ở:
    Bãi Cỏ Mênh Mông....
    em hiện chưa biết gì về lập trình nhưng đang mon mem mún hiểu biết về C++ nên ai co thì chỉ chổ cho em down với
    cám ơn trước
     
  8. Hyutars

    Hyutars Mario & Luigi

    Tham gia ngày:
    26/11/05
    Bài viết:
    713
    Nơi ở:
    Ragnarok World
    Sách về C++ thì có rất nhiều đấy ^^, bạn vào manguon.com mà download, giờ đang chuẩn bị về Tết, bài tiếp theo đã dịch nhưng để trong máy tính rồi, về quê tui ra net up liền


    Mới dịch xong nhưng ra quán net thì chẳng có word, mới về quê nên chưa kiếm ra quán ngon T_T
     
  9. Hyutars

    Hyutars Mario & Luigi

    Tham gia ngày:
    26/11/05
    Bài viết:
    713
    Nơi ở:
    Ragnarok World
    Bài 2.9: Tạo ra một số random (ngẫu nhiên)

    Những tình huống không thể dự đoán trước được sẽ làm nên sự hấp dẫn cho game. Chẳng hạn, sự thay đổi chiến thuật bất ngờ của đối thủ trong game dàn trận, hoặc sự xuất hiện bất ngờ của một con quái vật trong action game. Tạo nên một con số ngẫu nhiên là một kĩ thuật cơ bản của dạng này.

    Giới thiệu chương trình Die Roller: (đổ xúc xắc)

    Chương trình Die Roller tái hiện lại việc đổ một con xúc xắc có sáu mặt. Máy tính sẽ tính toán mặt nào sẽ xuất hiện một cách ngẫu nhiên. Hình 2.11 cho thấy kết quả của chương trình:

    [​IMG]
    Hình 2.11: Chương trình tạo ra một con số ngẫu nhiên.

    Gọi hàm rand():

    Một trong những điều tôi làm đầu tiên là include file mới:

    Mã:
    #include <cstdlib>
    File cstdlib chứa những hàm tương tác với con số ngẫu nhiên. Vì tôi đã include nó, tôi được phép gọi hàm thuộc file này, cụ thể là hàm rand(), đó là những gì tôi làm ở hàm main():

    Mã:
    int randomNumber = rand(); //tạo một con số ngẫu nhiên

    Như bạn đã học ở Chương 1, hàm là một đoạn code có thể làm việc gì đó, sau đó trả lại một giá trị. Bạn gọi hàm bằng cách sử dụng tên nó, sau đó là hai dấu ngoặc đơn, (hyutars: bên trong hai dấu ngoặc đơn có thể có các đổi). Nếu hàm trả về một giá trị, bạn có thể gán giá trị đó cho một biến. Tôi sử dụng một câu lệnh gán, gán giá trị trả về của hàm rand() (một con số ngẫu nhiên) cho biến randomNumber.

    Lưu ý: Hàm rand() tạo ra một con số ngẫu nhiên từ 0 đến ít nhất là 32767. Tôi không thể nói trước giá trị lớn nhất do hàm rand() tạo ra vì nó phụ thuộc vào sự bổ sung của bạn trong C++ (nguyên văn: depends on your implementation of C++). Giá trị lớn nhất được lưu giữ trong hằng số RAND_MAX, được định nghĩa trong file cstdlib. Cho nên nếu bạn muốn biết giá trị lớn nhất hàm rand() có thể tạo ra, chỉ cần cout RAND_MAX.

    Hàm còn có thể lấy các giá trị tử bên ngoài vào để sử dụng. Bạn cung cấp các giá trị đó cho hàm bằng cách đặt chúng ở giữa hai dấu ngoặc đơn, tách biệt các giá trị đó bởi dấu phẩy. Những giá trị đó được gọi là đối số, và khi đó, bạn đã trao quyền sử dụng chúng cho hàm. Tôi không để giá trị nào ở hàm rand() vì hàm đó không cần sử dụng đối số nào cả.

    Nhân tố tạo ra số ngẫu nhiên: (Seeding the Random Number Generator)

    Hàm rand() tạo ra một số giả ngẫu nhiên (không phải là số ngẫu nhiên thật) dựa vào một công thức. Để hiểu vấn đề này ta cứ tưởng tượng rand() đọc một cuốn sách lớn mà nội dung của nó là các số ngẫu nhiên. Nhưng rand() luôn luôn bắt đầu tại trang đầu của cuốn sách lúc chương trình chạy. Điều đó có nghĩa là rand() luôn cho ra những số giống nhau mỗi khi chương trình chạy. (hyutars: bạn có thể kiểm chứng điều này bằng cách bỏ hàm srand đi)
    Bạn có thể sửa lại vị trí bắt đầu của rand() trong cuốn sách bằng cách dùng hàm srand() (cũng được định nghĩa trong cstdlib). Số ở giữa hai dấu ngoặc đơn hàm srand() là nhân tố để tạo ra số ngẫu nhiên, và để chúng ta có những số ngẫu nhiên thực sự, nhân tố đó phải là một con số khác nhau mỗi khi chương trình chạy. Cách tốt nhất là sử dụng hàm time() (được định nghĩa trong ctime), nó sẽ trả về một con số dựa vào thời gian hiện hành.
    Để có thể sử dụng hàm time(), tôi include file ctime ở đầu chương trình:

    Mã:
    #include <ctime>
    Sau đó, trong hàm main(), tôi tạo ra số ngẫu nhiên dựa vào thời gian hiện tại:

    Mã:
    srand(time(0)); // seed random number generator based on current time
    Trong đoạn code trên, tôi dùng hàm time(0) như là một đối số của hàm srand(). Nghĩa là giá trị trả về của hàm time(0) sẽ được sử dụng bởi hàm srand(). Tổng quát, bạn có thể dùng hàm này để làm đối số cho hàm kia, miễn sao giá trị trả về của hàm làm đối số phải hợp lệ.
    Trong hàm time(0), tôi đã đặt đối số là 0 vào. time(0) sẽ trả về một giá trị dựa vào thời gian hiện hành, sau đó tôi đưa giá trị đó cho hàm srand() -> tạo ra một số thực sự ngẫu nhiên.

    Thu hẹp vùng tạo ra số ngẫu nhiên:

    Sau khi tạo ra một số ngẫu nhiên, biến randomNumber giữ một giá trị từ 0 đến 32 767. Nhưng tôi muốn số đó phải từ 1 đến 6 thôi(đang chơi trò đổ xúc xắc mà), do đó tôi dùng câu lệnh này để thu hẹp phạm vi đó lại:

    Mã:
    int die = (randomNumber % 6) + 1; // get a number between 1 and 6
    Tất cả những số dương khi chia cho 6 đều có số dư từ 0 đến 5. Trong câu lệnh trên, tôi lấy số dư và cộng thêm 1, phạm vi của biến die bây giờ sẽ là 1 đến 6 – đúng như điều chúng ta mong muốn. Bạn có thể dùng kĩ thuật này để điều chỉnh phạm vi xuất hiện của số ngẫu nhiên.

    Bẫy: Dùng toán tử modulus (chia lấy dư) để điều chỉnh phạm vi xuất hiện của một số ngẫu nhiên không phải lúc nào cũng đúng tuyệt đối. Sẽ có những con số xuất hiện nhiều hơn so với các con số khác. Nhưng dù thế nào đi nữa, đây không phải là vấn đề đối với một game đơn giản.
     
  10. tanden511

    tanden511 Youtube Master Race

    Tham gia ngày:
    11/1/07
    Bài viết:
    14
    Các bài dịch của bạn rất hay ! Nếu được biên tập thành Ebook thì thật tuyệt !
     
  11. anime_hn

    anime_hn Mr & Ms Pac-Man

    Tham gia ngày:
    1/2/07
    Bài viết:
    212
    Thế này đợi bao lâu mới đến phần mình học lolz
     
  12. Hyutars

    Hyutars Mario & Luigi

    Tham gia ngày:
    26/11/05
    Bài viết:
    713
    Nơi ở:
    Ragnarok World
    Có thể nói là rất lâu >_<, do thời gian của mình cũng không cố định, các bạn chờ mình dịch xong biên tập thành e-books ròi đọc >_<
    Bài 2.10: Hiểu được vòng lặp trong game

    Vòng lặp trong game (game loop) là một hình thức chung tái hiện lại các sự kiện trong game. Lõi của các sự kiện lặp đi lặp lại, đó là lí do tại sao ta gọi nó là vòng lặp. Mặc dù hình thức của mỗi game có khác nhau, nhưng cấu trúc bên trong của chúng đều giống nhau. Dù bạn đang nói về một game bắn nhau đơn giản hay một game RPG phức tạp, bạn đều có thể thoát khỏi game để đi đến một phần nào đó của vòng lặp. Hình 2.12 cho thấy một ví dụ trực quan về vòng lặp trong game:

    [​IMG]
    Hình 2.12: Vòng lặp game này đúng với tất cả các game.

    Sau đây là giải thích:

    Setting up: Cài đặt cấu hình cho game như sound, music và graphics. Người chơi có thể còn được cho xem những lời giới thiệu về cốt truyện của game và nhiệm vụ của anh ta.

    Getting player input: Dù người chơi nhập vào cái gì, từ bàn phím, con chuột, cần điều khiển …, nó đều được lưu giữ lại để xử lý.

    Updating game internals: Luật chơi của game sẽ được thi hành dựa vào player input. Ví dụ, nó sẽ cho phép nhân vật dùng item, hoặc dùng một magic nào đó.

    Updating the display: Trong đại đa số các game, quá trình này khiến phần cứng máy tình phải hoạt động nhiều vì nó thường liên quan đến việc vẽ đồ họa. Nhưng nó cũng có thể đơn giản như hiển thị một dòng text.

    Checking whether the game over: Nếu game chưa kết thúc ( chẳng hạn nếu nhân vật vẫn còn sống và người chơi chưa muốn thoát khỏi game), chương trình lại đi đến phần Getting player input. Nếu game kết thúc, chương trình đi đến phần Shutting down.

    Shutting down: Tại điểm này, game kết thúc. Người chơi thường được nhận những thông tin cuối cùng, chẳng hạn như điểm số của anh ta. Chương trình giải phóng các nguồn tài nguyên nếu cần thiết, sau đó exit.
    hyutars: Bài này có mục đích định hướng tí xíu cho những ai muốn lập trình game, nếu không thì không cần chú ý đến bài này lắm.
     
  13. maiyeuemtp

    maiyeuemtp Youtube Master Race

    Tham gia ngày:
    2/2/07
    Bài viết:
    14
    chài ui anh dạy như vậy em đâu có hỉu đâu :D
     
  14. FinalFantasyFanI

    FinalFantasyFanI Youtube Master Race

    Tham gia ngày:
    15/5/05
    Bài viết:
    87
    trang của ông tui không vào được, tui cũng đang học C, down cuốn eng ở đâu?...
     
  15. Hyutars

    Hyutars Mario & Luigi

    Tham gia ngày:
    26/11/05
    Bài viết:
    713
    Nơi ở:
    Ragnarok World
    Đang bù đầu không hiểu vì sao ko vô đựoc nè, cậu down cuốn tiếng Anh ở http://forum.gamedev.vn mục lập trình
     
  16. squall&rinoa

    squall&rinoa Donkey Kong

    Tham gia ngày:
    23/1/04
    Bài viết:
    449
    Nơi ở:
    Hải Phòng
    Tui vào tốt mà, có vấn đề gì đâu nhỉ...
     
  17. FinalFantasyFanI

    FinalFantasyFanI Youtube Master Race

    Tham gia ngày:
    15/5/05
    Bài viết:
    87
    ac, ông ko thấy ngày tui post bài sao? lâu rùi, chắc link được sửa.
    thank ông Hyu nhá, trang đó hay đấy :D..
     
  18. KySyCui

    KySyCui Dragon Quest

    Tham gia ngày:
    11/3/07
    Bài viết:
    1,373
    Nơi ở:
    Xóm Cùi
    bài viết hay đấy rất có ích cho mọi người. Nếu được bạn dịch tiếp phần về hàm đi
     
  19. notmenotme

    notmenotme Youtube Master Race

    Tham gia ngày:
    23/3/07
    Bài viết:
    1
    Đầu tiên phải công nhận rằng bạn thật tốt khi bỏ công post bài, nhưng hình như còn một số vấn đề thế này .
    1 - Theo cách post bài thì hình như bạn đi sai sư phạm, vì người đọc nếu dành cho người lần đầu tiên tập làm wen C (như bạn nói) thì họ sẽ cần biết được giao diện thân thiện của C chứ hok phải là màn hình exe
    2 - Nếu là lần đầu tiên học thì học C về giải thuật thì mình nghỉ đầu tiên phải tập làm quen với C cơ bản, hoặc nếu C ++ thì cũng nên bắt đầu với các bài tập cơ bản như suất ra ( trong C là printf (" ")l trong C++ là cout<<" ";)
    3 - Mọi người chưa biết gì về đệ quy sao có thể học về vòng lập for, vòng lập for nếu theo giáo trình đại học khoa chuyên ngành CNTT thì không phải đơn giản, nó có thể đơn giản nhưng đem vào các bài tập thì là 1 chuyện khác, thường nên học đệ quy trước, ngoài ra dịch thuật cũng rất quan trong va` hầu như nắm 80% để thành công .
    Đúng là bài của bạn thì rất hữu ích mình công nhân, nhưng mình không tin là người mới học C hỉu được đâu, ngay cả mình đã học qua mà nếu coi theo bài của bạn thì chắc chẳng viết nỗi phần mềm nào, nó chỉ có thể như một thư viện , khi những ai đã học C wen bài cũ thì vào coi để nhớ lại thôi
     
  20. braveboy88

    braveboy88 Youtube Master Race

    Tham gia ngày:
    12/3/07
    Bài viết:
    14
    Các bạn gửi cho mình phần mềm của C++ nhé! Máy mình hiện tại chưa có chương trình đó thì thực hành sao được à. Gửi nhanh cho mình nhé!
     

Chia sẻ trang này