📄 playcanvas.java
字号:
public void moveActor(int steps)
{
PlayCanvas.steps = steps;
if(thread == null)
{
thread = new Thread(this);
thread.start();
}
}
/**
* 移动角色的线程
*/
public void run()
{
Thread thread = Thread.currentThread();
int stepCount = 0;
while(thread == this.thread)
try
{
Thread.sleep((long)(gameSpeed*100)); //移动一步休息的时间
if(stepCount == steps)
{
this.thread = null;
stepOver(); //如果移动完毕
} else
{
stepCount++;
moveSteps(stepCount); //移动
repaint();
serviceRepaints();
}
}
catch(Exception exception) { }
}
/**
* 移动角色
* @param stepCount 移动步数
*/
private void moveSteps(int stepCount)
{
//System.out.println("Location:" + playerLocation[nowPlayerID]);
player_location[nowPlayerID]++;
specialLocationPlusSteps();
if(player_location[nowPlayerID] == 50)
{ //如果到第50号地皮,就是一圈完毕
if(stepCount != 1)
{
status_Park10_Prinson20_Sleep30 = 1;
player_money[nowPlayerID] += 200; //加200的钱
}
player_location[nowPlayerID] = 0;
}
}
/**
* 到了特别的地方要加走的步数(因为?或飞机场占了几步的位置,但也只能算一步)
*/
private void specialLocationPlusSteps()
{
switch(player_location[nowPlayerID])
{
case 5: // '\005'
case 10: // '\n'
case 14: // '\016'
case 15: // '\017'
case 27: // '\033'
case 36: // '$'
case 41: // ')'
case 48: // '0'
steps++;
break;
}
}
/**
* 移动完毕要处理的事情
*/
private void stepOver()
{
//System.out.println("StepOverLocation:" + player_location[nowPlayerID]);
//playerLocation[nowPlayerID] = 49 ;
switch(player_location[nowPlayerID])
{
case 2: //
case 20: //
case 42: // 随机事件
randomEvent();
return;
case 6: //
case 37: // 飞机场
showFlyToNextStation();
return;
case 11: //
case 25: //
case 32: // 卡片
addCard(10);
return;
case 16: // 监狱
prise();
return;
case 28: //
case 45: // 公园
status_Park10_Prinson20_Sleep30 = 10;
repaint();
serviceRepaints();
nextPlay(1000);
return;
case 49: // '1'
nextPlay(1000);
return;
case 0:
case 1:
case 3: // '\003'
case 4: // '\004'
case 5: // '\005'
case 7: // '\007'
case 8: // '\b'
case 9: // '\t'
case 10: // '\n'
case 12: // '\f'
case 13: // '\r'
case 14: // '\016'
case 15: // '\017'
case 17: // '\021'
case 18: // '\022'
case 19: // '\023'
case 21: // '\025'
case 22: // '\026'
case 23: // '\027'
case 24: // '\030'
case 26: // '\032'
case 27: // '\033'
case 29: // '\035'
case 30: // '\036'
case 31: // '\037'
case 33: // '!'
case 34: // '"'
case 35: // '#'
case 36: // '$'
case 38: // '&'
case 39: // '\''
case 40: // '('
case 41: // ')'
case 43: // '+'
case 44: // ','
case 46: // '.'
case 47: // '/'
case 48: // '0'
default:
onCommonGround();
return;
}
}
/**
* 移动完毕到了一般的地皮上要处理的事情
*/
private void onCommonGround()
{
// 如果是0-空地,-1 -- 财神作用过的土地,-2 --衰神作用过的土地
if(groundForBuilding[player_location[nowPlayerID]] <= 0)
{
if(player_money[nowPlayerID] >= fetchGroundPrice(player_location[nowPlayerID]) && player_money[nowPlayerID] != 0)
buildorBuyGround();
else
nextPlay(1000);
} else
if(isNowPlayerIDGround()) //如果是自己的地皮
{ //如果有足够的钱修建
if(player_money[nowPlayerID] >= fetchGroundPrice(player_location[nowPlayerID]))
{
int actorLevel = 1;
for(int i = 0; i < nowPlayerID; i++)
actorLevel *= 10;
//如果不是最高级建筑就可以修建
if(groundForBuilding[player_location[nowPlayerID]] == 4 * actorLevel)
nextPlay(1000);
else
buildorBuyGround();
} else
{
nextPlay(1000);
}
} else //如果土地的所有者处于不能移动状态
if(player_prinson_canNotMoveNum[fetchNowPlayerLocationGroundBelongtoWho()] > 0 || player_sleep_canNotMoveNum[fetchNowPlayerLocationGroundBelongtoWho()] > 0)
nextPlay(1000);
else //减钱,过路费啦:)
decreaseMoney(fetchNowPlayerLocationGroundBelongtoWho(), fetchConnectedLocationPrice(player_location[nowPlayerID]));
}
/**
* 绘制画板
*/
protected void paint(Graphics graphics)
{
// 如果游戏仍在进行
if(gameStatusGoOrWinOrFail == 0)
{
//清屏
bufferImageG.setColor(255,255,255);
bufferImageG.fillRect(0, 0, canvasWidth, canvasHeight);
int mapX = (40 - computePlayerX(player_location[nowPlayerID])) + -6;
int mapY = (56 - computePlayerY(player_location[nowPlayerID])) + -16;
// 画出地皮
for(int i = 0; i < 50; i++) {
//如果地皮有所变化
if (this.groundForBuilding[i] != this.bufferGroundForBuilding[i]) {
this.bufferGroundForBuilding[i] = this.groundForBuilding[i];
Graphics g1 = mapImage1.getGraphics();
Graphics g2 = mapImage2.getGraphics();
if (groundForBuilding[i] == 0) {
g1.drawImage(this.emptyGround, computeGroundX(i),
computeGroundY(i), 20);
g2.drawImage(this.emptyGround, -128 + computeGroundX(i),
computeGroundY(i), 20);
continue;
}
//财神使用过的土地
if (groundForBuilding[i] == -1)
try {
g1.drawImage(Image.createImage("/res/image/h3.png"),
computeGroundX(i), computeGroundY(i),
20);
g2.drawImage(Image.createImage("/res/image/h3.png"),
-128 + computeGroundX(i), computeGroundY(i),
20);
continue;
}
catch (Exception exception3) {}
// 衰神卡使用过的土地
if (groundForBuilding[i] == -2)
try {
g1.drawImage(Image.createImage("/res/image/h4.png"),
computeGroundX(i), computeGroundY(i),
20);
g2.drawImage(Image.createImage("/res/image/h4.png"),
-128 + computeGroundX(i), computeGroundY(i),
20);
continue;
}
catch (Exception exception4) {}
// 玩家1
if (groundForBuilding[i] < 10) {
g1.drawImage(player_houseImage[player_sequence[0]][groundForBuilding[
i] - 1], computeGroundX(i),
computeGroundY(i), 20);
g2.drawImage(player_houseImage[player_sequence[0]][groundForBuilding[
i] - 1], -128 + computeGroundX(i),
computeGroundY(i), 20);
continue;
}
//玩家2
if (groundForBuilding[i] < 100) {
g1.drawImage(player_houseImage[player_sequence[1]][groundForBuilding[
i] / 10 - 1], computeGroundX(i),
computeGroundY(i), 20);
g2.drawImage(player_houseImage[player_sequence[1]][groundForBuilding[
i] / 10 - 1], -128 + computeGroundX(i),
computeGroundY(i), 20);
continue;
}
//玩家3
g1.drawImage(player_houseImage[player_sequence[2]][groundForBuilding[
i] / 100 - 1], computeGroundX(i), computeGroundY(i), 20);
g2.drawImage(player_houseImage[player_sequence[2]][groundForBuilding[
i] / 100 - 1], -128 + computeGroundX(i),computeGroundY(i), 20);
}
}
//绘制地图
try
{
bufferImageG.drawImage(mapImage1, (34 - computePlayerX(player_location[nowPlayerID])), (40 - computePlayerY(player_location[nowPlayerID])), 20);
bufferImageG.drawImage(mapImage2, (162 - computePlayerX(player_location[nowPlayerID])), (40 - computePlayerY(player_location[nowPlayerID])), 20);
}
catch(Exception exception) { }
// 画出非当前游戏者的头像
try
{
for(int i = 2; i >= 0; i--)
if(i != nowPlayerID && player_money[i] >= 0)
bufferImageG.drawImage(player_faceImage[player_sequence[i]], mapX + computePlayerX(player_location[i]), mapY + computePlayerY(player_location[i]), 20);
}
catch(Exception exception5) { }
// 画出控制条
try
{
Image image = Image.createImage(28,80);
Graphics g = image.getGraphics();
g.drawImage(gamePanelImage, 0, -16, 20);
bufferImageG.drawImage(image, 73, 0, 20);
g = null;
image = null;
}
catch(Exception exception6) { }
try
{
// 画出控制条上的头像
bufferImageG.drawImage(player_faceImage[player_sequence[nowPlayerID]], 79, 4, 20);
// 画出游戏者头像
if(player_money[nowPlayerID] >= 0)
bufferImageG.drawImage(player_faceImage[player_sequence[nowPlayerID]], 34, 40, 20);
}
catch(Exception exception8) { }
//画出选择框
bufferImageG.setColor(255,255,255);
bufferImageG.drawRect(78, 23 + choiceIndex * 14, 17, 13);
}
//如果玩家获胜
if(gameStatusGoOrWinOrFail == 2)
{
try
{
bufferImageG.drawImage(Image.createImage("/res/image/start00bw.png"), 0, 0, 20);
bufferImageG.drawImage(Image.createImage("/res/image/win.png"), 20, 22, 20);
}
catch(Exception exception1) { }
}
//如果玩家失败
if(gameStatusGoOrWinOrFail == 3)
{
try
{
bufferImageG.drawImage(Image.createImage("/res/image/start00bw.png"), 0, 0, 20);
bufferImageG.drawImage(Image.createImage("/res/image/lost.png"), 17, 22, 20);
}
catch(Exception exception2) { }
}
//绘制特殊角色状态
if(status_Park10_Prinson20_Sleep30 == 30)
drawMessage(bufferImageG, "睡眠");
else
if(status_Park10_Prinson20_Sleep30 == 20)
drawMessage(bufferImageG, "监狱");
else
if(status_Park10_Prinson20_Sleep30 == 10)
drawMessage(bufferImageG, "公园");
else
if(status_Park10_Prinson20_Sleep30 > 0)
{
drawMessage(bufferImageG, "+ $200");
status_Park10_Prinson20_Sleep30 = status_Park10_Prinson20_Sleep30 != 4 ? ++status_Park10_Prinson20_Sleep30 : 0;
}
//画出缓冲的图
graphics.drawImage(bufferImage,0,0,20);
}
/**
* 绘制出特殊角色状态
* @param g 句柄
* @param s 状态信息
*/
private void drawMessage(Graphics g, String s)
{
g.setColor(0, 0, 0);
g.fillRect(8, 29, 80, 30);
g.setColor(255, 255, 255);
g.fillRect(10, 31, 76, 26);
g.setColor(255, 0, 0);
g.setFont(Font.getFont(0, 1, 0));
g.drawString(s, 48, 48, 65);
}
/**
* 按键处理
* @param keyInt 键值
*/
public void keyPressed(int keyInt)
{
// 如果玩家失败或是成功
if (gameStatusGoOrWinOrFail > 1)
KMRichMan.exitGame();
// 如果不是玩家进行游戏
if (nowPlayerID != 0 || ManControlStatus_CanNotPlay)
return;
int pressKey = getGameAction(keyInt);
switch (pressKey) {
default:
break;
case 1: // 上
case 2:
choiceIndex--;
if (choiceIndex == -1)
choiceIndex = 3;
repaint();
serviceRepaints();
break;
case 5: // 下
case 6:
choiceIndex++;
if (choiceIndex == 4)
choiceIndex = 0;
repaint();
serviceRepaints();
break;
case 8: // 确定
switch (choiceIndex) {
default:
break;
case 0: // 投色子
richMan.setDisplayToDiceCanvas();
ManControlStatus_CanNotPlay = true;
break;
case 1: // 卡片
if (player_cards[nowPlayerID][0] == 16)
richMan.showNoCard();
else
richMan.showCards(player_cards[nowPlayerID]);
break;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -