C语言版,八数码小游戏实现,简单好玩
目录
一、问题描述
二、迟来的代码
三、简单分析
一、问题描述
- 3*3的方格棋盘上,摆放着1到8这八个数码,有1个方格是空。
- 要求对空格执行空格左移、空格右移、空格上移和空格下移这四个操作使得棋盘从初始状态(图左)到目标状态(图右)。
二、迟来的代码
#include <stdio.h> #include <stdlib.h> #include <time.h> #include <conio.h>#define N 3 // 阶数int src[N][N]; // 初始状态 int dest[N][N] = {1, 2, 3, 8, 0, 4, 7, 6, 5}; // 目标状态// 初始化棋盘 void init() {int i, j, k;int a[N*N] = {1, 2, 3, 8, 0, 4, 7, 6, 5};int flag[N*N] = {0}; // 用来标记0~8中哪个数字已经出现过srand(time(0));for(i = 0; i < N; i++){for(j = 0; j < N; j++){// 尝试生成一个0~8间的数字k = rand()%(N*N);while(1){// 如果该数字未出现if(flag[k] == 0) {flag[k] = 1; // 修改标志位src[i][j] = a[k]; // 初始化对应src的位置break;}// 重新生成数字k = rand()%(N*N);}} } }// 打印棋盘状态 void display() {int i, j;for(i = 0; i < N; i++){for(j = 0; j < N; j++){// 把0当做空格输出if(src[i][j]){printf("%d ", src[i][j]);}else{printf(" ");}}printf("\n");} }// 寻找出棋盘中的空格键 void findSpace(int *x, int *y) {int i, j;for(i = 0; i < N; i++){for(j = 0; j < N; j++){if(src[i][j] == 0) // 找到空格{*x = i;*y = j;}}} }// 空格左移 void left() {int x, y;findSpace(&x, &y); // 寻找空格坐标// 空格必须是处于第2列或者第3列,才能左移if(y >= 1){src[x][y] = src[x][y-1];src[x][y-1] = 0;} }// 空格右移 void right() {int x, y;findSpace(&x, &y); // 寻找空格坐标// 空格必须是处于第1列或者第2列,才能右移if(y <= 1){src[x][y] = src[x][y+1];src[x][y+1] = 0;} }// 空格上移 void up() {int x, y;findSpace(&x, &y); // 寻找空格坐标// 空格必须是处于第2行或者第3行,才能上移if(x >= 1){src[x][y] = src[x-1][y];src[x-1][y] = 0;} }// 空格下移 void down() {int x, y;findSpace(&x, &y); // 寻找空格坐标// 空格必须是处于第1行或者第2行,才能下移if(x <= 1){src[x][y] = src[x+1][y];src[x+1][y] = 0;} }// 检查当前棋盘状态是否为目标状态 int checkWin() {int i, j;for(i = 0; i < N; i++){for(j = 0; j < N; j++){// 检测到有不同的就立马返回,节省时间if(src[i][j] != dest[i][j]){return 0;} }}return 1; }int main() {char ch;init();printf("下面开始八数码小游戏\n");while(1){display();ch = getch();switch(ch){case 72:up();break;case 80:down();break;case 75:left();break;case 77:right();break;}system("cls");if(ch == 27){printf("你已退出\n");break;}if(checkWin()){printf("你赢了\n");break;}}return 0; }
运行截图:(其他例子自己举)
三、简单分析
如果认真且仔细看完代码的程序猿同学,根据注释的讲解,可以说基本上可以看懂了,如果想看如果求解的可以在我的博客里找,里面包含了,广度优先搜索,深度优先搜索,等代价搜索,启发式搜索等解法,记得收藏^_^
此外生成的初始状态可能无解,例如上述的例子,所以需要注意,这也是最刺激的地方^_^
C语言版,八数码小游戏实现,简单好玩相关推荐
- python初学总结八数码小游戏
pycharm 编译的八数码小游戏 基本游戏功能 基本游戏功能利用python的基础知识或者C语言的基础知识能够把八数码中的九个数放进一个列表里面,然后实现移动以及生成随机数和随机移动的功能.但本人能 ...
- 控制台版贪吃蛇小游戏 C语言
写在前面 最近我们C语言的课设快开始了,开始前刚好有时间就写了一下C语言的贪吃蛇小游戏(单链表实现),包含了经典模式和无边界模式 ,网上查了设置颜色 和 改变光标位置 还有 用方向键控制 的函数,第一 ...
- c语言射击类小游戏任务书,(c语言课程设计报告小游戏“石头剪子布”.doc
(c语言课程设计报告小游戏"石头剪子布" <C语言课程设计>报告 题目:石头剪子布 班级: 学号: 姓名: 指导教师: 成绩: 目 录: 一.选题背景- 3 - 二.设 ...
- 安卓c语言自动补全软件吾爱,C语言实现贪吃蛇小游戏
本文实例为大家分享了C语言实现贪吃蛇小游戏的具体代码,供大家参考,具体内容如下 一.程序实现的原理: 1.构造蛇身:定义一个坐标数组,存放的是蛇的每一节蛇身所在的坐标位置.这样就将移动蛇身的操作转换为 ...
- c++ 小游戏_C/C++编程笔记:C语言写推箱子小游戏,大一学习C语言练手项目
C语言,作为大多数人的第一门编程语言,重要性不言而喻,很多编程习惯,逻辑方式在此时就已经形成了.这个是我在大一学习 C语言 后写的推箱子小游戏,自己的逻辑能力得到了提升,在这里同大家分享这个推箱子小游 ...
- 简易贪吃蛇小游戏java版_用GUI实现java版贪吃蛇小游戏
本文实例为大家分享了java版贪吃蛇小游戏的具体代码,供大家参考,具体内容如下 项目结构 新建一个JFrame窗口,作为程序入口 public class GameStart{ public stat ...
- R语言入门——猜数小游戏
R语言入门--猜数小游戏 题目介绍 使用代码(2种方法) 运行结果 题目介绍 设计一个猜数字的游戏:计算机随机生成一个1~100 之间的整数,然后由用户猜测所产生的随机数.根据用户猜测的情况给出不同提 ...
- C语言开发打气球小游戏
C语言开发打气球小游戏 首先我们写一下项目所需要的头文件 #include<stdio.h>//标准输入输出头文件 #include<math.h>//数学库头文件 #incl ...
- 基于C语言的信息管理系统和小游戏
基于C语言的信息管理系统和小游戏 一.课设题 本次课程设计有以两类题可以选择: 信息管理系统: 即实现个基于控制台的信息管理系统,例如选课系统.图书馆系统.公司财务系统等等 ,除满增删查改等基本功能, ...
最新文章
- SharePoint服务器如果需要安装杀毒软件, 需要注意什么?
- Castle ActiveRecord学习实践(4):实现One-Many关系的映射
- 支付宝架构师眼里的高并发架构
- 一个检查SPN的小工具
- JAVA日期和时间API
- 150秒内诊断脑瘤!最新医学影像AI在《Nature Medicine》发表
- 几个常用的CSS3样式代码以及不兼容的解决办法
- 将python程序打包成可执行文件exe
- 移动开发day4_京东移动页面
- Nginx 限制并发连接数。
- “21天好习惯”第一期-13
- 【408考研笔记】操作系统完整知识点
- 浅聊||高速PCB过孔设计需要注意这些问题
- 日历2021年日历表|2021年日历表打印版 Excel版
- 如何做好aso优化,如何做好ASO关键词优化
- Zookeeper集群搭建(多节点,单机伪集群,Docker集群)
- 【C/C++】多线程中的几种锁
- 用Python爬中国银行指定日期九点三十分汇率
- SQL经典50查询语句(面试题)案例2
- 快学Scala 学习笔记-1: (第一章到第三章)
热门文章
- [内附完整源码和文档] 基于SSH的智博书店系统设计与实现
- 2018高中计算机教学计划,上海市高中2018学年度课程计划说明
- 查看当前桌面壁纸的地址
- java字符串数组的常见用法
- 易语言超级列表框怎么设置文本颜色_条码打印软件如何设置条码和数字之间的间距...
- linux debian 安装gcc,如何在Debian 10 Linux上安装GCC编译器
- fiddler工具功能
- 2023最新SSM计算机毕业设计选题大全(附源码+LW)之java宠物领养信息管理系统5gcp7
- 三自由度无人机飞手培训、PID调试、飞行教学、飞控算法验证、故障仿真平台
- 【自学笔记】天地图添加标注