PDA

توجه ! این یک نسخه آرشیو شده میباشد و در این حالت شما عکسی را مشاهده نمیکنید برای مشاهده کامل متن و عکسها بر روی لینک مقابل کلیک کنید : حرکت دادن یک کاراکتر



mehran34
January 27th, 2015, 01:05
سلام میخواستم بپرسم چطوری توی یک ارایه دو بعدی ما یک کاراکتر رو حرکت بدیم به گونه ای که بعد از یک ثانیه بتونیم ببینیمش مثلا بازی ماری که حرکت میکنه ولی و کاراکتر قبلی هم پاک بشه و همینطوری ادامه پیدا کنه مثلا یک کاراکتر از پایین به بالا به صورت عمودی حرکت کنه با تشکر میخواهم این حرکت بدون هرگونه فشار دادن کلید باشه و وقتی حرکت میکنه نشون داده بشه مثلا در یک مربع یا مستطیل یک کاراکتر از بالا به پایین حرکت کنه و ما بتونیم حرکتش رو ببینیم یک مثال ساده هم کفایت میکنه واسه یاد گیریش با تشکر فراوان از شما

hamid53214
January 27th, 2015, 01:22
با سلام
با جاوا میشه
باید از قابلیت تایم اوت استفاده کنید و یه تابع واسش بنویسید

mehran34
January 27th, 2015, 01:55
من میخواستم با سی بنویسمش ولی فکر نکنم سخت باشه بدون اون هم باید بشه زمانش مهم نیست فقط مهم اینه بشه دیدش

- - - Updated - - -

البته درسته این چیزی که میگم خیلی مربوط نباشه ولی یک بازی مثل اسنیک به زبان سی نوشته شده و اون مار بدون اینکه ما کیبورد رو فشار بدیم حرکت میکنه حالا اینو خیلی ساده تر در نظر بگیریم مثلا بیایم در نظر بگیریم یک کاراکتر که فقط به صورت افقی حرکت کنه میخواستم بهم بگید چجوری بنویسمش با تشکر:67: و مرسی زیاد

hamid53214
January 27th, 2015, 02:03
سلام
شما توی بخش طراحی سایت زدید واسه همین گفتم جاوا

mehran34
January 27th, 2015, 11:00
هرگونه راهنمایی رو که میتونید انجام بدید بگید

nexinel
January 27th, 2015, 13:29
معمولا اگر کسی قصد نوشتن بازی مثل Snake رو با زبان ++C داشته باشه، میره سراغ کتابخانه GLUT یا همان OpenGL. اما اگر قصد نوشتن آن با زبان ++C/C خالص را دارید و می خواهید در محیط Console اجرا کنید، بحث حرکت کار سختی نخواهد بود. شما فقط نیاز به کمی محاسبه، ذخیره برخی مقادیر و دستکاری خروجی دارید. به هر صورت اگر بصورت واضح و دقیق بفرمایید دنبال چه چیزی هستید، می توانم آن مسئله مورد نظر را برای شما توضیح داده و کد های لازم را برای شما بنویسم.

mehran34
January 27th, 2015, 13:52
با تشکر فراوان از شما و نگاه کنید شما یک آرایه دو بعدی ایجاد کنید از نوع char بعدش مثلا تو خونه پایینیش یک کاراکتر بگذارید بدون هیچ گرافیک و چیز خاصی درست؟ بعدش این کاراکتر به محض اجرا شدن برنامه ( بهتره با فشار دادن یک کلید شروع به حرکت کنه و به بالا بره تا آخرین خونه آرایه و این حرکت رو ما بتونیم ببینیم با تشکر

nexinel
January 27th, 2015, 17:36
با تشکر فراوان از شما و نگاه کنید شما یک آرایه دو بعدی ایجاد کنید از نوع 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");
}
}

این کد کاملا تست شده و کار می کند که البته بسته به نیاز خود می توانید آن را تغییر دهید.

mehran34
January 27th, 2015, 17:59
حالا اگر یک ارایه 18*21 رو در نظر بگیریم و بعدش بخواهیم در این آرایه یک کاراکتر در 8*19 قرار بدیم بعدش این کاراکتر با زاویه 45 درجه حرکت کنه و وقتی به خونه آخر رسید از دوباره با زاویه 45 درجه شروع به حرکت کنه راستی شروع حرکت به سمت شمال شرق هست ممنون و مرسی

- - - Updated - - -

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

marketvps
January 27th, 2015, 18:14
با کدام زبان میخواین بنویسیدش؟ سورس امادش را در ویژوال بیسیک دارم خواستید بگید بدم خدمتتون

- - - Updated - - -

با کدام زبان میخواین بنویسیدش؟ سورس امادش را در ویژوال بیسیک دارم خواستید بگید بدم خدمتتون

mehran34
January 27th, 2015, 18:24
با کدام زبان میخواین بنویسیدش؟ سورس امادش را در ویژوال بیسیک دارم خواستید بگید بدم خدمتتون

- - - Updated - - -

با کدام زبان میخواین بنویسیدش؟ سورس امادش را در ویژوال بیسیک دارم خواستید بگید بدم خدمتتون
به زبان سی

nexinel
January 27th, 2015, 19:54
حالا اگر یک ارایه 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 - - -

کد نهایی برای شما ضمیمه شد.

mehran34
January 28th, 2015, 00:00
راستی اگر ما یک کاراکتر توی یک سطری قرار بدیم بعد بخواهیم در صورتی که بهش برخورد کرد حذف بشه چجوری میشه این کارو انجام داد؟