level 6
天启雪原
楼主
program yx2048;
uses crt;
type pan1=array[1..4,1..4]of integer;
var i,j:integer;biggest_one:integer;pan:pan1;
procedure qishi(n:integer);
var i,x,y:integer;
begin
randomize;
i:=0;
repeat
x:=random(3)+1;
y:=random(3)+1;
if pan[x,y]=0 then
begin
pan[x,y]:=2;
i:=i+1;
end;
until i=n;
end;
procedure writeoutpan;
var i,j:integer;
begin clrscr;
for i:=1 to 4 do
begin
for j:=1 to 4 do
if pan[i,j]=0 then
write(* *) else
write(pan[i,j]:5);
writeln;
end;
end;
procedure check_for_biggest;
var i,j:integer;
begin
for i:=1 to 4 do
for j:=1 to 4 do
if pan[i,j]>biggest_one then
biggest_one:=pan[i,j];
end;
function check_for_full(pan:pan1):integer;
var i,j,m:integer;
begin
m:=0;
for i:=1 to 4 do
for j:=1 to 4 do
if pan[i,j]=0 then
m:=m+1;
check_for_full:=m;
end;
procedure play;
var k:char;i,j,a:integer;c:boolean;yidong:integer;
begin
c:=false;yidong:=0;
repeat
read(k);
case k of
*a*:begin
for i:=1 to 4 do
begin a:=1;
for j:=1 to 4 do
if pan[i,j]<>0 then
if a=1 then
begin
pan[i,a]:=pan[i,j];
pan[i,j]:=0;
a:=a+1;
end else
if pan[i,j]=pan[i,a-1] then
begin
pan[i,a-1]:=pan[i,a-1]*2;
pan[i,j]:=0;
end else
begin
pan[i,a]:=pan[i,j];
pan[i,j]:=0;
a:=a+1;
end;
end;
end;
*d*:begin
for i:=1 to 4 do
begin a:=4;
for j:=4 downto 1 do
if pan[i,j]<>0 then
if a=4 then
begin
pan[i,a]:=pan[i,j];
pan[i,j]:=0;
a:=a-1;
end else
if pan[i,j]=pan[i,a+1] then
begin
pan[i,a+1]:=pan[i,a+1]*2;
pan[i,j]:=0;
end else
begin
pan[i,a]:=pan[i,j];
pan[i,j]:=0;
a:=a-1;
end;
end;
end;
*w*:begin
for j:=1 to 4 do
begin a:=1;
for i:=1 to 4 do
if pan[i,j]<>0 then
if a=1 then
begin
pan[a,j]:=pan[i,j];
pan[i,j]:=0;
a:=a+1;
end else
if pan[a-1,j]=pan[i,j] then
begin
pan[a-1,j]:=pan[a-1,j]*2;
pan[i,j]:=0;
end else
begin
pan[a,j]:=pan[i,j];
pan[i,j]:=0;
a:=a+1;
end;
end;
end;
*s*:begin
for j:=1 to 4 do
begin a:=4;
for i:=4 downto 1 do
if pan[i,j]<>0 then
if a=4 then
begin
pan[a,j]:=pan[i,j];
pan[i,j]:=0;a:=a-1;
end else
if pan[a-1,j]=pan[i,j] then
begin
pan[a-1,j]:=pan[a-1,j]*2;
pan[i,j]:=0;
end else
begin
pan[a,j]:=pan[i,j];
pan[i,j]:=0;a:=a-1;
end;
end;
end;
end;
yidong:=yidong+1;
writeoutpan;
check_for_biggest;
case check_for_full(pan) of
0:begin writeln(*You lose*);c:=true;writeln(*best:*,biggest_one);
writeln(*step:*,yidong);end;
1:qishi(1);
else qishi(2)
edn;
until c;
end;
begin
for i:=1 to 4 do
for j:=1 to 4 do
pan[i,j]:=0;
qishi(2);
biggest_one:=2;
writeoutpan;
play;
readln;
clrscr;
writeln(*Thank you for playing*);
write(*This game is designed by A.Snowland Yiserce*);
readln;
write(*Bye Bye!*);
readln;
end.
2014年09月12日 14点09分
1
uses crt;
type pan1=array[1..4,1..4]of integer;
var i,j:integer;biggest_one:integer;pan:pan1;
procedure qishi(n:integer);
var i,x,y:integer;
begin
randomize;
i:=0;
repeat
x:=random(3)+1;
y:=random(3)+1;
if pan[x,y]=0 then
begin
pan[x,y]:=2;
i:=i+1;
end;
until i=n;
end;
procedure writeoutpan;
var i,j:integer;
begin clrscr;
for i:=1 to 4 do
begin
for j:=1 to 4 do
if pan[i,j]=0 then
write(* *) else
write(pan[i,j]:5);
writeln;
end;
end;
procedure check_for_biggest;
var i,j:integer;
begin
for i:=1 to 4 do
for j:=1 to 4 do
if pan[i,j]>biggest_one then
biggest_one:=pan[i,j];
end;
function check_for_full(pan:pan1):integer;
var i,j,m:integer;
begin
m:=0;
for i:=1 to 4 do
for j:=1 to 4 do
if pan[i,j]=0 then
m:=m+1;
check_for_full:=m;
end;
procedure play;
var k:char;i,j,a:integer;c:boolean;yidong:integer;
begin
c:=false;yidong:=0;
repeat
read(k);
case k of
*a*:begin
for i:=1 to 4 do
begin a:=1;
for j:=1 to 4 do
if pan[i,j]<>0 then
if a=1 then
begin
pan[i,a]:=pan[i,j];
pan[i,j]:=0;
a:=a+1;
end else
if pan[i,j]=pan[i,a-1] then
begin
pan[i,a-1]:=pan[i,a-1]*2;
pan[i,j]:=0;
end else
begin
pan[i,a]:=pan[i,j];
pan[i,j]:=0;
a:=a+1;
end;
end;
end;
*d*:begin
for i:=1 to 4 do
begin a:=4;
for j:=4 downto 1 do
if pan[i,j]<>0 then
if a=4 then
begin
pan[i,a]:=pan[i,j];
pan[i,j]:=0;
a:=a-1;
end else
if pan[i,j]=pan[i,a+1] then
begin
pan[i,a+1]:=pan[i,a+1]*2;
pan[i,j]:=0;
end else
begin
pan[i,a]:=pan[i,j];
pan[i,j]:=0;
a:=a-1;
end;
end;
end;
*w*:begin
for j:=1 to 4 do
begin a:=1;
for i:=1 to 4 do
if pan[i,j]<>0 then
if a=1 then
begin
pan[a,j]:=pan[i,j];
pan[i,j]:=0;
a:=a+1;
end else
if pan[a-1,j]=pan[i,j] then
begin
pan[a-1,j]:=pan[a-1,j]*2;
pan[i,j]:=0;
end else
begin
pan[a,j]:=pan[i,j];
pan[i,j]:=0;
a:=a+1;
end;
end;
end;
*s*:begin
for j:=1 to 4 do
begin a:=4;
for i:=4 downto 1 do
if pan[i,j]<>0 then
if a=4 then
begin
pan[a,j]:=pan[i,j];
pan[i,j]:=0;a:=a-1;
end else
if pan[a-1,j]=pan[i,j] then
begin
pan[a-1,j]:=pan[a-1,j]*2;
pan[i,j]:=0;
end else
begin
pan[a,j]:=pan[i,j];
pan[i,j]:=0;a:=a-1;
end;
end;
end;
end;
yidong:=yidong+1;
writeoutpan;
check_for_biggest;
case check_for_full(pan) of
0:begin writeln(*You lose*);c:=true;writeln(*best:*,biggest_one);
writeln(*step:*,yidong);end;
1:qishi(1);
else qishi(2)
edn;
until c;
end;
begin
for i:=1 to 4 do
for j:=1 to 4 do
pan[i,j]:=0;
qishi(2);
biggest_one:=2;
writeoutpan;
play;
readln;
clrscr;
writeln(*Thank you for playing*);
write(*This game is designed by A.Snowland Yiserce*);
readln;
write(*Bye Bye!*);
readln;
end.