Nas últimas aulas de p.s.i estivemos a realizar uma ficha de trabalho na qual consistia criar um objecto segundo o paradigma de programação ADT.
Eu decidi criar uma slot machine.
Esta minha slot machine é um autêntico jogo de sorte, o qual consiste em acertar em vários tipos de combinações para ganhar créditos, que nos permitem continuar a jogar.
Que operações se podem realizar com este objecto?
- Gera um número aleatório para cada slot da slot machine.
- Mostra a slot machine.
- Verifica os créditos que temos e ao mesmo tempo verifica as combinações na mesma função.
O nome que vou definir à minha classe é Slot.
Classe :
Slot.h
#include <cstdlib> #ifndef SLOT_H #define SLOT_H class Slot{ public: Slot(); void PullTheLever(); void ShowSlotMachine(); void PlayTheGame(); //prémios bool Jackpot(); // acertar em todas as slots bool DuasDiagonais(); // acertar em duas diagonais bool DuasVertical(); // acertar em duas verticais bool DuasHorizontal(); // acertar em duas horizontais bool HV(); // acertar numa horizontal e numa vertical bool DuasHV(); // acertar em duas verticais e em duas horizontais bool DHV(); // acertar numa diagonal numa vertical e numa horizontal bool Diagonal(); // acertar numa diagonal bool Vertical(); // acertar numa vertical bool Horizontal(); // acertar numa horizontal private: int nslot[3][3]; }; #endif
Slot.cpp gera números aleatórios para cada slot, apresentando os valores obtidos através do desenho da slot machine e verifica os vários tipos de combinações possíveis:
Slot.cpp
#include <iostream> #include "Slot.h" using namespace std; Slot::Slot(){ PullTheLever(); } void Slot::PullTheLever(){ nslot[0][0] = rand()%9+1; nslot[0][1] = rand()%9+1; nslot[0][2] = rand()%9+1; nslot[1][0] = rand()%9+1; nslot[1][1] = rand()%9+1; nslot[1][2] = rand()%9+1; nslot[2][0] = rand()%9+1; nslot[2][1] = rand()%9+1; nslot[2][2] = rand()%9+1; } void Slot::ShowSlotMachine(){ cout<<"*******************************"<<endl; cout<<"**** SLOT MACHINE ****"<<endl; cout<<"*******************************"<<endl; cout<<"*** ***** ***** ***"<<endl; cout<<"*** "<< nslot[0][0]<<" ***** "<<nslot[0][1]<<" ***** "<<nslot[0][2]<<" ***"<<endl; cout<<"*** ***** ***** ***"<<endl; cout<<"*******************************"<<endl; cout<<"*** ***** ***** ***"<<endl; cout<<"*** "<<nslot[1][0]<<" ***** "<<nslot[1][1]<<" ***** "<<nslot[1][2]<<" ***"<<endl; cout<<"*** ***** ***** ***"<<endl; cout<<"*******************************"<<endl; cout<<"*** ***** ***** ***"<<endl; cout<<"*** "<<nslot[2][0]<<" ***** "<<nslot[2][1]<<" ***** "<<nslot[2][2]<<" ***"<<endl; cout<<"*** ***** ***** ***"<<endl; cout<<"*******************************"<<endl; cout<<"*******************************"<<endl; }; bool Slot::Jackpot(){ int padrao = nslot[0][0]; if(padrao==nslot[0][0] && padrao==nslot[0][1] && padrao==nslot[0][2] && padrao==nslot[1][0] && padrao==nslot[1][1] && padrao==nslot[1][2] && padrao==nslot[2][0] && padrao==nslot[2][1] && padrao==nslot[2][2]) return true; else return false; } bool Slot::DuasDiagonais(){ int padrao = nslot[0][0]; if(padrao==nslot[0][0] && padrao==nslot[1][1] && padrao==nslot[2][2] && padrao==nslot[0][2] && padrao==nslot[1][1] && padrao==nslot[2][0]) return true; else return false; } bool Slot::Vertical(){ if((nslot[0][0] == nslot[1][0] && nslot[0][0]==nslot[2][0]) || (nslot[0][1] == nslot[1][1] && nslot[0][1]==nslot[2][1]) || (nslot[0][2] == nslot[1][2] && nslot[0][2]==nslot[2][2])) return true; else return false; } bool Slot::Horizontal(){ if((nslot[0][0] == nslot[0][1] && nslot[0][0]==nslot[0][2]) || (nslot[1][0] == nslot[1][1] && nslot[1][0]==nslot[1][2]) || (nslot[2][0] == nslot[2][1] && nslot[2][0]==nslot[2][2])) return true; else return false; } bool Slot::Diagonal(){ if((nslot[0][0] == nslot[1][1] && nslot[0][0] == nslot[2][2]) || (nslot[0][2] == nslot[1][1] && nslot[0][2] == nslot[2][0])) return true; else return false; } bool Slot::DHV(){ if(((nslot[0][0] == nslot[0][1] && nslot[0][0]==nslot[0][2]) && (nslot[0][0] == nslot[1][0] && nslot[0][0]==nslot[2][0]) && (nslot[0][0] == nslot[1][1] && nslot[0][0] == nslot[2][2])) || ((nslot[0][0] == nslot[0][1] && nslot[0][0]==nslot[0][2]) && (nslot[0][0] == nslot[1][0] && nslot[0][0]==nslot[2][0]) && (nslot[0][2] == nslot[1][1] && nslot[0][2] == nslot[2][0])) || ((nslot[0][0] == nslot[0][1] && nslot[0][0]==nslot[0][2]) && (nslot[0][1] == nslot[1][1] && nslot[0][1]==nslot[2][1]) && (nslot[0][0] == nslot[1][1] && nslot[0][0] == nslot[2][2])) || ((nslot[0][0] == nslot[0][1] && nslot[0][0]==nslot[0][2]) && (nslot[0][1] == nslot[1][1] && nslot[0][1]==nslot[2][1]) && (nslot[0][2] == nslot[1][1] && nslot[0][2] == nslot[2][0])) || ((nslot[0][0] == nslot[0][1] && nslot[0][0]==nslot[0][2]) && (nslot[0][2] == nslot[1][2] && nslot[0][2]==nslot[2][2]) && (nslot[0][0] == nslot[1][1] && nslot[0][0] == nslot[2][2])) || ((nslot[0][0] == nslot[0][1] && nslot[0][0]==nslot[0][2]) && (nslot[0][2] == nslot[1][2] && nslot[0][2]==nslot[2][2]) && (nslot[0][2] == nslot[1][1] && nslot[0][2] == nslot[2][0])) || ((nslot[1][0] == nslot[1][1] && nslot[1][0]==nslot[1][2]) && (nslot[0][0] == nslot[1][0] && nslot[0][0]==nslot[2][0]) && (nslot[0][0] == nslot[1][1] && nslot[0][0] == nslot[2][2])) || ((nslot[1][0] == nslot[1][1] && nslot[1][0]==nslot[1][2]) && (nslot[0][0] == nslot[1][0] && nslot[0][0]==nslot[2][0]) && (nslot[0][2] == nslot[1][1] && nslot[0][2] == nslot[2][0])) || ((nslot[1][0] == nslot[1][1] && nslot[1][0]==nslot[1][2]) && (nslot[0][1] == nslot[1][1] && nslot[0][1]==nslot[2][1]) && (nslot[0][0] == nslot[1][1] && nslot[0][0] == nslot[2][2])) || ((nslot[1][0] == nslot[1][1] && nslot[1][0]==nslot[1][2]) && (nslot[0][1] == nslot[1][1] && nslot[0][1]==nslot[2][1]) && (nslot[0][2] == nslot[1][1] && nslot[0][2] == nslot[2][0])) || ((nslot[1][0] == nslot[1][1] && nslot[1][0]==nslot[1][2]) && (nslot[0][2] == nslot[1][2] && nslot[0][2]==nslot[2][2]) && (nslot[0][0] == nslot[1][1] && nslot[0][0] == nslot[2][2])) || ((nslot[1][0] == nslot[1][1] && nslot[1][0]==nslot[1][2]) && (nslot[0][2] == nslot[1][2] && nslot[0][2]==nslot[2][2]) && (nslot[0][2] == nslot[1][1] && nslot[0][2] == nslot[2][0])) || ((nslot[2][0] == nslot[2][1] && nslot[2][0]==nslot[2][2]) && (nslot[0][0] == nslot[1][0] && nslot[0][0]==nslot[2][0]) && (nslot[0][0] == nslot[1][1] && nslot[0][0] == nslot[2][2])) || ((nslot[2][0] == nslot[2][1] && nslot[2][0]==nslot[2][2]) && (nslot[0][0] == nslot[1][0] && nslot[0][0]==nslot[2][0]) && (nslot[0][2] == nslot[1][1] && nslot[0][2] == nslot[2][0])) || ((nslot[2][0] == nslot[2][1] && nslot[2][0]==nslot[2][2]) && (nslot[0][1] == nslot[1][1] && nslot[0][1]==nslot[2][1]) && (nslot[0][0] == nslot[1][1] && nslot[0][0] == nslot[2][2])) || ((nslot[2][0] == nslot[2][1] && nslot[2][0]==nslot[2][2]) && (nslot[0][1] == nslot[1][1] && nslot[0][1]==nslot[2][1]) && (nslot[0][2] == nslot[1][1] && nslot[0][2] == nslot[2][0])) || ((nslot[2][0] == nslot[2][1] && nslot[2][0]==nslot[2][2]) && (nslot[0][2] == nslot[1][2] && nslot[0][2]==nslot[2][2]) && (nslot[0][0] == nslot[1][1] && nslot[0][0] == nslot[2][2])) || ((nslot[2][0] == nslot[2][1] && nslot[2][0]==nslot[2][2]) && (nslot[0][2] == nslot[1][2] && nslot[0][2]==nslot[2][2]) && (nslot[0][2] == nslot[1][1] && nslot[0][2] == nslot[2][0]))) return true; else return false; } bool Slot::HV(){ if(((nslot[0][0] == nslot[0][1] && nslot[0][0]==nslot[0][2]) && (nslot[0][0] == nslot[1][0] && nslot[0][0]==nslot[2][0])) || ((nslot[0][0] == nslot[0][1] && nslot[0][0]==nslot[0][2]) && (nslot[0][1] == nslot[1][1] && nslot[0][1]==nslot[2][1])) || ((nslot[0][0] == nslot[0][1] && nslot[0][0]==nslot[0][2]) && (nslot[0][2] == nslot[1][2] && nslot[0][2]==nslot[2][2])) || ((nslot[1][0] == nslot[1][1] && nslot[1][0]==nslot[1][2]) && (nslot[0][0] == nslot[1][0] && nslot[0][0]==nslot[2][0])) || ((nslot[1][0] == nslot[1][1] && nslot[1][0]==nslot[1][2]) && (nslot[0][1] == nslot[1][1] && nslot[0][1]==nslot[2][1])) || ((nslot[1][0] == nslot[1][1] && nslot[1][0]==nslot[1][2]) && (nslot[0][2] == nslot[1][2] && nslot[0][2]==nslot[2][2])) || ((nslot[2][0] == nslot[2][1] && nslot[2][0]==nslot[2][2]) && (nslot[0][0] == nslot[1][0] && nslot[0][0]==nslot[2][0])) || ((nslot[2][0] == nslot[2][1] && nslot[2][0]==nslot[2][2]) && (nslot[0][1] == nslot[1][1] && nslot[0][1]==nslot[2][1])) || ((nslot[2][0] == nslot[2][1] && nslot[2][0]==nslot[2][2]) && (nslot[0][2] == nslot[1][2] && nslot[0][2]==nslot[2][2]))) return true; else return false; } bool Slot::DuasHorizontal(){ if(((nslot[0][0] == nslot[0][1] && nslot[0][0]==nslot[0][2]) && (nslot[1][0] == nslot[1][1] && nslot[1][0]==nslot[1][2])) || ((nslot[0][0] == nslot[0][1] && nslot[0][0]==nslot[0][2]) && (nslot[2][0] == nslot[2][1] && nslot[2][0]==nslot[2][2])) || ((nslot[1][0] == nslot[1][1] && nslot[1][0]==nslot[1][2]) && (nslot[2][0] == nslot[2][1] && nslot[2][0]==nslot[2][2]))) return true; else return false; } bool Slot::DuasVertical(){ if(((nslot[0][0] == nslot[1][0] && nslot[0][0]==nslot[2][0]) && (nslot[0][1] == nslot[1][1] && nslot[0][1]==nslot[2][1])) || ((nslot[0][0] == nslot[1][0] && nslot[0][0]==nslot[2][0]) && (nslot[0][2] == nslot[1][2] && nslot[0][2]==nslot[2][2])) || ((nslot[0][1] == nslot[1][1] && nslot[0][1]==nslot[2][1]) && (nslot[0][2] == nslot[1][2] && nslot[0][2]==nslot[2][2]))) return true; else return false; } bool Slot::DuasHV(){ if((((nslot[1][0] == nslot[1][1] && nslot[1][0]==nslot[1][2]) && (nslot[2][0] == nslot[2][1] && nslot[2][0]==nslot[2][2])) && ((nslot[0][0] == nslot[1][0] && nslot[0][0]==nslot[2][0]) && (nslot[0][1] == nslot[1][1] && nslot[0][1]==nslot[2][1]))) || (((nslot[1][0] == nslot[1][1] && nslot[1][0]==nslot[1][2]) && (nslot[2][0] == nslot[2][1] && nslot[2][0]==nslot[2][2])) && ((nslot[0][0] == nslot[1][0] && nslot[0][0]==nslot[2][0]) && (nslot[0][2] == nslot[1][2] && nslot[0][2]==nslot[2][2]))) || (((nslot[1][0] == nslot[1][1] && nslot[1][0]==nslot[1][2]) && (nslot[2][0] == nslot[2][1] && nslot[2][0]==nslot[2][2])) && ((nslot[0][1] == nslot[1][1] && nslot[0][1]==nslot[2][1]) && (nslot[0][2] == nslot[1][2] && nslot[0][2]==nslot[2][2]))) || (((nslot[0][0] == nslot[0][1] && nslot[0][0]==nslot[0][2]) && (nslot[2][0] == nslot[2][1] && nslot[2][0]==nslot[2][2])) && ((nslot[0][0] == nslot[1][0] && nslot[0][0]==nslot[2][0]) && (nslot[0][1] == nslot[1][1] && nslot[0][1]==nslot[2][1]))) || (((nslot[0][0] == nslot[0][1] && nslot[0][0]==nslot[0][2]) && (nslot[2][0] == nslot[2][1] && nslot[2][0]==nslot[2][2])) && ((nslot[0][0] == nslot[1][0] && nslot[0][0]==nslot[2][0]) && (nslot[0][2] == nslot[1][2] && nslot[0][2]==nslot[2][2]))) || (((nslot[0][0] == nslot[0][1] && nslot[0][0]==nslot[0][2]) && (nslot[2][0] == nslot[2][1] && nslot[2][0]==nslot[2][2])) && ((nslot[0][1] == nslot[1][1] && nslot[0][1]==nslot[2][1]) && (nslot[0][2] == nslot[1][2] && nslot[0][2]==nslot[2][2]))) || (((nslot[0][0] == nslot[0][1] && nslot[0][0]==nslot[0][2]) && (nslot[1][0] == nslot[1][1] && nslot[1][0]==nslot[1][2])) && ((nslot[0][0] == nslot[1][0] && nslot[0][0]==nslot[2][0]) && (nslot[0][1] == nslot[1][1] && nslot[0][1]==nslot[2][1]))) || (((nslot[0][0] == nslot[0][1] && nslot[0][0]==nslot[0][2]) && (nslot[1][0] == nslot[1][1] && nslot[1][0]==nslot[1][2])) && ((nslot[0][0] == nslot[1][0] && nslot[0][0]==nslot[2][0]) && (nslot[0][2] == nslot[1][2] && nslot[0][2]==nslot[2][2]))) || (((nslot[0][0] == nslot[0][1] && nslot[0][0]==nslot[0][2]) && (nslot[1][0] == nslot[1][1] && nslot[1][0]==nslot[1][2])) && ((nslot[0][1] == nslot[1][1] && nslot[0][1]==nslot[2][1]) && (nslot[0][2] == nslot[1][2] && nslot[0][2]==nslot[2][2])))) return true; else return false; } void menu(){ cout<<endl<<"PREMIOS:"<<endl; cout<<"Jackpot 20 creditos"<<endl, cout<<"Duas horizontais e duas verticais 12 creditos"<<endl, cout<<"Duas horizontais 6 creditos"<<endl; cout<<"Duas verticais 6 creditos"<<endl; cout<<"Duas diagonais 6 creditos"<<endl; cout<<"Uma horizontal uma vertical e uma diagonal 6 creditos"<<endl; cout<<"Uma horizontal uma vertical 4 creditos"<<endl; cout<<"Uma diagonal 3 creditos"<<endl; cout<<"Uma horizontal 3 creditos"<<endl; cout<<"Uma verticalal 3 creditos"<<endl<<endl; } void Slot::PlayTheGame(){ int credit=5; char op; menu(); cout<<"Voce tem "<<credit<<" Creditos."<<endl; cout<<"Quer jogar Opção (y/n): ";cin>>op; if(op == 'y'){ do{ PullTheLever(); ShowSlotMachine(); if(Jackpot()){ cout << "Ganhou o Jackpot" << endl; credit=credit+20; } else if(DuasHV()){ cout << "Ganhou o duas horrizontal e duas Vertical" << endl; credit=credit+12; } else if(DuasHorizontal()){ cout << "Ganhou o DuasHorizontal" << endl; credit=credit+6; } else if(DuasVertical()){ cout << "Ganhou o DuasVertical" << endl; credit=credit+6; } else if(DuasDiagonais()){ cout << "Ganhou o Duas Diagonais" << endl; credit=credit+6; } else if(DHV()){ cout << "Ganhou o uma horrizontal e uma Vertical e diagonal" << endl; credit=credit+6; } else if(HV()){ cout << "Ganhou o uma horrizontal e uma Vertical" << endl; credit=credit+4; } else if(Diagonal()){ cout << "Ganhou o Diagonal" << endl; credit=credit+3; } else if(Horizontal()){ cout << "Ganhou o Horizontal" << endl; credit=credit+3; } else if(Vertical()){ cout << "Ganhou o Vertical" << endl; credit=credit+3; } else cout <<"Não ganhou !!!" <<endl; credit --; cout<<"Creditos: "<<credit<<endl; cout<<"Opção (y/n): ";cin>>op; }while((credit > 0) && (op == 'y')); } if(op == 'n') cout<<"Ganhou "<<credit<<" Creditos."<<endl; if(credit==0) cout<<"Não tem mais creditos"<<endl; } [/sourcecode] <p style="margin-bottom:0;">O programa principal que faz o chamamento a todas as funções do <strong>Slot.cpp</strong>.</p> <p style="margin-bottom:0;"><strong>game.cpp</strong>:</p> #include <iostream> #include <cstdlib> #include <ctime> #include "Slot.h" using namespace std; int main(){ srand(time(0)); Slot Machine01; Machine01.PlayTheGame(); }
Aqui fica a minha slot machine, um dia mais tarde talvez a volte a criar com um melhor design.