📄 newgame.java
字号:
//NewGame.java;
//功能:新建一个游戏;
//类名:NewGame
//作者:石明华
//完成日期:2007-04-10
import javax.microedition.lcdui.game.*;
import javax.microedition.lcdui.*;
import java.util.Random;
import java.io.*;
import javax.microedition.rms.*;
public class NewGame extends GameCanvas implements Runnable{
public Thread thread;
//有效地图;
private boolean[] cango = {true,true,true,true};
//参数设置;
private int ManSpeed = 0,GSpeed = 0;
//游戏开始开关,地图编号;
public boolean gameflag=true;
private int MapID = 0;
//随机奖励概率;
Random srdm = new Random();
private int scroenum = 0;
//存储游戏相关对象实例初始化;
private static final int wcnt = 5;
private int w=0;
RecordStore recordStroe = null;
protected int[] data = new int[45];
sound s =new sound("D:/shiminghua/j2me_work/SeaGame/res/sound/w.mp3");
//游戏主角生命值,所得分数等参数;
private int hp = 34;
private int scroe = 0;
//游戏主角参照点-起点;
private int drawX = 0,drawY = 0;
//地图可见区域参照点;
private int dx = 0,dy = 0;
//怪物数据初始化;
private int[] gx = new int[wcnt];//怪物起点;
private int[] gy = new int[wcnt];
private int[] alive = new int [wcnt];//存活状态;
private int cnt=0,allded=0,sid=0;
static child_monster mg = new child_monster();
child_monster[] m = new child_monster[wcnt];
//子弹数据初始化;
private int[] tag =new int[wcnt];
private int[] wx = new int[wcnt];//子弹起点;
private int[] wy = new int[wcnt];
private int[] worder= new int[wcnt];
child_weapon[] cw = new child_weapon[wcnt];
//sprite(游戏主角),g1sprite(怪物1)
private Sprite sprite;
//titledImage(地图1),spriteImage(游戏主角),gImage(怪物1),rout1(路1)
private Image titledImage,spriteImage,rout1,rout2,titledImage_2,titledImage_3;
private Graphics g;
//background(地图1),rout1_1(路1);
private TiledLayer background,background_1,background_2,background_3,rout1_1,rout1_2,rout1_3,rout1_4,rout2_1,rout2_2,rout2_3,rout2_4;
private LayerManager layManager;
//精灵序列-游戏主角精灵;
private int speed = 10;
private int left_seq[] = {11,10,9};
private int right_seq[] = {3,4,5};
//地图;(40*8);
private byte[][] titledMap ={{1,2,3,4,5,6,7,8},
{9,10,11,12,13,14,15,16},
{17,18,19,20,21,22,23,24},
{25,26,27,28,29,30,31,32},
{33,34,35,36,37,38,39,40},
{33,33,33,33,33,33,33,33},
{33,33,33,33,33,33,33,33},
{33,33,33,33,33,33,33,33},
{33,33,33,33,33,33,33,33},
{33,33,33,33,33,33,33,33},
{33,33,33,33,33,33,33,33},
{33,33,33,33,33,33,33,33},
{33,33,33,33,33,33,33,33},
{33,33,33,33,33,33,33,33},
{33,33,33,33,33,33,33,33},
{33,33,33,33,33,33,33,33},
{33,33,33,33,33,33,33,33},
{33,33,33,33,33,33,33,33},
{33,33,33,33,33,33,33,33},
{33,33,33,33,33,33,33,33},
{33,33,33,33,33,33,33,33},
{33,33,33,33,33,33,33,33},
{33,33,33,33,33,33,33,33},
{33,33,33,33,33,33,33,33},
{33,33,33,33,33,33,33,33},
{33,33,33,33,33,33,33,33},
{33,33,33,33,33,33,33,33},
{33,33,33,33,33,33,33,33},
{33,33,33,33,33,33,33,33},
{33,33,33,33,33,33,33,33},
{33,33,33,33,33,33,33,33},
{33,33,33,33,33,33,33,33},
{33,33,33,33,33,33,33,33},
{33,33,33,33,33,33,33,33},
{33,33,33,33,33,33,33,33},
{33,33,33,33,33,33,33,33},
{33,33,33,33,33,33,33,33},
{33,33,33,33,33,33,33,33},
{33,33,33,33,33,33,33,33},
{32,32,32,32,32,32,32,32}};
//地图3(40*8);
private byte[][] titledMap_3 = {
{1,1,1,1,1,1,1,1},
{1,1,1,1,1,1,1,1},
{1,1,1,1,1,1,1,1},
{1,1,1,1,1,1,1,1},
{1,1,1,1,1,1,1,1},
{1,1,1,1,1,1,1,1},
{1,1,1,1,1,1,1,1},
{1,1,1,1,1,1,1,1},
{1,1,1,1,1,1,1,1},
{1,1,1,1,1,1,1,1},
{1,1,1,1,1,1,1,1},
{1,1,1,1,1,1,1,1},
{1,1,1,1,1,1,1,1},
{1,1,1,1,1,1,1,1},
{1,1,1,1,1,1,1,1},
{1,1,1,1,1,1,1,1},
{1,1,1,1,1,1,1,1},
{1,1,1,1,1,1,1,1},
{1,1,1,1,1,1,1,1},
{1,1,1,1,1,1,1,1},
{1,1,1,1,1,1,1,1},
{1,1,1,1,1,1,1,1},
{1,1,1,1,1,1,1,1},
{1,1,1,1,1,1,1,1},
{1,2,3,4,5,6,7,8},
{9,10,11,12,13,14,15,16},
{17,18,19,20,21,22,23,24},
{25,26,27,28,29,30,31,32},
{33,34,35,36,37,38,39,40},
{41,42,43,44,45,46,47,48},
{49,50,51,52,53,54,55,56},
{57,58,59,60,61,62,63,64},
{65,66,67,68,69,70,71,72},
{73,74,75,76,77,78,79,80},
{81,82,83,84,85,86,87,88},
{89,90,91,92,93,94,95,96},
{97,98,99,100,101,102,103,104},
{105,106,107,108,109,110,111,112},
{113,114,115,116,117,118,119,120},
{121,122,123,124,125,126,127,127}
};
private byte[][] rout1Map = {{1,1,1,1,1}};
private byte[][] rout2Map = {{1,1,1,1,1}};
protected NewGame() {
super(true);
// TODO Auto-generated constructor stub;
drawX = this.getWidth()/2-32;
drawY = 20;
try{
spriteImage = Image.createImage("/man.png");
titledImage = Image.createImage("/sea1.png");
titledImage_2 = Image.createImage("/sea8.png");
titledImage_3 = Image.createImage("/seaend.png");
rout1 = Image.createImage("/smalltree.PNG");
rout2 = Image.createImage("/smallstons.png");
}catch(Exception e){}
sprite = new Sprite(spriteImage,24,32);//游戏主角精灵;
sprite.setFrameSequence(left_seq);
g = this.getGraphics();
//生成地图;
background_1 = new TiledLayer(8,40,titledImage,40,10);//地图1;
background_2 = new TiledLayer(8,40,titledImage_2,40,10);
background_3 = new TiledLayer(8,40,titledImage_3,40,10);
for(int i=0;i<40;i++){
for(int j=0;j<8;j++){
background_1.setCell(j,i,titledMap[i][j]);
background_2.setCell(j,i,120);
background_3.setCell(j,i,titledMap_3[i][j]);
}
}
background = background_1;
background.move(0,0);
//路;
rout1_1 = new TiledLayer(5,1,rout1,16,15);
rout1_2 = new TiledLayer(5,1,rout1,16,15);
rout1_3 = new TiledLayer(5,1,rout1,16,15);
rout1_4 = new TiledLayer(5,1,rout1,16,15);
rout2_1 = new TiledLayer(5,1,rout2,16,11);
rout2_2 = new TiledLayer(5,1,rout2,16,11);
rout2_3 = new TiledLayer(5,1,rout2,16,11);
rout2_4 = new TiledLayer(5,1,rout2,16,11);
for(int i=0;i<1;i++){
for(int j=0;j<5;j++){
rout1_1.setCell(j,i,rout1Map[i][j]);
rout1_2.setCell(j,i,rout1Map[i][j]);
rout1_3.setCell(j,i,rout1Map[i][j]);
rout1_4.setCell(j,i,rout1Map[i][j]);
rout2_1.setCell(j,i,rout2Map[i][j]);
rout2_2.setCell(j,i,rout2Map[i][j]);
rout2_3.setCell(j,i,rout2Map[i][j]);
rout2_4.setCell(j,i,rout2Map[i][j]);
}
}
//初始化武器;
for(int i=0;i<wcnt;i++){
cw[i] = new child_weapon();
cw[i].run();
wx[i] = 0;
wy[i] = 0;
tag[i] = 0;
alive[i] = 0;
worder[i] = 0;
}
rout1_1.move(0, 100);
rout1_2.move(100, 150);
rout1_3.move(236, 200);
rout1_4.move(0, 250);
rout2_1.move(236,360);
layManager = new LayerManager();
thread = new Thread(this);
thread.start();
}
//按键处理;
public void keyPressed(){
int keyState = getKeyStates();
if((keyState & RIGHT_PRESSED) != 0){//右键;
w=1;
sprite.setFrameSequence(right_seq);
if(dx<320-this.getWidth()){//地图是否到右尽头;
if(drawX<this.getWidth()/2+32)//人物是否走到地图右边缘;
drawX=drawX+speed+ManSpeed;
else
dx=dx+speed+ManSpeed;
}
else
if(drawX<320-this.getWidth()+140)//地图已到右尽头,人物没走到地图右边缘;
drawX=drawX+speed+ManSpeed;
}
if((keyState & LEFT_PRESSED) != 0){//左键
w=0;
sprite.setFrameSequence(left_seq);
if(dx>0){//地图是否到左尽头;
if(drawX>80)//320-this.getWidth())//人物是否走到地图左边缘;
drawX=drawX-speed-ManSpeed;
else
dx=dx-speed-ManSpeed;
}
else
if(drawX>0)//地图已到左尽头,人物没走到地图左边缘;
drawX=drawX-speed-ManSpeed;
}
if((keyState & UP_PRESSED) != 0){//上键
if(dy>0)
if(drawY>20)
drawY=drawY-speed-ManSpeed;
else
dy=dy-speed-ManSpeed;
else
if(drawY>20){
drawY=drawY-speed-ManSpeed;
}
//sprite.setFrameSequence(up_seq);
}
if((keyState & DOWN_PRESSED) != 0){//下键
if(dy<this.getHeight()/2-50)
if(drawY<this.getHeight()-120)
drawY=drawY+speed;
else
dy=dy+speed+ManSpeed;
else
if(drawY<this.getHeight()-50)
drawY=drawY+speed+ManSpeed;
//sprite.setFrameSequence(down_seq);
}
if((keyState & GAME_A_PRESSED) != 0){
if(worder[0] == 0){
wx[0] = drawX + dx;
wy[0] = drawY + dy+16;
tag[0]=w;
worder[0]=1;
}else if(worder[1] == 0){
wx[1] = drawX + dx;
wy[1] = drawY + dy+16;
tag[1]=w;
worder[1]=1;
}else if(worder[2] == 0){
wx[2] = drawX + dx;
wy[2] = drawY + dy+16;
tag[2]=w;
worder[2]=1;
}else if(worder[3] == 0){
wx[3] = drawX + dx;
wy[3] = drawY + dy+16;
tag[3]=w;
worder[3]=1;
}else if(worder[4] == 0){
wx[4] = drawX + dx;
wy[4] = drawY + dy+16;
tag[4]=w;
worder[4]=1;
}
}
}
public void run() {
// TODO Auto-generated method stub
createMap();
InputStream is = getClass().getResourceAsStream("D:/shiminghua/j2me_work/SeaGame/res/sound/w.mp3");
s.playSound(s.createPlayer(is, "mp3", 100));
while(true){
if(gameflag){
// if(dy<this.getHeight()/2-50)//自动向下沉;
// dy=dy+1;
//当当前存活怪物数为0时重新生成怪物;
if(allded <= 0){
for(int j=0;j<cnt;j++){
layManager.remove(m[j].g1sprite);
layManager.remove(m[j].sc);
}
createG();
}
keyPressed();
try{
Thread.sleep(200);
}catch(InterruptedException e){
e.printStackTrace();
}
//游戏主角;
sprite.nextFrame();
sprite.setPosition(drawX+dx,drawY+dy);
//怪物运动路径运算;
calcg();
//检测怪物是否击中游戏主角并计算主角的HP值;
calchp();
//子弹轨迹运算;
calcWAndc();
//地图更换;
if((MapID ==0)&&( scroe>10)){
if(MapID<2){
if(sprite.collidesWith(rout2_1, false)){
changeMap(MapID++);
}
}
}else if((MapID ==1 )&&( scroe>30)){
if(MapID<2){
if(sprite.collidesWith(rout2_1, false)){
changeMap(MapID++);
}
}
}
//图层管理;
layManager.append(sprite);
layManager.append(background);
//设置可见区域;
layManager.setViewWindow(dx,dy,this.getWidth(),this.getHeight());
disp();
}else{
g.setColor(0xffffff);
g.fillRect(sprite.getX()-20, sprite.getY()+10, 70, 20);
g.setColor(0x000000);
g.drawString("You have lost!", sprite.getX()-20, sprite.getY()+10, Graphics.TOP|Graphics.LEFT);
flushGraphics();
break;
}
}
saveScroe();
}
//near(int mx,int my,int ggx,int ggy);
//(mx,my)为游戏主角当前坐标,(ggx,ggy)为怪物当前坐标;
//k为第k个怪物;
//计算怪物与游戏主角的距离;
//作者:石明华
//2007-03-18
protected void near(int mx,int my,int ggx,int ggy,int k){
if(MapID==0){
m[k].MoveSpeed = 1+GSpeed;
}else if(MapID==1){
m[k].MoveSpeed = 2+GSpeed;
}else if(MapID==2){
m[k].MoveSpeed = 3+GSpeed;
}
if(mx>=ggx){
gx[k] = ggx+m[k].MoveSpeed;
}else
gx[k] = ggx-m[k].MoveSpeed;
if(my>=ggy)
gy[k] = ggy+m[k].MoveSpeed;
else
gy[k] = ggy-m[k].MoveSpeed;
}
//isgo(int isgogo);
//isgogo;
//游戏是否开始;
//作者:石明华
//2007-03-18
protected void isgo(int isgogo){
if(isgogo == 1)
gameflag = true;
else
gameflag = false;
}
//calcWxy(int x,int y,int w,int i)计算子弹的轨迹;
//x,y为子弹当前坐标;
//w1为子弹方向(左/右);
//i为第i发子弹;
//作者:石明华
//2007-04-09
protected void calcWxy(int x,int y,int w1,int i){
if(w1 == 0){//左方向;
wx[i] -=10;
}else if(w1 == 1){//右方向;
wx[i] +=10;
}
}
//createG()
//生成怪物实例;
//怪物数量为0到5中的随机个数;
//作者:石明华
//2007-04-09
protected void createG(){
Random rdm = new Random();
//随机生成怪物数量;
cnt = rdm.nextInt(6);
allded = cnt;
//实例化怪物对象数组;
for (int i=0;i<5;i++){
m[i] = new child_monster();
if(MapID == 1){
m[i].CreateAndChangeImg(MapID);
}
if(MapID == 2){
m[i].CreateAndChangeImg(MapID);
}
if(i<cnt){
m[i].run();
alive[i] = 1;}
}
//生成第j个怪物的初始坐标;
for (int j=0;j<cnt;j++){
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -