C++两点成一线

开头

大家好,我叫这是我58

程序

#include <iostream>
#include <cstring>
#include <Windows.h>
#define PANADD(A,B) ((A) < (B) ? 1 : -1)
using namespace std;
void printmap(const char strmap[11][11]) {
	int i = 0;
	int ia = 0;
	for (; i < 11; i++) {
		for (ia = 0; ia < 11; ia++) {
			cout << "\033[" << ('@' == strmap[i][ia] ? "33" : '+' == strmap[i][ia] || '-' == strmap[i][ia] || '|' == strmap[i][ia] ? "33;1" : "0") << "m" << strmap[i][ia] << "\033[0m";
		}
		cout << "|" << endl;
	}
	cout << "-----------*" << endl;
}
int main() {
	char strmap[11][11] = {0};
	int dotarr[4] = { -1, -1, -1, -1 };
	int i = 1;
	memset(strmap, ' ', sizeof strmap);
	for (; i < 3; i++) {
		printmap(strmap);
		cout << "请输入第" << i << "个点的xy坐标(x y)(0<=x<=10, 0<=y<=10)" << (2 == i ? "\033[4m(不可重叠)\033[0m" : "") << " -> ";
		cin >> dotarr[(i - 1) * 2] >> dotarr[(i - 1) * 2 + 1];
		while (dotarr[(i - 1) * 2] < 0 || dotarr[(i - 1) * 2] > 10 || dotarr[(i - 1) * 2 + 1] < 0 || dotarr[(i - 1) * 2 + 1] > 10 || dotarr[0] == dotarr[2] && dotarr[1] == dotarr[3]) {
			cout << "\033[31;1m输入错误\033[0m,请重新输入(0<=x<=10, 0<=y<=10) -> ";
			cin >> dotarr[(i - 1) * 2] >> dotarr[(i - 1) * 2 + 1];
		}
		strmap[dotarr[(i - 1) * 2]][dotarr[(i - 1) * 2 + 1]] = '@';
		system("cls");
	}
	for (char* cp = &strmap[dotarr[0]][dotarr[1]]; !(dotarr[0] == dotarr[2] && dotarr[1] == dotarr[3]); Sleep(100)) {
		system("cls");
		printmap(strmap);
		if (dotarr[1] != dotarr[3]) {
			(cp += PANADD(dotarr[1], dotarr[3]));
			(dotarr[1] += PANADD(dotarr[1], dotarr[3])) == dotarr[3] && (*cp = '+'), dotarr[1] == dotarr[3] || (*cp = '-');
			continue;
		}
		dotarr[0] != dotarr[2] && (cp += 11 * PANADD(dotarr[0], dotarr[2]), (*cp = '|'), (dotarr[0] += PANADD(dotarr[0], dotarr[2])));
	}
	return 0;
}

程序的流程图

清屏
是(清屏)
是(continue)(等待0.1秒)
等待0.1秒
continue(等待0.1秒)
否(等待0.1秒)
开始
导入io流
导入cstring头文件
导入Windows.h
定义宏PANADD,参数有A和B
释放std作用域中的所有东西
定义printmap函数
把有11行11列的二维字符数组strmap里的元素全都初始化为0
把有4个元素的整型数组dotarr里的元素全都初始化为-1
定义整型i为1
把二维字符数组strmap里的元素全都设为空格
i < 3?
执行printmap函数,参数有二维字符数组strmap
前面输出“请输入第”,i和“个点的xy坐标(x y)(0<=x<=10, 0<=y<=10)”,如果i为2,那么中间就输出“\​033[4m(不可重叠)\​033[0m”,否则中间就输出空字符串,后面则输出“ -> ”
把整型数组dotarr的第i减1的差乘2项的元素和整型数组dotarr的第i减1的差乘2加1项的元素设为你输入的两个数字
dotarr[(i - 1) * 2] < 0 || dotarr[(i - 1) * 2] > 10 || dotarr[(i - 1) * 2 + 1] < 0 || dotarr[(i - 1) * 2 + 1] > 10 || dotarr[0] == dotarr[2] && dotarr[1] == dotarr[3]?
输出“\​033[31;1m输入错误\​033[0m,请重新输入(0<=x<=10, 0<=y<=10) -> ”
把整型数组dotarr的第i减1的差乘2项的元素和整型数组dotarr的第i减1的差乘2加1项的元素设为你输入的两个数字
把二维字符数组strmap的第整型数组dotarr的第i减1的差乘2项值行第整型数组dotarr的第i减1的差乘2加1项的值列的元素设为字符“@”
i自增1
定义字符指针cp为二维字符数组strmap第整型数组dotarr的第0项的值行第整型数组dotarr的第1项的值列的元素地址
!(dotarr[0] == dotarr[2] && dotarr[1] == dotarr[3])?
执行printmap函数,参数有二维字符数组strmap
dotarr[1] != dotarr[3]?
如果整型数组dotarr的第1项的值小于整型数组dotarr的第3项的值,那么cp就向右移动一位,否则cp就向左移动一位
(dotarr[1] += PANADD(dotarr[1], dotarr[3])) == dotarr[3]?
把解引用的cp设为字符“+”
dotarr[1] == dotarr[3]?
结束
dotarr[0] != dotarr[2]?
如果整型数组dotarr的第0项的值小于整型数组dotarr的第2项的值,那么cp就向右移动11位,否则cp就向左移动11位
把解引用的cp设为字符“|”
如果整型数组dotarr的第0项的值小于整型数组dotarr的第2项的值,那么dotarr的第0项就自增1,否则dotarr的第0项就自减1
把解引用的cp设为字符“-”
printmap函数
结束
开始
定义整型i为0
定义整型ia为0
i < 11?
设ia为0
ia < 11?
前面输出“\​033[”,如果字符“@”为二维字符数组strmap第i行第ia列的元素,那么中间就输出“33”,否则如果“+”,“-”或者“|”为二维字符数组strmap第i行第ia列的元素,那么中间就输出“33;1”,否则中间就输出“0”,后面则输出“m”,二维字符数组strmap第i行第ia列的元素和“\​033[0m”
ia自增1
输出“|\​n”
i自增1
输出“-----------*\​n”

程序执行的效果

两点成一线

下一篇博客要说的东西

C++黑暗迷宫

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值