在vs中用c++实现见缝插针小游戏(且针越多,中心的球颜色会发生改变)

 

一些注意事项:_stprintf()这个函数要求挺苛刻的,他调用的变量必须初始化否则无法正常运行;

还有关于vs2022一些安全性必须说一说,如果不设置的很多正常代码其实也无法运行,安全性对于个人开发者和学者其实必要性不是很大,初学者建议关闭,关闭方法是在调试按钮上选择最后一项,在选择c/c+,在将警告视为错误设置为否,在点击c/c++小三角,在代码生成的安全检测中选择禁用安全检查;

#include
#include
#include
#include
int main() {
	const float pi = 3.1415926;
	int height, width;
	height = 600, width = 800;
	initgraph(width, height);
	setbkcolor(RGB(255, 255, 255));
	setlinestyle(PS_SOLID, 3);
	float lineLength = 160, xend, yend, rotatespeeed = pi / 360;
	int linenum = 0;
	float angles[1000];
	int score = 0;
	int i;
	BeginBatchDraw();
	while (1) {
		cleardevice();
		setlinecolor(RGB(0, 0, 0));
		line(0, height / 2, lineLength, height / 2);
		for (i = 0; i < linenum; i++) {
			angles[i] = angles[i] + rotatespeeed;
			if (angles[i] > 2 * pi) {
				angles[i] = angles[i] - 2 * pi;
			}
			xend = lineLength * cos(-angles[i]) + width / 2;
			yend = lineLength * sin(-angles[i]) + height / 2;
			setlinecolor(RGB(0, 0, 255));
			if (i == linenum - 1) {
				setlinecolor(RGB(255, 0, 0));
			}
			line(xend, yend, width / 2, height / 2);
		}
		if (_kbhit() && rotatespeeed != 0) {
			char input = _getch();
			if (input == ' ') {
				linenum++;
				angles[linenum - 1] = pi;
				xend = lineLength * cos(-angles[i - 1]) + width / 2;
				yend = lineLength * sin(-angles[i - 1]) + height / 2;
				line(xend, yend, width / 2, height / 2);
				for (i = 0; i < linenum-1; i++) {
					if (fabs(angles[linenum - 1] - angles[i]) < pi / 60) {
						rotatespeeed = 0;
						break;
					}
				}

				score = score + 1;
			}
		}
		setfillcolor(HSVtoRGB(0, linenum / 60.0, 0.8));
		setlinecolor(HSVtoRGB(0, 0.9, 0.8));
		fillcircle(width / 2, height / 2, 60);
		TCHAR s[20];
		_swprintf(s, _T("%d"), score);
		settextstyle(50, 0, _T("TIMES"));
		settextcolor(RGB(50, 50, 50));
		outtextxy(65, 200, s);
		FlushBatchDraw();
		Sleep(10);

	}
	closegraph();
	return  0;
}

在vs中用c++实现见缝插针小游戏(且针越多,中心的球颜色会发生改变)_第1张图片

若两个针相差的角度小于3度,则游戏停止。在vs中用c++实现见缝插针小游戏(且针越多,中心的球颜色会发生改变)_第2张图片

 

 在vs中用c++实现见缝插针小游戏(且针越多,中心的球颜色会发生改变)_第3张图片

 

还有我在这个学渣在第一次敲这个题目时其实又遇到了一个问题,就说在
                    for (i = 0; i < linenum-1; i++) {
                    if (fabs(angles[linenum - 1] - angles[i]) < pi / 60) {
                        rotatespeeed = 0;
                        break;

语句中,我第一次敲的是 for (i = 0; i < linenum; i++),因为我心想以及是<,已经少算了一个,但原本数组是从0开始算起,并且如果算linenum-1,开始加第一根针的时候,就会第一根针与自己比较角度,自己和自己比结果肯定是小于3度的,那就肯定有问题,虽然这是一个小错误,不过有时也挺烦的。

你可能感兴趣的:(初学者小游戏开发,c++,visual,studio,code)