back to top

PicoBricks ile Taş Kağıt Makas!

Arkadaşlarınızla taş kağıt makas oynadığınız o keyifli anları hatırlıyor musunuz? Basit ama heyecan verici bu oyun, yıllar boyunca popülerliğini koruyarak, arkadaşları bir araya getirip kalıcı anılar yaratmaya devam etti. Hızla karar verme yeteneğinizi test eden, eğlenceli ve bağımlılık yaratan bu oyun, her yaştan insanı büyülemeyi sürdürüyor. Gelin, unutulmaz çocukluk anılarına kod katalım!

Taş Kağıt Makas Oynayalım!

Bu yazılım, taş kağıt makas oyununu modern bir dokunuşla yeniden hayata geçiriyor. PicoBricks ile oyuncuların seçimleri, etkileyici görsel ve ses efektleriyle eğlenceli bir deneyime dönüşüyor. Her seferinde farklı sonuçlar doğuran rastgele seçimler ile oyun, heyecan dolu bir deneyim sunuyor. 

Eğlenceye hazır mısınız?

Detaylar ve Algoritma

Projeye temel donanım elemanlarını kurarak başlıyoruz: Bir buzzer, OLED ekran ve servo motor, girişimimizin temelini atıyoruz. Oyun mantığımız ve ses efektlerimiz RPS(), music() ve Starter() adlı fonksiyonlara dikkatlice düzenlenmiştir. Bilgisayar rastgele taş, kağıt veya makas seçer ve sonunda seçimini animasyonlu görseller ve OLED ekranında karşılık gelen ses efektleriyle gösterir. Servo ile hareket eden ok, bilgisayarın taş, kağıt, makasta ne seçtiğini gösterir.

Bu donanım ve yazılımın uyumlu birleşimi, her yaştan bireyin keyif alabileceği, zamansız taş-kağıt-makas oyununun etkileşimli bir versiyonunu sunar.

Gerekli Bileşenler: 

1X PicoBricks

1X Servo motor

Bağlantı Şeması

PicoBricks’in MicroBlocks Kodları

PicoBricks’in MicroPython Kodları

Aşağıda Micro Python kodu gösterilmektedir. Görüntü dosyalarınız için ayrı bir Python dosyası oluşturmanız gerekecek. Bu dosyayı aşağıdaki butonu kullanarak indirebilirsiniz.

from time import sleep
from machine import Pin, I2C, PWM
from picobricks import SSD1306_I2C
import time
import machine
import math

i2c = I2C(0, scl=Pin(5), sda=Pin(4), freq=200000)
oled = SSD1306_I2C(128, 64, i2c, addr=0x3c)
pin_button = machine.Pin(10, machine.Pin.IN)
import random
buzzer = PWM(Pin(20))

pwm_2 = PWM(Pin(22))
pwm_2.freq(50)

def CalculateAngle(angle):
   angle = fabs((angle * (6000 / 180)) + 2000)
   angle = round(angle)
   return angle

def RPS():
    global sentence, choice, sentence_array, i, list2, dare_question, truth_question, truth_or_dare
    for i in range(3):
        buzzer.freq(700)
        buzzer.duty_u16(100)
        sleep(0.25)
        buzzer.duty_u16(0)
        oled.fill(0)
        oled.text("{}".format(list2[i]), int((64) - (int(len(list2[i]))) // 2), 23)
        oled.text("{}".format("???"), 46, 33)
        oled.show()
        time.sleep(1)

    choice = random.choice(["Rock", "Paper", "Scissors"])
    oled.fill(0)
    if choice == "Rock":
        oled.text("{}".format(">>ROCK<<"), 25, 23)
        oled.show()
        music()
        pwm_2.duty_u16(CalculateAngle(45))
    elif choice == "Paper":
        oled.text("{}".format(">>PAPER<<"), 25, 23)
        oled.show()
        music()
        pwm_2.duty_u16(CalculateAngle(90))
    else:
        oled.text("{}".format(">>SCISSORS<<"), 16, 23)
        oled.show()
        music()
        pwm_2.duty_u16(CalculateAngle(135))

def music():
    global sentence, choice, sentence_array, i, list2, dare_question, truth_question, truth_or_dare
    buzzer.freq(800)
    buzzer.duty_u16(100)
    sleep(0.25)
    buzzer.duty_u16(0)
    time.sleep(0.0001)
    buzzer.freq(1000)
    buzzer.duty_u16(100)
    sleep(0.25)
    buzzer.duty_u16(0)
    time.sleep(0.0001)
    buzzer.freq(800)
    buzzer.duty_u16(100)
    sleep(0.25)
    buzzer.duty_u16(0)
    time.sleep(0.0001)
    buzzer.freq(1000)
    buzzer.duty_u16(100)
    sleep(0.25)
    buzzer.duty_u16(0)
    time.sleep(0.0001)
    buzzer.freq(1300)
    buzzer.duty_u16(100)
    sleep(0.5)
    buzzer.duty_u16(0)

def Starter():
    global sentence, choice, sentence_array, i, list2, dare_question, truth_question, truth_or_dare
    while pin_button.value() == 0:
        oled.text("{}".format("Rock"), 42, 10)
        oled.text("{}".format("Paper"), 40, 20)
        oled.text("{}".format("Scissors"), 30, 30)
        oled.text("{}".format(""), 6, 45)
        oled.show()

sentence = ""
sentence_array = " "
dare_question = "Yell out the first word that comes to your mind.Eat a snack without using your hands.Dance without music for two minutes".split(".")
truth_question = "Do you have a hidden talent? When's the last time you apologized, What for?What is your biggest fear?".split("?")

while True:
    oled.fill(0)
    oled.text("{}".format("Spin "), 35, 30)
    oled.text("{}".format(" Bottle"), 20, 40)
    oled.show()
    time.sleep(1)
    oled.fill(0)
    while pin_button.value() == 0:
        truth_or_dare = round(0 - 0) * (0 - 0) // (0 - 0) + 0
        if truth_or_dare == 0:
            oled.fill(0)
            oled.text("{}".format("Truth Or Dare"), 0, 10)
            oled.text("{}".format("truth"), 10, 40)
            oled.show()
        else:
            oled.fill(0)
            oled.text("{}".format("Truth Or Dare"), 0, 10)
            oled.text("{}".format("dare"), 10, 40)
            oled.show()
            time.sleep(0.3)
            oled.fill(0)

    oled.fill(0)
    oled.show()
    if truth_or_dare == 0:
        sentence = truth_question[random.randint(1, len(truth_question) - 1)]
        if len(sentence) >= 16:
            sentence_array = sentence.split(" ")
            for i in range(1, len(sentence_array) + 1):
                oled.text("{}".format(sentence_array[i - 1]), 32, 10 * (i - 1))
                oled.show()
                time.sleep(1)
        else:
            oled.text("{}".format(sentence), 0, 25)
            oled.show()
            time.sleep(1)
    else:
        sentence = dare_question[random.randint(1, len(dare_question) - 1)]
        if len(sentence) >= 16:
            sentence_array = sentence.split(" ")
            for i in range(1, len(sentence_array) + 1):
                oled.text("{}".format(sentence_array[i - 1]), 32, 10 * (i - 1))
                oled.show()
                time.sleep(1)
        else:
            oled.text("{}".format(sentence), 0, 25)
            oled.show()
            time.sleep(1)

choice = 0
list2 = ["Rock", "Paper", "Scissors"]
Starter()
RPS()
while True:
    while pin_button.value() == 0:
        oled.fill(0)
        oled.text("{}".format("Push to play "), 15, 20)
        oled.text("{}".format("again"), 40, 30)
        oled.show()

    RPS()

PicoBricks’in IDE Kodları

PicoBricks’in Arduino C Kodları

#ifndef ACROBOTIC_SSD1306_H
#define ACROBOTIC_SSD1306_H

#if ARDUINO >= 100
 #include "Arduino.h"
#else
 #include "WProgram.h"
#endif

#ifdef __AVR__
  #include 
  #define OLEDFONT(name) static const uint8_t __attribute__ ((progmem)) name[]
#elif defined(ESP8266)
  #include 
  #define OLEDFONT(name) static const uint8_t name[]
#else
  #define pgm_read_byte(addr) (*(const unsigned char *)(addr))
  #define OLEDFONT(name) static const uint8_t name[]
#endif

#include "Wire.h"
#include "fonts/font8x8.h"
#include "fonts/font5x7.h"

// Default screen size is 128x64. Using a #define in your sketch before
// the #include statement can change the default size.

#if !defined SSD1306_128_64 && !defined SSD1306_128_32
  #define SSD1306_128_64
#endif

#if defined SSD1306_128_64
  #define SSD1306_Max_X                 127
  #define SSD1306_Max_Y                 63
#endif
#if defined SSD1306_128_32
  #define SSD1306_Max_X                 127
  #define SSD1306_Max_Y                 31
#endif

#define PAGE_MODE                     01
#define HORIZONTAL_MODE               02

#define SSD1306_Address               0x3C
#define SSD1306_Command_Mode          0x80
#define SSD1306_Data_Mode             0x40
#define SSD1306_Display_Off_Cmd       0xAE
#define SSD1306_Display_On_Cmd        0xAF
#define SSD1306_Normal_Display_Cmd    0xA6
#define SSD1306_Inverse_Display_Cmd   0xA7
#define SSD1306_Activate_Scroll_Cmd   0x2F
#define SSD1306_Dectivate_Scroll_Cmd  0x2E
#define SSD1306_Set_Brightness_Cmd    0x81

#define Scroll_Left                   0x00
#define Scroll_Right                  0x01

#define Scroll_2Frames                0x7
#define Scroll_3Frames                0x4
#define Scroll_4Frames                0x5
#define Scroll_5Frames                0x0
#define Scroll_25Frames               0x6
#define Scroll_64Frames               0x1
#define Scroll_128Frames              0x2
#define Scroll_256Frames              0x3

class ACROBOTIC_SSD1306 {
  public:
    char addressingMode;
    void init(TwoWire& wire=Wire);

    void setNormalDisplay();
    void setInverseDisplay();

    void sendCommand(unsigned char command);
    void sendData(unsigned char Data);

    void setPageMode();
    void setHorizontalMode();

    void setTextXY(unsigned char Row, unsigned char Column);
    void clearDisplay();
    void setBrightness(unsigned char Brightness);
    bool putChar(unsigned char c);
    void putString(const char *string);
    void putString(String string);
    unsigned char putNumber(long n);
    unsigned char putFloat(float floatNumber,unsigned char decimal);
    unsigned char putFloat(float floatNumber);
    void drawBitmap(unsigned char *bitmaparray,int bytes);

    void setHorizontalScrollProperties(
        bool direction,
        unsigned char startPage,
        unsigned char endPage,
        unsigned char scrollSpeed);
    void activateScroll();
    void deactivateScroll();

    void displayOn();
    void displayOff();

    void setFont(const uint8_t* font, bool inverse=false);

  private:
    const uint8_t* m_font;      // Current font.
    uint8_t m_font_offset = 2;  // Font bytes for meta data.
    uint8_t m_font_width;       // Font witdth.
    uint8_t m_col;              // Cursor column.
    uint8_t m_row;              // Cursor row (RAM).
    bool m_inverse=false;       // Inverse text.
    TwoWire* m_wire;
};

extern ACROBOTIC_SSD1306 oled;  // ACROBOTIC_SSD1306 object

#endif

Bu donanım ve yazılımın uyumlu birleşimi, her yaştan bireyin keyif alabileceği, zamansız taş kağıt makas oyunu gibi daha fazla PicoBricks projesi burada!

Son Çıkan Yazılar

CEVAP VER

Lütfen yorumunuzu giriniz!
Lütfen isminizi buraya giriniz