İçeriğe Geç

Taş Kağıt Makas Oyunu Projesi

06 Nov 2023
Rock Paper Scissors Game Project

Çocukluğunuzun en sevilen hatıraları arasında, belki de en başta geleni, arkadaşlarınızla oynadığınız taş-kağıt-makas oyunudur. Bu basit fakat bir o kadar da heyecanlı oyun, yıllar içinde popülerliğini koruyarak, dostları bir araya getirmiş ve toplumumuzda silinmez anılar bırakmıştır :)

Taş Kağıt Makas Oyunu​

Bu yazılım, taş-kağıt-makas oyununu, zamanın ruhunu yansıtan bir dokunuşla yeniden canlandırıyor. PicoBricks'le, oyuncuların tercihlerini görsel ve işitsel efektlerle bezeli, adeta birer sanatsal deneyime dönüştürüyor. Her seçim, her karşılaşma, beklenmedik sonuçlarla dolu ve bir oyundan çok daha fazlasını vaat ediyor. Bu sihirli dünyaya adım atmaya hazır mısınız? Taş, Kağıt, Makası PicoBricks'le oynayın ve tek bir tıkla bu eşsiz oyunun keyfini sürün!

Taş Kağıt Makas Nasıl Oynanır?

Taş, Kağıt, Makas. Eller, birbirlerine karşı sessiz bir dans ederler;

  • Taş, makası kırar;
  • Makas, kağıdı keser;
  • Kağıt ise taşı sarar.

Bu üçlü düello, zamana ve mekâna meydan okur. Oyuncular, birbirlerinin gözlerine bakar, birbirlerinin ruhunu okumaya çalışır. Taş, kağıt, makas derken eller hızla şekil alır. Bu oyun, sadece bir çocuk oyunu değil, aynı zamanda bir hikâye anlatma sanatıdır. Her seçim, bir karakterin hikâyesini, bir çocuğun hayal dünyasını yansıtır.

Detaylar ve Algoritma

Projemize, temel donanım parçalarını yerleştirerek başlıyoruz:

  • Bir buzzer,
  • OLED ekran
  • Bir servo motor

Bu modüller, projemizin alt yapısını oluşturuyor. Oyun mantığımız ve ses efektlerimiz, düşünceli bir şekilde ayrı fonksiyonlara yerleştirilmiş: RPS(), music() ve Starter(). Bilgisayar, rastgele olarak Taş, Kağıt ya da Makas'tan birini seçiyor ve nihayetinde seçimini OLED ekran üzerinde animasyonlu görseller ve uygun ses efektleriyle ifşa ediyor. Servo motorun hareket ettirdiği ok, bilgisayarın taş kağıt makasta ne seçtiğini gösteriyor.

Bu donanım ve yazılımın uyumlu birleşimi, zamansız taş kağıt makas oyununun etkileşimli bir yorumuna dönüşüyor, tüm yaşlardan bireyler için keyifli bir deneyim sunuyor.

Komponentler

Devre Şeması

PicoBricks IDE Kodları

MicroBlocks Kodları

MicroPython Kodları

The Micro Python code is shown below. You will need to create a separate Python file for your image files. You can download this file using the button below.

DOWNLOAD

#include <IRremote.h>
#include <Wire.h>
#include "ACROBOTIC_SSD1306.h"
#define IR_RECEIVE_PIN 0
#define trigPin 15
#define echoPin 14
int a = 0;
long duration, distance;
void setup() {
  //define dht sensor and Oled screen
  Serial.begin(115200);
  Wire.begin();
  oled.init();
  oled.clearDisplay();
  pinMode(IR_RECEIVE_PIN, INPUT);
  IrReceiver.begin(IR_RECEIVE_PIN, ENABLE_LED_FEEDBACK);
  pinMode(trigPin, OUTPUT);
  pinMode(echoPin, INPUT);
}
void loop() {
  if (IrReceiver.decode()) {
    a = (IrReceiver.decodedIRData.decodedRawData);
    Serial.println(a);
    IrReceiver.resume();
  }
  digitalWrite(trigPin, LOW);
  delayMicroseconds(2);
  digitalWrite(trigPin, HIGH);
  delayMicroseconds(10);
  digitalWrite(trigPin, LOW);
  duration = pulseIn(echoPin, HIGH);
  distance = (duration / 2) / 29.1;
  if (distance <= 10)
  {
    stop();
  }
  if (a == -1520763136) {
    left();
  }
  if (a == -150405376) {
    right();
  }
  if (a == -417792256) {
    forward();
  }
  if (a == -484638976) {
    stop();
  }
}
void stop()
{
  digitalWrite(21, LOW);
  digitalWrite(22, LOW);
}
void left()
{
  digitalWrite(21, HIGH);
  digitalWrite(22, LOW);
}
void right()
{
  digitalWrite(21, LOW);
  digitalWrite(22, HIGH);
}
void forward()
{
  digitalWrite(21, HIGH);
  digitalWrite(22, HIGH);  
}

Arduino C Codes of the PicoBricks


DOWNLOAD
from machine import I2C, Pin, SPI, PWM, ADC
from utime import sleep
from picobricks import SSD1306_I2C, WS2812
import framebuf
import random
from rps_images import rock,paper,scissors,start, Tones, win_song, time_song, loading

WIDTH  = 128   # oled display width
HEIGHT = 64    # oled display height

servo = PWM(Pin(21))

i2c = I2C(0, scl=Pin(5), sda=Pin(4), freq=200000)   # Init I2C using pins(default I2C0 pins)
oled = SSD1306_I2C(WIDTH, HEIGHT, i2c, addr=0x3c)   # Init oled display
ws2812 = WS2812(13,6,brightness=1)

fb1 = framebuf.FrameBuffer(rock, 128,64 , framebuf.MONO_HLSB)
fb2 = framebuf.FrameBuffer(paper, 128,64, framebuf.MONO_HLSB)      
fb3 = framebuf.FrameBuffer(scissors, 128,64, framebuf.MONO_HLSB)
loading = framebuf.FrameBuffer(loading, 128,64, framebuf.MONO_HLSB)
start = framebuf.FrameBuffer(start, 128,64, framebuf.MONO_HLSB)

buzzer = PWM(Pin(20))
buzzer.duty_u16(0)

button = Pin(10, Pin.IN)
oled = SSD1306_I2C(WIDTH, HEIGHT, i2c, addr=0x3c)   # Init oled display

oledVisuals = [fb1, fb2, fb3]

servoPositions = [8500, 5500, 3500]

RED = (255, 0, 0)
BLUE =(0, 0, 255)
GREEN = (0, 255, 0)
BLACK = (0, 0, 0)
ORANGE = (255, 100, 0)
resultColors = [RED, BLUE, GREEN]
analog_value = ADC(28)

def neo():
    for i in range(0,13):
        ws2812.pixels_fill((random.randint(0,255),
                            random.randint(0,255),
                            random.randint(0,255)))
        sleep(0.05)
        ws2812.pixels_show()
def winningSound():
    for note, duration in win_song:
        buzzer.freq(Tones[note])
        buzzer.duty_u16(5000)
        sleep(duration*0.1)
        buzzer.duty_u16(0)
        sleep(duration*0.1)
       
def timesong():
    for note, duration in time_song:
        buzzer.freq(Tones[note])
        buzzer.duty_u16(5000)
        sleep(duration*0.07)
        buzzer.duty_u16(0)
        sleep(duration*0.07)

def Sweep(i):
    servo.freq(50)
    ws2812.pixels_fill((random.randint(0,255),
                        random.randint(0,255),
                        random.randint(0,255)))
    ws2812.pixels_show()  
    for position in range(4000,8000,500):
        servo.duty_u16(position)
        sleep(0.01)
    for position in range(8000,4000,-500):
        servo.duty_u16(position)
        sleep(0.01)
    oled.fill(0)
    oled.blit(oledVisuals[i], 0, 0)
    oled.show()
    timesong()

random.seed(analog_value.read_u16())

while True:

    if  button.value() == 1:
        servo.freq(50)
        servo.duty_u16(5500)
        sleep(0.01)
        oled.blit(loading, 0, 0)
        oled.show()
        sleep(1)
        oled.fill(0)
        result = random.randint(0,2)

        for i in range(3):
            Sweep(i)
            sleep(0.1)

        servo.freq(50)
        servo.duty_u16(servoPositions[result])
        oled.blit(oledVisuals[result], 0, 0)
        oled.show()
        ws2812.pixels_fill((random.randint(0,255),
                            random.randint(0,255),
                            random.randint(0,255)))
        ws2812.pixels_show()
        winningSound()
        sleep(2)
        print(servoPositions[result])
        print(result)
    else:
        servo.freq(50)
        servo.duty_u16(2000)
        oled.blit(start, 0, 0)
        oled.show()
        ws2812.pixels_fill(ORANGE)
        ws2812.pixels_show()

 

Picobricksinizi kırmadan önce Picobricks IDE Smülatörde de deneyebilirsiniz!

Önceki Gönderi
Sıradaki Gönderi

Abone olduğun için teşekkürler!

Bu e-posta kaydedildi!

Görünümü satın alın
Seçenekleri Seçin

Seçeneği Düzenle

Stok Bildirimi

Karşılaştır

Ürün Stok KoduDeğerlendirmeAçıklama Kategori Uygunluk Ürün Tipi Diğer Detaylar
this is just a warning
Giriş Yap
Alışveriş Sepeti
0 Ürünler
Same Day Shipping No Extra Costs
Easy Returns Guarantee Return with Ease
Secure Checkout Secure Payment