///+ Prefix linkto basiccode1 //// Lines for set up Psychlops environment #include <psychlops.h> using namespace Psychlops; ///- Prefix linkto basiccode1 ///+ Main Routine //// Psychlops runs at the first line of this function psychlops_main(). void psychlops_main() { ///+ 0 linkto basiccode3_1a ////Prepare global parameters const int maxrectnum = 200; int rectnum = 100/*ID:rectnumber 25.0 200.0 25.0*/; double rectsize = 5.0/*ID:dotsize 1.0 10.0 1.0*/; Psychlops::Rectangle rect[maxrectnum]; double rectcolorR[maxrectnum]; double rectcolorG[maxrectnum]; double rectcolorB[maxrectnum]; ///- 0 linkto basiccode3_1a Canvas window(Canvas::window); ///+ 1 linkto basiccode3_1a ////Initialize for(int i=0; i < rectnum; i++){ ///+ 1.1 set1 ////set positions and sizes rect[i].set(rectsize, rectsize); //Set a size of rectangles. rect[i].centering(); rect[i].shift((i - 0.5 * rectnum) * rectsize* 1.5/*ID:RectHGap 1.0 3.0 0.5*/, (i - 0.5*rectnum) * rectsize * 1.5/*ID:RectVGap 1.0 3.0 0.5*/); //Move Rectangles to initial positions ///- 1.1 set1 ///+ 1.2 set2 ////set colors rectcolorR[i]=random(1.0) * 0.5/*ID:RGain 0.0 1.0 0.5*/; //Set R values. Note that "i" is converted to double-type. rectcolorG[i]=random(1.0) * 0.5/*ID:GGain 0.0 1.0 0.5*/; //Set G values. Note that "i" is converted to double-type. rectcolorB[i]=random(1.0) * 0.5/*ID:BGain 0.0 1.0 0.5*/; //Set B values. Note that "i" is converted to double-type. ///- 1.2 set2 } ///- 1 linkto basiccode3_1a ///+ 2 drawing ////drawing objects ///+ 2.1 setlocal ////Prepare variables for movie control; int frame = 0; int motion_dir = 1; double Horizontal_shift, Vertical_shift; ///- 2.1 setlocal while(!Keyboard::esc.pushed()){ window.clear(Color::black); if(frame % 30/*ID:Period_Position 30 240 30*/ ==0){ // motion direction will reverse at designated frames. motion_dir *= -1; } for(int i=0; i < rectnum; i++){ ///+ 2.2 loopset1 ////set positions and sizes Horizontal_shift=motion_dir * 1.0/*ID:HSpeed 0.0 5.0 1.0*/; Vertical_shift=motion_dir * 0.0/*ID:VSpeed 0.0 5.0 1.0*/; rect[i].resize(rectsize, rectsize); //Resize rectangles. rect[i].shift(Horizontal_shift, Vertical_shift); ///- 2.2 loopset1 ///+ 2.3 loopset2 ////set colors rectcolorR[i]=random(1.0)* 0.5/*ID:RGain 0.0 1.0 0.5*/; //Set R values. Note that "i" is converted to double-type. rectcolorG[i]=random(1.0)* 0.5/*ID:GGain 0.0 1.0 0.5*/; //Set G values. Note that "i" is converted to double-type. rectcolorB[i]=random(1.0)* 0.5/*ID:BGain 0.0 1.0 0.5*/; //Set B values. Note that "i" is converted to double-type. ///- 2.3 loopset2 } ///+ 2.4 linkto basiccode3_1a for(int i=0; i < rectnum; i++){ rect[i].draw(Color(rectcolorR[i], rectcolorG[i], rectcolorB[i])); //draw objects by designated colors. } window.flip(); ///- 2.4 linkto basiccode3_1a frame++; } ///- 2 drawing } ///- Main Routine
./3_2a.xap