当前位置:   article > 正文

见缝插针小游戏_见缝插针链接

见缝插针链接

基于VS2019   EasyX插件   C/C++

见缝插针小游戏

  1. #include<graphics.h>
  2. #include<conio.h>
  3. #include<stdio.h>
  4. #include<math.h>
  5. int main()
  6. {
  7. float Pi = 3.1415926;
  8. int width = 800;//画面宽度
  9. int height = 600;//画面高度
  10. initgraph(width, height);//新开一个画面
  11. setbkcolor(RGB(255, 255, 255));//背景设为白色
  12. setlinestyle(PS_SOLID, 3);//线宽为3,这样针看起来更明显
  13. float lineLength = 160;//针的长度
  14. float xEnd, yEnd;//针的终点位置坐标(针起始位置为圆心)
  15. float rotateSpeed = Pi / 360;//针的旋转速度
  16. int lineNum = 0;//在旋转的针的个数
  17. float Angles[1000];//浮点数数组,存储所有针的旋转角度,最多1000根针
  18. int score = 0;//得分
  19. BeginBatchDraw();//开始批量绘制
  20. while (1)
  21. {
  22. cleardevice();//以背景色清空背景
  23. setlinecolor(RGB(0, 0, 0));//设置针的颜色为黑色
  24. line(0, height / 2, lineLength, height / 2);//左边发射区域的一根针
  25. for (int i = 0; i < lineNum; i++)//对所有旋转针进行遍历
  26. {
  27. Angles[i] = Angles[i] + rotateSpeed;//角度增加
  28. if (Angles[i] > 2 * Pi)//如果超过2*Pi就减去2*Pi,防止角度数据无限增加
  29. {
  30. Angles[i] = Angles[i] - 2 * Pi;
  31. }
  32. xEnd = lineLength * cos(-Angles[i]) + width / 2;//计算针的末端坐标
  33. yEnd = lineLength * sin(-Angles[i]) + height / 2;
  34. setlinecolor(RGB(0, 0, 255));//设定旋转针的颜色为蓝色
  35. if (i == lineNum - 1)
  36. {
  37. setlinecolor(RGB(255, 0, 0));
  38. }
  39. line(width / 2, height / 2, xEnd, yEnd);//绘制一根针
  40. }
  41. if (_kbhit() && rotateSpeed!=0)//如果按键,并且旋转速度不等于0
  42. {
  43. char input = _getch();//获得用户按键输入
  44. if (input == ' ')//如果为空格键
  45. {
  46. lineNum++;//针的个数加1
  47. Angles[lineNum - 1] = Pi;//这跟新增加针的初始角度
  48. xEnd = lineLength * cos(-Angles[lineNum - 1]) + width / 2;//新增针的末端坐标
  49. yEnd = lineLength * sin(-Angles[lineNum - 1]) + height / 2;
  50. line(width / 2, height / 2, xEnd, yEnd);//绘制出这跟新增加的针
  51. for (int i = 0; i < lineNum - 1; i++)
  52. {
  53. //如果两根针之间角度接近,认为碰撞,游戏失败
  54. if (fabs(Angles[lineNum - 1] - Angles[i]) < Pi / 60)
  55. {
  56. rotateSpeed = 0;//旋转速度设为0
  57. break;//不需要再次进行比较了,循环跳出
  58. }
  59. }
  60. }
  61. score = score + 1;
  62. }
  63. setfillcolor(HSVtoRGB(0, lineNum / 60.0, 0.8));//针越多,中间圆盘颜色越鲜艳
  64. setlinecolor(HSVtoRGB(0, 0.9, 0.8));//设置圆盘线条颜色为红色
  65. fillcircle(width / 2, height / 2, 60);//绘制中间的圆盘
  66. TCHAR s[20];//定义字符串数组
  67. swprintf_s(s, _T("%d"), score);//将score转换为字符串
  68. settextstyle(50, 0, _T("Times"));//设置文字大小、字体
  69. settextcolor(RGB(50, 50, 50));//设置字体颜色
  70. outtextxy(65, 200, s);//输出得分文字
  71. FlushBatchDraw();//批量绘制,当该行代码之前全部执行完成后才会进行一次绘制
  72. Sleep(10);
  73. }
  74. closegraph();
  75. return 0;
  76. }

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/article/detail/47858
推荐阅读
相关标签
  

闽ICP备14008679号