欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

C++實現(xiàn)五子棋小程序

 更新時間:2022年05月05日 11:49:08   作者:Mind-Explorer  
這篇文章主要為大家詳細介紹了C++實現(xiàn)五子棋游戲,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下

這是一個用C++寫的五子棋的小程序,關(guān)于A若是占據(jù)了已經(jīng)下了的位置處理的不好。改動 hight,與width ,與q[][] 可以將棋盤擴大。

#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];

 //以上為例,每次先看上面的5個,假如一樣,iter++;否則 break;再加上下的方向,同樣iter++;最后iter+1==5,WIN=true;并且退出
 //各個方向重復(fù),上下左右,斜著的。
 //贏了直接退出。
 //顯示是誰贏了


 //左右
 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()
 {
 //打印二維數(shù)組;每一行要打印上行號,以及列號
 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 << "輸入的行列數(shù)字已經(jīng)有人占據(jù)了" << 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 << "輸入的行列數(shù)字已經(jīng)有人占據(jù)了" << 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;


}

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • C語言進階可變參數(shù)列表

    C語言進階可變參數(shù)列表

    這篇文章主要為大家介紹了C語言進階可變參數(shù)列表的示例詳解有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步
    2022-02-02
  • C++詳細分析線程間的同步通信

    C++詳細分析線程間的同步通信

    線程間不通信的話,每個線程受CPU的調(diào)度,沒有任何執(zhí)行上的順序可言,線程1和線程2是根據(jù)CPU調(diào)度算法來的,兩個線程都有可能先運行,是不確定的,線程間的運行順序是不確定的,所以多線程程序出問題,難以復(fù)現(xiàn),本章我們就來了解線程間的同步通信
    2022-05-05
  • C/C++?Qt?Tree與Tab組件實現(xiàn)分頁菜單功能

    C/C++?Qt?Tree與Tab組件實現(xiàn)分頁菜單功能

    這篇文章主要介紹了C/C++?Qt?Tree與Tab組件實現(xiàn)分頁菜單功能,實現(xiàn)一個類似于樹形菜單欄的功能,當(dāng)用戶點擊菜單欄中的選項時則會跳轉(zhuǎn)到不同的頁面上,本文簡單給大家分享實現(xiàn)代碼,感興趣的朋友跟隨小編一起看看吧
    2021-11-11
  • C++17中std::byte的具體使用詳解

    C++17中std::byte的具體使用詳解

    這篇文章主要為大家詳細介紹了C++17中std::byte的具體使用,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2023-11-11
  • C++ 實現(xiàn)輸入含空格的字符串

    C++ 實現(xiàn)輸入含空格的字符串

    這篇文章主要介紹了C++ 實現(xiàn)輸入含空格的字符串,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-12-12
  • C/C++ 運用Npcap發(fā)送UDP數(shù)據(jù)包的完美過程

    C/C++ 運用Npcap發(fā)送UDP數(shù)據(jù)包的完美過程

    UDP 是一種無連接、輕量級的傳輸層協(xié)議,與 TCP 相比,它不提供可靠性、流控制和錯誤恢復(fù)機制,但卻更加簡單且具有較低的開銷,這篇文章主要介紹了C/C++ 運用Npcap發(fā)送UDP數(shù)據(jù)包,需要的朋友可以參考下
    2023-11-11
  • C語言中數(shù)組的使用詳解

    C語言中數(shù)組的使用詳解

    這篇文章主要為大家介紹了C語言中數(shù)組的使用,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2021-12-12
  • C++中的復(fù)制構(gòu)造函數(shù)詳解

    C++中的復(fù)制構(gòu)造函數(shù)詳解

    今天小編就為大家分享一篇關(guān)于關(guān)于C++復(fù)制構(gòu)造函數(shù)的實現(xiàn)講解,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2021-09-09
  • C語言實現(xiàn)哈希搜索算法及原理詳解

    C語言實現(xiàn)哈希搜索算法及原理詳解

    本文主要介紹了C語言實現(xiàn)哈希搜索算法及原理詳解,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-06-06
  • 詳解C++中常用的四種類型轉(zhuǎn)換方式

    詳解C++中常用的四種類型轉(zhuǎn)換方式

    這篇文章主要為大家詳細介紹了C++中常用的四種類型轉(zhuǎn)換方式:static_cast<Type>、dynamic_cast<Type>、const_case<Type>和reinterpret_cast,感興趣的可以了解一下
    2022-08-08

最新評論