创建一个类对象数组(C ++)

时间:2015-03-24 01:09:10

标签: c++ arrays class object

我一直在尝试制作一个模拟器,其中涉及随机运行的蚂蚁(现在......)我想制作一个“Ant”数组来包含我所有的蚂蚁信息和后来的功能。我该怎么做? (如果可能,请使用我的代码示例)(我非常了解java,所以如果你能将它与java相关联那就不错了

//inclusions
#include <GLUT/glut.h>
#include <OpenGL/glu.h>
#include <OpenGL/gl.h>
#include <stdio.h>
#include <math.h>
#include <stdlib.h>
//declarations

//class declarations


void keyboard (unsigned char key, int x, int y);
void keyboardUp (unsigned char key, int x, int y);
void mouseLocation(int,int);
int onMouse;
int rightClick;
int a = 0;
int mx;
int my;
float red=1.0, blue=0, green=0;

class Ant {
    int x;
    int y;
    int type;

    Ant() { } // private default constructor

public:
    Ant(int nx, int ny, int ntype)
    {
        x = nx;
        y = ny;
        type = ntype;
    }
    void SetX(int swagger)
    {
        x = swagger;
    }
    void SetY(int ny)
    {
        y = ny;
    }
    void SetType(int ntype)
    {
        type = ntype;
    }
    int GetX() { return x; }
    int GetY()  { return y; }
};

//mouse listener methods

void mouseLocation(int x,int y) {
    mx = x;
    my = y;
}
void mouseClicks(int button, int state, int x, int y) {
    mx = x;
    my = y;
    if(button == GLUT_LEFT_BUTTON && state == GLUT_DOWN) {
        onMouse = 1;
    }
    if(button == GLUT_LEFT_BUTTON && state == GLUT_UP) {
        onMouse = 0;
    }
    if(button == GLUT_RIGHT_BUTTON && state == GLUT_UP) {
        rightClick = 0;
    }
    if(button == GLUT_RIGHT_BUTTON && state == GLUT_DOWN) {
        rightClick = 1;
    }

}

//keylistner methods

void keyboard (unsigned char key, int x, int y)
{
    if (key == 'a')
    {
        a = 1;
    }
}

void keyboardUp (unsigned char key, int x, int y)
{
    if(key == 'a')
    {
        a = 0;
    }
}

//ant methods
int randommove(int position,int speed)
{
    speed++;
    int random = rand() %speed  - speed/2 ;
    position = position + random;
    return position;
}
//drawing methods

Ant ant1(100,100,1);
Ant ant2(50,500,1);
//Here is the where I want to try the ant array something like
//Ant ants[x] and then I would fill in the values with the SetX, SetY... methods
void ant()
{
    int a2 = randommove(ant1.GetX(),2);
    ant1.SetX(a2);
    glLineWidth(1);
    glBegin(GL_LINES);
    glColor4f(1, 0, 0, 1);
    glVertex2i(ant1.GetX(),ant1.GetY());
    glVertex2i(ant1.GetX()+5,ant1.GetY()+5);
    glEnd();
}

void line1()
{

    if(a == 1)
    {
        glLineWidth(2.5);
        glBegin(GL_LINES);
        glVertex2i(80,20);
        glVertex2i(100,400);
        glEnd();
    }
}
void line2()
{
    if(onMouse == 1)
    {
        glLineWidth(2.5);
        glBegin(GL_LINES);
        glVertex2i(200,20);
        glVertex2i(100,400);
        glEnd();
    }
}
void rect1()
{
    if(mx >= 50 && my >= 50)
    {
        int x = 100;
        int y = 100;
        int w = 100;
        int h = 100;
        unsigned int rgba = 0xff0000ff; // red, no alpha
        glBegin(GL_QUADS);
        glColor4f(((rgba>>24)&0xff)/255.0f,
                  ((rgba>>16)&0xff)/255.0f,
                  ((rgba>>8)&0xff)/255.0f,
                  (rgba&0xff)/255.0f);
        glVertex3f(x,y,0);
        glVertex3f(x+w,y,0);
        glVertex3f(x+w,y+h,0);
        glVertex3f(x,y+h,0);
        glEnd();
        glColor4f(1, 1, 1, 1);
    }
}
void rect2()
{
    if(rightClick == 1)
    {
        int w = 100;
        int h = 100;
        unsigned int rgba = 0xff0000ff; // red, no alpha
        glBegin(GL_QUADS);
        glColor4f(((rgba>>24)&0xff)/255.0f,
                  ((rgba>>16)&0xff)/255.0f,
                  ((rgba>>8)&0xff)/255.0f,
                  (rgba&0xff)/255.0f);
        glVertex3f(mx,my,0);
        glVertex3f(mx+w,my,0);
        glVertex3f(mx+w,my+h,0);
        glVertex3f(mx,my+h,0);
        glEnd();
        glColor4f(1, 1, 1, 1);
    }
}
//render drawing methods
void renderScence(void){

    glClear (GL_COLOR_BUFFER_BIT);
    glColor3f(red, green, blue);
    ant();
    line1();
    line2();
    rect1();
    rect2();
    glFlush();

}

//graphics init method
void init(void)
{
    glutInitDisplayMode(GLUT_SINGLE |GLUT_RGB);
    glutInitWindowSize (500,500);
    glutInitWindowPosition (100, 100);
    glutCreateWindow ("Testing");
    glClearColor (0, 0, 0, 1.0);
    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();
    gluOrtho2D(0, 500, 0, 500);
}

//main/graphics calls
int main(int argc,char** argv)
{
    glutInit(&argc, argv);
    init();
    glutDisplayFunc(renderScence);
    glutIdleFunc(renderScence);
    glutMouseFunc(mouseClicks);
    glutPassiveMotionFunc(mouseLocation);
    glutKeyboardUpFunc (keyboardUp);
    glutKeyboardFunc (keyboard);
    glutMainLoop();
    return 0;
}

1 个答案:

答案 0 :(得分:0)

您可以在Ant中创建main个对象的数组,这与您创建任何其他数组的方式相同,除了Ant类型 Ant ants[25]; // 25 Ant objects /* to set them all the same, as an example */ for(i=0; i<25; i++) { ants[i].SetX(1); // x = 1 ants[i].SetY(2); // y = 2 ants[i].SetType(3); // type = 3 } 1}}:

{{1}}