الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

كيف أقوم بعمل دائرة بدلا من المربع

بدأه أحمدالغريب في 23 ديسمبر 2011 · 1 رد · 859 مشاهدة · في قسم برمجة الألعاب و الرسوميات العام
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم ورحمة الله وبركاته

لدي لعبة عبارة عن كرة ( لكن الكرة مربع ) أريد أن أعدلها لدائرة لكن المشكلة هي أنه يستخدم struct لعمل المربع لم أفهم البرنامج بالكامل وهناك الكثير من الكود لا يعمل أنا أستخدم VC++ 2010 الملف موجود في المرفقات.

BatwithBallGamecode.zip

صلي قبل ان يصلى عليك

#2

تقريبا محدش فهمني بصو يا جماعة ده ملف الهيدر اوكي بعد ما عدلته مسحت بعد الكود الي ملهوش لزمه بالنسبالي.....

#include <GL/glut.h>///#include <glut.h>
#include <stdio.h>
#include <GL/gl.h>///#include <glut.h>
#include <GL/glu.h>///#include <glut.h>

#define FROM_RIGHT      1 
#define FROM_LEFT       2 
#define FROM_TOP        3 
#define FROM_BOTTOM     4 

static int WINDOW_WIDTH ,WINDOW_HEIGHT;

int playerResult=0;
static float Xspeed=1,Yspeed=1; 
static float delta=4; 

char string [100];

struct RECTA
{ 
        float left,top,right,bottom; 
};

RECTA ball={100,100,120,120};
RECTA wall ;
RECTA player_1 ={0,490,40,500}; 

void DrawRectangle(RECTA  rect) 
{ 
        glBegin(GL_QUADS); 
        glVertex2f(rect.left,rect.bottom);      //Left - Bottom 
        glVertex2f(rect.right,rect.bottom); 
        glVertex2f(rect.right,rect.top); 
        glVertex2f(rect.left,rect.top); 
        glEnd(); 
}

void Timer(int v) 
{ 
         /* ??? ???? ????? ?? ??  5 ?? ????? ?? ??????? */ 

        ball.left+=Xspeed; 
        ball.right+=Xspeed; 
        ball.top+=Yspeed; 
        ball.bottom+=Yspeed; 

        glutTimerFunc(1,Timer,1); // ??? ????? ???? ??? ?? ??? ?????? ?????? ?????? 
}
void drawText(char*string,int x,int y)
{
	  char *c;
	  glPushMatrix();
	  glTranslatef(x, y,0);
	  glScalef(0.1,-0.1,1);

	  for (c=string; *c != '\0'; c++)
	  {
    		glutStrokeCharacter(GLUT_STROKE_ROMAN , *c);
	  }
	  glPopMatrix();

}

int Test_Ball_Wall(RECTA  ball , RECTA wall) 
{ 
        if(ball.right >=wall.right) 
        return FROM_RIGHT;  
        if(ball.left <=wall.left) 
        return FROM_LEFT;  
        if(ball.top <=wall.top) 
        return FROM_TOP;  
        if(ball.bottom >=wall.bottom) 
        return FROM_BOTTOM;  

        else return 0 ; 
}

bool Test_Ball_Player(RECTA ball,RECTA player) 
{ 
		if(ball.bottom >= player.top && ball.left>= player.left && ball.right <=player.right ) 
        {
			playerResult++;

            return true;  
		}

            return false;  
}

static float mouse_x=0; 
void MouseMotion(int x,int y)
{

	mouse_x=x;
}


// OpenGL Setting
void Setting(void) 
{
   glClearColor (0.0, 0.0, 0.0, 0.0);
   glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST);

}


// OnWindowResize 
void reshape (int w, int h)
{
	WINDOW_WIDTH =w ;
	WINDOW_HEIGHT =h ;

   glViewport (0, 0, (GLsizei) w, (GLsizei) h);

   glMatrixMode (GL_PROJECTION);
   glLoadIdentity ();
   gluOrtho2D (0, w, h, 0);


   glMatrixMode (GL_MODELVIEW);
   glLoadIdentity ();

}

طيب كل إلي أنا عايز أعمله هو تحويل المربع المتحرك إلى كرة أو دائرة....وإلي هو متعرف ك هيكل:

struct RECTA
{ 
        float left,top,right,bottom; 
};

RECTA ball={100,100,120,120};
RECTA wall ;
RECTA player_1 ={0,490,40,500}; 

void DrawRectangle(RECTA  rect) 
{ 
        glBegin(GL_QUADS); 
        glVertex2f(rect.left,rect.bottom);      //Left - Bottom 
        glVertex2f(rect.right,rect.bottom); 
        glVertex2f(rect.right,rect.top); 
        glVertex2f(rect.left,rect.top); 
        glEnd(); 
}

وأنا إحترت صراحة وبرضو عايز أفهم الجزية دي في اللعبة:

void drawText(char*string,int x,int y)
{
	  char *c;
	  glPushMatrix();
	  glTranslatef(x, y,0);
	  glScalef(0.1,-0.1,1);

	  for (c=string; *c != '\0'; c++)
	  {
    		glutStrokeCharacter(GLUT_STROKE_ROMAN , *c);
	  }
	  glPopMatrix();

}

أنا عارف إنها بتاعت كتابة الحروف على الشاشة بس في سطور مش عارف بتاعت ايه صراحة زي glPushMatrix(); وووو.....! يا ريت شرح مبسط للدالة :D والله الموفق تجاوبوني على الاسئلة دي وليكم هدية شوية أسئلة كمان :blink:

صلي قبل ان يصلى عليك

مواضيع مشابهة

عدد الزوار حالياً

المتواجدون خلال آخر دقيقتين · يتحدّث كل ٣٠ ثانية

—الإجمالي—أعضاء مسجّلون—زوار بدون تسجيل

جارٍ التحقق من المتواجدين…