
نوشته اصلی توسط
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 - - -
کد نهایی برای شما ضمیمه شد.