NIM游戏对PC初学者
NIM game against PC beginner
我的教授给我布置了一个作业,让我写一个16局的尼姆游戏。
任务的一部分是使PC也采取行动。所以,我试图通过使用SRAND来解决问题,但PC选择了相同的行和相同数量的棒。更重要的是,PC也采取空行,并撞墙时,他采取零质量。
所以,这就是我已经做过的。任何想法吗?
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define row 4
int main()
{
int theChecker = 1, sticks[row] = {1,3,5,7}, stickSum, i, choiceRow, choiceStick, pcRow, pcStick;
char answer;
do
{
printf("nnt ************ n");
printf("t *THE NIM GAME* n");
printf("t ************ nn");
stickSum = sticks[0] + sticks[1] + sticks[2] + sticks[3];
while(stickSum > 0)
{
printf("nStick log:n");
for(i = 0; i < row; i++)
printf("Row %d: %dn", i+1, sticks[i]);
printf("n");
if(theChecker == 1)
{
printf("Choose a row: ");
scanf("%d", &choiceRow);
printf("Choose a sick: ");
scanf("%d", &choiceStick);
while((choiceRow <= 0) || (choiceRow > 4) || (sticks[choiceRow - 1] < choiceStick) || (choiceStick == 0))
{
printf("nt !!!ERROR!!!ntInvalid row or sticknnCheck stick log abovenn");
printf("Choose a row: ");
scanf("%d", &choiceRow);
printf("Choose a sick: ");
scanf("%d", &choiceStick);
}
sticks[choiceRow-1] -= choiceStick;
stickSum -= choiceStick;
}
else //pc move starts-------------------------------------------
{
while(((pcRow <= 0) || (pcRow > 4)) && sticks[choiceRow - 1] == 0)
{
time_t seconds;
seconds = 0;
time(&seconds);
srand((unsigned int)seconds);
pcRow = rand() % 4;
}
printf("PC ROW: %dn", pcRow);
while((sticks[pcRow - 1] < pcStick) || (pcStick == 0))
{
time_t seconds2;
seconds2 = 0;
time(&seconds2);
srand((unsigned int)seconds2);
pcStick = rand() % 16;
}
printf("PC STICK: %dnn", pcStick);
sticks[pcRow-1] -= pcStick;
stickSum -= pcStick;
}
if((theChecker == 1) && (stickSum == 0))
printf("nn!!!GAME OVER!!! You took the last stick!!!nn");
else if((theChecker == 2) && (stickSum == 0))
printf("nn!!!CONGRATS!!! You won!!!nn");
theChecker++;
if(theChecker == 3)
theChecker -= 2;
}
printf("nPress r to restart the game or any key to end the game: ");
scanf("%c", &answer);
printf("n");
}
while(answer == 'r');
return 0;`enter code here`
}
不要调用srand()
超过一次,它用于初始化随机种子,你总是初始化为相同的值,内部状态被重置一遍又一遍,总是产生相同的伪随机值。
我说你总是传递相同的种子,因为time()
具有秒分辨率,并且在一秒内,整个游戏完成并终止。
您只需要在程序开始时调用srand()
,以防止程序在不同的程序运行中选择相同的值,而不是在相同的运行。
相关文章:
- C++错误消息*成员参考.**初学者*
- EvtExportLogneneneba API正在将远程计算机的事件日志保存到远程PC本身.如何将其保存到主机
- 嵌套for循环C++的问题(初学者)
- 如何通过Conan和CMake找到用于pkg配置的.pc文件
- PC中的程序和PHONE中的本机描述应用程序之间的数据连接
- 我是 C++ 的初学者,我想知道如何在 2D 矢量中获取重复值
- 由于PC显示设置的更改,Qt小部件被部分剪裁
- 初学者如何使用标准::any_of?
- 初学者问题:如何使用这些晦涩难懂的命令,例如C++中的'RenderWindow'
- 如何在带有 gdb GUI 前端的 ARM gdbserver 的 PC 上执行远程 gdb 会话?
- 网站和C++程序在同一台 Linux PC 上的通信
- C++初学者:为什么我的编译器根据我的循环返回"name not found"?
- 初学者问题:如何访问此变量?
- 您好,我是C++初学者,有这种问题.它给了我倍增的错误
- 在另一台 PC 上执行程序时加载 SDL2 共享库时出错
- 图形初学者C++(跳过控制台)?
- 我是初学者,无法理解c ++程序中的以下错误
- 试图美化这个Arduino代码[初学者在这里]
- 初学者问题:C++指针/地址 - 和变量之后不是以前?
- NIM游戏对PC初学者