汉诺塔游戏设计(C++控制台版)

Hello! 小伙伴们。这次给大家带来小生的游戏作品——汉诺塔游戏。由于这是本人第一次设计游戏,可能某些地方存在问题,希望各位大佬能够批评指正,在这里,也感谢各位家仁们阅读此文章。

游戏简介

法国数学家爱德华·卢卡斯曾编写过一个印度的古老传说:在世界中心贝拿勒斯(在印度北部)的圣庙里,一块黄铜板上插着三根宝石针。印度教的主神梵天在创造世界的时候,在其中一根针上从下到上地穿好了由大到小的64片金片,这就是所谓的汉诺塔。不论白天黑夜,总有一个僧侣在按照下面的法则移动这些金片:一次只移动一片,不管在哪根针上,小片必须在大片上面。僧侣们预言,当所有的金片都从梵天穿好的那根针上移到另外一根针上时,世界就将在一声霹雳中消灭,而梵塔、庙宇和众生也都将同归于尽。

游戏结构

1、游戏主界面

2、开始游戏

3、游戏背景

4、游戏说明

5、游戏提示

6、退出游戏

游戏结构图示

1、游戏主界面:

2、开始游戏:

3、游戏背景:

4、游戏说明:

5、游戏提示:

6、退出游戏:

游戏分析

函数分析

这里向大家介绍一下游戏设计完成后创建和利用的函数,以及它们的功能

1、主函数(main())

主函数控制着整个程序的运行,调用并使用着其他函数。本游戏的主函数主要用于控制着主界面(Home())的打开,以及刚打开程序时的效果。当本程序打开时,主函数会先输出游戏的效果,Sleep()函数会辅助这个效果的显示,然后主函数调用Home()函数,打开主界面。

2、Home()

在Home()函数中,利用一些符号、数字、文字等制成主界面,并利用switch语句使得Home()函数具备其他的功能。在Home()函数中嵌入我们想要实现功能的函数(Backgroud()、Level()、Instruction()、Guide()、Exit()),编写一个让玩家输入的端口(也就是让玩家进行功能选择的端口),经过判断后,调用相应的函数,来实现相应功能的实现。

void Home()
{int Switch_A;system("cls");cout << "======================================================" << endl << endl;cout << "||                  TOWER OF FANOI                  ||" << endl << endl;cout << "||                                                  ||" << endl << endl;cout << "||                   1 开始游戏                     ||" << endl << endl;cout << "||                   2 游戏说明                     ||" << endl << endl;cout << "||                   3 游戏提示                     ||" << endl << endl;cout << "||                   4 退    出                     ||" << endl << endl;cout << "======================================================" << endl << endl;cout << "为了您能更好的体验本游戏,请输入以上对应的编号:";cin >> Switch_A;switch (Switch_A){case 1:Backgroud();Level();break;case 2:Instruction();break;case 3:Guide();break;case 4:Exit();break;}
}

3、Space()

创建一个方便我们进行编程的的空格函数Space(),在后面的函数中进行空格的输出。可进行单个空格的输出或者多个空格的输出。

4、Print()

创建一个类似于Python的输出函数Print(),输出时,可以输出Print()内的字符或者数字。

5、Backgroud()

利用Backgroud()函数来对故事线进行打包,并将该函数放置在开始游戏之前,以此来达到丰富游戏内容的目的。在Backgroud()函数中,添加了可跳过的的设置,防止玩家因为游戏故事线反复而产生的不良影响。该函数放置在Level()函数之前。

6、Level()

定义一个Continue变量,用于玩家退出游戏时的设置。创建Plate、Pillar、Hanoi_pillar类类型,对游戏的铜柱、盘子进行定义,并在其中直接定义相应的构造函数。利用while循环对游戏进行操作。

7、Move_plate()

创建一个移动盘子的函数,该函数实现“移动盘子”的功能,实质上就是将现铜柱存在的盘子消失,然后另一铜柱出现盘子,也就是说将现铜柱上的括号【】和空格消除,然后在另一铜柱下面添加对应的括号【】和空格。在这个函数中,还实现了一个功能,就是游戏规则。在该函数中,限定了一些条件。当铜柱上没有“盘子”时,提示玩家该铜柱上没有盘子。还有就是当大盘子放在小盘子上时,提示玩家大盘子不可以放在小盘子上。这里利用的技巧是比较size的大小来比较盘子的大小以及铜柱上是不是有盘子。

void Move_plate(Pillar* a1, Pillar* a2)
{int disappeared = 10 - a1->Number_Plates;int appeard = 9 - a2->Number_Plates;if (a1->Plates[disappeared].size == 0){cout << "该铜柱上没有盘子!!!" << endl;system("pause");}else{if (a2->Plates[appeard + 1].size == 0){a2->Plates[appeard].size = a1->Plates[disappeared].size;a1->Plates[disappeared].size = 0;a1->Number_Plates--;a2->Number_Plates++;}else{if (a1->Plates[disappeared].size > a2->Plates[appeard + 1].size){cout << "大盘子不可以叠放在小盘子上面!!!" << endl;;system("pause");}else{a2->Plates[appeard].size = a1->Plates[disappeared].size;a1->Plates[disappeared].size = 0;a1->Number_Plates--;a2->Number_Plates++;}}}
}

这里的盘子和柱是这样实现的:

class Plate
{
public:Plate(int number);Plate();void body();int size;
};
Plate::Plate(int number)
{size = number;
}
Plate::Plate()
{size = 0;
}
class Pillar
{
public:Pillar(){for (int i = 0; i < 10; i++){Plates[i].size = 0;}Number_Plates = 0;}Pillar(int number){int temp = number;for (int i = 9; i >= 10 - number; i--){Plates[i] = temp;temp--;}Number_Plates = number;}Plate Plates[10];int Number_Plates;
};

定义好后,利用创建好的Print()函数和Space()函数来实现,这只是部分代码,如果有需求,我会再次提供提供一部分code。

8、Move_hanoi_plate()

在该函数中定义了铜柱的编号,以此来使玩家输入铜柱的编号,调用Move_plate()函数来进行盘子移动。

9、Pass()

该函数用于对游戏通关的判定,也就是盘子是否遵循游戏规则,从第一根铜柱上移动到第三根铜柱上。通关后,提示玩家游戏通关。

10、Instruction()

该函数用于对想了解游戏背景故事、游戏规则的玩家进行游戏说明、游戏规则。

11、Guide()

该函数利用递归算法创建了一个为玩家提供提示、提供最简游戏步骤的功能,以此来推动游戏玩家更好的游戏体验。

void Hanoi(int num, char A, char B, char C)
{if (num == 1){cout << "第" << i++ << "步:" << "把第" << num << "个盘子从" << A << "柱子---->" << C << "柱子" << endl;}else{Hanoi(num - 1, A, C, B);cout << "第" << i++ << "步:" << "把第" << num << "个盘子从" << A << "柱子---->" << C << "柱子" << endl;Hanoi(num - 1, B, A, C);}
}

这里是提示的递归函数,汉诺塔游戏的原理也在其中。

12、Exit()

该函数为玩家提供退出设置,方便玩家游戏疲惫时,退出游戏。

结构分析

1、主界面

游戏主界面通过用符号“=”和“||”作为游戏边框,利用直观的语言指导玩家进行游戏,“1 开始游戏”、“2 游戏说明”、“3 游戏提示”、“4 退出”。游戏主界面如图所示:

2、开始游戏

玩家通过输入编号为‘1’的选项开始游戏,进入游戏后,你会遇到游戏的故事环节,可以选择跳过,游戏便可以开始了,输入关卡编号‘3’,如图所示:

玩家可以通过输入铜柱的编号,来对盘子进行移动,例如输入数字1 3 ,就会将铜柱为1上的盘子移动到铜柱为3上,如图所示:

最终,在不断的摆放盘子后,就可以将盘子放到正确的位置,即可完成该难度的汉诺塔游戏,如图所示:

在摆放盘子的过程中,如果遇到大盘子摆放在小盘子上面或者移动盘子的方向错误(就是在空柱子上移动盘子)时,就会报错,并提示玩家放置错误的信息。

3、多次游戏

为了让玩家能够多次进行游戏,在游戏通关后,创建了一个能够让游戏再次进行的函数Pass,可以输入数字3退出游戏,也可输入除3以外的数字,再次进行游戏,如图所示为游戏继续时的选项:

4、游戏的故事线

为了吸引玩家进行游戏,我们设置了游戏故事线,并利用Sleep函数对该环节进行时间延迟的播放操作,以达到游戏美化的目的。

5、游戏说明

为了能过让玩家更好的了解游戏,进行游戏,我们设置了游戏说明,游戏提示,如图所示:

6、游戏提示

为解决玩家游戏体验的问题,创建游戏提示来帮助玩家进行游戏,如图所示:

7、退出游戏

设置一个退出功能,帮助玩家更好的游戏,如图所示:

这次的汉诺塔游戏分享就结束了,感谢家仁们的阅读,如有错误之处,还请家仁们指出,小生一定会尽力改正。

汉诺塔游戏设计(C++控制台版)相关推荐

  1. linux开发汉诺塔游戏程序,汉诺塔游戏终极版

    今天,我完成了汉诺塔游戏终极版.使用一个脚本来输出汉诺塔自动运行的步骤,再通过管道提供给汉诺塔游戏,实现了自动完成汉诺塔. 在去年我用C语言写完汉诺塔游戏时,一直有个未完成的心愿.我希望能让汉诺塔自动 ...

  2. python汉诺塔游戏_Python实战:搭建汉诺塔小游戏,快和小伙伴一起玩玩吧

    汉诺塔游戏:看谁能在短时间内将排好顺序的圈,按同样的顺放在另一根柱子上,每次只能动一个. 今天用python搭建汉诺塔小游戏(简约版) 代码亲测有效!源代码如下: #左中右塔用一个列表存储 left ...

  3. 多柱汉诺塔最优算法设计探究

    多柱汉诺塔最优算法设计探究   引言 汉诺塔算法一直是算法设计科目的最具代表性的研究问题,本文关注于如何设计多柱汉诺塔最优算法的探究.最简单的汉诺塔是三个柱子(A.B.C),因此多柱汉诺塔的柱子个数M ...

  4. 基于FPGA的汉诺塔游戏

    汉诺塔(又称河内塔)问题是源于印度一个古老传说的益智玩具.大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘.大梵天命令婆罗门把圆盘从下面开始按大小顺序重新摆放 ...

  5. c#语言编写汉诺塔游戏,c# 实现汉诺塔游戏

    汉诺塔游戏一旦掌握了规律,其实是有点单调和无聊的,不过却是学习递归的一个绝佳例子,想当初学习老谭C的时候,就卡在这儿好长时间. 对初学编程的人来说,递归本身就不易理解,如果使用C语言没有好的调试环境就 ...

  6. 【使用递归玩通关汉诺塔游戏】算法01-递归(斐波那契数列、汉罗塔问题)-java实现

    递归 定义:在一个方法(函数)的内部调用该方法(函数)本身的编程方式 简而言之就是 "自己调自己" 在玩游戏之前让我们先对递归有一个简单的了解吧! 5.1 递归简介 递归必须有一个 ...

  7. Py:递归求解汉诺塔,简单的几行编程可以搞定很高层的三柱汉诺塔游戏

    Py:递归求解汉诺塔,简单的几行编程可以搞定很高层的三柱汉诺塔游戏 目录 输出结果 核心代码 输出结果 核心代码 def hanoi(n,x,y,z):if n==1:print(x,'--→',z) ...

  8. 汉诺塔游戏的python实现——递归函数

    汉诺塔游戏python实现 def move(n, a, b, c): if n == 1: print('move', a, '-->', c) else: move(n-1, a, c, b ...

  9. Python案例:汉诺塔游戏

    Python案例:汉诺塔游戏 游戏规则: (1)一次只能移动一个环 (2)小环必须在大环之上

  10. CCF NOI1070 汉诺塔游戏

    问题链接:CCF NOI1070 汉诺塔游戏. 时间限制: 1000 ms  空间限制: 262144 KB 题目描述 汉诺塔由编号为1到n大小不同的圆盘和三根柱子a,b,c组成,编号越小盘子越小.开 ...

最新文章

  1. linux存储--inode与block详解(七)
  2. Win32汇编_基础
  3. css 设置背景图一半_CSS背景图设置
  4. 2018-2019-1 20165315 实验三 实时系统
  5. Scrum失败/成功案例分析
  6. python 表格处理软件_基于Python的Excel处理工具
  7. 排序算法四:归并排序基本原理以及Python实现
  8. Java NIO学习笔记 三 散点/收集 和频道转换
  9. 11g R2 RAC客户端负载均衡配置
  10. poj2513Colored Sticks(无向图判欧拉路、回路+trie树)
  11. Atitit NER实体命名识别(Name Entity Recognition 目录 1.1. a. NER实体命名识别(Name Entity Recognition)   1 2. NER抽
  12. python编写命令行框架_Python2和3的面向命令的命令行框架是什么?
  13. oracle 密码过期 ora-01017,Oracle密码过期, 报:ORA-01017: 用户名/口令无效; 登录被拒绝...
  14. Study「Photoshop」:勾线图
  15. 2021AAPM大赛第一名技术报告Designing an Iterative Network for Fanbeam-CTwith Unknown Geometry 阅读笔记
  16. Unity tips 之文字动画效果
  17. 百度对site语法的几种情况
  18. python与会计的论文_甭管前浪后浪,写完论文的先浪!
  19. 欧洲共同语言框架的b2-c1,德语语法A1-A2-B1-B2-C1
  20. ESP8266开发笔记4-AT24C256读写全流程

热门文章

  1. 基于JavaWeb实现的问卷调查系统
  2. warframe星际战甲氏族颜料35种全获取机制和获取流程攻略
  3. pintos (1) -- Alarm Clock
  4. android编程播放音乐,Android编程实现播放音频的方法示例
  5. Eclipse同屏显示两个代码编辑窗口
  6. 解决ios微信页面回退不刷新的问题
  7. 微型计算机由中央处理器,zy1.微型计算机中央处理器是由()组成的。
  8. 果然十三香!史上最强iPhone13来了:全面降价、刘海缩小,支持120HZ高刷!网友:真香!苹果:业内苦苦追赶我们的芯片性能...
  9. 卡莱特led显示屏调试教程_如何使用卡莱特软件点亮LED电子显示屏
  10. linux内核时区文件编辑器——ZIC时区编辑