30/09/2018, 16:22

Cần giúp đỡ về code C++

Trong chương trình mô phỏng bài toán tháp hà nội bằng đồ họa này mình muốn nhấn phím enter thì nó di chuyển một đĩa. mình có dùng lệnh:

 char et;
        et = getch();  //cho nhan phim enter roi luu ma ASCII enter vao et
            if (et == 13)
        {
            c_thap(a, b, c, m - 1, n);
            c_khoi(a, c, m, n);
            c_thap(b, c, a, m - 1, n);
            et == 0;
        }

để thực hiện phần đó. nhưng sao nó lại di chuyển 2 bước 1…
nhờ mọi người chỉnh lại chút ạ. cảm ơn!

Đây là code chương trình:

#include <iostream>
#include "screen.h"
#include "windows.h"

using namespace std;
int thap[3];
// Ham dung de dieu khien mau bang so
void setcolor(unsigned short color)
{
    HANDLE hcon = GetStdHandle(STD_OUTPUT_HANDLE);
    SetConsoleTextAttribute(hcon, color);
}
void vethap(int n)
{
    int i, j;
    for (i = 0; i<10; i++)
    {
        setcolor(14);
        gotoxy(15, 5 + i);
        cout << char(186);
        gotoxy(30, 5 + i);
        cout << char(186);
        gotoxy(45, 5 + i);
        cout << char(186);
    }
    for (i = 0; i<n; i++)
    {
        for (j = 0; j<2 * i + 1; j++)
        {
            gotoxy(15 - i + j, 15 - n + i);
            setcolor((i + 5) % 15);
            cout << char(219);
        }
    }
}
// Chuyen khoi i tu cot a qua cot b
void c_khoi(int a, int b, int i, int n)
{
    i--;
    int j, k;
    for (j = 15 - thap[a - 1]; j>2; j--)
    {
        for (k = 0; k<2 * i + 1; k++)
        {
            gotoxy(15 * a - i + k, j);
            cout << " ";
        }
        if (j >= 5)
        {
            gotoxy(15 * a, j);
            setcolor(14);
            cout << char(186);
        }
        for (k = 0; k<2 * i + 1; k++)
        {
            gotoxy(15 * a - i + k, j - 1);
            setcolor((i + 5) % 15);
            cout << char(219);
        }
        delay(20);
    }
    if (a<b)
    {
        for (j = 15 * a; j <= 15 * b; j++)
        {
            for (k = 0; k<2 * i + 1; k++)
            {
                gotoxy(j - i + k, 2);
                setcolor((i + 5) % 15);
                cout << char(219);
            }
            delay(20);
            for (k = 0; k<2 * i + 1; k++)
            {
                gotoxy(j - i + k, 2);
                cout << " ";
            }
        }
    }
    else
    {
        for (j = 15 * a; j >= 15 * b; j--)
        {
            for (k = 0; k<2 * i + 1; k++)
            {
                gotoxy(j - i + k, 2);
                setcolor((i + 5) % 15);
                cout << char(219);
            }
            delay(20);
            for (k = 0; k<2 * i + 1; k++)
            {
                gotoxy(j - i + k, 2);
                cout << " ";
            }
        }
    }
    for (j = 2; j<15 - thap[b - 1] - 1; j++)
    {
        for (k = 0; k<2 * i + 1; k++)
        {
            gotoxy(15 * b - i + k, j);
            cout << " ";
        }
        if (j >= 5)
        {
            gotoxy(15 * b, j);
            setcolor(14);
            cout << char(186);
        }
        for (k = 0; k<2 * i + 1; k++)
        {
            gotoxy(15 * b - i + k, j + 1);
            setcolor((i + 5) % 15);
            cout << char(219);
        }
        delay(20);
    }
    thap[a - 1]--;
    thap[b - 1]++;
}

void c_thap(int a, int c, int b, int m, int n)
{
    if (m<1)
        return;
    char et;
    et = getch();  //cho nhan phim enter roi luu ma ASCII enter vao et
        if (et == 13)
    {
        c_thap(a, b, c, m - 1, n);
        c_khoi(a, c, m, n);
        c_thap(b, c, a, m - 1, n);
        et == 0;
    }
}

int main()
{
    int n;
    cout << "Nhap so dia: ";
    cin >> n;
    system("cls"); //xoa man hinh
    vethap(n);
    thap[0] = n;
    thap[1] = 0;
    thap[2] = 0;
    gotoxy(1, 20);
    cout << "			Nhan phim bat ki de tiep tuc";
    getch();
    gotoxy(1, 20);
    cout << "                                                                  ";
    cout << "
		>>>>CHUONG TRINH MO PHONG THAP HA NOI VOI "<<n<<" DIA<<<<
";
    cout << "
			(Nhan phim enter de di chuyen dia)";
    c_thap(1, 3, 2, n, n);
    gotoxy(1, 20);
    system("pause");
    return 0;
}
Bài liên quan
0