效果图如下:孔丘仲尼先生曾经曰过“斋必变食,居必迁坐。食不厌精,脍不厌细”,被捧上天的圣人尚且如此,游戏中的角色更不例外,在ACT游戏中举凡加分、恢复体力、发动必杀技种种,都离不开“食物”的伟大功绩。
我们大家都知道,在典型的平面2D ACT游戏中,是使用层级的概念来描绘整个画面的,最底层的背景一般不参与游戏进程,而由再上一级的前景来承载角色及限制角色活动区域。所有置于前景之上的本质上都是活动精灵,只是扮演的角色不同,才会发生不同的作用与效果。
比如,在本例中我将Sprite抽象出来,而由Role及Food分别继承,他们的命运就变成了吃与被吃的关系……
代码如下:
Sprite.java
packageorg.test.mario;
importjava.awt.Graphics;
importjava.awt.Image;
importjava.awt.Rectangle;
importorg.loon.framework.game.image.Bitmap;
/***//**
*<p>
*Title:LoonFramework
*</p>
*<p>
*Description:精灵类(为了批量制造角色,将Role中通用设定抽象成此类)
*</p>
*<p>
*Copyright:Copyright(c)2008
*</p>
*<p>
*Company:LoonFramework
*</p>
*<p>
*License:http://www.apache.org/licenses/LICENSE-2.0
*</p>
*
*@authorchenpeng
*@email:ceponline@yahoo.com.cn
*@version0.1
*/
publicabstractclassSprite...{
//坐标
protecteddouble_x;
protecteddouble_y;
//宽
protectedintwidth;
//高
protectedintheight;
//图像
protectedImage_image;
//步数
protectedint_count;
//地图
protectedMap_map;
/***//**
*构造函数,以角色图位置,初始的x、y坐标,地图四项参数创建一个可用的角色
*
*@paramfileName
*@param_x
*@param_y
*@parammap
*/
publicSprite(StringfileName,double_x,double_y,Mapmap)...{
this._x=_x;
this._y=_y;
this._map=map;
width=32;
height=32;
loadImage(fileName);
_count=0;
AnimationThreadthread=newAnimationThread();
thread.start();
}
publicabstractvoidupdate();
publicvoiddraw(Graphicsg,intoffsetX,intoffsetY)...{
g.drawImage(_image,(int)_x+offsetX,(int)_y+offsetY,(int)_x
+offsetX+width,(int)_y+offsetY+height,_count*width,
0,_count*width+width,height,null);
}
publicbooleanisHit(Spritesprite)...{
RectangleplayerRect=newRectangle((int)_x,(int)_y,width,height);
RectanglespriteRect=newRectangle((int)sprite.getX(),(int)sprite
.getY(),sprite.getWidth(),sprite.getHeight());
//判定两者边框是否相交
if(playerRect.intersects(spriteRect))...{
returntrue;
}
returnfalse;
}
publicdoublegetX()...{
return_x;
}
publicdoublegetY()...{
return_y;
}
publicintgetWidth()...{
returnwidth;
}
publicintgetHeight()...{
returnheight;
}
privatevoidloadImage(Stringfilename)...{
_image=newBitmap(filename).getImage();
}
privateclassAnimationThreadextendsThread...{
publicvoidrun()...{
while(true)...{
//换算步数
if(_count==0)...{
_count=1;
}elseif(_count==1)...{
_count=0;
}
//动作更替延迟
try...{
Thread.sleep(300);
}catch(InterruptedExceptione)...{
e.printStackTrace();
}
}
}
}
}
Food.java
packageorg.test.mario;
/***//**
*<p>
*Title:LoonFramework
*</p>
*<p>
*Description:兵粮丸
*</p>
*<p>
*Copyright:Copyright(c)2008
*</p>
*<p>
*Company:LoonFramework
*</p>
*<p>
*License:http://www.apache.org/licenses/LICENSE-2.0
*</p>
*
*@authorchenpeng
*@email:ceponline@yahoo.com.cn
*@version0.1
*/
publicclassFoodextendsSprite...{
publicFood(StringfileName,doublex,doubley,Mapmap)...{
super(fileName,x,y,map);
}
publicvoidupdate()...{
}
}
Role.java
packageorg.test.mario;
importjava.awt.Graphics;
importjava.awt.Point;
/***//**
*<p>
*Title:LoonFramework
*</p>
*<p>
*Description:角色描述及绘制用类
*</p>
*<p>
*Copyright:Copyright(c)2008
*</p>
*<p>
*Company:LoonFramework
*</p>
*
*@authorchenpeng
*@email:ceponline@yahoo.com.cn
*@version0.1
*/
publicclassRoleextendsSprite...{
privatedouble_vx;
privatedouble_vy;
privatebooleanisFlat;
privateint_dir;
finalstaticpublicintWIDTH=40;
finalstaticpublicintHEIGHT=40;
finalstaticprivateintSPEED=6;
finalstaticprivateintJUMP_SPEED=16;
finalstaticprivateintRIGHT=0;
finalstaticprivateintLEFT=1;
/***//**
*构造函数,以角色图位置,初始的x、y坐标,地图四项参数创建一个可用的角色
*
*@paramfilename
*@paramx
*@paramy
*@parammap
*/
publicRole(Stringfilename,doublex,doubley,Mapmap)...{
super(filename,x,y,map);
_vx=0;
_vy=0;
isFlat=false;
_dir=RIGHT;
}
publicvoidstop()...{
_vx=0;
}
publicvoidleft()...{
_vx=-SPEED;
_dir=LEFT;
}
publicvoidright()...{
_vx=SPEED;
_dir=RIGHT;
}
publicvoidjump()...{
if(isFlat)...{
_vy=-JUMP_SPEED;
isFlat=false;
}
}
publicvoidupdate()...{
//0.6为允许跳跃的高度限制,反值效果
_vy+=0.6;
doublenewX=_x+_vx;
Pointtile=_map.getTileHit(this,newX,_y);
if(tile==null)...{
_x=newX;
}else...{
if(_vx>0)...{
_x=Map.tilesToPixels(tile.x)-WIDTH;
}elseif(_vx<0)...{
_x=Map.tilesToPixels(tile.x+1);
}
_vx=0;
}
doublenewY=_y+_vy;
tile=_map.getTileHit(this,_x,newY);
if(tile==null)...{
_y=newY;
isFlat=false;
}else...{
if(_vy>0)...{
_y=Map.tilesToPixels(tile.y)-HEIGHT;
_vy=0;
isFlat=true;
}elseif(_vy<0)...{
_y=Map.tilesToPixels(tile.y+1);
_vy=0;
}
}
}
publicvoiddraw(Graphicsg,intoffsetX,intoffsetY)...{
g.drawImage(_image,(int)_x+offsetX,(int)_y+offsetY,(int)_x
+offsetX+WIDTH,(int)_y+offsetY+HEIGHT,_count*WIDTH,
_dir*HEIGHT,_count*WIDTH+WIDTH,_dir*HEIGHT+HEIGHT,
null);
}
}
Map.java
packageorg.test.mario;
importjava.awt.Graphics;
importjava.awt.Image;
importjava.awt.Point;
importjava.util.LinkedList;
importorg.loon.framework.game.image.Bitmap;
/***//**
*<p>
*Title:LoonFramework
*</p>
*<p>
*Description:地图绘制及描述用类
*</p>
*<p>
*Copyright:Copyright(c)2008
*</p>
*<p>
*Company:LoonFramework
*</p>
*
*@authorchenpeng
*@email:ceponline@yahoo.com.cn
*@version0.1
*/
publicclassMap...{
//在以前的blog文章中我介绍过,游戏开发中通常以数组描述地图
//此处1描绘为一个障碍物,0描绘为一个可通行空间
finalstaticpublicintTILE_SIZE=32;
finalstaticpublicintROW=20;
finalstaticpublicintCOL=30;
finalstaticpublicintWIDTH=TILE_SIZE*COL;
finalstaticpublicintHEIGHT=TILE_SIZE*ROW;
finalstaticpublicdoubleGRAVITY=0.6;
//缓存精灵的list
privateLinkedListsprites;
//地图描述
finalstaticprivateint[][]map=...{
...{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,2},
...{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,1},
...{2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,1},
...{1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,1},
...{1,3,3,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,
2,2,2,2,2,2,2,1},
...{1,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,
0,0,0,0,0,0,0,1},
...{1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,
0,0,0,0,0,0,0,1},
...{1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,
0,0,0,0,0,0,0,1},
...{1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,3,0,
0,0,0,0,0,0,0,1},
...{1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,2,0,
0,0,0,0,0,0,0,1},
...{1,0,0,0,0,0,2,2,2,2,2,2,2,2,0,0,0,0,0,1,0,0,
0,0,0,0,0,0,0,1},
...{1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,
0,0,0,0,0,0,0,1},
...{1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,
0,0,0,0,0,0,0,1},
...{1,3,3,3,3,3,0,0,0,0,0,0,0,0,3,3,3,3,3,1,2,2,
0,0,0,0,0,0,3,1},
...{1,2,2,2,2,2,0,0,0,0,0,0,0,0,2,2,2,2,2,1,0,0,
0,0,0,0,0,0,2,1},
...{1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,
0,0,0,0,0,0,0,1},
...{1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,
0,0,0,0,0,0,0,1},
...{1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,1},
...{1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,1},
...{1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,
2,2,2,2,2,2,2,1}};
finalstaticprivateImagetile=newBitmap("./tile_0.gif").getImage();
finalstaticprivateImagetile2=newBitmap("./tile_1.gif").getImage();
/***//**
*构造函数
*
*/
publicMap()...{
//精灵list
sprites=newLinkedList();
//注入兵粮丸
for(inti=0;i<ROW;i++)...{
for(intj=0;j<COL;j++)...{
switch(map[i][j])...{
case3:
sprites.add(newFood("./food.gif",tilesToPixels(j),tilesToPixels(i),this));
break;
}
}
}
}
publicvoiddraw(Graphicsg,intoffsetX,intoffsetY)...{
intfirstTileX=pixelsToTiles(-offsetX);
intlastTileX=firstTileX+pixelsToTiles(Main._WIDTH)+1;
lastTileX=Math.min(lastTileX,COL);
intfirstTileY=pixelsToTiles(-offsetY);
intlastTileY=firstTileY+pixelsToTiles(Main._HEIGHT)+1;
lastTileY=Math.min(lastTileY,ROW);
for(inti=firstTileY;i<lastTileY;i++)...{
for(intj=firstTileX;j<lastTileX;j++)...{
//转换map标识
switch(map[i][j])...{
case1://绘制砖地
g.drawImage(tile,tilesToPixels(j)+offsetX,
tilesToPixels(i)+offsetY,null);
break;
case2://绘制草地
g.drawImage(tile2,tilesToPixels(j)+offsetX,
tilesToPixels(i)+offsetY,null);
break;
}
}
}
}
/***//**
*换算角色与地板的撞击,并返回Point用以描述新的x,y
*
*@paramplayer
*@paramnewX
*@paramnewY
*@return
*/
publicPointgetTileHit(Roleplayer,doublenewX,doublenewY)...{
newX=Math.ceil(newX);
newY=Math.ceil(newY);
doublefromX=Math.min(player.getX(),newX);
doublefromY=Math.min(player.getY(),newY);
doubletoX=Math.max(player.getX(),newX);
doubletoY=Math.max(player.getY(),newY);
intfromTileX=pixelsToTiles(fromX);
intfromTileY=pixelsToTiles(fromY);
inttoTileX=pixelsToTiles(toX+Role.WIDTH-1);
inttoTileY=pixelsToTiles(toY+Role.HEIGHT-1);
for(intx=fromTileX;x<=toTileX;x++)...{
for(inty=fromTileY;y<=toTileY;y++)...{
if(x<0||x>=COL)...{
returnnewPoint(x,y);
}
if(y<0||y>=ROW)...{
returnnewPoint(x,y);
}
if(map[y][x]==1||map[y][x]==2)...{
returnnewPoint(x,y);
}
}
}
returnnull;
}
/***//**
*将Tiles转为Pixels
*
*@parampixels
*@return
*/
publicstaticintpixelsToTiles(doublepixels)...{
return(int)Math.floor(pixels/TILE_SIZE);
}
/***//**
*将Pixels转为Tiles
*
*@parampixels
*@return
*/
publicstaticinttilesToPixels(inttiles)...{
returntiles*TILE_SIZE;
}
/***//**
*返回Spritelist
*@return
*/
publicLinkedListgetSprites()...{
returnsprites;
}
publicvoidsetSprites(LinkedListsprites)...{
this.sprites=sprites;
}
}
Main.java
packageorg.test.mario;
importjava.awt.Color;
importjava.awt.Frame;
importjava.awt.Graphics;
importjava.awt.Image;
importjava.awt.Panel;
importjava.awt.event.KeyEvent;
importjava.awt.event.KeyListener;
importjava.awt.event.WindowAdapter;
importjava.awt.event.WindowEvent;
importjava.util.Iterator;
importjava.util.LinkedList;
importorg.loon.framework.game.image.Bitmap;
/***//**
*<p>
*Title:LoonFramework
*</p>
*<p>
*Description:
*</p>
*<p>
*Copyright:Copyright(c)2008
*</p>
*<p>
*Company:LoonFramework
*</p>
*
*@authorchenpeng
*@email:ceponline@yahoo.com.cn
*@version0.1
*/
publicclassMainextendsPanelimplementsRunnable,KeyListener...{
/***//**
*
*/
privatestaticfinallongserialVersionUID=1L;
publicstaticfinalint_WIDTH=640;
publicstaticfinalint_HEIGHT=480;
privateMap_map;
privateRole_role;
privateThread_sleep;
privateImage_screen=null;
privateGraphics_graphics=null;
//方向控制,由于是自然落体所以没有down
privatebooleanLEFT;
privatebooleanRIGHT;
privatebooleanUP;
//底层背景
finalstaticprivateImageback=newBitmap("./雕像.png").getImage();
publicMain()...{
setSize(_WIDTH,_HEIGHT);
setFocusable(true);
_screen=newBitmap(_WIDTH,_HEIGHT).getImage();
_graphics=_screen.getGraphics();
_map=newMap();
//设置扮演的角色
_role=newRole("role.gif",190,40,_map);
//监听窗体
addKeyListener(this);
//启动线程
_sleep=newThread(this);
_sleep.start();
}
/***//**
*运行
*/
publicvoidrun()...{
while(true)...{
//改变方向
if(LEFT)...{
_role.left();
}elseif(RIGHT)...{
_role.right();
}else...{
_role.stop();
}
if(UP)...{
_role.jump();
}
_role.update();
LinkedListsprites=_map.getSprites();
for(Iteratorit=sprites.iterator();it.hasNext();)...{
//还原为sprite
Spritesprite=(Sprite)it.next();
//变更精灵状态
sprite.update();
//碰撞检测
if(_role.isHit(sprite))...{
//对象检测,为兵粮丸时
if(spriteinstanceofFood)...{
Foodcoin=(Food)sprite;
//删除对象
//it.remove();
sprites.remove(coin);
break;
}
}
}
repaint();
try...{
Thread.sleep(20);
}catch(InterruptedExceptione)...{
e.printStackTrace();
}
}
}
publicvoidupdate(Graphicsg)...{
paint(g);
}
publicvoidpaint(Graphicsg)...{
_graphics.setColor(Color.BLACK);
_graphics.fillRect(0,0,_WIDTH,_HEIGHT);
_graphics.drawImage(back,0,0,this);
intoffsetX=_WIDTH/2-(int)_role.getX();
offsetX=Math.min(offsetX,0);
offsetX=Math.max(offsetX,_WIDTH-Map.WIDTH);
intoffsetY=_HEIGHT/2-(int)_role.getY();
offsetY=Math.min(offsetY,0);
offsetY=Math.max(offsetY,_HEIGHT-Map.HEIGHT);
_map.draw(_graphics,offsetX,offsetY);
_role.draw(_graphics,offsetX,offsetY);
//遍历精灵对象并绘制
LinkedListsprites=_map.getSprites();
for(Iteratorit=sprites.iterator();it.hasNext();)...{
Spritesprite=(Sprite)it.next();
sprite.draw(_graphics,offsetX,offsetY);
}
g.drawImage(_screen,0,0,null);
}
publicvoidkeyPressed(KeyEvente)...{
intkey=e.getKeyCode();
if(key==KeyEvent.VK_LEFT)...{
LEFT=true;
}
if(key==KeyEvent.VK_RIGHT)...{
RIGHT=true;
}
if(key==KeyEvent.VK_UP)...{
UP=true;
}
}
publicvoidkeyReleased(KeyEvente)...{
intkey=e.getKeyCode();
if(key==KeyEvent.VK_LEFT)...{
LEFT=false;
}
if(key==KeyEvent.VK_RIGHT)...{
RIGHT=false;
}
if(key==KeyEvent.VK_UP)...{
UP=false;
}
}
publicvoidkeyTyped(KeyEvente)...{
}
publicstaticvoidmain(String[]args)...{
Frameframe=newFrame();
frame.setTitle("Java来做马里奥(3)—食不厌精");
frame.setSize(_WIDTH,_HEIGHT+20);
frame.setResizable(false);
frame.setLocationRelativeTo(null);
frame.add(newMain());
frame.setVisible(true);
frame.addWindowListener(newWindowAdapter()...{
publicvoidwindowClosing(WindowEvente)...{
System.exit(0);
}
});
}
}
分享到:
相关推荐
vue3.2+ts+vite+admin 开发的admin管理系统模板
自动化测试工具selenium使用的浏览器驱动下载 chromedriver驱动压缩包 Java web 自动化测试工具需要使用的chromedriver浏览器驱动
Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。
2. Power Query 逆透视&分组依据.xlsx
Java 实现微信红包分配算法内含源码以及说明书可以自己运行复现.zip
Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。
Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。
2024-2030中国WiFi连接洗衣机市场现状研究分析与发展前景预测报告
Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。
用法链接:https://menghui666.blog.csdn.net/article/details/138544216?spm=1001.2014.3001.5502 Qt 多列时间轴控件。 可与多段字符串格式自由转换,也可手动添加列表项。 专门用来以时间轴作为事件线发展顺序的故事大纲。 特点 时间背包功能:记录所有物品或属性发生的变化,随时回溯 时间可输入任意内容,不限于时间 每一时间段允许多列,即多个文字节点 全自动调整节点大小(宽高),尽量看起来舒服 行与行、列与列 之间任意拖拽更换顺序 可与文字自由转换,默认一段为一个文字节点 方便的多行操作 按需修改快捷键 所有编辑可撤销 美观的调整动画
基于SSM个人记账本理财管理系统源码+文档说明+数据库(高分项目).zip 本资源中的源码都是经过本地编译过可运行的,评审分达到95分以上。资源项目的难度比较适中,内容都是经过助教老师审定过的能够满足学习、使用需求,如果有需要的话可以放心下载使用。 基于SSM个人记账本理财管理系统源码+文档说明+数据库(高分项目).zip 本资源中的源码都是经过本地编译过可运行的,评审分达到95分以上。资源项目的难度比较适中,内容都是经过助教老师审定过的能够满足学习、使用需求,如果有需要的话可以放心下载使用。 基于SSM个人记账本理财管理系统源码+文档说明+数据库(高分项目).zip 本资源中的源码都是经过本地编译过可运行的,评审分达到95分以上。资源项目的难度比较适中,内容都是经过助教老师审定过的能够满足学习、使用需求,如果有需要的话可以放心下载使用。 基于SSM个人记账本理财管理系统源码+文档说明+数据库(高分项目).zip 本资源中的源码都是经过本地编译过可运行的,评审分达到95分以上。资源项目的难度比较适中,内容都是经过助教老师审定过的能够满足学习、使用需求,如果有需要的话可以放心下载使用。
代替AWCC驱动的TCC软件
app.apk
C++11&14 高速上手教程内含源码以及说明书可以自己运行复现.zip
Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。
这是一组从网站上的精选用户那里收集的 20,000 多款游戏 Lichess.org,以及如何收集更多游戏。我还将在未来收集更多游戏时上传它们。此套装包含:游戏 ID;额定值 (T/F);开始时间;结束时间;匝数;游戏状态;胜利者;时间增量;白色玩家 ID;白人球员评分;黑色玩家 ID;黑人球员评分;所有动作均采用标准国际象棋符号;Opening Eco(任何给定开口的标准化代码,在此处列出); 开场名称;开盘(开盘阶段的移动次数)
大语言模型高清PDF--人民大学。2022 年底,ChatGPT 震撼上线,大语言模型技术迅速“席卷”了整个社会,人工智能技术因此迎来了一次重要进展。面对大语言模型的强大性能,我们不禁要问:支撑这些模型的背后技术究竟是什么?这一问题无疑成为了众多科研人员的思考焦点。 不同综述,本次中文版书籍更注重为大模型技术的入门读者提供讲解,为此我们在内容上进行了大幅度的更新与重组,力图展现一个整体的大模型技术框架和路线图。本书适用于具有深度学习基础的高年级本科生以及低年级研究生使用,可以作为一本入门级的技术书籍
Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。
2024年中国齿槽扭矩测试仪行业研究报告
Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。