#include <iostream>
#include <conio.h>
void main()
{
const int w = 20;
const int h = 20;
int map[w*h]={};//0空子 1黑子 2白子
bool black = true;//true当前该黑方落子 false当前该白方落子
//光标
int px = 0;
int py = 0;
while (true)
{
system("cls");
//绘制
for (int y = 0; y < h; ++y)
{
for (int x = 0; x < w; ++x)
{//●○
if (x == px && y == py)
std::cout<<"¤";
else if (map[x+y*w] == 1)
std::cout<<"黑";
else if (map[x+y*w] == 2)
std::cout<<"白";
else if (x == 0 && y == 0)
std::cout<<"┏";
else if (x == w-1 && y == 0)
std::cout<<"┓";
else if (x == 0 && y == h-1)
std::cout<<"┗";
else if (x == w-1 && y == h-1)
std::cout<<"┛";
else if (y == 0)
std::cout<<"┳";
else if (y == h-1)
std::cout<<"┻";
else if (x == 0)
std::cout<<"┣";
else if (x == w-1)
std::cout<<"┫";
else
std::cout<<"╋";
}
std::cout<<std::endl;
}
//逻辑
int a = _getch();
if (a == 'w' || a == 'W')
{
if (py > 0)
py--;
}
else if (a == 's' || a == 'S')
{
if (py < h-1)
py++;
}
else if (a == 'a' || a == 'A')
{
if (px > 0)
px--;
}
else if (a == 'd' || a == 'D')
{
if (px < w-1)
px++;
}
//落子
else if (a == ' ')
{
//只有空子的地方才能落子
if (map[px+py*w] == 0)
{
map[px+py*w] = black?1:2;
//胜负判断
bool win = false;//胜利与否
//横向判断
int count = 0;//计数的
for (int x = px+1; x < w; ++x)
{
if (map[x + py*w] == map[px+py*w])
count++;
else
break;
}
for (int x = px-1; x >= 0; --x)
{
if (map[x + py*w] == map[px+py*w])
count++;
else
break;
}
if (count >= 4)
win = true;
if (!win)
{
//竖向
count = 0;
for (int y = py+1; y < h; ++y)
{
if (map[px+y*w] == map[px+py*w])
count++;
else
break;
}
for (int y = py-1; y >= 0; --y)
{
if (map[px+y*w] == map[px+py*w])
count++;
else
break;
}
if (count >= 4)
win = true;
}
if (!win)
{
//斜向的
count = 0;
for (int x = px-1, y = py-1;
x >= 0 && y >= 0; x--,y--)
{
if (map[x+y*w] == map[px+py*w])
count++;
else
break;
}
for (int x = px+1, y = py+1;
x < w && y < h; x++,y++)
{
if (map[x+y*w] == map[px+py*w])
count++;
else
break;
}
if (count >= 4)
win = true;
}
if (!win)
{
count = 0;
for (int x = px+1,y = py-1;
x < w && y >= 0;
x++, y--)
{
if (map[x+y*w] == map[px+py*w])
count++;
else
break;
}
for (int x = px-1,y = py+1;
x >= 0 && y < h;
x--, y++)
{
if (map[x+y*w] == map[px+py*w])
count++;
else
break;
}
if (count >= 4)
win = true;
}
if (win)
{
std::cout<<(black?"黑方胜利":"白方胜利");
system("pause");
//还原数据为初始的数据
for(int i = 0;i < w*h; ++i)
map[i] = 0;
px = 0;
py = 0;
black = true;
}
//变换棋子颜色
black = !black;
}
}
}
}
极简版本:五子棋初
猜你喜欢
转载自blog.csdn.net/weixin_43374319/article/details/83794497
今日推荐
周排行