Java来做马里奥[0]—让精灵再次舞动

记得在红白机(FC)年代,还刚刚上小学的我对马里奥、冒险岛、洛克人、魂斗罗等游戏几乎可说是痴迷,每天放学回家就是想去游戏,就是要通关,就是想和关底论个胜负高低。

许多年过去了,沧海桑田,FC曾经的荣耀早已不再,只留下我们对曾经少年时的点点记忆。即使当时在FC上看上去多么复杂,多么高不可攀的游戏,在当今,即使最普通的程序员都可以轻易实现。

本着向经典学习、向经典致敬的心情,我也准备用Java在PC机再现当年马里奥的风采。

下面我在代码中所演示的,是一个简单的ACT游戏动作及地图构成原型。

Map.java
Java来做马里奥[0]—让精灵再次舞动packageorg.test.mario;
Java来做马里奥[0]—让精灵再次舞动
Java来做马里奥[0]—让精灵再次舞动
importjava.awt.Color;
Java来做马里奥[0]—让精灵再次舞动
importjava.awt.Graphics;
Java来做马里奥[0]—让精灵再次舞动
importjava.awt.Point;
Java来做马里奥[0]—让精灵再次舞动
Java来做马里奥[0]—让精灵再次舞动Java来做马里奥[0]—让精灵再次舞动
/***//**
Java来做马里奥[0]—让精灵再次舞动*<p>
Java来做马里奥[0]—让精灵再次舞动*Title:LoonFramework
Java来做马里奥[0]—让精灵再次舞动*</p>
Java来做马里奥[0]—让精灵再次舞动*<p>
Java来做马里奥[0]—让精灵再次舞动*Description:地图绘制及描述用类
Java来做马里奥[0]—让精灵再次舞动*</p>
Java来做马里奥[0]—让精灵再次舞动*<p>
Java来做马里奥[0]—让精灵再次舞动*Copyright:Copyright(c)2008
Java来做马里奥[0]—让精灵再次舞动*</p>
Java来做马里奥[0]—让精灵再次舞动*<p>
Java来做马里奥[0]—让精灵再次舞动*Company:LoonFramework
Java来做马里奥[0]—让精灵再次舞动*</p>
Java来做马里奥[0]—让精灵再次舞动*
Java来做马里奥[0]—让精灵再次舞动*
@authorchenpeng
Java来做马里奥[0]—让精灵再次舞动*@email:[email protected]
Java来做马里奥[0]—让精灵再次舞动*
@version0.1
Java来做马里奥[0]—让精灵再次舞动
*/

Java来做马里奥[0]—让精灵再次舞动Java来做马里奥[0]—让精灵再次舞动
publicclassMap...{
Java来做马里奥[0]—让精灵再次舞动
Java来做马里奥[0]—让精灵再次舞动
//在以前的blog文章中我介绍过,游戏开发中通常以数组描述地图
Java来做马里奥[0]—让精灵再次舞动
//此处1描绘为一个障碍物,0描绘为一个可通行空间
Java来做马里奥[0]—让精灵再次舞动Java来做马里奥[0]—让精灵再次舞动
finalstaticprivateint[][]map=...{
Java来做马里奥[0]—让精灵再次舞动Java来做马里奥[0]—让精灵再次舞动
...{1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1},
Java来做马里奥[0]—让精灵再次舞动Java来做马里奥[0]—让精灵再次舞动
...{1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1},
Java来做马里奥[0]—让精灵再次舞动Java来做马里奥[0]—让精灵再次舞动
...{1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1},
Java来做马里奥[0]—让精灵再次舞动Java来做马里奥[0]—让精灵再次舞动
...{1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1},
Java来做马里奥[0]—让精灵再次舞动Java来做马里奥[0]—让精灵再次舞动
...{1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1},
Java来做马里奥[0]—让精灵再次舞动Java来做马里奥[0]—让精灵再次舞动
...{1,0,0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,0,1},
Java来做马里奥[0]—让精灵再次舞动Java来做马里奥[0]—让精灵再次舞动
...{1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1},
Java来做马里奥[0]—让精灵再次舞动Java来做马里奥[0]—让精灵再次舞动
...{1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1},
Java来做马里奥[0]—让精灵再次舞动Java来做马里奥[0]—让精灵再次舞动
...{1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1},
Java来做马里奥[0]—让精灵再次舞动Java来做马里奥[0]—让精灵再次舞动
...{1,1,1,1,1,1,1,1,1,0,0,0,0,0,1,1,1,1,1,1},
Java来做马里奥[0]—让精灵再次舞动Java来做马里奥[0]—让精灵再次舞动
...{1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1},
Java来做马里奥[0]—让精灵再次舞动Java来做马里奥[0]—让精灵再次舞动
...{1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1},
Java来做马里奥[0]—让精灵再次舞动Java来做马里奥[0]—让精灵再次舞动
...{1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1},
Java来做马里奥[0]—让精灵再次舞动Java来做马里奥[0]—让精灵再次舞动
...{1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1},
Java来做马里奥[0]—让精灵再次舞动Java来做马里奥[0]—让精灵再次舞动
...{1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1}}
;
Java来做马里奥[0]—让精灵再次舞动
Java来做马里奥[0]—让精灵再次舞动
//地面瓦片的宽度
Java来做马里奥[0]—让精灵再次舞动
finalstaticprivateintTILE_SIZE=32;
Java来做马里奥[0]—让精灵再次舞动
Java来做马里奥[0]—让精灵再次舞动
//
Java来做马里奥[0]—让精灵再次舞动
finalstaticprivateintROW=15;
Java来做马里奥[0]—让精灵再次舞动
Java来做马里奥[0]—让精灵再次舞动
//
Java来做马里奥[0]—让精灵再次舞动
finalstaticprivateintCOL=20;
Java来做马里奥[0]—让精灵再次舞动
Java来做马里奥[0]—让精灵再次舞动Java来做马里奥[0]—让精灵再次舞动
/***//**
Java来做马里奥[0]—让精灵再次舞动*构造函数
Java来做马里奥[0]—让精灵再次舞动*
Java来做马里奥[0]—让精灵再次舞动
*/

Java来做马里奥[0]—让精灵再次舞动Java来做马里奥[0]—让精灵再次舞动
publicMap()...{
Java来做马里奥[0]—让精灵再次舞动}

Java来做马里奥[0]—让精灵再次舞动
Java来做马里奥[0]—让精灵再次舞动Java来做马里奥[0]—让精灵再次舞动
publicvoiddraw(Graphicsg)...{
Java来做马里奥[0]—让精灵再次舞动g.setColor(Color.ORANGE);
Java来做马里奥[0]—让精灵再次舞动Java来做马里奥[0]—让精灵再次舞动
for(inti=0;i<ROW;i++)...{
Java来做马里奥[0]—让精灵再次舞动Java来做马里奥[0]—让精灵再次舞动
for(intj=0;j<COL;j++)...{
Java来做马里奥[0]—让精灵再次舞动Java来做马里奥[0]—让精灵再次舞动
switch(map[i][j])...{
Java来做马里奥[0]—让精灵再次舞动
case1:
Java来做马里奥[0]—让精灵再次舞动g.fillRect(tilesToPixels(j),tilesToPixels(i),TILE_SIZE,
Java来做马里奥[0]—让精灵再次舞动TILE_SIZE);
Java来做马里奥[0]—让精灵再次舞动
break;
Java来做马里奥[0]—让精灵再次舞动}

Java来做马里奥[0]—让精灵再次舞动}

Java来做马里奥[0]—让精灵再次舞动}

Java来做马里奥[0]—让精灵再次舞动}

Java来做马里奥[0]—让精灵再次舞动
Java来做马里奥[0]—让精灵再次舞动Java来做马里奥[0]—让精灵再次舞动
/***//**
Java来做马里奥[0]—让精灵再次舞动*换算角色与地板的撞击,并返回Point用以描述新的x,y
Java来做马里奥[0]—让精灵再次舞动*
Java来做马里奥[0]—让精灵再次舞动*
@paramplayer
Java来做马里奥[0]—让精灵再次舞动*
@paramnewX
Java来做马里奥[0]—让精灵再次舞动*
@paramnewY
Java来做马里奥[0]—让精灵再次舞动*
@return
Java来做马里奥[0]—让精灵再次舞动
*/

Java来做马里奥[0]—让精灵再次舞动Java来做马里奥[0]—让精灵再次舞动
publicPointgetTileHit(Roleplayer,doublenewX,doublenewY)...{
Java来做马里奥[0]—让精灵再次舞动
//取最小的整数但不能小于自身,用以换算坐标
Java来做马里奥[0]—让精灵再次舞动
newX=Math.ceil(newX);
Java来做马里奥[0]—让精灵再次舞动newY
=Math.ceil(newY);
Java来做马里奥[0]—让精灵再次舞动
Java来做马里奥[0]—让精灵再次舞动
doublefromX=Math.min(player.getX(),newX);
Java来做马里奥[0]—让精灵再次舞动
doublefromY=Math.min(player.getY(),newY);
Java来做马里奥[0]—让精灵再次舞动
doubletoX=Math.max(player.getX(),newX);
Java来做马里奥[0]—让精灵再次舞动
doubletoY=Math.max(player.getY(),newY);
Java来做马里奥[0]—让精灵再次舞动
Java来做马里奥[0]—让精灵再次舞动
intfromTileX=pixelsToTiles(fromX);
Java来做马里奥[0]—让精灵再次舞动
intfromTileY=pixelsToTiles(fromY);
Java来做马里奥[0]—让精灵再次舞动
inttoTileX=pixelsToTiles(toX+Role.WIDTH-1);
Java来做马里奥[0]—让精灵再次舞动
inttoTileY=pixelsToTiles(toY+Role.HEIGHT-1);
Java来做马里奥[0]—让精灵再次舞动
Java来做马里奥[0]—让精灵再次舞动
//返回Point,用以描述x,y坐标点
Java来做马里奥[0]—让精灵再次舞动Java来做马里奥[0]—让精灵再次舞动
for(intx=fromTileX;x<=toTileX;x++)...{
Java来做马里奥[0]—让精灵再次舞动Java来做马里奥[0]—让精灵再次舞动
for(inty=fromTileY;y<=toTileY;y++)...{
Java来做马里奥[0]—让精灵再次舞动Java来做马里奥[0]—让精灵再次舞动
if(x<0||x>=COL)...{
Java来做马里奥[0]—让精灵再次舞动
returnnewPoint(x,y);
Java来做马里奥[0]—让精灵再次舞动}

Java来做马里奥[0]—让精灵再次舞动Java来做马里奥[0]—让精灵再次舞动
if(y<0||y>=ROW)...{
Java来做马里奥[0]—让精灵再次舞动
returnnewPoint(x,y);
Java来做马里奥[0]—让精灵再次舞动}

Java来做马里奥[0]—让精灵再次舞动Java来做马里奥[0]—让精灵再次舞动
if(map[y][x]==1)...{
Java来做马里奥[0]—让精灵再次舞动
returnnewPoint(x,y);
Java来做马里奥[0]—让精灵再次舞动}

Java来做马里奥[0]—让精灵再次舞动}

Java来做马里奥[0]—让精灵再次舞动}

Java来做马里奥[0]—让精灵再次舞动
Java来做马里奥[0]—让精灵再次舞动
returnnull;
Java来做马里奥[0]—让精灵再次舞动}

Java来做马里奥[0]—让精灵再次舞动
Java来做马里奥[0]—让精灵再次舞动Java来做马里奥[0]—让精灵再次舞动
/***//**
Java来做马里奥[0]—让精灵再次舞动*将Tiles转为Pixels
Java来做马里奥[0]—让精灵再次舞动*
Java来做马里奥[0]—让精灵再次舞动*
@parampixels
Java来做马里奥[0]—让精灵再次舞动*
@return
Java来做马里奥[0]—让精灵再次舞动
*/

Java来做马里奥[0]—让精灵再次舞动Java来做马里奥[0]—让精灵再次舞动
publicstaticintpixelsToTiles(doublepixels)...{
Java来做马里奥[0]—让精灵再次舞动
return(int)Math.floor(pixels/TILE_SIZE);
Java来做马里奥[0]—让精灵再次舞动}

Java来做马里奥[0]—让精灵再次舞动
Java来做马里奥[0]—让精灵再次舞动Java来做马里奥[0]—让精灵再次舞动
/***//**
Java来做马里奥[0]—让精灵再次舞动*将Pixels转为Tiles
Java来做马里奥[0]—让精灵再次舞动*
Java来做马里奥[0]—让精灵再次舞动*
@parampixels
Java来做马里奥[0]—让精灵再次舞动*
@return
Java来做马里奥[0]—让精灵再次舞动
*/

Java来做马里奥[0]—让精灵再次舞动Java来做马里奥[0]—让精灵再次舞动
publicstaticinttilesToPixels(inttiles)...{
Java来做马里奥[0]—让精灵再次舞动
returntiles*TILE_SIZE;
Java来做马里奥[0]—让精灵再次舞动}

Java来做马里奥[0]—让精灵再次舞动}

Java来做马里奥[0]—让精灵再次舞动

Role.java

Java来做马里奥[0]—让精灵再次舞动packageorg.test.mario;
Java来做马里奥[0]—让精灵再次舞动
Java来做马里奥[0]—让精灵再次舞动
importjava.awt.Color;
Java来做马里奥[0]—让精灵再次舞动
importjava.awt.Graphics;
Java来做马里奥[0]—让精灵再次舞动
importjava.awt.Point;
Java来做马里奥[0]—让精灵再次舞动
Java来做马里奥[0]—让精灵再次舞动Java来做马里奥[0]—让精灵再次舞动
/***//**
Java来做马里奥[0]—让精灵再次舞动*<p>
Java来做马里奥[0]—让精灵再次舞动*Title:LoonFramework
Java来做马里奥[0]—让精灵再次舞动*</p>
Java来做马里奥[0]—让精灵再次舞动*<p>
Java来做马里奥[0]—让精灵再次舞动*Description:角色描述及绘制用类
Java来做马里奥[0]—让精灵再次舞动*</p>
Java来做马里奥[0]—让精灵再次舞动*<p>
Java来做马里奥[0]—让精灵再次舞动*Copyright:Copyright(c)2008
Java来做马里奥[0]—让精灵再次舞动*</p>
Java来做马里奥[0]—让精灵再次舞动*<p>
Java来做马里奥[0]—让精灵再次舞动*Company:LoonFramework
Java来做马里奥[0]—让精灵再次舞动*</p>
Java来做马里奥[0]—让精灵再次舞动*
Java来做马里奥[0]—让精灵再次舞动*
@authorchenpeng
Java来做马里奥[0]—让精灵再次舞动*@email:[email protected]
Java来做马里奥[0]—让精灵再次舞动*
@version0.1
Java来做马里奥[0]—让精灵再次舞动
*/

Java来做马里奥[0]—让精灵再次舞动Java来做马里奥[0]—让精灵再次舞动
publicclassRole...{
Java来做马里奥[0]—让精灵再次舞动
Java来做马里奥[0]—让精灵再次舞动
//坐标的x,y
Java来做马里奥[0]—让精灵再次舞动
privatedouble_x;
Java来做马里奥[0]—让精灵再次舞动
Java来做马里奥[0]—让精灵再次舞动
privatedouble_y;
Java来做马里奥[0]—让精灵再次舞动
Java来做马里奥[0]—让精灵再次舞动
//显示的x,_y
Java来做马里奥[0]—让精灵再次舞动
privatedouble_vx;
Java来做马里奥[0]—让精灵再次舞动
Java来做马里奥[0]—让精灵再次舞动
privatedouble_vy;
Java来做马里奥[0]—让精灵再次舞动
Java来做马里奥[0]—让精灵再次舞动
//是否在平地
Java来做马里奥[0]—让精灵再次舞动
privatebooleanisFlat;
Java来做马里奥[0]—让精灵再次舞动
Java来做马里奥[0]—让精灵再次舞动
//自定义的地图描述类
Java来做马里奥[0]—让精灵再次舞动
privateMap_map;
Java来做马里奥[0]—让精灵再次舞动
Java来做马里奥[0]—让精灵再次舞动
//角色宽
Java来做马里奥[0]—让精灵再次舞动
finalstaticpublicintWIDTH=32;
Java来做马里奥[0]—让精灵再次舞动
Java来做马里奥[0]—让精灵再次舞动
//角色高
Java来做马里奥[0]—让精灵再次舞动
finalstaticpublicintHEIGHT=32;
Java来做马里奥[0]—让精灵再次舞动
Java来做马里奥[0]—让精灵再次舞动
//移动速度
Java来做马里奥[0]—让精灵再次舞动
finalstaticpublicintSPEED=6;
Java来做马里奥[0]—让精灵再次舞动
Java来做马里奥[0]—让精灵再次舞动
//跳越速度
Java来做马里奥[0]—让精灵再次舞动
finalstaticpublicintJUMP_SPEED=25;
Java来做马里奥[0]—让精灵再次舞动
Java来做马里奥[0]—让精灵再次舞动Java来做马里奥[0]—让精灵再次舞动
/***//**
Java来做马里奥[0]—让精灵再次舞动*构造函数,注入初始的角色x,y及map
Java来做马里奥[0]—让精灵再次舞动*
Java来做马里奥[0]—让精灵再次舞动*
@param_x
Java来做马里奥[0]—让精灵再次舞动*
@param_y
Java来做马里奥[0]—让精灵再次舞动*
@param_map
Java来做马里奥[0]—让精灵再次舞动
*/

Java来做马里奥[0]—让精灵再次舞动Java来做马里奥[0]—让精灵再次舞动
publicRole(doublex,double_y,Map_map)...{
Java来做马里奥[0]—让精灵再次舞动
this._x=x;
Java来做马里奥[0]—让精灵再次舞动
this._y=_y;
Java来做马里奥[0]—让精灵再次舞动
this._map=_map;
Java来做马里奥[0]—让精灵再次舞动_vx
=0;
Java来做马里奥[0]—让精灵再次舞动_vy
=0;
Java来做马里奥[0]—让精灵再次舞动isFlat
=false;
Java来做马里奥[0]—让精灵再次舞动}

Java来做马里奥[0]—让精灵再次舞动
Java来做马里奥[0]—让精灵再次舞动Java来做马里奥[0]—让精灵再次舞动
/***//**
Java来做马里奥[0]—让精灵再次舞动*停止动作
Java来做马里奥[0]—让精灵再次舞动*
Java来做马里奥[0]—让精灵再次舞动
*/

Java来做马里奥[0]—让精灵再次舞动Java来做马里奥[0]—让精灵再次舞动
publicvoidstop()...{
Java来做马里奥[0]—让精灵再次舞动_vx
=0;
Java来做马里奥[0]—让精灵再次舞动}

Java来做马里奥[0]—让精灵再次舞动
Java来做马里奥[0]—让精灵再次舞动Java来做马里奥[0]—让精灵再次舞动
/***//**
Java来做马里奥[0]—让精灵再次舞动*向左
Java来做马里奥[0]—让精灵再次舞动*
Java来做马里奥[0]—让精灵再次舞动
*/

Java来做马里奥[0]—让精灵再次舞动Java来做马里奥[0]—让精灵再次舞动
publicvoidleft()...{
Java来做马里奥[0]—让精灵再次舞动_vx
=-SPEED;
Java来做马里奥[0]—让精灵再次舞动}

Java来做马里奥[0]—让精灵再次舞动
Java来做马里奥[0]—让精灵再次舞动Java来做马里奥[0]—让精灵再次舞动
/***//**
Java来做马里奥[0]—让精灵再次舞动*向右
Java来做马里奥[0]—让精灵再次舞动*
Java来做马里奥[0]—让精灵再次舞动
*/

Java来做马里奥[0]—让精灵再次舞动Java来做马里奥[0]—让精灵再次舞动
publicvoidright()...{
Java来做马里奥[0]—让精灵再次舞动_vx
=SPEED;
Java来做马里奥[0]—让精灵再次舞动}

Java来做马里奥[0]—让精灵再次舞动
Java来做马里奥[0]—让精灵再次舞动Java来做马里奥[0]—让精灵再次舞动
/***//**
Java来做马里奥[0]—让精灵再次舞动*跳越动作
Java来做马里奥[0]—让精灵再次舞动*
Java来做马里奥[0]—让精灵再次舞动
*/

Java来做马里奥[0]—让精灵再次舞动Java来做马里奥[0]—让精灵再次舞动
publicvoidjump()...{
Java来做马里奥[0]—让精灵再次舞动
//当角色立于平地时
Java来做马里奥[0]—让精灵再次舞动Java来做马里奥[0]—让精灵再次舞动
if(isFlat)...{
Java来做马里奥[0]—让精灵再次舞动_vy
=-JUMP_SPEED;
Java来做马里奥[0]—让精灵再次舞动isFlat
=false;
Java来做马里奥[0]—让精灵再次舞动}

Java来做马里奥[0]—让精灵再次舞动}

Java来做马里奥[0]—让精灵再次舞动
Java来做马里奥[0]—让精灵再次舞动Java来做马里奥[0]—让精灵再次舞动
/***//**
Java来做马里奥[0]—让精灵再次舞动*变更位置
Java来做马里奥[0]—让精灵再次舞动*
Java来做马里奥[0]—让精灵再次舞动
*/

Java来做马里奥[0]—让精灵再次舞动Java来做马里奥[0]—让精灵再次舞动
publicvoidupdate()...{
Java来做马里奥[0]—让精灵再次舞动
//加入偏差值
Java来做马里奥[0]—让精灵再次舞动
_vy+=1.0;
Java来做马里奥[0]—让精灵再次舞动
Java来做马里奥[0]—让精灵再次舞动
//获得新的newX
Java来做马里奥[0]—让精灵再次舞动
doublenewX=_x+_vx;
Java来做马里奥[0]—让精灵再次舞动
Java来做马里奥[0]—让精灵再次舞动
//获得地板x,_y
Java来做马里奥[0]—让精灵再次舞动
Pointtile=_map.getTileHit(this,newX,_y);
Java来做马里奥[0]—让精灵再次舞动
//不存在时则默认为newX
Java来做马里奥[0]—让精灵再次舞动Java来做马里奥[0]—让精灵再次舞动
if(tile==null)...{
Java来做马里奥[0]—让精灵再次舞动_x
=newX;
Java来做马里奥[0]—让精灵再次舞动Java来做马里奥[0]—让精灵再次舞动}
else...{
Java来做马里奥[0]—让精灵再次舞动Java来做马里奥[0]—让精灵再次舞动
if(_vx>0)...{
Java来做马里奥[0]—让精灵再次舞动_x
=Map.tilesToPixels(tile.x)-WIDTH;
Java来做马里奥[0]—让精灵再次舞动Java来做马里奥[0]—让精灵再次舞动}
elseif(_vx<0)...{
Java来做马里奥[0]—让精灵再次舞动_x
=Map.tilesToPixels(tile.x+1);
Java来做马里奥[0]—让精灵再次舞动}

Java来做马里奥[0]—让精灵再次舞动_vx
=0;
Java来做马里奥[0]—让精灵再次舞动}

Java来做马里奥[0]—让精灵再次舞动
Java来做马里奥[0]—让精灵再次舞动
doublenewY=_y+_vy;
Java来做马里奥[0]—让精灵再次舞动
Java来做马里奥[0]—让精灵再次舞动tile
=_map.getTileHit(this,_x,newY);
Java来做马里奥[0]—让精灵再次舞动Java来做马里奥[0]—让精灵再次舞动
if(tile==null)...{
Java来做马里奥[0]—让精灵再次舞动_y
=newY;
Java来做马里奥[0]—让精灵再次舞动isFlat
=false;
Java来做马里奥[0]—让精灵再次舞动Java来做马里奥[0]—让精灵再次舞动}
else...{
Java来做马里奥[0]—让精灵再次舞动Java来做马里奥[0]—让精灵再次舞动
if(_vy>0)...{
Java来做马里奥[0]—让精灵再次舞动_y
=Map.tilesToPixels(tile.y)-HEIGHT;
Java来做马里奥[0]—让精灵再次舞动_vy
=0;
Java来做马里奥[0]—让精灵再次舞动isFlat
=true;
Java来做马里奥[0]—让精灵再次舞动Java来做马里奥[0]—让精灵再次舞动}
elseif(_vy<0)...{
Java来做马里奥[0]—让精灵再次舞动_y
=Map.tilesToPixels(tile.y+1);
Java来做马里奥[0]—让精灵再次舞动_vy
=0;
Java来做马里奥[0]—让精灵再次舞动}

Java来做马里奥[0]—让精灵再次舞动}

Java来做马里奥[0]—让精灵再次舞动}

Java来做马里奥[0]—让精灵再次舞动
Java来做马里奥[0]—让精灵再次舞动Java来做马里奥[0]—让精灵再次舞动
/***//**
Java来做马里奥[0]—让精灵再次舞动*将角色绘制于指定Graphics上
Java来做马里奥[0]—让精灵再次舞动*
Java来做马里奥[0]—让精灵再次舞动*
@paramg
Java来做马里奥[0]—让精灵再次舞动
*/

Java来做马里奥[0]—让精灵再次舞动Java来做马里奥[0]—让精灵再次舞动
publicvoiddraw(Graphicsg)...{
Java来做马里奥[0]—让精灵再次舞动
//目前以一个红色方块代替
Java来做马里奥[0]—让精灵再次舞动
g.setColor(Color.RED);
Java来做马里奥[0]—让精灵再次舞动g.fillRect((
int)_x,(int)_y,WIDTH,HEIGHT);
Java来做马里奥[0]—让精灵再次舞动}

Java来做马里奥[0]—让精灵再次舞动
Java来做马里奥[0]—让精灵再次舞动Java来做马里奥[0]—让精灵再次舞动
publicdoublegetX()...{
Java来做马里奥[0]—让精灵再次舞动
return_x;
Java来做马里奥[0]—让精灵再次舞动}

Java来做马里奥[0]—让精灵再次舞动
Java来做马里奥[0]—让精灵再次舞动Java来做马里奥[0]—让精灵再次舞动
publicdoublegetY()...{
Java来做马里奥[0]—让精灵再次舞动
return_y;
Java来做马里奥[0]—让精灵再次舞动}

Java来做马里奥[0]—让精灵再次舞动
Java来做马里奥[0]—让精灵再次舞动}

Java来做马里奥[0]—让精灵再次舞动

启动类:Main.java
Java来做马里奥[0]—让精灵再次舞动packageorg.test.mario;
Java来做马里奥[0]—让精灵再次舞动
Java来做马里奥[0]—让精灵再次舞动
importjava.awt.Color;
Java来做马里奥[0]—让精灵再次舞动
importjava.awt.Frame;
Java来做马里奥[0]—让精灵再次舞动
importjava.awt.Graphics;
Java来做马里奥[0]—让精灵再次舞动
importjava.awt.Image;
Java来做马里奥[0]—让精灵再次舞动
importjava.awt.Panel;
Java来做马里奥[0]—让精灵再次舞动
importjava.awt.event.KeyEvent;
Java来做马里奥[0]—让精灵再次舞动
importjava.awt.event.KeyListener;
Java来做马里奥[0]—让精灵再次舞动
importjava.awt.event.WindowAdapter;
Java来做马里奥[0]—让精灵再次舞动
importjava.awt.event.WindowEvent;
Java来做马里奥[0]—让精灵再次舞动
Java来做马里奥[0]—让精灵再次舞动
importorg.loon.framework.game.image.Bitmap;
Java来做马里奥[0]—让精灵再次舞动
Java来做马里奥[0]—让精灵再次舞动Java来做马里奥[0]—让精灵再次舞动
/***//**
Java来做马里奥[0]—让精灵再次舞动*<p>
Java来做马里奥[0]—让精灵再次舞动*Title:LoonFramework
Java来做马里奥[0]—让精灵再次舞动*</p>
Java来做马里奥[0]—让精灵再次舞动*<p>
Java来做马里奥[0]—让精灵再次舞动*Description:
Java来做马里奥[0]—让精灵再次舞动*</p>
Java来做马里奥[0]—让精灵再次舞动*<p>
Java来做马里奥[0]—让精灵再次舞动*Copyright:Copyright(c)2008
Java来做马里奥[0]—让精灵再次舞动*</p>
Java来做马里奥[0]—让精灵再次舞动*<p>
Java来做马里奥[0]—让精灵再次舞动*Company:LoonFramework
Java来做马里奥[0]—让精灵再次舞动*</p>
Java来做马里奥[0]—让精灵再次舞动*
Java来做马里奥[0]—让精灵再次舞动*
@authorchenpeng
Java来做马里奥[0]—让精灵再次舞动*@email:[email protected]
Java来做马里奥[0]—让精灵再次舞动*
@version0.1
Java来做马里奥[0]—让精灵再次舞动
*/

Java来做马里奥[0]—让精灵再次舞动Java来做马里奥[0]—让精灵再次舞动
publicclassMainextendsPanelimplementsRunnable,KeyListener...{
Java来做马里奥[0]—让精灵再次舞动
Java来做马里奥[0]—让精灵再次舞动Java来做马里奥[0]—让精灵再次舞动
/***//**
Java来做马里奥[0]—让精灵再次舞动*
Java来做马里奥[0]—让精灵再次舞动
*/

Java来做马里奥[0]—让精灵再次舞动
privatestaticfinallongserialVersionUID=1L;
Java来做马里奥[0]—让精灵再次舞动
Java来做马里奥[0]—让精灵再次舞动
publicstaticfinalint_WIDTH=640;
Java来做马里奥[0]—让精灵再次舞动
Java来做马里奥[0]—让精灵再次舞动
publicstaticfinalint_HEIGHT=480;
Java来做马里奥[0]—让精灵再次舞动
Java来做马里奥[0]—让精灵再次舞动
privateMap_map;
Java来做马里奥[0]—让精灵再次舞动
Java来做马里奥[0]—让精灵再次舞动
privateRole_role;
Java来做马里奥[0]—让精灵再次舞动
Java来做马里奥[0]—让精灵再次舞动
privateThread_sleep;
Java来做马里奥[0]—让精灵再次舞动
Java来做马里奥[0]—让精灵再次舞动
privateImage_screen=null;
Java来做马里奥[0]—让精灵再次舞动
Java来做马里奥[0]—让精灵再次舞动
privateGraphics_graphics=null;
Java来做马里奥[0]—让精灵再次舞动
Java来做马里奥[0]—让精灵再次舞动
//方向控制,由于是自然落体所以没有down
Java来做马里奥[0]—让精灵再次舞动
privatebooleanLEFT;
Java来做马里奥[0]—让精灵再次舞动
Java来做马里奥[0]—让精灵再次舞动
privatebooleanRIGHT;
Java来做马里奥[0]—让精灵再次舞动
Java来做马里奥[0]—让精灵再次舞动
privatebooleanUP;
Java来做马里奥[0]—让精灵再次舞动
Java来做马里奥[0]—让精灵再次舞动Java来做马里奥[0]—让精灵再次舞动
publicMain()...{
Java来做马里奥[0]—让精灵再次舞动setSize(_WIDTH,_HEIGHT);
Java来做马里奥[0]—让精灵再次舞动setFocusable(
true);
Java来做马里奥[0]—让精灵再次舞动_screen
=newBitmap(_WIDTH,_HEIGHT).getImage();
Java来做马里奥[0]—让精灵再次舞动_graphics
=_screen.getGraphics();
Java来做马里奥[0]—让精灵再次舞动_map
=newMap();
Java来做马里奥[0]—让精灵再次舞动
Java来做马里奥[0]—让精灵再次舞动_role
=newRole(100,32,_map);
Java来做马里奥[0]—让精灵再次舞动
Java来做马里奥[0]—让精灵再次舞动
//监听窗体
Java来做马里奥[0]—让精灵再次舞动
addKeyListener(this);
Java来做马里奥[0]—让精灵再次舞动
Java来做马里奥[0]—让精灵再次舞动
//启动线程
Java来做马里奥[0]—让精灵再次舞动
_sleep=newThread(this);
Java来做马里奥[0]—让精灵再次舞动_sleep.start();
Java来做马里奥[0]—让精灵再次舞动}

Java来做马里奥[0]—让精灵再次舞动
Java来做马里奥[0]—让精灵再次舞动Java来做马里奥[0]—让精灵再次舞动
/***//**
Java来做马里奥[0]—让精灵再次舞动*运行
Java来做马里奥[0]—让精灵再次舞动
*/

Java来做马里奥[0]—让精灵再次舞动Java来做马里奥[0]—让精灵再次舞动
publicvoidrun()...{
Java来做马里奥[0]—让精灵再次舞动Java来做马里奥[0]—让精灵再次舞动
while(true)...{
Java来做马里奥[0]—让精灵再次舞动
//改变方向
Java来做马里奥[0]—让精灵再次舞动Java来做马里奥[0]—让精灵再次舞动
if(LEFT)...{
Java来做马里奥[0]—让精灵再次舞动_role.left();
Java来做马里奥[0]—让精灵再次舞动Java来做马里奥[0]—让精灵再次舞动}
elseif(RIGHT)...{
Java来做马里奥[0]—让精灵再次舞动_role.right();
Java来做马里奥[0]—让精灵再次舞动Java来做马里奥[0]—让精灵再次舞动}
else...{
Java来做马里奥[0]—让精灵再次舞动_role.stop();
Java来做马里奥[0]—让精灵再次舞动}

Java来做马里奥[0]—让精灵再次舞动Java来做马里奥[0]—让精灵再次舞动
if(UP)...{
Java来做马里奥[0]—让精灵再次舞动_role.jump();
Java来做马里奥[0]—让精灵再次舞动}

Java来做马里奥[0]—让精灵再次舞动_role.update();
Java来做马里奥[0]—让精灵再次舞动repaint();
Java来做马里奥[0]—让精灵再次舞动Java来做马里奥[0]—让精灵再次舞动
try...{
Java来做马里奥[0]—让精灵再次舞动Thread.sleep(
20);
Java来做马里奥[0]—让精灵再次舞动Java来做马里奥[0]—让精灵再次舞动}
catch(InterruptedExceptione)...{
Java来做马里奥[0]—让精灵再次舞动e.printStackTrace();
Java来做马里奥[0]—让精灵再次舞动}

Java来做马里奥[0]—让精灵再次舞动}

Java来做马里奥[0]—让精灵再次舞动}

Java来做马里奥[0]—让精灵再次舞动
Java来做马里奥[0]—让精灵再次舞动Java来做马里奥[0]—让精灵再次舞动
publicvoidupdate(Graphicsg)...{
Java来做马里奥[0]—让精灵再次舞动paint(g);
Java来做马里奥[0]—让精灵再次舞动}

Java来做马里奥[0]—让精灵再次舞动
Java来做马里奥[0]—让精灵再次舞动Java来做马里奥[0]—让精灵再次舞动
publicvoidpaint(Graphicsg)...{
Java来做马里奥[0]—让精灵再次舞动_graphics.setColor(Color.BLACK);
Java来做马里奥[0]—让精灵再次舞动_graphics.fillRect(
0,0,_WIDTH,_HEIGHT);
Java来做马里奥[0]—让精灵再次舞动_map.draw(_graphics);
Java来做马里奥[0]—让精灵再次舞动_role.draw(_graphics);
Java来做马里奥[0]—让精灵再次舞动g.drawImage(_screen,
0,0,null);
Java来做马里奥[0]—让精灵再次舞动}

Java来做马里奥[0]—让精灵再次舞动
Java来做马里奥[0]—让精灵再次舞动Java来做马里奥[0]—让精灵再次舞动
publicvoidkeyPressed(KeyEvente)...{
Java来做马里奥[0]—让精灵再次舞动
intkey=e.getKeyCode();
Java来做马里奥[0]—让精灵再次舞动Java来做马里奥[0]—让精灵再次舞动
if(key==KeyEvent.VK_LEFT)...{
Java来做马里奥[0]—让精灵再次舞动LEFT
=true;
Java来做马里奥[0]—让精灵再次舞动}

Java来做马里奥[0]—让精灵再次舞动Java来做马里奥[0]—让精灵再次舞动
if(key==KeyEvent.VK_RIGHT)...{
Java来做马里奥[0]—让精灵再次舞动RIGHT
=true;
Java来做马里奥[0]—让精灵再次舞动}

Java来做马里奥[0]—让精灵再次舞动Java来做马里奥[0]—让精灵再次舞动
if(key==KeyEvent.VK_UP)...{
Java来做马里奥[0]—让精灵再次舞动UP
=true;
Java来做马里奥[0]—让精灵再次舞动}

Java来做马里奥[0]—让精灵再次舞动}

Java来做马里奥[0]—让精灵再次舞动
Java来做马里奥[0]—让精灵再次舞动Java来做马里奥[0]—让精灵再次舞动
publicvoidkeyReleased(KeyEvente)...{
Java来做马里奥[0]—让精灵再次舞动
intkey=e.getKeyCode();
Java来做马里奥[0]—让精灵再次舞动Java来做马里奥[0]—让精灵再次舞动
if(key==KeyEvent.VK_LEFT)...{
Java来做马里奥[0]—让精灵再次舞动LEFT
=false;
Java来做马里奥[0]—让精灵再次舞动}

Java来做马里奥[0]—让精灵再次舞动Java来做马里奥[0]—让精灵再次舞动
if(key==KeyEvent.VK_RIGHT)...{
Java来做马里奥[0]—让精灵再次舞动RIGHT
=false;
Java来做马里奥[0]—让精灵再次舞动}

Java来做马里奥[0]—让精灵再次舞动Java来做马里奥[0]—让精灵再次舞动
if(key==KeyEvent.VK_UP)...{
Java来做马里奥[0]—让精灵再次舞动UP
=false;
Java来做马里奥[0]—让精灵再次舞动}

Java来做马里奥[0]—让精灵再次舞动}

Java来做马里奥[0]—让精灵再次舞动
Java来做马里奥[0]—让精灵再次舞动Java来做马里奥[0]—让精灵再次舞动
publicvoidkeyTyped(KeyEvente)...{
Java来做马里奥[0]—让精灵再次舞动}

Java来做马里奥[0]—让精灵再次舞动
Java来做马里奥[0]—让精灵再次舞动Java来做马里奥[0]—让精灵再次舞动
publicstaticvoidmain(String[]args)...{
Java来做马里奥[0]—让精灵再次舞动Frameframe
=newFrame();
Java来做马里奥[0]—让精灵再次舞动frame.setTitle(
"Java来做马里奥(1)—让精灵舞动");
Java来做马里奥[0]—让精灵再次舞动frame.setSize(_WIDTH,_HEIGHT);
Java来做马里奥[0]—让精灵再次舞动frame.setResizable(
false);
Java来做马里奥[0]—让精灵再次舞动frame.setLocationRelativeTo(
null);
Java来做马里奥[0]—让精灵再次舞动frame.add(
newMain());
Java来做马里奥[0]—让精灵再次舞动frame.setVisible(
true);
Java来做马里奥[0]—让精灵再次舞动Java来做马里奥[0]—让精灵再次舞动frame.addWindowListener(
newWindowAdapter()...{
Java来做马里奥[0]—让精灵再次舞动Java来做马里奥[0]—让精灵再次舞动
publicvoidwindowClosing(WindowEvente)...{
Java来做马里奥[0]—让精灵再次舞动System.exit(
0);
Java来做马里奥[0]—让精灵再次舞动}

Java来做马里奥[0]—让精灵再次舞动}
);
Java来做马里奥[0]—让精灵再次舞动}

Java来做马里奥[0]—让精灵再次舞动
Java来做马里奥[0]—让精灵再次舞动}

Java来做马里奥[0]—让精灵再次舞动

运行效果如下图:
Java来做马里奥[0]—让精灵再次舞动

现在开始,我会在blog中逐步构建马里奥中的一关,有关心java pc游戏开发者敬请留意。