Vous êtes sur la page 1sur 12

ELE038: Projeto Assistido por Computador

Terceiro trabalho

Esdras Vitor Silva Pinto

Professor: Renato Cardoso Mesquita

Data: 11-12-2015
I. Introdução

Neste terceiro trabalho prático são implementados recursos adicionais à versão original do jogo

bearwhack. Um destes recursos é um menu na tela inicial, que permite ao usuário iniciar o jogo ou

escolher um nível de dificuldade. Os demais recursos estão relacionados com a implementação de quatro

níveis de dificuldades, os quais envolvem diferentes níveis jogabilidade.

II. Implementação de um menu na tela de abertura do jogo.

Para permitir ao usuário a flexibilidade de escolher um nível de dificuldade, foi criado um menu

na tela de abertura para esta finalidade, o qual é ilustrado na figura abaixo.

Figure 1: Tela de abertura do jogo

O código responsável por gerar este menu inicial é mostrado a seguir.

//Botão para iniciar o jogo.


Rectangle {
id: start_button
x: 85
y: 250
width: 150; height: 50; color: "lightblue"

// Texto do botão para iniciar o jogo.


Text {
id: start_button_text
anchors.horizontalCenter: parent.horizontalCenter
anchors.verticalCenter: parent.verticalCenter
text: "Iniciar \r\n Jogo"; font.pixelSize: 20
color: "blue"
}

MouseArea{
anchors.fill: parent
id: ma_start_button
onPressedChanged: {
if (pressed) {
parent.color = "lightgreen";
}
else if(released && containsMouse)
{
timer_load_game_screen.restart();
}
else if(released)
{
parent.color = "lightblue";
}
}
}

Timer {
id: timer_load_game_screen
interval: 100
running: false
repeat: false
onTriggered: {
start_button.color = "lightblue";
start_button.visible = false;
diffLevel_button.visible = false;
startScreen.visible = false;
particleSystem.running = true;
}
}
}

// Botão para seleção do nível de dificuldade.


Rectangle {
id: diffLevel_button
x: 85
y: 320
width: 150; height: 50; color: "lightblue"

// Texto do botão para seleção do nível de dificuldade.


Text {
id: diffLevel_button_text
anchors.horizontalCenter: parent.horizontalCenter
anchors.verticalCenter: parent.verticalCenter
text: "Nivel de \r\ndificuldade"; font.pixelSize: 20
color: "blue"
}

MouseArea{
anchors.fill: parent
id: ma_diffLevel_button
onPressedChanged: {
if (pressed) {
parent.color = "lightgreen";
}
else if(released && containsMouse)
{
timer_load_diffLevel_screen.restart();
}
else if(released)
{
parent.color = "lightblue";
}
}
}
Timer {
id: timer_load_diffLevel_screen
interval: 100
running: false
repeat: false
onTriggered: {
diffLevel_button.color = "lightblue"
start_button.visible = false;
diffLevel_button.visible = false;
diffLevel_text.visible = true;
diffLevel_1_button.visible = true;
diffLevel_2_button.visible = true;
diffLevel_3_button.visible = true;
diffLevel_4_button.visible = true;
}
}
}

A tela do menu de seleção do nível de dificuldade é mostrada na figura abaixo.

Figure 2: Menu de seleção de nível de dificuldade

O código responsável por gerar a opção "1" é mostrado na sequência.

// Botão para seleção do nível de dificuldade 1.


Rectangle {
id: diffLevel_1_button
x: 20 + 10
y: 290
width: 50; height: 50; color: "lightblue"
visible: false

// Texto do botão do nível de dificuldade 1.


Text {
id: diffLevel_1_button_text
anchors.horizontalCenter: parent.horizontalCenter
anchors.verticalCenter: parent.verticalCenter
text: "1"; font.pixelSize: 20
color: "blue"
}

MouseArea{
anchors.fill: parent
id: ma_diffLevel_1_button
onPressedChanged: {
if (pressed) {
parent.color = "lightgreen";
}
else if(released && containsMouse)
{
timer_load_main_screen.restart();
nivelDificuldade = 1;
velocity_with_umbrella.enabled = true;
sgoal_floating_wo_umbrella.enabled = false;
}
else if(released)
{
parent.color = "lightblue";
}
}
}
}

Os códigos dos demais botões são similares ao mostrado acima.

A. Nível de dificuldade 1

No nível de dificuldade 1, o urso pode apresentar três estados: flutuando sem sombrinha,

flutuando com sombrinha ou caindo. Estes estados são ilustrados abaixo.


Figure 3: Estados possíveis para o urso no nível 1

Todos os ursos iniciam-se no estado flutuando sem sombrinha. Assim que eles atingem

aproximadamente a metade da tela, eles abrem suas sombrinhas, reduzindo assim suas respectivas

velocidades. Para realizar o efeito de abertura da sombrinha dos ursos, foi criado um novo SpriteGoal, o

qual é mostrado a seguir.

SpriteGoal {
groups: "bears"
once: true
id: sgoal_bear_open_umbrella
y: parent.height - 250
width: parent.width
height: 250
system: particleSystem
parent: particleSystem
goalState: "floating"
enabled: true
}

O SpriteGoal mostrado acima é ativado quando a coordenada y das posições dos ursos é maior do

que parent.height - 250, o que equivale aproximadamente à metade da tela do jogo.


Para reduzir a velocidade dos ursos no momento da abertura de suas sombrinhas, utilizou-se o

recurso Friction. Este recurso é utilizado para reduzir velocidades de partículas. O código QML

responsável por configurar um Friction para reduzir a velocidade dos ursos é mostrado a seguir.

Friction {
id: velocity_with_umbrella
once: true
y: parent.height - 220
width: parent.width
height: 220
system: particleSystem
parent: particleSystem
groups: "bears"
enabled: true
factor: 0.5
}

A figura a seguir mostra um frame do jogo no nível 1. Os ursos na parte de cima da tela ainda não

abriram suas sombrinhas, e portanto, possuem maior velocidade. Por outro lado, os ursos na parte inferior

da tela já realizaram a abertura de suas sombrinhas, e assim, deslocam-se com menos velocidade.

Figure 4: Um frame do jogo no nível 1


Adicionalmente, caso o urso seja selecionado no estado flutuando sem sombrinha, ele

simplesmente desaparecerá após uma breve explosão, ou seja, ele não passará para o estado caindo. Esta

situação é ilustrado abaixo.

Figure 5: Frame do jogo no nível 1 ilustrando o que acontece quando um urso no estado flutuando sem sombrinha (dentro
do círculo verde) é selecionado.

B. Nível de dificuldade 2

No nível de dificuldade 1, apenas o clique ou tap causam efeitos nos ursos. No nível 2, o

deslizamento do mouse ou do dedo também alteram o estado dos ursos. É importante notar que o nível 2

não possui o estado extra do urso presente no nível 1.

Para que o jogo também responda ao deslizar do mouse ou do dedo, alterou-se o tempo entre

monitoramente das posições do mouse e do touchscreen de modo que a janela de seleção seja mais ampla,

permitindo assim que o jogo responda também a estes movimentos.

A figura a seguir mostra um frame do jogo no nível 2, onde um movimento de deslizamento do

mouse foi executado (representado pela linha verde na figura). Note que todos os ursos ao longo do

deslizamento foram afetados.


Figure 6: Um frame do jogo no nível 2

B. Nível de dificuldade 3

No nível de dificuldade 3, foi implementado uma bomba para interagir com os ursos. Utilizou-se

o recurso Emitter para emitir as bombas, conforme mostra o código abaixo.

Emitter {
id: bombEmitter
width: parent.width - 15
enabled: false
maximumEmitted: 1
group: "bomb"
emitRate: 1
size: 75
endSize: 75
velocity: CumulativeDirection { AngleDirection {angleVariation: 180;
magnitudeVariation: 120;} PointDirection { y: 60 }}
lifeSpan: 4000
}

Para localizar a posição da bomba no momento onde ela é selecionada, utilizou-se o recurso

Affector, sendo seu código mostrado a seguir.

Affector
{
id: affector_bomb_location
enabled: false
x: ma.mouseX - 16
y: ma.mouseY - 16
width: 32
height: 32
system: particleSystem
parent: particleSystem
groups: "bomb"
onAffectParticles: {
affector_bomb.enabled = true;
for (var i=0;i<particles.length; i++)
{
particles[i].update = 1.0;
particles[i].t -= 1000.0;
particleSystem.bombExplosion(ma.mouseX,ma.mouseY);
}
}
}

O código a seguir é responsável por eliminar todos os ursos que se encontram no raio de alcance

da bomba no momento onde ela é estourada.

Affector
{
id: affector_bomb
enabled: false
x: ma.mouseX - 16
y: ma.mouseY - 16
width: 100
height: 100
system: particleSystem
parent: particleSystem
groups: "bears"
onAffectParticles: {
for (var i=0;i<particles.length; i++) {
score++;
}
bomb.enabled = true;
}
}

Age {
id: bomb
lifeLeft: 0
width: 200
height: 200
x: ma.mouseX - 100
y: ma.mouseY - 100
system: particleSystem
parent: particleSystem
groups: "bears"
enabled: false
}
A figura abaixo mostram um frame do jogo no nível 3 no qual possui uma bomba na tela.

Figure 7: Um frame do jogo no nível 3 ilustrando a presença de uma bomba

A próxima figura mostra a explosão gerada quando uma bomba é selecionada.

Figure 8: Um frame do jogo no nível 3 ilustrando a explosão gerada quando uma bomba é selecionada

C. Nível de dificuldade 4.

No nível 4 estão presentes todos os recursos discutidos anteriormente.

VI. Conclusão
Os recursos adicionados à versão original do jogo bearwhack, tais como um menu inicial e

diferentes níveis de jogabilidade, dão um incremento importante nas funcionalidades do jogo, tornando-o

mais versátil e interessante. Novos recursos ainda podem ser incorporados ao jogo, como por exemplo,

elementos que interagem com os ursos, para torna-lo ainda mais atraente.

Referências

[1] Documentação das classes do Qt: doc.qt.io/qt-5/

[2] Duvidas e sugestões sobre Qt: http://stackoverflow.com/questions/

Vous aimerez peut-être aussi