ランダムウォーク

提供:kuhalaboWiki
2016年11月8日 (火) 07:19時点におけるKuha (トーク | 投稿記録)による版

移動: 案内, 検索
ランダムに東西南北の方角に歩くアリ

クラスの作成

  • Ballクラスを作成
    • Ball.h Ballクラスの宣言。変数とメソッド(関数)
    • Ball.cpp コンストラクターBall()とメソッドの定義
  1. 新しくクラスを作るには、「プロジェクト > 新しい項目の追加...」 を開き,「C++ファイル」「ヘッダーファイル」を作る。
    • 名前を それぞれBall.cppBall.hとし、場所はともに ..\src とする
    • (注)「クラスの追加」や「クラスウィザード」は使えない。
  2. ソリューションエクスプローラー上のsrcの中にBall.cppBall.h が新規作成される。

ソースコード

Ball.h
#pragma once
#include "ofMain.h"

class Ball {
public:
	ofPoint pos;
	float radius;
	ofColor bcolor;
	int dw;  // 歩幅

	Ball();
	void draw();
	void update();
};
Ball.cpp
#include "Ball.h"

Ball::Ball(){
	pos = ofPoint(ofGetWidth()/2, ofGetHeight()/2);
	radius = ofRandom(10,20);
	bcolor = ofColor(ofRandom(0,255), ofRandom(0,255), ofRandom(0,255), 100);

	dw= 5;
}

void Ball::update(){
	int d = ofRandom(0, 4); //0から3までの乱数を発生
	switch(d)
	{
	   case 0:  // 東(X軸の正)へ進む
		pos.x += dw;
                break;
           case 1:  // 西(X軸の負)へ進む
		pos.x -= dw;
                break;
	   case 2:  // 南(Y軸の正)へ進む
		pos.y += dw;
                break;
	   case 3:  // 北(Y軸の負)へ進む
		pos.y -= dw;
                break;
        }

	if( pos.x > ofGetWidth() )  pos.x = 0;
	if( pos.x < 0 )  pos.x = ofGetWidth();
	if( pos.y > ofGetHeight() ) pos.y = 0;
	if( pos.y < 0 ) pos.y = ofGetHeight();
}

void Ball::draw(){
	ofSetColor(bcolor);
	ofCircle(pos.x, pos.y, radius);
}
ofApp.h
#pragma once

#include "ofMain.h"
#include "Ball.h"

class ofApp : public ofBaseApp{
public:
	static const int NUM = 2; //配列の大きさを指定

	void setup();
	void update();
	void draw();

	void keyPressed(int key);
	void keyReleased(int key);
	void mouseMoved(int x, int y );
	void mouseDragged(int x, int y, int button);
	void mousePressed(int x, int y, int button);
	void mouseReleased(int x, int y, int button);
	void windowResized(int w, int h);
	void dragEvent(ofDragInfo dragInfo);
	void gotMessage(ofMessage msg);
		
	Ball balls[NUM]; //Ballクラスのインスタンスを配列で指定
};
ofApp.cpp
#include "ofApp.h"

//--------------------------------------------------------------
void ofApp::setup(){
	ofBackground(0, 0, 0); //背景色の設定
	ofSetColor(255, 255, 0); //描画色の設定
	ofSetBackgroundAuto(false);
	ofSetFrameRate(20);
	ofEnableAlphaBlending();  //アルファチャンネルを有効にする
	ofSetCircleResolution(64);
}

//--------------------------------------------------------------
void ofApp::update(){
	for(int i = 0; i < NUM; i++){
		balls[i].update();
	}
}

//--------------------------------------------------------------
void ofApp::draw(){

	//全画面を半透明の黒でフェード
	ofSetColor(0, 0, 0, 10);
	ofRect(0, 0, ofGetWidth(), ofGetHeight());

	for(int i = 0; i < NUM; i++){
		balls[i].draw();
	}
}

//--------------------------------------------------------------
void ofApp::keyPressed(int key){

}

//--------------------------------------------------------------
void ofApp::keyReleased(int key){

}

参考

ジェネラティブアート論

個人用ツール
名前空間

変種
操作
案内
ツールボックス