📄 gamescreen.java
字号:
//Decompiled by DJ v3.9.9.91 Copyright 2005 Atanas Neshkov Date: 2006-3-25 下午 09:39:13
//Home Page : http://members.fortunecity.com/neshkov/dj.html - Check often for new version!
//Decompiler options: packimports(3)
import java.io.DataInputStream;
import java.util.Random;
import javax.microedition.io.Connector;
import javax.microedition.io.HttpConnection;
import javax.microedition.lcdui.*;
import javax.microedition.media.Manager;
import javax.microedition.media.Player;
public class GameScreen extends Canvas
{
public GameScreen(Global global)
{
xbuttons = 11;
castlei = 32;
castlej = 32;
winners = new String[10];
winscores = new String[10];
winnumbers = new String[10];
anisplash = new Image[4];
deltaScr = 8;
deltaOff = 4;
dticker = 3;
gw = global;
setFullScreenMode(true);
scrW = getWidth();
scrH = getHeight();
if(scrH < 200)
scrH = 208;
ybuttons = 196;
centerx = scrW >> 1;
centery = scrH >> 1;
scr = Image.createImage(scrW + deltaScr, scrH + deltaScr);
scrGr = scr.getGraphics();
fns = Font.getFont(64, 0, 8);
fnsh = fns.getHeight();
fnsb = Font.getFont(64, 1, 8);
scrGr.setFont(fns);
helpDY = fnsh;
deltaScrX = 4;
deltaScrY = 4;
try
{
menubar = Image.createImage("/images/menubar.png");
check = Image.createImage("/images/check.png");
java.io.InputStream inputstream = getClass().getResourceAsStream("/theme.mid");
themeSnd = Manager.createPlayer(inputstream, "audio/midi");
themeSnd.prefetch();
themeSnd.setLoopCount(-1);
}
catch(Exception exception) { }
allocate();
}
public GameScreen()
{
xbuttons = 11;
castlei = 32;
castlej = 32;
winners = new String[10];
winscores = new String[10];
winnumbers = new String[10];
anisplash = new Image[4];
deltaScr = 8;
deltaOff = 4;
dticker = 3;
}
public void allocate()
{
try
{
rnd = new Random(System.currentTimeMillis());
land = Image.createImage("/images/land.png");
canvatop = Image.createImage("/images/canvatop.png");
canvaleft = Image.createImage("/images/canvaleft.png");
canvaright = Image.createImage("/images/canvaright.png");
canvabottom = Image.createImage("/images/canvabottom.png");
objects = Image.createImage("/images/objects.png");
resources = Image.createImage("/images/resources.png");
anim = Image.createImage("/images/anim.png");
uraganImg = Image.createImage("/images/uragan.png");
buttons = Image.createImage("/images/buttons.png");
resourcesbig = Image.createImage("/images/resourcesbig.png");
people = Image.createImage("/images/people.png");
ysticker = scrH - fnsh;
}
catch(Exception exception) { }
}
public void beginEarthQuake()
{
int i = (rnd.nextInt() & 0xff) * 50 >> 8;
earthQuakeRifter = i / 10;
earthQuakePeriod = 30 + i;
earthQuake = true;
}
public void beginPlayerName()
{
playerName = "";
cursorpos = 0;
keywaitcnt = -1;
keyi = 0;
lastkey = -1;
scrGr.setFont(fns);
mode = 9;
}
public void beginSplash(String s, String s1)
{
splashPhase = 0;
spTitle = s;
spText = s1;
xTicker = 162;
endTicker = 24 - fns.stringWidth(s1) - 10;
loadSplash();
mode = 3;
}
public void beginTicker(String s)
{
stText = s;
xsTicker = 182;
endsTicker = lsticker - fns.stringWidth(s) - 10;
sticker = true;
}
public void continueGame()
{
if(hassave)
{
gw.gm.restore();
mode = 1;
gamemode = 1;
needmap = true;
gw.gm.gameover = false;
switchCountry(country);
newGame = false;
switch(gw.gm.chapter)
{
case 1: // '\001'
Strings _tmp = gw.st;
Strings _tmp1 = gw.st;
beginSplash(countryName, Strings.intro[gw.st.locint] + " " + Strings.introloc[gw.st.locint][country]);
break;
case 2: // '\002'
Strings _tmp2 = gw.st;
gw.gs.beginSplash(gw.gs.countryName, Strings.chapter2[gw.st.locint]);
break;
case 3: // '\003'
Strings _tmp3 = gw.st;
gw.gs.beginSplash(gw.gs.countryName, Strings.chapter3[gw.st.locint]);
break;
case 4: // '\004'
Strings _tmp4 = gw.st;
Strings _tmp5 = gw.st;
gw.gs.beginSplash(gw.gs.countryName, Strings.chapter4[gw.st.locint] + " " + Strings.chapter4loc[gw.st.locint][gw.gs.country]);
break;
}
gw.gm.calculateBuilds();
}
}
public void createUragan()
{
if(!uragan)
{
if((rnd.nextInt() & 1) != 0)
{
uraganx = 1386;
uragany = 704 * (rnd.nextInt() & 0xffff) >> 16;
} else
{
uraganx = 682 + (704 * (rnd.nextInt() & 0xffff) >> 16);
uragany = 0;
}
uraganvx = 0;
uraganvy = 0;
uragan = true;
uraganvisible = false;
}
}
public void draw()
{
if(!uraganvisible)
{
cursorx = cursori * 22;
cursory = cursorj * 22;
} else
{
cursorx = uraganx;
cursory = uragany;
}
scrGr.setColor(0);
scrGr.setClip(0, 0, scrW + deltaScr, scrH + deltaScr);
scrGr.fillRect(0, 0, scrW + deltaScr, scrH + deltaScr);
boolean flag = false;
int j1 = cursorj - 12;
int k1 = cursorj + 12;
int l1 = cursori - 12;
int i2 = cursori + 12;
if(j1 < 0)
j1 = 0;
if(k1 >= 64)
k1 = 63;
if(l1 < 0)
l1 = 0;
if(i2 >= 64)
i2 = 63;
for(int j2 = k1; j2 >= j1; j2--)
{
for(int k2 = i2; k2 >= l1; k2--)
if((gw.lv.flags[j2][k2] & 1) == 0)
{
int j = getVX(k2 * 22, j2 * 22);
int l = getVY(k2 * 22, j2 * 22);
if(l >= -44 && l < scrH + 44 && j >= -44 && j < scrW + 44)
{
int i = gw.lv.map[j2][k2];
byte byte1 = gw.lv.flags[j2][k2];
if(i > 0 && i <= 64)
{
if(i == 3 && (rnd.nextInt() & 0xff) < 32)
{
i = 4;
gw.lv.map[j2][k2] = (byte)i;
}
if(i == 4 && (rnd.nextInt() & 0xff) < 32)
{
i = 3;
gw.lv.map[j2][k2] = (byte)i;
}
drawSymbol(i, j, l, (byte1 & 4) != 0);
}
if((byte1 & 2) != 0)
{
for(int l2 = 0; l2 < gw.gm.peopleNum; l2++)
if(gw.gm.people[l2][0] / 22 == k2 && gw.gm.people[l2][1] / 22 == j2 && gw.gm.people[l2][9] != 0)
{
int k = getVX(gw.gm.people[l2][0], gw.gm.people[l2][1]);
int i1 = getVY(gw.gm.people[l2][0], gw.gm.people[l2][1]);
drawPeople(l2, k, i1);
}
}
}
}
}
if(!uraganvisible)
{
drawSymbol(18, centerx, centery, false);
byte byte0 = gw.lv.map[cursorj][cursori];
byte byte2 = gw.lv.resources[cursorj][cursori];
if(byte0 == 5 && byte2 != 0 || byte0 == 42 && (byte2 & 0xc0) != 0)
drawResource(byte2 >> 6 & 3, byte2 & 0x3f, centerx, centery);
} else
{
drawUragan();
}
scrGr.setClip(deltaOff, (scrH - 16) + deltaOff, scrW, 16);
scrGr.setColor(0x2d0c01);
scrGr.setFont(fns);
if(earthQuake)
{
String s;
if(gw.st.locint == 0)
{
Strings _tmp = gw.st;
s = Strings.earthQuake[gw.st.locint][earthQuakeRifter];
} else
{
Strings _tmp1 = gw.st;
s = gw.st.get("Earhtquake by power ") + Strings.earthQuake[gw.st.locint][earthQuakeRifter];
}
scrGr.setColor(0);
scrGr.drawString(s, (scrW >> 1) + deltaOff, scrH + deltaOff, 33);
scrGr.setColor(0xffffff);
scrGr.drawString(s, ((scrW >> 1) - 1) + deltaOff, (scrH - 1) + deltaOff, 33);
} else
{
String s1 = gw.st.get("Day") + " " + days;
lsticker = 4 + fns.stringWidth(s1);
scrGr.setColor(0);
scrGr.drawString(s1, 1 + deltaOff, scrH + deltaOff, 36);
scrGr.setColor(0xffffff);
scrGr.drawString(s1, deltaOff, (scrH - 1) + deltaOff, 36);
if(sticker)
drawTicker();
}
}
public void drawBuild()
{
int i = 0;
boolean flag = false;
scrGr.setClip(0, 0, scrW, scrH);
drawCanva();
drawSymbol(builds[buildNum], 32, 70, true);
if(gw.st.locale.compareTo("ru") == 0)
i = 1;
Strings _tmp = gw.st;
int k = Strings.builddescr[i][buildNum].length;
scrGr.setColor(0x2d0c01);
scrGr.setFont(fns);
scrGr.setClip(0, 0, scrW, scrH);
byte byte1 = 68;
int l = 6;
int i1 = fnsh + 2;
Strings _tmp1 = gw.st;
drawString(Strings.builddescr[i][buildNum][0], scrW >> 1, l, 17, 0x2d0c01);
l = 40;
for(int j1 = 1; j1 < k; j1++)
{
Strings _tmp2 = gw.st;
drawString(Strings.builddescr[i][buildNum][j1], byte1, l, 20, 0x2d0c01);
l += i1;
}
byte1 = 10;
l = 92;
canbuild = true;
for(int k1 = 0; k1 < 3; k1++)
{
Game _tmp3 = gw.gm;
byte byte0 = Game.forbuild[buildNum][k1][0];
if(byte0 > 0)
{
drawResIcon(byte0, byte1, l);
Game _tmp4 = gw.gm;
int j;
if(gw.gm.stock[byte0] >= Game.forbuild[buildNum][k1][1])
{
j = 0x2d0c01;
} else
{
j = 0xcd3705;
canbuild = false;
}
scrGr.setClip(byte1 + 8 + 32, l + 8, 32, 14);
drawString(String.valueOf(Game.forbuild[buildNum][k1][1]), byte1 + 8 + 32, l + 10, 20, j);
l += 40;
}
}
if(canbuild)
drawButton(1, xbuttons, ybuttons);
else
drawButton(0, xbuttons, ybuttons);
if(buildNum > 0)
drawButton(2, xbuttons + 18, ybuttons);
else
drawButton(0, xbuttons + 18, ybuttons);
if(buildNum < 16)
drawButton(3, scrW - xbuttons - 36, ybuttons);
else
drawButton(0, scrW - xbuttons - 36, ybuttons);
drawButton(4, scrW - xbuttons - 16, ybuttons);
}
public void drawBuilds()
{
drawCanva();
scrGr.setColor(0x2d0c01);
scrGr.setFont(fns);
drawString(gw.st.get("Buildings"), scrW >> 1, 6, 17, 0x2d0c01);
int i = ((scrW >> 1) - 32 - 32) + 8 + 4;
int k = 4 + buildsscreeny + 32 + 8;
int j = k;
int l = 0;
do
{
GameScreen _tmp = gw.gs;
if(l < 17)
{
if(l == 9)
{
i += 64;
j = k;
}
if(j > 42 && j < 136)
{
drawSymbol(builds[l], i + 8, j + 16 + 6, true);
scrGr.setClip(0, 0, scrW, scrH);
drawString(String.valueOf(gw.gm.buildsQuantity[l]), i + 40, j + 14 + 6, 20, 0x2d0c01);
}
j += 40;
l++;
} else
{
break;
}
} while(true);
if(buildsscreeny < 0)
drawButton(5, (scrW >> 1) - 18, ybuttons);
else
drawButton(0, (scrW >> 1) - 18, ybuttons);
if(buildsscreeny > -(440 - scrH))
drawButton(6, scrW >> 1, ybuttons);
else
drawButton(0, scrW >> 1, ybuttons);
drawButton(1, xbuttons, ybuttons);
}
public void drawButton(int i, int j, int k)
{
scrGr.setClip(j, k, 16, 16);
scrGr.drawImage(buttons, j - 16 * i, k, 20);
}
public void drawCanva()
{
scrGr.setClip(0, 0, scrW + deltaScr, scrH + deltaScr);
scrGr.setColor(0);
scrGr.fillRect(0, 0, scrW + deltaScr, scrH + deltaScr);
scrGr.setColor(0xf5ebc9);
scrGr.fillRect(5, 52, 166, 121);
scrGr.drawImage(canvatop, 0, 0, 20);
scrGr.drawImage(canvabottom, 0, 173, 20);
scrGr.drawImage(canvaleft, 0, 52, 20);
scrGr.drawImage(canvaright, 171, 52, 20);
}
public void drawCover()
{
try
{
cover = Image.createImage("/images/cover.png");
scrGr.drawImage(cover, 0, 0, 20);
cover = null;
}
catch(Exception exception) { }
if(sound)
try
{
themeSnd.start();
}
catch(Exception exception1) { }
mode = 2;
repaint();
serviceRepaints();
}
public void drawEarthQuake()
{
deltaScrX = rnd.nextInt() & 7;
deltaScrY = rnd.nextInt() & 7;
if(vibration)
try
{
Display.getDisplay(gw).vibrate(100);
}
catch(Exception exception) { }
int i = 0;
if(i > 60)
i = 60;
if((rnd.nextInt() & 0xff) < i && gw.gm.buildsNum > 0)
{
int j = (rnd.nextInt() & 0xff) * gw.gm.buildsNum >> 8;
byte byte0 = gw.gm.objects[j][0];
byte byte1 = gw.gm.objects[j][1];
gw.gm.byUragan = false;
gw.gm.destroyBuild(byte0, byte1);
}
}
public void drawHelp()
{
drawCanva();
scrGr.setFont(fns);
drawString(gw.st.get("Help"), scrW >> 1, 6, 17, 0x2d0c01);
scrGr.setClip(0, 39, scrW, 136);
int i = (helpy + 39) - fnsh;
Strings _tmp = gw.st;
helplen = Strings.help[gw.st.locint].length;
for(int j = 0; j < helplen; j++)
{
i += fnsh;
if(i < 39 - fnsh)
continue;
if(i > 175)
break;
Strings _tmp1 = gw.st;
drawString(Strings.help[gw.st.locint][j], 18, i, 20, 0x2d0c01);
}
if(helpy < 0)
drawButton(5, (scrW >> 1) - 18, ybuttons);
else
drawButton(0, (scrW >> 1) - 18, ybuttons);
if(helpy > -(helplen * fnsh - 136))
drawButton(6, scrW >> 1, ybuttons);
else
drawButton(0, scrW >> 1, ybuttons);
drawButton(1, xbuttons, ybuttons);
repaint();
serviceRepaints();
}
public void drawHiScores()
{
drawCanva();
if(localhiscores)
{
gw.hiScores.printScores(winners, winscores);
} else
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -