Week #8: Unusual Switch- Colordentify

Concept:

Using the tools and knowledge I have learned in class regarding Arduino, I have created a kid’s educational game-Colordentify- that implements the idea of switches to power the circuit and produce a different outcome on every complete circuit. The main motivation behind this game is to teach children the different colours out there to distinguish between the three main colours: red, green, and blue.

Circuit Diagram:

Three resistors are connected in parallel, each having a different colour. The switch is two wires separated by aluminium foil. As the switch closes, the light colour is emitted.

Project:

Video:

 

Reflection:

The game is quite simple and incorporates the main point of creating a switch connected through an aluminium foil. The reason that we used aluminium is because of its conductivity of electrons. As electrons are sent into the aluminium platform, another jumper wire touched on top will get in the electrons, ultimately opening the circuit. The game can be expanded with the addition of extra colours. The game can also be exchanged with a bunch of animal pictures on top of the aluminium foil, and instead of LED, there can be an LCD screen that can write the name of that animal according to the different output received by the jumper wire. As for future improvements, cardboard and aluminium- can be better aligned to look pleasing, and jumper wires could be placed under the cardboard connecting to the aluminium instead of being on the front to look better and safe for children.

Week 8- Reading Reflection

Norman’s text:

In Norman’s text, “Emotion & Design: Attractive Things Work Better,” Norman describes how users’ overall experiences with a website are mainly derived from their first experience with the website- as in their first impression. The first impression comprises the website’s aesthetics, functionality, and simplicity. These factors ultimately influence our first impressions and determine whether we trust the website and what they’re selling or not. According to Norman’s explanation of the three cognitive stages—behavioral, reflective, and visceral—people often put more importance on a website’s overall aesthetic than its actual content. Reflective on how the website resembles similar-looking interfaces and our tendency to get accustomed to them and find comfort in them. Reflective and Visceral- aesthetics part- if not met, then our behavior, which is our response, would be more lenient on a lousy impression and our distrust in the website and its content. To gain users’ trust and respect, website creators should incorporate memories and experiences into the design, creating a nostalgic yet professional feel. Striking the right balance between functionality and aesthetics is crucial. I prefer websites with a simple yet profound interface over those crowded with information. For example, consider Google Chrome and Internet Explorer. Despite having similar functionality, most people choose Chrome. Why? Because Chrome offers an aesthetically pleasing and user-friendly interface, while Internet Explorer has an outdated look. While I mentioned the importance of nostalgia, in the case of Internet Explorer, it leans more towards appearing old rather than nostalgic.
Different cultures have unique preferences when it comes to aesthetics and first impressions. Take the Starbucks website, for instance. The American version has a clean, image-focused design with minimal text, presented in an easy-to-read format. It doesn’t overwhelm us with excessive information. In contrast, the Japanese Starbucks website features a dense arrangement of photos and text, which may need to be more aesthetically pleasing to most. This design is quite different from the standard Starbucks site. Japanese users may prefer these busier interfaces because they find it easier to absorb all the information without navigating to multiple pages. They see this as appealing and are more likely to stay on densely populated websites rather than simpler ones. Another reason for this preference could be, as Norman suggested, the influence of the reflective stage. Since Japanese individuals have grown accustomed to these dense websites from childhood, they now find comfort and beauty in them.

Hamilton’s text:

Margaret Hamilton, the mother of software engineering, has had quite a journey to get where she is now. Her contribution to the Apollo program and software engineering is quite impressive. During a period when traditional norms enforced specific stereotypical ideas on women, in addition to being a mother, Hamilton disproved preconceptions and showed a solid commitment to her career. Implementing the “do not touch P01” message within the astronauts’ tech is one of the great examples of how Hamilton’s attentiveness to detail contributed significantly to the astronauts’ successful trips. Even in the times of difficulties and challenges that astronauts go through, they can’t help but make small mistakes that can cost them considerably, which is why Hamilton’s contribution made a big difference to them.

Numerous astronauts’ lives were saved on multiple occasions due to Hamilton’s creative programming concepts and software contributions. Hamilton’s work created something so vast, even though it may have seemed simple and practical at first. Hamilton came up with the idea of relying on software, and billions of computers and other devices worldwide now use the concept of software in general. Her innovative strategy of giving consumers user-friendly interfaces was revolutionary and completely changed how we engage with technology.

Hamilton’s journey was not without its share of difficulties, filled with mistakes and challenging times. One thing to note is how those mistakes ultimately led Hamilton to success. By mistakingly clicking on the P01 button, for instance, she realized that there needed to be a mechanism in place to inform others about it. Therefore, mistakes are something natural, and the implementation of software into programs should also be a natural cure for some of the digital mistakes. Hamilton’s deep love for her job despite facing mistakes and society’s stereotypical ideas pushed her to success. This unwavering dedication and her outstanding accomplishments build a picture of a pioneer who made a lasting impression on the technological world. I have a deep appreciation of her work and the creation of the software engineering field. Her tale serves as an inspiration to everyone, demonstrating the seemingly endless opportunities that result from commitment, creativity, and a sincere love of one’s work.

 

Midterm Project- Pop Frenzy

Concept:

I have developed a game using p5.js, in which random balls of varying speeds and diameters emerge across the screen. Our objective is to swiftly pop each ball before it diminishes and fades away. As each ball is lost, a ‘balllost’ counter increments, and after a certain count, the player loses. Many elements have been incorporated into the game to enhance the experience, including sound effects, the gradual reddening of the background as the ‘balllost’ count increases, and, of course, the shout button at the end of the game. While the game initially appears straightforward, it cultivates and refines various skills and abilities within the player. The foremost and pivotal skill that improves is the player’s tracking ability, accompanied by heightened reaction speed. This game effectively primes the player’s instincts and reflexes. Such games hold paramount importance and enjoy popularity in sports and activities demanding rapid reflexes, like F1 racing or high-speed shooting games. Ultimately, the game fosters cognitive development.

Moreover, in a study published by Mathew and his colleagues titled “Increasing Speed of Processing With Action Video Games,” it was indicated that action-packed games, similar to this one, exert a significant impact on cognitive functions and reaction time. The intense gameplay demands split-second decision-making, thereby enhancing problem-solving abilities. Additionally, the fast-paced nature of these games has been associated with improved visual processing and heightened attention, ultimately resulting in an augmentation of overall cognitive abilities. The rapid stimuli and dynamic environments present in such games lead to notable improvements in reaction speed. Players are required to process visual information at an accelerated rate, a skill that transfers well into scenarios requiring quick decisions(Dye, Matthew W G et al.). In essence, Pop Frenzy not only provides an engaging and entertaining experience but also serves as a tool for cognitive development and honing crucial skills vital in high-demanding activities.

In the gaming world, popular warm-up games like AimLab are played, which incorporates a series of games similar to Pop Frency, here’s an example of one game: Same goal as Pop Frency, but this game depends on time. Whereas, Pop Frenzy depends on balls lost.

Sketch:

Link to the game: https://editor.p5js.org/Nasar/sketches/FlE0f_9MH

Mid-Game Screen:

Game Lost Screen:

Coding Logic:

I started by creating the ball class and putting it into the sketch. Then, I adjusted the speed and size of each ball to make the game challenging but not too hard. After that, I added screens for the menu and when you lose. Instead of using complex loops, I used if-else statements to keep the code organized. Once I had the basic structure in place, I made the game more interactive. I added buttons and sounds and even made it so you hear a sound when you hover over a ball. As I kept working on the code, things started to make more sense in terms of what I should add in order to make it better.

I made some changes along the way to make sure the game was fun and easy to play. For example, I decided to have only one ball on the screen at a time. It might be cool to have more, but it would make the game too complicated. I also chose a screen size of 400 x 400. This way, the balls are close together, and players can easily swipe to them. If the screen was bigger, it would be harder to play. I used everything we learned in class – like making classes, using functions, adding sounds and pictures, and controlling their volume and size. I also put in things like text and buttons. As an extra touch, I added a particle class to make the game look cooler and more fun.

Here’s an initial sketch of my game:

Initially, I  envisioned a game where the black ball shouldn’t be popped or else the player loses. Later I didn’t include it though because of the increased difficulty.

Challenges I overcame:

Throughout the process, I encountered several challenges. In some cases, I had to shift my perspective on how I approached the code. In others, I found it necessary to completely rework certain elements. One particularly intricate part of the code, in which I faced multiple hurdles but ultimately achieved a satisfying outcome, was the implementation of the escape screen. This screen allows the player to pause the game using the escape button. The challenge arose from the interplay between the ‘loop’ and ‘noLoop’ functions. The ‘noLoop’ function halts the continuous execution of the ‘draw’ function. However, there were instances where the code would stop without displaying the escape screen. After conducting research online and studying examples from other coders, I discovered that by encapsulating the ‘loop’ and ‘noLoop’ functions within another function and placing it at the end of the entire code, I could ensure that the pause screen would be displayed before the code ceased to loop. Here’s the snippet to it:

//Built-in function
function keyPressed() {
  //check if escape is pressed, if game is continuing, it would pause, if balllost is 8 then we cant go pause screen
  if (keyCode === ESCAPE)
  {
    if(balllost==8)
      {
        gamePaused=false;
      }
    else
    {
    gamePaused = !gamePaused; // Toggle gamePaused variable
    }
    if (gamePaused) {
      noLoop(); // Pause the game by stopping the entire loop through draw
    } else {
      loop(); // Resume the game by enabling draw function to continue
    }
  }
}

Another issue I encountered involved the sound that should play only once when the cursor hovers over a button. However, I found that the sound was persistently repeating. I resolved this by introducing an additional flag variable. This flag becomes ‘true’ when the cursor is hovered over the button, allowing the sound to be executed only once before reverting to ‘false.’ This adjustment guarantees that the sound is not played endlessly.

if(mouseX>150 && mouseX<269 && mouseY> 260 && mouseY<298)
  {
  if (!menuButtonHovered) {
    buttonHover.play();
    menuButtonHovered = true;
  }
  fill('rgb(176,174,174)');
} else {
  fill('grey');
  menuButtonHovered = false;
}

Future Improvements:

While I put in my best effort to enhance the gaming experience by incorporating extra elements like hovering sounds, there are certainly opportunities for refinement in the code. The same outcome could be achieved with simpler and more streamlined coding techniques. As for the game itself, I could introduce a time element where, as a ball is popped, the time increases. The objective could be to prevent the timer from reaching zero.

I also envision the possibility of incorporating various difficulty levels such as easy, medium, and hard. With increasing difficulty, the speed at which the balls diminish could escalate. Additionally, multiple ball objects could potentially be in play simultaneously.

Lastly, I’ve noticed a slight delay when the balls are popped. Despite my efforts to minimize it and have the sound play immediately, there remains a small delay. This aspect is certainly something that could be refined in future iterations.

Citation:

Dye, Matthew W G et al. “Increasing Speed of Processing With Action Video Games.” Current directions in psychological science vol. 18,6 (2009): 321-326. doi:10.1111/j.1467-8721.2009.01660.x

Midterm Progress Report 2- Pop Frenzy

I made some significant changes to my p5.js game, which I’ve now named “Pop Frenzy”. One of the key updates was the addition of a menu feature, aiming to improve user experience. At first, I attempted to use a while loop to transition between game states, but I ran into some issues when trying to create a final screen for game loss. To address this, I opted for if statements and introduced a variable called “choice” to switch between the menu, game, and game-over screens. This approach allowed for smoother transitions and better screen management.

In terms of visuals, I decided to dynamically change the game screen’s color intensity. As the player loses more balls, the screen shifts from a vibrant red to a darker, more intense shade. This alteration effectively conveys a sense of rising challenge and urgency, heightening player engagement.

In addition, I took the initiative to incorporate various sound effects, breathing life into the gameplay. I included sounds for button clicks, ball pops, game-over scenarios, and even background music to create a more immersive experience. This auditory dimension adds depth and excitement to the game.

Here’s a screenshot of the final loser screen where the player is given the option to either go to the menu or press the shout button that outputs a sound(merely for fun interactivity).

The Menu Screen:

To make things look more neat, I went with a blue title to match everything. As well as, adding some text of the description of the game to get started.

I incorporated a screen allowing players to pause or resume the game by pressing a designated key, which in my case is the escape key. This functionality was achieved by implementing the built-in functions loop() and noLoop() from p5.js. When the escape key is pressed, noLoop() is executed, causing p5.js to halt the execution of the draw function. Subsequently, when escape is pressed again, the game seamlessly resumes from where it was left off.

To facilitate the addition of a paused menu screen, I strategically placed the function containing the loop() and noLoop() calls at the end of the entire code. This ensures that when the escape button is triggered during gameplay, one final draw cycle occurs before suspension. Within this concluding draw cycle, p5.js generates a screen displaying the “game paused” message. This approach ensures a smooth transition between active gameplay and the paused state.

Here’s a snippet of that function:

function keyPressed() {
  if (keyCode === ESCAPE)
  {
    if(balllost==8)
      {
        gamePaused=false;
      }
    else
    {
    gamePaused = !gamePaused; // Toggle gamePaused variable
    }
    if (gamePaused) {
      noLoop(); // Pause the game
    } else {
      loop(); // Resume the game
    }
  }
}


The initial ‘if’ statement basically ensures that if the escape button is pressed in the loser screen, the draw function will still keep looping and won’t cause issues. Since the player already lost, there’s no need for a pause screen at the loser screen.

Overall, I’m quite pleased with how these modifications have elevated the game’s overall experience. The combination of refined visuals, dynamic color shifts, and a diverse range of sound effects contributes to a highly engaging and immersive gameplay. Adapting to challenges along the way has been a learning experience, and I’m proud of the creative and technical progress I’ve made in this project.

The Fading Circles

Concept:

I’ve chosen to create a cognitive game for my midterm project, inspired by a warmup routine often used by professional gamers to enhance their tracking skills. This game aims to prime players for high-speed gameplay. In this straightforward yet engaging challenge, a circle appears on the screen, and the objective is to swiftly position the cursor over it and click before it vanishes. At the top of the screen, the game keeps track of successful clicks with a ‘Ball Count’ and records any missed opportunities with a ‘Balls Lost’ counter. The game continues until ten balls are lost, at which point a message will display, indicating the end of the game.

Most Challenging part(So Far):

The most challenging hurdle I encountered was generating multiple circle objects on the screen when the ball count surpasses a certain threshold, say 20. Despite my best efforts, I faced a persistent issue. When the ball count exceeded 20, the code went into overdrive, flooding the screen with hundreds of circles. No matter what approaches I attempted, I couldn’t make proper progress in this regard. Eventually, I made the decision to abandon the idea of introducing multiple circle objects. A friend pointed out that the game was already sufficiently challenging, and adding more objects would likely make it too easy to lose. This adjustment ensures that the game remains an effective warmup exercise, rather than becoming an overwhelming challenge geared towards causing the player to lose.

Reading Response Week 5

Art has always been a way for people to connect deeply, and now, thanks to computers and digital media, this connection can happen from far away. The art pieces mentioned in the article use our movements, captured as pixels, to create special interactive experiences. This is a big step forward in how we express ourselves through art. These artworks often have important messages. One that really caught my attention is David Rokeby’s ‘Sorting Daemon’. It strongly shows how surveillance affects us by using real-life information in his art to send a strong message. When art and computer vision come together, something very powerful happens.

Even though interactive media art, like the examples in the article, is a clever way to share ideas and messages, and it can impact people from their own comfortable spaces, I still think there’s a bit of artificiality to it. When I say ‘fakeness’, I don’t mean it’s bad. It’s just that you can’t completely feel like you’re in that moment, even with virtual reality headsets. For example, I remember an art piece I saw with my class. There were lights hanging from the ceiling and a message playing in the background. That piece really touched us because we could touch the lights and feel the room around us, which is something you can’t do with VR headsets or other digital art.

I agree that computers are getting better and better at creating art that engages us. They’re getting really good at making it feel real. But they can never replace the special feeling of being physically present with a piece of art. There’s a unique connection that happens when all our senses are involved—our minds and our bodies. In the end, computer vision is improving every day, especially in creating interactive art that feels random yet beautiful to watch. This happens by using data we create, and by adjusting different parts of how the computer understands the images and videos. This leads to amazing art that really speaks to us. And there are new art pieces like this being made all the time.

Reading Response Week 4

In his book “The Psychopathology of Everyday Things,” Norman discusses the significance of design in assisting people in comprehending and utilizing objects in daily life. He outlines many psychological concepts that assist us in understanding what makes a design excellent or terrible. He makes much of the possibility that design can be flawed. Even if we are first unaware of it, an object’s attributes refer to the things it can perform or the ways in which it can be used. The cues that explain how to use something are known as signifiers. These cues can be challenging at times.

Norman sincerely desires that designers consider the users of their creations. Even the coolest designs, according to him, don’t always work out since designers occasionally forget about the people. The notion that machines don’t comprehend things the same way people do is a good one. A machine needs to be aware that people can make mistakes in order to be helpful. Additionally, it should not be overly complicated to use and understand. I agree with Norman’s suggestion to build with the user in mind. Everyone can use the items in this way without feeling lost. Technology can occasionally be overly complex, and that is not useful. Designers must ensure that their works are both clever and simple to understand.

In a similar way, my classmate talks about the same ideas. They mention how sometimes, designers forget about what people really need. This is an important reminder for all designers. They also talk about how technology can be both helpful and frustrating, depending on how it’s designed. This shows that good design is really crucial for making technology that works well for everyone.

The Impact of the Negatives

Concept:

My project, originally named ‘The Raining Texts’, has grown beyond its initial idea. In this artwork, you’ll see blue words, which represent positivity, falling quickly down the screen. They come and go swiftly. On the other hand, red words, representing negativity, descend slowly and stay on the screen. Think of the screen as our minds. The words mirror what people say about us. Positive words are like passing clouds, they come and go. Negative words, however, linger. They stick with us, becoming a burden. Even though this project isn’t grand, it carries a strong message. It shows how negative words can stay with us, while positive ones quickly fade. This idea came from a YouTube video where people talked about their best and worst memories. Surprisingly, they remembered the worst ones very clearly, while good memories seemed to fade away. This shows how much negativity can affect us. That’s what I’ve tried to capture in this simple artwork.


Link:https://editor.p5js.org/Nasar/sketches/Nv_4YVOUy

 Code Highlight:

 //Split the strings in CSV Filles and store into words/words2 array
  words = split(PositiveWords[int (random(PositiveWords.length))], ',');
  words2 = split(NegativeWords[int (random(NegativeWords.length))], ',');
  
  //initialize for loops that keep storing and creating letter objects and store words1/words2 arrays into their constructor
  for (let i = 0; i < words.length; i++) {
    let randomWord = random(words);
    letters.push(new Letter(randomWord));
  }
  for (let i = 0; i < words2.length; i++) {
    let randomWord2 = random(words2);
    letters2.push(new Letter(randomWord2));
  }
}

I found this section of the code particularly challenging. At first, it wasn’t accepting a string input. Then, even when it did, the letters class wasn’t cooperating. It took me a while, but I eventually managed to work it out. It was a bit frustrating, but I got there in the end.

Reflections/comments:

Though the code may appear simple, it actually took me quite a while to set up. It involves several different concepts we’ve learned, from arrays and classes to functions, as well as working with CSV files and incorporating their data into the letter class. The process was lengthy, even though the final outcome may not seem that way. I’ve gained a solid grasp of both new and previously learned concepts, clearing up any lingering doubts I had. Initially, I had envisioned the negative words stacking up at the bottom of the canvas, forming a tower. I spent hours scouring social media and experimenting, but eventually, I had to concede and opted for the letters flowing down, repositioning slightly upward, and then repeating in a loop. All in all, I’m quite proud of the effort I’ve invested in this project.

 

Reading Response- Interactivity

Chris Crawford really gets it right when he talks about interactivity. He explains it in a clear and organized way, especially when he connects it to our senses. Making this connection between interaction and our senses is a big deal. I think interactivity gets super powerful when it tugs at our feelings and expressions.

Imagine interactive games or events that use special sounds, words, colors, and lights. They make a whole new experience for the person taking it all in. It’s like diving into the art itself. Regular movies might not have a lot of interactivity but think about formats like 4DX. They change the game. You’re not just watching; you’re feeling things like air blowing, water splashing, and chairs moving. It’s like the movie comes to life, playing with your senses. As Crawford points out, a vital part of interactivity is making you think, feel, and express yourself. When art really hits you deeply, it makes you stop and feel. This feeling is what kicks off the real interaction with the artwork, creating a strong bond between you and what you’re seeing.

In my view, interactivity goes even further. It’s about connecting with individuals on a deeper level, creating an experience that really resonates with them. This, in turn, leads to the kind of reaction Crawford talks about – a reaction that truly does justice to the interactive nature of the encounter. It’s like a dance between the viewer and the medium, each responding and influencing the other in a meaningful way. This, to me, is the true essence of interactivity.

Assignment 3

Concept:

I wanted to apply my classroom knowledge, encompassing classes, functions, and arrays, to develop an engaging interactive game. Through this process, I successfully created an addictive game. The game incorporates two classes: one for displaying the person and another for handling the moving balls. Initially, I conducted trials with balls originating from the same point, following similar paths. After receiving feedback from friends, I recognized the need for a more dynamic experience. Subsequently, I modified the code to generate balls from random points across the canvas, each with its unique trajectory. For controls, I implemented basic key functions using left, right, up, and down arrows to navigate the human across the canvas. Additionally, I incorporated arrays to introduce a new ball each time the person reaches the designated area. To enhance clarity and transform the game into a point-based system, I added a visual display of the current ball count in the top left corner. This addition encourages players to strive for higher scores, further enhancing engagement.

Highlighted Code:

//for loop which creates more balls if the human hits ball and decrements ball count
 for (let j = 0; j < ballArr.length; j++) {
   ballArr[j].display();
   ballArr[j].bounce();
   
   //if distace betwee human and ball is less than 30, move to orignal position
   let d = dist(Human.getX(), Human.getY(), ballArr[j].getX(), ballArr[j].getY());
   
   if (d < 30) {
     Human.origin();
     ballArr.splice(j, 1);
     j--;
     ballCount--; 
   }
 }

Creating this code proved to be a substantial time investment. I focused on implementing the splice and push functions within arrays to dynamically generate more balls each time the person reached the “continue” area. Through numerous iterations and referencing online examples, I was able to achieve the desired outcome, resulting in the final product I had envisioned.

Code Link: https://editor.p5js.org/Nasar/sketches/JieIBPrML

Reflections:

I take pride in the progress I’ve made, in integrating classes and arrays into my game. This endeavor significantly enhanced my understanding of these fundamental concepts. Looking ahead, I envision improving the game’s visuals and crafting a more refined character design beyond the current tree-like representation. Additionally, I aim to streamline code logic for more efficient and concise outcomes. With continued learning, I anticipate greater proficiency in envisioning diverse scenarios and seamlessly implementing them into my games. This iterative process continues to sharpen my coding acumen and creativity.