分类归档

服务器教程

服务器知识、操作系统教程、服务器常用软件等

FWQ
服务器教程
解读Linux chage命令的进阶应用
解读Linux chage命令的进阶应用 哈喽!今天心血来潮给大家带来了,想必大家应该对文章都不陌生吧,那么阅读本文就都不会很困难,以下内容主要涉及到,若是你正在学习文章,千万别错过这篇文章~希望能帮助到你! Linux操作系统是一个开源的操作系统,广泛应用于服务器和个人计算机中。其中有一些命令在系统管理和安全方面起着重要作用,其中就包括了chage命令。chage命令可以用来管理用户账户的密码过期策略,密码最短使用期限、最长使用期限、密码过期提醒等。 在本文中,将详细解析Linux chage命令的高级用法,并提供具体的代码示例帮助读者更好地理解和应用这个命令。 1. chage命令的基本用法 在Linux系统中,chage命令用于修改用户账户的密码过期信息,其基本语法如下: chage [options] username 其中,username是要操作的用户名。常用的选项包括: -M, –maxdays <最大天数>:设置密码的最长使用期限。 -m, –mindays <最短天数>:设置密码的最短使用期限。 -W, –warndays <提醒天数>:密码过期前提醒用户修改密码的天数。 -I, –inactive <天数>:设置账户无活动后被锁定的天数。 2. chage命令的高级用法 2.1…
2024-12-03 阅读全文 →
FWQ
服务器教程
学会使用Linux文件归档以提升工作效率
学会使用Linux文件归档以提升工作效率 在Linux系统中,归档功能是提升工作效率的一大助力。利用tar、zip、gzip等工具,我们可以轻松地将文件和目录打包成一个单独的文件,方便传输、备份或节省存储空间。这些归档工具的命令简单易用,且支持多种常用格式,如.tar、.zip、.gz等。本文将介绍如何使用这些命令,并提供具体示例,帮助您熟练掌握Linux归档,提升工作效率。 Linux 系统一直以来都是程序员、系统管理员和 IT 专业人士的首选操作系统,其强大的功能和灵活性使得它在工作和学习中得到了广泛的应用。其中,利用 Linux 的归档功能可以帮助我们更好地管理文件和数据,提高工作效率。本文将介绍如何利用 Linux 的归档工具来提高工作效率,并给出具体的代码示例。 1. 基本介绍 在 Linux 系统中,归档是指将多个文件或目录打包成一个单独的文件,以便于传输、备份或者节省存储空间。常见的归档格式包括.tar、.zip、.gz 等,而 Linux 中常用的归档工具有 tar、zip、gzip 等。 2. 使用 tar 命令进行归档 tar 是 Linux 中最常用的归档工具之一,我们可以使用…
2024-12-03 阅读全文 →
FWQ
服务器教程
如何进行Linux系统的硬件监控和故障处理
如何进行Linux系统的硬件监控和故障处理 “纵有疾风来,人生不言弃”,这句话送给正在学习的朋友们,也希望在阅读本文《如何进行Linux系统的硬件监控和故障处理》后,能够真的帮助到大家。我也会在后续的文章中,陆续更新文章相关的技术文章,有好的建议欢迎大家在评论留言,非常感谢! 如何进行Linux系统的硬件监控和故障处理,需要具体代码示例 摘要:作为一种开源操作系统,Linux广泛应用于各种计算设备和服务器。对于系统管理员来说,了解如何进行硬件监控和故障处理是至关重要的。本文将介绍如何使用Linux系统提供的工具和命令来监控硬件状态,以及如何使用故障处理技术来解决常见的硬件问题。此外,我们还将提供一些具体的代码示例,以便读者更好地理解。 硬件监控工具和命令一些常用的Linux硬件监控工具和命令包括: lm-sensors:用于监视系统传感器和硬件传感器的实用程序。它可以提供有关CPU温度、风扇速度、电源电压等数据的实时信息。 smartctl:用于监控和控制S.M.A.R.T硬盘参数的工具。它可以提供硬盘的健康状态、剩余寿命等信息。 lspci:列出系统的PCI设备信息,包括网卡、显卡、声卡等。 lsusb:列出连接到USB端口的设备信息。 dmidecode:获取系统硬件的详细信息,如BIOS版本、主板型号、内存规格等。 使用Linux硬件监控工具下面是一些使用Linux硬件监控工具的示例代码: a. 使用lm-sensors获取CPU温度数据: # 安装lm-sensors sudo apt-get install lm-sensors # 加载核心模块 sudo sensors-detect # 查看CPU温度 sensors b. 使用smartctl获取硬盘信息:…
2024-12-03 阅读全文 →
FWQ
服务器教程
一个企业的大数据分析平台的构建方法
一个企业的大数据分析平台的构建方法 米云今天将给大家带来《一个企业的大数据分析平台的构建方法》,感兴趣的朋友请继续看下去吧!以下内容将会涉及到等等知识点,如果你是正在学习文章或者已经是大佬级别了,都非常欢迎也希望大家都能给我建议评论哈~希望能帮助到大家! 面对海量的各种来源的数据,如何对这些零散的数据进行有效的分析,得到有价值的信息一直是大数据领域研究的热点问题。 大数据分析处理平台就是整合当前主流的各种具有不同侧重点的大数据处理分析框架和工具,实现对数据的挖掘和分析,一个大数据分析平台涉及到的组件众多,如何将其有机地结合起来,完成海量数据的挖掘是一项复杂的工作。在搭建大数据分析平台之前,要先明确业务需求场景以及用户的需求,通过大数据分析平台,想要得到哪些有价值的信息,需要接入的数据有哪些,明确基于场景业务需求的大数据平台要具备的基本的功能,来决定平台搭建过程中使用的大数据处理工具和框架。 (1)操作系统的选择操作系统一般使用开源版的RedHat、Centos或者Debian作为底层的构建平台,要根据大数据平台所要搭建的数据分析工具可以支持的系统,正确的选择操作系统的版本。 (2)搭建Hadoop集群Hadoop作为一个开发和运行处理大规模数据的软件平台,实现了在大量的廉价计算机组成的集群中对海量数据进行分布式计算。Hadoop框架中最核心的设计是HDFS和MapReduce,HDFS是一个高度容错性的系统,适合部署在廉价的机器上,能够提供高吞吐量的数据访问,适用于那些有着超大数据集的应用程序;MapReduce是一套可以从海量的数据中提取数据最后返回结果集的编程模型。在生产实践应用中,Hadoop非常适合应用于大数据存储和大数据的分析应用,适合服务于几千台到几万台大的服务器的集群运行,支持PB级别的存储容量。Hadoop家族还包含各种开源组件,比如Yarn,Zookeeper,Hbase,Hive,Sqoop,Impala,Spark等。使用开源组件的优势显而易见,活跃的社区会不断的迭代更新组件版本,使用的人也会很多,遇到问题会比较容易解决,同时代码开源,高水平的数据开发工程师可结合自身项目的需求对代码进行修改,以更好的为项目提供服务。 (3)选择数据接入和预处理工具面对各种来源的数据,数据接入就是将这些零散的数据整合在一起,综合起来进行分析。数据接入主要包括文件日志的接入、数据库日志的接入、关系型数据库的接入和应用程序等的接入,数据接入常用的工具有Flume,Logstash,NDC(网易数据运河系统),sqoop等。对于实时性要求比较高的业务场景,比如对存在于社交网站、新闻等的数据信息流需要进行快速的处理反馈,那么数据的接入可以使用开源的Strom,Spark streaming等。当需要使用上游模块的数据进行计算、统计和分析的时候,就需要用到分布式的消息系统,比如基于发布/订阅的消息系统kafka。还可以使用分布式应用程序协调服务Zookeeper来提供数据同步服务,更好的保证数据的可靠和一致性。数据预处理是在海量的数据中提取出可用特征,建立宽表,创建数据仓库,会使用到HiveSQL,SparkSQL和Impala等工具。随着业务量的增多,需要进行训练和清洗的数据也会变得越来越复杂,可以使用azkaban或者oozie作为工作流调度引擎,用来解决有多个hadoop或者spark等计算任务之间的依赖关系问题。 (4)数据存储除了Hadoop中已广泛应用于数据存储的HDFS,常用的还有分布式、面向列的开源数据库Hbase,HBase是一种key/value系统,部署在HDFS上,与Hadoop一样,HBase的目标主要是依赖横向扩展,通过不断的增加廉价的商用服务器,增加计算和存储能力。同时hadoop的资源管理器Yarn,可以为上层应用提供统一的资源管理和调度,为集群在利用率、资源统一等方面带来巨大的好处。Kudu是一个围绕Hadoop生态圈建立的存储引擎,Kudu拥有和Hadoop生态圈共同的设计理念,可以运行在普通的服务器上,作为一个开源的存储引擎,可以同时提供低延迟的随机读写和高效的数据分析能力。Redis是一种速度非常快的非关系型数据库,可以将存储在内存中的键值对数据持久化到硬盘中,可以存储键与5种不同类型的值之间的映射。 (5)选择数据挖掘工具Hive可以将结构化的数据映射为一张数据库表,并提供HQL的查询功能,它是建立在Hadoop之上的数据仓库基础架构,是为了减少MapReduce编写工作的批处理系统,它的出现可以让那些精通SQL技能、但是不熟悉MapReduce、编程能力较弱和不擅长Java的用户能够在HDFS大规模数据集上很好的利用SQL语言查询、汇总、分析数据。Impala是对Hive的一个补充,可以实现高效的SQL查询,但是Impala将整个查询过程分成了一个执行计划树,而不是一连串的MapReduce任务,相比Hive有更好的并发性和避免了不必要的中间sort和shuffle。Spark可以将Job中间输出结果保存在内存中,不需要读取HDFS,Spark启用了内存分布数据集,除了能够提供交互式查询外,它还可以优化迭代工作负载。Solr是一个运行在Servlet容器的独立的企业级搜索应用的全文搜索服务器,用户可以通过http请求,向搜索引擎服务器提交一定格式的XML,生成索引,或者通过HTTP GET操作提出查找请求,并得到XML格式的返回结果。还可以对数据进行建模分析,会用到机器学习相关的知识,常用的机器学习算法,比如贝叶斯、逻辑回归、决策树、神经网络、协同过滤等。 6)数据的可视化以及输出API对于处理得到的数据可以对接主流的BI系统,比如国外的Tableau、Qlikview、PowrerBI等,国内的SmallBI和新兴的网易有数(可免费试用)等,将结果进行可视化,用于决策分析;或者回流到线上,支持线上业务的发展。成熟的搭建一套大数据分析平台不是一件简单的事情,本身就是一项复杂的工作,在这过程中需要考虑的因素有很多,比如:稳定性,可以通过多台机器做数据和程序运行的备份,但服务器的质量和预算成本相应的会限制平台的稳定性;可扩展性:大数据平台部署在多台机器上,如何在其基础上扩充新的机器是实际应用中经常会遇到的问题;安全性:保障数据安全是大数据平台不可忽视的问题,在海量数据的处理过程中,如何防止数据的丢失和泄漏一直是大数据安全领域的研究热点。 今天关于《一个企业的大数据分析平台的构建方法》的内容就介绍到这里了,是不是学起来一目了然!想要了解更多关于Linux,Linux系统,红帽,Linux命令,linux认证,红帽linux,linux教程,linux视频的内容请关注米云公众号!
2024-12-03 阅读全文 →
FWQ
服务器教程
宝塔面板如何进行网站CDN加速
宝塔面板如何进行网站CDN加速 随着互联网的不断发展,网站访问速度已经成为了一个非常重要的指标。而寻找一种高效的加速方式,能够使网站访问速度得到提升,就显得尤为重要。而CDN就是一种非常有效的加速方式,不仅能够提高网站访问速度,还能够提升网站的安全性。而在宝塔面板中,如何进行网站CDN加速呢? 一、什么是CDN? CDN是Content Delivery Network(内容分发网络)的缩写。传统的网站访问过程中,客户端直接在源站获取数据,如果源站的服务器不在客户端所在地区,那么就需要经过长时间的请求和响应,才能进行正常的访问。而CDN就是一种分布式的网络,可以在全球各地建立缓存节点,将静态资源的访问转移至离客户端更近的节点进行服务,从而实现加速访问。 二、如何进行网站CDN加速? 1.选择CDN服务商 首先,我们需要选择一个好用的CDN服务商。常见的CDN厂商有腾讯云、阿里云、百度云等。这些厂商都拥有自己的CDN节点,可以为我们提供加速服务。 2.注册CDN帐号 在选择CDN服务商后,我们需要注册一个CDN帐号,并进行实名认证。认证后,我们就可以创建自己的CDN服务。 3.创建CDN服务 登录CDN服务商的控制台后,我们需要选择自己的区域,并创建一个自己的CDN服务。一般来说,CDN服务的创建非常简单,只需要填写基本信息即可。 4.绑定域名 创建好CDN服务之后,我们还需要将自己的域名与CDN服务进行绑定。具体方法可以参考CDN服务商的相关教程。 5.设置域名解析 在完成域名绑定之后,我们还需要进行域名解析的设置。具体方法可以参考CDN服务商的相关教程,设置完成后,我们就可以开始使用CDN服务进行加速访问了。 三、在宝塔面板中进行CDN加速 在宝塔面板中,进行网站CDN加速也非常简单。我们只需要在宝塔面板中添加CDN服务商提供的API相关信息,即可实现网站CDN加速。 1.登录宝塔面板 首先,我们需要在浏览器中输入宝塔面板的网址,并登录到管理面板中。 2.选择网站 登录成功后,我们需要选择需要进行CDN加速的网站,并进入站点设置页面。 3.添加CDN加速 在站点设置页面,我们需要选择CDN加速选项,并点击“添加CDN”。此时,我们需要填写CDN服务商提供的API相关信息,并选择自己的CDN服务区域和使用的CDN加速服务商。 4.测试加速效果 在添加CDN加速后,我们还需要测试一下加速效果是否正常。具体方法可以参考CDN服务商的相关教程,测试完成之后,我们就可以享受到CDN加速带来的访问速度的提升了。 总结:…
2024-12-03 阅读全文 →
FWQ
服务器教程
Embedded Linux简介及其重要性
Embedded Linux简介及其重要性 嵌入式Linux是一种专为嵌入式设备和系统量身打造的操作系统,它将Linux内核与定制的用户空间工具相结合,以满足嵌入式设备的独特需求。嵌入式Linux凭借其强大且灵活的特性,成为各种嵌入式应用(如智能手机、车载系统、智能家居设备和工业控制系统)的理想选择。它为开发者提供了一个可靠的平台,用于构建功能丰富、稳定的嵌入式系统,满足不同行业的需求。 Embedded Linux简介及其重要性 Embedded Linux是一种嵌入式操作系统,通常用于嵌入式设备和嵌入式系统中。它是Linux内核和一些用户空间工具的组合,经过裁剪和优化以适应嵌入式设备的特定需求。 Embedded Linux的重要性在于它提供了一个强大而灵活的操作系统平台,可以运行在各种不同类型的嵌入式设备上,如智能手机、车载系统、智能家居设备、工业控制系统等。Embedded Linux可以帮助开发人员构建功能丰富且稳定的嵌入式系统,满足不同行业的需求。 嵌入式Linux系统通常由以下几个部分组成:Linux内核、根文件系统、应用程序和驱动程序。开发嵌入式Linux系统需要考虑以下几个方面: 内核定制: 需要根据具体的设备需求选择适当的内核版本,并对内核进行裁剪和定制,使其仅包含所需的功能和驱动程序,以减少系统资源占用。 根文件系统: 根文件系统包含系统启动所需的文件和配置信息,开发人员需要根据具体需求构建和优化根文件系统,确保系统启动顺利并占用较小的存储空间。 应用程序开发: 开发嵌入式应用程序通常需要使用交叉编译工具链,确保应用程序能够在目标设备上正确运行,并充分利用设备的功能。 驱动程序开发: 驱动程序是连接硬件和操作系统的桥梁,开发适合特定硬件设备的驱动程序对于嵌入式系统的稳定性和性能至关重要。 以下是一个简单的嵌入式Linux示例程序,使用了一个基本的字符设备驱动程序: #include <linux/module.h> #include <linux/fs.h> #include <linux/init.h> #include <linux/uaccess.h>…
2024-12-03 阅读全文 →
FWQ
服务器教程
备份安全:保护您的Linux服务器免受数据丢失
备份安全:保护您的Linux服务器免受数据丢失 一分耕耘,一分收获!既然打开了这篇文章,就坚持看下去吧!文中内容包含等等知识点…希望你能在阅读本文后,能真真实实学到知识或者帮你解决心中的疑惑,也欢迎大佬或者新人朋友们多留言评论,多给建议!谢谢! 备份安全:保护您的Linux服务器免受数据丢失 在运行Linux服务器时,数据备份是至关重要的。数据丢失可能是由硬件故障、恶意软件或人为错误引起的,这些都可能导致灾难性的后果。为了保护您的服务器数据,您需要建立一个可靠的备份系统。本文将介绍一些常用的备份方法以及如何在Linux服务器上配置备份。 定期全量备份 定期全量备份是最基本、最重要的备份策略之一。这种备份方法会将服务器上的所有数据都复制到备份设备中。通常,可以将备份存储在本地磁盘、网络存储设备(如NAS)或云存储中。 以下是一种使用rsync工具进行定期全量备份的示例代码: # 创建一个脚本文件backup.sh nano backup.sh # 编写备份脚本代码 #!/bin/bash rsync -avz --delete /var/www/ /backup/www/ # 保存并退出编辑器 Ctrl + X,然后按Y,最后按Enter # 设定备份脚本的执行权限 chmod +x…
2024-12-03 阅读全文 →
FWQ
服务器教程
go如何执行linux命令
go如何执行linux命令 珍惜时间,勤奋学习!今天给大家带来《go如何执行linux命令》,正文内容主要涉及到等等,如果你正在学习文章,或者是对文章有疑问,欢迎大家关注我!后面我会持续更新相关内容的,希望都能帮到正在学习的大家! 首先建立一个exec.Cmd类型的值,然后执行这个类型的Start方法就可以启动命令了,获取此命令的输出管道,这个管道类型是io.ReadCloser,通过管道获取输出内容。 package main import (   "bytes"   "fmt"   "io"   "os/exec" ) func main() {   cmd0 := exec.Command("echo", "-n", "my first command")   //启动命令   if err := cmd0.Start(); err != nil {   fmt.Printf("command can not start %s \n", err)   return   }   //获取输出管道   stdout0, err := cmd0.StdoutPipe()   if err != nil {   fmt.Printf("couldn't stdout pipe for command %s \n", err)   return   }   var outputBuf0 bytes.Buffer   for {   tempOutput := make([]byte, 2048)   n, err := stdout0.Read(tempOutput)   if err != nil {…
2024-12-03 阅读全文 →
FWQ
服务器教程
如何配置和管理Linux上的网络服务
如何配置和管理Linux上的网络服务 知识点掌握了,还需要不断练习才能熟练运用。下面米云给大家带来一个文章开发实战,手把手教大家学习《如何配置和管理Linux上的网络服务》,在实现功能的过程中也带大家重新温习相关知识点,温故而知新,回头看看说不定又有不一样的感悟! 如何配置和管理Linux上的网络服务 在现代的计算机系统中,网络服务是非常重要的一部分。无论是个人使用还是企业级应用,配置和管理Linux上的网络服务都是必不可少的技能。本文将介绍一些常用的网络服务,并提供具体的代码示例,帮助读者更好地理解和应用。 一、安装和配置Apache HTTP服务器 Apache HTTP服务器是一款开源的Web服务器软件,广泛应用于互联网上。下面是安装和配置Apache HTTP服务器的步骤: 安装Apache软件包 使用以下命令安装Apache HTTP服务器软件包: sudo apt-get install apache2 配置防火墙 如果您的Linux系统使用了防火墙,需要配置防火墙以允许HTTP流量进入。以下是使用iptables配置防火墙的示例代码: sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT…
2024-12-03 阅读全文 →
FWQ
服务器教程
linux如何实现2048小游戏
linux如何实现2048小游戏 来到米云的大家,相信都是编程学习爱好者,希望在这里学习文章相关编程知识。下面本篇文章就来带大家聊聊《linux如何实现2048小游戏》,介绍一下,希望对大家的知识积累有所帮助,助力实战开发! 复制代码 代码如下: #include"2048.h"int main(){    start_game();    return 0;} 2048.h 复制代码 代码如下: #ifndef _2048_h_#define _2048_h_#include<stdio.h>#include<stdlib.h>#include<string.h>#include<termios.h>//#include<unstd.h>//#include<time/sys.h>#define line 21#define row   22#define arr_l 4#define arr_r 4#define num_color 32#define back 49#define bold 31static int line_location=0;static int row_location=0;static int arr[4][4]={0};static char tmp[5]="\0";static int end_flag=0;static int score=0;static int print_appear_flag=0;static char start_back0[line][row]={    "@@@@@@@@@@@@@@@@@@@@@",    "@    @    @    @    @",    "@    @    @    @    @",    "@    @    @    @    @",    "@@@@@@@@@@@@@@@@@@@@@",    "@    @    @    @    @",    "@    @    @    @    @",    "@    @    @    @    @",    "@@@@@@@@@@@@@@@@@@@@@",    "@    @    @    @    @",    "@    @    @    @    @",    "@    @    @    @    @",    "@@@@@@@@@@@@@@@@@@@@@",    "@    @    @    @    @",    "@    @    @    @    @",    "@    @    @    @    @",    "@@@@@@@@@@@@@@@@@@@@@",    "@                   @",    "@ score:            @",    "@                   @",    "@@@@@@@@@@@@@@@@@@@@@"};int print_start();char * itoc_2048(int data);int print_num();int  mov_left();int swap_if0l();int swap();int put_to(int line, int row);#endif 2048.c 复制代码 代码如下: #include"2048.h"int start_game(){    system("clear");    printf("\33[?25l");    print_start();    ran_appear();    print_num();    print_score();    print_getchar();    printf("\33[?25h");}int print_getchar(){    struct termios old,new;    int ch;    tcgetattr(0,&old);    tcgetattr(0,&new);    new.c_lflag = new.c_lflag &~(icanon |echo);    new.c_cc[vtime]=0;    new.c_cc[vmin]=1;    tcsetattr(0,tcsanow,&new);    while(1)    {        if(end_flag==1)            break;        ch=getchar();        if(ch=='\33')        {            ch=getchar();            if(ch=='[')            {                ch=getchar();                switch(ch)                {                    case 'a':                        mov_up();                        is_full();                        break;                    case 'b':                        mov_down();                        is_full();                        break;                    case 'c':                        mov_right();                        is_full();                        break;                    case 'd':                        mov_left();                        is_full();                        break;                    default:                        break;                }            }        }        if(ch=='q')            break;        fflush(null);    }tcsetattr(0,tcsanow,&old);}int print_start(){      int i,j;    for(i=0;i<line;i++)    {        for(j=0;j<row;j++)        {            if(start_back0[i][j]=='@')            {                printf("\33[%dm",back);                printf("%c",start_back0[i][j]);                printf("\33[0m");            }            else                if(start_back0[i][j]!=' ')                {                    printf("\33[%dm",bold);                    printf("%c",start_back0[i][j]);                    printf("\33[0m");                }                else                {                      printf("%c",start_back0[i][j]);                }        }    printf("\n");    }}char *itoc_2048(int data){    int x=0;    int i=4;    while(i--)    {        tmp[i]=data%10+'0';        data=data/10;    }    return tmp;}int is_full(){    int i,j;    int count=0;    for(i=0;i<arr_l;i++)        for(j=0;j<arr_r;j++)        {            if(arr[i][j]==0)                count++;        }    if(count==0)    {        for(i=0;i<arr_l;i++)            for(j=0;j<arr_r-1;j++)            {            if(arr[i][j]==arr[i][j+1])                return 0;            if(arr[j][i]==arr[j+1][i])                return 0;            }        end_flag=1;    }    return 1;}int put_to(int line, int row){    int x,y;    int i=0;    char *p=null;    p=itoc_2048(arr[line][row]);    printf("\33[%d;%dh",3+line*4,2+row*5);    printf("    ");    printf("\33[%d;%dh",3+line*4,2+row*5);    if(arr[line][row]!=0)        for(i=0;i<4;i++)        {            if(p[i]=='0'&&i<1)                printf(" ");            else            if(p[i]!='0')            {                printf("\33[%dm",num_color);                printf("%c",p[i]);                printf("\33[0m");            }        }    else        if(arr[line][row]==0)        printf("    ");}int print_num(){    int i,j;    for(i=0;i<4;i++)        for(j=0;j<4;j++)    put_to(i,j);}print_score(){    int x,y;    printf("\33[19;9h");    printf("%d",score);}int ran_appear(){    int line,row;    int i=0;    int j=0;    int x,y;    int arr1[16][2]={0};    if(print_appear_flag==1)        return 0;    for(x=0;x<4;x++)        for(y=0;y<4;y++)        {            if(arr[x][y]==0)            {                arr1[i][0]=x;                arr1[i][1]=y;                i++;            }        }    srand(time(null));    j=rand()%i;    if(rand()%2==0)      {        arr[arr1[j][0]][arr1[j][1]]=4;        //arr[arr1[j][0]][arr1[j][1]]=2;      }    else        arr[arr1[j][0]][arr1[j][1]]=2;}int mov_left(){    int count=0;    count=mov_l()+count;    count=sum_2048_l()+count;    if(count==-2)        print_appear_flag=1;    mov_l();    ran_appear();    print_num();    return 0;}int mov_right(){    int count=0;    count=mov_r()+count;    count=sum_2048_r()+count;    if(count==-2)        print_appear_flag=1;    mov_r();    ran_appear();    print_num();    return 0;}int mov_up(){    int count=0;    count=mov_u()+count;    count=sum_2048_u()+count;    if(count==-2)        print_appear_flag=1;    mov_u();    ran_appear();    print_num();    return 0;}int mov_down(){    int count=0;    count=mov_d()+count;    count=sum_2048_d()+count;    if(count==-2)        print_appear_flag=1;    mov_d();    ran_appear();    print_num();    return 0;}int swap(int *a,int *b){    int tmp;    tmp=*a;    *a=*b;    *b=tmp;}int mov_l(){    int line,row;    int i=3;    int count=0;    while(i--)    {        for(line=0;line<4;line++)         for(row=0;row<3;row++)        {            if(arr[line][row]==0&&arr[line][row+1]!=0)            {                  swap(&arr[line][row],&arr[line][row+1]);                count++;                print_appear_flag=0;            }        }    }    if(count==0)        return -1;    return 0;}int sum_2048_l(){    int line,row;    int count=0;    for(row=1;row<4;row++)        for(line=0;line<4;line++)        {            if(arr[line][row]!=0&&arr[line][row-1]==arr[line][row])            {                arr[line][row-1]=arr[line][row]+arr[line][row-1];                arr[line][row]=0;                score=score+arr[line][row-1];                print_score();                count++;                print_appear_flag=0;            }        }    if(count==0)        return -1;return 0;}int mov_r(){    int line,row;    int i=3;    int count=0;    while(i--)    {        for(line=0;line<4;line++)         for(row=0;row<3;row++)        {            if(arr[line][row]!=0&&arr[line][row+1]==0)            {                  swap(&arr[line][row],&arr[line][row+1]);                count++;                print_appear_flag=0;            }        }    }    if(count==0)        return -1;    return 0;}int sum_2048_r(){    int line,row;    int count=0;    for(row=2;row>=0;row--)        for(line=0;line<4;line++)        {            if(arr[line][row]!=0&&arr[line][row+1]==arr[line][row])            {                arr[line][row+1]=arr[line][row]+arr[line][row+1];                arr[line][row]=0;                score=score+arr[line][row+1];                print_score();                count++;                print_appear_flag=0;            }        }    if(count==0)        return -1;    return 0;}int mov_u(){      int line,row;    int i=3;    int count=0;    while(i--)    {        for(line=0;line<3;line++)         for(row=0;row<4;row++)        {            if(arr[line][row]==0&&arr[line+1][row]!=0)            {                  swap(&arr[line][row],&arr[line+1][row]);                count++;                print_appear_flag=0;            }        }    }    if(count==0)        return -1;    return 0;}int sum_2048_u(){    int line,row;    int count=0;        for(line=1;line<4;line++)        for(row=0;row<4;row++)        {            if(arr[line][row]!=0&&arr[line-1][row]==arr[line][row])            {                arr[line-1][row]=arr[line][row]+arr[line-1][row];                arr[line][row]=0;                score=score+arr[line-1][row];                print_score();                count++;                print_appear_flag=0;            }        }        if(count==0)            return -1;        return 0;}int mov_d(){    int line,row;    int i=3;    int count=0;    while(i--)    {        for(line=0;line<3;line++)         for(row=0;row<4;row++)        {            if(arr[line][row]!=0&&arr[line+1][row]==0)            {                  swap(&arr[line][row],&arr[line+1][row]);                count++;                print_appear_flag=0;            }        }    }    if(count==0)        return -1;    return 0;}int sum_2048_d(){    int line,row;    int count=0;        for(line=2;line>=0;line--)        for(row=0;row<4;row++)        {            if(arr[line][row]!=0&&arr[line+1][row]==arr[line][row])            {                arr[line+1][row]=arr[line][row]+arr[line+1][row];                arr[line][row]=0;                score=score+arr[line+1][row];                print_score();                count++;                print_appear_flag=0;            }        }        if(count==0)            return -1;        return 0;} Linux有哪些版本 Linux的版本有:Deepin、UbuntuKylin、Manjaro、LinuxMint、Ubuntu等版本。其中Deepin是国内发展最好的Linux发行版之一;UbuntuKylin是基于Ubuntu的衍生发行版;Manjaro是基于Arch的Linux发行版;LinuxMint默认的Cinnamon桌面类似Windows XP简单易用;Ubuntu则是以桌面应用为主的Linux操作系统。 今天关于《linux如何实现2048小游戏》的内容介绍就到此结束,如果有什么疑问或者建议,可以在米云公众号下多多回复交流;文中若有不正之处,也希望回复留言以告知!
2024-12-03 阅读全文 →