#include<iostream>
using namespace std;
//C/C++:
// -------------------- 数据设计 --------------------
/*
棋盘:
map[i][j]表示坐标(i,j)的值
0表示空地
1表示黑子
2表示白子
如: map[3][6] = 1 表示(3,6)的位置是黑子
*/
int map[19][19];
// 表示当前回合数 偶数表示黑棋落子 奇数表示白棋落子
// 如: flag = 20 表示当前是第[20]次落子 由黑方落子
int flag;
// -------------------- 数据设计 --------------------
// -------------------- service --------------------
/*
负责人: 张三
功能: 初始化游戏数据
将棋盘的值初始化为0
当前回合设为黑棋(flag设为0)
参数: void
返回值: void
*/
void init();
/*
*难点1
负责人: 张三
功能: 根据传入的坐标(map对应位置)和flag值 判断落点后是否获胜
参数:
x: 当前回合落子的x坐标
y: 当前回合落子的y坐标
返回值:
0表示没有获胜
1表示黑子胜利
2表示白子胜利
*/
int isWin(int x, int y);
/*
负责人: 张三
功能: 在指定位置落子
如果map[x][y]是空地 则修改map[x][y]的值:改为相应颜色(flag对应颜色)
否则不操作
参数:
x: 当前回合落子的x坐标
y: 当前回合落子的y坐标
返回值:
0表示落子失败 (棋盘已经有子)
1表示落子成功
*/
int playerMove(int x, int y);
// -------------------- service --------------------
// -------------------- view --------------------
/*
功能: 展示选项, 玩家可以在这里选择进入游戏, 进入设置或退出游戏
进入游戏: 调用游戏界面函数gameView();
进入设置: 敬请期待...
退出游戏: 调用exit(0);
*/
void menuView();
/*
负责人: 张三
功能: 根据map数组 打印游戏棋盘
参数: void
返回值: void
*/
void gameView_ShowMap();
/*
负责人: 张三
功能: 根据flag的值 打印游戏胜利界面 用户可以按任意键回到主菜单
参数: void
返回值: void
*/
void winView();
/*
*难点2
负责人: 张三
功能: 游戏界面整合
初始化游戏数据(调用函数init())
while(1){
打印游戏界面(调用函数gameView_ShowMap())
接收玩家坐标输入
落子(调用落子函数playerMove())
(如果落子失败 重新开始循环)
判断游戏是否胜利(调用胜利判断函数isWin())
(如果游戏胜利 调用胜利界面函数 然后结束当前界面)
切换玩家(修改flag值)
}
参数: void
返回值: void
*/
void gameView();
// -------------------- view --------------------
int main()
{
menuView();
return 0;
}
void init() {
map[19][19] = { 0 };//棋盘清空
flag = 0;//下棋步数 黑旗回合
//在此处完成代码
}
int isWin(int x, int y) {
int player = flag % 2 + 1;//黑旗是1,白棋是2
//行
int count = 1;//五子连棋为胜,count记录连起来的个数
int i = 1;//i相当于坐标 0为原点,为放置棋子的点
while (map[x][y - i] == player)//右边
{
count++;
i++;
}
i = 1;//左边
while (map[x][y + i] == player)
{
count++;
i++;
}
if (count == 5) return player;
//列
//注意初始化
count = 1;
i = 1;//i相当于坐标 0为原点,为放置棋子的点
while (map[x - i][y] == player)//上边
{
count++;
i++;
}
i = 1;//i从原点开始
while (map[x + i][y] == player)//下边
{
count++;
i++;
}
if (count == 5) return player;
//对角线
count = 1;
i = 1;//i相当于坐标 0为原点,为放置棋子的点
while (map[x - i][y - i] == player)//左上边
{
count++;
i++;
}
i = 1;//i从原点开始
while (map[x + i][y + i] == player)//右下边
{
count++;
i++;
}
if (count == 5) return player;//五子连棋,对应玩家胜利
//在此处完成代码
return 0;//没有胜利
}
int playerMove(int x, int y) {
if (map[x][y] != 0) return 1;
//如果这里有棋就不能再下棋,下子失败
else map[x][y] = flag % 2 + 1;
//黑棋下子为1,相应次数为偶数
//白棋下子为2,相应局数为奇数
return 0;//下子成功
//在此处完成代码
}
void menuView() {
cout << "1.进入游戏" << endl;
cout << "2.进入设置" << endl;
cout << "3.退出游戏" << endl;
cout << "请输入选项" << endl;
int select;
cin >> select;
switch (select)
{
case 1:
gameView();
break;
case 2:
cout << "敬请期待...";
break;
case 3:
exit(0);
}
//在此处完成代码
}
void gameView_ShowMap() {
cout << "###################棋盘##################" << endl;
cout << " ";
for (int i = 0; i <= 9; i++)
{
cout << i << " ";
}
for (int i = 10; i < 19; i++)
{
cout << i ;
}//棋盘最上面一行的坐标数据
cout << endl;
for (int i = 0; i < 19; i++)
{
if (i >= 0 && i <= 9) cout << " ";
cout << i << " ";//左边一列坐标的设计
for (int j = 0; j < 19; j++)
{
cout << map[i][j] << " ";
//打印棋盘,用空格间隔
}
cout << endl;//每行换行
}
//在此处完成代码
}
void winView() {
int player = flag % 2 + 1;
if (player == 1)
cout << "黑棋玩家胜利!游戏结束" << endl;
else if(player==2)
cout << "白棋玩家胜利!游戏结束" << endl;
//在此处完成代码
}
void gameView() {
init();
while (1) {
gameView_ShowMap();
int player = flag % 2 + 1;//1为黑方,2为白方
switch(player)//提示哪一方玩家下棋
{
case 1:
cout << "黑棋";
break;
case 2:
cout << "白棋";
break;
}
cout << "玩家落棋,请输入落棋位置坐标,并且以空格分开"
<< endl;
int x, y;
cin >> x >> y;//输入坐标值
int ret = 0;
int retWin = 0;
ret = playerMove(x, y);
//返回值为一,下棋失败重新开始下棋
if (ret == 1) continue;
else
{
retWin = isWin(x, y);
if (retWin != 0) //有人赢
{
winView();
break;//有人赢了跳出死循环
}
else flag ++;//切换玩家,下一轮下棋
}
}
//在此处完成代码
}
简易五子棋的制作c++控制台完成
最新推荐文章于 2024-11-02 16:10:25 发布
本文详细描述了一个基于C++实现的围棋游戏程序,包括数据结构设计、游戏逻辑(如初始化、落子判断、胜利条件检查)以及用户界面(菜单选择、棋盘显示、胜利界面)。
摘要由CSDN通过智能技术生成