به زبان سی
نمایش نسخه قابل چاپ
خدمت شما:
توجه داشته باشید که تمام این کد ها رو برای سیستم عامل ویندوز و اجرا بر روی Command Prompt نوشته ام. در صورت نیاز به استفاده روی سیستم عامل های دیگر، می بایست دستورات موجود در توابع ()system را متناسب با آن تغییر دهید.کد:#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");
}
}
- - - Updated - - -
راستی، معمولا در چنین مواردی ارسال دستور cls به command prompt برای پاک کردن خروجی به دلیل کندی عملکرد و چشمک زدن خروجی (screen flickering)، پیشنهاد نمیشه. یک راهی که در سیستم عامل ویندوز به شما پیشنهاد میشه، استفاده از کد زیر هست:
با استفاده از این تابع که نام آن را ()clearScreen گذاشته ایم، دیگر شاهد چشمک زدن خروجی خود نخواهید بود و کار بسیار تمیز و زیبا انجام خواهد گرفت.کد:#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);
}
- - - Updated - - -
کد نهایی برای شما ضمیمه شد.
راستی اگر ما یک کاراکتر توی یک سطری قرار بدیم بعد بخواهیم در صورتی که بهش برخورد کرد حذف بشه چجوری میشه این کارو انجام داد؟