int buttonR=4;
int buttonR1=3;
int buttonR2=2;
int buttonRState;
int buttonR1State;
int buttonR2State;
int aiMove;
int player;
int score = 0;
int ledPin1 = 8;
int ledPin2 = 9;
int ledPin3 = 10;
int ledPin4 = 11;
int highScore = 0;
#include <Wire.h>
#include <LiquidCrystal_I2C_STEM.h>
#include <EEPROM.h>
LiquidCrystal_I2C_STEM lcd(0x27,16,2);
bool needNewMove = true;
void setup(){
pinMode(buttonR,INPUT);
pinMode(buttonR1,INPUT);
pinMode(buttonR2,INPUT);
Serial.begin(9600);
randomSeed(analogRead(0));
//lcd
lcd.init();
lcd.backlight();
lcd.setCursor(4,0);
lcd.print("RPS Game");
delay(2000);
lcd.clear();
lcd.setCursor(0,1);
lcd.print("Pick Object");
lcd.setCursor(0, 0);
lcd.print("High Score: ");
lcd.print(highScore);
//LEDs
pinMode(ledPin1, OUTPUT);
pinMode(ledPin2, OUTPUT);
pinMode(ledPin3, OUTPUT);
pinMode(ledPin4, OUTPUT);
}
void loop(){
buttonRState=digitalRead(buttonR);
buttonR1State=digitalRead(buttonR1);
buttonR2State=digitalRead(buttonR2);
//pisteytys
lcd.setCursor(12,0);
lcd.print(score);
//AIlogiikka
if (needNewMove) {
if (score % 2 == 0) { //parillinen luku
aiMove = random(1, 16) * 2 - 1; //1-30 pariton luku
} else {
aiMove = random(1, 16) * 2; //1-30 parillinen luku
}
Serial.println(aiMove);
digitalWrite(ledPin1, LOW);
digitalWrite(ledPin2, LOW);
digitalWrite(ledPin3, LOW);
digitalWrite(ledPin4, LOW);
if (aiMove==2||aiMove==4||aiMove==6||aiMove==8||aiMove==10||aiMove==12||aiMove==14||aiMove==15||aiMove==17||aiMove==19||aiMove==21||aiMove==23||aiMove==25||aiMove==27||aiMove==29) {
digitalWrite(ledPin1, HIGH);
}
if (aiMove==2||aiMove==4||aiMove==6||aiMove==7||aiMove==9||aiMove==11||aiMove==13||aiMove==16||aiMove==18||aiMove==20||aiMove==22||aiMove==23||aiMove==25||aiMove==27||aiMove==29) {
digitalWrite(ledPin2, HIGH);
}
if (aiMove==2||aiMove==3||aiMove==5||aiMove==8||aiMove==10||aiMove==11||aiMove==13||aiMove==16||aiMove==18||aiMove==19||aiMove==21||aiMove==24||aiMove==26||aiMove==27||aiMove==29) {
digitalWrite(ledPin3, HIGH);
}
if (aiMove==1||aiMove==4||aiMove==5||aiMove==8||aiMove==9||aiMove==12||aiMove==13||aiMove==16||aiMove==17||aiMove==20||aiMove==21||aiMove==24||aiMove==25||aiMove==28||aiMove==29) {
digitalWrite(ledPin4, HIGH);
}
needNewMove=false;
}
if(buttonRState==HIGH){
player=1;
Serial.print("Player:");
Serial.println("Paper");
lcd.setCursor(0,0);
lcd.print(" ");
lcd.setCursor(0,1);
lcd.print(" ");
lcd.setCursor(0,1);
lcd.print("Paper ");
ai();
Player();
delay(1000);
}
else if(buttonR1State==HIGH){
player=2;
Serial.print("Player:");
Serial.println("Rock");
lcd.setCursor(0,0);
lcd.print(" ");
lcd.setCursor(0,1);
lcd.print(" ");
lcd.setCursor(0,1);
lcd.print("Rock ");
ai();
Player();
delay(1000);
}
else if(buttonR2State==HIGH){
player=3;
Serial.print("Player:");
Serial.println("Scissors");
lcd.setCursor(0,0);
lcd.print(" ");
lcd.setCursor(0,1);
lcd.print(" ");
lcd.setCursor(0,1);
lcd.print("Scissors");
ai();
Player();
delay(1000);
}
}
void ai(){
if(aiMove >= 1 && aiMove <= 10){
delay(200);
Serial.print("AI:");
Serial.println("Paper");
lcd.setCursor(0,0);
lcd.print("Paper ");
}
else if(aiMove >= 21 && aiMove <= 30){
delay(200);
Serial.print("AI:");
Serial.println("Rock");
lcd.setCursor(0,0);
lcd.print("Rock ");
}
else if(aiMove >= 11 && aiMove <= 20){
delay(200);
Serial.print("AI:");
Serial.println("Scissors");
lcd.setCursor(0,0);
lcd.print("Scissors");
}
}
void Player(){
if(player==1){
if(aiMove >= 11 && aiMove <= 20){
Serial.println("Loss");
lcd.setCursor(12,1);
lcd.print("Loss");
lcd.setCursor(12,0);
lcd.print(" ");
score=0;
}
else if(aiMove >= 21 && aiMove <= 30){
Serial.println("Win");
lcd.setCursor(12,1);
lcd.print("Win ");
score+=1;
}
else if(aiMove >= 1 && aiMove <= 10){
Serial.println("Draw");
lcd.setCursor(12,1);
lcd.print("Draw");
}
}
else if(player==2){
if(aiMove >= 11 && aiMove <= 20){
Serial.println("Win");
lcd.setCursor(12,1);
lcd.print("Win ");
score+=1;
}
else if(aiMove >= 21 && aiMove <= 30){
Serial.println("Draw");
lcd.setCursor(12,1);
lcd.print("Draw");
}
else if(aiMove >= 1 && aiMove <= 10){
Serial.println("Loss");
lcd.setCursor(12,1);
lcd.print("Loss");
lcd.setCursor(12,0);
lcd.print(" ");
score=0;
}
}
else if(player==3){
if(aiMove >= 11 && aiMove <= 20){
Serial.println("Draw");
lcd.setCursor(12,1);
lcd.print("Draw");
}
else if(aiMove >= 21 && aiMove <= 30){
Serial.println("Loss");
lcd.setCursor(12,1);
lcd.print("Loss");
lcd.setCursor(12,0);
lcd.print(" ");
score=0;
}
else if(aiMove >= 1 && aiMove <= 10){
Serial.println("Win");
lcd.setCursor(12,1);
lcd.print("Win ");
score+=1;
}
}
needNewMove=true;
if (score > highScore) {
highScore = score;
}
}