(图书介绍:童晶:《C和C++游戏趣味编程》新书预告)

本章我们将实现一个见缝插针的游戏。按下空格键后发射一根针到圆盘上,所有针逆时针方向转动;如果新发射的针碰到已有的针,游戏结束。

首先进行了圆盘与针的绘制,利用三角函数实现了针的旋转;然后学习了一维数组的概念,并利用数组实现了多根针的效果;利用批量绘制函数改进了绘制效果;最后实现了针的发射与增加、游戏失败判断、得分与显示效果的改进。

5 见缝插针

讲解视频:

最终代码:

#include <graphics.h>
#include <conio.h>
#include <stdio.h>
#include <math.h>
int main()
{const float Pi = 3.1415926; // Pi常量int width = 800; // 画面宽度int height = 600; // 画面高度initgraph(width,height); // 新开一个画面setbkcolor(RGB(255,255,255)); // 背景为白色   setlinestyle(PS_SOLID,3); // 线宽为3,这样针看起来更明显float lineLength = 160; // 针的长度float xEnd,yEnd; // 针的终点位置坐标(针起始位置为圆心)float rotateSpeed = Pi/360; // 针的旋转速度int lineNum = 0;  // 在旋转的针的个数float Angles[1000]; // 浮点数数组,存储所有针的旋转角度,最多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] + rotateSpeed; // 角度增加if (Angles[i]>2*Pi) // 如果超过2*Pi,就减去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(width/2,height/2,xEnd,yEnd); // 绘制一根针}if (kbhit() && rotateSpeed!=0) // 如果按键,并且旋转速度不等于0{char input = _getch(); // 获得用户按键输入if (input==' ') // 如果为空格键{lineNum++; // 针的个数加1Angles[lineNum-1] = Pi; // 这根新增加针的初始角度xEnd = lineLength*cos(-Angles[lineNum-1]) +width/2; //新增针的末端坐标yEnd = lineLength*sin(-Angles[lineNum-1]) +height/2;         line(width/2,height/2,xEnd,yEnd); // 绘制出这根新增加的针for (i=0;i<lineNum-1;i++) // 拿新增加的针和之前所有针比较{// 如果两根针之间角度接近,认为碰撞,游戏失败if (abs(Angles[lineNum-1]-Angles[i]) < Pi/60) {rotateSpeed = 0; // 旋转速度设为0break; // 不用再比较了,循环跳出}}score = score + 1; // 得分+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]; // 定义字符串数组_stprintf(s, _T("%d"),  score); // 将score转换为字符串settextstyle(50, 0, _T("Times")); // 设置文字大小、字体settextcolor(RGB(50,50,50));  // 设置字体颜色outtextxy(65, 200, s); // 输出得分文字FlushBatchDraw(); // 批量绘制Sleep(10); // 暂停10毫秒}closegraph();  // 关闭画面return 0;
}

这一章主要讲解了一维数组、const常量、break与continue等语法知识,学习了批量绘制功能、math.h中的三角函数与绝对值函数,实现了见缝插针的游戏。读者可以在本章代码基础上继续改进:

1. 随着游戏的进行,针的旋转速度越来越快,游戏难度越来越大;

2. 中间显示为旋转蛇图案,每被针射中一次,换一次随机颜色;

3. 尝试在画面右边新增一位玩家,实现双人版的见缝插针游戏。

读者也可以参考本章的开发思路,尝试设计并分步骤实现旋转炮台射击气球的小游戏。

第5章 见缝插针(《C和C++游戏趣味编程》配套教学视频)相关推荐

  1. 第12章 坚持一百秒(《C和C++游戏趣味编程》教学视频)

    (图书介绍:童晶:<C和C++游戏趣味编程>新书预告) 本章我们将编写坚持一百秒游戏,玩家通过鼠标控制火箭躲避一架UFO和越来越多的反弹子弹,效果如图所示. 首先学习图片的导入和显示,并利 ...

  2. 《Python游戏趣味编程》新书上架了

    <Python游戏趣味编程>案例视频 <Python游戏趣味编程>新书上架了,目前京东.淘宝.当当上搜书名就可以找到,比如: https://item.jd.com/12899 ...

  3. 《C和C++游戏趣味编程》新书上架了

    <C和C++游戏趣味编程>新书上架,目前京东.淘宝.当当上搜书名就可以找到,比如: https://item.jd.com/10026624014467.html 出版社图书页面,可以下载 ...

  4. 《Python游戏趣味编程》 第6章 见缝插针

    6 见缝插针 Python游戏开发 图书简介可以看这里: 童晶:<Python游戏趣味编程>新书上架了 本章我们将编写一个见缝插针的游戏.按下空格键后发射一根针到圆盘上,所有发射的针跟着圆 ...

  5. 第8章 十步万度(《C和C++游戏趣味编程》配套教学视频)

    (图书介绍:童晶:<C和C++游戏趣味编程>新书预告) 本章我们将编写十步万度游戏,效果如图所示.鼠标点击任意一个小圆圈,其指针顺时针旋转90度,后续被指向的圆圈指针也依次旋转,所有圆圈的 ...

  6. python趣味编程100_《Python游戏趣味编程》 第8章 勇闯地下一百层

    知乎视频​www.zhihu.com 图书简介可以看这里:童晶:<Python游戏趣味编程>新书上架了​zhuanlan.zhihu.com 本章我们将编写一个勇闯地下一百层的游戏,键盘控 ...

  7. 弟子规python编程游戏_《Python游戏趣味编程》 第11章 消灭星星

    知乎视频​www.zhihu.com 图书简介可以看这里: 童晶:<Python游戏趣味编程>新书上架了​zhuanlan.zhihu.com 消灭星星是一款非常容易上瘾的消除类游戏,只需 ...

  8. python循环绘制六角星_《Python游戏趣味编程》 第3章 美丽的圆圈画

    知乎视频​www.zhihu.com 图书简介可以看这里: 童晶:<Python游戏趣味编程>新书上架了​zhuanlan.zhihu.com 本章我们将利用Python绘制美丽的圆圈画, ...

  9. c++ 随机字符串_第3章 别碰白块(《C和C++游戏趣味编程》配套教学视频)

    (图书介绍:童晶:<C和C++游戏趣味编程>新书预告) 本章我们将实现一个小球跳跃躲避方块的游戏. 首先学习字符的知识,按空格键控制小球起跳:然后学习矩形的绘制,利用逻辑运算符实现小球和方 ...

最新文章

  1. Ural 1018 (树形DP+背包+优化)
  2. python重复执行_关于计时器:在Python中每x秒重复执行一次函数的最佳方法是什么?...
  3. 多快好省的预训练模型:你丢我也丢
  4. 限界分支法:01背包问题,优先级队列(包含解的追踪)
  5. 【C++grammar】vector类和字符串字面量
  6. linux操作系统之条件变量
  7. 用js实现改变随意改变div属性style的名称和值的结果
  8. 洛谷P1258 小车问题(题解)
  9. 【单片机】按键消抖及原理(硬件和软件方法详解)
  10. cmd强制删除文件夹
  11. 图片转文字的实用方法
  12. 人人都是钢铁侠,超级盔甲问世
  13. [Python]安装/升级pip/pip3
  14. 如何获取瘦人肠道菌群_如何通过吃喝来改变肠道菌群,从而达到抑制肥胖的效果?...
  15. 【无标题】软件工程头歌
  16. MTL-FFDET:基于多任务学习的森林火灾探测模型
  17. Matlab中format rat的意思(补充说明format函数用法)
  18. 【第二辑】临床路径论文、系统及其他资料汇总【15个】
  19. php生成手机桌面快捷方式,php生成网页桌面快捷方式
  20. 奥凯丰 PDF转换大师使用教程

热门文章

  1. vijos:旅行家的预算[贪心]
  2. linux中一些特殊的权限(setuid/setgid/sticky)
  3. VB中Unload、END、Hide的区别
  4. 【C++ primer】第七章 函数-C++的编程模块
  5. web前端基础之Bootstrap(三) - 插件
  6. eclipse 常用设置(二)
  7. Xamarin.Forms Layout Challenges – Great Places(已全文翻译)
  8. 基本sql语句--触发器
  9. ashx是什么文件,什么时候使用ashx
  10. [CMake] 官方文档 和 FAQ