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

📄 gamestart.java

📁 最近弄的一个跨栏小游戏
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
import java.io.IOException;
import java.util.Random;
import javax.microedition.lcdui.Canvas;
import javax.microedition.lcdui.Graphics;
import javax.microedition.lcdui.Image;
import javax.microedition.rms.RecordStoreException;
import javax.microedition.rms.RecordStoreFullException;
import javax.microedition.rms.RecordStoreNotOpenException;


public class GameStart {

	static final int loading      = 0;
	static final int playerSelect = 1;
	static final int pressKey     = 2;
	static final int readyForRace = 3;
	static final int raceBegin    = 4;
	static final int raceEnd      = 5;
	static final int reTry        = 6;
	static final int pause        = 7;
	static final int inputName    = 8;
	
	private int pos[][] = {
			{18,68,21,28},   //红 
			{42,68,21,28},   //2
			{80,68,21,28},   //紫
			{104,69,21,28},  //2
			{62,69,16,12},   //裤子
			{62,82,16,7},    //红
			{62,90,16,7}     //紫
	};
	
	public GameStart(GameScreen gs){
		this.gs = gs;
		state = loading;
		percent = 0;
	}

	public void init(){
		if(state==pause){
			return;
		}
		if(state==inputName){
			selectIndex = 0;
			return;
		}
		if(state!=pressKey && state!=playerSelect && state!=loading)
			state = readyForRace;
		key = 0;
		time = 0;
		score = 0;
		second = 0;
		millis = 0;
		isError = false;
		notSoGood = false;
		showWinner = false;
		allPlayer = GamePlayer.Name.length;
		playerNum = 4;     // 参赛选手数
		if(state!=playerSelect && state!=loading){
			//map
			gmap = new GameMap();
			gmap.setPosition(0, 113);   //初始化地图
			//player
			gplayer = new GamePlayer[playerNum];
			for(int i=0; i<gplayer.length; i++){
				gplayer[i] = new GamePlayer();
				gplayer[i].setPosition(GameScreen.screenW/2-GameMap.runwayWidth*i+8,
	                                                        GameMap.runwayWidth*i+93); //初始化人物坐标
				gplayer[i].setImage(athlete_img[sequence[i]]);
				gplayer[i].setup(sequence[i]);
			}
		}else{
			sequence = new int[playerNum];
		}
		initPic();
	}
	
	private void initPic() {
		try {
			if(bg_img==null)
				bg_img = Image.createImage("/bg0.png");
			if(state==loading){
			    percent += 9;
			    gs.repaint();
			    gs.wait(200);
			}
			athlete_img = new Image[4];
			for(int i=0; i<4; i++){
				if(athlete_img[i]==null){
					athlete_img[i] = Image.createImage("/athlete"+i+".png");
					if(state==loading){
					    percent += 9;
					    gs.repaint();
					    gs.wait(200);
					}
				}
			}
			if(cp_img==null)
				cp_img = Image.createImage("/caipan.png");
			if(state==loading){
			    percent += 9;
			    gs.repaint();
			    gs.wait(200);
			}
			if(text_img==null)
				text_img = Image.createImage("/text.png");
			if(state==loading){
			    percent += 9;
			    gs.repaint();
			    gs.wait(200);
			}
			if(winner_img==null)
			    winner_img = Image.createImage("/winner.png");
			if(state==loading){
			    percent += 9;
			    gs.repaint();
			    gs.wait(200);
			}
			if(step_img==null)
				step_img = Image.createImage("/step.png");
			if(state==loading){
			    percent += 9;
			    gs.repaint();
			    gs.wait(200);
			}
			if(pause_img==null)
				pause_img = Image.createImage("/pause.png");
			if(state==loading){
			    percent += 9;
			    gs.repaint();
			    gs.wait(200);
			}
			if(lp_img==null)
				lp_img = Image.createImage("/pointl.png");
			if(rp_img==null)
				rp_img = Image.createImage("/pointr.png");
			if(state==loading){
			    percent += 10;
			    gs.repaint();
			}
		} catch (IOException e) {
			e.printStackTrace();
		}
	}

	public void paint(Graphics g){
		// 清屏
		g.setClip(0, 0, GameScreen.screenW, GameScreen.screenH);
		g.setColor(0xffffff);
		g.fillRect(0, 0, GameScreen.screenW, GameScreen.screenH);
		
		if(state==loading){
			GameMenu.drawLoading(percent, 28, GameScreen.screenH/2, 120, 10, percent/10, g);
		}
		if(state==playerSelect){
			selectScreen(g);
		}
		if(state==pressKey || state==raceBegin || state==readyForRace || state==pause){
			gmap.drawBackground(g);
			int trans = gplayer[selected].getX()+selected*GameMap.runwayWidth;
			g.translate(-trans+88, 0);
			gmap.draw(g,trans/23-4);
			g.translate(trans-88, 0);
			if(state==readyForRace){    // 预备状态
				g.setClip(GameScreen.screenW/2+20, 60, 24, 48);
			    g.drawImage(cp_img, GameScreen.screenW/2+20, 60, 20);
			    if(isError){
			    	g.setClip((GameScreen.screenW-text_img.getWidth())/2,20,51,17);
			    	g.drawImage(text_img, (GameScreen.screenW-text_img.getWidth())/2, -14, 20);
			    }else if(time>20){
					g.setClip(GameScreen.screenW/2+13, 50, 13, 24);
				    g.drawImage(cp_img, GameScreen.screenW/2+13-24, 50, 20);
				    g.setClip((GameScreen.screenW-text_img.getWidth())/2,20,51,16);
			    	g.drawImage(text_img, (GameScreen.screenW-text_img.getWidth())/2, 2, 20);
				}else if(time>=11){
			    	g.setClip((GameScreen.screenW-text_img.getWidth())/2,20,51,17);
			    	g.drawImage(text_img, (GameScreen.screenW-text_img.getWidth())/2, 20, 20);
			    }
			}
			for(int i=0; i<gplayer.length; i++){
				g.translate(-trans+88, 0);
			    gplayer[i].paint(g);
			    g.translate(trans-88, 0);
			}
			drawMessage(g);   // 绘制比赛信息
			if(state==pressKey)
				drawTips(g);
		}
		if(state==raceEnd){
			if(showWinner){
				drawWinScreen(g);
			}
		}
		if(state==reTry){
			// 帮助界面
			g.setColor(0x000000);
			g.setClip(0, 0, GameScreen.screenW, GameScreen.screenH);
			g.fillRect(0, 0, GameScreen.screenW, GameScreen.screenH);
			g.setColor(0xffffff);
			g.drawString("再来一次?", 60, 80, 20);
			GameMenu.drawIcons(0, 5, GameScreen.screenH-20, g);
			GameMenu.drawIcons(2, GameScreen.screenW-25, GameScreen.screenH-20, g);
		}
		if(state==pause){
			g.drawImage(pause_img, 38, 67, 20);
			g.drawImage(rp_img, 38, selectIndex*23+70, 20);
		}
		if(state==inputName){
			drawTable(g);
		}
	}
	
	// 玩家输入界面
	private void drawTable(Graphics g) {
		g.setColor(0x000000);
		g.fillRect(0, 0, GameScreen.screenW, GameScreen.screenH);
		g.setColor(0xffffff);
		g.drawString("恭喜进入高分榜", 50, 20, 20);
		g.drawString("name:", 45, 65, 20);
		int px = 60;
		int py = 80;
		for(int i=0; i<name.length; i++){
			if(i==selectIndex){
				g.setColor(255,200,200);
				g.fillRect(px-2+10*i, py, 12, 16);
			}
			g.setColor(0xffffff);
			if(i==selectIndex)
				g.setColor(0x000000);
			g.drawString(""+name[i], px+10*i, py, 20);
		}
		GameMenu.drawIcons(0, 5, GameScreen.screenH-20, g);
	}

	// 运动员选择界面
	private void selectScreen(Graphics g) {
		GameMenu.drawBack(0, g);
		g.setColor(0x000000);
		g.drawString("选择你的运动员", 60, 25, 20);
		String name = GamePlayer.Name[selectIndex];
		g.drawString(name, 20, 50, 20);
		g.drawString("国籍:"+GamePlayer.Country[selectIndex], 20, 80, 20);
		g.setColor(0x000000);
		g.drawString("速度:", 20, 100, 20);
		g.setColor(0x00ff00);
		g.fillRoundRect(20, 113, GamePlayer.Speed[selectIndex]*50/12, 10, 5, 5);
		g.setColor(0xffffff);
		g.drawRoundRect(20, 113, 50, 10, 5, 5);
		g.setColor(0x000000);
		g.drawString("力量:", 30, 120, 20);
		g.setColor(0xff0000);
		g.fillRoundRect(30, 133, GamePlayer.Speed[selectIndex]*50/12, 10, 5, 5);
		g.setColor(0xffffff);
		g.drawRoundRect(30, 133, 50, 10, 5, 5);
		g.setColor(0x000000);
		g.drawString("技巧:", 40, 140, 20);
		g.setColor(0x0000ff);
		g.fillRoundRect(40, 153, GamePlayer.Speed[selectIndex]*50/12, 10, 5, 5);
		g.setColor(0xffffff);
		g.drawRoundRect(40, 153, 50, 10, 5, 5);
		if(selectIndex>0)
		    g.drawImage(lp_img, 2+time%4, 80, 20);
		if(selectIndex<GamePlayer.Name.length-1)
			g.drawImage(rp_img, GameScreen.screenW-(14+time%4), 80, 20);
		GameMenu.drawIcons(0, 5, GameScreen.screenH-20, g);
		GameMenu.drawIcons(2, GameScreen.screenW-25, GameScreen.screenH-20, g);
	}

//  游戏提示
	public void drawTips(Graphics g) {
		int x = (GameScreen.screenW-120)/2;
		int y = 50;
		g.setColor(182,73,36);
		g.fillRect(x, y, 120, 140);
		g.setColor(0xffffff);
		g.drawString("跑道编号", x+5, y+5, 20);
		g.drawString("参赛选手", x+65, y+5, 20);
		for(int i=0; i<gplayer.length; i++){
			int pos = y+28*(i+1);
			g.drawLine(x, pos, x+120, pos);
		    g.drawString(""+(i+1), x+12, pos+2, 20);
		    g.drawString(GamePlayer.Name[sequence[i]], x+70, pos+2, 20);
		}
		g.drawLine(x+60, y, x+60, y+140);
		g.setColor(0x000000);
		g.drawRect(x, y, 120, 140);
	}
	
//  游戏信息
	private void drawMessage(Graphics g) {
		// 速度槽
		g.setClip(0, 0, GameScreen.screenW, GameScreen.screenH);
		g.setColor(0xff0000);
		g.fillRoundRect(GameScreen.screenW-70, GameScreen.screenH-20, 
				        (gplayer[selected].getSpeed()*50/gplayer[selected].getMaxSpeed()),
				        6, 8, 10);
		g.setColor(0x000000);
		g.drawRoundRect(GameScreen.screenW-70, GameScreen.screenH-20, 50, 6, 8, 10);
		// 时间
		g.setColor(0xffffff);
		g.drawString(""+second+"."+millis, 74, 83, 20);
		// 选手名字
		g.setColor(0xffffff);
		g.drawString(GamePlayer.Name[sequence[selected]], 6, 85, 20);
	}

//  领奖台画面
	private void drawWinScreen(Graphics g) {
		g.setClip(0, 0, GameScreen.screenW, GameScreen.screenH);
		// 背景
		g.setColor(219,255,219);
		g.fillRect(0, 0, 116, 120);
		g.setColor(0xffffff);
		g.drawRect(0, 0, 116, 120);
		g.setColor(109,109,182);
		for(int i=0; i<winner.length-1; i++){
			g.drawString(GamePlayer.Name[sequence[winner[i]]], 10, 10+30*i, 20);
			int sc = gplayer[winner[i]].getScore();
			g.drawString(""+sc/100+"."+sc%100+"秒", 70, 10+30*i, 20);
		}
		//
		int x = (GameScreen.screenW-step_img.getWidth())/2;
		int y = 120;
		g.drawImage(step_img, x-10, y, 20);
		x += 16;
		for(int k=0; k<3; k++){
			int i = (rmd.nextInt()>>>1)%2;
			int j = 0;
			int border = 20;
			if(winner[k]!=selected){
			    i += 2;
			}
			if(i<=1){
				j = 5;
			}else{
				j = 6;
			}
			if(k==1)
				x -= border;
			if(k==2)
				x += 2*border;
			y = 78+7*k;
			g.setClip(x, y, pos[i][2], pos[i][3]);
			g.drawImage(winner_img, x-pos[i][0], y-pos[i][1], 20);	
			g.setClip(x-1, y+28, pos[j][2], pos[j][3]);
			g.drawImage(winner_img, x-pos[j][0]-1, y-pos[j][1]+28, 20);
			g.setClip(x+1, y+35, pos[4][2], pos[4][3]);
			g.drawImage(winner_img, x-pos[4][0]+1, y-pos[4][1]+35, 20);	
		}
	}

	public void run(){
		doLogic();
	}

//  按键处理
	public void keyPress(int keyCode){
		key = keyCode;
		switch(state){
		case playerSelect:
			if(gs.getGameAction(keyCode)==Canvas.LEFT || keyCode==Canvas.KEY_NUM4)
				selectIndex--;
			if(gs.getGameAction(keyCode)==Canvas.RIGHT || keyCode==Canvas.KEY_NUM6)
				selectIndex++;
			if(gs.getGameAction(keyCode)==Canvas.FIRE || keyCode==Canvas.KEY_NUM5 || keyCode==-6){
				selected(selectIndex);   //选定人物
				state = pressKey;
			    init();
			}
			if(keyCode==-7){
				gs.setGameState(GameScreen.MAINMENU);

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -