PDA

View Full Version : سوال: کمک در نوشتن یک بازی



GhaseM.M
پنج شنبه 10 اردیبهشت 1388, 11:19 صبح
سلام
من می خوام یه بازی بنویسم که در ابتدای برنامه درجه و سرعت رو از کاربر بگیره بعد از گوشه صفحه با همون زاویه ای که کاربر خواسته یه توپ حرکت کنه و به صورت منحنی(حرکت پرتابی) به طرف دیگر صفحه بره. کلا موضوع بازیش اینه که 2 تا آدمک در 2 طرف صفحه هستند با پرتاب شدن توپ از یک طرف صفحه به طرف دیگر اگر توپ به آدمک دومی خورد کاربر برنده بشه! من مشکلم در حرکت منحنی وار توپ پرتاب شده است. فرمولش هم هست ولی مشکل اینه که توپ روی یک منحنی حرکت نمیکنه! من کدم رو می زارم. ببخشید اگر یکم مبتدی وار نوشتم چون هنوز تازه کارم! :-؟




#include <conio.h>
#include <iostream.h>
#include <graphics.h>
#include <math.h>
#include <dos.h>

void main()
{
double grad;
double speed;
cout << "Please Enter The Grad:";
cin >> grad;
cout << "\n";
cout << "Please Enter The Speed:";
cin >> speed;


int d=0,n=0;
initgraph(&d,&n," ");
setcolor(4);





double h= speed*speed*sin(grad)*sin(grad)/20;
double r=speed*speed*sin(2*grad)/10;


for (int t=0;t<h;t++)
{
line(20,479,20,449);
circle(20,429,20);
line(619,479,619,449);
circle(619,429,20);
double x = speed * cos(grad) * t;
double y = -5 * t * t + speed * sin(grad) * t;
gotoxy(x,y);
cout << "X";
delay(speed);
cleardevice();
}

for (int q=h;q<r;q++)
{
line(20,479,20,449);
circle(20,429,20);
line(619,479,619,449);
circle(619,429,20);

double x = speed * cos(grad) * q;
double y = -5 * q * q + speed * sin(grad) * q;
gotoxy(x,y);
cout << "X";
delay(speed);
cleardevice();
}




getch();

}

GhaseM.M
جمعه 11 اردیبهشت 1388, 11:48 صبح
کسی از دوستان نیست کمکی در این باره کنه؟ مقصود از این بازی شبیه سازی حرکت پرتابی هست. اگه این مشکل حل بشه باقی دیگه مشکلی نداره!

mortezamsp
یک شنبه 13 اردیبهشت 1388, 23:44 عصر
نکته ی اول:
عزیز من اینجا x و y مختصاتشون از گوشه سمت چپ بالا شروع میشن.یعنی احتمالا تو÷ تو بجای اینکه در پایین صفحه حرکت کنه در بالای صفحه حرکت میکنه درسته؟ پس باید انتقال محور بدی.در دستگاه جدیدت 0 برابر هست با getmaxx()/2 و 0 y برابر هست با getmaxy()/2 که هردو تابع در graphics.h موجود هستند.


نکته ی دوم:
مختصاتی که تو در مد گرافیک میدی با مختصاتی که تو در مد تکست میدی باهم فرق دارن.gotoxy() با کاراکتر کارمیکنه نه با پیکسل.putpixle(x,y) هست که یک پیکسل رو در مختصات داده شده نشون میده.gotoxy(x,y) میاد به اندازه x سطر , y ستون جلو میره.
بنظرم بهتره بجای دستور cout<<X از این دستور استفاده کنی: circle(x,y,5); اونوقت بجای x یک دایره به شعاع 5 در همون نقطه ای که میخوای درست میکنه.البته انتقال محور یادت نره.یعنی باید بنویسی : circle(getmaxx()/2-x,getmaxy()/2-y,5);

موفق باشی!

GhaseM.M
چهارشنبه 16 اردیبهشت 1388, 21:53 عصر
سلام. متشکرم از راهنماییتون. من cout رو از قصد نوشتم که ببینم مشکل برنامه کجاست. متاسفانه نتونستم برنامه رو کامل کنم. البته یه برنامه مشابه پیدا کردم که به زبان VB نوشته شده. از دوستانی که به این زبان وارد هستند خواهش می کنم قسمت های اصلی این برنامه رو به c++ بنویسند تا ما هم ازش سر در بیاریم! برنامه رو هم ضمیمه می کنم.

mortezamsp
چهارشنبه 23 اردیبهشت 1388, 23:50 عصر
[quote=البته یه برنامه مشابه پیدا کردم که به زبان VB نوشته شده. از دوستانی که به این زبان وارد هستند خواهش می کنم قسمت های اصلی این برنامه رو به c++ بنویسند[/quote]
دوست خوب و نازنينم من بلد نيستم وي‍وال بيسيك رو.شرمنده كه نميتونم كمكت كنم!

Keyhan Clever
پنج شنبه 24 اردیبهشت 1388, 17:12 عصر
خوب ویژوال بیسیک چه ربطی به ++C داره ؟
میخواین تو بخش VB بنویسین شاید اونجا کسی سی پلاس پلاس بلد بود
البته من وی بی یه کم بلدم ولی نه در این حد

GhaseM.M
شنبه 26 اردیبهشت 1388, 10:38 صبح
سلام. من این برنامه رو هفته پیش تکمیل کردم. با فکر کردن روی همون برنامه اولی که نوشته بودم و کمی تغییرات برنامه کار کرد. این برنامه تکمیل شده ام هست.