(Omar Shoura, Zachary Perry, Samantha Wong)
Welcome to SOZ or Shhh.. it's Obviously a Zero! The central idea of this game is to get rid of all of the cards in your stack by all means necessary. The key point is to deceive the other players about what cards from your stack you are putting down on your turn. A player wins when they place down all of the cards in their stack into the discard pile. People that like deception games like BS and Mafia will enjoy this game.
https://drive.google.com/file/d/1ygNpAmoukB_MBe33ns343Uq5vb01fYq8/view?usp=sharing
SOZ requires each player to have a standard deck of cards which can be printed out along with the special cards below. Only one ardiuno is needed to play this game. The player with the ardiuno will press the trial button for the other players when needed.
Follow the attached Arduino instructions below. They provide you with a step by step setup to all the Arduino components. Ideally have one per person, but one per game will suffice.
Adjust the potentiometer and click the button a few times to ensure that the LCD and LEDs are functioning properly
Find attached the printer sheet for the special cards
Print and cut out all 10 individual cards and mix them into your full deck of normal playing cards (jokers excluded)
Get on a zoom with friends, turn on the camera if possible, and get ready to have some fun
Decide what order the players will go in. If you can’t decide, go by who woke up the earliest.
On each person’s turn, they pick up one card from their stack and flip it face forward towards themselves. They only need to show their camera the back of their card. The player then has to say what card they got but they don’t have to be honest about it. You can bluff in this game, which means you can lie about what card you just placed down to beat other players without them knowing. Place the flipped over card in the discard pile and keep going until you want to stop. You can stop anytime before the sum reaches over 30. If your sum goes over 30 then that round is a bust and you must place the cards you flipped over in that turn on the bottom of your stack.
Before the next player goes, there is a moment where the other players can call out the current player for lying. If they are called out, they have to show the cards they just placed to the camera. If the liar is caught, then they press the red button and let the Arduino determine their fate. If the liar is truthful, then the accuser presses the green button. The liar doesn’t have to give up the cards they flipped over that turn and the 10 penalty cards from their discard pile if the Arduino lets them go. For the accuser, they don’t have to remove 10 cards from their discard pile if they are let go.
The next player goes and repeats steps 2 and 3.
The game ends when one player has flipped over all of their stack and has no cards left.
Note:
Players can't just place down all of their cards at once and leave their fate up to the arduino. That wouldn't be any fun!
Players can't lie on their last round (The round that they would win on)
Clubs and Spades:
In this game mode, as the name implies, you only play with half the deck - the clubs and the spades. This reduces the play time if you don't feel like playing for too long.
In this mode, you bust at 20 instead of 30 and you remove two zeros and one eraser.
Hands On:
In this game mode, you get a hand of cards. Instead of pulling up one card at a time from your stack, you maintain a hand of 8 cards from the top of your stack. This way, each player can plan and strategize around the cards that they pull. Because this makes it easier to lie, change the tchance to 30% and lchange to 80% at the top of the code.
This game mode allows you to rely more on your planning and preparation and less on your ability to lie under unfortunate circumstances!
Classic mode:
In this game mode, you play the games at the barebones to truly level the playing field. Before you start playing, remove all special cards from the deck and only play with the deck of cards.
Switch between this and the standard mode to see which you enjoy more!
Ace = 1
Jack = 11
Queen = 12
King = 13
In this game there is an added aspect of “Bluffing”, basically lying. At any point during the game, you can lie about what card you just put down. The goal is to lie to advance your standing but not to the point where other players can tell you are lying.
If the current player is accused and found out that they are cheating, then the players must return to the arduino to determine their fate. The red button (the middle button) is pressed, if the arduino determines they should be punished, they take ten cards out of their discard pile and put it in their hand. The arduino could similarly spare the cheater and allow them to continue unpunished.
If the accuser falsely accuses a player (the alleged liar was indeed telling the truth), they follow the procedure as above but with the green button (the far right button). If the arduino says they should be punished, then they will take ten cards from their discard pile. If the arduino says otherwise then they don’t have to do anything.
*The liar has a lower chance of getting off free than the accuser, so don't be afraid to call someone out!
Zero - This card has no value. It basically allows you to burn any special card you want (it’s the most abundant special card so think about playing it off as another card!)
Eraser- This card acts like a -5 and will decrease your current count by 5
Plus - This card acts like a +5 and will increase your current count by 5
Explosion - This card resets your current count regardless of how high it was down to 0
Twenty - This card counts for 20 points. Most of the time, if not bluffed about, will cause you to bust.
Since Zero is the most common card, you can play off most of the bad cards as a Zero and it will be much harder for people to tell
If you get a Twenty card, try to play it off as another special card. It can often be nice to get that card out of your deck early
Use the camera! Look at the other players when they put down a card and notice their reaction to see if you can spot some nervousness.
//libraries
#include <LiquidCrystal.h>
//pins
#define FLED 6
#define GLED 7
#define BTTN_T 5
#define BTTN_L A3
#define BZZR 3
//variables/objects
bool freeLED,guiltyLED, b1press, b2press;
int randNum;
LiquidCrystal lcd(13,12,11,10,9,8);
// % guilty chance if accused person is truthful
const int tChance = 40;
// % guilty chance if accused person is lying
const int lChance = 70;
void setup() {
//pinmodes
pinMode(FLED,OUTPUT); //freeLED
pinMode(GLED,OUTPUT); //guiltyLED
pinMode(BTTN_T,INPUT_PULLUP); //green button (accused is truthful)
pinMode(BTTN_L,INPUT_PULLUP); //red button (accused is lying)
pinMode(BZZR,OUTPUT); //buzzer
// creates a random seed using analog noise
randomSeed(analogRead(0));
//setup LCD
lcd.begin(16,2);
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Welcome to SOZ!");
//begin Serial
Serial.begin(9600);
Serial.println("Welcome to SOZ");
}
void loop() {
//detect button press
bool btPress = (digitalRead(BTTN_T));
bool blPress = (digitalRead(BTTN_L));
btPress = !btPress;
blPress = !blPress;
//test if either button has been pressed
if(btPress or blPress){
//random number 1-100
randNum=random(1,101);
//Serial debugging
Serial.println(randNum);
Serial.print("Liar button (red) Pressed: ");
Serial.println(blPress);
Serial.print("Truthful button (green) Pressed: ");
Serial.println(btPress);
//red (lying) button pressed
if(blPress){
if(randNum < lChance){
freeLED = false;
guiltyLED = true;
} else{
freeLED = true;
guiltyLED = false;
}
}
//green (truthful) button pressed
else{
if(randNum < tChance){
freeLED = false;
guiltyLED = true;
} else{
freeLED = true;
guiltyLED = false;
}
}
//create suspense
lcd.clear();
lcd.setCursor(0,0);
lcd.print("You are mine!");
lcd.setCursor(0,1);
delay(750);
for(int i=1;i<16;i++){
digitalWrite(FLED,HIGH);
digitalWrite(GLED,HIGH);
delay(500/i);
digitalWrite(FLED,LOW);
digitalWrite(GLED,LOW);
delay(500/i);
lcd.print(".");
}
delay(1000);
//display results to LEDs
digitalWrite(FLED,freeLED);
digitalWrite(GLED,guiltyLED);
//display result on LCD and play tone
lcd.clear();
lcd.setCursor(0,0);
if(guiltyLED){
lcd.print("FOUND GUILTY!!");
tone(BZZR,100,500);
}
else{
lcd.print("SET FREE!!");
tone(BZZR,600,500);
}
//clear displays after 5 seconds
delay(5000);
freeLED=false;
guiltyLED=false;
digitalWrite(FLED,freeLED);
digitalWrite(GLED,guiltyLED);
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Waiting for the");
lcd.setCursor(0,1);
lcd.print("next victim!");
}
btPress = false;
blPress = false;
}