请你们教我怎么玩2048 std2048.c/std2048.cpp/std2048.pas
题目描述
shy是一个很无聊的人。他最近上课听不懂,在下面拿手机玩起了2048!【非专业人员或低于12周岁的儿童请勿模仿】
啊,shy好渣啊,几天下来不靠悔步最多只玩出过4096。【听说靠悔步能玩出65536?!】其实大多数情况还是手贱,一不小心划下屏幕什么的就全●完●了。
shy是个很懒的人Σ( ° △ °|||)︴现在shy从课堂回来后,想写一个AI,帮助他自动完成2048。但是shy还要准备选考,于是他把问题推荐给了正在(潜)水贴吧的你。
输入格式
shy准备了一个std2048.pas的Pascal库。这个库有这么几个量是公开的:
常量:
UP=1,LEFT=2,DOWN=3,RIGHT=4[longint]表示方向
变量:
Step[longint]表示历经的操作数
Show[array[1..4,1..4]of longint]表示现在的矩阵状态,Show[i,j]=0表示这个格子为空,否则这个格子是一个2的幂次的数
Game[boolean]表示游戏是否结束
函数过程:
init[procedure]初始化游戏
NextNumber[function=longint]返回下一个随机出现的数是2还是4
MoveAble(o)[function=boolean]返回是否可以向这个方向移动,例如:MoveAble(UP)=true表示现在向上移动是合法的
Move(o)[procedure]向这个方向移动,例如:Move(Left)
Print[procedure]输出Show矩阵的值,4×4个数
MaxGrid[function=longint]返回当前Show矩阵中最大的2的幂次的数
我们可以写一些AI来做这个2048。比如:
std2048Test1.pas
uses std2048;
var
Now,Max:longint;
begin
repeat
init;
while Game do Move(random(4)+1);
Now:=MaxGrid;
if Now>Max then Max:=Now;
writeln('Now=',Now:5,' Max=',Max:5)
until false
end.
这个程序写的内容意思就是,随机往某个方向移动!我们发现他的最大值一般在64~128漂浮,偶尔能到256,历史最大值是512。

我们可以继续来一些贪心,比如优先往上移,无法往上移就往左移,无法往左就往右,无法往右就往下。比如:
std2048Test2.pas
uses std2048;
var
Now,Max:longint;
begin
repeat
init;
while Game do
if MoveAble(UP) then Move(Up) else
if MoveAble(LEFT) then Move(Left) else
if MoveAble(RIGHT) then Move(RIGHT) else
Move(DOWN);
Now:=MaxGrid;
if Now>Max then Max:=Now;
writeln('Now=',Now:5,' Max=',Max:5)
until false
end.
这个的历史最大值也是512(当然跑久点就不一定了)。但是我们可以说他比上一个随机程序好,因为平均情况下他的最大值是在128~256浮动,偶尔会降到64。

利用这个std2048.pas的库,你能编出怎样高超的AI呢?\(≧▽≦)/
链接下载到2楼,有疑问可以回复。
上面的代码请谨慎复制,为了保留格式空格是全角的。将下载的库中std2048.pas编译一下,即可调用该库。类似交互式编程题一道。
当然,如果有时间,可以用这个库作为逻辑基础开发一个2048的小游戏。
题目描述
shy是一个很无聊的人。他最近上课听不懂,在下面拿手机玩起了2048!【非专业人员或低于12周岁的儿童请勿模仿】
啊,shy好渣啊,几天下来不靠悔步最多只玩出过4096。【听说靠悔步能玩出65536?!】其实大多数情况还是手贱,一不小心划下屏幕什么的就全●完●了。
shy是个很懒的人Σ( ° △ °|||)︴现在shy从课堂回来后,想写一个AI,帮助他自动完成2048。但是shy还要准备选考,于是他把问题推荐给了正在(潜)水贴吧的你。
输入格式
shy准备了一个std2048.pas的Pascal库。这个库有这么几个量是公开的:
常量:
UP=1,LEFT=2,DOWN=3,RIGHT=4[longint]表示方向
变量:
Step[longint]表示历经的操作数
Show[array[1..4,1..4]of longint]表示现在的矩阵状态,Show[i,j]=0表示这个格子为空,否则这个格子是一个2的幂次的数
Game[boolean]表示游戏是否结束
函数过程:
init[procedure]初始化游戏
NextNumber[function=longint]返回下一个随机出现的数是2还是4
MoveAble(o)[function=boolean]返回是否可以向这个方向移动,例如:MoveAble(UP)=true表示现在向上移动是合法的
Move(o)[procedure]向这个方向移动,例如:Move(Left)
Print[procedure]输出Show矩阵的值,4×4个数
MaxGrid[function=longint]返回当前Show矩阵中最大的2的幂次的数
我们可以写一些AI来做这个2048。比如:
std2048Test1.pas
uses std2048;
var
Now,Max:longint;
begin
repeat
init;
while Game do Move(random(4)+1);
Now:=MaxGrid;
if Now>Max then Max:=Now;
writeln('Now=',Now:5,' Max=',Max:5)
until false
end.
这个程序写的内容意思就是,随机往某个方向移动!我们发现他的最大值一般在64~128漂浮,偶尔能到256,历史最大值是512。

我们可以继续来一些贪心,比如优先往上移,无法往上移就往左移,无法往左就往右,无法往右就往下。比如:
std2048Test2.pas
uses std2048;
var
Now,Max:longint;
begin
repeat
init;
while Game do
if MoveAble(UP) then Move(Up) else
if MoveAble(LEFT) then Move(Left) else
if MoveAble(RIGHT) then Move(RIGHT) else
Move(DOWN);
Now:=MaxGrid;
if Now>Max then Max:=Now;
writeln('Now=',Now:5,' Max=',Max:5)
until false
end.
这个的历史最大值也是512(当然跑久点就不一定了)。但是我们可以说他比上一个随机程序好,因为平均情况下他的最大值是在128~256浮动,偶尔会降到64。

利用这个std2048.pas的库,你能编出怎样高超的AI呢?\(≧▽≦)/
链接下载到2楼,有疑问可以回复。
上面的代码请谨慎复制,为了保留格式空格是全角的。将下载的库中std2048.pas编译一下,即可调用该库。类似交互式编程题一道。
当然,如果有时间,可以用这个库作为逻辑基础开发一个2048的小游戏。