小编Mat*_*ian的帖子

如何生成一个不产生超过X个连续元素的随机数序列

好吧,我真的不知道如何正确地解决这个问题,因为我几乎不知道如何用一句话描述我想要的东西而且我道歉.

让我直截了当地说你可以跳过剩下的原因我只是想表明我已经尝试了一些东西而不是来这里随心所欲地提问.

我需要一个产生6个随机数的算法,在该序列中它不会产生超过2个连续数.

例如:3 3 4 4 2 1

^罚款.

例如:3 3 3 4 4 2

^ NO!没有!错误!

显然,我不知道如何在不经常绊倒自己的情况下如何做到这一点.

是否有可以执行此操作的STL或Boost功能?或者也许这里有人知道如何为它编制算法.那将是真棒.

我正在尝试做什么以及我尝试过什么.(你可以跳过的部分)

这是用C++编写的.我正试图制作一个Panel de Pon/Tetris攻击/益智联盟,无论如何克隆练习.游戏有一个6块的行,3个或更多的匹配块会破坏块.这是一段你不熟悉的视频.

当一个新行来自底部时,它不能与3个水平匹配块一起出现,否则它将自动消失.我不想横向的东西.虽然垂直很好.

我试图完成这一点,看来我做不到.当我开始游戏时,块的块丢失了,因为它不应该检测到匹配.正如你所看到的,我的方法很可能很重,而且太复杂了.

enum BlockType {EMPTY, STAR, UP_TRIANGLE, DOWN_TRIANGLE, CIRCLE, HEART, DIAMOND};
vector<Block> BlockField::ConstructRow()
{
    vector<Block> row;

    int type = (rand() % 6)+1;

    for (int i=0;i<6;i++)
    {
        row.push_back(Block(type));
        type = (rand() % 6) +1;
    }

    // must be in order from last to first of the enumeration
    RowCheck(row, diamond_match);
    RowCheck(row, heart_match);
    RowCheck(row, circle_match); …
Run Code Online (Sandbox Code Playgroud)

c++ random boost stl

6
推荐指数
3
解决办法
1525
查看次数

断言不会显示错误消息

我在Visual C++ 2005中遇到了一个奇怪的断言问题.我试图将断言引入我的程序中,无论我尝试使用什么断言(assert()或BOOST_ASSERT_MSG),它都会给出完全相同的错误消息,告诉我除了发生调试错误之外别无其他.

调试错误!

计划:......

此应用程序已请求Runtime以不寻常的方式终止它.请联系支持团队获取更多信息.

(按"重试"以调试应用程序)

这是我正在使用的提升断言

BOOST_ASSERT_MSG(deathRow.size() >= 3, "There are less than 3 blocks being deleted!");
Run Code Online (Sandbox Code Playgroud)

是的,它给出了完全相同的错误消息:

assert(deathRow.size() >= 3 && "There are less than 3 blocks being deleted");
Run Code Online (Sandbox Code Playgroud)

无论我正在使用什么项目,无论是新的还是旧的,都会发生不伦不类的错误.

我不知道为什么.我知道我之前在另一个程序中使用过断言并且没有这个问题.帮助将不胜感激.

c++ message assert

4
推荐指数
1
解决办法
425
查看次数

NASM x86_64在32位模式下组装:为什么该指令产生RIP相对寻址代码?

[bits 32]
    global _start

    section .data
    str_hello       db  "HelloWorld", 0xa
    str_hello_length    db      $-str_hello

    section .text

    _start:

        mov ebx, 1              ; stdout file descriptor
        mov ecx, str_hello      ; pointer to string of characters that will be displayed        
        mov edx, [str_hello_length] ; count outputs Relative addressing
        mov eax, 4              ; sys_write
        int 0x80                ; linux kernel system call

        mov ebx, 0  ; exit status zero
        mov eax, 1  ; sys_exit
        int 0x80    ; linux kernel system call
Run Code Online (Sandbox Code Playgroud)

这里的基本要点是我需要将hello字符串的长度传递给linux的sys_write系统调用.现在,我很清楚我可以使用EQU,它会工作正常,但我真的想了解这里发生了什么.

所以,基本上当我使用EQU时,它会加载值,这很好.

str_hello_length equ $-str_hello …
Run Code Online (Sandbox Code Playgroud)

linux assembly x86-64 nasm relative-addressing

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

标签 统计

c++ ×2

assembly ×1

assert ×1

boost ×1

linux ×1

message ×1

nasm ×1

random ×1

relative-addressing ×1

stl ×1

x86-64 ×1