manual técnico

15
Teléfono: 722 4602 78 E-mail: isw @gmail.com Dirección: Dirección: Ernesto Monroy C. #250, Col. S an Miguel Totoltepec, Toluca Edo. De México. C.P 50220 TeraBit Los programadores del mañana son los magos del futuro.PROGRAMA Juego de Estrategia 07 de abril de 2015 MANUAL TÉCNICO Neria Sánchez Daniel Chávez Varela Emmanuel Jonathan Torres Engrande Saúl Sánchez Piña Eduardo

Upload: eduardo-sanchez-pina

Post on 21-Jul-2015

67 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Manual técnico

Teléfono: 722 4602 78

E-mail: isw @gmail.com

Dirección: Dirección: Ernesto Monroy C. #250, Col. San Miguel Totoltepec, Toluca Edo. De México. C.P 50220

TeraBit

“Los programadores del mañana son los

magos del futuro.”

PROGRAMA Juego de Estrategia

07 de abril de 2015

MANUAL TÉCNICO

Neria Sánchez Daniel Chávez Varela Emmanuel Jonathan

Torres Engrande Saúl Sánchez Piña Eduardo

Page 2: Manual técnico

ESPECIFICACIÓN DE PROYECTO

Deberán desarrollar un juego llamado “JUEGO DE ESTRATEGIA” que consiste en que un barco hace un disparo que sigue una trayectoria dada por la ecuación

𝑓(𝑥) = 𝑥𝑡𝑎𝑛(∝) −𝑔 ∗ 𝑥2

2𝑣2cos2(∝)

En donde ∝ es el ángulo del disparo y v es la velocidad del disparo

El programa deberá presentar una interfaz capaz de recibir los valores del ángulo en grados y de la velocidad en km/s.

Figura 1.

También deberá mostrar dos botones para colocar un objetivo moviéndolo a la izquierda o a la derecha según se quiera.

Con un tercer botón, se indicará al programa que realice el disparo, y entonces se mostrará el movimiento del

disparo y se esperará para ver si cae sobre el objetivo. En caso de dar en el objetivo, éste cambiará el color de su

Page 3: Manual técnico

borde y se dibujará una x dentro del mismo. Si el disparo no da en el objetivo, no cambiará de color y se tendrá la oportunidad de estar modificando los valores del ángulo y la velocidad para reintentar el disparo.

Adjunto encontrarán el archivo con la imagen que deben usar de fondo para el programa. El disparo deberá ser simulado con un círculo cuyo centro es un punto sobre la parábola de la trayectoria, y su radio es 5 px.

El objetivo será representado por un rectángulo de 20 x 8 px. colocado en el extremo derecho de la imagen y al mismo nivel del barco que dispara.

Page 4: Manual técnico

Definición del problema

En la materia de graficación que cursan actualmente los alumnos de 9 semestre de la carrera de Ingeniería en

Computación, requieren desarrollar un juego de estrategia que es propuesto para desarrollar como proyecto de evaluación de primer parcial.

Análisis y propuesta de solución

Dicho juego de estrategia deberá satisfacer la implementación de la ecuación proporcionada para desarrollar el

proyecto la propuesta de solución de la empresa TeraBit para aplicar la ecuación es descomponer la ecuación

con fines de simplicidad, es decir, haciendo usando entidades trigonométricas para remplazar a la función tangente. La división que se presenta en la ecuación podemos también descomponerlo. Realizando lo siguiente:

Antes que nada es necesario transformar el Angulo a coordenadas polares para poder hacer uso de las funciones

trigonométricas que vamos a aplicar en la función a graficar. Que esto sería multiplicando el valor del Angulo por 3.1426 y todo esto dividido por 180. Con la ecuación:

𝑓(𝑥) = 𝑥𝑡𝑎𝑛(∝) −𝑔 ∗ 𝑥2

2𝑣2cos2(∝)

Sabemos que: existe la constante 𝑔 = 9.81 que es la gravedad además conocemos que 𝑡𝑎𝑛(∝)=𝑠𝑒𝑛(∝)

cos(∝)

entonces podemos decir que:

𝒅 = (𝑥) ∙𝑠𝑒𝑛(∝)

cos(∝); 𝒃 = 𝑔 ∗ 𝑥2; 𝒄 = 2𝑣2 cos2(∝)

Por lo tanto 𝑓(𝑥) = 𝑦 = (𝑑 − (𝑏/𝑐))

Page 5: Manual técnico

Análisis en Pseudocódigo

En esta fase de desarrollo haremos uso de algunos procedimientos que se desarrollaron en la clase de

Graficación, como lo es convertirxy el cual hace que nos ubiquemos en el espacio geométrico para poder representar los valores que obtendremos de la función para poder graficarlo de manera correcta.

Además de cargar la imagen que se nos proporciona para hacer la representación que se pide, asi como también dibujar el objetivo y el movimiento del disparo.

Programa parcial1;

Variables:

px,py,px1,py1,y,a2,aneg,v,x,xorigen,yorigen,xconv,yconv: ENTTERO

g,d,b,c,e:REAL

a:EXTENDIDO

COMIENZA

PROCEDIMIENTO cargarimagen()

COMIENZA

CARGAR_IMAGEN('C:\Users\Eduardo\Documents\proyecto_parcial1\fondo.png')

TERMINA;

PROCEDIMIENTO objetivo()

COMIENZA

DIBUJA_RECTANGULO(px,py,px1,py1)

TERMINA

PROCEDIMIENTO objetivox()

COMIENZA

Page 6: Manual técnico

DIBUJAR_RECTANGULO(px,py,px1,py1)

DIBUJAR_LINEA(px,py,px1,py1)

DIBUJAR_LINEA(px,py1,px1,py)

TERMINA

PROCEDIMIENTO convertirxy (ox,oy,x:eNTERO; y: REAL; REFERENCIA xconv,yconv: ENTERO)

COMIENZA

xconv<--ox+x

yconv<--oy-y

TERMINA

PROCEDIMIENTO INICIALIZA

COMIENZA

px:=800

py:=535

px1:=800-10

py1:=535-10

g:=9.81

xorigen:=10

yorigen:=py

objetivo()

cargarimagen()

TERMINA

PROCEDIMIENTO OBTENER_GRADO

Page 7: Manual técnico

COMIENZA

a2<--VALOR_GRADO

TERMINA

PROCEDIMIENTO OBTENER_VELOCIDAD

COMIENZA

v<--VALOR_VELOCIDAD

TERMINA

PROCEDIMIENTO BOTON2

COMIENZA

px<--px-5

px1<--px1-5

objetivo()

cargarimagen()

TEMINAR

PROCEDIMIENTO BOTON3

COMIENZA

px<--px+5

px1<--px1+5

objetivo()

cargarimagen()

TERMINA

Page 8: Manual técnico

PROCEDIMIENTO BOTON1

COMIENZA

TEMPORIZADOR=HABILITADO

TERMINA

PROCEDIMIENTO detenertimer()

COMIENZA

TEMPORIZADOR=DESHABILITADO

x:=0

TERMINA

PROCEDIMIENTO TEMPORIZADOR

Vriables:

y:REAL;

COMIENZA

Incrementar x

a<--(3.1416*a2)/180

d<--(x*(sen(a)/cos(a)))

b<--(g*(x*x))

c<--((2*(v*v))*(cos(a)*cos(a)))

y<--(d-(b/c))

convertirxy(xorigen,yorigen,x,y,xconv,yconv)

DIBUJAR_ELIPSE(xconv,yconv,xconv-5,yconv-5)

DIUJAR_RECTANGULO(px,py,px1,py1)

SI (xconv>=855) ENTONCES

Page 9: Manual técnico

COMIENZA

detenertimer()

cargarimagen()

TERMINA

SINO_SI (yconv>=537) ENTONCES

COMIENZA

detenertimer()

cargarimagen()

TERMINA

SINO_SI(xconv>=px-2)ENTONCES

COMIENZA

SI (xconv<=px) ENTONCES

COMIENZA

SI (yconv>=531) ENTONCES

COMIENZA

SI (yconv<=535) ENTONCES

COMIENZA

detenertimer()

objetivox()

TERMINA

TERMINA

TEMINA

TERMINA

TERMINA

TERMINA.

Page 10: Manual técnico

ENTORNO IMPLEMENTACION LAZARUS

Page 11: Manual técnico

CODIFICACIÓN

unit unit1parcial1; {$mode objfpc}{$H+} interface uses Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, ExtCtrls, StdCtrls, Menus, Spin, types; type { TForm1 } TForm1 = class(TForm) Button1: TButton; Button2: TButton; Button3: TButton; Image1: TImage; Label1: TLabel; Label2: TLabel; Label3: TLabel; Label4: TLabel; Label5: TLabel; SpinEdit1: TSpinEdit; SpinEdit2: TSpinEdit; Timer1: TTimer; procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); procedure Button3Click(Sender: TObject); procedure FormCreate(Sender: TObject); procedure SpinEdit1Change(Sender: TObject); procedure SpinEdit2Change(Sender: TObject); procedure Timer1Timer(Sender: TObject); private { private declarations } public { public declarations } end;

Page 12: Manual técnico

var Form1: TForm1; px,py,px1,py1,y,a2,aneg,v,x,xorigen,yorigen,xconv,yconv:Integer; g,d,b,c,e:Real; a:extended; implementation {$R *.lfm} procedure cargarimagen(); begin

Form1.Image1.picture.LoadFromFile('C:\Users\Eduardo\Documents\proyecto_parcial1\fondo.png'); end; procedure objetivo(); begin

Form1.Image1.Canvas.Brush.Color:=clRed; Form1.Image1.Canvas.Rectangle(px,py,px1,py1);

end; procedure objetivox(); begin Form1.Image1.Canvas.Brush.Color:=clRed; Form1.Image1.Canvas.Rectangle(px,py,px1,py1); Form1.Image1.Canvas.Line(px,py,px1,py1); Form1.Image1.Canvas.Line(px,py1,px1,py); end; procedure convertirxy (ox,oy,x:Integer; y: Real; var xconv,yconv: Integer); begin xconv:=round(ox+x); yconv:=round(oy-y); end; procedure TForm1.FormCreate(Sender: TObject); begin px:=800; py:=535; px1:=800-10; py1:=535-10; g:=9.81; xorigen:=10;

Page 13: Manual técnico

yorigen:=py; objetivo(); cargarimagen(); end; procedure TForm1.SpinEdit1Change(Sender: TObject); begin a2:=SpinEdit1.Value; end; procedure TForm1.SpinEdit2Change(Sender: TObject); begin v:=SpinEdit2.Value; end; procedure TForm1.Button2Click(Sender: TObject); begin px:=px-5; px1:=px1-5; objetivo(); cargarimagen(); end; procedure TForm1.Button3Click(Sender: TObject); begin px:=px+5; px1:=px1+5; objetivo(); cargarimagen(); end; procedure TForm1.Button1Click(Sender: TObject); begin Timer1.Enabled:=true; end; procedure detenertimer(); begin form1.Timer1.Enabled:=false; x:=0; end; procedure TForm1.Timer1Timer(Sender: TObject);

Page 14: Manual técnico

var y:Real; begin Form1.Image1.Canvas.Brush.Color:=clBlack; inc(x); a:=(3.1416*a2)/180; d:=trunc(x*(sin(a)/cos(a))); b:=trunc(g*(sqr(x))); c:=trunc((2*(sqr(v)))*(cos(sqr(a)))); y:=trunc(d-(b/c)); //y:=e; convertirxy(xorigen,yorigen,x,y,xconv,yconv); Form1.Image1.Canvas.Ellipse(xconv,yconv,xconv-5,yconv-5); Form1.Image1.Canvas.Brush.Color:=clRed; Form1.Image1.Canvas.Rectangle(px,py,px1,py1); if (xconv>=855) then begin detenertimer(); cargarimagen(); end else if (yconv>=537) then begin detenertimer(); cargarimagen(); end else if (xconv>=px-2) then begin if (xconv<=px) then begin if (yconv>=531) then begin if (yconv<=535) then begin detenertimer(); //cargarimagen(); objetivox(); end; end; end; end; end; end.

Page 15: Manual técnico

EJECUCIÓN

En la ejecución del programa se demuestra que con un Angulo de 40 grados y una de velocidad de 72 Km/h el disparo es efectivo hacia el objetivo.