2017-04-16 68 views
0

所以基本上我正在設計一個Rock-Paper-Scissors遊戲。Rock Paper Scissors在C++中循環的方法

我有三種方法(移動)根據他們的勝率選擇。我們稱之爲:methodA(),methodB(),methodC()

現在我需要每30輪執行一次檢查來檢查贏率。

我有這樣一段代碼:

Move nextMove(){ //Move is a enum including Rock,Paper,Scissors 
    Move makeMove; 
    vector<float> checkWinRate = {winRateA,winRateB,winRateC}; 
    //saving my win rates into a vector and sort it 
    std::sort(checkWinRate.begin(),checkWinRate.end()); 
    if (checkWinRate.back() == winRateA) 
     makeMove = methodA(); 
    else if (checkWinRate.back() == winRateB) 
     makeMove = methodB(); 
    else 
     makeMove = methodC(); 
    //choose methods according to win rates 
    return makeMove; 
} 

我現在正在做的是我讓它檢查我每次調用這個函數的時間。 但是,我的最終目標是讓它每30輪檢查一次,併爲接下來的30輪運行相同的方法並再次檢查。這聽起來很簡單,但我無法想象要做到這一點。

任何想法我應該在這裏做什麼?請幫忙。

+0

在你的方法創建一個靜態的整數,並增加它在每個方法調用之後還包括if語句用來檢查是否整數是三,如果它是代碼的if語句將運行然後設置整數回零 –

+0

如果檢查WinRate進行移動至關重要,那麼您需要每輪都進行一次,不是嗎?如果你運行同樣的方法30輪,而不檢查比率,你每次都會做同樣的動作。 –

+0

我的每一種方法都是用不同的學習公式來實現的,他們會根據他們從對手的動作中學到的東西來做出動作。我需要看看每個方法在一段時間內的做法,這就是爲什麼我需要每30輪檢查一次。你能在關於靜態整數增量的答案中寫一個簡短的代碼嗎?我想過這個,但我無法得到它的工作。請幫忙。 –

回答

0

你可以創建一個整數,每輪增加一個整數,當它達到29(30輪)時,你做檢查並使其再次爲零。 你的numOfRounds首先是29,爲了能夠在開始時輸入任何數字。

Move nextMove(static int numOfRounds){ 
    //... 
    if ((checkWinRate.back() == winRateA) && numOfRounds == 29) 
     makeMove = methodA(); 
     numOfRounds = 0; 
    //... 
    else{ 
     /*You need to choose a method here, my question is, will it 
     break your original logic? I would choose randomly.*/ 
     numOfRounds++; 
    } 
    return makeMove; 
} 
+0

不完全是我想要做的,但我認爲它結束了,並決定每輪只做一次檢查。它讓我的生活更輕鬆,並且謝謝! –

+0

這似乎更好。由於我的回答沒有解決您的問題,我不能要求您接受它,但它會很好。 –