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

📄 mycanvas.java

📁 Java自己做的小游戏
💻 JAVA
字号:
import java.util.Random;
import javax.microedition.lcdui.*;
public class myCanvas extends Canvas implements Runnable 
{//代码1792
	Random Rd=new Random();//产生随机数
	Thread t=new Thread(this);
	ball Ball=null;
	player Player=null;
	brick Brick[]=null;
	prop Prop[]=null;
	Image bufferImg=null;
	Image backGround=null;
	menuScreen showMenu=null;
	passTest PassTest=null;
	aboutScreen showAbout=null;
	helpScreen showHelp=null;
	Image stop=null;
	logoScreen showLogo=null;
	map Map=null;
	gameOver GameOver=null;
	Graphics bufferG;
	boolean bPass=false;
	boolean bMove=false;
	static boolean  bRun=false;
	static boolean bMakeBg=true;
	static int state=0;//游戏状态0:LOGO状态 1、菜单界面 2、关于界面 3、帮助状态 4、暂停状态 5、游戏中状态6、过关状态 7、游戏失败状态
	static int level=1;
	static int allLevel=8;//总关卡数
	static int brickMap[][];//地图数组
	int upSpeedNum=0;
	int propNum=5;//同时出现道具最大数
	int speed=0;//增加的速度
	int backX=0;
	int backY=0;
	int brickNum=0;
	int ksurplusBrick=0;//剩余砖块
	int backGroundX=0;
	int backGroundY=0;
	public myCanvas()
	{
		setFullScreenMode(true);
		Map=new map();
		bufferImg=Image.createImage(getWidth(),getHeight());
		bufferG=bufferImg.getGraphics();
		try
		{
			stop=Image.createImage("/stop.png");
			backGround=Image.createImage("/backGround.png");
		}
		catch(Exception e)
		{
			e.printStackTrace();
			System.out.println("myCanvas图片错误");
		}
		if(allLevel%2!=0)
		{
			upSpeedNum=(allLevel-1)/4+1;
		}
		else
		{
			upSpeedNum=allLevel/4+1;
		}
		backGroundX=(getWidth()-backGround.getWidth())/2;
		backGroundY=(getHeight()-backGround.getHeight())/2;
		Prop=new prop[propNum];
		Player=new player(this);
		Ball=new ball(this);
		bRun=true;
		t.start();
	}
	public void paint(Graphics g)
	{
		bufferG.setClip(0, 0, getWidth(), getHeight());
		if(state!=4)
		{
			bufferG.setColor(0x000000);
			bufferG.fillRect(0, 0,  getWidth(), getHeight());
		}
		switch(state)
		{
		case 0://LOGO状态
			if(showLogo==null)
				System.out.println("showLogo");
			if(showLogo!=null)
				showLogo.paint(bufferG);
			break;
		case 1://菜单界面
			if(showMenu==null)
				System.out.println("showMenu");
			if(showMenu!=null)
				showMenu.paint(bufferG);
			break;
		case 2://关于界面
			if(showAbout==null)
				System.out.println("showAbout");
			if(showAbout!=null)
				showAbout.paint(bufferG);
			break;
		case 3://帮助状态
			if(showHelp==null)
				System.out.println("showHelp");
			if(showHelp!=null)
				showHelp.paint(bufferG);
			break;
		case 4://暂停状态
			bufferG.setClip(0, 0, this.getWidth(),this.getHeight());
			bufferG.drawImage(stop, 0, 0, 0);
			break;
		case 5://游戏中状态
			try
			{
				bufferG.setClip(0, 0, getWidth(),getHeight());
				if(backGround!=null)
					bufferG.drawImage(backGround, backGroundX, backGroundY, 0);
				for(int i=0;i<brickNum;i++)
				{
					if(Brick[i]!=null)
						Brick[i].paint(bufferG);
				}
				if(Ball!=null)
					Ball.paint(bufferG);
				if(Player!=null)
					Player.paint(bufferG);
				for(int i=0;i<propNum;i++)
				{
					if(Prop[i]!=null)
						Prop[i].paint(bufferG);
				}
			}
			catch(Exception e)
			{
				e.printStackTrace();
				System.out.println("myCanvas.paint.switch.case 5");
			}
			break;
		case 6://过关状态
			if(PassTest==null)
				System.out.println("PassTest");
			if(PassTest!=null)
				PassTest.paint(bufferG);
			break;
		case 7://游戏失败状态
			if(GameOver==null)
				System.out.println("GameOver");
			if(GameOver!=null)
				GameOver.paint(bufferG);
			break;
		case 8://手机条件不满足
			bufferG.setColor(0xffffff);
			bufferG.drawString("您的手机不满足玩此游", 0, 0, 0);
			bufferG.drawString("戏的条件屏幕全屏至少", 0, 15, 0);
			bufferG.drawString("需要180 X 196像素", 0, 30, 0);
			bufferG.drawString("确认或数字5退出程序", 0, 45, 0);
			break;
		}
		g.drawImage(bufferImg, 0, 0, 0);
	}
	public void run() 
	{
		if(getWidth()<180||getHeight()<196)
			state=8;
		while(bRun==true)
		{
			gameLogic();
			repaint();
			try
			{
				Thread.sleep(5);
			}
			catch(Exception e)
			{
			}
		}
	}
	public void gameLogic()
	{
		switch(state)
		{
		case 0://LOGO状态
			if(showLogo==null)
			{
				showLogo=new logoScreen(this);
			}
			break;
		case 1://菜单界面
			if(showAbout!=null)
			{
				showAbout.recycleRes();
				showAbout=null;
			}
			if(GameOver!=null)
			{
				GameOver.recycleRes();
				GameOver=null;
			}
			if(showHelp!=null)
			{
				showHelp.recycleRes();
				showHelp=null;
			}
			if(showLogo!=null)
			{
				showLogo.recycleRes();
				showLogo=null;
			}
			if(showMenu==null)
			{
				showMenu=new menuScreen(this);
			}
			break;
		case 2://关于界面
			if(showMenu!=null)
			{
				showMenu.recycleRes();
				showMenu=null;
			}
			if(showAbout==null)
			{
				showAbout=new aboutScreen(this);
			}
			break;
		case 3://帮助状态
			if(showMenu!=null)
			{
				showMenu.recycleRes();
				showMenu=null;
			}
			if(showLogo!=null)
			{
				showLogo.recycleRes();
				showLogo=null;
			}
			if(showHelp==null)
			{
				showHelp=new helpScreen(this);
			}
			break;
		case 4://暂停状态
			break;
		case 5://游戏中状态
			if(showMenu!=null)
			{
				showMenu.recycleRes();
				showMenu=null;
			}
			if(PassTest!=null)
			{
				PassTest.recycleRes();
				PassTest=null;
			}
			if(bMove==true)
			{
				Ball.move();
			}
			if(bMakeBg==true)
			{
				beBrick();
				bMakeBg=false;
				if(speed==2)
				{
					Player.speed++;
				}
			}
			for(int i=0;i<brickNum;i++)
			{
				if(Brick[i]!=null)
				Ball.atk(Brick[i]);
			}
			for(int i=0;i<brickNum;i++)
			{
				if(Brick[i]!=null&&Brick[i].hp<=0)
				{
					if(Rd.nextInt()%4==2)//一定几率触发
					{
						for(int ii=0;ii<propNum;ii++)
						{
							if(Prop[ii]==null)
							{
								Prop[ii]=new prop(Brick[i]);
								break;
							}
							
						}
					}
					Brick[i].recycleRes();
					Brick[i]=null;
					player.fraction+=33;
					ksurplusBrick--;
					break;
				}
			}
			for(int i=0;i<propNum;i++)
			{
				if(Prop[i]!=null&&Prop[i].propY+2>=backGroundY+backGround.getHeight()-6)
				{
					Prop[i].recycleRes();
					Prop[i]=null;
				}
				else if(Prop[i]!=null)
				{
					Prop[i].move(Player);
				}
			}
			if(ksurplusBrick<=0)
			{
				state=6;
				bPass=true;
			}
			if(Player!=null)
			{
				Player.move();
				Ball.atk(Player);
			}
//			没接住====
			if(Ball.ballY+Ball.ballImg.getHeight()>=backGroundY+backGround.getHeight()-6)
			{
				if(player.playerLv>1)
				{
					player.playerLv--;
				}
				if(player.fraction>=66)
				player.fraction-=66;
				else player.fraction=0;
				player.life--;
				Player.playerX=(getWidth()-Player.playerImg.getWidth())/2;
				if(getHeight()<backGround.getHeight())
					Player.playerY=getHeight()-Player.playerImg.getHeight()-1;
					else
						Player.playerY=backGroundY+backGround.getHeight()-Player.playerImg.getHeight()-7;
				Ball.ballX=Player.playerX+(Player.playerImg.getWidth()-Ball.ballImg.getWidth())/2;
				Ball.ballY=Player.playerY-Ball.ballImg.getHeight();
				bMove=false;
				player.rightMove=false;
				player.leftMove=false;
			}
			if(player.life<=0)
			{
				state=7;
			}
			break;
		case 6://过关状态
			if(bPass==true)
			{
				level++;
				if(level<=allLevel)
				{
					Map.initRes();
				}
				bPass=false;
			}
			for(int i=0;i<propNum;i++)
			{
				if(Prop[i]!=null)
				{
					Prop[i].recycleRes();
					Prop[i]=null;
				}
			}
			player.fractionBuffer=player.fraction;
			if(PassTest==null)
				PassTest=new passTest(this);
			break;
		case 7://游戏失败状态
			if(GameOver==null)
				GameOver=new gameOver(this);
			break;
		case 8://手机条件不满足
			break;
		}
	}
	public void beBrick()
	{
		Player.playerX=(getWidth()-Player.playerImg.getWidth())/2;
		if(getHeight()<backGround.getHeight())
			Player.playerY=getHeight()-Player.playerImg.getHeight()-1;
			else
				Player.playerY=backGroundY+backGround.getHeight()-Player.playerImg.getHeight()-7;
		Ball.ballX=Player.playerX+(Player.playerImg.getWidth()-Ball.ballImg.getWidth())/2;
		Ball.ballY=Player.playerY-Ball.ballImg.getHeight();
		bMove=false;
		Brick=null;
		for(int i=0;i<brickMap.length;i++)
		{
			for(int j=0;j<brickMap[i].length;j++)
			{
				if(brickMap[i][j]!=0)
				{
					brickNum++;
				}
			}
		}
		Brick=new brick[brickNum];
		for(int i=0;i<brickMap.length;i++)
		{
			for(int j=0;j<brickMap[i].length;j++)
			{
				if(brickMap[i][j]!=0&&ksurplusBrick<brickNum&&Brick[ksurplusBrick]==null)
				{
					Brick[ksurplusBrick]=new brick(i,j,brickMap[i][j],this);
					ksurplusBrick++;
				}
			}
		}
	}
	public void tryAgain()
	{
		level=1;
		Map.initRes();
		bMakeBg=true;
		bMove=false;
		speed=0;
		ksurplusBrick=0;
		player.life=3;
		player.playerLv=1;
		player.fraction=0;
		player.fractionBuffer=0;
		Player.playerX=(getWidth()-Player.playerImg.getWidth())/2;
		if(getHeight()<backGround.getHeight())
		Player.playerY=getHeight()-Player.playerImg.getHeight()-1;
		else
			Player.playerY=backGroundY+backGround.getHeight()-Player.playerImg.getHeight()-7;
		Player.initRes();
		Ball.ballX=Player.playerX+(Player.playerImg.getWidth()-Ball.ballImg.getWidth())/2;
		Ball.ballY=Player.playerY-Ball.ballImg.getHeight();
		player.rightMove=false;
		player.leftMove=false;
		Ball.time=200;
		ball.which=1;
		if(allLevel%2!=0)
		{
			upSpeedNum=(allLevel-1)/4+1;
		}
		else
		{
			upSpeedNum=allLevel/4+1;
		}
		for(int i=0;i<propNum;i++)
		{
			if(Prop[i]!=null)
			{
				Prop[i].recycleRes();
				Prop[i]=null;
			}
		}
	}
	public void keyPressed(int keycode)
	{
		switch(keycode)
		{
		case KEY_NUM1:
			if(state==5)
			{
				state=4;
			}
			else if(state==4)
			{
				state=5;
			}
			break;
		case KEY_NUM5:
			switch(state)
			{
				case 0://LOGO状态
					break;
				case 1://菜单界面
					if(showMenu!=null)
					{
						showMenu.processEvent();
					}
					break;
				case 2://关于界面
					if(showAbout!=null)
						showAbout.processEvent();
					break;
				case 3://帮助状态
					if(showHelp!=null)
						showHelp.processEvent();
					break;
				case 4://暂停状态
					break;
				case 5://游戏中状态
					break;
				case 6://过关状态
					if(PassTest!=null)
						PassTest.processEvent();
					break;
				case 7://游戏失败状态
					if(GameOver!=null)
						GameOver.processEvent();
					break;
				case 8:
					bRun=false;
					break;
			}
			break;
		case KEY_NUM4:
			if(state==5)
			{
				if(Player.brickX>0)
				{
					player.leftMove=true;
				}
				else
				{
					player.leftMove=false;
				}
				if(bMove==false)
				{
					if(level==upSpeedNum)
					{
						if(level==upSpeedNum)
						speed++;
						upSpeedNum+=upSpeedNum;
					}
					ball.xSpeed=-(speed+1);
					ball.ySpeed=-speed;
					bMove=true;
				}
				player.rightMove=false;
				if(bMove==false)
					bMove=true;
			}
			break;
		case KEY_NUM6:
			if(state==5)
			{
				if(Player.brickX<this.getWidth()-Player.playerImg.getWidth())
				{
					player.rightMove=true;
				}
				else
				{
					player.rightMove=false;
				}
				if(bMove==false)
				{
					
					if(level==upSpeedNum)
					{
						if(level==upSpeedNum)
						speed++;
						upSpeedNum+=upSpeedNum;
					}
					ball.xSpeed=speed+1;
					ball.ySpeed=-speed;
					bMove=true;
				}
				player.leftMove=false;
			}
			break;
		case KEY_NUM2:
			if(state==1&&showMenu!=null)
			{
				showMenu.processEvent(keycode);
			}
			else if(state==3&&showHelp!=null)
			{
				showHelp.processEvent(keycode);
			}
			break;
		case KEY_NUM8:
			if(state==1&&showMenu!=null)
			{
				showMenu.processEvent(keycode);
			}
			else if(state==3&&showHelp!=null)
			{
				showHelp.processEvent(keycode);
			}
			break;
			default:
				switch(getGameAction(keycode))
				{
				case FIRE:
					switch(state)
					{
						case 0://LOGO状态
							break;
						case 1://菜单界面
							if(showMenu!=null)
							{
								showMenu.processEvent();
							}
							break;
						case 2://关于界面
							if(showAbout!=null)
								showAbout.processEvent();
							break;
						case 3://帮助状态
							if(showHelp!=null)
								showHelp.processEvent();
							break;
						case 4://暂停状态
							break;
						case 5://游戏中状态
							break;
						case 6://过关状态
							if(PassTest!=null)
								PassTest.processEvent();
							break;
						case 7://游戏失败状态
							if(GameOver!=null)
								GameOver.processEvent();
							break;
						case 8:
							bRun=false;
							break;
					}
					break;
				case LEFT:
					if(state==5)
					{
						if(Player.brickX>0)
						{
							player.leftMove=true;
						}
						else
						{
							player.leftMove=false;
						}
						if(bMove==false)
						{
							if(level==upSpeedNum)
							{
								if(level==upSpeedNum)
								speed++;
								upSpeedNum+=upSpeedNum;
							}
							ball.xSpeed=-(speed+1);
							ball.ySpeed=-speed;
							bMove=true;
						}
						player.rightMove=false;
						if(bMove==false)
							bMove=true;
					}
					break;
				case RIGHT:
					if(state==5)
					{
						if(Player.brickX<this.getWidth()-Player.playerImg.getWidth())
						{
							player.rightMove=true;
						}
						else
						{
							player.rightMove=false;
						}
						if(bMove==false)
						{
							
							if(level==upSpeedNum)
							{
								if(level==upSpeedNum)
								speed++;
								upSpeedNum+=upSpeedNum;
							}
							ball.xSpeed=speed+1;
							ball.ySpeed=-speed;
							bMove=true;
						}
						player.leftMove=false;
					}
					break;
				case UP:
					if(state==1&&showMenu!=null)
					{
						showMenu.processEvent(keycode);
					}
					else if(state==3&&showHelp!=null)
					{
						showHelp.processEvent(keycode);
					}
					break;
				case DOWN:
					if(state==1&&showMenu!=null)
					{
						showMenu.processEvent(keycode);
					}
					else if(state==3&&showHelp!=null)
					{
						showHelp.processEvent(keycode);
					}
					break;
				}
		}
	}
	public void keyReleased(int keycode)
	{
		switch(keycode)
		{
		case KEY_NUM4:
			player.leftMove=false;
			break;
		case KEY_NUM6:
			player.rightMove=false;
			break;
		case KEY_NUM2:
		case KEY_NUM8:
			if(state==3&&showHelp!=null)
				showHelp.processEvent(0);
			break;
			default:
				switch(getGameAction(keycode))
				{
				case LEFT:
					player.leftMove=false;
					break;
				case RIGHT:
					player.rightMove=false;
					break;
				case DOWN:
				case UP:
					if(state==3&&showHelp!=null)
					showHelp.processEvent(0);
					break;
				}
		}
	}
}

⌨️ 快捷键说明

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