• 20200710 千锤百炼软工人第五天


    今天很遗憾没有学习JAVA语言.........

    今天是完成的小学期之前的几个任务的完善工作

    在此附上源代码和运行截图

    #include<iostream>
    using namespace std;
    class Game
    {
    private:
     char status[9];               //字符数组
     char p, c;
     int score[9]; int fail, counter;//计算下了多少次
    public:
     ~Game(void);
     Game();
     void Print();
     int Cal(int, int);
     bool Judge(int, int, int);
     void play();
    };
    Game::~Game(void)
    {
    }
    Game::Game()
    {
     for (int i = 0; i<9; i++)
     {
      status[i] = '1' + i;        //按照ASCLL表
      counter = 0;
      fail = 0;
     }
    }
    void  Game::Print()            //打印棋盘
    {
     cout << "----------------" << endl;
     cout << " " << status[0] << " | " << status[1] << " | " << status[2] << endl;
     cout << "----------------" << endl;
     cout << " " << status[3] << " | " << status[4] << " | " << status[5] << endl;
     cout << "----------------" << endl;
     cout << " " << status[6] << " | " << status[7] << " | " << status[8] << endl;
    }
    int Game::Cal(int i, int j)    //计算分值
    {
     int result = 0;
     if ((status[i - 1] == c) && (status[j - 1] == c))
     {
      result = 50;
      fail = 2;                 //计算机赢
     }
     if ((status[i - 1] == p) && (status[j - 1] == p))
     {
      result = 25;
     }
     if (((status[i - 1] == c) && (status[j - 1]<'A')) || (status[i - 1]<'A') && (status[j - 1] == c))
      result = 10;
     if (((status[i - 1] == p) && (status[j - 1]<'A')) || (status[i - 1]<'A') && (status[j - 1] == p))
      result = 8;
     if ((status[i - 1]<'A') && (status[j - 1]<'A'))
      result = 4;
     return result;
    }
    bool Game::Judge(int i, int j, int k)  //判断是否为直线
    {
     return((status[i - 1] == p) && (status[j - 1] == p) && (status[k - 1] == p));
    }
    void Game::play()
    {
     int n = 0, max = 0, temp = 0, xu;
     Print();
     cout << "请选择下棋顺序(1、先下 2、后下):" << endl;
     cin >> xu;
     cout << "请选择棋子(‘X’或'O')" << endl;
     cin >> p;
     if (p = 'X')c = 'O';
     else c = 'X';
     if (xu == 2)
     {
      status[4] = c;
      counter++;
      Print();
      cout << "computer plays 5!" << endl;
     }
     do
     {
      do
      {
       cout << "请输入1--9:" << endl;
       cin >> n;
      } while (status[n - 1] >= 'A');
      status[n - 1] = p;
      counter++;
      if (Judge(1, 2, 3) || Judge(4, 5, 6) || Judge(7, 8, 9) || Judge(1, 4, 7) || Judge(2, 5, 8) || Judge(3, 6, 9) || Judge(1, 5, 9) || Judge(3, 5, 7))
       fail = 1;
      if ((fail == 0) && (counter<9))
       for (int k = 0; k<9; k++)                    // 暴力计算所有分值
        if (status[k]<'A')
        {
         switch (k)
         {
         case 0:score[0] = Cal(2, 3) + Cal(4, 7) + Cal(5, 9); break;
         case 1:score[1] = Cal(1, 3) + Cal(5, 8); break;
         case 2:score[2] = Cal(1, 2) + Cal(6, 9) + Cal(5, 7); break;
         case 3:score[3] = Cal(5, 6) + Cal(1, 7); break;
         case 4:score[4] = Cal(4, 6) + Cal(2, 8) + Cal(1, 9) + Cal(3, 7); break;
         case 5:score[5] = Cal(4, 5) + Cal(3, 9); break;
         case 6:score[6] = Cal(1, 4) + Cal(3, 5) + Cal(8, 9); break;
         case 7:score[7] = Cal(2, 5) + Cal(7, 9); break;
         case 8:score[8] = Cal(7, 8) + Cal(3, 6) + Cal(1, 5); break;
         }
        }
        else score[k] = -1;                      //已经有棋子了
        max = score[0];                          //假定最大分值
        for (int k = 1; k<9; k++)                   //暴力选出最大分值
         if (score[k]>max)
         {
          max = score[k];
          temp = k;
         }
        status[temp] = c;
        counter++;
        cout << "computer play" << temp + 1 << "!" << endl;
        Print();
     } while ((fail == 0) && (counter<9));
     if (fail == 0)cout << "和棋!" << endl;
     else if (fail == 1)
      cout << "你赢了!" << endl;
     else
      cout << "你输了!" << endl;
    }
    int main()
    {
     cout << "欢迎进入人机下棋游戏" << endl;
     Game G;
     G.play();
    }
     
  • 相关阅读:
    jstree 实现异步加载子节点
    创建 widget 窗口小组件
    Android(permission)常用权限
    Android 之 补间动画
    补间动画之 AlphaAnimation
    (转)向对象开发与面向组件开发的区别
    Android Drawable文件夹对应像素密度
    Notification(通知) 简单用法
    AlarmManager 用法
    关于IntentService 用法
  • 原文地址:https://www.cnblogs.com/huangmouren233/p/13280842.html
Copyright © 2020-2023  润新知