目录

一、问题描述

二、迟来的代码

三、简单分析

一、问题描述

  1. 3*3的方格棋盘上,摆放着1到8这八个数码,有1个方格是空。
  2. 要求对空格执行空格左移、空格右移、空格上移和空格下移这四个操作使得棋盘从初始状态(图左)到目标状态(图右)。

二、迟来的代码

#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语言版,八数码小游戏实现,简单好玩相关推荐

  1. python初学总结八数码小游戏

    pycharm 编译的八数码小游戏 基本游戏功能 基本游戏功能利用python的基础知识或者C语言的基础知识能够把八数码中的九个数放进一个列表里面,然后实现移动以及生成随机数和随机移动的功能.但本人能 ...

  2. 控制台版贪吃蛇小游戏 C语言

    写在前面 最近我们C语言的课设快开始了,开始前刚好有时间就写了一下C语言的贪吃蛇小游戏(单链表实现),包含了经典模式和无边界模式 ,网上查了设置颜色 和 改变光标位置 还有 用方向键控制 的函数,第一 ...

  3. c语言射击类小游戏任务书,(c语言课程设计报告小游戏“石头剪子布”.doc

    (c语言课程设计报告小游戏"石头剪子布" <C语言课程设计>报告 题目:石头剪子布 班级: 学号: 姓名: 指导教师: 成绩: 目 录: 一.选题背景- 3 - 二.设 ...

  4. 安卓c语言自动补全软件吾爱,C语言实现贪吃蛇小游戏

    本文实例为大家分享了C语言实现贪吃蛇小游戏的具体代码,供大家参考,具体内容如下 一.程序实现的原理: 1.构造蛇身:定义一个坐标数组,存放的是蛇的每一节蛇身所在的坐标位置.这样就将移动蛇身的操作转换为 ...

  5. c++ 小游戏_C/C++编程笔记:C语言写推箱子小游戏,大一学习C语言练手项目

    C语言,作为大多数人的第一门编程语言,重要性不言而喻,很多编程习惯,逻辑方式在此时就已经形成了.这个是我在大一学习 C语言 后写的推箱子小游戏,自己的逻辑能力得到了提升,在这里同大家分享这个推箱子小游 ...

  6. 简易贪吃蛇小游戏java版_用GUI实现java版贪吃蛇小游戏

    本文实例为大家分享了java版贪吃蛇小游戏的具体代码,供大家参考,具体内容如下 项目结构 新建一个JFrame窗口,作为程序入口 public class GameStart{ public stat ...

  7. R语言入门——猜数小游戏

    R语言入门--猜数小游戏 题目介绍 使用代码(2种方法) 运行结果 题目介绍 设计一个猜数字的游戏:计算机随机生成一个1~100 之间的整数,然后由用户猜测所产生的随机数.根据用户猜测的情况给出不同提 ...

  8. C语言开发打气球小游戏

    C语言开发打气球小游戏 首先我们写一下项目所需要的头文件 #include<stdio.h>//标准输入输出头文件 #include<math.h>//数学库头文件 #incl ...

  9. 基于C语言的信息管理系统和小游戏

    基于C语言的信息管理系统和小游戏 一.课设题 本次课程设计有以两类题可以选择: 信息管理系统: 即实现个基于控制台的信息管理系统,例如选课系统.图书馆系统.公司财务系统等等 ,除满增删查改等基本功能, ...

最新文章

  1. SharePoint服务器如果需要安装杀毒软件, 需要注意什么?
  2. Castle ActiveRecord学习实践(4):实现One-Many关系的映射
  3. 支付宝架构师眼里的高并发架构
  4. 一个检查SPN的小工具
  5. JAVA日期和时间API
  6. 150秒内诊断脑瘤!最新医学影像AI在《Nature Medicine》发表
  7. 几个常用的CSS3样式代码以及不兼容的解决办法
  8. 将python程序打包成可执行文件exe
  9. 移动开发day4_京东移动页面
  10. Nginx 限制并发连接数。
  11. “21天好习惯”第一期-13
  12. 【408考研笔记】操作系统完整知识点
  13. 浅聊||高速PCB过孔设计需要注意这些问题
  14. 日历2021年日历表|2021年日历表打印版 Excel版
  15. 如何做好aso优化,如何做好ASO关键词优化
  16. Zookeeper集群搭建(多节点,单机伪集群,Docker集群)
  17. 【C/C++】多线程中的几种锁
  18. 用Python爬中国银行指定日期九点三十分汇率
  19. SQL经典50查询语句(面试题)案例2
  20. 快学Scala 学习笔记-1: (第一章到第三章)

热门文章

  1. [内附完整源码和文档] 基于SSH的智博书店系统设计与实现
  2. 2018高中计算机教学计划,上海市高中2018学年度课程计划说明
  3. 查看当前桌面壁纸的地址
  4. java字符串数组的常见用法
  5. 易语言超级列表框怎么设置文本颜色_条码打印软件如何设置条码和数字之间的间距...
  6. linux debian 安装gcc,如何在Debian 10 Linux上安装GCC编译器
  7. fiddler工具功能
  8. 2023最新SSM计算机毕业设计选题大全(附源码+LW)之java宠物领养信息管理系统5gcp7
  9. 三自由度无人机飞手培训、PID调试、飞行教学、飞控算法验证、故障仿真平台
  10. 【自学笔记】天地图添加标注