我的改进版2048(1)


假设有谁想要这个软件的话,在评论中留一个邮箱吧。)

前几天好几次看到有朋友晒出玩2048刷高分的截图。我就想我能不能也做一个2048呢?细致想了想2048游戏的规律,发现事实上逻辑上非常easy,也不用研究什么算法,于是我立即认为我能够非常快写出来。当天下午我就用了四个小时完毕了2048的基本功能。几天后认为不满足,于是给我的2048加了存档、读档和后退一步的功能,这样就更好刷分了呢!

使用语言:C#; 平台:Visual Studio 2012 Win Form。

怎样完毕2048的基本功能呢?2048在每一次操作后16个方格的数字就有可能发生变化,所以在我的程序里用一个4乘4的二维数组来存这16个值,0表示没有数字。

每一次操作直接改变数组的值。然后再把数组的值填到16个方格中。

首先来看程序中几个全局的变量:

public int[,] matrixValue = new int[4, 4];//相应16个方格的数字,0表示没有数字public bool isThereChanged = false;//表示每一次按键后是否发生改变public int score = 0;//此次游戏的分数public int maxScore = 0;//记录最高分,用于推断是否破纪录public List<storeRecord> dataStoreRecord = new List<storeRecord>();//存储全部存档public List<int[,]> history = new List<int[,]>();//存近期10步操作
如今想一下,玩2048的时候往一个方向滑动它是怎么改变16个方格的数字的。我把这个过程分解成三个步骤,相应程序中的三个函数。

我认为在软件开发过程中,这样的模块化设计的思想是非常重要的。

下面是这三个函数(三个步骤):

public void addSameNumber(string command)//first step往指定方向叠加同样数字的相邻两格
public void moveToEdge(string command)//Second step将全部有数字的格子往指定方向靠边移动
public void addAnNumber()//Third step在没有数字的格子中随机选择一个加入数字
       事实上凝视上已经说明了其目的。第一个函数会在指定方向上叠加相邻两个同样的数字,相邻的意思是中间没有非0的数字,也就是有可能两个同样数字中间两个空格。这样的情况下也要相机;第二个函数是在实现了同样数字的叠加之后把全部数字往一个方向挪动;第三个函数实现的是在一个操作过后16个方格状态有改变的时候随机给空格填入一个数字。

第一个函数:(仅仅贴出向上移动的代码)

public void addSameNumber(string command)//first step往指定方向叠加同样数字的相邻两格{if (command == "up"){for (int col = 0; col < 4; col++){int firstOfSamePair = -1;int previousIndex = -1;for (int row = 0; row < 4; row++){if (matrixValue[row, col] != 0){if (matrixValue[row, col] == firstOfSamePair){score += matrixValue[row, col] * 2;changeYourScoreHandle();//刷新你的分数matrixValue[previousIndex, col] *= 2;matrixValue[row, col] = 0;firstOfSamePair = -1;previousIndex = -1;isThereChanged = true;}else{firstOfSamePair = matrixValue[row, col];previousIndex = row;}}}}}//if
第二个函数:

public void moveToEdge(string command)//Second step将全部有数字的格子往指定方向靠边移动{if (command == "up"){for (int col = 0; col < 4; col++){int index = 0;for (int row = 0; row < 4; row++){if (matrixValue[row, col] != 0){int temp = matrixValue[row, col];matrixValue[row, col] = matrixValue[index, col];matrixValue[index, col] = temp;if (index != row)isThereChanged = true;index++;}}}}
第三个函数:

public void addAnNumber()//Third step在没有数字的格子中随机选择一个加入数字{int emptyCount = 0;for(int i = 0; i < 4; i++){for(int j = 0; j < 4; j++){if(matrixValue[i,j] == 0)emptyCount++;}}Random rand = new Random();int temp = rand.Next(emptyCount);emptyCount = 0;for (int i = 0; i < 4; i++){for (int j = 0; j < 4; j++){if (matrixValue[i, j] == 0){if (emptyCount == temp)randomAddNumber(i, j);//往该位置加入数字emptyCount++;}}}}
其它的请看下篇文章《我的改进版2048(2)》


 


转载于:https://www.cnblogs.com/liguangsunls/p/7244789.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/369852.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

什么是 HTML5?

HTML5 是下一代的 HTML。 什么是 HTML5&#xff1f; HTML5 将成为 HTML、XHTML 以及 HTML DOM 的新标准。 HTML 的上一个版本诞生于 1999 年。自从那以后&#xff0c;Web 世界已经经历了巨变。 HTML5 仍处于完善之中。然而&#xff0c;大部分现代浏览器已经具备了某些 HTML5 支…

涉及CDI和JSF的过期对话的定制错误页面

自上次写博客以来已经有一段时间了。 我一直在考虑写一些技术博客&#xff0c;但最终却忙于其他事情。 上周&#xff0c;在Coderanch论坛上进行了非常有趣的讨论。 甚至更有趣&#xff0c;因为它涉及JBoss。 熟悉Java EE Web应用程序的开发人员会知道&#xff0c;Web应用程序部…

2020年市场最缺什么_2020年聚合氯化铝市场评述

2020年聚合氯化铝市场评述一、行情概述&#xff1a;今年聚合氯化铝价格整体呈下滑趋势&#xff0c;接近年底价格才有小幅反弹。但不同时期价格有小幅起伏&#xff0c;主要受疫情影响&#xff0c;在下游需求不佳的影响下价格出现下滑。1月受疫情影响&#xff0c;前期停产企业短期…

通过反射来将一个类的内容转换到另外一个类里

主函数&#xff1a; import com.alibaba.fastjson.JSON;import com.alibaba.fastjson.serializer.ValueFilter;import com.google.common.base.Preconditions; import java.lang.reflect.Field;import java.lang.reflect.Modifier; public class leijun {public static void ma…

sql语句中left join和inner join中的on与where的区别分析

sql语句中left join和inner join中的on与where的区别分析 原文:sql语句中left join和inner join中的on与where的区别分析关于SQL SERVER的表联接查询INNER JOIN 、LEFT JOIN和RIGHT JOIN&#xff0c;经常会用到ON和WHERE的条件查询&#xff0c;以前用的时候有时是凭感觉的&…

开发辅助 | 阿里图标库iconfont入门使用

目前大多数的互联网公司&#xff0c;前端开发和UI设计师配合中&#xff0c;针对设计师给图的效果图&#xff0c;前端开发工程师不再像往常一样对于细小图标进行切图&#xff0c;取而代之的是引用阿里图标库&#xff08;http://iconfont.cn/&#xff09;&#xff1b;简单的临时开…

使用Spring Security对RESTful服务进行身份验证

1.概述 本文重点介绍如何针对提供安全服务的安全REST API进行身份验证 -主要是RESTful用户帐户和身份验证服务。 2.目标 首先&#xff0c;让我们看一下参与者-典型的启用了Spring Security的应用程序需要针对某些事物进行身份验证-该事物可以是数据库&#xff0c;LDAP或可以是…

可拖动的弹窗

pc端&#xff1a; <!DOCTYPE html> <html lang"en"> <head> <meta charset"UTF-8"> <title>可拖动的弹窗</title> <style type"text/css"> a{text-decoration: …

向量外积_解析几何 -向量

目录1.向量2.内积3.外积4.混合积5.双重外积6.关系式正文1.向量vector 引入vector O规定O没有确切的方向&#xff0c;即与任何向量不仅平行&#xff0c;而且垂直。申明&#xff1a;本文章的向量为自由向量&#xff0c;即始点不固定的向量&#xff0c;它可以任意的平行移动&#…

HTML5 参数传递

页面显示效果&#xff0c;如下图&#xff1a; 主页面代码&#xff1a; <!DOCTYPE html> <html><head><meta charset"UTF-8"><title></title></head><body><br><br><a href"jssendValue.html?i…

双向@OneToOne主键关联

现在该继续有关Hibernate的文章了。 最后一个致力于单向OneToOne关联 。 因此&#xff0c;今天我将向您展示如何获取双向OneTonOne主键关联 。 本教程中基于前一篇文章的示例。 让我们开始吧。 我将使用以前创建的相同表。 为了建立双向一对一关联&#xff0c;我需要更新两个P…

计量经济学建模_一分钟看完计量经济学

建模是计量的灵魂&#xff0c;所以就从建模开始。一、建模步骤建模步骤&#xff1a;A&#xff0c;理论模型的设计: a&#xff0c;选择变量b&#xff0c;确定变量关系c&#xff0c;拟定参数范围B&#xff0c;样本数据的收集: a&#xff0c;数据的类型b&#xff0c;数据的质量C&a…

如何将视频设置为网页背景

有时候为一个网页添加一个动画效果的背景&#xff0c;会让网页增加一定的韵味&#xff0c;让网页看起来与众不同。 第一步&#xff1a;准备工作 工欲善其事必先利其器&#xff0c;我们首先需要准备一个视频 第二步&#xff1a;html中引入视频 这里我们需要用到了video/标签&…

python通过代理(ssh tunnel)连接MongoDB

1、python 怎么通过 ssh tunnel 连接 MongoDB 在Python中&#xff0c;您可以使用sshtunnel库创建一个SSH隧道&#xff0c;并结合使用pymongo库来连接MongoDB数据库。首先&#xff0c;确保已经安装了这两个库&#xff0c;如果没有&#xff0c;可以通过pip安装它们&#xff1a; …

nginx日志配置指令详解

nginx日志配置指令详解 日志对于统计排错来说非常有利的。本文总结了nginx日志相关的配置如access_log、log_format、open_log_file_cache、log_not_found、log_subrequest、rewrite_log、error_log。 nginx有一个非常灵活的日志记录模式。每个级别的配置可以有各自独立的访问日…

轻量级Web应用程序:PrimeFaces(JSF)+ Guice + MyBatis(第1部分)

最近&#xff0c;我的朋友问我如何构建轻量级的Java Web应用程序。 许多Java Web开发人员会选择Spring和Hibernate来构建传统的Web应用程序。 但是&#xff0c;它可能不够轻巧。 我建议他尝试使用Guice和MyBatis构建应用程序框架。 尽管Spring比Guice功能更丰富&#xff0c;但我…

haml入门

1.什么是Haml Haml是HTML abstraction markup language&#xff0c;遵循的原则是标记应该是美的。Haml能够加速和简化模版&#xff0c;长处是简洁、可读、高效。 2.erbm模板和haml模板对照 .erb模板代码&#xff1a; <section class”container”><h1><% post.t…

制图折断线_【机械制图】机械设计中的尺寸标注,看懂复杂机械图纸!

专注于机械行业、专业、职业信息分享服务于制造业百万工程师推荐阅读【机械制图】画图这么久&#xff0c;线型都没搞懂&#xff1f;【机械制图】机械图纸知识解析&#xff0c;这个总结溜溜的【机械制图】机械图纸尺寸标注规则&#xff0c;通过动图复习一下&#xff01;知名机械…

CCS3的过渡、变换、动画以及响应式布局、弹性布局

CSS3 过渡 、变换、动画 在没有CSS3之前&#xff0c;如果页面上需要一些动画效果&#xff0c;要么你自己编写 JavaScript&#xff0c;要么使用 JavaScript 框架(如 jQuery)来提高效率。 但是CSS3出来之后&#xff0c;有能力做一些如平滑过渡(比如在鼠标悬停时)和在屏幕上移动元…

Wordcounter,使用Lambdas和Fork / Join计算Java中的单词数

这些天来&#xff0c;我发布了Wordcounter &#xff0c;这是一个Java库和命令行实用程序&#xff0c;用于对文本文件中的单词进行计数并对单词计数进行分析&#xff0c;从而大量使用了功能编程结构和并行计算方法。 这是我在“令人讨厌的快速问答”大赛第四个条目SAP &#xff…