martes, 19 de octubre de 2010

Tipos de lenguaje de programación.

Lenguaje máquina:
00000 1001110 LOAD 11110
00001 10110100 STOR 10100
00010 10011110 LOAD 11110
00011 11010100 ADD 10100
00100 10111111 STOR 11111
00101 00000000 HALT

Ensamblador:
C:


#include <stdio.h>

main()
{
 /* Escribe un mensaje */

 printf (“Hola, mundo\n”);
}
Pascal:
program Serpiente2;
(*******************************************
 * Por Victor Barbero Romero - Oct. 2.001   *
 * vbarbero@movistar.com o @telefonica.net  *
 *                                          *
 *******************************************) {v2.0e}
uses crt, Graph;
const
   DLY = 2;
   {Cambiar este valor para hacer el juego más lento.}
type
   Puntuaci = record
   name : string[15];
   punt : integer;
       end;
var
   MaxPtosPar, PtosPar, PtosTot : integer;
   PosX, PosY, BolaX, BolaY, IncrmX, IncrmY : shortint;
   Lab, c, NumArray, Rtraso : shortint;
   datmem, mejora, basta, Sonido, definal : boolean;
   ColaX, ColaY : array[1..40] of shortint;
   Laberinto : array[1..1850] of boolean;
   marca : array[1..6] of Puntuaci;
   P : file of Puntuaci;
   TipoMov : char;
 
procedure IniciaVideo;
var
   Driver, Modo : smallint;
begin
   Driver := VGA;  { Modo := VGAHi; }
   Modo := G640x480x256; { Cambiado debido a problemas con algunas resoluciones gráficas }
   InitGraph(Driver,Modo,'.BGI');
end;
 
procedure AbreVentana(PX, PY, Anch, Alto : integer; Titulo : string);
var
   contaX, differ, alter, tlitb : integer;
   tapavent : array[1..12] of integer;
begin
   alter := PX + Anch - (Anch div 5);
   tlitb := alter + 20;
   differ := PX - PY;
 
   tapavent[1] := PX; tapavent[2] := PY;
   tapavent[3] := PX; tapavent[4] := PY+Alto;
   tapavent[5] := PX+Anch; tapavent[6] := PY+Alto;
   tapavent[7] := PX+Anch; tapavent[8] := PY+(Anch div 5);
   tapavent[9] := alter; tapavent[10] := PY;
   tapavent[11] := PX; tapavent[12] := PY;
   setcolor(0); setfillstyle(1,0);
   fillpoly(6,tapavent);
 
   setcolor(7);
   line(PX-1, PY, alter, PY);
   line(PX-1, PY-1, alter, PY-1);
   for contaX := PX to PX+Anch do
   begin
      if contaX-differ < PY+Alto+1 then
      begin putpixel(PX, contaX-differ, 7);
  putpixel(PX-1, contaX-differ, 7); end;
      if contaX-differ < PY+Alto+1 then
      begin putpixel(alter, contaX-differ, 7);
  putpixel(alter+1, contaX-differ, 7); end;
      if alter < PX+Anch then alter := alter + 1;
      putpixel(contaX, PY+Alto, 7);
      putpixel(contaX-1, PY+Alto+1, 7);
      if contaX < tlitb then putpixel(contaX, PY+20, 7);
      Delay(4*DLY);
   end;
   putpixel(PX+Anch+1, PY+Alto+1, 7);
   putpixel(PX+Anch, PY+Alto+1, 7);
   setfillstyle(9,8);
   floodfill(PX+(Anch div 2), PY+3, 7);
   setfillstyle(10,8); floodfill(PX+(Anch div 2), PY+25, 7);
   setcolor(15);
   outtextxy(PX+12, PY+7, Titulo);
end;
 
procedure CreaFichero;
begin
   {$I-} rewrite(P); {$I+}
   for c := 1 to 6 do begin
      marca[c].name := '- - -';
      marca[c].punt := 0;
      seek(P,c); write(P,marca[c]);
   end;
end;
 
procedure ManejaFichero;
var
   report : integer;
begin
   assign(P,'srp2pnt.fps');
   {$I-} reset(P); {$I+}
   report := IOResult;
   if report <> 0 then begin CreaFichero; end else begin
      for c := 1 to 6 do begin
  seek(P,c); read(P, marca[c]);
      end; end; close(P);
   datmem := true;
end;
 
procedure GrabaPunts;
var
   reprt : integer;
begin
   assign(P,'srp2pnt.fps');
   {$I-} reset(P); {$I+}
   reprt := IOResult;
   if reprt <> 0 then begin CreaFichero; end else begin
      for c := 1 to 6 do begin
  seek(P,c); write(P, marca[c]);
      end; end;
   close(P);
end;
 
procedure MuestraPunts;
var
   puntos : string[5];
begin
   AbreVentana(150,140,300,250,'Mejores puntuaciones');
   if datmem = false then ManejaFichero;
   setcolor(7);
   outtextxy(175,185,'PUNTOS');
   outtextxy(300,185,'NOMBRE');
   line(160,198, 420,198); line(236,180, 236,380);
   setfillstyle(1,0); setcolor(0);
   for c := 1 to 6 do begin
      bar(165,175+(30*c), 225,190+(30*c));
      bar(250,175+(30*c), 410,190+(30*c));
      str(marca[c].punt, puntos);
      setcolor(11); outtextxy(175,180+(30*c), puntos);
      setcolor(9); outtextxy(260,180+(30*c), marca[c].name);
   end;
   readkey;
end;
 
procedure OrdenaPunts;     {Utiliza el Algoritmo Bubble Short}
var
   d : shortint;
   puntcambio : integer;
   namecambio : string[15];
begin
   for c:= 1 to 6 do
   begin
      for d := c+1 to 6 do
      begin
  if marca[d].punt > marca[c].punt then
  begin
     puntcambio := marca[c].punt;
     marca[c].punt := marca[d].punt;
     marca[d].punt := puntcambio;
     namecambio := marca[c].name;
     marca[c].name := marca[d].name;
     marca[d].name := namecambio;
  end;
      end;
   end;
end;
 
procedure CompruebaMejora;
var
   Nombre : string[15];
begin
   if datmem = false then begin ManejaFichero; end;
   for c:= 1 to 6 do begin
      if PtosTot > marca[c].punt then mejora := true;
   end;
   if mejora then begin
      AbreVentana(140,150,250,110,'­Enhorabuena!');
      setcolor(7);
      outtextxy(159,193,'­Ha superado un record!');
      if Sonido then begin
  Sound(293); Delay(193*DLY); NoSound; Delay(27*DLY);
  Sound(293); Delay(110*DLY); NoSound; Sound(293); Delay(110*DLY);
  Sound(440); Delay(330*DLY); Sound(293); Delay(110*DLY);
  Sound(440); Delay(440*DLY); NoSound; end;
      outtextxy(160,208,'Introduzca su nombre:');
      setfillstyle(1,0); setcolor(0);
      bar(160,223, 320,237); textcolor(9);
      gotoxy(22,15); readln(Nombre);
      marca[6].punt := PtosTot; marca[6].name := Nombre;
      OrdenaPunts; GrabaPunts;
   end;
   MuestraPunts;
end;
 
procedure CamSonido;
var SonSim : string[1];
begin
   SonSim := #14;
   if Sonido then begin
      setcolor(0); outtextxy(585,5,SonSim); Sonido := false; end
      else begin
  setcolor(2); outtextxy(585,5,SonSim); Sonido := true; end;
end;
 
procedure FinJuego;
begin
   cleardevice;
   AbreVentana(175,130,275,150,'FIN');
   setcolor(14); outtextxy(235,185,'S E R P I E N T E');
   setcolor(7); outtextxy(192,240,'Victor Barbero - Octubre 2.001');
   Delay(2000*DLY);
   basta := true; definal := true;
end;
 
procedure CambiaNivel;
var
   Nivel : shortint;
   c : char; nvl : string[1];
   procedure PintaCuad(num,tipo : shortint);
   begin
      if tipo = 1 then setfillstyle(1,9);
      if tipo = 0 then setfillstyle(4,9);
      str(num,nvl); bar(210+(30*num),210, 230+(30*num),230);
      if tipo = 1 then begin setcolor(11);
  outtextxy(215+(30*num), 220, nvl); end;
   end;
   procedure TeclaDerecha;
   begin
      if Nivel < 5 then
      begin
  PintaCuad(Nivel+1,1);
  Nivel := Nivel + 1;
      end; c := 'A';
   end;
   procedure TeclaIzquierda;
   begin
      if Nivel > 1 then
      begin
  PintaCuad(Nivel,0);
  Nivel := Nivel - 1;
      end; c := 'A';
   end;
begin
   AbreVentana(195,150,240,110,'Nivel'); setcolor(7);
   outtextxy(240,190,'Mayor dificultad'); outtextxy(375,190,#26);
   outtextxy(260,240,#27); outtextxy(350,240,#26);
   setcolor(1); rectangle(239,209, 261,231); rectangle(238,208, 262,232);
   rectangle(269,209, 291,231); rectangle(268,208, 292,232);
   rectangle(299,209, 321,231); rectangle(298,208, 322,232);
   rectangle(329,209, 351,231); rectangle(328,208, 352,232);
   rectangle(359,209, 381,231); rectangle(358,208, 382,232);
   PintaCuad(1,1); PintaCuad(2,1); PintaCuad(3,1);
   PintaCuad(4,0); PintaCuad(5,0); Nivel := 3;
   repeat
      if Keypressed then c := readkey;
      case c of
 #75 : TeclaIzquierda;
 #77 : TeclaDerecha;
      end;
   until c=#13;
   case Nivel of
     1 : begin MaxPtosPar := 9+Lab; Rtraso := 100; end;
     2 : begin MaxPtosPar := 14+Lab; Rtraso := 85; end;
     3 : begin MaxPtosPar := 19+Lab; Rtraso := 75; end;
     4 : begin MaxPtosPar := 24+Lab; Rtraso := 65; end;
     5 : begin MaxPtosPar := 39+Lab; Rtraso := 53; end;
   end;
   setfillstyle(1,0); bar(568,4, 578,13);
   setcolor(15); str(Nivel,nvl); outtextxy(569,5,nvl);
end;
 
procedure PintaLabs;
var
   x, y : shortint;
begin
   setfillstyle(11,6);
   for x := 1 to 50 do
   begin
      for y := 1 to 37 do
      begin
  if Laberinto[((y-1)*50)+x] = true then begin
     setcolor(12);
     rectangle(8+(x*12), 6+(y*12), 20+(x*12), 18+(y*12));
     setcolor(6);
     rectangle(9+(x*12), 7+(y*12), 19+(x*12), 17+(y*12));
     floodfill(14+(x*12), 12+(y*12), 6);
  end;
      end;
   end;
end;
 
procedure EligeLaberinto;
var cn : char;
   procedure BorraLabAnter;
   var P : integer;
   begin
      for P := 1 to 1850 do
      begin
  Laberinto[P] := false;
      end;
   end;
   procedure Lab2;
   var P : integer;
   begin
      for P := 601 to 626 do begin Laberinto[P] := true; end;
      for P := 1224 to 1250 do begin Laberinto[P] := true; end;
      for P := 438 to 450 do begin Laberinto[P] := true; end;
      for P := 1451 to 1463 do begin Laberinto[P] := true; end;
   end;
   procedure Lab3;
   var P : integer;
   begin
      P := 260;
      while P < 1610 do begin
  P := P + 50;
  Laberinto[P] := true;
  Laberinto[P+31] := true;
      end;
      for P := 901 to 911 do begin Laberinto[P] := true; end;
      for P := 990 to 1000 do begin Laberinto[P] := true; end;
   end;
   procedure Lab4;
   var P : integer;
   begin
      P := 20;
      while P < 756 do begin
  case P of
    265 :; 216 :; 167 :;
  else Laberinto[P] := true; end;
  P := P + 49;
      end; Laberinto[19] := true; Laberinto[18] := true;
      Laberinto[751] := true; Laberinto[754] := true;
      Laberinto[752] := true; Laberinto[753] := true;
      P := 1683;
      while P > 1028 do begin
  Laberinto[P] := true;
  P := P - 49;
      end; Laberinto[68] := true;
      Laberinto[1046] := true; Laberinto[1050] := true;
      Laberinto[1047] := true; Laberinto[1048] := true;
      Laberinto[1049] := true;
      P := 525;
      while P < 1000 do begin
  Laberinto[P] := true;
  Laberinto[P+245] := true;
  P := P + 51;
      end;
      for P := 1501 to 1513 do begin Laberinto[P] := true; end;
   end;
   procedure TAbajo;
   begin
      if Lab < 4 then begin
  setcolor(11); setfillstyle(1,11);
  bar(225,135+(20*(Lab+1)), 230,140+(20*(Lab+1)));
  bar(383,135+(20*(Lab+1)), 388,140+(20*(Lab+1)));
  cn := 'A'; Lab := Lab + 1; end;
   end;
   procedure TArriba; begin
      if Lab > 1 then begin
  setcolor(0); setfillstyle(1,0);
  bar(225,135+(20*Lab), 230,140+(20*Lab));
  bar(383,135+(20*Lab), 388,140+(20*Lab));
  cn := 'A'; Lab := Lab - 1; end;
   end;
begin
   AbreVentana(215,120,190,114,'Laberinto');
   setcolor(9);
   line(222,149, 232,149); line(221,149, 221,166);
   line(222,166, 232,166); line(391,149 ,381,149);
   line(392,149, 392,166); line(381,166, 391,166);
   line(222,169, 232,169); line(221,169, 221,186);
   line(222,186, 232,186); line(391,169 ,381,169);
   line(392,169, 392,186); line(381,186, 391,186);
   line(222,189, 232,189); line(221,189, 221,206);
   line(222,206, 232,206); line(391,189 ,381,189);
   line(392,189, 392,206); line(381,206, 391,206);
   line(222,209, 232,209); line(221,209, 221,226);
   line(222,226, 232,226); line(391,209 ,381,209);
   line(392,209, 392,226); line(381,226, 391,226);
   setfillstyle(1,0); setcolor(7);  Lab := 1;
   bar(223,150, 390,165); outtextxy(260,155,'Sin laberinto');
   bar(223,170, 390,185); outtextxy(260,175,'Laberinto 1');
   bar(223,190, 390,205); outtextxy(260,195,'Laberinto 2');
   bar(223,210, 390,225); outtextxy(260,215,'Laberinto 3');
   outtextxy(395,165,#24); outtextxy(395,204,#25);
   setcolor(11); setfillstyle(1,11);
   bar(225,155, 230,160); bar(383,155, 388,160);
   repeat
      if Keypressed then cn := readkey;
      case cn of
 #72 : TArriba;
 #80 : TAbajo;
      end;
   until cn=#13;
   BorraLabAnter;
   case Lab of 2 : Lab2; 3 : Lab3; 4 : Lab4; end;
end;
 
procedure BorraMenu;
begin
   setfillstyle(1,0); floodfill(320, 240, 12);
   setfillstyle(1,10);
   bar(14+(BolaX*12)-2, 12+(BolaY*12)-2, 14+(BolaX*12)+2, 12+(BolaY*12)+2);
   if definal = false then PintaLabs;
   setcolor(14);
end;
 
procedure Presentacion;
begin
   cleardevice;
   AbreVentana(130,100,380,190,'­Bienvenido!');
   setcolor(14); outtextxy(180,170,'S E R P I E N T E');
   setcolor(7); outtextxy(379,170,'v2.0');
   outtextxy(180,220,'Presione ESC durante el juego');
   outtextxy(235,240,'para entrar en el men£');
   outtextxy(155,268,'Pulse cualquier tecla para continuar');
   readkey;
end;
 
procedure Menu;
var
   c : char;
begin
   AbreVentana(180,125,250,180,'MENU');
   setcolor(7);
   outtextxy(200,180, '1.- Cambiar el nivel.');
   case Sonido of
     true : outtextxy(200,200, '2.- Desactivar sonido.');
     false : outtextxy(200,200, '2.- Activar sonido.');
   end;
   outtextxy(200,220, '3.- Volver al juego.');
   outtextxy(200,240, '4.- Salir del juego.');
   outtextxy(200,260, '5.- Ver las puntuaciones.');
   repeat
      if Keypressed then c := readkey;
   until ((c > #48) and (c < #54));
   case c of
     #49 : CambiaNivel;
     #50 : CamSonido;
     #52 : begin CompruebaMejora; FinJuego; end;
     #53 : MuestraPunts;
   end;
   BorraMenu;
end;
 
procedure IniciaCampo;
begin
   cleardevice;
   setcolor(12);
   rectangle(20,17,620,462);
   rectangle(19,18,621,463);
   rectangle(410,2,600,15);
   setfillstyle(6,4);
   floodfill(320,10,12);
   setcolor(7); outtextxy(415,5,'Puntos:');
   outtextxy(520,5,'Nivel:');
   for c := 1 to 30 do begin
      ColaX[c] := 0; ColaY[c] := 0; end;
   setcolor(14);
   rectangle(106,68, 114,76); ColaX[3] := 8; ColaY[3] := 5;
   rectangle(118,68, 126,76); ColaX[2] := 9; ColaY[2] := 5;
   rectangle(130,68, 138,76); ColaX[1] := 10; ColaY[1] := 5;
   IncrmX := 1; IncrmY := 0; PosX := 11; PosY := 5; NumArray := 3;
   BolaX := 15; BolaY := 15; TipoMov := 'D'; basta := false;
   PtosTot := 0; PtosPar := 0; mejora := false;
end;
 
procedure PintaCabeza;
begin
   setcolor(9);
   rectangle(10+(PosX*12), 8+(PosY*12), 18+(PosX*12), 16+(PosY*12));
   setcolor(14);
   rectangle(10+(ColaX[1]*12), 8+(ColaY[1]*12), 18+(ColaX[1]*12), 16+(ColaY[1]*12));
end;
 
procedure BorraCola;
begin
   setcolor(0);
   rectangle(10+(ColaX[NumArray-1]*12), 8+(ColaY[NumArray-1]*12),
      18+(ColaX[NumArray-1]*12), 16+(ColaY[NumArray-1]*12));
   for c := NumArray downto 1 do
   begin
      ColaX[c] := ColaX[c-1];
      ColaY[c] := ColaY[c-1];
   end;
   ColaX[1] := PosX; ColaY[1] := PosY;
end;
 
procedure DetectaColision;
   procedure AvisoChoque;
   var t : char;
   begin
      AbreVentana(200,140,250,100,'GAME OVER');
      setcolor(7); outtextxy(215,190,'­­Se ha chocado!!');
      if Sonido then begin
  Sound(367); Delay(200*DLY); Sound(352); Delay(200*DLY);
  Sound(330); Delay(200*DLY); Sound(313); Delay(455*DLY);
  NoSound; end;
      outtextxy(215,210,'¨Desea jugar otra vez [S/N]?');
      repeat if Keypressed then begin
  t := readkey; t := upcase(t); end;
      until (t='S') or (t='N');
      CompruebaMejora;
      if t = 'N' then begin FinJuego; end;
      if t = 'S' then basta := true;
   end;
var
   Num : shortint;
begin
   if ((PosX<1) or (PosX>50) or (PosY<1) or (PosY>37)) then
   begin
      setcolor(12);
      circle(14+(ColaX[1]*12), 12+(ColaY[1]*12), 5);
      AvisoChoque;
   end;
   Num := NumArray;
   repeat
      if ((ColaX[Num] = PosX) and (ColaY[Num] = PosY)) then
      begin
  setcolor(12);
  circle(14+(PosX*12), 12+(PosY*12), 5);
  AvisoChoque;
  break;
      end;
      Num := Num - 1;
   until Num<3;
   if Laberinto[((PosY-1)*50)+PosX] = true then begin
      setcolor(12); circle(14+(ColaX[1]*12), 12+(ColaY[1]*12),5);
      AvisoChoque; end;
end;
 
procedure PintaComida;
var
   NA : string[6];
begin
   setfillstyle(1,0);
   bar(478,4, 510,12);
   bar(14+(BolaX*12)-2, 12+(BolaY*12)-2, 14+(BolaX*12)+2, 12+(BolaY*12)+2);
   PtosTot := PtosPar + PtosTot; PtosPar := MaxPtosPar;
   str(PtosTot, NA);
   setcolor(15); outtextxy(479,5,NA);
   setfillstyle(1,10);
   repeat
      BolaX := random(49)+1; BolaY := random(36)+1;
   until Laberinto[((BolaY-1)*50)+BolaX] = false;
   bar(14+(BolaX*12)-2, 12+(BolaY*12)-2, 14+(BolaX*12)+2, 12+(BolaY*12)+2);
   if NumArray < 30 then NumArray := NumArray + 1;
   if NumArray > 30 then Rtraso := Rtraso - 1;
   if Sonido then begin
      Sound(1056); Delay(15*DLY); Sound(938); Delay(15*DLY); Sound(734);
      Delay(15*DLY); Sound(528); Delay(15*DLY); NoSound; end;
end;
 
procedure LeeTecla;
   procedure TeclaArriba;
   begin
      if TipoMov <> 'B' then begin
  IncrmX := 0; IncrmY := -1; TipoMov := 'A' end
  else begin if Sonido then begin
     Sound(83); Delay(10*DLY); NoSound; end; end;
      if PtosPar > 0 then PtosPar := PtosPar - 1;
   end;
   procedure TeclaIzquierda;
   begin
      if TipoMov <> 'D' then begin
  IncrmX := -1; IncrmY := 0; TipoMov := 'I' end
  else begin if Sonido then begin
     Sound(83); Delay(10*DLY); NoSound; end; end;
      if PtosPar > 0 then PtosPar := PtosPar - 1;
   end;
   procedure TeclaDerecha;
   begin
      if TipoMov <> 'I' then begin
  IncrmX := 1; IncrmY := 0; TipoMov := 'D' end
  else begin if Sonido then begin
     Sound(83); Delay(10*DLY); NoSound; end; end;
      if PtosPar > 0 then PtosPar := PtosPar - 1;
   end;
   procedure TeclaAbajo;
   begin
      if TipoMov <> 'A' then begin
  IncrmX := 0; IncrmY := 1; TipoMov := 'B' end
  else begin if Sonido then begin
     Sound(83); Delay(10*DLY); NoSound; end; end;
      if PtosPar > 0 then PtosPar := PtosPar - 1;
   end;
var
   t : char;
begin
   if Keypressed then
   begin
      t := readkey;
      case t of
 #72 : TeclaArriba;
 #75 : TeclaIzquierda;
 #77 : TeclaDerecha;
 #80 : TeclaAbajo;
 #27 : Menu;
      end;
   end;
end;
 
procedure Juego;
begin
   PintaCabeza;
   if (BolaX = PosX) and (BolaY = PosY) then
   begin
      PintaComida;
   end;
   LeeTecla;
   BorraCola;
   PosX := PosX + IncrmX; PosY := PosY + IncrmY;
   DetectaColision;
   LeeTecla;
   Delay(Rtraso*DLY);
end;
begin
   clrscr; randomize;
   IniciaVideo; Presentacion;
   repeat
      IniciaCampo; EligeLaberinto; CambiaNivel; BorraMenu; PintaComida;
      repeat Juego; until basta;
   until definal;
   closegraph;
end.


program Serpiente2;
(*******************************************
 * Por Victor Barbero Romero - Oct. 2.001   *
 * vbarbero@movistar.com o @telefonica.net  *
 *                                          *
 *******************************************) {v2.0e}
uses crt, Graph;
const
   DLY = 2;
   {Cambiar este valor para hacer el juego más lento.}
type
   Puntuaci = record
   name : string[15];
   punt : integer;
       end;
var
   MaxPtosPar, PtosPar, PtosTot : integer;
   PosX, PosY, BolaX, BolaY, IncrmX, IncrmY : shortint;
   Lab, c, NumArray, Rtraso : shortint;
   datmem, mejora, basta, Sonido, definal : boolean;
   ColaX, ColaY : array[1..40] of shortint;
   Laberinto : array[1..1850] of boolean;
   marca : array[1..6] of Puntuaci;
   P : file of Puntuaci;
   TipoMov : char;
 
procedure IniciaVideo;
var
   Driver, Modo : smallint;
begin
   Driver := VGA;  { Modo := VGAHi; }
   Modo := G640x480x256; { Cambiado debido a problemas con algunas resoluciones gráficas }
   InitGraph(Driver,Modo,'.BGI');
end;
 
procedure AbreVentana(PX, PY, Anch, Alto : integer; Titulo : string);
var
   contaX, differ, alter, tlitb : integer;
   tapavent : array[1..12] of integer;
begin
   alter := PX + Anch - (Anch div 5);
   tlitb := alter + 20;
   differ := PX - PY;
 
   tapavent[1] := PX; tapavent[2] := PY;
   tapavent[3] := PX; tapavent[4] := PY+Alto;
   tapavent[5] := PX+Anch; tapavent[6] := PY+Alto;
   tapavent[7] := PX+Anch; tapavent[8] := PY+(Anch div 5);
   tapavent[9] := alter; tapavent[10] := PY;
   tapavent[11] := PX; tapavent[12] := PY;
   setcolor(0); setfillstyle(1,0);
   fillpoly(6,tapavent);
 
   setcolor(7);
   line(PX-1, PY, alter, PY);
   line(PX-1, PY-1, alter, PY-1);
   for contaX := PX to PX+Anch do
   begin
      if contaX-differ < PY+Alto+1 then
      begin putpixel(PX, contaX-differ, 7);
  putpixel(PX-1, contaX-differ, 7); end;
      if contaX-differ < PY+Alto+1 then
      begin putpixel(alter, contaX-differ, 7);
  putpixel(alter+1, contaX-differ, 7); end;
      if alter < PX+Anch then alter := alter + 1;
      putpixel(contaX, PY+Alto, 7);
      putpixel(contaX-1, PY+Alto+1, 7);
      if contaX < tlitb then putpixel(contaX, PY+20, 7);
      Delay(4*DLY);
   end;
   putpixel(PX+Anch+1, PY+Alto+1, 7);
   putpixel(PX+Anch, PY+Alto+1, 7);
   setfillstyle(9,8);
   floodfill(PX+(Anch div 2), PY+3, 7);
   setfillstyle(10,8); floodfill(PX+(Anch div 2), PY+25, 7);
   setcolor(15);
   outtextxy(PX+12, PY+7, Titulo);
end;
 
procedure CreaFichero;
begin
   {$I-} rewrite(P); {$I+}
   for c := 1 to 6 do begin
      marca[c].name := '- - -';
      marca[c].punt := 0;
      seek(P,c); write(P,marca[c]);
   end;
end;
 
procedure ManejaFichero;
var
   report : integer;
begin
   assign(P,'srp2pnt.fps');
   {$I-} reset(P); {$I+}
   report := IOResult;
   if report <> 0 then begin CreaFichero; end else begin
      for c := 1 to 6 do begin
  seek(P,c); read(P, marca[c]);
      end; end; close(P);
   datmem := true;
end;
 
procedure GrabaPunts;
var
   reprt : integer;
begin
   assign(P,'srp2pnt.fps');
   {$I-} reset(P); {$I+}
   reprt := IOResult;
   if reprt <> 0 then begin CreaFichero; end else begin
      for c := 1 to 6 do begin
  seek(P,c); write(P, marca[c]);
      end; end;
   close(P);
end;
 
procedure MuestraPunts;
var
   puntos : string[5];
begin
   AbreVentana(150,140,300,250,'Mejores puntuaciones');
   if datmem = false then ManejaFichero;
   setcolor(7);
   outtextxy(175,185,'PUNTOS');
   outtextxy(300,185,'NOMBRE');
   line(160,198, 420,198); line(236,180, 236,380);
   setfillstyle(1,0); setcolor(0);
   for c := 1 to 6 do begin
      bar(165,175+(30*c), 225,190+(30*c));
      bar(250,175+(30*c), 410,190+(30*c));
      str(marca[c].punt, puntos);
      setcolor(11); outtextxy(175,180+(30*c), puntos);
      setcolor(9); outtextxy(260,180+(30*c), marca[c].name);
   end;
   readkey;
end;
 
procedure OrdenaPunts;     {Utiliza el Algoritmo Bubble Short}
var
   d : shortint;
   puntcambio : integer;
   namecambio : string[15];
begin
   for c:= 1 to 6 do
   begin
      for d := c+1 to 6 do
      begin
  if marca[d].punt > marca[c].punt then
  begin
     puntcambio := marca[c].punt;
     marca[c].punt := marca[d].punt;
     marca[d].punt := puntcambio;
     namecambio := marca[c].name;
     marca[c].name := marca[d].name;
     marca[d].name := namecambio;
  end;
      end;
   end;
end;
 
procedure CompruebaMejora;
var
   Nombre : string[15];
begin
   if datmem = false then begin ManejaFichero; end;
   for c:= 1 to 6 do begin
      if PtosTot > marca[c].punt then mejora := true;
   end;
   if mejora then begin
      AbreVentana(140,150,250,110,'­Enhorabuena!');
      setcolor(7);
      outtextxy(159,193,'­Ha superado un record!');
      if Sonido then begin
  Sound(293); Delay(193*DLY); NoSound; Delay(27*DLY);
  Sound(293); Delay(110*DLY); NoSound; Sound(293); Delay(110*DLY);
  Sound(440); Delay(330*DLY); Sound(293); Delay(110*DLY);
  Sound(440); Delay(440*DLY); NoSound; end;
      outtextxy(160,208,'Introduzca su nombre:');
      setfillstyle(1,0); setcolor(0);
      bar(160,223, 320,237); textcolor(9);
      gotoxy(22,15); readln(Nombre);
      marca[6].punt := PtosTot; marca[6].name := Nombre;
      OrdenaPunts; GrabaPunts;
   end;
   MuestraPunts;
end;
 
procedure CamSonido;
var SonSim : string[1];
begin
   SonSim := #14;
   if Sonido then begin
      setcolor(0); outtextxy(585,5,SonSim); Sonido := false; end
      else begin
  setcolor(2); outtextxy(585,5,SonSim); Sonido := true; end;
end;
 
procedure FinJuego;
begin
   cleardevice;
   AbreVentana(175,130,275,150,'FIN');
   setcolor(14); outtextxy(235,185,'S E R P I E N T E');
   setcolor(7); outtextxy(192,240,'Victor Barbero - Octubre 2.001');
   Delay(2000*DLY);
   basta := true; definal := true;
end;
 
procedure CambiaNivel;
var
   Nivel : shortint;
   c : char; nvl : string[1];
   procedure PintaCuad(num,tipo : shortint);
   begin
      if tipo = 1 then setfillstyle(1,9);
      if tipo = 0 then setfillstyle(4,9);
      str(num,nvl); bar(210+(30*num),210, 230+(30*num),230);
      if tipo = 1 then begin setcolor(11);
  outtextxy(215+(30*num), 220, nvl); end;
   end;
   procedure TeclaDerecha;
   begin
      if Nivel < 5 then
      begin
  PintaCuad(Nivel+1,1);
  Nivel := Nivel + 1;
      end; c := 'A';
   end;
   procedure TeclaIzquierda;
   begin
      if Nivel > 1 then
      begin
  PintaCuad(Nivel,0);
  Nivel := Nivel - 1;
      end; c := 'A';
   end;
begin
   AbreVentana(195,150,240,110,'Nivel'); setcolor(7);
   outtextxy(240,190,'Mayor dificultad'); outtextxy(375,190,#26);
   outtextxy(260,240,#27); outtextxy(350,240,#26);
   setcolor(1); rectangle(239,209, 261,231); rectangle(238,208, 262,232);
   rectangle(269,209, 291,231); rectangle(268,208, 292,232);
   rectangle(299,209, 321,231); rectangle(298,208, 322,232);
   rectangle(329,209, 351,231); rectangle(328,208, 352,232);
   rectangle(359,209, 381,231); rectangle(358,208, 382,232);
   PintaCuad(1,1); PintaCuad(2,1); PintaCuad(3,1);
   PintaCuad(4,0); PintaCuad(5,0); Nivel := 3;
   repeat
      if Keypressed then c := readkey;
      case c of
 #75 : TeclaIzquierda;
 #77 : TeclaDerecha;
      end;
   until c=#13;
   case Nivel of
     1 : begin MaxPtosPar := 9+Lab; Rtraso := 100; end;
     2 : begin MaxPtosPar := 14+Lab; Rtraso := 85; end;
     3 : begin MaxPtosPar := 19+Lab; Rtraso := 75; end;
     4 : begin MaxPtosPar := 24+Lab; Rtraso := 65; end;
     5 : begin MaxPtosPar := 39+Lab; Rtraso := 53; end;
   end;
   setfillstyle(1,0); bar(568,4, 578,13);
   setcolor(15); str(Nivel,nvl); outtextxy(569,5,nvl);
end;
 
procedure PintaLabs;
var
   x, y : shortint;
begin
   setfillstyle(11,6);
   for x := 1 to 50 do
   begin
      for y := 1 to 37 do
      begin
  if Laberinto[((y-1)*50)+x] = true then begin
     setcolor(12);
     rectangle(8+(x*12), 6+(y*12), 20+(x*12), 18+(y*12));
     setcolor(6);
     rectangle(9+(x*12), 7+(y*12), 19+(x*12), 17+(y*12));
     floodfill(14+(x*12), 12+(y*12), 6);
  end;
      end;
   end;
end;
 
procedure EligeLaberinto;
var cn : char;
   procedure BorraLabAnter;
   var P : integer;
   begin
      for P := 1 to 1850 do
      begin
  Laberinto[P] := false;
      end;
   end;
   procedure Lab2;
   var P : integer;
   begin
      for P := 601 to 626 do begin Laberinto[P] := true; end;
      for P := 1224 to 1250 do begin Laberinto[P] := true; end;
      for P := 438 to 450 do begin Laberinto[P] := true; end;
      for P := 1451 to 1463 do begin Laberinto[P] := true; end;
   end;
   procedure Lab3;
   var P : integer;
   begin
      P := 260;
      while P < 1610 do begin
  P := P + 50;
  Laberinto[P] := true;
  Laberinto[P+31] := true;
      end;
      for P := 901 to 911 do begin Laberinto[P] := true; end;
      for P := 990 to 1000 do begin Laberinto[P] := true; end;
   end;
   procedure Lab4;
   var P : integer;
   begin
      P := 20;
      while P < 756 do begin
  case P of
    265 :; 216 :; 167 :;
  else Laberinto[P] := true; end;
  P := P + 49;
      end; Laberinto[19] := true; Laberinto[18] := true;
      Laberinto[751] := true; Laberinto[754] := true;
      Laberinto[752] := true; Laberinto[753] := true;
      P := 1683;
      while P > 1028 do begin
  Laberinto[P] := true;
  P := P - 49;
      end; Laberinto[68] := true;
      Laberinto[1046] := true; Laberinto[1050] := true;
      Laberinto[1047] := true; Laberinto[1048] := true;
      Laberinto[1049] := true;
      P := 525;
      while P < 1000 do begin
  Laberinto[P] := true;
  Laberinto[P+245] := true;
  P := P + 51;
      end;
      for P := 1501 to 1513 do begin Laberinto[P] := true; end;
   end;
   procedure TAbajo;
   begin
      if Lab < 4 then begin
  setcolor(11); setfillstyle(1,11);
  bar(225,135+(20*(Lab+1)), 230,140+(20*(Lab+1)));
  bar(383,135+(20*(Lab+1)), 388,140+(20*(Lab+1)));
  cn := 'A'; Lab := Lab + 1; end;
   end;
   procedure TArriba; begin
      if Lab > 1 then begin
  setcolor(0); setfillstyle(1,0);
  bar(225,135+(20*Lab), 230,140+(20*Lab));
  bar(383,135+(20*Lab), 388,140+(20*Lab));
  cn := 'A'; Lab := Lab - 1; end;
   end;
begin
   AbreVentana(215,120,190,114,'Laberinto');
   setcolor(9);
   line(222,149, 232,149); line(221,149, 221,166);
   line(222,166, 232,166); line(391,149 ,381,149);
   line(392,149, 392,166); line(381,166, 391,166);
   line(222,169, 232,169); line(221,169, 221,186);
   line(222,186, 232,186); line(391,169 ,381,169);
   line(392,169, 392,186); line(381,186, 391,186);
   line(222,189, 232,189); line(221,189, 221,206);
   line(222,206, 232,206); line(391,189 ,381,189);
   line(392,189, 392,206); line(381,206, 391,206);
   line(222,209, 232,209); line(221,209, 221,226);
   line(222,226, 232,226); line(391,209 ,381,209);
   line(392,209, 392,226); line(381,226, 391,226);
   setfillstyle(1,0); setcolor(7);  Lab := 1;
   bar(223,150, 390,165); outtextxy(260,155,'Sin laberinto');
   bar(223,170, 390,185); outtextxy(260,175,'Laberinto 1');
   bar(223,190, 390,205); outtextxy(260,195,'Laberinto 2');
   bar(223,210, 390,225); outtextxy(260,215,'Laberinto 3');
   outtextxy(395,165,#24); outtextxy(395,204,#25);
   setcolor(11); setfillstyle(1,11);
   bar(225,155, 230,160); bar(383,155, 388,160);
   repeat
      if Keypressed then cn := readkey;
      case cn of
 #72 : TArriba;
 #80 : TAbajo;
      end;
   until cn=#13;
   BorraLabAnter;
   case Lab of 2 : Lab2; 3 : Lab3; 4 : Lab4; end;
end;
 
procedure BorraMenu;
begin
   setfillstyle(1,0); floodfill(320, 240, 12);
   setfillstyle(1,10);
   bar(14+(BolaX*12)-2, 12+(BolaY*12)-2, 14+(BolaX*12)+2, 12+(BolaY*12)+2);
   if definal = false then PintaLabs;
   setcolor(14);
end;
 
procedure Presentacion;
begin
   cleardevice;
   AbreVentana(130,100,380,190,'­Bienvenido!');
   setcolor(14); outtextxy(180,170,'S E R P I E N T E');
   setcolor(7); outtextxy(379,170,'v2.0');
   outtextxy(180,220,'Presione ESC durante el juego');
   outtextxy(235,240,'para entrar en el men£');
   outtextxy(155,268,'Pulse cualquier tecla para continuar');
   readkey;
end;
 
procedure Menu;
var
   c : char;
begin
   AbreVentana(180,125,250,180,'MENU');
   setcolor(7);
   outtextxy(200,180, '1.- Cambiar el nivel.');
   case Sonido of
     true : outtextxy(200,200, '2.- Desactivar sonido.');
     false : outtextxy(200,200, '2.- Activar sonido.');
   end;
   outtextxy(200,220, '3.- Volver al juego.');
   outtextxy(200,240, '4.- Salir del juego.');
   outtextxy(200,260, '5.- Ver las puntuaciones.');
   repeat
      if Keypressed then c := readkey;
   until ((c > #48) and (c < #54));
   case c of
     #49 : CambiaNivel;
     #50 : CamSonido;
     #52 : begin CompruebaMejora; FinJuego; end;
     #53 : MuestraPunts;
   end;
   BorraMenu;
end;
 
procedure IniciaCampo;
begin
   cleardevice;
   setcolor(12);
   rectangle(20,17,620,462);
   rectangle(19,18,621,463);
   rectangle(410,2,600,15);
   setfillstyle(6,4);
   floodfill(320,10,12);
   setcolor(7); outtextxy(415,5,'Puntos:');
   outtextxy(520,5,'Nivel:');
   for c := 1 to 30 do begin
      ColaX[c] := 0; ColaY[c] := 0; end;
   setcolor(14);
   rectangle(106,68, 114,76); ColaX[3] := 8; ColaY[3] := 5;
   rectangle(118,68, 126,76); ColaX[2] := 9; ColaY[2] := 5;
   rectangle(130,68, 138,76); ColaX[1] := 10; ColaY[1] := 5;
   IncrmX := 1; IncrmY := 0; PosX := 11; PosY := 5; NumArray := 3;
   BolaX := 15; BolaY := 15; TipoMov := 'D'; basta := false;
   PtosTot := 0; PtosPar := 0; mejora := false;
end;
 
procedure PintaCabeza;
begin
   setcolor(9);
   rectangle(10+(PosX*12), 8+(PosY*12), 18+(PosX*12), 16+(PosY*12));
   setcolor(14);
   rectangle(10+(ColaX[1]*12), 8+(ColaY[1]*12), 18+(ColaX[1]*12), 16+(ColaY[1]*12));
end;
 
procedure BorraCola;
begin
   setcolor(0);
   rectangle(10+(ColaX[NumArray-1]*12), 8+(ColaY[NumArray-1]*12),
      18+(ColaX[NumArray-1]*12), 16+(ColaY[NumArray-1]*12));
   for c := NumArray downto 1 do
   begin
      ColaX[c] := ColaX[c-1];
      ColaY[c] := ColaY[c-1];
   end;
   ColaX[1] := PosX; ColaY[1] := PosY;
end;
 
procedure DetectaColision;
   procedure AvisoChoque;
   var t : char;
   begin
      AbreVentana(200,140,250,100,'GAME OVER');
      setcolor(7); outtextxy(215,190,'­­Se ha chocado!!');
      if Sonido then begin
  Sound(367); Delay(200*DLY); Sound(352); Delay(200*DLY);
  Sound(330); Delay(200*DLY); Sound(313); Delay(455*DLY);
  NoSound; end;
      outtextxy(215,210,'¨Desea jugar otra vez [S/N]?');
      repeat if Keypressed then begin
  t := readkey; t := upcase(t); end;
      until (t='S') or (t='N');
      CompruebaMejora;
      if t = 'N' then begin FinJuego; end;
      if t = 'S' then basta := true;
   end;
var
   Num : shortint;
begin
   if ((PosX<1) or (PosX>50) or (PosY<1) or (PosY>37)) then
   begin
      setcolor(12);
      circle(14+(ColaX[1]*12), 12+(ColaY[1]*12), 5);
      AvisoChoque;
   end;
   Num := NumArray;
   repeat
      if ((ColaX[Num] = PosX) and (ColaY[Num] = PosY)) then
      begin
  setcolor(12);
  circle(14+(PosX*12), 12+(PosY*12), 5);
  AvisoChoque;
  break;
      end;
      Num := Num - 1;
   until Num<3;
   if Laberinto[((PosY-1)*50)+PosX] = true then begin
      setcolor(12); circle(14+(ColaX[1]*12), 12+(ColaY[1]*12),5);
      AvisoChoque; end;
end;
 
procedure PintaComida;
var
   NA : string[6];
begin
   setfillstyle(1,0);
   bar(478,4, 510,12);
   bar(14+(BolaX*12)-2, 12+(BolaY*12)-2, 14+(BolaX*12)+2, 12+(BolaY*12)+2);
   PtosTot := PtosPar + PtosTot; PtosPar := MaxPtosPar;
   str(PtosTot, NA);
   setcolor(15); outtextxy(479,5,NA);
   setfillstyle(1,10);
   repeat
      BolaX := random(49)+1; BolaY := random(36)+1;
   until Laberinto[((BolaY-1)*50)+BolaX] = false;
   bar(14+(BolaX*12)-2, 12+(BolaY*12)-2, 14+(BolaX*12)+2, 12+(BolaY*12)+2);
   if NumArray < 30 then NumArray := NumArray + 1;
   if NumArray > 30 then Rtraso := Rtraso - 1;
   if Sonido then begin
      Sound(1056); Delay(15*DLY); Sound(938); Delay(15*DLY); Sound(734);
      Delay(15*DLY); Sound(528); Delay(15*DLY); NoSound; end;
end;
 
procedure LeeTecla;
   procedure TeclaArriba;
   begin
      if TipoMov <> 'B' then begin
  IncrmX := 0; IncrmY := -1; TipoMov := 'A' end
  else begin if Sonido then begin
     Sound(83); Delay(10*DLY); NoSound; end; end;
      if PtosPar > 0 then PtosPar := PtosPar - 1;
   end;
   procedure TeclaIzquierda;
   begin
      if TipoMov <> 'D' then begin
  IncrmX := -1; IncrmY := 0; TipoMov := 'I' end
  else begin if Sonido then begin
     Sound(83); Delay(10*DLY); NoSound; end; end;
      if PtosPar > 0 then PtosPar := PtosPar - 1;
   end;
   procedure TeclaDerecha;
   begin
      if TipoMov <> 'I' then begin
  IncrmX := 1; IncrmY := 0; TipoMov := 'D' end
  else begin if Sonido then begin
     Sound(83); Delay(10*DLY); NoSound; end; end;
      if PtosPar > 0 then PtosPar := PtosPar - 1;
   end;
   procedure TeclaAbajo;
   begin
      if TipoMov <> 'A' then begin
  IncrmX := 0; IncrmY := 1; TipoMov := 'B' end
  else begin if Sonido then begin
     Sound(83); Delay(10*DLY); NoSound; end; end;
      if PtosPar > 0 then PtosPar := PtosPar - 1;
   end;
var
   t : char;
begin
   if Keypressed then
   begin
      t := readkey;
      case t of
 #72 : TeclaArriba;
 #75 : TeclaIzquierda;
 #77 : TeclaDerecha;
 #80 : TeclaAbajo;
 #27 : Menu;
      end;
   end;
end;
 
procedure Juego;
begin
   PintaCabeza;
   if (BolaX = PosX) and (BolaY = PosY) then
   begin
      PintaComida;
   end;
   LeeTecla;
   BorraCola;
   PosX := PosX + IncrmX; PosY := PosY + IncrmY;
   DetectaColision;
   LeeTecla;
   Delay(Rtraso*DLY);
end;
begin
   clrscr; randomize;
   IniciaVideo; Presentacion;
   repeat
      IniciaCampo; EligeLaberinto; CambiaNivel; BorraMenu; PintaComida;
      repeat Juego; until basta;
   until definal;
   closegraph;
end.
Visual basic:
  Delphi:

 


Lisp:
*******************************************************************
Definición de la función:
 
  (defun vacia (l)
    (cond ((null l) 1)    ; si la lista esta vacia devuelve 1
          (t 0)))         ; en otro caso (lista llena) devuelve 0
 
Llamada a la función:
 
  (vacia '(1 3 4))        ; La lista no esta vacia, devolvería 0
  (vacia '())             ; La lista esta vacia, devolvería 1
*******************************************************************
(defun último (lista)
  (cond ((null (cdr lista)) (car lista))
        (t (último (cdr lista)))))
 
(último '(1 2 3 4 5 6 7))  ; devuelve el último de la lista: 7
 
 
*******************************************************************
;        ---FACTORIAL----
;Definición matemática
; Factorial(x) =  1                    si x=0   caso base
;                 x*factorial(x-1)     si x>0   caso recursivo
 
;Función factorial hecha con recursividad no final
(defun factorial (n)
   (if (= 0 n)
     1                            ; caso base
     (* n (factorial (- n 1)))))  ; caso recursivo
 
(factorial 4)              ;esto nos devolvería 24=4*3*2*1 
Prolog:
%%
%% declaraciones
%%
padrede('juan', 'maria'). % juan es padre de maria
padrede('pablo', 'juan'). % pablo es padre de juan
padrede('pablo', 'marcela').
padrede('carlos', 'debora').
 
% A es hijo de B si B es padre de A
hijode(A,B) :- padrede(B,A).
% A es abuelo de B si A es padre de C y C es padre B
abuelode(A,B) :- 
   padrede(A,C), 
   padrede(C,B).
% A y B son hermanos si el padre de A es también el padre de B y si A y B no son lo mismo
hermanode(A,B) :- 
   padrede(C,A) , 
   padrede(C,B), 
   A \== B.        
 
% A y B son familiares si A es padre de B o A es hijo de B o A es hermano de B
familiarde(A,B) :- 
   padrede(A,B).
familiarde(A,B) :-
   hijode(A,B). 
familiarde(A,B) :- 
   hermanode(A,B).
%%
%% consultas
%%
% juan es hermano de marcela?
?- hermanode('juan', 'marcela').
yes
 
% carlos es hermano de juan?
?- hermanode('carlos', 'juan').
no
 
% pablo es abuelo de maria?
?- abuelode('pablo', 'maria').
yes
 
% maria es abuela de pablo?
?- abuelode('maria', 'pablo').
no