五子棋的c++代码

news/2024/10/17 6:01:41/

设计步骤

很久没写这样的小游戏了,就是想写一个五子棋小游戏,以后代码有改进的地方我会继续发帖的,希望大家多多指导。游戏包含7个部分:五子棋的欢迎界面、棋盘初始化界面、游戏规则说明部分、棋子和棋盘显示界面、判断下棋点是否越界或已有棋子(我分成黑棋、白棋两个部分)、判断输赢。

游戏运行截图

在这里插入图片描述这里是最开始的欢迎界面
在这里插入图片描述这里是棋子在棋盘中每个点及其显示
后面的测试部分就上图了,大家可以自行测试,没毛病,哈哈哈哈!

游戏代码

#include “stdafx.h”
#include< iostream>
#include< cstdlib>
#include<Windows.h> //包含Sleep()函数
#include< algorithm>
using namespace std;
const int row = 15;
const int col = 15;
int ch;
bool flag = true;
bool game_over = false;
class Wuziqi
{
private:
char p[row][col];
int i1, j1;
public:
void welcome(); //欢迎界面
void initil(); //初始化界面
void expore(); //游戏说明
void show_qipan(); //显示棋及棋盘
void judgeOut_hei(); //判断下棋点是否越界或有棋子
void judgeOut_bai();
void judgeWin(); //判断输赢
};
void Wuziqi::welcome() //这个界面之后有个system(“cls”);
{
cout << “欢迎来到五子棋!” << endl;
cout << ’ ’ << “1.开始游戏” << endl;
cout << ’ ’ << “2.游戏说明” << endl;
cout << ’ ’ << “3.退出游戏” << endl;
cout << “请输入你的选择” << endl;
cin >> ch;
}
void Wuziqi::expore()
{
cout << “这个游戏是对战双方分别输入下棋点的x、y坐标来确定你所想落子的位置!” << endl;
cout << “向下为y轴,向右为x轴,i为行,j为列!” << endl;
cout << “对战双方交替下棋,先在横向或者纵向想连续有5个子的一方获胜!” << endl;
cout << “黑子先行落子” << endl;
cout << “玩家1的棋子用1表示!” << endl;
cout << “玩家2的棋子用2表示!” << endl;
}
void Wuziqi::initil()
{
for (int i = 0;i < row;i++)
for (int j = 0;j < col;j++)
p[i][j] = ‘_’;
for (int i = 0;i<row;i++)
{
for (int j = 0;j<col;j++)
cout << p[i][j];
cout << endl;
}
}
void Wuziqi::judgeOut_hei()
{
int x, y;
if (flag == true)
{
cout << “请输入你想下黑子的坐标:” << endl;
cin >> x;
cin >> y;
while (x < 0 || x >= row || y < 0 || y >= col)
{
cout << “你选择的落子点不再棋盘上,请重新输入一个棋盘上的点表示你要落子的位置:” << endl;
cin >> x;
cin >> y;
}
while (p[x][y] == ‘1’ || p[x][y] == ‘2’)
{
cout << “你落子的位置已有棋子,请重新下子:” << endl;
cin >> x;
cin >> y;
}
p[x][y] = ‘1’;
i1 = x;
j1 = y;
flag = false;
}
}
void Wuziqi::judgeOut_bai()
{
int x, y;
if (flag == false)
{
cout << “请输入你想下白子的坐标:” << endl;
cin >> x;
cin >> y;
while (x < 0 || x >= row || y < 0 || y >= col)
{
cout << “你选择的落子点不再棋盘上,请重新输入一个棋盘上的点表示你要落子的位置:” << endl;
cin >> x;
cin >> y;
}
while(p[x][y] == ‘1’ || p[x][y] == ‘2’)
{
cout << “你落子的位置已有棋子,请重新下子:” << endl;
cin >> x;
cin >> y;
}
p[x][y] = ‘2’;
i1 = x;
j1 = y;
flag = true; //落子之后,flag变为true;
}
}
void Wuziqi::judgeWin()
{
const int sz = 5;
for(int i=0;i<row;i++)
for (int j = 0;j < col;j++)
{
if (p[i][j] == ‘1’&&p[i][j + 1] == ‘1’&&p[i][j + 2] == ‘1’&&p[i][j + 3] == ‘1’&&p[i][j + 4] == ‘1’)
{
cout << “黑棋获胜” << endl;
game_over = true;
}
if (p[i][j] == ‘1’&&p[i + 1][j] == ‘1’&&p[i + 2][j] == ‘1’&&p[i + 3][j] == ‘1’&&p[i + 4][j] == ‘1’)
{
cout << “黑棋获胜” << endl;
game_over = true;
}
if (p[i][j] == ‘1’&&p[i + 1][j + 1] == ‘1’&&p[i + 2][j + 2] == ‘1’&&p[i + 3][j + 3] == ‘1’&&p[i + 4][j + 4] == ‘1’)
{
cout << “黑棋获胜” << endl;
game_over = true;
}
if (p[i][j] == ‘1’&&p[i + 1][j - 1] == ‘1’&&p[i + 2][j - 2] == ‘1’&&p[i + 3][j - 3] == ‘1’&&p[i + 4][j - 4] == ‘1’)
{
cout << “黑棋获胜” << endl;
game_over = true;
}
if (p[i][j] == ‘2’&&p[i][j + 1] == ‘2’&&p[i][j + 2] == ‘2’&&p[i][j + 3] == ‘2’&&p[i][j + 4] == ‘2’)
{
cout << “白棋获胜” << endl;
game_over = true;
}
if (p[i][j] == ‘2’&&p[i + 1][j] == ‘2’&&p[i + 2][j] == ‘2’&&p[i + 3][j] == ‘2’&&p[i + 4][j] == ‘2’)
{
cout << “白棋获胜” << endl;
game_over = true;
}
if (p[i][j] == ‘2’&&p[i + 1][j + 1] == ‘2’&&p[i + 2][j + 2] == ‘2’&&p[i + 3][j + 3] == ‘2’&&p[i + 4][j + 4] == ‘2’)
{
cout << “白棋获胜” << endl;
game_over = true;
}
if (p[i][j] == ‘2’&&p[i + 1][j - 1] == ‘2’&&p[i + 2][j - 2] == ‘2’&&p[i + 3][j - 3] == ‘2’&&p[i + 4][j - 4] == ‘2’)
{
cout << “白棋获胜” << endl;
game_over = true;
}
}
if (all_of(&p[0][0], &p[row][col], [](int x) {return(x == ‘1’ || x == ‘2’);}))
{
cout << “游戏结果是平局!” << endl;
game_over = true;
}
}
void Wuziqi::show_qipan()
{
for (int i = 0;i < row;i++)
{
for (int j = 0;j < col;j++)
cout << p[i][j];
cout << endl;
}
}
int _tmain(int argc, _TCHAR* argv[])
{
Wuziqi wz;
int x, y;
wz.welcome();
if (ch == 2)
{
wz.expore();
Sleep(1000);
}if (ch == 3)
game_over = true;
if (ch == 1)
{
system(“cls”);
wz.initil();
while (!game_over)
{
Sleep(1000);
system(“cls”);
wz.judgeOut_hei();
wz.show_qipan();
wz.judgeWin();
if (game_over == true)
break;
Sleep(1000);
system(“cls”);
wz.judgeOut_bai();
wz.show_qipan();
wz.judgeWin();
}
}
system(“pause”);
return 0;
}


http://www.ppmy.cn/news/563056.html

相关文章

简单的五子棋程序(可悔棋版和普通版)

//普通版 #include <stdio.h> #include <stdlib.h> #include <string.h> #include <windows.h> #define N 8 void display(char (* p)[N]) { system("cls"); int i,j; for(i0; i<N; i) { for(j0; j<N; j) …

五子棋网页版

基于js的五子棋教程 先给出问题&#xff0c;然后一步一步的去解决&#xff1b; 需要的知识&#xff1a;html,css,js基础语法&#xff0c;包括创建对象和继承属性&#xff1b;需要的知识很少&#xff0c;就是js的创建对象&#xff0c;如果不会就去看一下书吧。整个js都是基于一…

C++畅玩五子棋项目

畅玩五子棋项目说明 ​ 项目创建环境&#xff1a;Windows 10 Visual Studio 2019 ​ 棋子类型&#xff1a;实心●和空心◎。其中&#xff0c;棋子彩色棋子为当前落子 ​ 实现功能&#xff1a;对战模式&#xff08;人人对战&#xff09;、人机模式&#xff08;人机模式&…

基于C++的五子棋项目

一、五子棋项目介绍 1.游戏规则 五子棋是我国古代传统的黑白棋种之一&#xff0c;黑白双方依次落子&#xff0c;任意一方在棋盘上形成横向、纵向、斜向的连续相同颜色的五颗棋子的一方为胜。 2.完成界面显示 此次项目将不使用任何图形库进行开发&#xff0c;所有显示的内容都…

五子棋的设计与实现

术&#xff1a;Java等 摘要&#xff1a; 五子棋是一种两人对弈的纯策略型棋类游戏&#xff0c;非常容易上手&#xff0c;老少皆宜。为了更好的推广五子棋&#xff0c;研究简单的人工智能方式&#xff0c;运用Java开发五子棋游戏。主要包含了人机对战&#xff0c;棋盘初始化&…

五子棋-完美解决闪屏问题版-新增悔棋功能(C++实现)

在学C的时候&#xff0c;在做课设的时候做了一个五子棋课设&#xff0c;当时选这个就是觉得挺好玩的&#xff0c;想理解一下游戏是如何实现的&#xff0c;然后就入了这个坑。。。这个我没有用图形化界面来实现&#xff0c;完全是使用字符来实现。然后没有用图形化界面的最大的问…

C++、easyx组合的界面版五子棋(适合新手)

C、easyx组合的五子棋界面版&#xff08;适合新手&#xff09; 点击进入五子棋控制台版本 文章目录 C、easyx组合的五子棋界面版&#xff08;适合新手&#xff09;前言效果图一、游戏规则二、实现逻辑1.绘制棋盘2.落子2.1 鼠标坐标的获取2.2 绘制棋子 三、输赢判定算法四、其…

Windows编程 简易五子棋

简易五子棋&#xff0c;望指正 #include <windows.h> #include<commctrl.h> #define SIZE 20 UINT IDC_BUTTON1200; HWND hwnd; HPEN penbackCreatePen(PS_SOLID,1,RGB(0,0,0)); HPEN penback2CreatePen(PS_SOLID,1,RGB(255,255,255)); HBRUSH brushbackCreateSo…