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;
}
O programa principal que faz o chamamento a todas as funções do Slot.cpp.
game.cpp:
#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.