C++實(shí)現(xiàn)五子棋小程序
這是一個(gè)用C++寫(xiě)的五子棋的小程序,關(guān)于A若是占據(jù)了已經(jīng)下了的位置處理的不好。改動(dòng) hight,與width ,與q[][] 可以將棋盤(pán)擴(kuò)大。
#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個(gè),假如一樣,iter++;否則 break;再加上下的方向,同樣iter++;最后iter+1==5,WIN=true;并且退出
//各個(gè)方向重復(fù),上下左右,斜著的。
//贏了直接退出。
//顯示是誰(shuí)贏了
//左右
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ù)組;每一行要打印上行號(hào),以及列號(hào)
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 開(kāi)始了
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;
}
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- C++面向?qū)ο髮?shí)現(xiàn)五子棋小游戲
- C++程序設(shè)計(jì)-五子棋
- C++實(shí)現(xiàn)五子棋游戲
- C++語(yǔ)言設(shè)計(jì)實(shí)現(xiàn)五子棋
- 基于C++實(shí)現(xiàn)五子棋AI算法思想
- 使用C++ MFC編寫(xiě)一個(gè)簡(jiǎn)單的五子棋游戲程序
- 基于c++ ege圖形庫(kù)實(shí)現(xiàn)五子棋游戲
- C++簡(jiǎn)單五子棋的AI設(shè)計(jì)實(shí)現(xiàn)
- C++實(shí)現(xiàn)簡(jiǎn)單五子棋游戲
- C++應(yīng)用實(shí)現(xiàn)簡(jiǎn)易五子棋游戲
相關(guān)文章
VisualStudio?禁用移動(dòng)文件到文件夾自動(dòng)修改命名空間功能
這篇文章主要介紹了VisualStudio?禁用移動(dòng)文件到文件夾自動(dòng)修改命名空間功能,文章底部給大家介紹了解決安裝VS2022時(shí),出現(xiàn)未能安裝包“Microsoft.VisualCpp.Redist.14,version=14.32.31332,chip”=x86,的問(wèn)題及解決方法,需要的朋友可以參考下2022-09-09
C語(yǔ)言對(duì)棧的實(shí)現(xiàn)基本操作
棧只允許在一端進(jìn)行插入或刪除操作的線性表。首先棧是一種線性表,但是限定這種線性表只能在某一端進(jìn)行插入和刪除操作,這篇文章主要介紹了C語(yǔ)言對(duì)棧的實(shí)現(xiàn)基本操作.2016-10-10
QT已有項(xiàng)目導(dǎo)入工程時(shí)注意事項(xiàng)圖文詳解
QT開(kāi)發(fā)這幾年大大小小項(xiàng)目做了不少,花了點(diǎn)時(shí)間對(duì)知識(shí)點(diǎn)總結(jié)整合了一部分,下面這篇文章主要給大家介紹了關(guān)于QT已有項(xiàng)目導(dǎo)入工程時(shí)注意事項(xiàng)的相關(guān)資料,需要的朋友可以參考下2023-11-11
C++ 中的INT_MAX,INT_MIN數(shù)值大小操作
這篇文章主要介紹了C++ 中的INT_MAX,INT_MIN數(shù)值大小操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2021-03-03
編寫(xiě)C語(yǔ)言程序進(jìn)行進(jìn)制轉(zhuǎn)換的問(wèn)題實(shí)例
這篇文章主要介紹了編寫(xiě)C語(yǔ)言程序進(jìn)行進(jìn)制轉(zhuǎn)換的問(wèn)題實(shí)例,文中附錄了一個(gè)各種進(jìn)制間的轉(zhuǎn)換程序代碼,需要的朋友可以參考下2015-08-08
C語(yǔ)言統(tǒng)計(jì)輸入字符各個(gè)字母出現(xiàn)頻率的解題思路
這篇文章主要介紹了C語(yǔ)言統(tǒng)計(jì)輸入字符各個(gè)字母出現(xiàn)頻率的解題思路,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2015-08-08
C++調(diào)用EasyX庫(kù)實(shí)現(xiàn)嫦娥奔月小游戲
這篇文章主要為大家詳細(xì)介紹了C++如何調(diào)用EasyX庫(kù)編寫(xiě)一個(gè)簡(jiǎn)單的嫦娥奔月小游戲,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以參考一下2023-09-09
C語(yǔ)言實(shí)現(xiàn)靜態(tài)存儲(chǔ)通訊錄的示例代碼
這篇文章主要為大家詳細(xì)介紹了如何利用C語(yǔ)言實(shí)現(xiàn)一個(gè)靜態(tài)存儲(chǔ)的通訊錄,文中的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)C語(yǔ)言有一定幫助,需要的可以參考一下2022-09-09

