-1

C++でサイコロプログラムを作ろうとしています。そのプログラムには、「bool_if」と呼ばれる関数があります (なぜこのような名前を付けたのか聞かないでください。このプログラムは私のために作成したもので、変数/関数名を変更したくありません)。bool_if() で、rolled_die[] 配列内の要素が同じかどうかをチェックしたい。それが意味をなさない場合は申し訳ありませんが、これがソースコードです(私が欲しいものについてソースコードの一部にコメントしました):

#include <cstdlib> 
#include <ctime>
#include <iostream>
#include <unistd.h>
#include <fstream>

using namespace std;

void clear()
{
  cout<<"\033[2J\033[1;1H";
}

bool rolled_die[5];

void dice() {
  if (die[0] == die[1] || die[0] == die[2] || die[0] == die[3] || die[0] == die[4] || die[0] == die[5]) {
    rolled_die[0] = true
  }
  else if (die[1] == die[2] || die[1] == die[3] || die[1] == die[4] || die[1] == die[5]) {
    rolled_die[1] = true
  }
  else if (die[2] == die[3] || die[2] == die[4] || die[2] == die[5]) {
    rolled_die[2] = true
  }
  else if (die[3] == die[4] || die[3] == die[5]) {
    rolled_die[3] = true
  }
  else if (die[4] == die[5]) {
    rolled_die[4] = true
  }
}

int finished_score = 0

void bool_if {
  if (rolled_die[0] == true || rolled_die[1] == true || rolled_die[2] == true || rolled_die[3] == true || rolled_die[4] == true) {
    finished_score++;
  }
  /* In this part, I need to check if rolled_die[0] is equal to rolled_die[1], or rolled_die[2], etc all the way up to rolled_die[5]. */


int main()
{
  srand(time(0));

  int die[6] = { (rand()%6)+1,(rand()%6)+1, (rand()%6)+1, (rand()%6)+1, (rand()%6)+1, (rand()%6)+1 };
  int bet;

  ifstream a_file ("Score.txt");
  if ( !a_file.is_open() ) {
    clear();
    cout<<"Score file could not be loaded.  Maybe file doesn't exist?\n";
    return 0;
  }

  int score;
  a_file>> score;

  clear();
  cout<<"How much would you like to bet?\nRemember, you only have $"<< score <<"!\nEnter your bet: ";
  cin>> bet;

  if ( bet > score ) {
    clear();
    cout<<"You bet more money then you have!\n";
    return 0;
  }

  clear();
  cout<<"Rolling...\n";
  usleep(0.1 * 1000000);
  cout<<"First die: " << die[0] <<"\n";
  usleep(1.3 * 1000000);
  cout<<"Second die: " << die[1] <<"\n";
  usleep(0.3 * 1000000);
  cout<<"Third die: " << die[2] <<"\n";
  usleep(2 * 1000000);
  cout<<"Fourth die: " << die[3] <<"\n";
  usleep(0.3 *1000000);
  cout<<"Fifth die: " << die[4] <<"\n";
  usleep(1.2 * 1000000);
  cout<<"Sixth die: " << die[5] <<"\n";
  cout<<"\n\nPress enter to see how you fared.";
  cin.get();
  clear();

  return 0;
}

また、関数 dice() が機能しないことを教えてください。dice() でペアをチェックしたい。

4

2 に答える 2

1
int die[6] = { (rand()%6)+1,(rand()%6)+1, (rand()%6)+1, (rand()%6)+1, (rand()%6)+1, (rand()%6)+1 };

これを次のように置き換えます。

int die[6] = {1, 2, 3, 4, 5, 6};
std::random_shuffle(die, die+6);

以下のコードは私にとっては問題なく動作します: http://ideone.com/F4Eefj

于 2012-11-19T21:59:09.670 に答える
1

forループを使用すると、このコードを大幅に簡素化できます。たとえば、これは配列のすべてのインデックスをその後のすべてのインデックスと比較します (これは手動で行っているようです)。

#include <iostream>

int main(int argc, char** argv) {
    int die[] = { 4, 5, 6, 4, 5, 3 };
    const size_t LENGTH = 6;

    for(size_t i = 0; i < LENGTH; ++i) {
       for(size_t j = i + 1; j < LENGTH; ++j) {
           if(die[i] == die[j]) {
               std::cout << "Found a pair at (" << i << ", " << j << ")" << std::endl;
           }
       }
    }

    return 0;
}

あなたのdice()関数はこれを行うようですが、どこにも呼び出していません。

于 2012-11-19T21:59:15.073 に答える