六一游戏小游戏 五子棋

#include<iostream>

#include<vector>

using namespace std

class qipan

{

public:

 qipan() {}

 ~qipan() {};

 char left(int x, int y)

 {

 if (x >= 1 && x <= hight&& y - 1 >= 1 && y - 1 <= width)

 {

  return q[x][y - 1];

 }

 else {

  return 'F';

 }

 }

 char right(int x, int y)

 {

 if (x >= 1 && x <= hight&&y + 1 >= 1 && y + 1 <= width)

 {

  return q[x][y + 1];

 }

 else {

  return 'F';

 }

 }

 char up(int x, int y)

 {

 if (x - 1 >= 1 && x - 1 <= hight && y >= 1 && y <= width)

 {

  return q[x - 1][y];

 }

 else {

  return 'F';

 }

 }

 char down(int x, int y)

 {

 if (x + 1 >= 1 && x + 1 <= hight && y >= 1 && y <= width)

 {

  return q[x + 1][y];

 }

 else {

  return 'F';

 }

 }

 char left_up(int x, int y)

 {

 if (x - 1 >= 1 && x - 1 <= hight && y - 1 >= 1 && y - 1 <= width)

 {

  return q[x - 1][y - 1];

 }

 else {

  return 'F';

 }

 }

 char left_down(int x, int y)

 {

 if (x + 1 >= 1 && x + 1 <= hight && y - 1 >= 1 && y - 1 <= width)

 {

  return q[x + 1][y - 1];

 }

 else {

  return 'F';

 }

 }

 char right_up(int x, int y)

 {

 if (x - 1 >= 1 && x - 1 <= hight && y + 1 >= 1 && y + 1 <= width)

 {

  return q[x - 1][y + 1];

 }

 else {

  return 'F';

 }

 }

 char right_down(int x, int y)

 {

 if (x + 1 >= 1 && x + 1 <= hight && y + 1 >= 1 && y + 1 <= width)

 {

  return q[x + 1][y + 1];

 }

 else {

  return 'F';

 }

 }

 void init_cur() {

 h_cur = hang;

 l_cur = lie;

 }

 bool win()

 {

 bool WIN = false;

 char temp = q[hang][lie];

 

 //左右

 int count_lr = 1;

 init_cur();

 for (int i = 0; i < 4; i++)

 {

  if (left(h_cur, l_cur) == temp)

  count_lr++;

  else

  break;

  l_cur--;

 }

 init_cur();

 for (int i = 0; i < 4; i++)

 {

  if (right(h_cur, l_cur) == temp)

  count_lr++;

  else

  break;

  l_cur++;

 }

 if (count_lr == 5)

  WIN = true;

 

 int count_ud = 1;

 init_cur();

 for (int i = 0; i < 4; i++)

 {

  if (up(h_cur, l_cur) == temp)

  count_ud++;

  else

  break;

  h_cur--;

 }

 init_cur();

 for (int i = 0; i < 4; i++)

 {

  if (down(h_cur, l_cur) == temp)

  count_ud++;

  else

  break;

  h_cur++;

 }

 if (count_ud == 5)

  WIN = true;

 

 int count_lt = 1;

 init_cur();

 for (int i = 0; i < 4; i++)

 {

  if (left_up(h_cur, l_cur) == temp)

  count_lt++;

  else

  break;

  h_cur--;

  l_cur--;

 }

 init_cur();

 for (int i = 0; i < 4; i++)

 {

  if (left_down(h_cur, l_cur) == temp)

  count_lt++;

  else

  break;

  h_cur++;

  l_cur--;

 }

 if (count_lt == 5)

  WIN = true;

 int count_rt = 1;

 init_cur();

 for (int i = 0; i < 4; i++)

 {

  if (right_up(h_cur, l_cur) == temp)

  count_rt++;

  else

  break;

  h_cur--;

  l_cur++;

 }

 init_cur();

 for (int i = 0; i < 4; i++)

 {

  if (right_down(h_cur, l_cur) == temp)

  count_rt++;

  else

  break;

  h_cur++;

  l_cur++;

 }

 if (count_rt == 5)

  WIN = true;

 return WIN;

 }

 void qipan_array()

 {

 for (int i = 0; i < hight; i++) {

  for (int j = 0; j < width; j++)

  q[i][j] = '+';

 }

 }

 void prin_qipan()

 {

 for (int i = 0; i <hight; i++)

 {

  for (int j = 0; j < width; j++)

  {

  cout << q[i][j] << " ";

  }

  cout << i;

  cout << endl;

 }

 for (int j = 0; j <width; j++)

 {

  cout << j << " ";

 }

 cout << endl << "________________________________" << endl;

 }

 int xiaqi(int player)

 {

 if (player == 1) {

  q[hang][lie] = '*';

 }

 else if (player == 2)

 {

  q[hang][lie] = '@';

 }

 else

  cout << "input player is wrong" << endl;

 return 0;

 }

 int gethang(int h)

 {

 hang = h;

 return 0;

 }

 int getlie(int l)

 {

 lie = l;

 return 0;

 }

 int h_cur;

 int l_cur;

 const int hight = 9;

 const int width = 9;

 int hang; int lie;

 char q[9][9];

};

int main()

{

 int hang, lie;

 qipan wzq;

 wzq.qipan_array();

 cout << "A 与B 玩五子棋" << endl;

 cout << "A use * and B use @" << endl;

 cout << "________________________________" << endl;

 for (int i = 0; i < 15; i++) {

 cout << "A 输入行: ";

 cin >> hang;

 cout << "A 输入列: ";

 cin >> lie;

 if (wzq.q[hang][lie] != '+')

  cout << "输入的行列数字已经有人占据了" << endl;

 else {

  wzq.gethang(hang);

  wzq.getlie(lie);

  wzq.xiaqi(1);

  wzq.prin_qipan();

  if (wzq.win())

  {

  cout << "A is winner" << endl;

  exit(0);

  }

 }

 //b 开始了

 cout << "B 输入行: ";

 cin >> hang;

 cout << "B 输入列: ";

 cin >> lie;

 if (wzq.q[hang][lie] != '+')

  cout << "输入的行列数字已经有人占据了" << endl;

 else {

  wzq.gethang(hang);

  wzq.getlie(lie);

  wzq.xiaqi(2);

  wzq.prin_qipan();

  if (wzq.win())

  {

  cout << "B is winner" << endl;

  exit(0);

  }

 }

 }

 return 0;

}

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值