// Decompiled by Jad v1.5.8g. Copyright 2001 Pavel Kouznetsov.
// Jad home page: http://www.kpdus.com/jad.html
// Decompiler options: packimports(3)
// Source File Name: Agent.java
package wworld;
import java.awt.Point;
import java.io.PrintStream;
import java.util.*;
// Referenced classes of package wworld:
// CaveNode, PriorityCaveNode, Supmuw, Gold,
// WumplusEnvironment, Wumpus
public class Agent
{
public Agent()
{
score = 0;
hasGold = false;
hasFood = false;
hasArrow = true;
isDead = false;
x = 1;
y = 1;
direction = 'E';
wumpusFound = false;
wumpusKilled = false;
knownWumpusX = -1;
knownWumpusY = -1;
eastmostStench = -1;
westmostStench = 12;
northmostStench = -1;
southmostStench = 12;
supmuwFound = false;
supmuwKilled = false;
knownSupmuwX = -1;
knownSupmuwY = -1;
supmuwFriendlyProbability = 0.5D;
eastmostMoo = -1;
westmostMoo = 12;
northmostMoo = -1;
southmostMoo = 12;
wantsToGoHome = false;
}
public String act(int i, WumplusEnvironment wumplusenvironment)
{
String s = "";
if(i == 2)
{
s = move(wumplusenvironment);
score--;
} else
if(i == 0)
{
turnLeft();
score--;
} else
if(i == 1)
{
turnRight();
score--;
} else
if(i == 3)
{
s = grab(wumplusenvironment);
if(s.equals(""))
s = shoot(wumplusenvironment);
if(s.equals(""))
climb();
score--;
} else
if(i == 5)
s = shoot(wumplusenvironment);
else
if(i == 4)
climb();
return s;
}
private void turnLeft()
{
switch(direction)
{
case 78: // 'N'
direction = 'W';
break;
case 87: // 'W'
direction = 'S';
break;
case 83: // 'S'
direction = 'E';
break;
case 69: // 'E'
direction = 'N';
break;
}
}
private void turnRight()
{
switch(direction)
{
case 78: // 'N'
direction = 'E';
break;
case 87: // 'W'
direction = 'N';
break;
case 83: // 'S'
direction = 'W';
break;
case 69: // 'E'
direction = 'S';
break;
}
}
public String move(WumplusEnvironment wumplusenvironment)
{
CaveNode cavenode = (CaveNode)wumplusenvironment.grid.get(new Point(x, y));
CaveNode cavenode1 = wumplusenvironment.getNextNode(cavenode, direction);
cavenode1.wasVisited = true;
wumplusenvironment.unvisitedNodes.remove(cavenode1);
if(cavenode1.hasObstacle)
{
switch(direction)
{
case 78: // 'N'
cavenode.foundNorthWall = true;
break;
case 83: // 'S'
cavenode.foundSouthWall = true;
break;
case 69: // 'E'
cavenode.foundEastWall = true;
break;
case 87: // 'W'
cavenode.foundWestWall = true;
break;
}
cavenode1.isSafe = false;
return "BUMP";
}
if(cavenode1.hasSupmuw && cavenode1.hasPit)
{
cavenode1.isSafe = false;
return "BUMP";
}
x = cavenode1.x;
y = cavenode1.y;
if(cavenode1.hasWumpus || cavenode1.hasPit)
{
die();
return "DIE";
}
if(cavenode1.hasSupmuw)
{
Supmuw supmuw = wumplusenvironment.supmuw;
pinPointSupmuw(cavenode1, wumplusenvironment);
String s = supmuw.encounter(this);
if(s.equals("FOODGET"))
supmuwFriendlyProbability = 1.0D;
return s;
}
cavenode1.pitProbability = 0.0D;
cavenode1.wumpusProbability = 0.0D;
if(cavenode1.hasStench)
{
if(cavenode1.x < westmostStench)
westmostStench = cavenode1.x;
if(cavenode1.x > eastmostStench)
eastmostStench = cavenode1.x;
if(cavenode1.y < southmostStench)
southmostStench = cavenode1.y;
if(cavenode1.y > northmostStench)
northmostStench = cavenode1.y;
}
if(cavenode1.hasMoo)
{
if(cavenode1.x < westmostMoo)
westmostMoo = cavenode1.x;
if(cavenode1.x > eastmostMoo)
eastmostMoo = cavenode1.x;
if(cavenode1.y < southmostMoo)
southmostMoo = cavenode1.y;
if(cavenode1.y > northmostMoo)
northmostMoo = cavenode1.y;
}
return "MOVED";
}
public String grab(WumplusEnvironment wumplusenvironment)
{
Gold gold = wumplusenvironment.gold;
CaveNode cavenode = (CaveNode)wumplusenvironment.grid.get(new Point(gold.x, gold.y));
if(x == gold.x && y == gold.y && !gold.taken)
{
gold.taken = true;
cavenode.hasGold = false;
hasGold = true;
score += 1000;
return "GOLDGET";
} else
{
return "";
}
}
public void climb()
{
if(x == 1 && y == 1)
isVictorious = true;
}
public String shoot(WumplusEnvironment wumplusenvironment)
{
if(hasArrow)
{
hasArrow = false;
for(CaveNode cavenode = (CaveNode)wumplusenvironment.grid.get(new Point(x, y)); !cavenode.hasObstacle; cavenode = wumplusenvironment.getNextNode(cavenode, direction))
{
if(cavenode.hasWumpus)
{
wumplusenvironment.wumpus.isDead = true;
cavenode.hasWumpus = false;
return "SCREAM";
}
if(cavenode.hasSupmuw)
{
wumplusenvironment.supmuw.isDead = true;
cavenode.hasSupmuw = false;
return "SCREAM";
}
}
return "MISS";
} else
{
return "";
}
}
public void die()
{
score += -1000;
isDead = true;
}
public int getScore()
{
return score;
}
public int getNextAction(WumplusEnvironment wumplusenvironment)
{
CaveNode cavenode = (CaveNode)wumplusenvironment.grid.get(new Point(x, y));
checkAllForPits(wumplusenvironment);
checkAllForWumpus(wumplusenvironment);
checkAllForSupmuw(wumplusenvironment);
if(hasArrow && projectArrowShot(wumplusenvironment))
return 5;
if(hasGold && hasFood)
wantsToGoHome = true;
if(hasGold && supmuwFriendlyProbability == 0.0D)
wantsToGoHome = true;
if(cavenode.hasGold)
return 3;
if(wantsToGoHome && x == 1 && y == 1)
return 4;
char c = 'I';
if(!wantsToGoHome)
if(!hasFood && supmuwFriendlyProbability == 1.0D && supmuwFound)
c = shortestSafePathToPoint(wumplusenvironment, new Point(knownSupmuwX, knownSupmuwY));
else
c = shortestSafePathToUnvisited(wumplusenvironment)
没有合适的资源?快使用搜索试试~ 我知道了~
Java小游戏之Wumplus
共184个文件
png:46个
wav:44个
class:36个
需积分: 0 0 下载量 84 浏览量
2024-03-21
09:46:59
上传
评论 1
收藏 2.25MB RAR 举报
温馨提示
Wumplus是一个基于知识的代理的价值并表示知识表示的一个简单的世界示例,它的灵感来自于1973年格里高里·尤布(Gregory Yob)的电子游戏《狩猎吸血鬼》。这个游戏世界中有一个洞穴,有4/4个房间与通道相连,所以总共有16个房间相互连接。在这个洞穴里住着一只名叫乌姆普斯的野兽,它会吃掉任何进入房间的人。特工可以射杀Wumpus,但是特工只有一枝箭。某些房间是陷阱,任何人漫游到这些房间都会被陷阱吞噬。
资源推荐
资源详情
资源评论
收起资源包目录
Java小游戏之Wumplus (184个子文件)
WumpusSprites.001 393KB
WumpusSprites.001 393KB
Agent.class 15KB
HowToPlayLevel.class 13KB
MainLevel.class 12KB
WumplusEnvironment.class 8KB
WumplusMain.class 5KB
AgentSprite.class 5KB
MenuLevel.class 5KB
Sprite.class 5KB
FXSprite.class 5KB
MidiPlayer.class 4KB
CaveNodeSprite.class 4KB
Sound.class 4KB
MasterPanel.class 4KB
HUDSprite.class 4KB
MenuSprite.class 4KB
WumpusSprite.class 4KB
HowToPlaySprite.class 3KB
ConfigWumpus.class 2KB
MenuBackgroundsSprite.class 2KB
Keyboard.class 2KB
MasterPanel$TimerListener.class 2KB
Fileinput.class 2KB
ColorFilters.class 2KB
ImageBlitter.class 1KB
Supmuw.class 1KB
CaveNode.class 1KB
ImageLoader.class 1KB
WumpusFileOpener.class 1KB
PriorityCaveNode.class 1024B
ColorFilters$1.class 825B
ColorFilters$2.class 683B
Level.class 650B
Action.class 495B
Wumpus.class 403B
Gold.class 396B
MasterPanel$1.class 181B
.classpath 301B
.gitignore 184B
Wumplus.iml 471B
Agent.java 28KB
HowToPlayLevel.java 24KB
MainLevel.java 17KB
WumplusEnvironment.java 11KB
AgentSprite.java 8KB
MenuLevel.java 7KB
Sprite.java 7KB
FXSprite.java 7KB
HUDSprite.java 5KB
MenuSprite.java 5KB
WumplusMain.java 5KB
CaveNodeSprite.java 5KB
MasterPanel.java 4KB
WumpusSprite.java 4KB
MidiPlayer.java 4KB
HowToPlaySprite.java 3KB
Sound.java 3KB
ConfigWumpus.java 2KB
Keyboard.java 2KB
ColorFilters.java 2KB
MenuBackgroundsSprite.java 2KB
CaveNode.java 2KB
Fileinput.java 1KB
Supmuw.java 1KB
ImageBlitter.java 1KB
WumpusFileOpener.java 1KB
ImageLoader.java 940B
PriorityCaveNode.java 933B
Level.java 817B
Action.java 570B
Wumpus.java 413B
Gold.java 405B
map1 135B
map2 135B
map3 135B
map4 135B
map5 135B
map6 136B
map7 135B
map8 135B
map9 135B
WumpusSprites.mfa 426KB
WumpusSprites.mfa 426KB
lazarus.mid 6KB
lazarus.mid 6KB
gameOver.mid 882B
gameOver.mid 882B
MenuBG.png 15KB
MenuBG.png 15KB
finishSprites.png 7KB
finishSprites.png 7KB
hudPanel.png 5KB
hudPanel.png 5KB
HowToPlayBG.png 4KB
HowToPlayBG.png 4KB
MenuTextSprites.png 4KB
MenuTextSprites.png 4KB
AgentSprite.png 4KB
AgentSprite.png 4KB
共 184 条
- 1
- 2
资源评论
清风絮柳
- 粉丝: 1543
- 资源: 25
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功