⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 tkc.java

📁 手机上的坦克大战游戏
💻 JAVA
📖 第 1 页 / 共 4 页
字号:
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 + -