C++ 创建类对象数组(C+;+;)

C++ 创建类对象数组(C+;+;),c++,arrays,class,object,C++,Arrays,Class,Object,我一直在尝试制作一个模拟器,其中包括随机运行的蚂蚁(目前…),我想制作一个“蚂蚁”数组,包含我所有的蚂蚁信息和后续函数。我该怎么做??(如果可能的话,用我的代码举例)(我对java相当了解,所以如果你能把它和java联系起来,那就太好了 //inclusions #include <GLUT/glut.h> #include <OpenGL/glu.h> #include <OpenGL/gl.h> #include <stdio.h> #incl

我一直在尝试制作一个模拟器,其中包括随机运行的蚂蚁(目前…),我想制作一个“蚂蚁”数组,包含我所有的蚂蚁信息和后续函数。我该怎么做??(如果可能的话,用我的代码举例)(我对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;
}
//包含
#包括
#包括
#包括
#包括
#包括
#包括
//声明
//类声明
无效键盘(无符号字符键,整数x,整数y);
void keyboardUp(无符号字符键,整数x,整数y);
无效鼠标定位(int,int);
INTONMOUSE;
int右键单击;
int a=0;
int-mx;
intmy;
浮动红色=1.0,蓝色=0,绿色=0;
蚂蚁类{
int x;
int-y;
int型;
Ant(){}//私有默认构造函数
公众:
Ant(int nx,int ny,int ntype)
{
x=nx;
y=ny;
类型=ntype;
}
void SetX(int-swagger)
{
x=趾高气扬;
}
虚塞蒂(纽约州)
{
y=ny;
}
void SetType(int-ntype)
{
类型=ntype;
}
int GetX(){return x;}
int GetY(){return y;}
};
//鼠标侦听器方法
无效鼠标位置(整数x,整数y){
mx=x;
my=y;
}
无效鼠标点击(int按钮、int状态、int x、int y){
mx=x;
my=y;
如果(按钮==GLUT\U LEFT\U按钮和状态==GLUT\U DOWN){
onMouse=1;
}
如果(按钮==GLUT\U LEFT\U按钮和状态==GLUT\U UP){
onMouse=0;
}
如果(按钮==GLUT\U RIGHT\U按钮和状态==GLUT\U UP){
右键单击=0;
}
如果(按钮==GLUT\U RIGHT\U按钮和状态==GLUT\U DOWN){
右击=1;
}
}
//keylistner方法
无效键盘(无符号字符键,整数x,整数y)
{
如果(键=='a')
{
a=1;
}
}
void keyboardUp(无符号字符键,整数x,整数y)
{
如果(键=='a')
{
a=0;
}
}
//蚂蚁方法
int随机移动(int位置,int速度)
{
速度++;
int random=rand()%speed-speed/2;
位置=位置+随机;
返回位置;
}
//绘图方法
蚂蚁ant1(100100,1);
蚂蚁ant2(50500,1);
//下面是我想尝试ant数组的地方
//Ant ants[x],然后我将用SetX,SetY…方法填充这些值
void ant()
{
int a2=随机移动(ant1.GetX(),2);
ant1.SetX(a2);
线宽(1);
glBegin(GL_行);
gl4f(1,0,0,1);
glVertex2i(ant1.GetX(),ant1.GetY());
glVertex2i(ant1.GetX()+5,ant1.GetY()+5);
格伦德();
}
无效行1()
{
如果(a==1)
{
glLineWidth(2.5);
glBegin(GL_行);
glVertex2i(80,20);
glVertex2i(100400);
格伦德();
}
}
无效行2()
{
如果(onMouse==1)
{
glLineWidth(2.5);
glBegin(GL_行);
glVertex2i(200,20);
glVertex2i(100400);
格伦德();
}
}
void rect1()
{
如果(mx>=50&&my>=50)
{
int x=100;
int y=100;
int w=100;
int h=100;
无符号整数rgba=0xff0000ff;//红色,无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);
格伦德();
GL4F(1,1,1,1);
}
}
void rect2()
{
如果(右击==1)
{
int w=100;
int h=100;
无符号整数rgba=0xff0000ff;//红色,无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);
格伦德();
GL4F(1,1,1,1);
}
}
//渲染绘制方法
无效渲染效果(无效){
glClear(GLU颜色缓冲位);
glColor3f(红色、绿色、蓝色);
蚂蚁();
第1行();
第2行();
rect1();
rect2();
glFlush();
}
//图形初始化方法
void init(void)
{
glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);
glutInitWindowSize(500500);
位置(100100);
测试窗口(“测试”);
glClearColor(0,0,0,1.0);
glMatrixMode(GL_投影);
glLoadIdentity();
gluOrtho2D(0500,0500);
}
//主/图形调用
int main(int argc,字符**argv)
{
glutInit(&argc,argv);
init();
glutDisplayFunc(渲染亮度);
glutIdleFunc(渲染);
glutMouseFunc(mouseClicks);
GLUTemotionFunc(鼠标定位);
glutKeyboardUpFunc(键盘向上);
键盘Func(键盘);
glutMainLoop();
返回0;
}

您可以在
main
中创建
Ant
对象的数组,与创建任何其他数组的方式相同,但类型为
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
 }
蚂蚁[25];//25个蚂蚁对象
/*把它们都放在一起,作为一个例子*/

对于(i=0;你的意思是你想要一个
Ant
对象的数组吗?是的,你能给我看看吗?很抱歉,我昨天没有看到你的评论。如果你还在挣扎,请看下面我的答案。这是未来的提示:你的问题相当简单:“我如何制作一个‘Ant’数组?”,但你给了我们一个226行的程序,其中大约有225行与数组无关。重要的是要学会只提取问题代码的相关部分。没有人需要阅读整个程序来回答你的问题,那么你为什么要添加它呢?感谢我自己尝试过的解决方案,但我得到了答案(在OSX的Xcode中)“调用Ant类的私有构造函数”尝试将默认构造函数行
Ant(){}//private default constructor
移动到
public:
下的
Ant
类中。