如何在网格中放置随机字符

时间:2018-05-26 09:45:20

标签: c++

我正在完成任务,我被困住了。这是我现在所做的一切代码

{
int s = 5;
char player = 'p';
char choice = 0;
int pr = 1,pc = 1;
int dr=2, dc=2;//diamond in row //dimond in column
int br = 3, bc = 3;
int score = 0;
int k = 1;
char d = 'D';
char b = 'B';


while (score != 25){

for (int i = 1; i <= s; i = i + 1){
    k = i;

        for (int j = 1; j <= s; j = j + 1){




            if (i == pr&&j == pc){


                cout << " " << player;
            }
            else if(i==dr&&j==dc){

                cout << " " << d;
            }
            else if (i == br&&j == bc){
                cout << " " << b;
            }
            else if (i == dr + 2 && j==dc + 2){
                cout << " " << d;
            }
            else if (i == br+2&&j == bc-1){
                cout << " " << b;
            }
            else{
                cout << " *";
            }






        }

        cout << endl;



    }


cout << "Enter your choice= ";
cin >> choice;
if (choice == 'd'||choice=='D'){
    pr = pr + 1;

}
if (choice == 'r' || choice == 'R'){
    pc = pc + 1;
}
if (choice == 'l' || choice == 'L'){
    pc = pc - 1;
}
if (choice == 'u' || choice == 'U'){
    pr = pr - 1;
}

}

}

现在,如果玩家位置继续d(钻石),则应该添加1来得分并为钻石生成新的随机位置。该位置也应该与旧的位置不重叠。 我想我必须使用srand功能,但我将如何使用它?任何人都可以指导我谢谢。

1 个答案:

答案 0 :(得分:0)

我实际上并没有理解你想做什么,但无论如何this is the documentation of srand function,并举了一个例子。

简而言之,您必须使用种子初始化伪随机数生成器(建议使用time(NULL)函数,因为返回特殊运行时值),然后只需获取伪随机数rand() % x其中x是您想要获取号码的范围的上限。

如果您提供更多信息,我很乐意为您提供帮助。

享受!

修改

char array[5][5];
srand(time(NULL));
for(int x = 0; x < 2; x++) {
    array[rand() % 5][rand() % 5] = 'B';
}

这将产生两个随机的&#39; B&#39;如你所知,在5x5矩阵中。

编辑2:

在两个嵌套for循环之前添加:

if (pc == dc && pr == dr) {
    score++;
    int newDc = rand() % 5;
    int newDr = rand() % 5;
    // keep generating random numbers until you find one that is different
    // from the previous one.
    while (newDc == dc) newDc = rand % 5;
    while (newDr == dr) newDr = rand % 5;
    // when you find it, change it
    dc = newDc;
    dr = newDr;
}

它能解决你的问题吗?