Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: mbed 4DGL-uLCD-SE PinDetect
Diff: farklegame.cpp
- Revision:
- 0:8ee41d0deef7
- Child:
- 1:3cd6e5938144
diff -r 000000000000 -r 8ee41d0deef7 farklegame.cpp
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/farklegame.cpp Tue Oct 26 05:10:36 2021 +0000
@@ -0,0 +1,214 @@
+#include "die.h"
+#include "farklegame.h"
+
+#include <string>
+
+
+using namespace std;
+
+//Constructors
+FarkleGame::FarkleGame(){
+ Die diceArray[6];
+ int diceValueArray[6];
+
+ int turnScore = 0;
+ int rollScore = 0;
+ int farkleCount = 0;
+}
+
+//Method
+void FarkleGame::displayIntro(uLCD_4DGL& scr, int nd){
+ scr.cls();
+ scr.printf("Shake\n");
+ scr.printf("Board\n");
+ scr.printf("------\n");
+ scr.printf("To\n");
+ scr.printf("Roll\n");
+ scr.printf("%d Dice", nd);
+}
+
+void FarkleGame::restart(){
+ turnScore = 0;
+ rollScore = 0;
+ farkleCount = 0;
+}
+
+void FarkleGame::rollDice(Speaker &speaker){
+ for(int i = 0; i < 6; i++){
+ diceArray[i].rollDie();
+ speaker.PlayNote(400.0,0.25,0.1);
+ }
+
+}
+
+void FarkleGame::displayDice(uLCD_4DGL& scr, int nd){
+ scr.cls();
+ scr.display_control(PORTRAIT);
+
+ for(int i = 0; i < nd; i++){
+ diceArray[i].displayDie(i+1, scr);
+ }
+
+}
+
+void FarkleGame::loadVals(int nd){
+ for(int i = 0; i < 6; i++){
+ diceValueArray[i] = 0;
+ }
+ for(int i = 0; i < nd; i++){
+ if(diceArray[i].getValue() == 1){
+ diceValueArray[0]++;
+ }else if(diceArray[i].getValue() == 2){
+ diceValueArray[1]++;
+ }else if(diceArray[i].getValue() == 3){
+ diceValueArray[2]++;
+ }else if(diceArray[i].getValue() == 4){
+ diceValueArray[3]++;
+ }else if(diceArray[i].getValue() == 5){
+ diceValueArray[4]++;
+ }else if(diceArray[i].getValue() == 6){
+ diceValueArray[5]++;
+ }
+ }
+}
+
+int FarkleGame::calculateRoll(){
+ for(int i = 0; i < 6; i++){
+ if(diceValueArray[i] == 6){
+ return 3000;
+ }
+ }
+
+ int tripleCount = 0;
+ for(int i = 0; i < 6; i++){
+ if(diceValueArray[i] == 3) {
+ tripleCount++;
+ }
+ }
+ if(tripleCount == 2){
+ return 2500;
+ }
+
+ //check for 5
+ for(int i = 0; i < 6; i++){
+ if(diceValueArray[i] == 5){
+ return 2000;
+ }
+ }
+
+ //check for 123456
+ int diversityCount = 0;
+ for(int i = 0; i < 6; i++){
+ if(diceValueArray[i] == 1) {
+ diversityCount++;
+ }
+ }
+ if(diversityCount == 6){
+ return 1500;
+ }
+
+ //check for 3doubs
+ int doubleCount = 0;
+ for(int i = 0; i < 6; i++){
+ if(diceValueArray[i] == 2) {
+ doubleCount++;
+ }
+ }
+ if(doubleCount == 3){
+ return 1500;
+ }
+
+ //check for 4
+ for(int i = 0; i < 6; i++){
+ if(diceValueArray[i] == 4){
+ return 1000;
+ }
+ }
+
+ //check trips
+ if(tripleCount == 1){
+ if(diceValueArray[0] == 3){
+ return 1000;
+ }else if(diceValueArray[5] == 3){
+ return 600;
+ }
+ else if(diceValueArray[4] == 3){
+ return 500;
+ }else if(diceValueArray[3] == 3){
+ return 400;
+ }else if(diceValueArray[2] == 3){
+ return 300;
+ }else if(diceValueArray[1] == 3){
+ return 200;
+ }
+ }
+
+ //check 1
+ if(diceValueArray[0] != 0){
+ return 100;
+ }
+
+ //check 5
+ if(diceValueArray[4] != 0){
+ return 50;
+ }
+
+ farkleCount = farkleCount + 1;
+
+ return 0;
+}
+
+void FarkleGame::changeScore(){
+ rollScore = calculateRoll();
+ turnScore += rollScore;
+ if(farkleCount > 0){
+ turnScore = 0;
+ }
+}
+
+void FarkleGame::displayFarkle(uLCD_4DGL& screen){
+ screen.text_width(2);
+ screen.text_height(2);
+ screen.locate(0,6);
+ screen.printf("FARKLE!");
+}
+
+void FarkleGame::displayScore(uLCD_4DGL& screen){
+ screen.text_width(1);
+ screen.text_height(1);
+ screen.locate(0,11);
+ screen.printf("\nThis Turn: %d\n", turnScore);
+ screen.printf("\nThis Roll: %d\n", rollScore);
+}
+
+void FarkleGame::displayTurnScore(uLCD_4DGL& screen){
+ screen.cls();
+ screen.text_width(2);
+ screen.text_height(2);
+ screen.locate(0,15);
+ screen.printf("Turn\n");
+ screen.printf("Score\n");
+ screen.printf("-----\n");
+ screen.printf("%d\n", turnScore);
+}
+
+bool FarkleGame::enoughGravity(MMA8452& acc){
+ double x = 0;
+ double y = 0;
+ double z = 0;
+
+ acc.readXYZGravity(&x,&y,&z);
+
+ return (x + y > 1.1);
+}
+
+//S&G
+void FarkleGame::setDiceValue(int pos, int v){
+ diceArray[pos-1].setValue(v);
+}
+
+int FarkleGame::getDiceValue(int pos){
+ return diceArray[pos-1].getValue();
+}
+
+
\ No newline at end of file