C五子棋---心态是如何到绝望的.....

本文分享了一次五子棋游戏开发的经历,作者使用C++编程语言,详细记录了从初始化到实现横向胜负判断的过程。文章包含完整的源代码,展示了如何处理bug、优化代码以及界面设计。

不多说了,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我会上传的。。
只能识别横向的胜负…还是看看就好…

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值