Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- sketch.js:
- var world;
- function setup() {
- createCanvas(1280,720);
- frameRate(1);
- world = new World(1,10,width,height,10);
- world.init();
- }
- function draw() {
- background(0);
- world.step();
- world.drawWorld();
- }
- function doubleArray(cols,rows,d){
- var temp = [];
- var temp2 = [];
- for(var i=0;i<cols;i++){
- temp[i] = [];
- for(var j=0;j<rows;j++){
- temp[i].push(d);
- }
- }
- return temp;
- }
- function generateDNA(){
- temp = [];
- temp.push(random(0.0,50.0));
- temp.push(random(1,10));
- temp.push(random(0,255));
- temp.push(random(0,255));
- temp.push(random(0,255));
- for(var i=0;i<random(10);i++){
- temp.push(random(1,4));
- if(temp[i]==1){
- temp.push(0,9);
- } else if(temp[i]==2){
- temp.push(0,9);
- } else if(temp[i]==3){
- temp.push(0,256);
- temp.push(0,256);
- temp.push(0,256);
- } else if(temp[i]==4){
- temp.push(0,5);
- }
- }
- return temp;
- }
- Creature.js
- function Creature(x,y,dna){
- this.x=x;
- this.y=y;
- if(dna!=null){
- this.dna = dna;
- } else {
- this.dna = generateDNA();
- }
- this.update = function(){
- this.i=0;
- while(this.i<this.dna.length){
- switch(this.dna[this.i]){
- case 1:
- this.move(this.dna[this.i+1]);
- i+=2;
- default:
- break;
- }
- }
- }
- this.move = function(cell){
- switch(cell){
- case 1:
- this.y--;
- break;
- case 2:
- this.y--;
- this.x++;
- break;
- case 3:
- this.x++;
- break;
- case 4:
- this.y++;
- this.x++;
- break;
- case 5:
- this.y++;
- break;
- case 6:
- this.y++;
- this.x--;
- break;
- case 7:
- this.x--;
- break;
- case 8:
- this.y--;
- this.x--;
- break;
- case 9:
- this.move(random(0,8));
- break;
- }
- }
- }
- Tile.js
- function Tile(type){
- this.tile = type;
- }
- World.js
- function World(minPop,size,width,height,foodChance){
- this.minPop = minPop;
- this.pop = 0;
- this.width = width;
- this.height = height;
- this.size = size;
- this.tiles = doubleArray(this.width/this.size,this.height/this.size,new Tile(0));
- this.creatures = [];
- this.foodChance = foodChance;
- this.init = function(){
- this.creatures.push(new Creature(random(this.width/this.size),random(this.height/this.size)));
- this.pop++;
- for(var x=0;x<this.tiles.length;x++){
- for(var y=0;y<this.tiles[0].length;y++){
- var r = random(0.0,100.0);
- if(r<this.foodChance){
- this.tiles[x][y] = new Tile(1);
- }
- }
- }
- }
- this.step = function(){
- // for(var r=this.pop;r<this.minPop;r++){
- // this.creatures.push(new Creature(random(this.width/this.size),random(this.height/this.size)));
- // this.pop++;
- // }
- for(var v=0;v<this.pop;v++){
- this.creatures[v].update();
- }
- }
- this.drawWorld = function(){
- for(var x=0;x<this.tiles.length;x++){
- for(var y=0;y<this.tiles[0].length;y++){
- if(this.tiles[x][y].tile==1){
- noStroke();
- fill(0,255,0);
- rect(x*this.size,y*this.size,this.size,this.size);
- }
- }
- }
- for(var b=0;b<this.pop;b++){
- //fill(this.creatures[i].dna[3],this.creatures[i].dna[4],this.creatures[i].dna[5]);
- //console.log(this.creatures[b].x);
- fill(255,255,255);
- rect(this.creatures[b].x*this.size,this.creatures[b].y*this.size,this.size,this.size);
- }
- }
- }
- index.html
- <!DOCTYPE html>
- <html>
- <head>
- <meta charset="utf-8">
- <meta name="viewport" width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0>
- <style> body {padding: 0; margin: 0;} </style>
- <script src="../p5.min.js"></script>
- <script src="../addons/p5.dom.min.js"></script>
- <script src="../addons/p5.sound.min.js"></script>
- <script src="sketch.js"></script>
- <script src="World.js"></script>
- <script src="Creature.js"></script>
- <script src="Tile.js"></script>
- </head>
- <body>
- </body>
- </html>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement