小编xan*_*xan的帖子

2048游戏的最佳算法是什么?

我最近偶然发现了2048游戏.您可以通过在四个方向中的任意一个方向上移动它们来合并类似的图块,以制作"更大" 每次移动后,新的图块会出现在随机空位置,其值为24.当所有框都被填充并且没有可以合并图块的移动时,或者您创建值为的图块时,游戏会终止2048.

一,我需要遵循明确的战略来实现目标.所以,我想为它编写一个程序.

我目前的算法:

while (!game_over) {
    for each possible move:
        count_no_of_merges_for_2-tiles and 4-tiles
    choose the move with a large number of merges
}
Run Code Online (Sandbox Code Playgroud)

我做的是在任何时候,我会尝试合并与价值观的瓷砖24,就是我努力24瓷砖,尽可能最小.如果我这样尝试,所有其他瓷砖自动合并,策略似乎很好.

但是,当我实际使用这个算法时,我只能在游戏结束前获得大约4000点.AFAIK的最高分数略高于20,000分,远高于我目前的分数.有比上面更好的算法吗?

algorithm logic artificial-intelligence 2048

1893
推荐指数
13
解决办法
91万
查看次数

为什么将Integer与int进行比较可以在Java中抛出NullPointerException?

观察这种情况让我非常困惑:

Integer i = null;
String str = null;

if (i == null) {   //Nothing happens
   ...                  
}
if (str == null) { //Nothing happens

}

if (i == 0) {  //NullPointerException
   ...
}
if (str == "0") { //Nothing happens
   ...
}
Run Code Online (Sandbox Code Playgroud)

因此,我认为首先执行装箱操作(即java尝试从中提取int值null),并且比较操作具有较低的优先级,这就是抛出异常的原因.

问题是:为什么在Java中以这种方式实现它?为什么拳击优先于比较参考?或者为什么他们没有null在拳击前实施验证?

目前,当NullPointerException使用包装的基元抛出它时看起来不一致,并且不会抛出真正的对象类型.

java boxing nullpointerexception

77
推荐指数
2
解决办法
3万
查看次数

如何使笔画宽度不受当前转换矩阵的影响

在SVG(和Canvas,Quartz,Postscript,...)中,变换矩阵影响路径坐标和线宽.有没有办法进行调整,以便线宽不受影响?也就是说,在下面的例子中,X和Y的比例是不同的,这使得正方形成为一个矩形,这是正常的,但它也使得两边的线条更宽.

  <g transform="rotate(30) scale(5,1) ">
      <rect x="10" y="10" width="20" height="20" 
            stroke="blue" fill="none" stroke-width="2"/>
  </g>
Run Code Online (Sandbox Code Playgroud)

矩形宽度缩放笔

我可以看到这在许多情况下都很有用,但有没有办法选择退出呢?我想我想要一个单独的笔TM或者能够将笔设置为CTM转换为圆形的椭圆,但我没有看到类似的东西.

缺乏这一点,我想我不得告诉SVG关于我的CTM而是自己转换坐标,这意味着将基元转换rect成它们的path等价物.

svg postscript coordinate-transformation

36
推荐指数
2
解决办法
1万
查看次数

Java:取消装箱整数时的空指针异常?

此代码导致空指针异常.我不知道为什么:

private void setSiblings(PhylogenyTree node, Color color) throws InvalidCellNumberException {
    PhylogenyTree parent = node.getParent();

    for (PhylogenyTree sibling : parent.getChildren()) {
        if (! sibling.equals(node)) {
            Animal animal = sibling.getAnimal();
            BiMap<PhylogenyTree, Integer> inverse = cellInfo.inverse();
            int cell = inverse.get(animal); // null pointer exception here
            setCellColor(cell, color);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

我在调试器中检查了它,并且所有局部变量都是非null.这怎么可能发生?BiMap来自Google Collections.

java nullpointerexception guava

20
推荐指数
1
解决办法
2万
查看次数

为什么在NullPointerException中使用默认值的Java Integer结果?

我是Java新手.我刚刚读到Java中的类变量有默认值.

我尝试了以下程序,并期望获得输出0,这是一个整数的默认值,但我得到了NullPointerException.

我错过了什么?

class Test{
    static Integer iVar;

    public static void main(String...args) {
        System.out.println(iVar.intValue());
    }
}
Run Code Online (Sandbox Code Playgroud)

java variables exception nullpointerexception default-value

17
推荐指数
1
解决办法
3万
查看次数

如何用线分割多边形?

如下所示,

是否可以用线分割多边形?(分为两个多边形).如果线没有一直穿过多边形,那么它将失败.

这可能吗?如果是这样,我该怎么做?

algorithm split polygon

16
推荐指数
2
解决办法
2万
查看次数

如何在<xs:all>中创建可选项?

我有这样的xsd.这些所有字段都可以存在或不存在,并且不可预测.

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">

<xs:element name="request">
<xs:complexType>
  <xs:all  minOccurs="0">
    <xs:element ref="field1"/>
    <xs:element ref="field2"/>
    <xs:element ref="field3"/>
    <xs:element ref="field4"/>
    <xs:element ref="field5"/>
  </xs:all>
</xs:complexType>
</xs:element>

</xs:schema>
Run Code Online (Sandbox Code Playgroud)

field4在xml中不存在,验证器说他正在等待field4,但他不应该这样说.那有什么不对?

w3cschools.com

<xs:element name="person">
<xs:complexType>
<xs:all minOccurs="0">
  <xs:element name="firstname" type="xs:string"/>
  <xs:element name="lastname" type="xs:string"/>
</xs:all>
</xs:complexType>
</xs:element>
Run Code Online (Sandbox Code Playgroud)

上面的例子表明"firstname"和"lastname"元素可以按任何顺序出现,每个元素可以出现零次或一次!

xsd

11
推荐指数
1
解决办法
6237
查看次数

哪些IDE对使用CUDA进行编程有很好的支持?

我开始用CUDA C编程.是否有任何IDE特别适合用它进行编程?

我正在使用Windows机器和个人macbook:D(但我想知道人们在linux和mac中使用了什么)

c windows ide macos cuda

10
推荐指数
2
解决办法
1万
查看次数

如何避免画布中填充区域之间的接缝?

当我填充HTML5 Canvas中的相邻区域或Quartz或GDI +等类似系统时,我在共享边缘看到一个浅色接缝.这是一个例子,(下面的代码):

在此输入图像描述

我想我明白发生了什么,但没有解决.每个边缘都是白色的抗锯齿,所以不是混合橙色和蓝色,而是混合了橙色,蓝色和白色.

基本上同样的问题之前已被问过,但讨论较少且没有好的答案.

一些解决方案涉及在接缝处绘制稍大一点的第一个形状或在接缝上画一条线不会妨碍透明度或奇怪形状组合等变化.

关闭抗锯齿避免了支持它的API的接缝,但当然,所有边缘都是锯齿状的.

有没有办法向渲染器提供关于预期邻接的提示?

<canvas id="myCanvas" width="300" height="150" /> <script>
var c=document.getElementById("myCanvas");
var ctx=c.getContext("2d");
ctx.beginPath();
ctx.moveTo(100,0);  ctx.lineTo(115,150);  ctx.lineTo(300, 50);
ctx.closePath();  ctx.fillStyle="#885533";  ctx.fill();

ctx.beginPath();
ctx.moveTo(0,50);  ctx.lineTo(100,0);  ctx.lineTo(115,150);
ctx.closePath();  ctx.fillStyle="#335588";  ctx.fill();
</script>  </body>  </html>
Run Code Online (Sandbox Code Playgroud)

graphics canvas

7
推荐指数
1
解决办法
1024
查看次数

使用vector <bool>迭代器的任何保证?

cppreferencevector<bool>专门化的迭代器是实现定义的,许多不支持特征ForwardIterator(因此RandomAccessIterator).

cplusplus增加了一个神秘的"最":

容器使用的指针和迭代器类型不一定既不是指针也不是符合迭代器,尽管它们应模拟大多数预期的行为.

我无法访问官方规范.迭代器是否保证了任何迭代器行为vector<bool>

更具体地说,如何编写符合标准的代码以在项目的中间插入项目vector<bool>?以下是我尝试过的几个编译器的工作原理:

std::vector<bool> v(4);
int k = 2;
v.insert(v.begin() + k, true);
Run Code Online (Sandbox Code Playgroud)

会永远吗?

c++ iterator vector

7
推荐指数
2
解决办法
324
查看次数