小游戏就以飞机大战为例吧
首先说一下我对游戏的理解,游戏主要就是由动画、交互两大部分组成,
而动画则是由一帧一帧的图片组成。
所以要想在控制台中实现动画,那就要实现屏幕的刷新,就是把上一帧
的图片给清除掉,清除的方法有很多,在这里就用最简单的实现方法
system(“cls”);
首先实现屏幕的自动刷新
while (1)
{
Show(); //屏幕显示画面
InputWithData(); //执行与用户有关的数据
InputWithoutData(); //执行与用户无关的数据
system("cls"); //清屏函数,每次调用都将
} //上次的画面清除
将整个程序的主要函数放在一个死循环中,不停的调用结合清屏函数, 实现动画的显示
InputWithData();
InputWithoutData();
这两个函数后序再添加内容
显示画面
也即是Show()里面的内容
for (int i = 0; i < Heigh; i++) //Height 为定义的高度
{
for (int j = 0; j < Width; j++) //Width 宽度
{
//PlayerPos为玩家坐标 X、Y轴
if (i == PlayerPosY&&j == PlayerPosX)
{
cout << "*";
}
{
cout << " ";
}
}
cout << endl;
}
以空格打印一个界面,在打印空格时,当横纵坐标等于玩家坐标时则打印* (这个就暂且当做玩家吧。。。)
输出之后是这样的一个界面

然后就是和用户的交互了
1.首先是实现用户的移动
直接上代码
void InputWithData()
{
Movement();
}
void Movement(){
char input;
if (_kbhit())
{
input = _getch();
switch (input)
{
case'W':
case'w':
PlayPosY--;
break;
case'S':
case's':
PlayPosY++;
break;
case'A':
case'a':
PlayPosX--;
break;
case'D':
case'd':
PlayPosX++;
break;
default:
break;
}
}
}
通过按 WASD 键来改变玩家坐标的数值,进而实现飞机的移动。
_getch()这个函数是一个不回显函数,当用户按下某个字符时,
函数自动读取,无需按回车。
_kbhit()这个是用来检测用户是否按下键盘的函数,当有敌机移动时,
没有这个函数画面将会暂停等待你的输入了,显然这不是我们想要的
- 到这游戏的基本原理想必你应该已经了解差不多了,无非就是下帧刷新上帧,而游戏的各种玩法就是玩家自己通过代码来实现了。。。
2.接下来就是玩家发射子弹了
空格键的ASCII值是 32
还是直接贴代码
//将BulletX,BulletY初始化为-1,-1 使在屏幕不可见
//当发射子弹时再执行下列代码
case 32:
BulletX = PlayPosX;
BulletY = PlayPosY - 1;
isShoot = true;
break;
发射子弹无非就是在上面移动代码里添加个空格触发事件(也可直接看到下述优化后的子弹代码)
for (int i = 0; i < Heigh; i++

最低0.47元/天 解锁文章
5504

被折叠的 条评论
为什么被折叠?



