基于easyx的五子棋对战

本文介绍了使用C语言和EasyX库实现的五子棋游戏。简化了代码,旨在易于理解,适合初学者。虽然代码风格可能较为独特,且存在优化空间,如使用内联函数等。在VS2017环境下编译时,需将项目属性设置为多字节字符集以解决outtextxy函数的文字输出问题。

以前写过一个,只不过写的比较繁琐,这个能简单实现,去掉了各种花里胡哨(虽然都是简单的知识),本来是打算用c++实现的,发现还是c写起来好理解,毕竟学艺不精,哈哈哈

代码风格偏奇葩,接触编程时间不长,还有许多可以优化的地方,例如下方显示文字可以使用内联函数疯狂调用之类。

注释有的地方不太明确,如有bug可以反馈。

本人使用vs2017,如有编译错误,可修改项目属性

项目->属性->常规->字符集->多字节字符集;

此处修改为outtextxy输出文字函数中的第三个参数在调用时出错。

#include<graphics.h>
#include<iostream>
#include<Windows.h>
#include<string>
#include<vector>
#include<conio.h>
#define MAX 1000

using namespace std;


//全局变量存储棋盘的属性
struct G_chess {
	int CHESS_R = 10;//每个棋子的半径
	int CHESS_R_C = 5;//五个点的半径
	int ROW = 35;//棋盘的行的长度
	int COLOMU = 35;//棋盘列的长度
	int start = 50;//棋盘的起始位置
	int menu_start_x = start + 14 * COLOMU + 10;//菜单栏的x轴开始位置
	int menu_start_y = start;//菜单栏的y轴开始位置
}G;
//每个棋子的位置属性
struct chess {
	int map_x;//棋子所在行的位置
	int map_y;//棋子所在列的位置
};
//棋盘上的各个棋子属性


class chess_piece {
public:
	//初始化棋盘上的棋子个数
	chess_piece() {
		buffer = MAX;
	}
	//每下一个棋子,获取所下棋子的信息,收入棋子的属性中
	void play(int x, int y) {
		chess temp;
		temp.map_x = x;
		temp.map_y = y;
		play_chess.push_back(temp);
	}
	friend ostream &operator<< (ostream& os, chess a);
	//每下一个棋子,画出棋子
	void down(int x, int y, int color) {
		setfillcolor(color);
		setlinecolor(color);
		fillcircle(x, y, G.CHESS_R);
		play(x, y);
	}
	void drow_back_line(vector<chess>& play_chess);//悔棋后,将棋盘复原
	//每悔一次棋,将所下的棋子删除
	void back() {
		if (play_chess.empty()) { 
			setbkmode(TRANSPARENT);
			settextstyle(30, 0, _T("楷体"));
			outtextxy(G.start + 3 * G.COLOMU, G.start + 14 * G.COLOMU + 1, _T("请落子后再进行操作"));
			return;
		}
		drow_back_line(play_chess);
		play_chess.pop_back();
	}
	~chess_piece() { }
private:
	int buffer;
	vector<chess> play_chess;
};

int flag = BLACK;

void map();//生成地图
int mouse();//鼠标操作
inline int mouse_menu(MOUSEMSG &mou);//菜单处的鼠标操作
void drow_menu(int x, int y, const char *name, int UOD);//菜单框
bool judge(int x, int y);//判断游戏是否有一方获胜


int main()
{
	
	int s = 1;
	while (s) {
		s = mouse();
	}
	closegraph();
	return 0;
}
ostream & operator<<(ostream & os, chess a)
{
	os << a.map_x << " " << a.map_y;
	return os;
}
void map() {
	chess_piece a;
	initgraph(700, 640);
	setfillcolor(RGB(172, 81, 24));
	setfillstyle(BS_SOLID);
	fillrectangle(0, 0, 700, 640);
	setlinecolor(BLUE);
	for (int i = 0; i <= G.start + 13 * G.COLOMU; i = i + G.COLOMU)
	{
		line(G.start + i, G.start, G.start + i, G.start + G.COLOMU * 14);
		line(G.start, G.start + i, G.start + G.COLOMU * 14, G.start + i);
	}
	setfillcolor(GREEN);
	fillcircle(G.start + 7 * G.COLOMU, G.start + 7 * G.COLOMU, G.CHESS_
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值