اینم مثل بقیه است فقط دوتا دایره و یک نقطه بیشتر باید روی کاربرد این دقت کنی glPushMatrix();
اینم مثل بقیه است فقط دوتا دایره و یک نقطه بیشتر باید روی کاربرد این دقت کنی glPushMatrix();
عزیز جان من از ظهر هزار تا چیز بلکه امتحان کردم و نشد ... سیزدهمونم با برنامه در شد ... دادا رو کن ببینیم چجوریه ... نمی دونم چرا با C++ و OpenGL اصلا راحت نیستم ... C# خیلی بهتره به نظرم ...
ببین شما با سی شارپ بنویس قبولت داریم............... با وی بی هم نوشتی مسئله ایی نیست
خب با C# هم بنویسم باز OpenGl داره دیگه ... ولی ای کاش یه سری پروژه آماده ساده بود تا آدم از روش یاد می گرفت ... چشم بسته که نمی شه نوشت داداشی ... اگه آدرسی چیزی تو نت داری که از اینا داره رو کن ... این آخرین تمرینم بزار که ما تو کفیم ...
راستش اینو خودم تا الان ننوشتم اما برای تمرین یک کتاب به نام رد بوک Red book تمرینای خیلی خیلی ساده داره یک نگاه به تمریناش بنداز
اینم کد همون دو تا دایره با تنظیم سرعت :
#include <GL/glut.h>
float g_fSpeed;
float g_fCur_Angle;
void special( int key, int x, int y)
{
switch(key)
{
case GLUT_KEY_UP:
g_fSpeed+=0.1f;
break;
case GLUT_KEY_DOWN:
g_fSpeed-=0.1f;
break;
}
}
//
void GL_Display(void)
{
g_fCur_Angle += g_fSpeed;
// pak kardane safhe
glClear(GL_COLOR_BUFFER_BIT);
glColor3f(0.0, 0.0, 0.0);
GLUquadricObj *circle = gluNewQuadric ();
gluQuadricDrawStyle (circle, GLU_SILHOUETTE);
gluDisk (circle,0,0.8,5000,1);
gluDeleteQuadric(circle);
// daire aval
glPushMatrix();
glPointSize(5.0);
glRotatef(g_fCur_Angle,0,0,0.1);
glColor3f(0.0, 0.0, 1.0);
glBegin(GL_POINTS);
glVertex2f(0.25, 0.75);
glEnd();
glPopMatrix();
// daire dovom
glPushMatrix();
glPointSize(10.0);
glRotatef(-g_fCur_Angle,0,0,0.1);
glColor3f(1.0, 0.0, 1.0);
glBegin(GL_POINTS);
glVertex2f(0.25, 0.75);
glEnd();
glPopMatrix();
glutSwapBuffers();
}
// initialize function
void GL_Init(void)
{
// pak kardane safhe ba range sefid
glClearColor(1.0,1.0,1.0,1.0);
// tanzim sorat harkat be 1
g_fSpeed = 1.0f;
g_fCur_Angle = 0.0f;
// narma kardane (daire kardan) nogat
glEnable(GL_POINT_SMOOTH);
}
int main(int argc, char **argv)
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGBA);
glutInitWindowPosition(500,500);
glutInitWindowSize(400,400);
glutCreateWindow("Circle");
GL_Init(); // initializing OpenGL
glutDisplayFunc(GL_Display);
glutIdleFunc(GL_Display);
glutSpecialFunc(special);
glutMainLoop();
return 0;
}
فکر کنم دنبال این بودین بازم اگر چیزی رو جا انداخته باشم بگین.
نمی دونم پویا جون تو چرا به ما که می رسی دقت نمی کنی اینو که جواب دادیم سوال سوم الان مسئله است ؟https://barnamenevis.org/showpo...7&postcount=77
الان مسئله اینه
3- برنامه ایی بنویسید که در آن یک دایره رو محیط دایره دیگر گردش کرده و این مجموعه نیز دور یک دایره بزرگ تر حرکت کنند.
اینم جواب مسئله ی سوم
#include <windows.h>
#include <GL/glut.h>
GLfloat i=0;
void Display()
{
glClear(GL_COLOR_BUFFER_BIT);
glPushMatrix();
glColor3f(1.0, 0.5, 0.0);
GLUquadricObj *circle = gluNewQuadric ();
gluQuadricDrawStyle (circle, GLU_SILHOUETTE );
gluDisk (circle,0,0.77,500,1);
glRotatef(i,0,0,-i);
glTranslatef(0.55,0.55,0);
glPushMatrix();
glColor3f(1.0, 0.0, 1.0);
gluQuadricDrawStyle (circle, GLU_LINE );
gluDisk (circle,0,0.15,10,1);
gluDeleteQuadric(circle);
glPopMatrix();
glPushMatrix();
glEnable (GL_POINT_SMOOTH);
glBlendFunc (GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
i-=0.04;
glRotatef(i*2,0,0,0.1);
glPointSize(5.0);
glColor3f(0.0, 1.0, 1.0);
glBegin(GL_POINTS);
glVertex2f(0.11, 0.11);
glEnd();
glPopMatrix();
glPopMatrix();
glutSwapBuffers();
}
int main(int argc, char **argv)
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB);
glutInitWindowPosition(500,500);
glutInitWindowSize(300,300);
glutCreateWindow("Circle - 01");
glClearColor(1.0,1.0,1.0,0.0);
glutDisplayFunc(Display);
glutIdleFunc(Display);
glutMainLoop();
return 0;
}
سلام
شرمنده از اونجا که وقت ندارم. نمی تونم تاپیک ها طولانی رو بخونم و سعی میکنم تنها به مشکل رسیدگی کنم؟!!!!
اما در مورد این مسال: همه اینها مثالهای ساده push/pop هستند. بهتون پیشنهاد میکنم که کلا بیخیال push و pop بشین و برین بجاش مستقیما روی ماتریسهای اینها کار کنین. عملا وقتی که بخواین یه پروژه بزرک رو شروع کنید و یا وقتی که بخوایید از OpenGL 3.0 به بعد استفاده کنید دیگه نمی تونید از این دستورها کمک بگیرین. حتی توی OpenGL 2.x هم زمانی که بخوایین از شیدرها استفاده بکنید این مساله تا حدودی مخصوصا برای شیدرها پیچیده صحت پیدا میکنه:
توی GLSL ویرایش ها 110 (1.10) و 120 ( نیازمند OpenGL 2.1 ، ویرایش 1.2) چند متغییر وجود دارن که می تونین به کمک اونها ماتریس ها مدل نما و ... رو بدست بیارین (مثلا متغییرهای توکار gl_ModelViewMatrix و gl_NormalMatrix) اما داخل ویرایش های بالاتر GLSL یعنی هسته 130 به بالا این متغییرها حذف شدن.
به طور کلی استفاده از push/pop ماتریسها از رده خارج شده و استفاده از اونها برای برنامه نویسی گرافیکی حرفه ای به طور کل (کاملا) مشکل ساز هستش.
برنامه ایی بنویسید که شکل ضمیمه را پیاده سازی کند؟
سلام ... من اینو نوشتم ولی نمی دونم چطوری باید دایره رو نصف کنم ...
#include <math.h>
#include <GL/glut.h>
void Display(void)
{
glClear(GL_COLOR_BUFFER_BIT) ;
glColor3f(1.0, 0.0, 0.0);
GLUquadricObj *circle = gluNewQuadric ();
gluQuadricDrawStyle (circle, GLU_SILHOUETTE);
gluDisk (circle,0,0.4,5000,1);
gluDeleteQuadric(circle);
glBegin(GL_LINES);
glVertex2f(0.90, 0.0);
glVertex2f(0.40, 0.0);
glVertex2f(-0.40, 0.0);
glVertex2f(-0.90, 0.0);
glEnd();
glutSwapBuffers() ;
}
int main(int argc, char **argv)
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB);
glutInitWindowPosition(500,500);
glutInitWindowSize(300,300);
glutCreateWindow("mS Circle");
glClearColor(1.0,1.0,1.0,0.0);
glutDisplayFunc(Display);
glutIdleFunc(Display);
glutMainLoop();
return 0;
}
راهنمایی کنید اینم حله ... فایلشم گذاشتم ...
ببین منم نمی دونم چطور باید دایره را نصف کرد ولی می شه دایره را با مختصات قطبیش رسم کرد.
فرض کن اصلا از این کد نمی تونیم استفاده کنیم
GLUquadricObj *circle = gluNewQuadric ();
gluQuadricDrawStyle (circle, GLU_SILHOUETTE);
gluDisk (circle,0,0.4,5000,1);
gluDeleteQuadric(circle);
البته میشه روشو با یک مربع سفید پوشش داد تا نصفش معلوم باشه ولی یک راه دیگه البته چند راه داره
همینو اگه بخوایم با یک مربع سفید بپوشونیم چه باید بکنبم ؟
از تابع زیر می شه استفاده کرد
glRectf ( x1 , y1 , x2 , y2 ) ;
#include <math.h>
#include <GL/glut.h>
void Display(void)
{
glClear(GL_COLOR_BUFFER_BIT) ;
glColor3f(1.0, 0.0, 0.0);
GLUquadricObj *circle = gluNewQuadric ();
gluQuadricDrawStyle (circle, GLU_SILHOUETTE);
gluDisk (circle,0,0.4,5000,1);
gluDeleteQuadric(circle);
glBegin(GL_LINES);
glVertex2f(0.90, 0.0);
glVertex2f(0.40, 0.0);
glVertex2f(-0.40, 0.0);
glVertex2f(-0.90, 0.0);
glEnd();
glColor3f(1.0, 1.0, 1.0);
glRectf ( -0.4 , -0.5 , 0.4 , 0 ) ;
glutSwapBuffers() ;
}
int main(int argc, char **argv)
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB);
glutInitWindowPosition(500,500);
glutInitWindowSize(300,300);
glutCreateWindow("mS Circle");
glClearColor(1.0,1.0,1.0,0.0);
glutDisplayFunc(Display);
glutIdleFunc(Display);
glutMainLoop();
return 0;
}
آخرش کار خودت رو کردی ها من منظورم این بود
#include <math.h>
#include <GL/glut.h>
GLfloat pi=3.1415;
void Display()
{
glClear(GL_COLOR_BUFFER_BIT);
glColor3f(1.0, 0.5, 0.0);
glBegin(GL_LINE_STRIP);
glVertex2f( 0.9,0.0);
for(GLfloat i=0.0;i<=180;i+=1.0)
glVertex2f(0.5*cos((pi/180)*i),0.5*sin((pi/180)*i));
glVertex2f(-0.9,0.0);
glEnd();
glutSwapBuffers();
}
int main(int argc, char **argv)
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB);
glutInitWindowPosition(500,500);
glutInitWindowSize(300,300);
glutCreateWindow("Circle - 03");
glClearColor(1.0,1.0,1.0,0.0);
glutDisplayFunc(Display);
glutMainLoop();
return 0;
}
سوال بعدی ساخت یک صفحه ی شطرنج ساده ؟
البته راههای مختلفی وجود داره ...آخرش کار خودت رو کردی ها من منظورم این بود ...
من اینو نوشتم می خوام بدونم اشکالش کجاست ... حدس میزنم تو خیلی حلقه میوفته اما نمی دونم چطور باید کنترل کرد ...
#include <math.h>
#include <GL/glut.h>
void Display(void)
{
float i , j ;
int c=1 ;
for(i=0;i=10;i++)
{
for(j=0;j=10;j++)
{
c+=1;
if(c%2==1)
{
glClear(GL_COLOR_BUFFER_BIT) ;
glColor3f(0.0, 0.0, 0.0);
}
else
{
glClear(GL_COLOR_BUFFER_BIT) ;
glColor3f(1.0, 1.0, 1.0);
}
glRectf ( -i/10 , -j/10 , i/10 , j/10 ) ;
}
}
glutSwapBuffers() ;
}
int main(int argc, char **argv)
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB);
glutInitWindowPosition(500,500);
glutInitWindowSize(300,300);
glutCreateWindow("mS Circle");
glClearColor(1.0,1.0,1.0,0.0);
glutDisplayFunc(Display);
//glutIdleFunc(Display);
glutMainLoop();
return 0;
}
اینم کامل اصلاح شد
#include <math.h>
#include <GL/glut.h>
void Display(void)
{
glClear(GL_COLOR_BUFFER_BIT) ;
int c=1,i , j ;
glTranslatef(-0.8,-0.8,0);
for(j=0;j<8;j++){
for(i=0;i<8;i++)
{
c+=1;
if(c%2==1)
{
glColor3f(0.0, 0.0, 1.0);
}
else
{
glColor3f(1.0, 1.0, 0.0);
}
glRectf ((i*0.21 ), (j*0.21 ) , (i*0.21)+0.2 , (j*0.21 )+0.2 ) ;
}c+=1;}
glutSwapBuffers() ;
}
int main(int argc, char **argv)
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB);
glutInitWindowPosition(500,500);
glutInitWindowSize(300,300);
glutCreateWindow("Circle -04");
glClearColor(1.0,1.0,1.0,0.0);
glutDisplayFunc(Display);
glutMainLoop();
return 0;
}
برنامه بعدی مهره اسب را طراحی کنید؟
آخرین ویرایش به وسیله amin1softco : شنبه 14 فروردین 1389 در 20:20 عصر
#include <math.h>
#include <GL/glut.h>
void Display(void)
{
glClear(GL_COLOR_BUFFER_BIT) ;
int c=1,i,j ;
glTranslatef(-0.8,-0.8,0);
for(j=0;j<8;j++){
for(i=0;i<8;i++)
{
c+=1;
if(c%2==1)
{
glColor3f(0.0, 0.0, 0.0);
}
else
{
glColor3f(1.0, 1.0, 1.0);
}
glRectf (i*0.2,j*0.2,i*0.2+0.2,j*0.2+0.2) ;
}
c+=1;
}
glutSwapBuffers() ;
}
int main(int argc, char **argv)
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB);
glutInitWindowPosition(500,500);
glutInitWindowSize(300,300);
glutCreateWindow("My Circle");
glClearColor(1.0,1.0,1.0,0.0);
glutDisplayFunc(Display);
glutMainLoop();
return 0;
}
مال من صفحه تر شده ... سه ساعت داشتم جاگذاری می کردم ... البته فکر میکنم اگه بشه یه تابعی نوشت که بدون ضرب فقط با جمع کار کنه اینجوری اطراف صفحه خالی نمیمونه ... میشه کل صفحه رو پر کرد ... البته اون فکر کنم تعداد خطوطش زیاد میشه ... دادا رو کن یه مثالی که حرکت داشته باشه ...
خوب حالا یک کاری کن که به ترتیب از اول صفحه هر خونه یک بار با یک رنگ دیگه چشمک بزنه و بره خونه بعدی؟
بعدشم مهره اسب رو طراحی کن؟
نمیکشه چرا ؟؟؟
#include <iostream>
#include <fstream>
#include <windows.h>
#include <GL/glut.h>
using namespace std ;
void display (void)
{
glClear(GL_COLOR_BUFFER_BIT) ;
glColor3f(1.0, 1.0, 0.0);
GLint xj, yj, j;
fstream inStream ;
inStream.open("horse.txt", ios ::in);
if(!inStream) {
cout << "File would not open\n";
return;
}
glBegin(GL_LINE_LOOP);
for (j=1 ; j<=16 ; j ++)
{
inStream >> xj >> yj ;
cout << xj << " " << yj<<"\n" ;
glVertex2i(xj,yj) ;
}
glEnd();
glFlush();
glutSwapBuffers() ;
}
int main(int argc, char **argv)
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB);
glutInitWindowPosition(500,100);
glutInitWindowSize(500,500);
glutCreateWindow("horse");
glClearColor(1.0,1.0,1.0,0.0);
glLineWidth(5.0);
glutDisplayFunc(display);
glutMainLoop();
return 0;
}
اینم نقطه هاش
یادت رفته ماتریس پروجکشن رو ست کنی به صورت نرمال بر حسب 1 هست
glMatrixMode(GL_PROJECTION); //projection parameters
gluOrtho2D(0.0,75.0,0.0,75.0); //sets up WC extent
نتیجه کارت اینه
حالا چطوری بعد بهش بدیم و سه بعدیش کنیم
یه سوال بعد دادن به اینه و یکی این که چطوری میشه توشو رنگ کرد ؟
برای اینکه داخلش رنگ بشه باید از
glBegin(GL_QUADS)
ya
glBegin(GL_POLYGON)
استفاده کنید برای بعد دادن خودتون روش فکر کنید و اون خط و نیم دایره رو هم در نظر بگیرید
میتونید به جای GL_LINES یا GL_LINE_LOOP از GL_POLYGON استفاده بکنید.
البته در این مورد یه دستور مفید هم به اسم glPolygonMode وجود داره که داری دو پارامتر هستش. پارامتر اول سطح رو مشخص میکنه (جلو یا عقب چند ضلعی) که میتونه مقادیر زیر رو بگیره:
- GL_FRONT: سطح جلویی چند ضلعی
- GL_BACK: سطح پشتی چند ضلعی
- GL_FRONT_AND_BACK: سطح رو و پشت چند ضلعی
و پارامتر دوم نوع رسم ورتکس ها و فضای مابین آنها رو مشخص میکنه. این پارامتر میتونه مقادیر زیر رو بگیره:
- GL_POINT: به جای هر ورتکس یه نقطه میزاره (مثل GL_POINTS در دستور glBegin عمل میکنه.)
- GL_LINE: ورتکس ها رو با خط بهم متصل می کنه (مثل GL_LINE_LOOP توی glBegin). اصطلاحا توی این حالت میگن شکل سیمی (wired) رسم شده.
- GL_FILL: فضای داخل چند ضلعی رو پر میکنه.
آقا الان اسب رو داریم صفحه شطرنج رو هم دارم حالا چطوری می تونیم الگوریتم معروف اسب شطرنج رو پیاده کنیم که 64 خونه رو طی کنه بدون خانه های تکراری؟!!؟
میگم اول یه کار دیگه بکنیم ... اسب رو سه بعدی بکشیم ... بعدش ... به نظرم بیشتر رو موارد گرافیکی تاکید کنیم تا الگوریتمی ... البته این نظر منه ... ولی اگه موافق نبودین ادامه می دیم ...
اصولا برای ساخت مهره باید باید یک نرم افزار سه بعدی مثل مکس یک اسب بسازیم و خروجی ابجکت ازش بگیریم و با OpenGL لودش کنیم ولی به نظر من حالا بازی رو می نویسیم بعد دوباره گسترشش می دیم یعنی اول دو بعدی و بعدش سه بعدی البته یک کار دیگه هم می شه کرد البته اسب نمی شه اما خوب بدکی نیست میشه یک خط شبیه یک برش از سطح مهره اسب را برداشت و دور خودش دوران دادن ....
به نظر من یک طرح جدید باشه خیلی بهتره ... آدمو بیشتر جذب میکنه ، خلاقانه ترم هست
دوستان من این اسب شطرنج رو نوشتم ...
#include <windows.h>
#include <stdlib.h>
#include <ctime>
#include <GL/glut.h>
GLint i=0;
int nrandom(int max)
{ srand(time(NULL));
return rand() % max;
}
#define NMOVES 8
#define BSIZE 8
int moves[8][2] = { {2, 1}, {2, -1}, {1, 2}, {1, -2}, {-1, 2}, {-1,-2}, {-2, 1}, {-2, -1} };
int board[BSIZE][BSIZE];
int mpositionx = nrandom(BSIZE);
int mpositiony = nrandom(BSIZE);
int mmove_number = 2;
int mmove[2];
///////////////////////
int in_range_and_empty(int posx, int posy)
{
return (posx < BSIZE && posx >= 0 &&
posy < BSIZE && posy >= 0 &&
board[posx][posy] == 0);
}
int get_accessibility(int x, int y)
{
int accessibility = 0;
int i;
for (i = 0; i < NMOVES; i++)
{
if (in_range_and_empty(x + moves[i][0], y + moves[i][1]))
accessibility += 1;
}
return accessibility;
}
void get_next_moves(int* move)
{
int positionx = move[0];
int positiony = move[1];
int accessibility = NMOVES;
int i;
for (i = 0; i < NMOVES; i++)
{
int newx = positionx + moves[i][0];
int newy = positiony + moves[i][1];
int newacc = get_accessibility(newx, newy);
if (in_range_and_empty(newx, newy) && newacc < accessibility)
{
move[0] = newx;
move[1] = newy;
accessibility = newacc;
}
}
}
//////////////////////End of knight func
void Board(GLfloat x,GLfloat y){
int c=1,i , j ;
for(j=0;j<8;j++){
for(i=0;i<8;i++)
{
c+=1;
if(c%2==1)
{
glColor3f(255*(1.00/255), 162*(1.00/255), 0*(1.00/255));
}
else
{
glColor3f(1.0, 1.0, 1.0);
}
glRectf (x+(i*21 ), y+(j*21 ) , x+(i*21)+20 , y+(j*21 )+20 ) ;
}c+=1;}
}
////////////////////End of Board
void output(int x, int y, char *string)
{
int len, i;
glRasterPos2f(x, y);
len = (int) strlen(string);
for (i = 0; i < len; i++)
{
glutBitmapCharacter(GLUT_BITMAP_TIMES_ROMAN_24 , string[i]);
}
}
////////////////////End of output
void horse(GLfloat x,GLfloat y){
//glPushMatrix();
glBegin(GL_LINE_LOOP);
glVertex2f(x+10, y+1 );
glVertex2f(x+20, y+15);
glVertex2f(x+10, y+15);
glVertex2f(x+15, y+50);
glVertex2f(x+30, y+70);
glVertex2f(x+33, y+70);
glVertex2f(x+33, y+67);
glVertex2f(x+40, y+60);
glVertex2f(x+50, y+50);
glVertex2f(x+40, y+40);
glVertex2f(x+37, y+40);
glVertex2f(x+35, y+45);
glVertex2f(x+30, y+50);
glVertex2f(x+50, y+10);
glVertex2f(x+40, y+10);
glVertex2f(x+50, y+1);
glEnd();
//glPopMatrix();
}
/////////////////////////End of horse
void init(void){
glClearColor(1.0,1.0,1.0,0.0);
glMatrixMode(GL_PROJECTION); //projection parameters
gluOrtho2D(0.0,200.0,0.0,150.0); //sets up WC extent
}
void dis(void)
{
glPushMatrix();
glClear(GL_COLOR_BUFFER_BIT); //clears display window
Board(4.0,4.0);
glScalef(0.3,0.28,0);
for(int n=0;(n<8);n++)
for(int m=0;(m<8);m++){
if(board[n][m]){
char a[5]="0";
_itoa_s(board[n][m],a,10);
glColor3f(50*(1.00/255), 118*(1.00/255), 152*(1.00/255));
output((n*70)+15,(m*75)+17,a);
//glColor3f(0.0, 0.5, 0.5);
//horse((n*70)+15,(m*75)+15);
}};
if(i<64){
i++;
mmove[0] = mpositionx;
mmove[1] = mpositiony;
get_next_moves(mmove);
}
mpositionx = mmove[0];
mpositiony = mmove[1];
board[mpositionx][mpositiony] = mmove_number;
glColor3f(0.0, 1.0, 1.0);
horse((mpositionx*70)+15,(mpositiony*75)+15);
glColor3f(124*(1.00/255), 0*(1.00/255), 124*(1.00/255));
char a[5]="0";
_itoa_s(mmove_number,a,10);
output((mpositionx*70)+15,(mpositiony*75)+17,a);
if (i<63)mmove_number += 1;
Sleep(1000);
glFlush();
glPopMatrix();
glutSwapBuffers();
}
int main(int argc, char** argv)
{
for(int n=0;(n<8);n++)
for(int m=0;(m<8);m++)
board[n][m]=0;
mpositionx = nrandom(BSIZE);
mpositiony = nrandom(BSIZE);
board[mpositionx][mpositiony] = 1; // first move
glutInit(&argc, argv); //initialise GLUT
glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB); //sets display mode
glutInitWindowPosition(50, 100); //top left display window pos
glutInitWindowSize(500, 500); //display win width and height in pixel coords
glutCreateWindow("Knight 01"); //now create display win
glClearColor(1.0,1.0,1.0,0.0); //display window set to white
glMatrixMode(GL_PROJECTION); //projection parameters
gluOrtho2D(0.0,175.0,0.0,175.0); //sets up WC extent
glutDisplayFunc(dis); //call drawing func
glutIdleFunc(dis);
glutMainLoop(); //display all and wait
return 0;
}
برنامه بعدی یک ساعت دیواری که ساعت ویندوز را نمایش بده؟؟!؟! یا می تونیم یک چیزی شبیه انیمیشن ها انتظار اول وبلاگ ها که یک دایره است و یک سری خط ایجاد کنیم؟
آخرین ویرایش به وسیله amin1softco : سه شنبه 17 فروردین 1389 در 18:05 عصر
یه توضیحی در مورد ایت زیریا بده لطفا :
stdlib
ctime
srand
rand
stdlib برای تبدیل عدد به رشته ازش استفاده شده
ctime برای time(NULL)
srand برای تعیین هسته تابع راندوم
rand برای محاسبه اولین خانه تصادفی ازش استفاده شده
time(null) چه کارمیکنه ؟
sleep چیه قضیه اش ؟
time(null) برای اینه که برنامه با اجرا های متفاوت خانه های متفاوتی رو انتخاب کنه و کلا اینا زیاد مهم نیست فقط یک خانه اولیه تصادفی ایجاد می کنند برای شروع حرکت اسب
sleep برای اینه ایجاد حالت نمایشه چون ممکنه تابع dis خیلی زود به زود فراخوانی بشه این کنترل می کنه که در 7 دهم ثانیه تا اجرای بعدی صبر کنه.....
من تو نوشتن ساعت یه مشکل دارم :
چطوری میشه ساعت سیستم رو خوند و ازش استفاده کرد ؟
فکر کنم باgetitmerیاgettimeofdayولی نمیدونم چطوری میشه ازش استفاده کرد ؟
فقط به همین قطعه کد نیاز داری ساعت و دقیقه ثانیه
#include <time.h>
#include <stdlib.h>
void main(){
struct tm *time_now;
time_t secs_now;
int s,m,h;
tzset();
time(&secs_now);
time_now = localtime(&secs_now);
strftime(str, 3,"%H",time_now);
h=atoi(str);
strftime(str, 3,"%M",time_now);
m=atoi(str);
strftime(str, 3,"%S",time_now);
s=atoi(str);
sprintf(key,"%d:%d:%d",h,m,s);
}
یکم توضیح در مورد این کد میدی ؟ struct و tzset
ببین اینا مربوط به سی هستش و اصلا خودتو با اینها در گیر نکن اما struct حکم کلاس خودمون رو داره و اون تابع tzset برای ست کردن ساعت گرینویچ به ساعت محلی هستش....
#include <time.h>
#include <stdlib.h>
#include <stdio.h>
void main(){
struct tm *time_now;
time_t secs_now;
int s,m,h;
char str[2];
tzset(); //تبديل ساعت گرينويچ به ساعت محلي
time(&secs_now);
time_now = localtime(&secs_now);
strftime(str, 3,"%H",time_now);
h=atoi(str);
strftime(str, 3,"%M",time_now);
m=atoi(str);
strftime(str, 3,"%S",time_now);
s=atoi(str);
printf("%d:%d:%d",h,m,s);
}