///+ 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 linkto basiccode3_2a ////Prepare variables for movie control; int frame=0; int motion_dir=1; double Horizontal_shift, Vertical_shift; ///- 2.1 linkto basiccode3_2a while(!Keyboard::esc.pushed()){ window.clear(Color::black); for(int i=0; i < rectnum; i++){ ///+ 2.2 loopset1 ////set positions and sizes Horizontal_shift=sin(2 * PI * ((double)frame / 30.0/*ID:Period_HPosition 30 240 30*/))*motion_dir * 100.0/*ID:HSpeed 0.0 100.0 10.0*/; //Calculate horizontal displacement from the center. Vertical_shift=sin(2 * PI * ((double)frame / 30.0/*ID:Period_HPosition 30 240 30*/))*motion_dir * 0.0/*ID:VSpeed 0.0 100.0 10.0*/;//Calculate vertical displacement from the center. rect[i].resize(rectsize, rectsize); //Resize rectangles. rect[i].centering(); //Rectangles are moved to the center... rect[i].shift(Horizontal_shift + (i-0.5*rectnum) * rectsize * 1.5/*ID:RectHGap 1.0 3.0 0.5*/, Vertical_shift + (i-0.5*rectnum) *rectsize * 1.5/*ID:RectVGap 1.0 3.0 0.5*/); //and then move to designated positions ///- 2.2 loopset1 ///+ 2.3 linkto basiccode3_2a ////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 linkto basiccode3_2a } ///+ 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_2b.xap