محیط گرافیکی را چطور روی c اجراکنیم ؟

saalek110

Well-Known Member
من با بورلند سی 5 کار کردم.
برنامه زیر کامل نیست ولی چند نکته توش داره که شاید کمکت بکنه.
کد:
                                    #include <graphics.h>
#include <stdlib.h>
#include <stdio.h>
#include <conio.h>

int main(void)
{
    /* request autodetection */
   int gdriver = DETECT, gmode, errorcode;
   int stangle = 45, endangle = 135;
   int radius = 100;
    double v=1.5;//int v=100;
   int x,y,r2=5;
   double time;
   int g=30;
   /* initialize graphics and local variables */
   initgraph(&gdriver, &gmode, "");

   /* read result of initialization */
   errorcode = graphresult();
   if (errorcode != grOk) {  /* an error occurred */

      printf("Graphics error: %s\n", grapherrormsg(errorcode));
      printf("Press any key to halt:");
      getch();
      exit(1);               /* terminate with an error code */
   }


   setcolor(getmaxcolor());
     x=0;
     y=getmaxy();
     time=0;
    while(x<=getmaxx())
 {
 for (double counter=1 ;counter<1000 ; counter++) circle(0,0,0);
setcolor(0);
  circle(x,y,r2);
  //floodfill(x,y,0);
  time=time+0.001;
  x=x+v;
  y=int(y-v+g*time*time);
        //x=v*cos(45*degree)*time;
        //y=((v*sin(45*degree))+(g*time))*time;
  setcolor(9);
  circle(x,y,r2);
  //floodfill(x,y,9);
 }
   getch();
   closegraph();
   return 0;
}

نکات:

نکته اول:
قبل تغییر مختصات اول شکل را پاک کنید. یعنی اول توپ را پاک کنید. بعد مختصات تغییر بدهید . بعد در محل جدید رسم کنید.

نکته دوم:
من حلقه ای داخل حلقه شما افزودم تا بتوانم رسم ها را دنبال کنم.

نکته سوم:
فکر کنم مختصات را نمیشه اعشاری داد. من cast کردم در خط :
کد:
  y=int(y-v+g*time*time);
یعنی مجموعه را تبدیل به int کردم. ولی مسیر حرکت شکسته شد. یعنی چیزی شبیه ذوزنقه شد تا سهمی. از توابع تبدیل استفاده کنید. و یا اینکه مجموعه را تبدیل نکنید بلکه جز جز تبدیل کنید. خلاصه اینکه ور برید تا شکل خوبی دربیاد.

نکته سوم:
من نوشتم:
کد:
 x=x+v;
یعنی v به x اضافه میشه. در فیزیک گویا داشتیم: ایکس = ایکس صفر + وی * زمان . هر طور برنامه جواب می دهد کد بنویسید.

نکته چهارم:
شما دایره را همچنان با یک رنگ می کشیدید ولی رنگ داخلش را پاک می کردید. با setcolor رنگ قلم رسم دایره را تغییر دهید. تا بتوانید دایره کهنه را پاک کنید.

نکته پنجم:
بعضی متغیرها که شما int گرفته بودید را من double کردم تا بتوانم به شکل ریز تری کم و زیاد کنم. مثلا time را من هر بار 0.001 اضافه کردم. چون سرعت چرخش حلقه زیاد است و من با کد آنقدر سرعت را پایین آوردم تا حرکت توپ را بتوانم ببینم. مثل همان حلقه هرز گرد داخلی که یک دایره خنثی در نقطه صفر و صفر می کشد.

نکته ششم:
جاذبه مخالف سرعت رو به بالا است. پس علامت ها مخالف باید باشد. یعنی یکی مثبت و یکی منفی.

امیدوارم این راهنمایی ها کمک کند. موفق باشید.
 

hahabia2

New Member
خیلی خیلی ممنون از برنامه و نکات ظریف و مهمی که اشاره کرده بودی.حالا یه سوال دیگه: هرچی سعی می کنم نمی تونم توپ یا همون گلوله را تو پر کنم.چی کار کنم ؟
من اینطوری رنگ رو اضافه می کنم ولی درست نمیشه.کجای کارم اشتباهه؟

#include <graphics.h>
#include <stdlib.h>
#include <stdio.h>
#include <conio.h>

int main(void)
{
/* request autodetection */
int gdriver = DETECT, gmode, errorcode;
int stangle = 45, endangle = 135;
int radius = 100;
double v=1.5;//int v=100;
int x,y,r2=5;
double time;
int g=30;
/* initialize graphics and local variables */
initgraph(&gdriver, &gmode, "");

/* read result of initialization */
errorcode = graphresult();
if (errorcode != grOk) { /* an error occurred */

printf("Graphics error: %s\n", grapherrormsg(errorcode));
printf("Press any key to halt:");
getch();
exit(1); /* terminate with an error code */
}


setcolor(getmaxcolor());
x=0;
y=getmaxy();
time=0;
while(x<=getmaxx())
{
for (double counter=1 ;counter<1000 ; counter++) circle(0,0,0);
setcolor(0);
circle(x,y,r2);
floodfill(x,y,0);
time=time+0.001;
x=x+v;
y=int(y-v+g*time*time);
//x=v*cos(45*degree)*time;
//y=((v*sin(45*degree))+(g*time))*time;
setcolor(9);
circle(x,y,r2);
floodfill(x,y,9);
}
getch();
closegraph();
return 0;
}
 

saalek110

Well-Known Member
همین جوری یک چیز میگم ببین از اینه شاید.
چون رنگ سطل رنگت با رنگ دور دایره یکیه رنگ شاید پخش میشه. مختلف بگیر ببین آیا مشکل برطرف میشه یا نه.
 

sara.ahmadi

New Member
لطفا من یک برنامه در مورد زبان c برای درس گرافیک می خواهم که منوی start را طراحی کند و وقتی این منو را باز می کنید روی گزینه ها کلیک کرده آنها رنگی شود.
 

nozhan_kord

New Member
salam hale shoma?
man ye source code baziye mar daram ama har kari mikonam nemitonam to mihite tuorbo c ono ejra konam
mikham to mohite grafikiye c ejra beshe mamnon misham age komakam konid man ta pasfarda
vaght daram
hala chetori in source kodo vasaton send konam
khahesh mikonam rahnamaii konid
montazre javabe u hastam
bye
 

nozhan_kord

New Member
سلام به همه
امیدوارم که حال همه خوب باشه
من یه سورس کد بازی مار دارم می خوام تو محیط گرافیکی c اجرا بشه خواهش می کنم کمکم کنید من تا پس فردا وقت دارم
 

memol_515

Active Member
خوب اجراش كنيد. الان مشكل چيه؟

برنامه تون احتمالا تحت داس ئه ! نه؟

براي اينكه هم اجرا شه، مجبوريد تحت داس اجراش كنيد. احتمالا هم از كتابخانه graphic.h توش استفاده شده !

اگه بلد نيستيد بگيد تا راهنماييتون كنيم. منم چند وقت پيش همين مشكل رو داشتم اما حل شد !

موفق باشيد
 

nozhan_kord

New Member
SALAM YE DONYE MAMNON KE JAVAB DADID
age mishe mano dar vared kardane code ha dar kojaye barname rahnamii konid
rasti man ba tourbo C3 kar mikonam va barname khili error mide age mishe in source code ke marbot be harekate mar mishe baresi konid vabegid ke irade kar kojast man ziyad to barname nevisi maher nistam

mamnon misham age bazam be bande komak konid
oh rasti man mikham tarahi mar va harekatesh toye yek mohit neveshte beshe chetori mitonam in 2ta source codo be ham atach konam

SOURCE CODE harekate mar
#include <stdio.h>
#define LEFT 1
#define RIGHT 2
#define UP 3
#define DOWN 4
int gamedelay;
struct Snake_Data {int length;
int head_x;
int head_y;
int head_dir;
int tail_x;
int tail_y;
int tail_dir;
int bend_x [1000];
int bend_y[1000];
} Snake;
{
if (Snake.head_dir == LEFT)
{
Snake.head_x --;
}
if (Snake.head_dir == RIGHT)
{
Snake.head_x ++;
}
if (Snake.head_dir == UP)
{
Snake.head_y --;
}
if (Snake.head_dir == DOWN)
{
Snake.head_y ++;
}
putpixel (Snake.head_x, Snake.head_y,15);
putpixel (Snake.tail_x, Snake.tail_y,0);
if (Snake.tail_dir == LEFT)
{
Snake.tail_x --;
}
if (Snake.tail_dir == RIGHT)
{
Snake.tail_x ++;
}
if (Snake.tail_dir == UP)
{
Snake.tail_y --;
}
if (Snake.tail_dir == DOWN)
{
Snake.tail_y ++;
}

}

void gameengine ()
{
while (1)
{
movesnake ();
delay (5);
}
}

void initscreen ( )
{
int i;
char scorestring [100];


setcolor (4);
line (10,10,10,700);
line (1008,10,1008,700);
line (10,700,1008,700);
line (10,10,1008,10);


sprintf (scorestring, "Score : %d", score);
outtextxy (20,710, scorestring);


for (int i = Snake.length; i>0;i--) //This part should be redesigned for change of code of intial values
{
putpixel (Snake.head_x-i,Snake.head_y,15);
}
}void initgamedata ( )
{
int i;
Snake.length = 100;
Snake.head_x = 200;
Snake.head_y = 200;
Snake.head_dir = RIGHT;
Snake.tail_x = Snake.head_x- Snake.length;
Snake.tail_y = Snake.head_y;
Snake.tail_dir = Snake.head_dir;
for (int i = 0; i <1000;i++) // There is no bend initally
{
Snake.bend_x = 0;
Snake.bend_y = 0;
}
score = 0;
gamedelay = 1000;

} Main Functionint main () {
initwindow(1018, 736,"Snake 1.0");
initgamedata ();
initscreen ();
gameengine ();
return 0;
}
 

nozhan_kord

New Member
SALAM YE DONYE MAMNON KE JAVAB DADID
age mishe mano dar vared kardane code ha dar kojaye barname rahnamii konid
rasti man ba tourbo C3 kar mikonam va barname khili error mide age mishe in source code ke marbot be harekate mar mishe baresi konid vabegid ke irade kar kojast man ziyad to barname nevisi maher nistam

mamnon misham age bazam be bande komak konid
oh rasti man mikham tarahi mar va harekatesh toye yek mohit neveshte beshe chetori mitonam in 2ta source codo be ham atach konam

SOURCE CODE harekate mar
#include <stdio.h>
#define LEFT 1
#define RIGHT 2
#define UP 3
#define DOWN 4
int gamedelay;
struct Snake_Data {int length;
int head_x;
int head_y;
int head_dir;
int tail_x;
int tail_y;
int tail_dir;
int bend_x [1000];
int bend_y[1000];
} Snake;
{
if (Snake.head_dir == LEFT)
{
Snake.head_x --;
}
if (Snake.head_dir == RIGHT)
{
Snake.head_x ++;
}
if (Snake.head_dir == UP)
{
Snake.head_y --;
}
if (Snake.head_dir == DOWN)
{
Snake.head_y ++;
}
putpixel (Snake.head_x, Snake.head_y,15);
putpixel (Snake.tail_x, Snake.tail_y,0);
if (Snake.tail_dir == LEFT)
{
Snake.tail_x --;
}
if (Snake.tail_dir == RIGHT)
{
Snake.tail_x ++;
}
if (Snake.tail_dir == UP)
{
Snake.tail_y --;
}
if (Snake.tail_dir == DOWN)
{
Snake.tail_y ++;
}

}

void gameengine ()
{
while (1)
{
movesnake ();
delay (5);
}
}

void initscreen ( )
{
int i;
char scorestring [100];


setcolor (4);
line (10,10,10,700);
line (1008,10,1008,700);
line (10,700,1008,700);
line (10,10,1008,10);


sprintf (scorestring, "Score : %d", score);
outtextxy (20,710, scorestring);


for (int i = Snake.length; i>0;i--) //This part should be redesigned for change of code of intial values
{
putpixel (Snake.head_x-i,Snake.head_y,15);
}
}void initgamedata ( )
{
int i;
Snake.length = 100;
Snake.head_x = 200;
Snake.head_y = 200;
Snake.head_dir = RIGHT;
Snake.tail_x = Snake.head_x- Snake.length;
Snake.tail_y = Snake.head_y;
Snake.tail_dir = Snake.head_dir;
for (int i = 0; i <1000;i++) // There is no bend initally
{
Snake.bend_x = 0;
Snake.bend_y = 0;
}
score = 0;
gamedelay = 1000;

} Main Functionint main () {
initwindow(1018, 736,"Snake 1.0");
initgamedata ();
initscreen ();
gameengine ();
return 0;
}
 

aminramezan

New Member
ببخشید وقتی که من برنامه ماشین حساب را اجرا میکنم error:IOSTREAM.H 19 : error directive :must use c for the type iostream میده میشه من را راهنمایی کنید.
ممنون
 

najmeh_67_2007

New Member
دستورات گرافیکی در c++ به چه صورت هستند؟

سلام خسته نباشید،
می خواستم راجع به گرافیک در سی پلاس پلاس بدونم. در یک پروژه کوچک خواسته شده که برنامه یک تابع دریافت کرده (مثلا y=x+1) و نمودار آن را توسط دستورات گرافیکی در سی پلاس پلاس رسم کند. لطفا راهنمایی ام کنید.
متشکرم.
 

sinaeslami

Member
کمک در کشیدن دایره در c++

دوستان اگه میشه در کشیدن شکل زیر به کمک دایره و کمان در سی پلاس پلاس کمکم کنین
111111.JPG
 

saalek110

Well-Known Member
در این پست:
http://forum.majidonline.com/showpost.php?p=624867&postcount=14
برنامه پایه حاوی دایره هست.
در help توربو سی نگاه کن. arc را باید داشته باشد. احتمالا یکی دو تا از ورودی هایش مقدار و زاویه رسم شده باید باشد.

------------------------
ادیت در روز بعد:

من به help توربو سی مراجعه کردم این شرح را یافتم:
کد:
void far arc(int x, int y, int stangle, int endangle, int radius);


arc draws a circular arc in the current drawing color.
کد:
 Argument ===== What It Is/Does
ÍÍÍÍÍÍÍÍÍÍ=====ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ
 (x,y)    ===== Center point of arc, circlew, or pie slice
 stangle  ===== Start angle in degrees
 endangle ===== End angle in degrees
 radius   ===== Radius of arc, circle, and pieslice


برای رنگ کردن هم توابع این کار موجود است. در همان help نگاه کنید.
 

جدیدترین ارسال ها

بالا