Concept:
At first, I wanted to try to make a race track and multiple race cars running on the track by making boundaries for them so they will never work backward. Then I faced the difficulty of how to make the car title sideways in the bird’s eye view since it’s seen in a birds-eye view. Then I faced the difficulty of making the cars stuck within the boundaries of the race track. So I gave up on that Idea instead I wanted to make spaceships that would move elegantly in the space while the player is controlling one of them.
Code:
let first;
let arr = [];
let numofspaceships = 5;
let player;
function preload() {
img = loadImage('215c7fdca6033092baa04b35c17466bd.gif');
}
function setup() {
createCanvas(600, 400);
first = new Spaceshuttle();
player = new playerShuttle();
for(let i = 0; i < numofspaceships;i++){
arr[i] = new Spaceshuttle();
}
}
function draw() {
background(220);
image(img, 0, 0);
first.display();
player.display();
for(let i = 0; i < numofspaceships;i++){
arr[i].display();
}
}
class Spaceshuttle {
constructor() {
this.x = random(width);
this.y = random(height);
// this.diameter = random(10, 30);
this.speed = 10;
this.redd = random(255);
this.greenn = random(255);
this.bluee= random(255);
this.randomx = random(100);
this.randomy = random(100);
}
move() {
this.x = map(noise(this.randomx),0,1,0,width+150);
this.y = map(noise(this.randomy),0,1,0,height+150);
this.randomx += 0.005;
this.randomy += 0.005;
}
display() {
noStroke();
fill(0);
strokeWeight(2);
stroke(51);
line(this.x+10,this.y,this.x+20,this.y+15);
line(this.x-10,this.y,this.x-20,this.y+15);
stroke(0);
fill(this.redd,this.greenn,this.bluee);
ellipse(this.x, this.y, 80, 25);
fill(0,179,255);
arc(this.x, this.y, 40, 40, PI, 2*PI , CHORD);
this.move();
}
}
class playerShuttle {
constructor() {
this.x = random(width);
this.y = random(height);
// this.diameter = random(10, 30);
this.speed = 10;
this.redd = random(255);
this.greenn = random(255);
this.bluee= random(255);
this.speedx = 0;
this.speedy = 0;
}
move() {
let rate = 0.1;
let maxspeed = 3;
if(keyIsPressed){
if(keyCode == LEFT_ARROW){
this.speedx -= rate;
}else if(keyCode == RIGHT_ARROW){
this.speedx += rate;
}
if(keyCode == UP_ARROW){
this.speedy -= rate;
}else if(keyCode == DOWN_ARROW){
this.speedy += rate;
}
}else{
if(this.speedx != 0){
if(this.speedx > 0){
this.speedx -= rate * 2;
}else{
this.speedx += rate * 2;
}
}
if(this.speedy != 0){
if(this.speedy > 0){
this.speedy -= rate * 2;
}else{
this.speedy += rate * 2;
}
}
}
if(this.speedx>maxspeed){
this.speedx = maxspeed;
}
if(this.speedy>maxspeed){
this.speedy = maxspeed;
}
this.x += this.speedx;
this.y += this.speedy;
}
display() {
noFill();
strokeWeight(2);
stroke(250);
ellipse(this.x, this.y, 80, 80);
noStroke();
fill(0);
strokeWeight(2);
stroke(51);
line(this.x+10,this.y,this.x+20,this.y+15);
line(this.x-10,this.y,this.x-20,this.y+15);
stroke(0);
fill(this.redd,this.greenn,this.bluee);
ellipse(this.x, this.y, 80, 25);
fill(0,179,255);
arc(this.x, this.y, 40, 40, PI, 2*PI , CHORD);
if(this.x > width+2){
this.x = 0;
}else if(this.x <= 0){
this.x = width;
}
if(this.y > height+2){
this.y = 0;
}else if(this.y <= 0){
this.y = height;
}
this.move();
}
}
I think one part, in particular, in the code which took some time online to understand which is figuring out Perlin noise and how can I use it to power the computer spaceships. At first, it was outputting the same value and the spaceships were kind of moving diagonally. Then I figured out that the value inside of “noise()” needs to be changed every time so that it can come up with a new different value. And to fix the diagonal thing just increment the x movement by a number different from the y movement.
Moreover, moving the player’s spaceship with the arrows was also pretty difficult. I tried to use the basic libraries but I think they were not enough so I watched a video that explains how it should be done.
Also making the classes themselves and understanding how the classes work was very interesting. As I at the beginning didn’t understand what does the term “this” mean. But sooner I learned about it and realized the potential in classes. Manipulating the array to make objects of spaceship class was a challenge as well.
The Sketch:
Reflections:
Reflections:
Regarding my piece, I’m not really sure of my feelings. I put a lot of effort into it, but I was unable to achieve the degree of originality I had in mind. On the plus side, I think I’ve picked up a lot of knowledge, and I still have a lot to learn. I would improve the piece by making it more intricate, complicated, and possibly animated.
Nice! It looks like you really learned a lot. The motion with the Perlin noise added is nice. Now that you have the “framework” built you can work on e.g. making controlling the spaceship more satisfying. The game has a vibe going and the code seems like a good base to keep working on. Some comments in the code please!