Daniel Lapa – Blog de Programação

Dezembro 11, 2008

Slot Machine – Abordagem em C++ segundo o paradigma ADT

Arquivado em: jogos c++, programação — daniellapa @ 8:52 pm

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.

Uma Slot Machine real

A minha Slot Machine

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.

Blog em WordPress.com.