2015-07-20 91 views
-1

我在嘗試使用mersenne twister的隨機等級生成器。下面的代碼(它纔剛剛開始,所以也沒有多大意義):無法將uniform_int_distribution <int>轉換爲int

Generator.h:

//Level generator 

#pragma once 

class GameMap 
{ 
public: 


    static int bgmap[256][256]; 
    static int fg1map[256][256]; 
    static int fg2map[256][256]; 
    static int genposx, genposy, width, height; 


    static std::mt19937 twister(int); 
    static std::uniform_int_distribution<int> dist1(int, int); 
    static std::uniform_int_distribution<int> dist2(int, int); 
    static std::random_device rd; 
    void Generate(int sizex, int sizey, int seed); 

    GameMap(); 
    ~GameMap(); 
}; 

Generator.cpp:

//#include <SFML/Graphics.hpp> 
#include <random> 
#include "Generator.h" 

GameMap::GameMap() 
{ 
    dist1(1, 8); 
    dist2(1, 248); 
} 


void GameMap::Generate(int sizex, int sizey, int seed = rd()) 
{ 
    twister(seed); 

    genposx = 1; 
    genposy = 1; 

    do 
    { 
     genposx = dist2(twister); 
     genposy = dist2(twister); 
     width = dist1(twister); 
     height = dist1(twister); 

    } while (whatever); 
} 

的問題是,我可以將uniform_int_distrubution轉換爲int。我得到智能感知錯誤信息:

​​

所有這些都是在這些線路上:

genposx = dist2(twister); 
genposy = dist2(twister); 
width = dist1(twister); 
height = dist1(twister); 

我在網上搜索答案失去了很多時間,但我無法找到任何東西。請幫忙。

+0

那麼,爲什麼你會試圖到'uniform_int_distribution '轉換爲'int'?這是沒有意義的。我不相信你通過在網上搜索答案而「失去了許多小時」,因爲有許多閱讀材料正確使用「uniform_int_distribution」,並且沒有任何代碼在代碼中表示。你甚至不會爲你的函數'dist1'和'dist2'提供正確數量的參數...... –

+0

爲什麼你的類中的所有東西都是靜態數據成員?你還沒有提供任何這些靜態成員的定義,並且由於某些奇怪的原因,當你聲明它們時,你一直在寫它們的構造函數參數的類型,所以編譯器認爲它們是成員函數聲明。這可能不是您想要聽到的答案,但您提出的錯誤表明您會從閱讀[C++書籍](https://stackoverflow.com/q/388242/241631)中受益匪淺。 – Praetorian

+0

@Praetorian - 不,這不是我不想聽到的答案。編程實際上並不是我感興趣的第一位,而且我也沒有將大部分空閒時間花在它上面。通常當我編程時我不使用對象,因爲它是針對硬件的低級編程,所以我是新手。我要買一本書,因爲看起來我對這件事所瞭解的東西是一個廢話。無論如何,謝謝你的回覆。 – Mohrcore

回答

4

我認爲你的主要問題是將你的類成員聲明爲函數。我做了簡要說明一些建議修改你的代碼:

class GameMap 
{ 
public: 

    // are these really meant to be static (one for all GameMap's) 
    // or do you want one set of map data for every GameMap object (non static)? 
    /*static*/ int bgmap[256][256]; 
    /*static*/ int fg1map[256][256]; 
    /*static*/ int fg2map[256][256]; 
    /*static*/ int genposx, genposy, width, height; 


    // static std::mt19937 twister(int); // function declaration? 
    std::mt19937 twister; 

    // probably you don't want static function declarations 
    std::uniform_int_distribution<int> dist1; //(int, int); 
    std::uniform_int_distribution<int> dist2; //(int, int); 
    static std::random_device rd; 
    void Generate(int sizex, int sizey, int seed); 

    GameMap(); 
    ~GameMap(); 
}; 

GameMap::GameMap() 
: dist1(1, 8) 
, dist2(1, 248) // initialize these here 
{ 
} 


void GameMap::Generate(int sizex, int sizey, int seed = rd()) 
{ 
    twister.seed(seed); // probably you meant this? 

    genposx = 1; 
    genposy = 1; 

    do 
    { 
     genposx = dist2(twister); 
     genposy = dist2(twister); 
     width = dist1(twister); 
     height = dist1(twister); 

    } while (whatever); 
} 
相關問題