📄 gamelogic.java
字号:
// FrontEnd Plus GUI for JAD
// DeCompiled : gamelogic.class
import java.io.PrintStream;
import java.util.Random;
import javax.microedition.lcdui.Canvas;
import javax.microedition.lcdui.Graphics;
public class gamelogic extends Canvas
{
int gamelevel;
int washcount;
int em[] = {
1, 2, 3, 4, 5, 6, 7, 8, 9, 10,
11, 12, 13, 14, 15, 16, 17, 18, 19, 20,
1, 2, 3, 4, 5, 6, 7, 8, 9, 10,
11, 12, 13, 14, 15, 16, 17, 18, 19, 20
};
int map[];
int usemap[];
int usemaplength;
int mapheight;
int mapwidth;
int oldrow;
int oldcol;
int dc;
int line[];
boolean isdrawline;
public gamelogic()
{
gamelevel = 0;
washcount = 4;
oldrow = 0;
oldcol = 0;
dc = 0;
line = new int[8];
isdrawline = false;
mapinit(8, 6);
}
public void mapinit(int i, int j)
{
mapwidth = i;
mapheight = j;
map = genmap();
for(; !checkcn(); washmap());
gamelevel = 1;
}
public void nextmap()
{
if(gamelevel % 2 == 0)
mapwidth++;
if(gamelevel % 3 == 0)
mapheight++;
System.out.println(mapwidth + "X" + mapheight);
map = genmap();
for(; !checkcn(); washmap());
gamelevel++;
}
public boolean gameover()
{
boolean flag = true;
for(int i = 0; i < map.length; i++)
if(map[i] != 0)
flag = false;
return flag;
}
public int getmapvalue(int i, int j)
{
int k = i * mapwidth + j;
return map[k];
}
public int setmapvalue(int i, int j, int k)
{
int l = i * mapwidth + j;
map[l] = k;
return l;
}
public int[] getmapposition(int i)
{
int ai[] = new int[2];
ai[0] = i / mapwidth;
ai[1] = i - (i / mapwidth) * mapwidth;
return ai;
}
public void tilespop(int i)
{
for(int j = mapheight - 2; j > 1; j--)
{
for(int k = 1; k < mapwidth - 1; k++)
if(getmapvalue(j, k) == 0)
if(getmapvalue(j - 1, k) != 0)
{
usemap[setmapvalue(j, k, getmapvalue(j - 1, k))] = 0;
usemap[setmapvalue(j - 1, k, 0)] = 1;
} else
{
usemap[setmapvalue(j, k, getmapvalue(j - 2, k))] = 0;
usemap[setmapvalue(j - 2, k, 0)] = 1;
}
}
}
public boolean bclick(int i, int j)
{
int ai[] = new int[2];
int ai1[] = new int[2];
if(dc == 1)
{
dc = 0;
ai[0] = oldrow;
ai[1] = oldcol;
ai1[0] = i;
ai1[1] = j;
if(connectok(ai, ai1))
{
isdrawline = true;
usemap[setmapvalue(oldrow, oldcol, 0)] = 1;
usemap[setmapvalue(i, j, 0)] = 1;
usemaplength = usemaplength - 2;
if(washcount > 0)
while(!checkcn())
{
washmap();
washcount--;
}
return true;
}
} else
{
oldrow = i;
oldcol = j;
dc = 1;
}
return false;
}
public boolean connectok(int ai[], int ai1[])
{
int k3 = ai[0];
int l3 = ai[1];
int i4 = ai1[0];
int j4 = ai1[1];
boolean flag = false;
if(getmapvalue(k3, l3) != getmapvalue(i4, j4))
return flag;
if(k3 == i4 && l3 == j4)
return flag;
if(getmapvalue(k3, l3) == 0)
return flag;
for(int i = 0; i < mapheight; i++)
{
int k4 = i;
int i5 = l3;
int k5 = i;
int i6 = j4;
flag = true;
if(flag)
if(k4 <= k3)
{
for(int k = k4; k < k3; k++)
{
if(getmapvalue(k, l3) == 0)
continue;
flag = false;
break;
}
} else
{
for(int l = k3 + 1; l <= k4; l++)
{
if(getmapvalue(l, l3) == 0)
continue;
flag = false;
break;
}
}
if(flag)
if(k5 <= i4)
{
for(int i1 = k5; i1 < i4; i1++)
{
if(getmapvalue(i1, j4) == 0)
continue;
flag = false;
break;
}
} else
{
for(int j1 = i4 + 1; j1 <= k5; j1++)
{
if(getmapvalue(j1, j4) == 0)
continue;
flag = false;
break;
}
}
if(flag)
{
if(i5 <= i6)
{
for(int k1 = i5 + 1; k1 < i6; k1++)
{
if(getmapvalue(k4, k1) == 0)
continue;
flag = false;
break;
}
} else
{
for(int l1 = i6 + 1; l1 < i5; l1++)
{
if(getmapvalue(k4, l1) == 0)
continue;
flag = false;
break;
}
}
line[0] = k3;
line[1] = l3;
line[2] = i4;
line[3] = j4;
line[4] = k4;
line[5] = i5;
line[6] = k5;
line[7] = i6;
}
if(flag)
break;
}
if(flag)
return flag;
for(int j = 0; j < mapwidth; j++)
{
int l4 = k3;
int j5 = j;
int l5 = i4;
int j6 = j;
flag = true;
if(flag)
if(j5 <= l3)
{
for(int i2 = j5; i2 < l3; i2++)
{
if(getmapvalue(k3, i2) == 0)
continue;
flag = false;
break;
}
} else
{
for(int j2 = l3 + 1; j2 <= j5; j2++)
{
if(getmapvalue(k3, j2) == 0)
continue;
flag = false;
break;
}
}
if(flag)
if(j6 <= j4)
{
for(int k2 = j6; k2 < j4; k2++)
{
if(getmapvalue(i4, k2) == 0)
continue;
flag = false;
break;
}
} else
{
for(int l2 = j4 + 1; l2 <= j6; l2++)
{
if(getmapvalue(i4, l2) == 0)
continue;
flag = false;
break;
}
}
if(flag)
if(l4 <= l5)
{
for(int i3 = l4 + 1; i3 < l5; i3++)
{
if(getmapvalue(i3, j5) == 0)
continue;
flag = false;
break;
}
} else
{
for(int j3 = l5 + 1; j3 < l4; j3++)
{
if(getmapvalue(j3, j5) == 0)
continue;
flag = false;
break;
}
}
if(flag)
break;
}
return flag;
}
public int[] genmap()
{
map = new int[mapwidth * mapheight];
int i = 0;
int ai[] = new int[map.length];
usemap = new int[map.length];
int j = ai.length;
int ai1[] = new int[2];
int ai3[] = new int[2];
Random random = new Random();
for(int k = 0; k < mapheight; k++)
{
for(int i1 = 0; i1 < mapwidth; i1++)
{
if(i1 == 0 || i1 == mapwidth - 1 || k == 0 || k == mapheight - 1)
{
ai[i] = 1;
usemap[i] = 1;
j--;
}
i++;
}
}
usemaplength = j;
for(int l = 0; l < em.length; l++)
if(j > 0)
{
int k1 = Math.abs(random.nextInt()) % j;
int l1 = getnotuse(k1, ai);
int ai2[] = getmapposition(l1);
j--;
ai[l1] = 1;
usemaplength--;
usemap[l1] = 1;
for(int j1 = 0; j1 < j; j1++)
{
int i2 = getnotuse(j1, ai);
int ai4[] = getmapposition(i2);
if(connectok(ai2, ai4))
{
j--;
ai[i2] = 1;
map[l1] = em[l];
usemap[l1] = 0;
usemaplength++;
map[i2] = em[l];
break;
}
if(j1 == j - 1)
{
j--;
ai[i2] = 1;
map[l1] = em[l];
usemap[l1] = 0;
usemaplength++;
map[i2] = em[l];
}
}
}
return map;
}
public int getnotuse(int i, int ai[])
{
int j = 0;
int k = 0;
for(j = 0; j < ai.length; j++)
{
if(ai[j] == 0 && k == i)
break;
if(ai[j] != 1)
k++;
}
return j;
}
public boolean checkcn()
{
boolean flag = false;
int ai[] = new int[2];
int ai2[] = new int[2];
if(usemaplength <= 1)
return true;
for(int i = 0; i < usemaplength; i++)
{
int k = getnotuse(i, usemap);
int ai1[] = getmapposition(k);
for(int j = 0; j < usemaplength; j++)
{
int l = getnotuse(j, usemap);
int ai3[] = getmapposition(l);
if(i == j || !connectok(ai1, ai3))
continue;
flag = true;
break;
}
if(flag)
break;
}
return flag;
}
public void washmap()
{
int ai[] = new int[usemap.length];
System.arraycopy(usemap, 0, ai, 0, usemap.length);
int i = usemaplength;
int ai1[] = new int[2];
int ai3[] = new int[2];
Random random = new Random();
int ai5[] = new int[usemaplength];
for(int j = 0; j < usemaplength; j++)
{
int j1 = getnotuse(j, usemap);
ai5[j] = map[j1];
}
for(int k = 0; k < ai5.length; k++)
if(i > 0)
{
int i1 = Math.abs(random.nextInt()) % i;
int k1 = getnotuse(i1, ai);
int ai2[] = getmapposition(k1);
i--;
ai[k1] = 1;
for(int l = 0; l < i; l++)
{
int l1 = getnotuse(l, ai);
int ai4[] = getmapposition(l1);
if(connectok(ai2, ai4))
{
i--;
ai[l1] = 1;
map[k1] = ai5[k];
map[l1] = ai5[k];
break;
}
if(l == i - 1)
{
i--;
ai[l1] = 1;
map[k1] = ai5[k];
map[l1] = ai5[k];
}
}
}
}
public void drawline(Graphics g)
{
if(isdrawline)
{
isdrawline = false;
for(int i = 0; i < 8; i++)
System.out.println(line[i]);
}
}
public void paint(Graphics g)
{
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -