📄 game.java.bak
字号:
//Decompiled by DJ v3.9.9.91 Copyright 2005 Atanas Neshkov Date: 2006-3-25 下午 09:40:59
//Home Page : http://members.fortunecity.com/neshkov/dj.html - Check often for new version!
//Decompiler options: packimports(3)
import java.io.*;
import java.util.Random;
import javax.microedition.lcdui.Display;
import javax.microedition.rms.RecordEnumeration;
import javax.microedition.rms.RecordStore;
public class Game
{
public Game(Global global)
{
resNum = 15;
stock = new short[resNum + 2];
objects = new byte[120][8];
buildsQuantity = new int[17];
people = new short[240][12];
gw = global;
}
public Game()
{
resNum = 15;
stock = new short[resNum + 2];
objects = new byte[120][8];
buildsQuantity = new int[17];
people = new short[240][12];
}
public void build(int i, int j)
{
for(int k = 0; k < 3; k++)
{
byte byte0 = forbuild[gw.gs.buildNum][k][0];
if(byte0 > 0)
stock[byte0] -= forbuild[gw.gs.buildNum][k][1];
}
gw.lv.map[j][i] = 45;
for(int i1 = -3; i1 <= 3; i1++)
{
byte byte1 = -3;
byte byte2 = 3;
if(i1 == -3 || i1 == 3)
{
byte1 = -2;
byte2 = 2;
}
for(int l = byte1; l <= byte2; l++)
try
{
gw.lv.flags[j + i1][i + l] &= 0xfe;
}
catch(Exception exception) { }
}
newBuild();
}
public void calculateBuilds()
{
int i = 0;
do
{
GameScreen _tmp = gw.gs;
if(i < 17)
{
buildsQuantity[i] = 0;
i++;
} else
{
break;
}
} while(true);
for(int j = 0; j < buildsNum; j++)
buildsQuantity[objects[j][2]]++;
}
public void dayFinished()
{
for(int i1 = buildsNum - 1; i1 >= 0; i1--)
{
int i = objects[i1][3];
if(i < 1)
{
i++;
objects[i1][3] = (byte)i;
if(i == 1)
{
GameScreen _tmp = gw.gs;
gw.lv.map[objects[i1][1]][objects[i1][0]] = GameScreen.builds[objects[i1][2]];
gw.lv.flags[objects[i1][1]][objects[i1][0]] &= 0xfb;
newPeople(objects[i1][2], objects[i1][0] * 22, objects[i1][1] * 22, i1);
newPeople(80, objects[i1][0] * 22, objects[i1][1] * 22, i1);
}
} else
{
byte byte13 = objects[i1][2];
if((byte13 < 7 || byte13 > 9) && byte13 != 16)
{
byte byte8 = production[objects[i1][2]][0][0];
byte byte9 = production[objects[i1][2]][0][1];
byte byte0 = production[objects[i1][2]][1][0];
byte byte4 = production[objects[i1][2]][1][1];
byte byte2 = production[objects[i1][2]][2][0];
byte byte6 = production[objects[i1][2]][2][1];
if(byte8 > 0 && objects[i1][6] >= byte4 && objects[i1][7] >= byte6)
{
objects[i1][6] -= byte4;
objects[i1][7] -= byte6;
objects[i1][5] += byte9;
}
} else
if(byte13 == 16 && objects[i1][6] >= 5)
{
objects[i1][6] -= 5;
gw.gm.scores += 50;
}
}
}
calculateBuilds();
switch(mission)
{
case 0: // '\0'
if(buildsQuantity[1] >= 1 && buildsQuantity[2] >= 1 && buildsQuantity[0] >= 1)
{
mission = 1;
Strings _tmp1 = gw.st;
gw.gs.beginTicker(Strings.mission[gw.st.locint][gw.gm.mission]);
}
break;
case 1: // '\001'
if(buildsQuantity[3] >= 1)
{
mission = 2;
Strings _tmp2 = gw.st;
gw.gs.beginTicker(Strings.mission[gw.st.locint][gw.gm.mission]);
}
break;
case 2: // '\002'
if(stock[2] >= 10)
{
mission = 3;
Strings _tmp3 = gw.st;
gw.gs.beginTicker(Strings.mission[gw.st.locint][gw.gm.mission]);
}
break;
case 3: // '\003'
if(stock[7] >= 20)
{
chapter = 2;
mission = 4;
Strings _tmp4 = gw.st;
gw.gs.beginSplash(gw.gs.countryName, Strings.chapter2[gw.st.locint]);
}
break;
case 4: // '\004'
if(buildsQuantity[7] >= 1 && buildsQuantity[8] >= 1)
{
mission = 5;
Strings _tmp5 = gw.st;
gw.gs.beginTicker(Strings.mission[gw.st.locint][gw.gm.mission]);
}
break;
case 5: // '\005'
if(stock[9] >= 5 && stock[10] >= 5)
{
mission = 6;
Strings _tmp6 = gw.st;
gw.gs.beginTicker(Strings.mission[gw.st.locint][gw.gm.mission]);
}
break;
case 6: // '\006'
if(stock[5] >= 5)
{
chapter = 3;
mission = 7;
Strings _tmp7 = gw.st;
gw.gs.beginSplash(gw.gs.countryName, Strings.chapter3[gw.st.locint]);
}
break;
case 7: // '\007'
if(buildsQuantity[12] >= 1 && buildsQuantity[4] >= 1)
{
mission = 8;
Strings _tmp8 = gw.st;
gw.gs.beginTicker(Strings.mission[gw.st.locint][gw.gm.mission]);
}
break;
case 8: // '\b'
if(buildsQuantity[13] >= 1 && buildsQuantity[14] >= 1)
{
mission = 9;
Strings _tmp9 = gw.st;
gw.gs.beginTicker(Strings.mission[gw.st.locint][gw.gm.mission]);
}
break;
case 9: // '\t'
if(buildsQuantity[15] >= 1)
{
mission = 10;
Strings _tmp10 = gw.st;
gw.gs.beginTicker(Strings.mission[gw.st.locint][gw.gm.mission]);
}
break;
case 10: // '\n'
if(stock[16] > 20)
{
chapter = 4;
mission = 11;
Strings _tmp11 = gw.st;
Strings _tmp12 = gw.st;
gw.gs.beginSplash(gw.gs.countryName, Strings.chapter4[gw.st.locint] + " " + Strings.chapter4loc[gw.st.locint][gw.gs.country]);
}
break;
}
if(buildsNum >= 100)
gameWin();
for(int j1 = peopleNum - 1; j1 >= 0; j1--)
if(people[j1][9] == 5)
{
people[j1][4]++;
if(people[j1][4] == 3)
{
int j = people[j1][8];
if(j == 1 || j == 3 || j >= 7 && j <= 9)
{
int k = gw.lv.resources[people[j1][11]][people[j1][10]];
int l = k >> 6 & 3;
k &= 0x3f;
if(--k <= 0)
{
gw.lv.map[people[j1][11]][people[j1][10]] = 1;
l = 0;
k = 0;
}
gw.lv.resources[people[j1][11]][people[j1][10]] = (byte)(l << 6 | k);
} else
if(j == 0 && gw.lv.map[people[j1][11]][people[j1][10]] == 5 && gw.lv.resources[people[j1][11]][people[j1][10]] > 0)
gw.lv.resources[people[j1][11]][people[j1][10]]--;
if(j == 1 || j == 0 || j == 3 || j >= 7 && j <= 9)
{
short word0 = people[j1][3];
people[j1][5] = (short)(objects[word0][0] * 22);
people[j1][6] = (short)(objects[word0][1] * 22);
people[j1][9] = 6;
people[j1][7] = 0;
people[j1][2] = (short)j;
}
}
} else
if(people[j1][8] == 80 && people[j1][9] == 0)
{
short word1 = people[j1][3];
byte byte1 = production[objects[word1][2]][1][0];
byte byte5 = production[objects[word1][2]][1][1];
byte byte3 = production[objects[word1][2]][2][0];
byte byte7 = production[objects[word1][2]][2][1];
byte byte10 = objects[word1][6];
byte byte11 = objects[word1][7];
byte byte12 = 0;
if(byte1 > 0)
if(byte10 < byte5 && stock[byte1] >= byte5)
byte12 = byte1;
else
if(byte3 > 0 && byte11 < byte7 && stock[byte3] >= byte7)
byte12 = byte3;
if(byte12 > 0)
{
people[j1][9] = 2;
people[j1][5] = (short)(objects[word1][0] * 22);
people[j1][6] = (short)(objects[word1][1] * 22);
people[j1][7] = 0;
people[j1][2] = byte12;
if(byte12 == 16)
if(stock[7] > 0)
stock[7]--;
else
if(stock[8] > 0)
stock[8]--;
else
if(stock[14] > 0)
stock[14]--;
stock[byte12]--;
} else
if(objects[people[j1][3]][5] > 0)
{
people[j1][9] = 2;
people[j1][5] = (short)(objects[word1][0] * 22);
people[j1][6] = (short)(objects[word1][1] * 22);
people[j1][7] = 0;
people[j1][2] = 0;
}
}
if((gw.gs.rnd.nextInt() & 0xff) < Ppesok)
gw.lv.pesok();
if((gw.gs.rnd.nextInt() & 0xff) < Plednik)
gw.lv.moroz();
if((gw.gs.rnd.nextInt() & 0xff) < Pvoda)
gw.lv.navodnenie();
int k1 = (gw.gs.days * 26) / 500;
if(k1 > 16)
k1 = 16;
Puragan = 16 + k1;
if(!gw.gs.uragan && (gw.gs.rnd.nextInt() & 0xff) < Puragan)
gw.gs.createUragan();
if(!gw.gs.earthQuake && (gw.gs.rnd.nextInt() & 0xff) < 3 * Puragan >> 2)
gw.gs.beginEarthQuake();
calculateBuilds();
}
public void delete()
{
try
{
RecordStore.deleteRecordStore("globalw");
}
catch(Exception exception) { }
}
public void destroyBuild(int i, int j)
{
int k = -1;
if(gw.lv.map[j][i] == 60)
{
if(gw.gs.vibration)
try
{
Display.getDisplay(gw).vibrate(1000);
}
catch(Exception exception) { }
gw.lv.map[j][i] = 1;
gameOver();
} else
{
for(int i1 = 0; i1 < buildsNum; i1++)
{
if(objects[i1][0] != i || objects[i1][1] != j)
continue;
k = i1;
break;
}
if(k != -1)
{
if(gw.gs.vibration)
try
{
Display.getDisplay(gw).vibrate(1000);
}
catch(Exception exception1) { }
if(buildsNum > 0)
{
buildsNum--;
System.arraycopy(objects[buildsNum], 0, objects[k], 0, 8);
int l = k << 1;
peopleNum--;
System.arraycopy(people[peopleNum], 0, people[l + 1], 0, 12);
people[l + 1][3] = (short)k;
peopleNum--;
System.arraycopy(people[peopleNum], 0, people[l], 0, 12);
people[l][3] = (short)k;
stock[15] = (short)peopleNum;
}
gw.lv.map[j][i] = 1;
}
}
}
public int findFish(int i, int j)
{
int l = 3;
//goto _L1
while(l >= -3){
int k;
byte byte0;
byte0 = -3;
byte byte1 = 3;
if(l == -3 || l == 3)
{
byte0 = -2;
byte1 = 2;
}
k = byte1;
//goto _L2
while(k >= byte0){
if((k == 0) & (l == 0))
continue; /* Loop/switch isn't completed */
byte byte2 = gw.lv.map[j + l][i + k];
if(byte2 == 5 && gw.lv.resources[j + l][i + k] > 0)
return (j + l << 8) + (i + k);
if(byte2 == 3 || byte2 == 4 || byte2 == 11 || byte2 == 12)
return (j + l << 8) + (i + k);
continue; /* Loop/switch isn't completed */
//Exception exception;
//exception;
k--;
}
_L4:
_L2:
//if(k >= byte0) goto _L4; else goto _L3
_L3:
l--;
}
_L6:
_L1:
//if(l >= -3) goto _L6; else goto _L5
_L5:
return 0;
}
public int findMine(int i, int j, int k)
{
int i1 = -3;
// goto _L1
while(i1 <= 3){
int l;
byte byte0;
byte0 = -3;
byte byte1 = 3;
if(i1 == -3 || i1 == 3)
{
byte0 = -2;
byte1 = 2;
}
l = byte1;
//goto _L2
while(l >= byte0){
if((l == 0) & (i1 == 0))
continue; /* Loop/switch isn't completed */
int j1;
int k1;
byte byte2 = gw.lv.resources[j + i1][i + l];
j1 = byte2 >> 6 & 3;
k1 = byte2 & 0x3f;
if(j1 == k && k1 > 0)
return (j + i1 << 8) + (i + l);
continue; /* Loop/switch isn't completed */
//Exception exception;
//exception;
l--;
}
_L4:
_L2:
//if(l >= byte0) goto _L4; else goto _L3
_L3:
i1++;
}
_L6:
_L1:
//if(i1 <= 3) goto _L6; else goto _L5
_L5:
return 0;
}
public int findResource(int i, int j, int k)
{
int i1 = -3;
while(i1 <= 3){
int l;
byte byte1;
byte byte0 = -3;
byte1 = 3;
if(i1 == -3 || i1 == 3)
{
byte0 = -2;
byte1 = 2;
}
l = byte0;
// goto _L2
while(l <= byte1){
if((l == 0) & (i1 == 0))
continue; /* Loop/switch isn't completed */
if(gw.lv.map[j + i1][i + l] == k && gw.lv.resources[j + i1][i + l] > 0)
return (j + i1 << 8) + (i + l);
continue; /* Loop/switch isn't completed */
//Exception exception;
//exception;
l++;
}
_L4:
_L2:
//if(l <= byte1) goto _L4; else goto _L3
_L3:
i1++;
}
//goto _L1
_L6:
_L1:
//if(i1 <= 3) goto _L6; else goto _L5
_L5:
return 0;
}
public int findStone(int i, int j)
{
int l = -3;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -