zoukankan      html  css  js  c++  java
  • 如何写个控制台小游戏(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测试和开发

  • 相关阅读:
    安装7-Zip后,鼠标右键菜单出现选项(CRC SHA)
    Windows添加右键菜单【转载】
    基于Visual Studio开发C++/Qt项目的使用笔记
    数组中的重复数字
    zookeeper的通知机制
    zookeeper有几种部署模式? zookeeper 怎么保证主从节点的状态同步?
    什么是springcloud?springcloud断路器的作用是什么?springcloud的核心组件有什么?
    springboot实现热部署的几种方式
    springboot的核心配置文件
    什么是springboot?为什么要用springboot?
  • 原文地址:https://www.cnblogs.com/phyger/p/14073256.html
Copyright © 2011-2022 走看看