第5章 见缝插针(《C和C++游戏趣味编程》配套教学视频)
(图书介绍:童晶:《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++游戏趣味编程》配套教学视频)相关推荐
- 第12章 坚持一百秒(《C和C++游戏趣味编程》教学视频)
(图书介绍:童晶:<C和C++游戏趣味编程>新书预告) 本章我们将编写坚持一百秒游戏,玩家通过鼠标控制火箭躲避一架UFO和越来越多的反弹子弹,效果如图所示. 首先学习图片的导入和显示,并利 ...
- 《Python游戏趣味编程》新书上架了
<Python游戏趣味编程>案例视频 <Python游戏趣味编程>新书上架了,目前京东.淘宝.当当上搜书名就可以找到,比如: https://item.jd.com/12899 ...
- 《C和C++游戏趣味编程》新书上架了
<C和C++游戏趣味编程>新书上架,目前京东.淘宝.当当上搜书名就可以找到,比如: https://item.jd.com/10026624014467.html 出版社图书页面,可以下载 ...
- 《Python游戏趣味编程》 第6章 见缝插针
6 见缝插针 Python游戏开发 图书简介可以看这里: 童晶:<Python游戏趣味编程>新书上架了 本章我们将编写一个见缝插针的游戏.按下空格键后发射一根针到圆盘上,所有发射的针跟着圆 ...
- 第8章 十步万度(《C和C++游戏趣味编程》配套教学视频)
(图书介绍:童晶:<C和C++游戏趣味编程>新书预告) 本章我们将编写十步万度游戏,效果如图所示.鼠标点击任意一个小圆圈,其指针顺时针旋转90度,后续被指向的圆圈指针也依次旋转,所有圆圈的 ...
- python趣味编程100_《Python游戏趣味编程》 第8章 勇闯地下一百层
知乎视频www.zhihu.com 图书简介可以看这里:童晶:<Python游戏趣味编程>新书上架了zhuanlan.zhihu.com 本章我们将编写一个勇闯地下一百层的游戏,键盘控 ...
- 弟子规python编程游戏_《Python游戏趣味编程》 第11章 消灭星星
知乎视频www.zhihu.com 图书简介可以看这里: 童晶:<Python游戏趣味编程>新书上架了zhuanlan.zhihu.com 消灭星星是一款非常容易上瘾的消除类游戏,只需 ...
- python循环绘制六角星_《Python游戏趣味编程》 第3章 美丽的圆圈画
知乎视频www.zhihu.com 图书简介可以看这里: 童晶:<Python游戏趣味编程>新书上架了zhuanlan.zhihu.com 本章我们将利用Python绘制美丽的圆圈画, ...
- c++ 随机字符串_第3章 别碰白块(《C和C++游戏趣味编程》配套教学视频)
(图书介绍:童晶:<C和C++游戏趣味编程>新书预告) 本章我们将实现一个小球跳跃躲避方块的游戏. 首先学习字符的知识,按空格键控制小球起跳:然后学习矩形的绘制,利用逻辑运算符实现小球和方 ...
最新文章
- Ural 1018 (树形DP+背包+优化)
- python重复执行_关于计时器:在Python中每x秒重复执行一次函数的最佳方法是什么?...
- 多快好省的预训练模型:你丢我也丢
- 限界分支法:01背包问题,优先级队列(包含解的追踪)
- 【C++grammar】vector类和字符串字面量
- linux操作系统之条件变量
- 用js实现改变随意改变div属性style的名称和值的结果
- 洛谷P1258 小车问题(题解)
- 【单片机】按键消抖及原理(硬件和软件方法详解)
- cmd强制删除文件夹
- 图片转文字的实用方法
- 人人都是钢铁侠,超级盔甲问世
- [Python]安装/升级pip/pip3
- 如何获取瘦人肠道菌群_如何通过吃喝来改变肠道菌群,从而达到抑制肥胖的效果?...
- 【无标题】软件工程头歌
- MTL-FFDET:基于多任务学习的森林火灾探测模型
- Matlab中format rat的意思(补充说明format函数用法)
- 【第二辑】临床路径论文、系统及其他资料汇总【15个】
- php生成手机桌面快捷方式,php生成网页桌面快捷方式
- 奥凯丰 PDF转换大师使用教程
热门文章
- vijos:旅行家的预算[贪心]
- linux中一些特殊的权限(setuid/setgid/sticky)
- VB中Unload、END、Hide的区别
- 【C++ primer】第七章 函数-C++的编程模块
- web前端基础之Bootstrap(三) - 插件
- eclipse 常用设置(二)
- Xamarin.Forms Layout Challenges – Great Places(已全文翻译)
- 基本sql语句--触发器
- ashx是什么文件,什么时候使用ashx
- [CMake] 官方文档 和 FAQ