如何写个控制台小游戏(C or C++期末大作业)

此文转载自:https://blog.csdn.net/a_leaf_/article/details/110395729

因为临近c艹考试,以作品的形式提交。所以想用c++写个控制台小游戏

主要是小游戏可以将类和继承等C++知识点可以很好的串接起来,而且也比图书管理系统等交互性不大的项目更加有趣。好了废话少说进入正题吧


小游戏就以飞机大战为例吧

首先说一下我对游戏的理解,游戏主要就是由动画、交互两大部分组成,
而动画则是由一帧一帧的图片组成。
所以要想在控制台中实现动画,那就要实现屏幕的刷新,就是把上一帧
的图片给清除掉,清除的方法有很多,在这里就用最简单的实现方法
system(“cls”);

为了便于学习,下面没有加关于类什么和c++有关的内容。

首先实现屏幕的自动刷新

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++)
	{
		for (int j = 0; j < Width; j++)
		{
			if (i == PlayPosY&&j == PlayPosX)  
			{
				cout << "*";
			}
			/
			else if (i == BulletY && j == BulletX)
			{
				cout << "|";
			}
			///
			else
			{
				cout << " ";
			}
		}
		cout << endl;
	}

这是Show()函数,仔细观察多了个上面标注的地方,用于子弹的显示,现在只是将子弹放在玩家前面,而没有发射移动,可以这样实现

void BulletMove()
{	
	if (BulletY  > 0)
	{
		BulletY--;
	}
}

将BulletMove( ) inputWithoutData()函数中,表示与用户输入无关的数据
下面是运行后的画面
在这里插入图片描述

这样玩家的基本功能就实现了,同样你也可以自己添加其他元素,如多发子弹、激光等高级武器



.
.
.
后序敌人的实现等留到明天再写吧,溜啦溜啦
持续更新中…

   

更多内容详见微信公众号:Python测试和开发

Python测试和开发

原文地址:https://www.cnblogs.com/phyger/p/14073256.html