📄 cardcanvas.java
字号:
package com.skybright.pig;
import java.io.PrintStream;
import java.util.Vector;
import javax.microedition.lcdui.*;
public class CardCanvas extends Canvas implements CommandListener
{
private Command restartCommand;
private Command newCommand;
private Command helpCommand;
private Command aboutCommand;
private Command exitCommand;
private Duel duel;
private Image cardback;
private Image logo;
public CardCanvas(Duel d)
{
restartCommand = new Command("\u53d1\u724c", Command.SCREEN, 1);//4
newCommand = new Command("\u91cd\u65b0\u5f00\u5c40", Command.SCREEN, 1);//5
helpCommand = new Command("\u73A9\u6CD5\u5E2E\u52A9", Command.HELP, 1);//5
aboutCommand = new Command("\u5173\u4E8E", Command.HELP, 1);//5
exitCommand = new Command("\u9000\u51fa", Command.EXIT, 1);
addCommand(restartCommand);
addCommand(newCommand);
addCommand(helpCommand);
addCommand(aboutCommand);
addCommand(exitCommand);
setCommandListener(this);
duel = d;
}
public void show()
{
PigMiDlet.display.setCurrent(this);
}
public void paint(Graphics g)
{
g.setColor(Config.BACKGROUND[0], Config.BACKGROUND[1],
Config.BACKGROUND[2]);
g.fillRect(0, 0, getWidth(), getHeight());
if (duel == null)
{
return;
}
//load logo picture
if (duel.getStatus() == Config.STATUS_LOGO)
{
drawStart(g);
return;
}
//destory logo and load pig picture
if (duel.getStatus() == Config.STATUS_NEW)
{
//destrory logo resource
destoryLogo();
//load pig picture
drawPig(g);
return;
}
if (duel.getStatus() != Config.STATUS_RUN)
{
return;
}else
{
drawP1(g, duel);
drawP2(g, duel);
drawP3(g, duel);
drawP4(g, duel);
drawCardsRound(g);
return;
}
}
/**
* 重新开一局,把原来的成绩清空
*/
public void duelNewStart()
{
duel.restart();
repaint();
}
/**
* 仅仅是重新发牌,换牌
*/
public void duelStart()
{
duel.start();
repaint();
}
protected void keyPressed(int keyCode)
{
if (duel == null)
{
return;
}
if (duel.whoseTurn() != 0)
{
return;
}
switch (getGameAction(keyCode))
{
case 3: // '\003'
case 4: // '\004'
case 7: // '\007'
default:
break;
case 1: // '\001'
case 2: // '\002'
if (duel.getSelectIndex() == 0)
{
return;
}
if (duel.getSelectIndex() < 0)
{
duel.setSelectIndex(0);
}else
{
duel.setSelectIndex(duel.getSelectIndex() - 1);
}
repaint();
break;
case 5: // '\005'
case 6: // '\006'
if (duel.getSelectIndex() == (duel.getPlayer1().left() - 1))
{
return;
}
if (duel.getSelectIndex() < 0)
{
duel.setSelectIndex(0);
}else
{
duel.setSelectIndex(duel.getSelectIndex() + 1);
}
repaint();
break;
case 8: // '\b'
duel.deal();
break;
}
}
/**
* down user
* @param g
* @param d
*/
private void drawP1(Graphics g, Duel d)
{
int x = Config.P1_CARD[0];
int y = Config.P1_CARD[1];
try
{
Card[] cs = d.getPlayer1().getCards();
int n = 0;
for (int i = 0; i < cs.length; i++)
{
if (cs[i] != null)
{
int y2 = y;
if (n == d.getSelectIndex())
{
y2 -= 8;
}
g.drawImage(cs[i].getImage(), x, y2, 20);
x += 10;
n++;
}
}
}catch (Exception e)
{
e.printStackTrace();
}
try
{
//white
g.setColor(Config.FONT_COLOR);
//add pic
// g.drawString(d.getPlayer1().getName(), Config.P1_NAME[0],Config.P1_NAME[1], 20);
//show score
g.drawString(String.valueOf(String.valueOf(
(new StringBuffer("")).append(
d.getPlayer1()
.getName())
.append(":")
.append(duel.getScore(
d.getPlayer1()
.getName())))),
Config.P1_NAME[0], Config.P1_NAME[1], 20);
// g.drawImage(d.getPlayer1().getHeader(), Config.P1_NAME[0], Config.P1_NAME[1], 20);
}catch (Exception e)
{
e.printStackTrace();
}
}
/**
* left user
* @param g
* @param d
*/
private void drawP2(Graphics g, Duel d)
{
int x = Config.P2_CARD[0];
int y = Config.P2_CARD[1];
try
{
Card[] cs = d.getPlayer2().getCards();
for (int i = 0; i < cs.length; i++)
{
if (cs[i] != null)
{
g.drawImage(getCardBack(), x, y, 20);
y += 3;
}
}
}catch (Exception e)
{
e.printStackTrace();
}
try
{
//white
g.setColor(Config.FONT_COLOR);
//add pic
g.drawString(String.valueOf(String.valueOf(
(new StringBuffer("")).append(
d.getPlayer2()
.getName())
.append(":")
.append(duel.getScore(
d.getPlayer2()
.getName())))),
Config.P2_NAME[0], Config.P2_NAME[1], 20);
// g.drawString(d.getPlayer2().getName(), Config.P2_NAME[0], Config.P2_NAME[1], 20);
// g.drawImage(d.getPlayer2().getHeader(), Config.P2_NAME[0], Config.P2_NAME[1], 20);
}catch (Exception e)
{
e.printStackTrace();
}
}
/**
* up user
* @param g
* @param d
*/
private void drawP3(Graphics g, Duel d)
{
int x = Config.P3_CARD[0];
int y = Config.P3_CARD[1];
try
{
Card[] cs = d.getPlayer3().getCards();
for (int i = 0; i < cs.length; i++)
{
if (cs[i] != null)
{
g.drawImage(getCardBack(), x, y, 20);
x += 5;
}
}
}catch (Exception e)
{
e.printStackTrace();
}
try
{
//white
g.setColor(Config.FONT_COLOR);
//add pic
g.drawString(String.valueOf(String.valueOf(
(new StringBuffer("")).append(
d.getPlayer3()
.getName())
.append(":")
.append(duel.getScore(
d.getPlayer3()
.getName())))),
Config.P3_NAME[0], Config.P3_NAME[1], 20);
// g.drawString(d.getPlayer3().getName(), Config.P3_NAME[0], Config.P3_NAME[1], 20);
// g.drawImage(d.getPlayer3().getHeader(), Config.P3_NAME[0], Config.P3_NAME[1], 20);
}catch (Exception e)
{
e.printStackTrace();
}
}
/**
* left user
* @param g
* @param d
*/
private void drawP4(Graphics g, Duel d)
{
int x = Config.P4_CARD[0];
int y = Config.P4_CARD[1];
try
{
Card[] cs = d.getPlayer4().getCards();
for (int i = 0; i < cs.length; i++)
{
if (cs[i] != null)
{
g.drawImage(getCardBack(), x, y, 20);
y += 3;
}
}
}catch (Exception e)
{
e.printStackTrace();
}
try
{
//white
g.setColor(Config.FONT_COLOR);
//add pic
g.drawString(String.valueOf(String.valueOf(
(new StringBuffer("")).append(
d.getPlayer4()
.getName())
.append(":")
.append(duel.getScore(
d.getPlayer4()
.getName())))),
Config.P4_NAME[0], Config.P4_NAME[1], 20);
// g.drawString(d.getPlayer4().getName(), Config.P4_NAME[0], Config.P4_NAME[1], 20);
// g.drawImage(d.getPlayer4().getHeader(), Config.P4_NAME[0], Config.P4_NAME[1], 20);
}catch (Exception e)
{
e.printStackTrace();
}
}
private void drawCardsRound(Graphics g)
{
Vector cards = duel.getCardsCound();
for (int i = 0; i < cards.size(); i++)
{
CardRound cr = (CardRound) cards.elementAt(i);
int p = cr.getRoundIndex();
Card c = cr.getCard();
switch (p)
{
case 0: // '\0'
g.drawImage(c.getImage(), Config.SHOW1[0], Config.SHOW1[1], 20);
break;
case 1: // '\001'
g.drawImage(c.getImage(), Config.SHOW2[0], Config.SHOW2[1], 20);
break;
case 2: // '\002'
g.drawImage(c.getImage(), Config.SHOW3[0], Config.SHOW3[1], 20);
break;
case 3: // '\003'
g.drawImage(c.getImage(), Config.SHOW4[0], Config.SHOW4[1], 20);
break;
}
}
}
private Image getLogo()
{
if (logo != null)
{
return logo;
}
try
{
logo = Image.createImage("/logo.png");
}catch (Exception e)
{
logo = null;
}
return logo;
}
private Image getCardBack()
{
if (cardback != null)
{
return cardback;
}
try
{
cardback = Image.createImage("/cards/0.png");
}catch (Exception e)
{
cardback = null;
}
return cardback;
}
/**
* show company log
* @param g
*/
private void drawStart(Graphics g)
{
//show company logo
g.setColor(Config.BACKGROUND[0], Config.BACKGROUND[1],Config.BACKGROUND[2]);
// g.setColor(0xffffff);
g.fillRect(0, 0, getWidth(), getHeight());
// g.setColor(0xffffff);
// g.setFont(Font.getFont(0, 1, 8));
// g.drawString("\u6B22\u8FCE\u8FDB\u5165\u7EA2\u5FC3\u5927\u6218\uFF01", 10, 40, 20);
// g.drawString("\u8BF7\u5728\u9009\u9879\u83DC\u5355\u4E2D\u5F00\u59CB\u6E38\u620F\u3002", 10, 60, 20);
//load logo pic
getLogo();
g.drawImage(logo, getWidth() / 2, getHeight() / 2, 3);
}
private void drawPig(Graphics g)
{
g.setColor(Config.BACKGROUND[0], Config.BACKGROUND[1],
Config.BACKGROUND[2]);
g.fillRect(0, 0, getWidth(), getHeight());
//red
g.setColor(0xFF0000);
//change draw start display
g.setFont(Font.getFont(Font.FACE_SYSTEM, Font.STYLE_BOLD,
Font.SIZE_LARGE));
g.drawString("\u7ea2\u5fc3\u5927\u6218", 60, 60, g.LEFT | g.TOP);
}
/**
* logo is showed only once,so it must be destoryed to release memory
* @param g
*/
private void destoryLogo()
{
logo = null;
System.gc();
// g.setColor(Config.BACKGROUND[0], Config.BACKGROUND[1],Config.BACKGROUND[2]);
// g.fillRect(0, 0, getWidth(), getHeight());
}
public void commandAction(Command c, Displayable p)
{
if (c == restartCommand)
{
//对牌不满意,仅仅是重新发牌
duelStart();
}else if (c == newCommand)
{
//重新开一局,需要把原来的成绩清空
duelNewStart();
}else if (c == helpCommand)
{
Help.showHelp(PigMiDlet.display);
}else if (c == aboutCommand)
{
About.showAbout(PigMiDlet.display);
}else if (c == exitCommand)
{
duel.quit();
// PigMiDlet.display.setCurrent(null);
}
else
{
System.out.println("Unknown command issued ".concat(String.valueOf(
String.valueOf(c))));
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -