Week 8:

Reflection:

So I feel like I have heard Norman say somewhere that when designing, one should focus more on the usefulness of the work, and reading this it felt like she was correcting the notion that designs should have some emotions attached to them sometimes. I agree with her/him- I’m confused- when she says that emotions(affects as she calls it) affect how one thinks when solving a problem which I also find interesting. I like how she uses real-life situations to describe what she means -I don’t know why I am referring to her as she if it’s he then my bad. For the second reading, as a computer scientist or an upcoming one, I was really shocked that this field was introduced kind of by a woman. It was my first time hearing this story and honestly, I didn’t expect NASA to ignore that possibility of an error. All in all, Hamilton’s story is a motivational one.

Midterm Project-Final Report:

Concept:

In one of Daniel’s-“The Funny Guy” videos he created something like a buzzing bee effect and I really liked his reaction to it so I thought of making a game that uses the idea of a buzzing bee. For my midterm project, I created a game that mimics the behavior of a bee.

I decided to create a game with a bee theme to immerse the user into the game by making them swerve falling blocks.  This is a simple game with 8 different levels that increase in difficulty as you progress. this is to prevent the user from getting bored early.

Design:

Initially, I thought of drawing the background for each level and then uploading the picture onto p5 but then that did not look so good.

But then this was not nice so I decided to go with a different design. I decided to just use a simple design and add a cool background with the bee theme. something like a honey comb. The rest of the design was mainly thoughts of how to structure the whole game into classes and what each class would end up doing.

Challenging Parts of this project:

The most challenging part of this project was preloading the different files that I imported into the project. This took me h0urs to figure out and a piece of advice is to always preload all the imports in one class and not various classes.

function preload(){
  //in this preload function we will load all the uploads we need before we even start the game. The folder name is always mentioned before the file name to help the compiler to know the location of the file we want to add.
  B1=loadImage("Background/B1.jpg");//these sets are for the background
  B2=loadImage("Background/B2.jpg");
  B3=loadImage("Background/B3.jpg");
  B4=loadImage("Background/B4.jpg");
  B5=loadImage("Background/B5.jpg");
  B6=loadImage("Background/B6.jpg");
  B7=loadImage("Background/B7.jpg");
  B8=loadImage("Background/B8.jpg");
  IB=loadImage("Background/IB.jpg");
  GB=loadImage("Background/GB.jpg");
  F1=loadFont("Fonts/Font1.ttf");//these sets are for the fonts 
  F2=loadFont("Fonts/Font2.ttf");
  S1=loadSound("Sounds/unplay.mp3");//these sets are for the sounds 
  S2=loadSound("Sounds/select.mp3");
  S3=loadSound("Sounds/hover.mp3");
  S4=loadSound("Sounds/hit.mp3");
  S5=loadSound("Sounds/play.mp3");
  P1=loadImage("Players/bee.png");// this one is to load the player png
}

Another recent challenge was the implementation of the sounds. I learnt something new with this challenge that to pass a variable by reference we do not need to create a variable in class as in “this.variablename” we just have to pass the variable and use it in the class by reference. In that case, the main variable is affected by what ever we do. This helps prevent creating duplicates of the same sound.

S4.play();//play the hit sound
       S1.play();//play the sound played when not playing. In this case I use S4 and not this,S4 because i want to access an object by reference to have control of the object that was initially playing in the game regardless of the objects location. creating this.S4 will create a copy and we would either start the sound or end up playing over another preexisting sound 
       S5.pause();//pause the in game sound... yeah the annoying one

Another tricky aspect was the collision and the deletion of the blocks after they cross the end of the canvas. In my case, each level has its own threshold that needs to be attained before the level is incremented. Silly me, I wanted to incorporate this in another class which wasted a lot of my time all for nothing. I realized that in as much as you want your work to look clean and separated you should know that you can utilize a class as much as you want and that there is nothing wrong with having a large class. Also about the collision, The “png” was resized to be a square so in order to get the collision effect, I had to use the “dist” function in my case to aid me to draw the circle that would be used to detect the intersection

  collision(){//this method is the one that checks if the play has collided with the falling blocks. It does this by going through the array and checking if the arrays height and width in accordance to the x and y coordinate intersect with the players circular dimensions.
    for(let i=0;i<this.lvl;i++){
      if(
        mouseX+10>this.blockArray[i].x&&mouseX-10<this.blockArray[i].x+this.blockArray[i].w&&
        mouseY+10>this.blockArray[i].y+5&&mouseY-10<this.blockArray[i].y+this.blockArray[i].h-5){//if there is an intersection,



deleteBlock(){//this method deletes blocks...used to delete blocks when they cross the height of the canvas.
    for(let i=0;i<(this.lvl);i++){
      if(this.blockArray[i].getY()>height){//if the top of the object for each object in the array has passed the height of the canvas
        this.score++;//increment the score by one.
        //for every level there is a score boundary that one is suppose to reach to move to the next level the if else code block below sets every level's boundary and increments the number of blocks for each level while increasing the level.
        if(this.lvl==1&&(this.score%3)==0){//if the score is 3, and we are on level one, increase the level and add one block object to the array
          this.blockArray[this.lvl]=new Block(this.lvl);//add the block
          this.blockArray[this.lvl].setBlock();//setting the new block that has been added
          this.blockArray[this.lvl].drawBlock();//draw the block that was jusr added
          this.lvl++//increment the lvl
        }
        else if(this.lvl==2&&(this.score%13)==0){//similar to above and below but each statement has its own treshold
          this.blockArray[this.lvl]=new Block(this.lvl);
          this.blockArray[this.lvl].setBlock();
          this.blockArray[this.lvl].drawBlock();
          this.lvl++
        }
        else if(this.lvl==3&&(this.score%23)==0){
          this.blockArray[this.lvl]=new Block(this.lvl);
          this.blockArray[this.lvl].setBlock();
          this.blockArray[this.lvl].drawBlock();
          this.lvl++
        }
        else if(this.lvl==4&&(this.score%33)==0){
          this.blockArray[this.lvl]=new Block(this.lvl);
          this.blockArray[this.lvl].setBlock();
          this.blockArray[this.lvl].drawBlock();
          this.lvl++
        }
        else if(this.lvl==5&&(this.score%45)==0){
          this.blockArray[this.lvl]=new Block(this.lvl);
          this.blockArray[this.lvl].setBlock();
          this.blockArray[this.lvl].drawBlock();
          this.lvl++
        }
        else if(this.lvl==6&&(this.score%60)==0){
          this.blockArray[this.lvl]=new Block(this.lvl);
          this.blockArray[this.lvl].setBlock();
          this.blockArray[this.lvl].drawBlock();
          this.lvl++
        }
        else if(this.lvl==7&&(this.score%80)==0){
          this.blockArray[this.lvl]=new Block(this.lvl);
          this.blockArray[this.lvl].setBlock();
          this.blockArray[this.lvl].drawBlock();
          this.lvl++
        }
        else if(this.lvl==8&&(this.score%100)==0){
          this.blockArray[this.lvl]=new Block(this.lvl);
          this.blockArray[this.lvl].setBlock();
          this.blockArray[this.lvl].drawBlock();
          this.lvl++
          if(this.lvl==9){//since level 8 is the last level, if, the level goes to level 9, decrement the level back to level 8.
            this.lvl--;//decrement the level
        }
         }
        delete this.blockArray[i];//if the block has passed the height, delete the block object,
        this.blockArray[i]=new Block(this.lvl);//create a new object and replace it with the old one that was deleted
        this.blockArray[i].setBlock();//set block to give it a new x coordinate and y coordinate and size etc. we donot draw the block because we need to draw it just once 
       }
   }
  }

Another major challenge was figuring out how the background moves which also took a lot of time to understand but it was cool after implementing it. However I realized that at the page_end and the page_front, the distinction is visible so next time I will look for Images that have this incorporated.

image(this.BG,0,this.y1,width,height);//create image at this.y1
   image(this.BG,0,this.y2,width,height);//create image at this.y2
   this.y1 -= this.scrollspeed;//decrement the speedd for both
   this.y2 -= this.scrollspeed;

   if (this.y1 < -height){//if the top of this background is at -height reset it to height
     this.y1 = height;
   }
   if (this.y2 < -height){//repeat the above for this y2 too
     this.y2 = height;
   }
 }

Project Snapshots:

Thoughts for the Future:

I hope that in future I can fix or get Backgrounds that do not have visible transitions. And also I hope to be able to incorporate motion detecting to allow the user to control the player by just moving their head.

Final work:

 

Midterm Progress: Draft 2

So far so good. Currently, I’m done with 90% of the project. What I have left to do is to change the benchmarks for each level and also replace the circle with characters. I’m still contemplating changing the drop objects to sprites.

Highlights so far:

Places in the code I found challenging are the preloading of the images to use as Backgrounds. Apparently, you can not have two preload functions in two classes. I learned this the hard way.

let B1;
let B2;
let B3;
let B4;
let B5;
let B6;
let B7;
let B8;
let IB;
let GB;
let F1;
let F2;


function preload(){
  B1=loadImage("Background/B1.jpg");
  B2=loadImage("Background/B2.jpg");
  B3=loadImage("Background/B3.jpg");
  B4=loadImage("Background/B4.jpg");
  B5=loadImage("Background/B5.jpg");
  B6=loadImage("Background/B6.jpg");
  B7=loadImage("Background/B7.jpg");
  B8=loadImage("Background/B8.jpg");
  IB=loadImage("Background/IB.jpg");
  GB=loadImage("Background/GB.jpg");
  F1=loadFont("Fonts/Font1.ttf");
  F2=loadFont("Fonts/Font2.ttf");
  
}

 

Another challenging part was the collision of the play with the drop objects. getting the collision to be accurate and finding the right place in my code to place the collision function(method) was the main challenge.

One more challenging part of the code was creating the hover effects for the circle shape. This took me some time to figure out a quite simple method to do so.

createhelp(){
    fill(100);
    if(dist(mouseX,mouseY,370,30)<=20){
      fill(60);
    }
    if(dist(mouseX,mouseY,370,30)<=20&&mouseIsPressed){
      this.helpbool=true;
    }
    circle(370,30,40);
    fill(255,255,0);
    textSize(30);
    textFont(NORMAL);
    text("?",370,40);

 

The Background movement was also an Issue for me as unlike the example given in class, my project was moving the background from top to down.

Also defining the outer boundaries was a challenge in this project but with the use of min(mouseX, width-radius) and min(mouseY, height-radius) I was able to address this.

y.showBG(x.getlvl());
   circle(min(mouseX, 390),min(mouseY,490),20);
   gameoverbool=x.collision();

 

I also faced some challenges with the changing of the levels as the code uses more than 3 classes dependent on each other. All in all I really enjoy programming this project. I am working on adding the sound at the moment and then hopefully I would work on the characters and more. Feel free to give me your suggestions.

Current work:

Midterm Project:

Project Idea:

So as I was in class I remembered the funny guy Daniel’s joy as he tried to mimic the movement of the buzzing bee formed from Perlin noise in his tutorial video and I thought to myself, why not make a game that immerses the user into the game in a similar way.

Design:

So far I am just trying to create classes to form a kind of falling blocks where the user has to prevent themselves from hitting the blocks that are falling to gain points. The most challenging part of this project will probably be the collision aspect as I don’t know how to track this but hopefully, I figure it out. For now, I am done with the falling blocks and I am doing some research on how to deal with the collisions.

Progress:

Week 5:

I find myself intrigued by the evolving intersection of technology and creativity. The notion that art can connect people across distances through digital media is fascinating. I appreciate the idea of using computer vision to create interactive experiences that convey important messages, such as David Rokeby’s ‘Sorting Daemon’ illustrating the impact of surveillance. However, I can’t help but feel that there’s a slight artificiality to these experiences, despite their cleverness. There’s something special about physically interacting with art, like the example of touching lights in a room, which digital art can’t fully replicate. I agree that computers are improving in creating engaging and realistic interactive art, but they can’t replace the unique connection that occurs when all our senses and physical presence are engaged.

I also found the article’s insights about the adaptability of computer vision algorithms to be enlightening. It reinforces the idea that technology in art should be tailored to the specific context. I appreciate the emphasis on optimizing these systems. The mention of user-friendly tools like Processing and Max/MSP/Jitter resonates with my belief that technology should empower creativity for a wider audience. However, the article’s caution about biases in these algorithms, especially in identity recognition and gesture analysis, raises essential ethical considerations. As technology continues to shape our world, it’s crucial to address these concerns to avoid unintended consequences.

Last, the historical perspective of the evolution of interactive technology, particularly the emergence of virtual reality decades ago, adds depth to our understanding of our modern digital landscape. The surge in interactive projects in the early 2000s signifies the rapid evolution of technology and its expanding role in shaping our interactions with art and machines. The impact of computer vision on interactive art is awe-inspiring, blurring the boundaries between humans and technology, and opening up exciting avenues for creativity and innovation.

Week 4 response:

Don Norman’s first chapter has been an eye-opening experience. It’s astonishing to realize how much thought and intentionality should go into the design of even the simplest objects we encounter daily. Norman’s concept of “the psychopathology of everyday things” resonates deeply with me because I’ve often found myself frustrated by poorly designed objects like confusing interfaces or counterintuitive controls. His emphasis on Human-Centered Design is particularly relevant in today’s world, where technology is pervasive, and products should cater to a wide range of users. What struck me the most was the reminder that good design should make our lives simpler, not more complicated. This chapter has made me appreciate the importance of clear communication between designers and users and has left me with a newfound awareness of the impact of design on our daily experiences. It’s a lesson I’ll carry with me as I continue to learn and explore the world of design.

Assignment 4: Smlie :)

Concept:

Creating this Assignment I was feeling sad so I decided to create an auto text generator that tells whoever interacts with the screen what I think about them. Tap on the screen to see what you are 🙂

Highlight:

I decided to use everything we learned in class besides data analyses to create this artwork. I was inspired by the bouncing ball example used in class so I decided to replace the ball with a word and with that, I just utilized loops and if-else statements to create a generator that can will print random words in an array of words.

The parts of the code I found challenging were; The choosing of the words as random numbers to generate numbers in double casting and also because I didn’t pay attention to when you were talking about how to cast numbers. But after asking Powers I was able to solve this situation.

The main problem that I wasn’t able to also solve was fitting the words on the canvas. I tried to use “addition and subtraction” means to do so but this didn’t solve the problem but rather created another one.

bounce() {
  if (this.x > width-120 || this.x < 0) {
    this.xspeed = this.xspeed * -1;
    this.colorChange();
  }

  if (this.y > height-5 || this.y < 20) {
    this.yspeed = this.yspeed * -1;
    this.colorChange();
  }
}

Because I added and subtracted, if an object was created in the space I excluded the object bugged.

I solved this with the use of the return function but it is not exactly how I want it to be. The objects still go out of the canvas and sometimes they bounce when they haven’t hit the edges.

if(this.x>width-120||this.y<20||this.y>height-5){
      return;
    }

For the addition of objects and deletion I used the “function KeyPressed()” and “function mouseClicked()” as well as return loops and dynamic memory allocation. I am proud that I made sure to not cause memory leak as I applied what I have learnt even though it didn’t cause any error.

Finally, I used the opacity in the fill function as well as some randomness to cause this kind of flashy look in the end and I don’t know if this work made you smile but it made be happy after I was done.

Final Work:

Reflection and Ideas for Future works:

I really hated the fact that the letters kept going out of scope so maybe in future I would correct this error, if not in this project, in another similar one.

The Art of Interactive Design:

The discussion on the nature of interaction, breaking it down into input, processing, and output, provides a solid foundation for understanding the mechanics behind interactive experiences. This breakdown clarifies the essential components that designers must consider when crafting user interactions.

His emphasis on integrating storytelling and interactive design is intriguing. Storytelling has been a pivotal element in various forms of media, and exploring how it can be adapted for interactive experiences is fascinating indeed. The idea of narratives adapting to user choices and actions adds depth to the discussion, raising questions about the complexities and possibilities of interactive storytelling.

Assignment 3: Spiral Circles

Concept:

So I wanted to create a 3D spiral that shows depth that is kind of interactive. This artwork is created using circles to form an after-effect that looks like a 3D spiral from far away. When the mouse is Clicked the movement of the circles reverses from the opposite axis creating a unique design. with the use of Perlin noises, smooth radii, and colors are created to make the design appealing to the eye.

Highlight:

Using OOP I had to think of a way to create a spiral without actually creating the spirals as objects. So I decided to use circles to do this. Initially, I got some bugs due to random radii not being smooth so I decided to use Perlin noise which fixed that problem. I also had a similar problem with the colors, which made the art weird.

Additionally, getting the right colors at the right times was another challenge I encountered even with the use of the Perlin noise, arrangement of the code caused bugs.

Finally the most challenging part for me was the spiral movement which I made use of the translate and the rotate functions as well as increment of the radius by a counter. with this counter and angle I was able to reverse the effect and ended up getting the design I wanted.
Extra video that helped

this.aa=map(noise(this.a),0,1,0,this.j);//getting smooth x-axis for the circles
  this.bb=map(noise(this.b),0,1,0,this.j);//y-axis
  this.i=this.aa;
  translate(mouseX,mouseY);//making the orijin the the mousex and mouse y points
  rotate(this.angle);//movement of the circle
  fill(this.x,this.y,this.z);//giving the colours to the circles
  circle(this.aa,this.bb,random(0,50));//creating circles 
  this.angle+=this.r;//incrementing the angle for circular motion
  this.x+=0.02;
  this.y+=0.02;
  this.z+=0.02;
  this.j+=0.1;

Final Work:

Reflection and Ideas for Future works:

With this I plan to make a design where the art work actually moves and is not just as a result of the pathways taken by the objects.

Reading Reflection 2, Casey Reas:

Response:

One thing that caught my attention during the speech was the idea that embracing chance can lead to novel and unexpected outcomes in art and design. By introducing elements of randomness into the creative process, artists and designers can break away from the constraints of their own preconceived notions and habits, allowing for the emergence of truly unique and innovative works. This notion challenges the traditional idea of the artist as a deliberate and controlled creator, highlighting the beauty and potential of spontaneity.

However, even with this, I personally felt that the artwork as it may seem uncontrolled, actually is controlled on a large scale or a micro-scale. The use of algorithms to program art introduces randomness in a controlled manner, providing artists with structured ways to explore chance operations. This approach not only encourages experimentation but also raises questions about the relationship between human intention and the role of code in shaping creative outcomes.

The use of randomness in a controlled manner encourages artists and designers to embrace chance as a source of inspiration and innovation, and it challenges us to explore the boundaries between intention and serendipity in our work.