📄 tkc.java
字号:
import javax.microedition.lcdui.Canvas;
import javax.microedition.lcdui.Graphics;
import javax.microedition.lcdui.Image;
import javax.microedition.lcdui.Font;
import java.util.Random;
import javax.microedition.lcdui.Display;
import javax.microedition.rms.*;
public class TkC extends Canvas implements Runnable
{
private Thread t = null;
private Graphics g;
private Image buffer = null;
private Image[] image = new Image[55];
private Random rnd;
private int v[] = new int[53];
private int cPara[][] = {{50,50},{70,30},{30,70}};//显示 攻击力 和 防守力的参数
private boolean b[] = new boolean[17];
private int lcont; //control the process indicate
private Tank tan; //the Tank class instance
private int menucont; //the menu control variable
private int InstCount;// control the help screen page to scroll
private int help;//control the about screen page to scroll
private boolean gamePause;//indicate the game to pause
private int txtshowtime; //control to show the button text
private byte[] rs_data = new byte[1+1+1+1];//to record the game score
private int pos,tmp1,tmp2,tmp3,tmp4;//some temp variable
private RecordStore rs;
private int err;
TkC(Tank tank)
{
tan = tank;
buffer = Image.createImage(128,160);
g = buffer.getGraphics();
setFullScreenMode(true);
v[2] = 0;
v[0] = 128/2;
v[1] = 160/2;
v[42] = 4; //control the menu variable previuos
v[41]=7; //控制mission 和crew 的X坐标
v[47] = getColorOfRGB(0,0,0);//black
v[48] = getColorOfRGB(255,255,255);//white
v[49] = getColorOfRGB(255,0,0);//red
v[50] = getColorOfRGB(0,255,0);//green
v[51] = getColorOfRGB(0,0,255);//blue
err = load_data();
rnd = new Random();
t = new Thread(this);
t.start();
}
public void paint( Graphics gg )
{
if(v[2]==0)//processor
{
g.setColor(v[47]);
g.fillRect(0,0,128,160);
g.setColor(v[50]);
drawString("游戏加载中",27+10,40);
g.setColor(v[48]);
g.drawRect(10,74,110,6);
g.setColor(v[49]);
g.fillRect(11,75,lcont,5);
}
if(buffer!=null)
gg.drawImage(buffer,0,0,0);
}
public void run(){
while(true){
ppaint();
try{
repaint();
//serviceRepaints();
Thread.sleep(100);
}catch(Exception e){
e.printStackTrace();
}
}
}
void ppaint(){
if(v[2] == 1){//titie screen
g.setColor(0);
g.fillRect(0,0,128,160);
edge(0,0);
g.setColor(v[48]);
drawImage(image[53],10,10);
drawImage(image[54],8,78+30);
setSoftLabel(0,"菜单");
setSoftLabel(1,"退出");
}
if(v[2]==100)//Menu screen
{
int menuX=5+27;
int menuY=14;
int menuW=128;
int menuH=14;
g.setColor(0);
g.fillRect(0,0,128,160);
g.setColor(0x00, 0x00, 0xBB);
g.fillRect(0, ( (14 * menucont) + 16)+18, menuW, menuH);
g.setColor(v[49]);
g.drawString("装甲核心", 128 >> 1, 2, g.TOP | g.HCENTER);
g.setColor(v[48]);
if (gamePause) { //chhsf
g.drawString("继续游戏", menuX, menuY+20, g.TOP | g.LEFT);
g.drawString("开始新游戏", menuX, menuY*2+20, g.TOP | g.LEFT);
g.drawString("最高分", menuX, menuY*3+20, g.TOP | g.LEFT);
g.drawString("帮助", menuX, menuY*4+20, g.TOP | g.LEFT);
g.drawString("关于", menuX, menuY*5+20, g.TOP | g.LEFT);
g.drawString("退出游戏", menuX, menuY*6+20, g.TOP | g.LEFT);
}
else if (!gamePause) { //chhsf
g.drawString("开始新游戏", menuX , menuY+20, g.TOP | g.LEFT);
g.drawString("最高分", menuX, menuY*2+20, g.TOP | g.LEFT);
g.drawString("帮助", menuX, menuY*3+20, g.TOP | g.LEFT);
g.drawString("关于", menuX, menuY*4+20, g.TOP | g.LEFT);
g.drawString("退出游戏", menuX, menuY*5+20, g.TOP | g.LEFT);
}
// g.setColor(v[50]);
setSoftLabel(1,"返回");
// drawString("确定",1,100+45);
setSoftLabel(0,"确认");
// drawString("返回",98,100+45);
}
if(v[2]==101)//about screen
{
int xl = 2;
int yl = 16;
g.setColor(0x00, 0x00, 0x00);
g.fillRect(0, 0, 128, 160);
g.setColor(v[50]);
g.drawString("关于", getWidth() >> 1, 2, g.TOP | g.HCENTER); //chhsf
g.setColor(0xFF, 0xFF, 0xFF);
g.drawLine(0, 15, getWidth(), 15);
if(help == 0)
{
g.drawString("名称:装甲核心", 3, yl+xl, g.TOP | g.LEFT);
g.drawString("版本:1.0", 3, yl*2+xl, g.TOP | g.LEFT);
g.drawString("厂商:", 3, yl*3+xl, g.TOP | g.LEFT);
g.drawString("HUDSON SOFT", 3, yl*4+xl, g.TOP | g.LEFT);
g.drawString("版权:", 3, yl*5+xl, g.TOP | g.LEFT);
g.drawString("\u00A9 HUDSON ", 3, yl*6+xl, g.TOP | g.LEFT);
}else if(help == 1)
{
g.drawString("SOFTWARE ", 3, yl*1+xl, g.TOP | g.LEFT);
g.drawString("LICENSED", 3, yl*2+xl, g.TOP | g.LEFT);
g.drawString("BY TIANBEN CO.,LTD. ", 3, yl*3+xl, g.TOP | g.LEFT);
g.drawString("网址: ", 3, yl*4+xl, g.TOP | g.LEFT);
g.drawString("www.tianben.com.cn ", 3, yl*5+xl, g.TOP | g.LEFT);
}else if(help == 2)
{
g.drawString("安装前:45KB", 3, yl*1+xl, g.TOP | g.LEFT);
g.drawString("安装后:52KB", 3, yl*2+xl, g.TOP | g.LEFT);
g.drawString("", 3, yl*3+xl, g.TOP | g.LEFT);
g.drawString("", 3, yl*4+xl, g.TOP | g.LEFT);
g.drawString("", 3, yl*5+xl, g.TOP | g.LEFT);
}
setSoftLabel(1,"返回");
setSoftLabel(0,"更多");
}
if(v[2] == 2){ //help screen
edge(0,0);
int yy = 2;//gwb 定义文字距离屏幕最上面的距离
int FH1 = 16;
g.setColor(0x00, 0x00, 0x00);
g.fillRect(0, 0, 128, 160);
g.setColor(0x00ff00);
g.drawString("游戏帮助", getWidth() >> 1, 2, g.TOP | g.HCENTER);
g.drawLine(0, 15, getWidth(), 15);
g.setColor(0xFF, 0xFF, 0xFF);
if (InstCount == 0) {
g.drawString("游戏描述", 3, FH1+yy, g.TOP | g.LEFT);
g.drawString("调整好坦克的位置", 3, FH1*2+yy, g.TOP | g.LEFT);
g.drawString("和炮身的角度及发", 3, FH1*3+yy, g.TOP | g.LEFT);
g.drawString("射力, 以完成击毁", 3, FH1*4+yy, g.TOP | g.LEFT);
g.drawString("躲在岩石背面和远", 3, FH1*5+yy, g.TOP | g.LEFT);
}
else if (InstCount == 1) {
g.drawString("处的敌方战车的任", 3, FH1+yy, g.TOP | g.LEFT);
g.drawString("务。战车的功能根", 3, FH1*2+yy, g.TOP | g.LEFT);
g.drawString("据选择的攻击模式", 3, FH1*3+yy, g.TOP | g.LEFT);
g.drawString("的不同会有变化。", 3, FH1*4+yy, g.TOP | g.LEFT);
g.drawString("准备攻击之前有三", 3, FH1*5+yy, g.TOP | g.LEFT);
}
else if (InstCount == 2) {
g.drawString("种模式可以选择:", 3, FH1+yy, g.TOP | g.LEFT);
g.drawString("普通型: 攻击力和", 3, FH1*2+yy, g.TOP | g.LEFT);
g.drawString("防御力比较平均。", 3, FH1*3+yy, g.TOP | g.LEFT);
g.drawString("力量型: 攻击力较", 3, FH1*4+yy, g.TOP | g.LEFT);
g.drawString("强但是防御有点差", 3, FH1*5+yy, g.TOP | g.LEFT);
}
else if (InstCount == 3) {
g.drawString("防御型: 重视防御", 3, FH1+yy, g.TOP | g.LEFT);
g.drawString("但是攻击力较差。", 3, FH1*2+yy, g.TOP | g.LEFT);
g.drawString("", 3, FH1*3+yy, g.TOP | g.LEFT);
g.drawString("", 3, FH1*4+yy, g.TOP | g.LEFT);
g.drawString("", 3, FH1*5+yy, g.TOP | g.LEFT);
}
else if (InstCount == 4) {
g.drawString("操作方法", 3, FH1+yy, g.TOP | g.LEFT);
g.drawString("【四方向上键】滚", 3, FH1*2+yy, g.TOP | g.LEFT);
g.drawString("动屏幕/向上调整发", 3, FH1*3+yy, g.TOP | g.LEFT);
g.drawString("炮角度。", 3, FH1*4+yy, g.TOP | g.LEFT);
g.drawString("【四方向下键】滚", 3, FH1*5+yy, g.TOP | g.LEFT);
}else if(InstCount == 5)
{
g.drawString("动屏幕/向下调整发", 3, FH1+yy, g.TOP | g.LEFT);
g.drawString("炮角度。", 3, FH1*2+yy, g.TOP | g.LEFT);
g.drawString("【四方向左键】移", 3, FH1*3+yy, g.TOP | g.LEFT);
g.drawString("动坦克后退。", 3, FH1*4+yy, g.TOP | g.LEFT);
g.drawString("【四方向右键】移", 3, FH1*5+yy, g.TOP | g.LEFT);
}
else if (InstCount == 6) {
g.drawString("动坦克前进。", 3, FH1+yy, g.TOP | g.LEFT);
g.drawString("【数字键5/中间确", 3, FH1*2+yy, g.TOP | g.LEFT);
g.drawString("认键】发炮。", 3, FH1*3+yy, g.TOP | g.LEFT);
//g.drawString("【右功能键】退出。", 3, FH1*4+yy, g.TOP | g.LEFT);
//g.drawString("【左功能键】返回。", 3, FH1*5+yy, g.TOP | g.LEFT);
g.drawString("【数字键1】查看", 3, FH1*4+yy, g.TOP | g.LEFT);
g.drawString("坦克位置。", 3, FH1*5+yy, g.TOP | g.LEFT);
}else if(InstCount == 7)
{
g.drawString("【数字键2】向上", 3, FH1+yy, g.TOP | g.LEFT);
g.drawString("调节发炮角度。", 3, FH1*2+yy, g.TOP | g.LEFT);
g.drawString("【数字键8】向下", 3, FH1*3+yy, g.TOP | g.LEFT);
g.drawString("调节发炮角度。", 3, FH1*4+yy, g.TOP | g.LEFT);
g.drawString("【数字键4】移动", 3, FH1*5+yy, g.TOP | g.LEFT);
}
else if(InstCount == 8)
{
g.drawString("坦克后退。", 3, FH1+yy, g.TOP | g.LEFT);
g.drawString("【数字键6】移动", 3, FH1*2+yy, g.TOP | g.LEFT);
g.drawString("坦克前进。", 3, FH1*3+yy, g.TOP | g.LEFT);
g.drawString("【右功能键】退出。", 3, FH1*4+yy, g.TOP | g.LEFT);
g.drawString("【左功能键】返回。", 3, FH1*5+yy, g.TOP | g.LEFT);
}
else if (InstCount == 9) {
g.drawString("联系我们", 3, FH1+yy, g.TOP | g.LEFT);
g.drawString("客服电话:", 3, FH1*2+yy, g.TOP | g.LEFT);
g.drawString("0", 3, FH1*3+yy, g.TOP | g.LEFT);
g.drawString("客服E-MAIL:", 3, FH1*4+yy, g.TOP | g.LEFT);
g.drawString("h", 3, FH1*5+yy, g.TOP | g.LEFT);
}
// g.setColor(v[50]);
setSoftLabel(1,"返回");
setSoftLabel(0,"更多");
}
if(v[2] == 3){//最高分界面
g.setColor(0x00, 0x00, 0x00);
g.fillRect(0, 0, 128, 160);
edge(0,0);
if(err!=-1)
{
if(!b[14]){
g.setColor(v[48]);
if(v[43] == 0){
drawString("没有纪录",35,30);
}
else{
g.setColor(0x00ff00);
drawString("最大摧毁数",30,20);
g.setColor(0xffffff);
drawString(v[43]+"个",55-((""+v[43]).length()*6),53);
}
}
else{
//edge(1,40);
//if(!b[15]){
//drawString("高速钢核心",18,52);
//drawString("发送",18,64);
//drawString("OK",24,76);
//drawString("CANCEL",60,76);
//if(b[16])
// drawImage(image[26],16,76-v[52]);
//else
//drawImage(image[26],52,76-v[52]);
//}
//else
//{
//drawString("传输的完成!",36,55);
//drawString("OK",54,73);
//drawImage(image[26],47,73-v[52]);
//}
}
}else
{
g.setColor(v[48]);
drawString("读取错误",30,30);
}
//g.setColor(v[50]);
setSoftLabel(1,"返回");
}
if(v[2] == 4){ //设置界面
g.setColor(0x00, 0x00, 0x00);
g.fillRect(0, 0, 128, 160);
if(txtshowtime<31)
{
txtshowtime++;
}
edge(0,0);
drawImage(image[50],0,15);//上方小区域底线
drawImage(image[50],0,82); //中间区域底线
drawImage(image[52],0,18); //中间 "tank"的标题线
drawImage(image[52],0,85); // 下方"crew"的标题线
drawImage(image[48],70,22);//以下为 文字显示的背景图,兰色 褐色的三角图形 "tank"区域 //HP
drawImage(image[48],70,37);//ATK
drawImage(image[48],70,52);//DEF
drawImage(image[48],70,67);//炮弹图形
drawImage(image[48],70,98);//"crew"区域 的两个文字区域 //DEF
drawImage(image[48],5,98); //ATK
drawImage(image[0],17,35);//坦克身
drawImage(image[1],40,30);//坦克炮管
drawImage(image[41],10,6);//mission //文字图形
drawImage(image[43],75,6);//crew
drawImage(image[42],5,20);//tank 坦克
drawImage(image[45],73,23);//血Hp
drawImage(image[46],70,38);//ATK 攻
drawImage(image[47],75,53);//DEF 防
drawImage(image[44],73,68);//炮弹图形
drawImage(image[43],2,87);//crew 选项
drawImage(image[46],6,98);//ATK 攻
drawImage(image[47],73,98);//DEF 防
g.setColor(v[49]);//红色
g.drawRect(v[41],4,47,9);//画 上方文字的选择框
g.setColor(v[50]);//绿色
drawString("400",100,21);//HP 后的文字
drawString(""+(cPara[v[6]][0]*4/10%10)+(cPara[v[6]][0]*4%10),108,36); //
if((cPara[v[6]][0]*4) > 99)
drawString(""+(cPara[v[6]][0]*4/100%10),101,36); //画ATK 后面的文字
drawString(""+(cPara[v[6]][1]*4/10%10)+(cPara[v[6]][1]*4%10),108,51);
if((cPara[v[6]][1]*4) > 99)
drawString(""+(cPara[v[6]][1]*4/100%10),101,51);//画DEF后面的文字
drawString("10",101,66);//画炮弹后面的文字
drawString(""+cPara[v[6]][0],40,97);//画下方ATK 后面的文字
drawString(""+cPara[v[6]][1],103,97);//画下方 DEF 后面的文字
g.setColor(v[48]);
// if(txtshowtime<30)
//{
setSoftLabel(1,"返回");
setSoftLabel(0,"选择");
// }
if(v[6] == 0)
drawString("普通",33,60);//
if(v[6] == 1)
drawString("力量",33,60);//
if(v[6] == 2)
drawString("防御",33,60);//
if(b[14]){
//edge(1,40);
edge(2,60);
if(v[41] == 7){
drawString("出击?",48,45);
drawString("是",39,73);
drawString("否",75,73);
if(b[16])
drawImage(image[26],31,78-v[52]);//画箭头
else
drawImage(image[26],67,78-v[52]);
}
else{
drawString("普通",45,42);
drawString("力量",45,58);
drawString("防御",45,74);
if(v[6] == 0)
drawImage(image[26],38,47-v[52]);//画箭头
if(v[6] == 1)
drawImage(image[26],38,63-v[52]);
if(v[6] == 2)
drawImage(image[26],38,79-v[52]);
}
}
}
if(v[2] == 5){//游戏中界面
g.setColor(0x00, 0x00, 0x00);
g.fillRect(0, 0, 128, 160);
if(txtshowtime<31)
{
txtshowtime++;
}
int sclist[][] = {{33,33,33,32,32,31,31,30,30,29,29,28,28,27,26,25,25,24,23,22},
{29,28,27,26,25,24,23,23,22,22,21,21,20,19,18,17,16,16,15,14}};
g.setColor(getColorOfRGB(166,202,240));//填充游戏天空的背景颜色 浅蓝色
g.fillRect(0,0,128,62); //填充范围
g.setColor(getColorOfRGB(191,127,63));//填充 游戏地面的颜色 土黄
//g.setColor(getColorOfRGB(255,255,255));
g.fillRect(0,63,128,36); //填充范围
drawImage(image[39],0-v[21],50);//画背景山峰 //连续的山峰 v[21]控制小山的移动
drawImage(image[39],120-v[21],50);
drawImage(image[39],240-v[21],50);
drawImage(image[39],360-v[21],50);//新加上的。出屏幕
drawImage(image[40],176-v[21],78);//画中间的山峰
drawImage(image[40],140-v[21],78);
drawImage(image[40],158-v[21],78);
if(!b[12]){
drawImage(image[40],150-v[21],58);
drawImage(image[40],166-v[21],58);
drawImage(image[40],158-v[21],38);
}
drawImage(image[27],0,99);//画下方血量状态条
g.setColor(getColorOfRGB(166,202,240));//填充玩家的血量颜色
//g.setColor(getColorOfRGB(255,255,255));
g.fillRect(6,118,((v[7]+9)/10),4); //玩家血量的填充范围
g.setColor(getColorOfRGB(255,127,191)); //填充敌人血量的颜色
g.fillRect(82,118,((v[9]+9)/10),4); //敌人血量的填充范围
drawImage(image[0],v[11]-v[21],68);//画坦克身
if(v[14] >= -6)
drawImage(image[1],v[11]+23-v[21],63); //画坦克的炮管 角度1
else if(v[14] >= -24)
drawImage(image[2],v[11]+23-v[21],63); //炮管的不同角度 角度2
else if(v[14] >= -42)
drawImage(image[3],v[11]+23-v[21],63);//角度3
else if(v[14] >= -60)
drawImage(image[4],v[11]+23-v[21],63);//角度4
else if(v[14] >= -78)
drawImage(image[5],v[11]+23-v[21],63);//角度5
else
drawImage(image[6],v[11]+23-v[21],63);//角度6
drawImage(image[v[13]],v[12]-v[21],68);//敌人的炮管 //角度1
if(v[44] > -6)
drawImage(image[9],v[12]-6-v[21],63); //角度2
else if(v[44] > -24)
drawImage(image[10],v[12]-6-v[21],63);//角度3
else if(v[44] > -42)
drawImage(image[11],v[12]-6-v[21],63);//角度4
else if(v[44] > -60)
drawImage(image[12],v[12]-6-v[21],63);//角度5
else
drawImage(image[13],v[12]-6-v[21],63);//角度6
bom();
//--------------------触发事件显示-------------------------------
if(!b[13]){
b[13] = true;
drawImage(image[33],30,48);//画 游戏开始的图片 "start"
v[5] = 5;
}
else if(b[14]){//出现 摧毁数 和 增加 界面
edge(1,40);
if(!b[15]){
drawString("摧毁数",15,42);
drawString("个",90,42);
if(v[9] == 0)
{
drawString("继续",30,60); //增加
}
// else
// drawString("HELP",24,73);
drawString("退出",75,60);
g.setColor(v[50]);//绿色
drawString(Integer.toString(v[35]),(84 - (Integer.toString(v[35]).length() * 6)),42);
if(b[16])
drawImage(image[26],19,65-v[52]);//画箭头
else
drawImage(image[26],66,65-v[52]);
}
else{
drawString("退出?",50,43);
drawString("是",40,61);
drawString("否",76,61);
if(b[16])
drawImage(image[26],32,67-v[52]);//画箭头
else
drawImage(image[26],68,67-v[52]);
}
}
else if(!(b[1] || b[2])){
if(b[9]){//当按 数字键 1时 显示
drawImage(image[29],40,9);//画"sreach"图片
if(v[21] != 0){
drawImage(image[25],8,42);//画小箭头 左边
}
if(v[21] != 240){
drawImage(image[26],106,42); //画小箭头 右边
}
if(b[7]){
v[21]-=10;
}
if(b[8]){
v[21]+=10;
}
}
else{//--------------游戏中显示-----------------
drawImage(image[28],10,10);//画上方的距离 指示,炮角度指示 状态栏
if(v[8] == 0){
drawImage(image[32],16 ,15);//当炮弹用完 画"load" 图片
drawImage(image[24],90,22);//画距离 指示的图片 绿色小方块
drawImage(image[24],97,22);
}
else{
drawImage(image[(v[8]/10)+14],90,22);//画炮弹的个数 从0----9图片
drawImage(image[(v[8]%10)+14],97,22);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -