当前位置: 首页 > news >正文

怎么到百度做网站山东服务好的seo

怎么到百度做网站,山东服务好的seo,做网站电话沧州,ps做网站效果图制作过程在找实习面试的时候,有一位面试官问过我一个非常有意思的面试题,如何设计一个连连看游戏。 作为一个学习计算机的学生,可能先要做的是去理解问题,在这个过程中可以尽情地去问面试官问题,沟通可能比写好代码更重要。 下…

在找实习面试的时候,有一位面试官问过我一个非常有意思的面试题,如何设计一个连连看游戏

  

 

作为一个学习计算机的学生,可能先要做的是去理解问题,在这个过程中可以尽情地去问面试官问题,沟通可能比写好代码更重要。

下面是我问面试官的几个问题:

1、连连看游戏的规则是什么?

  面试官给我打开了一个手机应用,解释了一下。其中最重要的是如何判断两个图形能否相消。(两个同样的图用线相连,连线拐的弯不能超过两个)

2、最多有多少张图?

  一般练练看游戏是20*20或者 30*30,所以图片最多大概在1000张左右。

3、如果两个图能够消除,是直接把两个图消除?还是找到最短路径后,把路径画出来,然后再消除?

  最短路径的问题可以之后考虑,先考虑简单的,直接消除两个图。

4、连连看游戏是否存在死锁状态?是否需要解除死锁状态?

  在玩连连看游戏的时候,如果图片是随机摆放的,可能会碰到死锁状态。因为死锁状态很影响用户体验,所以需要解决。

 

搞清楚了问题之后,我们就可以分析和解决问题了。先写一个连连看游戏的程序伪代码。

initGame();// 生成游戏初始化状态while(!isGameOver()){//如果游戏没有结束if(isDeadlock()){//如果出现死锁情况unlock();//解除死锁}waitClick();//等待用户点击游戏中的图
            curClick = getCurrentClick();//得到当前输入if(isLegalInput(curClick) && preClick==null){//如果当前是合法输入,并且是第一次点击preClick = curClick;curClick = null;}if(preClick!=null && curClick!=null){//如果已经点了两个图if(findPath(preClick, curClick)){//如果两个图之间存在一条连线remove(preClick, curClick);//消除这两个图preClick = null;curClick = null;//还原状态}else{preClick = curClick;curClick = null;//要被连得图变成最近一次点击的图}}
}
  •  生成游戏初始状态。

  我们先假设有25张不同的图,连连看游戏的大小是20*20,那么我们在25张图中有放回的随机抽样200次即可,然后再把这200张图复制一遍,变成400张图。最后,我们需要把这400张图随机地放到一个20*20的二维空间中。

    

public class Lianliankan {private int[][] grid;//一个二维数组,里面的数字代表着图片的id,id=0时代表着空白。其中第一行和最后一行,第一列和最后一列都是空白。private int size;//size*size的连连看游戏网格private int pictureNum;//不同图的数量,编号为1到pictureNum。public Lianliankan(int size, int pictureNum){this.size = size;this.pictureNum = pictureNum;grid = new int[size+2][size+2];//网格第一行和最后一行,第一列和最后一列都是空白。
    }//初始化连连看游戏public void initGame(){int[] pictures = new int[size*size];//用该数组来保存随机选出的图。Random rand = new Random();//进行有放回的抽样for(int i=0;i<size*size;){int randomPicture = rand.nextInt(pictureNum) + 1;pictures[i++] = randomPicture; pictures[i++] = randomPicture;}//打乱图片的顺序for(int i=0;i<size*size;i++){int randomPos = rand.nextInt(size*size - i) + i;exchangePosition(pictures, i, randomPos);}//向网格中摆放图片for(int i=0;i<size;i++){for(int j=0;j<size;j++){grid[i+1][j+1] = pictures[i*size+j];}}//打印网格信息for(int i=0;i<grid.length;i++){for(int j=0;j<grid[0].length;j++){System.out.print(grid[i][j] + "\t");}System.out.println();}}public static void exchangePosition(int[] pictures, int i, int j){int tmp = pictures[i];pictures[i] = pictures[j];pictures[j] = tmp;}public static void main(String[] args){Lianliankan lianliankan = new Lianliankan(20, 25);lianliankan.initGame();// 生成游戏初始化状态
    }
}

 

  • 判断游戏是否结束。

  游戏结束的条件就是所有的图片都被连线并且消除了,我们可以通过加入一个变量existPictureNum,来记录当前网格中存在的图片数量,当existPictureNum为0时,所有图片都已经消除,游戏也就结束了。实现就是下面加粗的代码。

    

public class Lianliankan {private int[][] grid;//一个二维数组,里面的数字代表着图片的id,id=0时代表着空白。其中第一行和最后一行,第一列和最后一列都是空白。private int size;//size*size的连连看游戏网格private int pictureNum;//不同图的数量,编号为1到pictureNum。private int existPictureNum;//用于记录当前网格中的图的数量public Lianliankan(int size, int pictureNum){this.size = size;this.pictureNum = pictureNum;grid = new int[size+2][size+2];//网格第一行和最后一行,第一列和最后一列都是空白。this.existPictureNum = 0;}//初始化连连看游戏public void initGame(){int[] pictures = new int[size*size];//用该数组来保存随机选出的图。Random rand = new Random();//进行有放回的抽样for(int i=0;i<size*size;){int randomPicture = rand.nextInt(pictureNum) + 1;pictures[i++] = randomPicture; pictures[i++] = randomPicture;}//打乱图片的顺序for(int i=0;i<size*size;i++){int randomPos = rand.nextInt(size*size - i) + i;exchangePosition(pictures, i, randomPos);}//向网格中摆放图for(int i=0;i<size;i++){for(int j=0;j<size;j++){grid[i+1][j+1] = pictures[i*size+j];existPictureNum++;}}//打印网格信息for(int i=0;i<grid.length;i++){for(int j=0;j<grid[0].length;j++){System.out.print(grid[i][j] + "\t");}System.out.println();}}public static void exchangePosition(int[] pictures, int i, int j){int tmp = pictures[i];pictures[i] = pictures[j];pictures[j] = tmp;}private boolean isGameOver(){return existPictureNum==0;}public static void main(String[] args){Lianliankan lianliankan = new Lianliankan(20, 25);lianliankan.initGame();// 生成游戏初始化状态while(!lianliankan.isGameOver()){//如果游戏没有结束//喝杯咖啡
        }}
}

 

  • 判断连连看游戏是否是死锁状态。

  最直观的想法是遍历一下网格,碰到一个图时,看看该图是否能够和另一个图进行连线。找到一个可以连线的图,就不是死锁状态;否则,是死锁状态。

  • 如果是死锁状态,将其解锁。
  • 得到当前输入。
  • 判断是否为合法收入。
  • 判断两个图之间是否存在一条连线。
  • 消除两个图。

转载于:https://www.cnblogs.com/wuwei-bupt/p/7838037.html

http://www.lbrq.cn/news/2774197.html

相关文章:

  • 做网站用vs还是dw武汉seo外包平台
  • 仓山网站建设厦门seo结算
  • 怎么做校园表白网站推广码怎么填
  • 人妖手术是怎么做的视频网站百度推广点击收费标准
  • 广告位网站模板软文广告经典案例100字
  • 景区网站建设策划标题关键词优化报价
  • 做seo网站营销推广广州市网络seo外包
  • 公司网站维护费 入什么科目安卓优化大师hd
  • 建设高端网站公司网站优化检测
  • 品牌包装建设网站互联网广告是做什么的
  • 网站上的图片格式怎么做接app推广
  • 建设网站的策划书互联网平台推广怎么做
  • 京东店铺买卖平台seo关键词的优化技巧
  • 网站后台上传图片做难吗?域名怎么注册
  • 简单的网站设计div css盒子友情链接官网
  • 广州新塘建网站宁波网络推广方式
  • 个人做动漫资源网站有哪些客户关系管理系统
  • 互联网公司的经营范围有哪些重庆百度搜索优化
  • 崇信县门户网站最新留言重庆关键词自然排名
  • 辽宁城乡建设网站电商的运营模式有几种
  • 网上商城建站服务商刷外链
  • 网站关键词排名优化应该怎么做数字营销课程
  • 做视频网站视频存放问题网络营销网站推广方案
  • 百度推广和网站建设seo排名优化app
  • facebook怎么建设网站酒店机票搜索量暴涨
  • 直播网站开发百度首页登录入口
  • 如何优化网站代码成都网站seo费用
  • 做电影网站违法吗重庆森林经典台词独白
  • 网站功能设计指什么市场营销的八个理论
  • 网站要注册为什么公关公司经营范围
  • 项目过程管理的重点是什么
  • 大语言模型中的归一化实现解析
  • day25|学习前端js
  • 深度学习——R-CNN及其变体
  • python实现梅尔频率倒谱系数(MFCC) 除了傅里叶变换和离散余弦变换
  • 《A Practical Guide to Building Agents》文档学习