📄 gamecanvas.java
字号:
// Decompiled by DJ v2.9.9.60 Copyright 2000 Atanas Neshkov Date: 2005-4-3 23:26:50
// Home Page : http://members.fortunecity.com/neshkov/dj.html - Check often for new version!
// Decompiler options: packimports(3)
// Source File Name: GameCanvas.java
package NBMaJiang;
import com.nokia.mid.ui.FullCanvas;
import java.io.PrintStream;
import java.util.*;
import javax.microedition.lcdui.*;
public class GameCanvas extends FullCanvas
{
private class fa extends TimerTask
{
public void run()
{
repaint();
y++;
}
private fa()
{
}
}
public GameCanvas()
{
normaly1 = 113;
normaly2 = 1;
value = new int[136];
value1 = new int[14];
value2 = new int[14];
value4 = new int[12];
value5 = new int[12];
chivalue = new boolean[3];
changevalue = new boolean[3];
score1 = 1000;
score2 = 1000;
initValue();
init();
h = getHeight();
w = getWidth();
font = Font.getFont(0, 0, 8);
bigFont = Font.getFont(64, 1, 16);
try
{
image = Image.createImage("/NBMaJiang/images/tiao1.png");
pai1 = Image.createImage("/NBMaJiang/images/pai1.png");
pai = Image.createImage("/NBMaJiang/images/pai.png");
chi1 = Image.createImage("/NBMaJiang/images/chi.png");
ting = Image.createImage("/NBMaJiang/images/ting.png");
}
catch(Exception e)
{
System.out.println("create image error!");
}
}
private void newGame()
{
initValue();
init();
}
private void initValue()
{
for(int i = 0; i <= 13; i++)
{
value1[i] = 100;
value2[i] = 100;
}
for(int i = 0; i <= 11; i++)
{
value4[i] = 100;
value5[i] = 100;
}
for(int i = 0; i <= 135; i++)
{
int j = i / 4;
value[i] = value3[j];
}
}
private void init()
{
random = new Random();
isFirst = true;
fa = false;
isFinish = false;
isUp = false;
exeHu = false;
doHu = false;
hu2 = false;
exeTing = false;
isTing = false;
isNew = false;
noHu = 0;
passID = 0;
total = 135;
tagx1 = 118;
tagy1 = 110;
tagx2 = 2;
tagy2 = 1;
tagID = 13;
fan = 0;
fan1 = 0;
fan2 = 0;
}
private void hand()
{
int ran = Math.abs(random.nextInt()) % total;
tag = value[ran];
for(int i = ran; i < total; i++)
value[i] = value[i + 1];
value[total] = 100;
total--;
}
private void finish()
{
int k = 0;
for(int i = 0; i <= 135; i++)
if(value[i] == 100)
k++;
if(k >= 120)
isFinish = true;
}
public void choice(int tag)
{
if(tag >= 1 && tag <= 9)
choicex = (tag - 1) * 8;
else
if(tag >= 21 && tag <= 29)
choicex = ((tag - 21) + 9) * 8;
else
if(tag >= 41 && tag <= 49)
choicex = ((tag - 41) + 18) * 8;
else
if(tag >= 61 && tag <= 67)
choicex = ((tag - 61) + 27) * 8;
}
private void grounddraw(Graphics g, int x1, int y1, int x2, int y2)
{
g.setClip(x1, y1, x2, y2);
g.setColor(67, 160, 20);
g.fillRect(x1, y1, x2, y2);
}
private void coverdraw(Graphics g, int x1, int y1, int width, int height, Image table, int x2,
int y2)
{
g.setClip(x1, y1, width, height);
g.drawImage(table, x2, y2, 20);
}
private void drawpai(Graphics g, int x, int y, int pai)
{
choice(pai);
coverdraw(g, x, y, 8, 14, image, x - choicex, y);
}
private void fristdraw(Graphics g)
{
fa = true;
y = 0;
changeNO1 = 0;
changeNO2 = 0;
changeID1 = 0;
changeID2 = 0;
grounddraw(g, 0, 0, w, h);
coverdraw(g, 5, 97, 88, 12, chi1, 5, 97);
for(int i = 0; i <= 25; i++)
{
hand();
if(i % 2 == 0)
value1[i / 2] = tag;
else
if(i % 2 == 1)
value2[i / 2] = tag;
}
for(int i = 0; i <= 8; i++)
coverdraw(g, 115 - i * 8, 52, 8, 14, pai, 115 - i * 8, 52);
drawpai(g, 10, 52, feng);
timer = new Timer();
timer.schedule(new fa(), 300L, 300L);
}
private void fadraw(Graphics g)
{
drawpai(g, normalx1[y], normaly1, value1[y]);
coverdraw(g, normalx2[y], normaly2, 8, 14, pai1, normalx2[y], normaly2);
}
private void handdraw1(Graphics g)
{
hand();
tagx1 = normalx1[value1max];
value1[value1max] = tag;
isPass1 = false;
isMove = false;
exeMove = true;
exeUp = false;
isDown = false;
exeChi = false;
exePeng = false;
exeGang = false;
isChange = false;
exeGang1 = false;
isGang1 = false;
exeHu = false;
down = true;
coverdraw(g, 5, 97, 88, 12, chi1, 5, 97);
drawpai(g, tagx1, tagy1, tag);
}
private void handdraw2(Graphics g)
{
hand();
value2[13] = tag;
coverdraw(g, tagx2, normaly2, 8, 14, pai1, tagx2, normaly2);
}
private void sort(int m, int value10[])
{
for(int i = 1; i <= m; i++)
{
for(int j = 0; j < i; j++)
if(value10[i] < value10[j])
{
int temp = value10[i];
for(int k = i; k >= j + 1; k--)
value10[k] = value10[k - 1];
value10[j] = temp;
}
}
}
private void sortdraw(Graphics g)
{
sort(13, value1);
for(int i = 0; i <= 13 - changeNO1; i++)
if(value1[i] == 100)
grounddraw(g, normalx1[i], normaly1, 8, 14);
else
drawpai(g, normalx1[i], normaly1, value1[i]);
for(int i = 0; i <= 13; i++)
{
if(value1[i] != 100)
continue;
value1max = i;
tagID = i;
break;
}
}
private void sort2()
{
sort(13, value2);
}
private void movepaint(Graphics g)
{
grounddraw(g, oldtagx, tagy1, 8, 17);
drawpai(g, oldtagx, normaly1, oldtag);
grounddraw(g, tagx1, tagy1, 8, 17);
drawpai(g, tagx1, tagy1, tag);
}
private void passpaint(Graphics g)
{
isPass1 = false;
isFire = false;
exeMove = false;
grounddraw(g, tagx1, tagy1, 8, 17);
if(zhuang)
passx = 1 + (passID - 1 - changeID1) * 9;
else
if(!zhuang)
passx = 1 + (passID - 2 - changeID1) * 9;
passy = 67;
if(passx >= 127 && passx <= 244)
{
passy = passy + 14;
passx = passx - 126;
} else
if(passx >= 253 && passx <= 370)
{
passy = 67;
passx = passx - 252;
} else
if(passx >= 379 && passx <= 496)
{
passy = passy + 14;
passx = passx - 378;
}
drawpai(g, passx, passy, tag);
value1[tagID] = 100;
sortdraw(g);
}
private void exeGangdraw1(Graphics g)
{
exegang(value1);
if(gang)
{
key1 = i1;
key2 = i2;
key3 = i3;
exeUp = true;
exeMove = true;
exeGang1 = true;
coverdraw(g, 5, 97, 22, 12, chi1, -83, 97);
}
}
private void isGangdraw1(Graphics g)
{
exeMove = false;
if(isGang1)
{
grounddraw(g, normalx1[key1], tagy1, 8, 17);
drawpai(g, normalx1[key1], tagy1, value1[key1]);
grounddraw(g, normalx1[key2], tagy1, 8, 17);
drawpai(g, normalx1[key2], tagy1, value1[key2]);
grounddraw(g, normalx1[key3], tagy1, 8, 17);
drawpai(g, normalx1[key3], tagy1, value1[key3]);
}
}
private void doGangdraw1(Graphics g)
{
if(value1[key1] >= 45 && value1[key1] <= 47)
fan1 = fan1 + 1;
else
if(value1[key1] == feng)
fan1 = fan1 + 1;
int i1 = 0;
int i2 = 0;
int i3 = 0;
i1 = value1[key1];
i2 = value1[key2];
i3 = value1[key3];
value1[key1] = 100;
value1[key2] = 100;
value1[key3] = 100;
value1[value1max] = 100;
grounddraw(g, normalx1[key1], tagy1, 8, 17);
grounddraw(g, normalx1[key2], tagy1, 8, 17);
grounddraw(g, normalx1[key3], tagy1, 8, 17);
grounddraw(g, normalx1[value1max], tagy1, 8, 17);
sortdraw(g);
drawpai(g, 119 - changeNO1 * 9, normaly1, i1);
drawpai(g, 110 - changeNO1 * 9, normaly1, i2);
drawpai(g, 101 - changeNO1 * 9, normaly1, i3);
drawpai(g, 105 - changeNO1 * 9, normaly1, tag);
coverdraw(g, 5, 97, 88, 12, chi1, 5, 97);
value4[changeNO1] = i1;
value4[changeNO1 + 1] = i2;
value4[changeNO1 + 2] = tag;
changeNO1 = changeNO1 + 3;
handdraw1(g);
doGang1 = false;
isUp = false;
}
public void paint(Graphics g)
{
if(isFirst && !fa)
{
feng = 61;
zhuang = true;
fristdraw(g);
} else
if(isNew && !fa)
{
newGame();
fristdraw(g);
}
if(isChange)
change(g);
if(fa)
{
fadraw(g);
if(y == 12)
{
timer.cancel();
timer = null;
fa = false;
isFirst = false;
isNew = false;
sort2();
sortdraw(g);
if(zhuang)
{
handdraw1(g);
exeHudraw(g);
exeGangdraw1(g);
} else
if(!zhuang)
{
passID = 1;
handdraw2(g);
hudraw2(g);
if(!hu2)
{
computerpass(g);
sort2();
exeHudraw(g);
exeChidraw(g);
exePengdraw(g);
exeGangdraw(g);
changevalue[0] = exeChi;
changevalue[1] = exePeng;
changevalue[2] = exeGang;
if(!exePeng && !exeGang && !exeHu)
{
handdraw1(g);
exeHudraw(g);
exeGangdraw1(g);
}
}
}
}
} else
if(doHu && !hu2 && !isFinish)
doHudraw(g);
else
if(isGang1)
isGangdraw1(g);
else
if(doGang1)
{
doGangdraw1(g);
exeHudraw(g);
if(exeHu)
fan1 = fan1 + 2;
exeGangdraw1(g);
} else
if(isMove)
movepaint(g);
else
if(isPass1)
{
passpaint(g);
computerDo(g);
if(!hu2)
{
exeHudraw(g);
exeChidraw(g);
exePengdraw(g);
exeGangdraw(g);
changevalue[0] = exeChi;
changevalue[1] = exePeng;
changevalue[2] = exeGang;
if(!exeChi && !exePeng && !exeGang && !exeHu)
{
finish();
if(isFinish)
{
finishdraw(g);
} else
{
handdraw1(g);
exeHudraw(g);
if(exeHu)
fan1 = fan1 + 1;
exeGangdraw1(g);
}
}
}
} else
if(isDown)
downdraw(g);
else
if((exeChi || exePeng || exeGang) && !isChi && !isPeng && !isGang && !isUp && isFire)
{
finish();
if(isFinish)
{
finishdraw(g);
} else
{
handdraw1(g);
exeHudraw(g);
exeGangdraw1(g);
}
} else
if(isGang)
isGangdraw(g);
else
if(isPeng)
isPengdraw(g);
else
if(isChi)
isChidraw(g);
else
if(doChi)
doChidraw(g);
else
if(doPeng)
doPengdraw(g);
else
if(doGang)
{
doGangdraw(g);
exeHudraw(g);
if(exeHu)
fan1 = fan1 + 2;
exeGangdraw1(g);
}
}
private void finishdraw(Graphics g)
{
for(int i = 0; i <= 13; i++)
{
if(value2[i] != 100)
{
drawpai(g, normalx2[i], normaly2, value2[i]);
continue;
}
if(value2[i] == 100)
break;
}
grounddraw(g, 0, 15, 128, 98);
g.setColor(255);
g.setFont(bigFont);
g.drawString("\u6D41\u5C40\uFF01", 50, 40, 20);
g.drawString("\u6309\u63D0\u673A\u952E\u5F00\u59CB\u4E0B\u4E00\u5C40\uFF01", 50, 70, 20);
}
private void doHudraw(Graphics g)
{
sort2();
for(int i = 0; i <= 13; i++)
{
if(value2[i] != 100)
{
drawpai(g, normalx2[i], normaly2, value2[i]);
continue;
}
if(value2[i] == 100)
break;
}
drawpai(g, tagx1, normaly1, tag);
exeHu = false;
exeMove = false;
isFinish = true;
grounddraw(g, 0, 15, 128, 98);
fan = fan1;
countScore(g);
score2 = score2 - 10 * fan;
score1 = score1 + 10 * fan;
g.setColor(255);
g.setFont(bigFont);
g.drawString("-" + 10 * fan, 70, 30, 20);
g.drawString("=" + score2, 70, 45, 20);
g.drawString("+" + 10 * fan, 70, 70, 20);
g.drawString("=" + score1, 70, 85, 20);
if(!zhuang && feng >= 61 && feng <= 63)
feng = feng + 1;
else
if(!zhuang && feng == 64)
feng = 61;
zhuang = true;
}
private void change(Graphics g)
{
if(t == 0)
{
for(int i = 1; i <= 2; i++)
{
if(!changevalue[i])
continue;
t = i;
break;
}
changedraw(g);
} else
if(t == 1)
{
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -