پاسخ : حرکت دادن یک کاراکتر
با سلام
با جاوا میشه
باید از قابلیت تایم اوت استفاده کنید و یه تابع واسش بنویسید
پاسخ : حرکت دادن یک کاراکتر
من میخواستم با سی بنویسمش ولی فکر نکنم سخت باشه بدون اون هم باید بشه زمانش مهم نیست فقط مهم اینه بشه دیدش
- - - Updated - - -
البته درسته این چیزی که میگم خیلی مربوط نباشه ولی یک بازی مثل اسنیک به زبان سی نوشته شده و اون مار بدون اینکه ما کیبورد رو فشار بدیم حرکت میکنه حالا اینو خیلی ساده تر در نظر بگیریم مثلا بیایم در نظر بگیریم یک کاراکتر که فقط به صورت افقی حرکت کنه میخواستم بهم بگید چجوری بنویسمش با تشکر:67: و مرسی زیاد
پاسخ : حرکت دادن یک کاراکتر
سلام
شما توی بخش طراحی سایت زدید واسه همین گفتم جاوا
پاسخ : حرکت دادن یک کاراکتر
هرگونه راهنمایی رو که میتونید انجام بدید بگید
پاسخ : حرکت دادن یک کاراکتر
معمولا اگر کسی قصد نوشتن بازی مثل Snake رو با زبان ++C داشته باشه، میره سراغ کتابخانه GLUT یا همان OpenGL. اما اگر قصد نوشتن آن با زبان ++C/C خالص را دارید و می خواهید در محیط Console اجرا کنید، بحث حرکت کار سختی نخواهد بود. شما فقط نیاز به کمی محاسبه، ذخیره برخی مقادیر و دستکاری خروجی دارید. به هر صورت اگر بصورت واضح و دقیق بفرمایید دنبال چه چیزی هستید، می توانم آن مسئله مورد نظر را برای شما توضیح داده و کد های لازم را برای شما بنویسم.
پاسخ : حرکت دادن یک کاراکتر
با تشکر فراوان از شما و نگاه کنید شما یک آرایه دو بعدی ایجاد کنید از نوع char بعدش مثلا تو خونه پایینیش یک کاراکتر بگذارید بدون هیچ گرافیک و چیز خاصی درست؟ بعدش این کاراکتر به محض اجرا شدن برنامه ( بهتره با فشار دادن یک کلید شروع به حرکت کنه و به بالا بره تا آخرین خونه آرایه و این حرکت رو ما بتونیم ببینیم با تشکر
پاسخ : حرکت دادن یک کاراکتر
نقل قول:
نوشته اصلی توسط
mehran34
با تشکر فراوان از شما و نگاه کنید شما یک آرایه دو بعدی ایجاد کنید از نوع char بعدش مثلا تو خونه پایینیش یک کاراکتر بگذارید بدون هیچ گرافیک و چیز خاصی درست؟ بعدش این کاراکتر به محض اجرا شدن برنامه ( بهتره با فشار دادن یک کلید شروع به حرکت کنه و به بالا بره تا آخرین خونه آرایه و این حرکت رو ما بتونیم ببینیم با تشکر
پیرو صحبتی که در یاهو داشتیم و IDE معرفی شده توسط شما یعنی Code::Blocks و کامپایلر مورد استفاده که MinGW/GCC بوده است، کد زیر را برای شما نوشته ام که البته با توجه به عدم پشتیبانی در سیستم های مختلف، کد های جایگزین نیز برای شما کامنت شده است:
کد:
#include <stdio.h>#include <conio.h>
#define NROWS 5 // Rows of array
#define NCOLS 5 // Columns of array
#define MARBL 'X'
#define EMPTY 'O'
void draw(int x, int y);
int main ()
{
int x = 3; // set from 0 to NROWS-1
int y = 1; // set from 0 to NCOLS-1
draw(x, y);
printf("\n\nPress any key to start...");
getch();
while(x > 0)
{
x--;
draw(x, y);
int k; for(k = 0; k < 10000000; k++); // or sleep(500); with time.h or even delay(500); with stdlib.h
}
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");
}
}
این کد کاملا تست شده و کار می کند که البته بسته به نیاز خود می توانید آن را تغییر دهید.
پاسخ : حرکت دادن یک کاراکتر
حالا اگر یک ارایه 18*21 رو در نظر بگیریم و بعدش بخواهیم در این آرایه یک کاراکتر در 8*19 قرار بدیم بعدش این کاراکتر با زاویه 45 درجه حرکت کنه و وقتی به خونه آخر رسید از دوباره با زاویه 45 درجه شروع به حرکت کنه راستی شروع حرکت به سمت شمال شرق هست ممنون و مرسی
- - - Updated - - -
وقتی برخورد کرد جهت حرکتش تغییر میکنه
پاسخ : حرکت دادن یک کاراکتر
با کدام زبان میخواین بنویسیدش؟ سورس امادش را در ویژوال بیسیک دارم خواستید بگید بدم خدمتتون
- - - Updated - - -
با کدام زبان میخواین بنویسیدش؟ سورس امادش را در ویژوال بیسیک دارم خواستید بگید بدم خدمتتون
پاسخ : حرکت دادن یک کاراکتر
نقل قول:
نوشته اصلی توسط
marketvps
با کدام زبان میخواین بنویسیدش؟ سورس امادش را در ویژوال بیسیک دارم خواستید بگید بدم خدمتتون
- - - Updated - - -
با کدام زبان میخواین بنویسیدش؟ سورس امادش را در ویژوال بیسیک دارم خواستید بگید بدم خدمتتون
به زبان سی
1 فایل پیوست
پاسخ : حرکت دادن یک کاراکتر
نقل قول:
نوشته اصلی توسط
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 - - -
کد نهایی برای شما ضمیمه شد.
پاسخ : حرکت دادن یک کاراکتر
راستی اگر ما یک کاراکتر توی یک سطری قرار بدیم بعد بخواهیم در صورتی که بهش برخورد کرد حذف بشه چجوری میشه این کارو انجام داد؟