当前位置:文档之家› 《java游戏大作业设计》

《java游戏大作业设计》

for(int i = 0; i <pacworld.length; i++)
{
for(int j = 0; j <pacworld[i].length; j++)
{
pacworld [i][j] = false;
}
}
接下来根据数组绘制地图DrawPath,将绘制的边界以特殊的信息保存到数组中。
private void DrawPath() (部分代码)
coins++;
}
else if(i >=283 && i <=358 && j >= 172 && j <= 221) coins = coins;
else if(square > 2)
{
addObject(new Coin(),i,j);
coins++;
}
}
}
}
c = coins;
}
4
在Animal类中定义了用于子类继承的抽象方法,如:方向的移动、方向移动的提前量判断等,在该类中还设置了角色的场景移动传送方法,用于对游戏场景中部特殊的通道移动的定义。对于Ghost而言,他们的移动的范围要求比吃豆人更广提高难度,当他们从地图中央两侧的通道进入时,将会从另一侧出现。这种突然出现在身边的Ghost往往能提高玩家的紧张感,提升游戏性。
⑦游戏中怪物玩家角色之间要有相应的事件(比如:触碰到玩家角色时玩家生命减1);
⑧界面上要能有够显示出当前的得分情况以及当前的生命值;
⑨对于游戏的设计,在游戏结束时能够有相应的提示。
三、
3
图3-1
在吃豆人游戏的类设计中,首先要确立的是类的关联、划分主次。整个游戏主要由两大部分组成,在这其中PacWorld类既是其中的一大组成部分也游戏一个重要的“舞台”,承载了其他的类方法,在这其中,设计者可以根据具体的游戏需要来加入相应的游戏元素、游戏规则,从而达到丰富游戏的目的。
这次的设计中,吃豆人的事件主要分为两大类,它们分别是针对吃豆子和触碰Ghost的触发事件。
在吃豆子的事件中(如图3-3所示),当玩家操控吃豆人角色吃到小豆子(coin)时,分数加1(更新计分板)并移除小豆子。而当吃到大豆子(Power_Pellet)时,就需要在分数加5并移除大豆子的基础上更新Ghost状态(这里需要改变Ghost的图形,使玩家能在视觉上感受变化)。
int square = 1;
if(pacworld [i+1][j] == true) square++;
else if(pacworld [i-1][j] == true) square++;
if(pacworld [i][j+1] == true) square++;
else if(pacworld [i][j-1] == true) square++;:
addObject(blinky,320,171);
addObject(pinky,320,217);
addObject(clyde,358,210);
addObject(blankL,75,214);
addObject(blankR,575,214);
addObject(life1,70,350);
}
例如:当Ghost从右侧通道走出游戏场景时将会从左侧的通道重新出现在玩家的面前(如图4-3、图4-4所示)。
图4-3
图4-4
在游戏中,总是会在一个方向上碰到无法继续前进的情况,这个时候就需要判断此时还能往哪个方向进行运动,时刻检查能否向四周运动,并根据这个方向来和键盘输入的方向键进行比较,来执行最终的动作方向。
pacworld [x][213] = true;
pacworld [x][204] = true;
}
min = 120;
max = 522;
for (int x = min; x<= max; x++)
{
pacworld [x][426] = true;
pacworld [x][87] = true;
CheckD:用于检查你可以去往哪个方向
private boolean checkD(char s)
{
int x = 0, y = 0;
switch(s)
{
case 'u': y=-steps;break;
case 'd': y=steps;break;
case 'l': x=-steps;break;
World类又分为PacWorld和MyWorld两个类,其中PacWorld类是游戏场景元素的一个大集合。作为一个舞台的大容器,它包括游戏区块(左中右三部分)的布局、边界(墙壁)的绘制、背景颜色、空白填充、位置信息显示、分数、大小豆子、怪物以及的位置生成、豆子的生成位置等元素,给游戏塑造出了一个整体框架。
图3-2
在触碰Ghost事件中(如图3-4所示),只有当Ghost处于特殊状态时,玩家角色才可以将其吞食消除,否则吃豆人将会失去一条生命并且重置回出生点,并在计分板上使其生命显示减1(同步计数器)。
图3-3
四、
4
在游戏场景中,除了中央的游戏区域外,左右各有三块区域用于显示游戏信息,而其余部分则用Blank类方法填充空白。
if(/*(i == 320 && j == 171) ||*/ (i == 200 && j == 87) || (i == 442 && j == 87) || (i == 420 && j ==341) || (i == 224 && j == 341))
{
addObject(new Power_Pellet(), i, j);
{
min = 200;
max = 442;
for (int x = min; x<= max; x++)
{ pacworld [x][341] = true; }
min = 283;
max = 358;
for (int x = min; x<= max; x++)
{
pacworld [x][221] = true;
Position position = new Position();
Score scorE = new Score();
addObject(position,320,460);
addObject(pacman,320,257);
addObject(scorE,46,75);
addObject(inky,283,210);
②.在路口处放置小豆子
③.放置完豆子使其计数器加一
public void CoinFill()
{
coins = 0;
for(int i = 0; i <pacworld.length; i++){
for(int j = 0; j <pacworld[i].length; j++){
if(pacworld [i][j] == true){
case 'r': x=steps;break;
}
return PacWorld.pacworld[getX()+x][getY()+y];
}
只有当判定可以往目标方向移动时,角色才可以进行移动
protected void move(char direction)
{
int x = 0,y = 0;
if (direction == 'u' && checkD(direction) == true) y=-steps;
游戏中央的场景中绘制出地图(边界线/墙壁),留出通道,在其中的相应位置放入对应的怪物、大小豆子以及游戏的控制主体——吃豆人,左右放置对应的计分板和计数器,构成整个游戏的基本元素框架。
图4-1
先定义各元素信息:
①左右空白填充:
Blank blankR = new Blank();
Blank blankL = new Blank();
所有的类在设计的时候保证了相互之间的联系性,类与类之间存在方法上的调用,对象方法的灵活运用是吃豆人游戏的一大主体。
3
作为一个游戏,事件的设计必不可少。在设计一个游戏时总是会在特定的游戏场景中抛出一个自定义事件,由相关的界面(可能是多个)去订阅这个事件,当接收到这个事件时,这些界面刷新显示数据,从而解除游戏逻辑层和界面显示层的耦合关系。每一个游戏都有其自定义的游戏触发事件,本次设计的吃豆人游戏也有着其独到的自定义事件。
②生命显示:(左下角三个小吃豆人)
Lives life1 = new Lives(1);
Lives life2 = new Lives(2);
Lives life3 = new Lives(3)
③四种颜色的怪物:
Inky inky = new Inky();
Blinky blinky = new Blinky();
Clyde clyde = new Clyde();
Pinky pinky = new Pinky();
Ghost.speed = gSpeed;
④吃豆人:
static PacMan pacman;
pacman = new PacMan(pPoints, pLives);
⑤地图信息:
首先,将整个地图存入到一个二维数组中:
相关主题