基于Java的“多功能五子棋”游戏的设计和实现

2023-05-16

源码地址:http://download.csdn.net/detail/clx55555/9718406

下载或转载使用请声明原著:但求心安。

基于Java的“多功能五子棋”游戏的设计和实现

引言

      随着经济社会的迅速发展,人们生活水平有了很大的提高,人们的生活观念也发生了巨大的改变。高品质的生活、现代化得生活方式成为人们共同追求的目标;休闲、娱乐性活动作为时尚生活中的一部分,而被大多数的人所追捧。棋类项目作为一种智力型项目,可以益智健心、修身养性,也可以满足人们对于娱乐和休闲的新需求。一些项目比如五子棋等等,由于项目本身互动的特点,一直被人们所喜爱,因此得以生存和发展,成为许多人喜爱的休闲娱乐性棋类项目。

     而今,以网络技术为核心和计算机技术的现代网络技术已经在现实生活得到了十分的广泛的使用。休闲类网络游戏集合了益智性、趣味性、互动性、娱乐性于一体,已经成为多数人群的选择的休闲方式。  借此,本论文在分析了当前计算机网络的蓬勃发展和人们对于休闲娱乐性生活方式的追求,以java为工具,以精美的界面,以常规安全的socket建立连接,设计更为益智的网络五子棋游戏,增强了趣味性和益智性。

 

1  需求分析  需求分析作用  软件需求分析是软件开发周期的第一个阶段,也是关系到软件开发成败的最关键一步。只有通过了软件需求分析,才能把软件的功能和性能由总体的概念性和理论性描述转化为具体的规格说明,从而建立软件开发的基础。实践证明,需求分析工作进行得准确程度,在很大程度上决定了软件开发的成败。  软件需求分析的任务就是让用户与开发者明确开发的是一个什么软件。具体的说,就是通过对问题及其环境的理解、分析与综合把握,建立逻辑模型,完成软件的逻辑方案设计。

1.1 基本需求分析  

    软件的界面简洁明了而不失精美,操作简单容易,功能按钮名称简单易懂,棋盘的大小,棋子的样式,可以换棋盘棋子。

 

1.2  高级需求分析

     网络内部使用TCP/IP 方式利用Socket提供的服务,使用Java Graphics类进行用户图形界面的搭建。系统分成两个部分,分别为服务端程序以及客户端程序。结合实际情况,将服务器端的程序和客户端的程序放在一起,便可以更为方便的建立游戏和参与游戏,有效解决了在局域网中服务器未开启,则无法进行游戏的缺陷。由于将服务器端和客户端程序放在一起,所以可以减少界面绘制的冗余代码,使得客户端和服务器端使用相同的界面。五子棋网络游戏主要分为两个部分,游戏服务端和游戏客户端。服务端负责创建服务器,客户端负责连接服务器.

 

人机对战:为了是游戏更加益智,增加游戏的趣味性,使用了博弈的思想,用到博弈树,alpha-beta,启发式搜索的思想,让电脑模拟下棋,增加游戏的难度。

聊天窗口,用腾讯云作为服务器,让联机的玩家之间可以进行聊天,就算不在局域网也可以聊天。可以更好地交流,什么时候开战,免得一个人一直在等待。

 

2  开发环境及运行环境

 

开发环境:jdk 1.8;eclipse; mysql

 

运行环境:配置Java路径的计算机, mysql-connector-java-5.0.8.jar的配置环境

 

3.总体设计

总体设计是软件开发过程中的另一个重要阶段,在这一阶段中将根据需求分析中提出的逻辑模型,合理地完成物理模型的设计。这个阶段的主要目标是将反映了用户信息需求的逻辑方案转换成物理方案,并为下一阶段提供必须的技术资料。  总体设计应遵循以下原则:

 ★ 整体性:软件是作为统一整体而存在的。因此,在总体设计中要从整个软件的角度去考虑。

★ 灵活性:为保持软件长久的生命力,要求该软件具有很强的环境适应性。为此,该软件必须具有较好的开放性与结构的可变性。  

★ 可靠性:可靠性是指软件抵御外界干扰的能力及受外界干扰时的恢复能力。

★ 经济性:经济性是指在满足游戏软件需求的前提下,尽可能地减少对游戏的开销。

3.1  整体设计

  

玩家可以选择人机,人人联机对战,可以聊天,服务器在我的腾讯云上一直开启状态,让人人间可以聊天。

3.2 用例图设计

玩家的用例图设计,玩家开始后可以选择人机,联机,本机人人,可以在线聊天,聊天和

联机都用的多线程,不影响主线程的使用。

 

服务器的设计:服务器没有界面只是一个简单的接收发送信息的代码,放在腾讯云服务器上,可以进行聊天。

 

登陆设计:为了配合聊天的使用,加入了登陆和个人信息,可以清楚地了解个人的信息和游戏分数。

  

3.3类的设计

 

 

CheckFrame继承窗口类,作为整个界面的窗口,一切标签,按钮,棋子棋盘都依赖这个类;

 

CheckBorder是用来画棋子棋盘的封装完毕,可以调用的方法是paint()可以重画棋盘;

 

GetC类是CheckBorder的内部类继承Thread类,联机对战中,负责接收对方的下子信息,使用多线程,不会因为对方不下棋,而影响主线程的使用。

 

Internet和server类是用来联机下棋的,局域网中的联机下棋,一个人为客户端,一个人为服务端,不联网也可以下棋。解决了没网不能下棋的烦恼,封装完毕,对外的方法是setChess(),getChess()用来下子和接受对方的棋子。

 

Computer是算法类,电脑的人工智能下棋,就是这个类,封装完毕,对外的方法是

Copychess()复制当前棋盘,alphaBeta()用来电脑下子,getSame()是用来判断输赢。

 

Clock类用来显示当前时间,封装完毕,直接添加在窗口上;

 

setMenu类是客户用来聊天的界面,封装完毕可以直接添加到窗口上,他的内部类有TCPClient类是用来连接服务器的,recvMSg类是用来发送接收消息的;

Databases类是与数据库连接有关的类。其中既有客户端连接数据库,又储存着注册用户信息资料,检查登录异常等功能的实现。

 

Login类为登录界面类。该类依赖于数据库类,来检查是否能够成功登录。

 

resign类为用户注册类,用户在此注册,并将注册信息写入数据库。

 

Editt类为资料编辑类,用户可以进行自身的资料编辑,并保存至数据库。

 

类图

 

 

 

 

 

 

 

3.4时序图的设计
联机对战的时序图

服务器处于建立状态

玩家先登录,可以给其他玩家发送信息,邀请联机,发送接收信息是异步的,不占用主线程。

然后可以自己建立服务器,也可以让对方建立服务器一个人连接别人,连接成功,或者别人连接到你,都会有提示信息,开始联机对战

 

 

 

 


 

人机对战时序图

人机对战,可以先选择人机的难度,选择自己的先手后手,开始人机对战,我个人认为这款人机对战还是比较难的,可以模拟6步下子,没有延迟,增加了游戏的乐趣,更加益智

 

 

 

 

4.五子棋人机alpha算法

简单的五子棋算法

Q2O代表2个棋子 有一边被堵了,

下面的以此类推,每一次下棋都计算能下棋的位置自己的权值,要从4个方向计算,水平,垂直,45度角,135度角。堵棋是计算对方的权值,两者相加最大值就是下棋的位置。这个水平我认为还算一般,中等偏下。

Computer 

/*
 * 人机对战的算法,对外的接口是getQuan()和getSame(),getQuan()是人机对战是计算出来每个点的权值
 * 取最大的的值作为下棋点,getSame()是用来判断输赢的接口
 * */

主要代码:

public int getQuan(int i,int j)//每个位置的权值
{
int q=0;
q+=getQuan0(i,j);//4个方向的权值
q+=getQuan90(i,j);
q+=getQuan135(i,j);
q+=getQuan45(i,j);
return q;
}


private int getQuan0(int i,int j)
{
a=1;
b=0;
return getquanALL(i,j);
}private int getquanALL(int i,int j)//计算自己和对方的权值相加就是最大权值
{
int samechesSnums=0;//相同旗子个数
int samechessNumf=0;
int blankNums=0;
int blankNumf=0;
int q=0,qs=0,qf=0;
initc(i,j);
//计算人的权值
samechesSnums=getSamechessNums(1);//得到棋子的数量
if(c[0][0]>=0&&c[0][0]<=14&&c[1][0]>=0&&c[1][0]<=14)//得到空的数量
if(num[c[0][0]][c[1][0]]==0)blankNums++;

if(c[0][1]>=0&&c[0][1]<=14&&c[1][1]>=0&&c[1][1]<=14)
{
if(num[c[0][1]][c[1][1]]==0)blankNums++;
}
qs=getQuanEqual(samechesSnums,blankNums);

//计算自己的权值
initc(i,j);
samechessNumf=getSamechessNums(2);//得到棋子的数量
if(c[0][0]>=0&&c[0][0]<=14&&c[1][0]>=0&&c[1][0]<=14)//得到空的数量
if(num[c[0][0]][c[1][0]]==0)blankNumf++;

if(c[0][1]>=0&&c[0][1]<=14&&c[1][1]>=0&&c[1][1]<=14)
if(num[c[0][1]][c[1][1]]==0)blankNumf++;
qf=getQuanEqual(samechessNumf,blankNumf);
q=qs+qf;

return q;
}
private int  getSamechessNums(int id) 
//得到棋子的数量
{
int num1=1;
c[0][0]+=a;//右方向
c[1][0]+=b;
while(c[0][0]>=0&&c[0][0]<=14&&num1<5&&c[1][0]>=0&&c[1][0]<=14)
{
if(num[c[0][0]][c[1][0]]!=id)break;
num1++;
c[0][0]+=a;
c[1][0]+=b;
}
//左方向
c[0][1]-=a;
c[1][1]-=b;
while(c[1][1]>=0&&c[1][1]<=14&&num1<5&&c[0][1]>=0&&c[0][1]<=14)
{
if(num[c[0][1]][c[1][1]]!=id)break;
num1++;
c[0][1]-=a;
c[1][1]-=b;
}
return num1;
}
private int getQuanEqual(int chess,int blank)
{


if(chess==2&&blank==1)return Q2O;
else if(chess==2&&blank==2)return Q2;
else if(chess==3&&blank==1)return Q3O;
else if(chess==3&&blank==2)return Q3;
else if(chess==4&&blank==1)return Q4O;
else if(chess==4&&blank==2)return Q4;
else if(chess==5)return Q5;
else return 0;
}


public int getSame(int i,int j,int id)//判断输赢
{
int q=0,k=0;
a=1;b=0;initc(i,j);
k=getSamechessNums(id);
q=q<k?k:q;

a=0;b=1;initc(i,j);
k=getSamechessNums(id);
q=q<k?k:q;


a=1;
b=1;initc(i,j);
k=getSamechessNums(id);
q=q<k?k:q;
a=1;b=-1;initc(i,j);
k=getSamechessNums(id);
q=q<k?k:q;
return q;
}

五子棋中难算法:

要说Alpha-beta 算法 就得先说下max_min博弈树 算法,就是模拟电脑下子,要下在对电脑最优的地方,模拟人下子就要下在对人最优的地方,对电脑来说最差的地方

此图中甲是电脑,乙是玩家,那么在甲层的时候,总是选其中值最大的节点,乙层的时候,总是选其中最小的节点。

而每一个节点的分数,都是由子节点决定的,因此我们对博弈树只能进行深度优先搜索而无法进行广度优先搜索。深度优先搜索用递归非常容易实现,然后主要工作其实是完成一个评估函数,这个函数需要对当前局势给出一个比较准确的评分。

1. MAX层,假设当前层已经搜索到一个最大值 X, 如果发现下一个节点的下一层(也就是MIN层)会产生一个比X还小的值,那么就直接剪掉此节点。

解释一下,也就是在MAX层的时候会把当前层已经搜索到的最大值X存起来,如果下一个节点的下一层会产生一个比X还小的值Y,那么之前说过玩家总是会选择最小值的。也就是说这个节点玩家的分数不会超过Y,那么这个节点显然没有必要进行计算了。

通俗点来讲就是,AI发现这一步是对玩家更有利的,那么当然不会走这一步。

1. MIN层,假设当前层已经搜索到一个最小值 Y, 如果发现下一个节点的下一层(也就是MIN层)会产生一个比Y还大的值,那么就直接剪掉此节点。

关键代码如下:int alphaBeta2(int chess,int depth,int alpha,int beta,int i,int j)//alphaBeta剪枝;极大极小博弈树,人工智能第一步 模拟五步下子

{

    int best;

   if( getQuan(i,j,chess%2+1)>=Q5)//五子连珠

    {

  return getComputerQuan()-getPeopleQuan();//电脑的权值减去人的权值

    }

   else if(depth==0)//depth为0 ,搜索的尽头

    {

     //System.out.println(getComputerQuan()-getPeopleQuan());

     return getComputerQuan()-getPeopleQuan();

    }

    else {

     if(chess==2)

     {

     int now;

     for( i = 0;i<= 14;i++)

  for(j = 0;j<=14;j++)

  {

  if(num[i][j]==0)

  {

  if(alpha>=beta)return alpha;

  else if(generator(i,j)==true){

  num[i][j]=2;

  now=alphaBeta2(1,depth-1,alpha,beta,i,j);

  num[i][j]=0;

  if(now>alpha)alpha=now;

  }

  }

  }

    

     best=alpha;

     }

     else {

     int now;

     for( i = 0;i<= 14;i++)

  for(j = 0;j<=14;j++)

  {

  if(num[i][j]==0)

  {

  if(alpha>=beta)return beta;

  else if(generator(i,j)==true){

  num[i][j]=1;

  now=alphaBeta2(2,depth-1,alpha,beta,i,j);

  num[i][j]=0;

  if(now<beta)beta=now;  

  }

  }

  }

     best=beta;

     }

    }

     return best;

}

这么多肯定是不够的最多预测两步,并不是每个点都要搜索如果他的方圆3之内没有棋子,就没必要对他进行深搜。代码如下:

public boolean generator(int i,int j)//困难模式

//剪枝有邻居的定义是:想个两步以内至少有一个不为空的点即可

//。比如 b[7,7] 有一个子,那么 b[6,7]是他的邻居,b[5,7] 也是,但是 b[4,7] 就不是,因为相隔了三步

{

int min_i,min_j,max_i,max_j;

boolean k=false;

min_i=i-2>=0?i-2:0;

max_i=i+2<=14?i+2:0;

min_j=j-2>=0?j-2:14;

max_j=j+2<=14?j+2:14;

for(i=min_i;i<=max_i;i++)

{for(j=min_j;j<=max_j;j++)

if(num[i][j]!=0){k=true;break;}

}

return k;

}

可以看出搜索的复杂度是m^n 所以要想多搜几步减少m的值是必要的,m的值怎么减少呢?启发式搜索就是找最优的点有了打分之后,我们就可以按照分数高低进行排序了。具体实现的时候,是根据按照成五,活四,双三,活三,其他 的顺序来排序的。这个难度也比较高,我就按着这个顺序排序,取最优的五个进行下一步循环,大大减少了基数m可以搜索到第六步,多搜索了2步而且时间是几乎相同的,关键代码如下:

if(chess==2)//电脑下子

     {

     int now;//一个记录当前值的数,

     for( i = 0;i<= 14;i++)

  for(j = 0;j<=14;j++)

  {

  if(num[i][j]==0)

  {

  if(alpha>=beta)return alpha;//alpha剪枝

  else if(generator(i,j)==true){//相邻剪枝

  num[i][j]=2;

 // now=getQuan(i,j,chess);

  now=getQuan(i,j,1)+getQuan(i,j,2);

  num[i][j]=0;

  bestson[cnt]=new struct();//入队

  bestson[cnt].i=i;

  bestson[cnt].j=j;

  bestson[cnt++].value=now;

  }

  }

  }

     struct t=new struct();

     for(i=0;i<cnt;i++)//冒泡排序

     for(j=i+1;j<cnt;j++)

     if(bestson[i].value<bestson[j].value)

     {

     t=bestson[i];

     bestson[i]=bestson[j];

     bestson[j]=t;

     }

     cnt=cnt<5?cnt:5;

     for(i=0;i<cnt;i++)//启发式搜索,取前五

     {

     num[bestson[i].i][bestson[i].j]=2;

  now=alphaBeta(1,depth-1,alpha,beta,bestson[i].i,bestson[i].j);

  if(now>alpha)alpha=now;

  num[bestson[i].i][bestson[i].j]=0;

     }

     best=alpha;

     }

5.具体软件代码实现见附录

五子棋.jar

6.软件调试和测试

登录界面:有注册,登录成功,登录失败。

人机对战选择让多人来玩这个,并且和网上的人机进行对战,简单模式可以打败4399小游戏中的“超难五子棋”,在多人测试中发现了很多bug,比如都要五个子的话,他会堵玩家,而不是自己下棋,此时加入特判。在不断的测试中,也更改了棋子的权值,使其难度更高,玩家玩起来更有意思。

聊天框的测试:可以聊天,这个没发现bug

联机对战:开始的时候没加多线程,接收对方下子的时候,主线程会等待,加入了接收棋子的线程,下棋之后不会卡着等待。联机对战一个人建立连接,一个人连接对方,建立连接的玩家先下子。

 

测试的时候才发现bug如此之多,一点点改,比如表加上了,总是使整个界面变卡,人机做的时候bug更多,弄不好权值,一点点改正。没有多线程总会卡主线程,背景图片加不上,等等一系列问题,让我们的队伍头大,从一个只会输入输出的java小菜鸟,做出了能局域网对战,网络聊天,炫彩的界面,智能的人机,我们的团队付出了很大的努力。

 

 

 

 

 

 

 

7.参考书籍:言川博客(虽然有些思想是言传的,但是我的五子棋可以打败他的。)

 Java程序设计实用教程(第二版)(人民邮电出版社)

 


编者注:这是我和队友合作做出来的,有一个用mysql做的登录界面,有需要这个界面的请单独联系楼主,索要源码

 


本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

基于Java的“多功能五子棋”游戏的设计和实现 的相关文章

  • 汽车OTA是个什么鬼?

    OTA xff1a Over the Air Technology 这描述的是手机吧 xff01 不过一开始的手机也是不可以直接OTA的 1997年之前所有汽车都是一个独立的机械个体 xff0c 一个方向盘 xff0c 一组踏板 xff0c
  • Hypervisor简介

    从头开始了解和使用Hypervisor xff08 第4部分 xff09 嘶吼 RoarTalk 回归最本质的信息安全 互联网安全新媒体 4hou com 根据 Hypervisor 的不同类型 xff0c 我们将虚拟化分为I 型和 II
  • 使用repo下载google源码,跟编译 ,遇到的错误解决

    最近一直想下载android的源码看看 xff0c 但是按照官方的文档下载 xff0c 遇到了问题 在执行的curl http commondatastorage googleapis com git repo downloads repo
  • S32V234 Linux yocto开发环境搭建

    一 主机环境 主机 xff1a Ubuntu 16 04 5 64bit S32V bsp infomation xff1a Bsp version auto yocto bsp 19 0 Linux Kernel version 4 13
  • NXP S32G2开发

    https blog csdn net bigzhizhi article details 123069235 导言 Linux BSP是一组源代码 xff0c 可用于为受支持的板卡创建U Boot引导加载程序 Linux内核映像 根文件系
  • 简单解决Please install the gcc make perl packages from your distribution问题 and VirtualBox安装增强功能失败

    在vbox安装ubantu增强功能 xff0c 出现下面这种情况 xff1a Please install the gcc make perl packages from your distribution 在这里插入图片描述 把需要的包都
  • 图形学就业方向&&春招部份纪实

    以下分几个模块分别介绍图形学 xff1a 1 图形学未来方向以及需要的技术 2 个人找工作情况 xff0c 具体介绍 图形学未来方向以及需要的技术 最近GAMES论坛搞了一个计算机图形学走进高校企业活动 xff0c 可以简称图形学招聘活动
  • SOME/IP 消息的布局

    1 SOME IP 消息的布局 前面两篇文章 SOME IP概述 分层结构及要实现的需求 SOME IP概述2 SOME IP的主要中间件功能 43 SOME IP报文PDU的封装 讲述了SOME IP的基本概念 需求及架构在以太网的4层模
  • 什么才是软件定义汽车?

    Software Defined Vehicle The Eclipse Foundation 导读 xff1a 移动出行时代 xff0c 汽车逐渐由机械驱动的硬件向软件驱动的电子产品过渡 xff0c 软件定义汽车趋势愈发明显 这一过程中汽
  • 一文看懂四大汽车总线:LIN、CAN、FlexRay、MOST

    前言 随着汽车工业的发展 xff0c 汽车各系统的控制逐步向自动化和智能化转变 xff0c 汽车电气系统变得日益复杂 传统的电气系统大多采用点对点的单一通信方式 xff0c 相互之间少有联系 xff0c 这样必然会形成庞大的布线系统 据统计
  • 浅谈ASIL: 汽车安全性等级

    目录 ASIL 表示汽车安全性等级 ASIL的确定 1 严重度 2 暴露度 3 可控度 ASIL 故障分析手段 ASIL 表示汽车安全性等级 这是 ISO 26262 标准针对道路车辆的功能安全性定义的风险分类系统 ASIL 根据伤害的可能
  • SOA中间件DDS(数据分发服务-Data Distribution Service)

    DDS协议 高可靠性 实时性 DDS Data Distribution Service for Real Time Systems xff0c 是一种面向实时系统的数据分发服务 xff0c 由OMG提供 xff0c 它的权威性可以证明该协
  • MQTT与DDS的比较

    MQTT VS DDS MQTT协议 三种服务质量 QoS xff1a 最多一次 Sender 发送的一条消息 xff0c Receiver 最多能收到一次 xff0c 也就是说 Sender 尽力向 Receiver 发送消息 xff0c
  • R-Car H3系列SOC芯片与R-Car M3 R8A77961JBP0BA区别

    RENESAS推出的 xff1a R Car H3 系列 SOC 芯片 R8A77951JA00BA xff03 YJ1 xff0c R Car M3 系列 SOC 芯片 R8A77960JA60BG xff03 YJ5 在内核上 xff1
  • PTP(IEEE1588),TSN时间同步方法

    本文首先简要介绍主流的时间同步方式GNSS xff0c NTP xff0c PTP 然后通过NTP和PTP对比 xff0c 解释PTP性能更优秀的原因 xff1b 并对算法公式进行了推导 0 Why need time synchroniz
  • AUTOSAR的四种功能安全机制

    虽然AUTOSAR不是一个完整的安全解决方案 xff0c 但它提供了一些安全机制用于支持安全关键系统的开发 本文用于介绍AUTOSAR支持的四种功能安全机制 xff1a 内存分区 xff08 Memory Partitioning xff0
  • libstdc++版本冲突的解决

    类似的问题出现在测试环境部署过程 xff0c 当编译完成该前端解析器后 xff0c 由于其依赖一些库文件 xff0c 包括系统库文件libstdc 43 43 so 6 及 libc so xff0c 这都是系统至关重要的库文件 但是不同系
  • 3D打印——CLIP技术之更快速更高表面质量

    论文 Gradient light video projection based stereolithography for continuous production of solid objects 阅读 论文共分为6个章节 xff1a
  • 汽车上DTC是什么意思?DTC是什么故障

    DTC的全称是 Diagnostic Trouble Code xff0c 意为诊断故障代码 如今 xff0c 汽车很多故障都是通过故障代码去诊断的 xff0c 例如汽车底盘检测 车身及附件检测 汽车污染物与噪声处理部件等相关检测等 目的旨
  • 人生算法——读书笔记

    跨越出生和运气 xff0c 实现富足和自由 用概率思维 做好决策 人生算法九段 广义而言大自然有两个重要的算法 xff0c 一个是进化 xff0c 一个是大脑 现实中我们虽然拼命思考 xff0c 但是极少思考自己的思考 围绕认知的飞轮 xf

随机推荐

  • Linux 上功能强大的网络工具 tcpdump 详解

    tcpdump 是用于捕获传入和传出流量的网络实用程序 这是您需要了解的有关在 Linux 上使用 tcpdump 的所有信息 Linux 配备了大量的网络实用程序可供选择 tcpdump 是一种功能强大的网络工具 xff0c 如果您需要对
  • 简析车载以太网TSN标准

    众所周知 xff0c 通用以太网是以非同步方式工作的 xff0c 网络中任何设备都可以随时发送数据 xff0c 因此在数据的传输时间上既不精准也不确定 xff1b 同时 xff0c 广播数据或视频等大规模数据的传输 xff0c 也会因网络负
  • 英伟达发布的系统级芯片orin

    本文为英伟达全面分析的第七篇文章 xff0c 关注英伟达在今年会大规模交付的Orin系统级芯片 Orin 是亚特兰蒂斯神话第一任统治者 xff0c 海王Altan的儿子 Orin一经发布 xff0c 便成为众多车企争抢装车的对象 本文重点探
  • Shell内置命令之exit的语法与实例

    系统中是有exit命令的 用于退出当前用户的登录状态 但是在 Shell 脚本中 exit 语句是用来退出当前脚本的 下面这篇文章主要给大家介绍了关于Shell内置命令之exit的语法与实例 需要的朋友可以参考下 https www jb5
  • SHELL编程

    一 变量 1 shell 脚本基础知识 编译型语言 xff1a 如 c语言 解释型语言 xff1a shell 脚本 shell脚本的本质 xff1a shell命令的有序集合 2 shell 编程的基本过程 基本过程分为三步 xff1a
  • 浅谈TC8数据链路层测试

    当今时代 xff0c 智能汽车已成为一个炙手可热的话题 xff0c 各种先进汽车电子技术蓬勃发展 xff0c 比如自动驾驶 V2X OTA 这些新技术的背后都离不开车载以太网通信技术的支持 浅谈TC8数据链路层测试 知乎 其中数据链路层实现
  • 100 道 Linux 常见面试题 建议收藏,慢慢读~

    本文共 2W 43 字 xff0c 分别从 Linux 概述 磁盘 目录 文件 安全 语法级 实战 文件管理命令 文档编辑命令 磁盘管理命令 网络通讯命令 系统管理命令 备份压缩命令等方面拆解 Linux 常见面试问题 可以先收藏 xff0
  • patchelf 的功能以及使用 patchelf 修改 rpath 以解决动态库问题

    低版本 libc 库运行高版本 libc 库编译的程序 https blog csdn net Longyu wlz article details 108023117 在这篇博客中我描述了使用 patchelf 来修改动态库链接器的方法
  • Alpha-beta 算法

    Alpha beta 算法是棋类游戏中最常用的 xff0c 也是最基础的剪枝方法 xff0c 要说Alpha beta 算法 就得先说下max min博弈树 算法 xff0c 就是模拟电脑下子 xff0c 要下在对电脑最优的地方 xff0c
  • 关于SOME/IP的理解

    1 总体说明 如上图所示为标准的网络七层架构 xff0c SOME IP Scalable service Oriented MiddlewarE over IP xff0c 即 运行于IP之上的可伸缩的面向服务的中间件 他在系统中其实就是
  • Win10常用快捷键

  • 推荐3篇 如何建立自己的知识体系

    如何构建自己的知识体系 xff1f 看这一篇就够了 xff01 如何把学到的知识系统化 xff1f 怎么才能把知识系统化的学透彻呢 xff1f 这3步可以帮助你 什么是知识体系 xff1f 为什么要搭建知识体系 xff1f 如何搭建知识体系
  • 《富有的习惯》

    目录 关于作者 关于本书 核心内容 前言 第一部分 第二部分 习惯觉察表 结语 富人和穷人的区别是什么 xff1f 富人永远更谨慎 关于作者 本书作者是托马斯 科里 xff0c 他是一位美国著名的会计师和注册理财规划师 xff0c 开办了一
  • 演讲培训——荣耀时刻

    如何用惊艳的开场白引爆项目路演的全场 xff1f 如何用精准而生动的语言表达有力的商务主题 xff1f 如何层层递进环环相扣地展开内容 xff1f 如何打造激励人心激发行动的演讲结尾 xff1f 如何让观点有内在 xff0c 让语言有逻辑
  • QNX的调度算法

    作为一个硬实时操作系统 xff0c QNX是一个基于优先级抢占的系统 这也导致其基本调度算法相对比较简单 因为不需要像别的通用操作系统考虑一些复杂的 公平性 xff0c 只需要保证 优先级最高的线程最优先得到 CPU 就可以了 基本调度算法
  • 葡萄酒品酒的四个步骤

    第一步 xff1a 观色 将酒杯举到白色背景之上 xff0c 然后倾斜约45 xff0c 仔细观察酒液中心的颜色 边缘色泽 澄清度 通常而言 xff0c 红葡萄酒的越浅 xff0c 年份越老 xff1b 白葡萄酒的颜色越浅 xff0c 年份
  • 高通骁龙 8155 到底有什么魔力?

    高通骁龙8155采用安卓系统 xff0c 兼容性更好 xff0c APP的数量也就相当多 xff0c 硬件方面 xff0c 这颗芯片最高支持3个4K屏或4个2K屏 xff0c 4个麦克风6颗摄像头 xff0c 还有WiFi6 5G 蓝牙5
  • 当你遇到Bug该怎么办?

    一 问题复现 稳定复现问题才能正确的对问题进行定位 解决以及验证 一般来说 xff0c 越容易复现的问题越容易解决 1 1 模拟复现条件 有的问题存在于特定的条件下 xff0c 只需要模拟出现问题的条件即可复现 对于依赖外部输入的条件 xf
  • 增加远程访问用户

    http www zhuangjiba com hardware 34023 html http www zhuangjiba com hardware 34023 html 打开管理员权限 xff1a
  • 基于Java的“多功能五子棋”游戏的设计和实现

    源码地址 xff1a http download csdn net detail clx55555 9718406 下载或转载使用请声明原著 xff1a 但求心安 基于 Java的 多功能五子棋 游戏的设计和实现 引言 随着经济社会的迅速发