汉罗塔小游戏(自创)
汉诺塔是这样一种小游戏:
有三根柱子。一开始,若干张圆盘按照上小下大的顺序串在第一根柱子上。而游戏的目标为将所有圆盘全部移动到第三根柱子上去,并且仍要保持上小下大的顺序。而且要求:
①每次只能移动一张圆盘。
②较大的圆盘不可以放在较小的圆盘上面。
比如说,在这一步我想把第一根柱子上的圆盘移动到第二根柱子上去,行不行呢?不行。
因为这样一移动,大圆盘就在小圆盘上面了。
所以,我们只能把它移动到第三根空的柱子上去。
源代码:
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#define MAX_PLATES 15
#define SPACE 32
#define EMPTY 51316
#define CUR 32118
int nTimesTwo(int n){int product = 1;for(int i = 0; i < n; i++) product*=2;return product;
}
void cls(){system("cls");
}
void pause(){system("pause");
}
void tab(int times){for(int i=0; i<times; i++) printf("\t");
}
void line(int times){for(int i=0; i<times; i++) printf("\n");
}
void space(int times){for(int i=0; i<times; i++) printf(" ");
}
void printPlate(int size){switch(size){case 0:space(MAX_PLATES);printf("|\t");break;case EMPTY:space(MAX_PLATES);printf(" \t");break;case CUR:space(MAX_PLATES);printf("v\t");break;default:for(int i = 0; i < MAX_PLATES-size; i++){printf(" ");}for(int i = 0; i < size * 2 + 1; i++){printf("█");}if(size<8)tab(1);break;}
}
int menu(){int num = 0;int cur = 6;int key;while(num==0){cls();printf("********************汉诺塔小游戏********************\n");printf("请选择盘子的数量:\n");for(int i = 1; i <= MAX_PLATES; i++){if(cur == i){printf("[%d] ",i);}else{printf(" %d ",i);}}line(1);key = getch();switch(key){case 'L': case 'l':return 0;break;case 'A': case 'a':if(cur == 1) cur=15;else cur--;break;case 'D': case 'd':if(cur == 15) cur=1;else cur++;break;case SPACE:num = cur;break;default:break;}}return num;
}int game(int plateNum){int pillar[3][MAX_PLATES+8] = {};int isPicked = 0;int cur = 0;int key;int steps=0;int notSuccess;for(int i = 0; i < plateNum; i++){pillar[0][i] = plateNum - i;}for(int i = 0; i < 3; i++){for(int j = MAX_PLATES+8-1;j>=MAX_PLATES+8-3; j--){pillar[i][j] = EMPTY;}} while(1){cls();notSuccess = 0;if(!isPicked){pillar[cur][MAX_PLATES+8-2]=CUR;}for(int i = MAX_PLATES+8-1; i >= 0; i--){for(int j = 0; j < 3; j++){tab(1);printPlate(pillar[j][i]);}line(1);}for(int i = 0; i < 2; i++){for(int j = 0; j < MAX_PLATES + 5; j++){if(pillar[i][j] != 0){notSuccess = 1;}}}if(isPicked){notSuccess = 1;}if(!notSuccess){return steps;}key = getch();switch(key){case 'A': case 'a':if(cur == 0){pillar[2][MAX_PLATES+8-2] = pillar[0][MAX_PLATES+8-2];pillar[0][MAX_PLATES+8-2] = EMPTY;cur=2;}else{pillar[cur-1][MAX_PLATES+8-2] = pillar[cur][MAX_PLATES+8-2];pillar[cur][MAX_PLATES+8-2] = EMPTY;cur--;}break;case 'D': case 'd':if(cur == 2){pillar[0][MAX_PLATES+8-2] = pillar[2][MAX_PLATES+8-2];pillar[2][MAX_PLATES+8-2] = EMPTY;cur=0;}else{pillar[cur+1][MAX_PLATES+8-2] = pillar[cur][MAX_PLATES+8-2];pillar[cur][MAX_PLATES+8-2] = EMPTY;cur++;}break;case SPACE:if(isPicked == 1){if(pillar[cur][0]==0){pillar[cur][0] = pillar[cur][MAX_PLATES+8-2];pillar[cur][MAX_PLATES+8-2] = CUR;steps++;isPicked = 0;}else{for(int i = MAX_PLATES+5-1; i>=0; i--){if(pillar[cur][i] != 0){if(pillar[cur][MAX_PLATES+8-2] < pillar[cur][i]){pillar[cur][i+1] = pillar[cur][MAX_PLATES+8-2];pillar[cur][MAX_PLATES+8-2] = CUR;steps++;isPicked = 0;}else{printf("不能放在比自己小的盘子上!\n");pause();}break;}}}}else{for(int i = MAX_PLATES+5-1; i>=0; i--){if(pillar[cur][i] != 0){pillar[cur][MAX_PLATES+8-2] = pillar[cur][i];pillar[cur][i] = 0;isPicked = 1;break;}}}break;case 'L': case 'l':return 0;default:break;}}
}int main(void){int plateNum=0;int key;int confirm=0;int step=0;while(confirm != 'y' && confirm != 'Y'){plateNum = menu();if(plateNum == 0){printf("结束游戏……\n");return 0;}cls();printf("确定开始游戏吗?\n盘数:%d\n最小移动步数:%d\n按“Y”键确认,按其他任意键返回重选。\n",plateNum,nTimesTwo(plateNum)-1);confirm = getch();}step = game(plateNum);if(step != 0){printf("成功!你所用的步数为:%d步。\n",step);}printf("游戏结束。\n");pause();return 0;
}
汉罗塔小游戏(自创)相关推荐
- 微信小游戏投放创角没有数据上报?
微信小游戏投放录 欢迎使用神奇的MP投放后台 小游戏 官网文档 接入步骤 上报类型 解决踩坑 欢迎使用神奇的MP投放后台 如果有联调上的问题,首页有博主联系方式 小游戏 最近各个投放平台都开放了小游戏 ...
- 【项目展示】自己用C语言编写的汉诺塔小游戏
本文目录 1.前言 2.什么是汉诺塔? 3.项目规格 4.基本思路 5.源代码 6.运行结果 7.感想与心得 8.未来规划 1.前言 昨儿个把自己大一时候写过的五子棋重构了一下,之后就在想着要不把不知 ...
- python汉诺塔游戏_Python实战:搭建汉诺塔小游戏,快和小伙伴一起玩玩吧
汉诺塔游戏:看谁能在短时间内将排好顺序的圈,按同样的顺放在另一根柱子上,每次只能动一个. 今天用python搭建汉诺塔小游戏(简约版) 代码亲测有效!源代码如下: #左中右塔用一个列表存储 left ...
- 【使用递归玩通关汉诺塔游戏】算法01-递归(斐波那契数列、汉罗塔问题)-java实现
递归 定义:在一个方法(函数)的内部调用该方法(函数)本身的编程方式 简而言之就是 "自己调自己" 在玩游戏之前让我们先对递归有一个简单的了解吧! 5.1 递归简介 递归必须有一个 ...
- C语言--汉诺塔小游戏
汉诺塔小游戏的游戏规则:有三个柱子abc,其a柱上面有若干个圆盘,要求借助三个柱子将a柱上面的圆盘按顺序移动到c柱上去,并且c柱上每次只能增加一个圆盘,问需要移动多少次才可以完成此游戏. 一.首先理解 ...
- html实现汉诺塔小游戏
文章目录 1.设计来源 汉诺塔由来 1.1 主界面 1.2 游戏规则 1.3 游戏完成界面 2.效果和源码 2.1 动态效果 2.2 源代码 源码下载 作者:xcLeigh 文章地址:https:// ...
- C语言递归小游戏—汉诺塔(hanoi)
前言: 汉诺塔大家都不陌生吧,在猩球崛起这个电影里,人们通过凯撒玩汉诺塔知道了它的智商增高了,这个益智小游戏的规则就是: 汉诺塔(Tower of Hanoi),又称河内塔.是一个源于印度古老传说的益 ...
- C++自创打怪小游戏
大家好,我是yanxinchenji 第一次发博客有点紧张 我前几天写了个打怪小游戏 想发博客上给大家看看 有什么bug欢迎在评论区提出(毕竟这还是个测试版 也可以加我微信:yanxinchenjic ...
- python撩妹技能_猜数字小游戏python实现(可用来撩妹撩汉)
import random import time number = random.randint(0,199) print("----------猜数字小游戏----------" ...
最新文章
- python是不是特别垃圾-震惊!垃圾分类居然能用Python搞定!
- springmvc二十二:annotation-driven标签
- 如何成为CSDN博客专家
- [POJ 3164]Command Network(最小树形图,朱刘算法)
- 解决 Unmapped Spring configuration files found.Please configure Spring facet.
- 迪士尼自研算法突破百万高清像素用AI换脸来拍电影
- jdbc mysql分页_JDBC【数据库连接池、DbUtils框架、分页】
- IOS开发之Target-Action模式
- 摩托罗拉投资Android外来往戏开辟商Moblyng
- Linux学习笔记5 - Shell编程(类似于Windows下的批处理)
- java mysql字符串拼接_Oracle与MySQL字符串拼接
- Github上优秀的开源项目
- 用Altium Designer的databaseLib文件连接MySQL数据库工具管理自己的元器件信息数据库
- MPI(Massage Passing Interface)
- 性能测试——抗攻击-hyenae-ddos攻击
- Android 图片资源大瘦身
- 网易2019实习生招聘编程题集合
- 朱松纯:初探计算机视觉三个源头兼谈人工智能
- 苹果开发者账号注册申请流程
- 网站流量日志数据分析系统(模块开发----数据仓库设计)