Manual técnico
-
Upload
eduardo-sanchez-pina -
Category
Documents
-
view
68 -
download
0
Transcript of 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
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
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.
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 𝑓(𝑥) = 𝑦 = (𝑑 − (𝑏/𝑐))
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
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
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
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
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.
ENTORNO IMPLEMENTACION LAZARUS
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;
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;
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);
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.
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.