martes, 16 de noviembre de 2010
lunes, 15 de noviembre de 2010
jueves, 11 de noviembre de 2010
lunes, 8 de noviembre de 2010
jueves, 4 de noviembre de 2010
martes, 2 de noviembre de 2010
jueves, 28 de octubre de 2010
martes, 26 de octubre de 2010
lunes, 25 de octubre de 2010
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:
Pascal:
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
Suscribirse a:
Entradas (Atom)