さて、私はしばらく前にラボを割り当てられました。そこでは、コンウェイのライフゲームの非常に単純化されたバージョンを作成することになっています。
ルール:貪欲なスライム(Rで指定)は、それに隣接する(Sで指定)遅いスライム(真上、真下、または横)を食べます。貪欲なスライムが遅いスライムを「食べた」と、4つの新しい遅いスライムがボード上にランダムに配置される新しいタイムステップが発生します。私は4つのタイムステップを表す必要があります。
残念ながら、私のコードは正常に機能しません。何らかの理由で、私の4つの遅いスライムは各タイムステップの後にスポーンしません。私はコードを奴隷にしましたが、バグに資金を提供することはできません。助けてください。
コード:
#include "stdafx.h"
#include <cstdlib>
#include <ctime>
#include <iostream>
using namespace std;
//Struct
struct Creatures
{
public: int type;
public: int age;
public: double weight;
private: double length;
};
//Prototypes
void printLake(Creatures Sludge[10][10]);
void fourNew(Creatures Sludge [10][10], Creatures slowSlime);
void dispatch(Creatures Sludge[10][10], Creatures water);
int main()
{
//creating the slimes, the water, and the grid (called sludge)
Creatures Sludge[10][10];
Creatures slowSlime;
slowSlime.type = 1;
Creatures ravenousSlime;
ravenousSlime.type = 2;
Creatures water;
water.type = 3;
//Initialize Lake
for (int row = 0; row<10; row++)
{
for (int col = 0; col<10; col++)
{
Sludge[row][col] = water;
}
}
//Random Distribution of Slow Slimes
srand(time(0));
int high = 10;
int low = 0;
int i = 0;
while(i<15)
{
int row = rand()% (high - low + 1) + low;
int col = rand()% (high - low + 1) + low;
if (Sludge[row][col].type == 3)
{
Sludge[row][col] = slowSlime;
i++;
}
}
//Random Distribution of Ravenouse Slimes
int c = 0;
while (c<5)
{
int row = rand()% (high - low + 1) + low;
int col = rand()% (high - low + 1) + low;
if (Sludge[row][col].type ==3)
{
Sludge[row][col] = ravenousSlime;
c++;
}
}
//Time steps
cout<<"Step 1"<<endl;
printLake(Sludge);
dispatch(Sludge, water);
fourNew(Sludge, water);
cout<<endl;
cout<<"Step 2"<<endl;
printLake(Sludge);
dispatch(Sludge, water);
cout<<endl;
fourNew(Sludge, water);
cout<<"Step 3"<<endl;
printLake(Sludge);
dispatch(Sludge, water);
cout<<endl;
fourNew(Sludge, water);
cout<<"Step 4"<<endl;
printLake(Sludge);
dispatch(Sludge, water);
fourNew(Sludge, water);
cout<<endl;
int j;
cin>>j;
return 0;
}
void printLake(Creatures Sludge[10][10])
{
for (int row = 0; row<10; row++)
{
for (int col = 0; col<10; col++)
{
if (Sludge[row][col].type == 1)
{
cout<<"S ";
}
if (Sludge[row][col].type == 2)
{
cout<<"R ";
}
if (Sludge[row][col].type == 3)
{
cout<<"_ ";
}
}
cout<<endl;
}
}
void fourNew(Creatures Sludge [10][10], Creatures slowSlime)
{
srand(time(0));
int high = 10;
int low = 0;
int i = 0;
while(i<4)
{
int row = rand()% (high - low + 1) + low;
int col = rand()% (high - low + 1) + low;
if (Sludge[row][col].type == 3)
{
Sludge[row][col] = slowSlime;
i++;
}
}
}
void dispatch(Creatures Sludge[10][10], Creatures water)
{
for (int row = 0; row<10; row++)
{
for(int col = 0; col<10; col++)
{
if(Sludge[row][col].type == 2)
{
if(Sludge[row][col-1].type == 1)
{
Sludge[row][col-1] = water;
}
if(Sludge[row][col+1].type == 1)
{
Sludge[row][col+1] = water;
}
if(Sludge[row-1][col].type == 1)
{
Sludge[row-1][col] = water;
}
if(Sludge[row+1][col].type == 1)
{
Sludge[row+1][col] = water;
}
}
}
}
}
出力:
更新された出力:
ステップ4でいくつかの新しい遅いスライムが表示されますが、ステップ2では表示されません...