نمایش نتایج: از شماره 1 تا 10 , از مجموع 13

موضوع: حرکت دادن یک کاراکتر

Hybrid View

پست قبلی پست قبلی   پست بعدی پست بعدی
  1. #1
    عضو انجمن
    تاریخ عضویت
    Jan 2014
    نوشته ها
    125
    تشکر تشکر کرده 
    3
    تشکر تشکر شده 
    282
    تشکر شده در
    174 پست

    پیش فرض پاسخ : حرکت دادن یک کاراکتر

    نقل قول نوشته اصلی توسط mehran34 نمایش پست ها
    حالا اگر یک ارایه 18*21 رو در نظر بگیریم و بعدش بخواهیم در این آرایه یک کاراکتر در 8*19 قرار بدیم بعدش این کاراکتر با زاویه 45 درجه حرکت کنه و وقتی به خونه آخر رسید از دوباره با زاویه 45 درجه شروع به حرکت کنه راستی شروع حرکت به سمت شمال شرق هست ممنون و مرسی

    - - - Updated - - -

    وقتی برخورد کرد جهت حرکتش تغییر میکنه
    خدمت شما:

    کد:
    #include <stdio.h>
    #include <conio.h>
    
    
    #define NROWS 21  // Rows of array
    #define NCOLS 18  // Columns of array
    #define MARBL 'X'
    #define EMPTY ' '
    
    
    void draw(int x, int y);
    
    
    int main ()
    {
        char xd = 'u'; // xd: u = up & d = down
        char yd = 'r'; // xd: r = right & l = left
        int x = 19;    // set from 0 to NROWS-1
        int y = 8;     // set from 0 to NCOLS-1
        int c = 0;
    
    
        system("mode con: cols=150 lines=50"); // set the size of output window
    
    
        draw(x, y);
    
    
        printf("\n\nPress any key to start...");
        getch();
    
    
        while(c < 100)
        {
            if(xd == 'd')
            {
                x++;
            }
            else if(xd == 'u')
            {
                x--;
            }
    
    
            if(yd == 'r')
            {
                y++;
            }
            else if(yd == 'l')
            {
                y--;
            }
    
    
            draw(x, y);
    
    
            if(x == 0)
            {
                xd = 'd';
            }
            else if(x == (NROWS - 1))
            {
                xd = 'u';
            }
    
    
            if(y == 0)
            {
                yd = 'r';
            }
            else if(y == (NCOLS - 1))
            {
                yd = 'l';
            }
    
    
            int k; for(k = 0; k < 10000000; k++); // or sleep(500); with time.h or even delay(500); with stdlib.h
    
    
            c++;
        }
    
    
        printf("\n\nPress any key to exit...");
        getch();
    
    
        return 0;
    }
    
    
    void draw(int x, int y)
    {
        int i, j;
        char a[NROWS][NCOLS];
    
    
        system("cls"); // or clrscr();
    
    
        printf("-----------------------------------------------------------------------------------------------------------------------------------------\n");
    
    
        for(i = 0; i < NROWS; i++)
        {
            for(j = 0; j < NCOLS; j++)
            {
                if(i == x && j == y)
                {
                    a[i][j] = MARBL;
                }
                else
                {
                    a[i][j] = EMPTY;
                }
    
    
                printf("%c\t", a[i][j]);
            }
    
    
            printf("\n-----------------------------------------------------------------------------------------------------------------------------------------\n");
        }
    }
    توجه داشته باشید که تمام این کد ها رو برای سیستم عامل ویندوز و اجرا بر روی Command Prompt نوشته ام. در صورت نیاز به استفاده روی سیستم عامل های دیگر، می بایست دستورات موجود در توابع ()system را متناسب با آن تغییر دهید.

    - - - Updated - - -

    راستی، معمولا در چنین مواردی ارسال دستور cls به command prompt برای پاک کردن خروجی به دلیل کندی عملکرد و چشمک زدن خروجی (screen flickering)، پیشنهاد نمیشه. یک راهی که در سیستم عامل ویندوز به شما پیشنهاد میشه، استفاده از کد زیر هست:

    کد:
    #include <windows.h>
    
    void clearScreen();
    
    int main()
    {
        // your codes here
    }
    
    void clearScreen()
    {
        HANDLE hOut;
        COORD Position;
        
        hOut = GetStdHandle(STD_OUTPUT_HANDLE);
        
        Position.X = 0;
        Position.Y = 0;
        SetConsoleCursorPosition(hOut, Position);
    }
    با استفاده از این تابع که نام آن را ()clearScreen گذاشته ایم، دیگر شاهد چشمک زدن خروجی خود نخواهید بود و کار بسیار تمیز و زیبا انجام خواهد گرفت.

    - - - Updated - - -

    کد نهایی برای شما ضمیمه شد.
    فایل های پیوست شده فایل های پیوست شده
    • نوع فایل: zip main.zip (1.0 کیلو بایت, 0 نمایش)
    ویرایش توسط nexinel : January 27th, 2015 در ساعت 22:09
    !GOODBYE FOREVER
    !I HAVE NO WEBSITE

  2. تعداد تشکر ها از nexinel به دلیل پست مفید


اطلاعات موضوع

کاربرانی که در حال مشاهده این موضوع هستند

در حال حاضر 1 کاربر در حال مشاهده این موضوع است. (0 کاربران و 1 مهمان ها)

مجوز های ارسال و ویرایش

  • شما نمیتوانید موضوع جدیدی ارسال کنید
  • شما امکان ارسال پاسخ را ندارید
  • شما نمیتوانید فایل پیوست کنید.
  • شما نمیتوانید پست های خود را ویرایش کنید
  •