不多说了,bug一堆,没经常写这么长的代码还真的不能注意到某些地方,毕竟半天(总时间,大约11个小时多一点,改bug的时间用了好久。。。)写出来的东西,目前写到了横向判断胜负,放码了。总算个可以运行的五子棋吧…还是我太菜了哈哈哈哈哈哈…
#include<stdlib.h>
#include<stdio.h>
#include<iostream>
#include<conio.h>
#include<Windows.h>
using namespace std;
#define size 18 //棋盘的大小,正方形
//---------------------------游戏变量-----------------------
int message_check[size][size]; //棋盘信息 //黑1,白2,空0
int x, y; //光标坐标
int conut; //回合数
int nowplayer; //当前玩家
//---------------------------函数声明-----------------------
int Rungame(); //游戏架构
void Init(); //一些变量的初始化
void drawcheck(); //绘制棋盘
int Putcheck(); //下棋子,黑子先下
int Inwin(); //输赢函数,1为黑赢,0为白赢
int main() {
system("mode con cols=50 lines=20"); //界面大小
system("color 07"); //界面颜色
while (1)
{
Rungame();
}
}
int Rungame() {
//界面初始化
Init();
int nWinner;
while (1) {
//绘制棋盘
drawcheck();
//从键盘读取
char ch = _getch();
switch (ch) {
case 27: //Esc
exit(0);
break;
case 32://空格(下棋子)
if (Putcheck() == 1) { //交换角色
nWinner = Inwin();
nowplayer = 3 - nowplayer;
if (nWinner == 1) {
MessageBox(NULL, L"黑方赢", L"五子棋", MB_OK);
}
if (nWinner == 0) {
MessageBox(NULL, L"白方赢", L"五子棋", MB_OK);
}
}
break;
case 72: //Up
x--;
if (x < 0) {
x = size - 1;
}
break;
case 80: //down
x++;
if (x > size - 1) {
x = 0;
}
break;
case 75: //left
y--;
if (y < 0) {
y = size - 1;
}
break;
case 77: //Right
y++;
if (y > size - 1) {
y = 0;
}
break;
}
}
return 0;
}
void Init()
{
//初始化对局
conut = 0;
memset(message_check, 0, sizeof(message_check)); //棋盘清零
x = size / 2; //光标横坐标
y = size / 2; //光标纵坐标
nowplayer = 1; //黑子先下
}
void drawcheck()
{
system("cls"); //清屏
//绘制棋盘函数
for (int i = 0; i < size; i++)
{
for (int k = 0; k < size; k++)
{
if (message_check[i][k] == 1) {
printf("○"); //黑棋子的打印
}
else if (message_check[i][k] == 2) {
printf("●"); //白棋子的打印
}
else if (i == x && k == y) {
printf("╬ ");
}
else {
printf("┼ ");
}
}
printf("\n");
}
}
int Putcheck() //下棋函数
{
if (message_check[x][y] == 0) {
message_check[x][y] = nowplayer;
return 1;
}
else {
return 0;
}
}
int Inwin() //1黑 0白
{
int numx = 1; //水平方向
int numy = 1; //竖直方向
int zhengxie = 1; //正斜
int fanxie = 1; //反斜
int nowwin = nowplayer;
//--------------------------水平方向------------------------------
for (int i = 1; i < 5; i++) {
if (y + i < size && message_check[x][y + i] == nowplayer) {
numx++;
}
else {
break;
}
}
for (int i = 1; i < 5; i++) {
if (y - i > 0 && message_check[x][y - i] == nowplayer) {
numx++;
}
else {
break;
}
}
if (numx >= 5){
return nowplayer;
}
//------------------------竖直方向---------------------
/*
for (int i = 1; i < 5; i++) {
if (x - i > 0 && message_check[x - i][y] == nowplayer) {
numy++;
}
else {
break;
}
}
for (int i = 1; i < 5; i++) {
if (x + i <= size && message_check[x + i][y] == nowplayer) {
numy++;
}
else {
break;
}
}
if (numy >= 5) {
return nowplayer;
}
*/
//------------------------斜向----------------------
}
最终的运行结果—>>>>>>
下面那个是黑子上面那个是白子。
再叫我Debug我是不可能会D的了,exe我会上传的。。
只能识别横向的胜负…还是看看就好…