01/10/2018, 11:30

Nên dùng hàm nào để tạo một bộ đếm?

  • các bro cho mình xin xít thời gian nhé, mình đang theo học 1 tài liệu trên mạng, họ có cho 1 bài tập làm quen sau khi đã đọc xong phần cơ bản là tạo lên một trò chơi đơn giản, đó là đoán số bí mật (số sẽ do máy tính tự chọn ngẫu nhiên), sau khi tạo ra rồi, trên tài liệu lại có bài tập thứ 2, đó là tạo 1 menu lựa chọn cấp độ (mình đã dùng “điều kiện” switch để dựng lên menu như vậy rồi), vậy giờ mình nên sử dụng hàm nào để có thể sử dụng được các cấp độ đó? (hiện tại menu cấp độ mới chỉ dừng lại ở menu, dù chọn cấp độ nào thì nó vẫn đều là 1), bài tập thứ 3: tạo 1 bộ đếm số lần trả lời để tìm ra số bí mật (ví dụ sau khi đã tìm được số bí mật, màn hình sẽ hiển thị: ban đã mất n lần để tìm được số bí mật,…), mình nên làm như thế nào?, bài tập thứ 4: mình lên làm thế nào để tạo 1 biến số dạng boolean? (kiểu như là nếu đoán đúng số bí mật, máy tính sẽ hỏi chơi tiếp hay dừng lại, mình chọn 1 thì sẽ chơi tiếp, còn chọn 0 thì chương trình sẽ kết thúc). các bro chỉ cần giải thích cho mình thôi, còn lại làm thế nào thì mình sẽ tự mò, nếu không hiểu mình sẽ lên hỏi lại
    — đây là code của mình

    #include <stdio.h>
    #include <stdlib.h>
    #include <time.h>

    int main()
    {
    int SoBiMat = 0, SoHienTai = 0;
    int LuaChonCapDo;
    printf(“Bang Cap Do ”);
    printf(“1.Ease. 1 - 100 ”);
    printf(“2.normal. 1 - 1000 ”);
    printf(“3.hard. 1 - 10000 ”);
    printf(“ban chon cap do nao ”);
    scanf("%d", &LuaChonCapDo);
    switch(LuaChonCapDo)
    {
    case 1:
    printf(“ban da chon cap do ease. bat dau nao ”);
    break;
    case 2:
    printf(“ban da chon cap do normal. chien thoi ”);
    break;
    case 3:
    printf(“ban da chon cap do hard. chuan bi an hanh nao ”);
    break;
    default:
    printf(“tre trau -> Cut ”);
    break;
    }
    const int Max = 100, Min = 1;//ham nay cho phep tao 1 so ngau nhien
    srand(time(0));
    SoBiMat = (rand()%(Max - Min + 1) + Min);/vong lap cua chuong trinh. no se lap laij cho toi khi tim duoc so bi mat./
    do
    {
    //yeu cau doan so bi mat
    printf(“So bi mat la bao nhieu? ”);
    scanf("%d",&SoHienTai);
    if(SoBiMat>SoHienTai)
    printf(“Lon Hon ”);
    else if(SoBiMat<SoHienTai)
    printf(“Nho Hon ”);
    else
    printf(“Chuc mung, ban da doan dung. ”);
    }while(SoHienTai!=SoBiMat);
    return 0;
    }


Dark.Hades viết 13:43 ngày 01/10/2018

2: Tạo mỗi cấp độ 1 hàm, switch case mỗi cấp thì chuyển tới 1 hàm quản lý, cho biến selectedLevel ra ngoài main(), hoặc ra điều kiện là lv 1 thì max 100, level 2 max 200,… cái này thì chỉ cần nhân max với lv là đc

3: tạo 1 biến ngoài main, sau đó nhét vào trong vòng lặp chọn, mỗi khi người dùng nhập vào từ bàn phím thì ++.

4: không cần bool vì game bạn không sử dụng gameloop infinite hay machine state gì cả, chỉ cần làm 1 vòng lặp ở ngoài cùng, bao bọc toàn bộ từ đoạn bắt đầu main tới kết thúc nó, ở dưới cùng thêm 1 dòng scanf gọi lệnh hỏi có muốn chơi tiếp ko, có thì continue, ko thì break

viết 13:31 ngày 01/10/2018

xài function pointer cho vui:

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

typedef void (*GenericFunction)(void);
typedef struct _MenuOption {
    const char* text;
    GenericFunction callback;
} MenuOption;

void selectionMenu(void);
void easyGame(void);
void normalGame(void);
void hardGame(void);
void continueMenu(void);
void guessNumberGame(int min, int max);

GenericFunction mainLoopCallback = NULL;

int main(void)
{
    srand(time(0));
    mainLoopCallback = selectionMenu;
    while (mainLoopCallback) mainLoopCallback();
    return EXIT_SUCCESS;
}

void selectionMenu(void)
{
    MenuOption options[] = {
        {"Easy.   1 - 100", easyGame},
        {"Normal. 1 - 1000", normalGame},
        {"Hard.   1 - 10000", hardGame},
        {"Exit", NULL}
    };
    //...
    mainLoopCallback = options[choice-1].callback;
}

void easyGame(void)
{
    guessNumberGame(1, 100);
    mainLoopCallback = continueMenu;
}

void normalGame(void)
{
    guessNumberGame(1, 1000);
    mainLoopCallback = continueMenu;
}

void hardGame(void)
{
    guessNumberGame(1, 10000);
    mainLoopCallback = continueMenu;
}

void continueMenu(void)
{
    //...
    if (choice == 'y' || choice == 'Y')
        mainLoopCallback = selectionMenu;
    else if (choice == 'n' || choice == 'N')
        exit(EXIT_SUCCESS);
}

void guessNumberGame(int min, int max)
{
    //...
}
Hắc Tịch viết 13:37 ngày 01/10/2018

Thanks các bro, mình xin ghi nhớ và sẽ mò cách làm theo chỉ dẫn, cảm ơn nhiều ạ.

Bài liên quan
0