落書きノート

ふと自分が気になった事を書いてます

慣習 C++で問題を解く

今回はこんな感じです。1問だけしか解いてません。しかし、問題形式上長いものとなりました。2通りのパターンを作成せよと書いてあったので2回プログラムを作成しています。

#include <iostream>
#include <cstdlib>
#include <ctime>
#include <string>

using namespace std;

int main(void){
  int player;
  int cpu;
  int win = 0,lose = 0,draw = 0;
  string flag;
  string player_s;
  string cpu_s;

  srand(time(NULL));

  do{
    cout << "じゃんけんポン……[0]グー [1]チョキ [2]パー" << endl;
    cin >> player;

    cpu = rand() % 3;

    switch(player){
      case 0:
        player_s = "グー";
        break;
      case 1:
        player_s = "チョキ";
        break;
      case 2:
        player_s = "パー";
        break;
    }

    switch(cpu){
      case 0:
        cpu_s = "グー";
        break;
      case 1:
        cpu_s = "チョキ";
        break;
      case 2:
        cpu_s = "パー";
        break;
    }

    cout << "私は" << cpu_s << "で、あなたは" << player_s << "です。" << endl;

    if(player == 0 && cpu == 1 || player == 1 && cpu == 2 || player == 2 && cpu == 0){
      cout << "あなたの勝ちです。" << endl;
      win++;
    }else if(cpu == 0 && player == 1 || cpu == 1 && player == 2 || cpu == 2 && player == 0){
      cout << "あなたの負けです。" << endl;
      lose++;
    }else{
      cout << "引き分けです。" << endl;
      draw++;
    }

    cout << "もう一度? Yes(Y)/No(N):";
    cin >> flag;

  }while(flag == "Y" || flag == "y");

  cout << win << "勝" << lose << "敗" << draw << "分けでした。" << endl;

  return 0;
}

#include <iostream>
#include <cstdlib>
#include <ctime>
#include <string>

using namespace std;

int main(void){
  int player;
  int cpu;
  int win = 0,lose = 0,draw = 0;
  int cpu_win = 0;
  string flag;
  string player_s;
  string cpu_s;

  srand(time(NULL));

  do{
    cout << "じゃんけんポン……[0]グー [1]チョキ [2]パー" << endl;
    cin >> player;

    cpu = rand() % 3;

    switch(player){
      case 0:
        player_s = "グー";
        break;
      case 1:
        player_s = "チョキ";
        break;
      case 2:
        player_s = "パー";
        break;
    }

    switch(cpu){
      case 0:
        cpu_s = "グー";
        break;
      case 1:
        cpu_s = "チョキ";
        break;
      case 2:
        cpu_s = "パー";
        break;
    }

    cout << "私は" << cpu_s << "で、あなたは" << player_s << "です。" << endl;

    if(player == 0 && cpu == 1 || player == 1 && cpu == 2 || player == 2 && cpu == 0){
      cout << "あなたの勝ちです。" << endl;
      win++;
    }else if(cpu == 0 && player == 1 || cpu == 1 && player == 2 || cpu == 2 && player == 0){
      cout << "あなたの負けです。" << endl;
      lose++;
      cpu_win++;
    }else{
      cout << "引き分けです。" << endl;
      draw++;
    }

  }while(win < 3 && cpu_win < 3);

  if(win == 3){
    cout << "あなたの勝ちです。" << endl;
  }else if(cpu_win == 3){
    cout << "私の勝ちです。" << endl;
  }

  cout << win << "勝" << lose << "敗" << draw << "分けでした。" << endl;

  return 0;
}

見ての通りじゃんけんゲームです。基本的なところを抑えておけばこれぐらいは作れるということなのでしょう。本格的なゲームを作るにはライブラリを利用します。学校ではncursesを使ってタイピングゲームのようなものを作った覚えはありますが、今時はもう少しマシなライブラリを使った方が良いでしょう。おすすめはSDLです。2Dゲームを作るのだったらこれで十分です。

ncursesならUbuntuだとlibncurses-devを、SDLならlibsdl-devをインストールしてpkg-configやsdl-configを利用してコンパイルすれば一応は出来ます。WindowsMacだと他にも良いライブラリがあるので、ぜひ探してみてください。