lunes, enero 20, 2003
Bueno, todo ha salido mejor desde la última vez que escribí, compré un play station y ahora me la paso jugando :)
Que mejor para pasar el tiempo? tambien chateo via messenger, y todo va a las mil maravillas, hasta el cd de programación esta bonitoˇˇˇˇ
Ahora chateo con Luis, que nińo tan curioso, y despues dicen qe las curiosas somos las nińas.
Ahora aqui va un codigo de un juego de damas (lo que va) no lo he podido terminar y espero recibir inspiración al colocarlo aca: (es en modula-3) linux:
MODULE Damas EXPORTS Main;
IMPORT Trestle, VBT, BorderedVBT, HVSplit, TextureVBT,
Fmt, RigidVBT, PaintOp, Split, ButtonVBT, Axis,Region,
Point, Rect,TextVBT, Random, TrestleComm;
TYPE Cell = BorderedVBT.T OBJECT
METHODS
init(ch: VBT.T): Cell := Init
OVERRIDES
mouse := Mouse
END;
SpotVBT = VBT.Leaf OBJECT
spot: Region.T;
Saber:INTEGER:=1;
OVERRIDES
reshape := Reshape;
repaint := Repaint;
END;
VAR puzzle := HVSplit.Cons(Axis.T.Ver,
HVSplit.Cons(Axis.T.Hor,
New(1,1), New(1,2), New(1,3), New(1,4), New(1,5), New(1,6), New(1,7), New(1,8)),
HVSplit.Cons(Axis.T.Hor,
New(2,1), New(2,2), New(2,3), New(2,4), New(2,5), New(2,6), New(2,7), New(2,8)),
HVSplit.Cons(Axis.T.Hor,
New(3,1), New(3,2), New(3,3), New(3,4), New(3,5), New(3,6), New(3,7), New(3,8)),
HVSplit.Cons(Axis.T.Hor,
New(4,1), New(4,2), New(4,3), New(4,4), New(4,5), New(4,6), New(4,7), New(4,8)),
HVSplit.Cons(Axis.T.Hor,
New(5,1), New(5,2), New(5,3), New(5,4), New(5,5), New(5,6), New(5,7), New(5,8)),
HVSplit.Cons(Axis.T.Hor,
New(6,1), New(6,2), New(6,3), New(6,4), New(6,5), New(6,6), New(6,7), New(6,8)),
HVSplit.Cons(Axis.T.Hor,
New(7,1), New(7,2), New(7,3), New(7,4), New(7,5), New(7,6), New(7,7), New(7,8)),
HVSplit.Cons(Axis.T.Hor,
New(8,1), New(8,2), New(8,3), New(8,4), New(8,5), New(8,6), New(8,7), New(8,8))
);
CNegroF, CNegro, CRojoF, CRojo, CRojoF2,CNegroF2: Cell;
RowC1, ColC1,RowC2,ColC2 :INTEGER:=0;
NumeroClick:INTEGER:=0;
(* The cell representing the empty space *)
cell: ARRAY [1..8],[1..8] OF Cell;
(* "cell[i]" is the cell numbered "i" *)
rand := NEW (Random.Default).init();
PROCEDURE New(I: INTEGER; J:INTEGER ): Cell =
VAR Div1, Div2:INTEGER;
CNegroF:=NEW(Cell).init( NEW(SpotVBT, spot := Circle(15.0),Saber:=1));
CNegro:=NEW(Cell).init(NEW(SpotVBT, spot:=Circle(0.0),Saber :=1));
CRojoF:= NEW(Cell).init( NEW(SpotVBT, spot := Circle(15.0),Saber:=0));
CRojo:=NEW(Cell).init(NEW (SpotVBT,spot:= Circle(0.0),Saber:=0));
CNegroF2:=NEW(Cell).init( NEW(SpotVBT, spot := Circle(15.0),Saber:=2));
CRojoF2:= NEW(Cell).init( NEW(SpotVBT, spot := Circle(15.0),Saber:=3));
BEGIN
Div1:= I MOD 2;
Div2:= J MOD 2;
IF Div1=Div2 THEN
IF (I >=1) AND (I <= 3) THEN
cell [I,J] := CNegroF;
END;
IF (I >= 4) AND (I<=5) THEN
cell [I,J] := CNegro;
ELSE
END;
IF (I >= 6) AND (I<=8) THEN
cell [I,J] := CRojoF2;
ELSE
END;
ELSE
cell [I,J] := CRojo;
END;
RETURN cell[I,J]
END New;
PROCEDURE Repaint(v: SpotVBT; READONLY rgn: Region.T) =
BEGIN
CASE v.Saber OF
| 1 => VBT.PaintRegion(v, rgn, PaintOp.FromRGB(0.9,0.0,0.0));
VBT.PaintRegion(v,Region.Meet(v.spot, rgn), PaintOp.FromRGB(0.0,0.0,0.9))
| 0 => VBT.PaintRegion(v, rgn, PaintOp.FromRGB(0.0,0.0,0.0));
VBT.PaintRegion(v,Region.Meet(v.spot, rgn), PaintOp.FromRGB(0.0,0.0,0.9))
| 2 => VBT.PaintRegion(v, rgn, PaintOp.FromRGB(0.0,0.0,0.0));
VBT.PaintRegion(v,Region.Meet(v.spot, rgn), PaintOp.FromRGB(1.0,1.0,1.0))
| 3 => VBT.PaintRegion(v, rgn, PaintOp.FromRGB(0.9,0.0,0.0));
VBT.PaintRegion(v,Region.Meet(v.spot, rgn), PaintOp.FromRGB(1.0,1.0,1.0))
ELSE
END;
END Repaint;
PROCEDURE Circle(r: REAL): Region.T =
VAR res := Region.Empty;
BEGIN
FOR h := FLOOR(-r) TO CEILING(r) DO
FOR v := FLOOR(-r) TO CEILING(r) DO
IF h * h + v * v <= FLOOR(r * r) THEN
WITH rect = Rect.FromPoint(Point.T{h, v}) DO
res := Region.JoinRect(rect, res)
END
END
END
END;
RETURN res
END Circle;
PROCEDURE Init(c: Cell; ch: VBT.T): Cell =
BEGIN
EVAL BorderedVBT.T.init(c,
RigidVBT.FromHV(ch, 20.0, 20.0),
op := PaintOp.Bg);
RETURN c
END Init;
PROCEDURE Reshape(v: SpotVBT;
READONLY cd: VBT.ReshapeRec) =
VAR delta :=
Point.Sub(
Rect.Middle(cd.new),
Rect.Middle(v.spot.r));
BEGIN
v.spot := Region.Add(v.spot, delta);
Repaint(v, Region.Full)
END Reshape;
PROCEDURE GetRowCol(c: Cell;
VAR (*out*) row, col: INTEGER) =
VAR
parent: HVSplit.T := VBT.Parent(c);
grandparent: HVSplit.T := VBT.Parent(parent);
<*FATAL Split.NotAChild*>
BEGIN
col := Split.Index(parent, c);
row := Split.Index(grandparent, parent)
END GetRowCol;
PROCEDURE Mouse(v: Cell; READONLY cd: VBT.MouseRec) =
VAR vRow, vCol,vRow2,vCol2: INTEGER;
BEGIN
IF cd.clickType = VBT.ClickType.FirstDown THEN
INC(NumeroClick);
GetRowCol(v,vRow,vCol);
RowC1:=vRow;
ColC1:=vCol;
END;
IF cd.clickType = VBT.ClickType.LastUp THEN
INC(NumeroClick);
GetRowCol(v,vRow2,vCol2);
RowC2:=vRow2;
ColC2:=vCol2;
END;
Swap(RowC1,ColC1,RowC2,ColC2);
(*IF NumeroClick = 1THEN
RowC1:=vRow;
ColC1:=vCol;
END;
IF NumeroClick = 2 THEN
NumeroClick:=0;
Swap(RowC1,ColC1,vRow,vCol);
END; *)
END Mouse;
PROCEDURE Swap(RowC1,ColC1,RowC2,ColC2: INTEGER) =
<*FATAL Split.NotAChild*>
BEGIN
(*Split.Replace(VBT.Parent(cell[1,1]),cell[1,1], cell[5,6]);*)
(*RowC1:=3;
ColC1:=3;
RowC2:=4;
ColC2:=4;
cell[RowC1,ColC1]:=NIL;
cell[RowC2,ColC2]:=NIL;
cell[RowC1,ColC1]:=NEW (SpotVBT,spot:= Circle(2.0),Saber:=0);
cell[RowC2,ColC2]:=NEW (SpotVBT,spot:= Circle(4.0),Saber:=0);*)
END Swap;
PROCEDURE DoExit(<*UNUSED*> self: ButtonVBT.T;
<*UNUSED*> READONLY cd: VBT.MouseRec) =
BEGIN Trestle.Delete(main) END DoExit;
VAR menuBar :=
ButtonVBT.MenuBar(
ButtonVBT.New(BorderedVBT.New(TextVBT.New("Exit")), DoExit));
main := HVSplit.Cons(Axis.T.Ver, menuBar, puzzle);
<*FATAL TrestleComm.Failure*>
BEGIN
Trestle.Install(main);
Trestle.AwaitDelete(main)
END Damas.
posted by Daira a las
