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

📄 gamescreen.java

📁 一个J2ME编译的打地鼠小游戏,供初学者学习
💻 JAVA
📖 第 1 页 / 共 3 页
字号:
			drawSTR("得分:"+score,f1,red,screenW/2-30,screenH/8,bg);
			/******************/
			/*    命中与错失    */
			/*****************/
			drawSTR("连 中:",null,red,screenW/20,screenH/5,bg);
			for(int i=0; i<got; i++){
				bg.drawImage(score_img, screenW/10+(i+1)*score_img.getWidth(), screenH/5, 20);
			}
			drawSTR("miss:",null,blue,screenW/20,screenH/4,bg);
			for(int i=0; i<miss; i++){
				bg.drawImage(score_img, screenW/10+(i+1)*score_img.getWidth(), screenH/4, 20);
			}
			if(sc_y!=0&&Add)
				drawDoubleScore(bg,1);  //双倍加分提示
			if(sc_y!=0&&Minus)
				drawDoubleScore(bg,-1); //双倍减分提示
			/******************/
			/*     游戏任务     */
			/*****************/
			drawSTR(""+job,f1,blue,screenW/10,screenH/8,bg);
			/******************/
			/*     游戏时间     */
			/*****************/
			int t_size = screenW/8;
			bg.setColor(blue);
			bg.fillArc(screenW-t_size-10, screenH/12, t_size, t_size, 0, game_time*3);
			//CPF
			if(show){
			    bg.setColor(0x00ffff);
			    bg.setClip(0, 0, getWidth(), getHeight());
	            bg.drawString("CPS"+cps, 5, 5, Graphics.TOP|Graphics.LEFT);
			}
		}break;
		case game_Pass:{
			if(level>MaxLevel){
				/******************/
				/*      胜利       */
				/*****************/
				bg.setColor(0xff00ff);
			    int y = (screenH-50)/2;
			    bg.fillRect(lx, y, screenW/2, screenH/4);  //从左往右插入的矩形
			    bg.fillRect(rx, y, screenW/2, screenH/4);  //从右往左插入的矩形
			    if(lx>=0){  
				    drawSTR("- YOU WIN -",f1,red,(screenW-78)/2,y+screenH/20,bg);
				    drawSTR("任意键继续",f1,black,screenW/36,(int)(screenH*0.9),bg);
				    if(lx++ > 10)
				    	done = true;
				    //wait = true;
			    }
			}else{
				/******************/
				/*       通关      */
				/*****************/
				bg.setColor(black);
			    int y = (screenH-50)/2;
			    bg.fillRect(lx, y, screenW/2, screenH/4);  //从左往右插入的矩形
			    bg.fillRect(rx, y, screenW/2, screenH/4);  //从右往左插入的矩形
			    if(lx>=0){  
				    drawSTR("- Level Up -",f1,white,(screenW-78)/2,y+screenH/20,bg);
				    drawSTR("任意键继续",f1,black,screenW/36,(int)(screenH*0.9),bg);
				    if(lx++ > 10)
				    	done = true;
				    //wait = true;
			    }	
			}
		}break;
		case game_Pause:{
			/******************/
			/*     游戏暂停     */
			/*****************/
			bg.setColor(red);
			int y = (screenH-50)/2;
			bg.fillRect(lx, y, screenW/2, screenH/4);  //从左往右插入的矩形
			bg.fillRect(rx, y, screenW/2, screenH/4);  //从右往左插入的矩形
			if(lx>=0){  
				drawSTR("- 游戏暂停 -",f1,blue,(screenW-78)/2,y+screenH/20,bg);
				drawSTR("继续游戏",f1,black,screenW/36,(int)(screenH*0.9),bg);
				drawSTR("返回菜单",f1,black,screenW-60,(int)(screenH*0.9),bg);
			}	
		}break;
		case game_Over:{
			if(level<=MaxLevel){
				/******************/
				/*     游戏结束     */
				/*****************/
				bg.setColor(blue);
				int y = (screenH-50)/2;
				bg.fillRect(lx, y, screenW/2, screenH/4);  //从左往右插入的矩形
				bg.fillRect(rx, y, screenW/2, screenH/4);  //从右往左插入的矩形
				if(lx>=0){
					drawSTR("- TIME UP -",f1,red,(screenW-78)/2,y+screenH/20,bg);
					drawSTR("任意键继续",f1,black,screenW/36,(int)(screenH*0.9),bg);
					if(lx++ > 10)
					    done = true;
					//wait = true;
				}	
			}
		}break;
		case game_Setting:{
			bg.setColor(white);
			bg.fillRect(0, 0, screenW, screenH);
			Font f = Font.getFont(Font.FACE_SYSTEM, Font.STYLE_BOLD, Font.SIZE_LARGE);//获取字体
			drawSTR("声音设置",f,black,screenW/2-35,screenH/20,bg);
			if(sound_on_off==true){
				drawSTR("声音:[开]",f1,blue,screenW/2-35,screenH/3,bg);
			}else{
				drawSTR("声音:[关]",f1,blue,screenW/2-35,screenH/3,bg);
			}
			drawSTR("返回",f1,black,screenW/36,(int)(screenH*0.9),bg);
		}break;
		case game_Record:{
			/******************/
			/*     游戏排行     */
			/*****************/
			bg.drawImage(topscore_img, 0, 0, 20);
			Font f = Font.getFont(Font.FACE_SYSTEM, Font.STYLE_BOLD, Font.SIZE_LARGE);//获取字体
			bg.setFont(f);
			bg.setColor(red);  //红色
			bg.drawString("积分榜", (screenW-f.stringWidth("积分榜"))/2, screenH/90, 20);
			try {
				gr.showRecord(bg,screenW,screenH,screenW/6,screenH/5,screenW/2,screenH/8,black,f);  
				drawSTR("返回",f1,black,screenW/36,(int)(screenH*0.9),bg);
			} catch (RecordStoreNotOpenException e) {
				e.printStackTrace();
			} catch (InvalidRecordIDException e) {
				e.printStackTrace();
			} catch (RecordStoreException e) {
				e.printStackTrace();
			} catch (IOException e) {
				e.printStackTrace();
			}
		}break;
		case game_About:{    //游戏帮助界面
			/******************/
			/*     游戏帮助     */
			/*****************/
			bg.setColor(white);
			bg.fillRect(0, 0, screenW, screenH);
			Font f = Font.getFont(Font.FACE_SYSTEM, Font.STYLE_BOLD, Font.SIZE_LARGE);//获取字体
			drawSTR("游戏帮助",f,black,screenW/2-30,screenH/10,bg);
			bg.setColor(blue);
			bg.setFont(f2);
			String help = " 游戏操作:1~9键对应于游戏中9个洞,右软件为暂停,左软键为返回。" +
					      " 游戏规则:在规定时间内完成左上角显示的连击次数 (连续击中3次为一次连击)"+
					      "           - Enjoy!!  ";
			row = screenH/4;
			end = (start+1)*n;
			for(int i=start; i<start+5; i++){
				row += screenH/10;
				String t1 = help.substring(i*n, end);
				drawSTR(t1,f2,blue,screenW/10,row,bg);
				end += n;
			    if(end>=help.length())
					end = help.length();
			}
			int w = screenW/35;
	    	int mx = (screenW-w)/2;
			if(end!=help.length()){
		    	int my = (int)(screenH*0.9);
		    	bg.setColor(blue);
		    	bg.fillTriangle(mx-w/2, my, mx, my+w, mx+w/2, my);
			}
			if(start>0){
		    	int my = (int)(screenH*0.3);
		    	bg.setColor(blue);
		    	bg.fillTriangle(mx-w/2, my, mx+w/2, my, mx, my-w);
			}
			
			//返回按钮
			drawSTR("返回",f1,black,screenW/24,(int)(screenH*0.9),bg);
		}break;
		case game_Quit:{
			bg.setColor(black);
			bg.fillRect(0, 0, screenW, screenH);
		    drawSTR("游戏图片源于网络",f2,73|146<<8|182<<16,
		             screenW/2-f2.stringWidth("游戏图片源于网络")/2,screenH/7,bg);
		    drawSTR("游戏版本:v1.0",f2,73|146<<8|182<<16,
		             screenW/2-f2.stringWidth("游戏版本:v1.0")/2,screenH*2/7,bg);
		    drawSTR("制作者:univasity",f2,73|146<<8|182<<16,
		             screenW/2-f2.stringWidth("制作者:univasity")/2,screenH*3/7,bg);
		    drawSTR("QQ:595920004",f2,73|146<<8|182<<16,
		             screenW/2-f2.stringWidth("QQ:595920004")/2,screenH*4/7,bg);
		    drawSTR("email:",f2,73|146<<8|182<<16,
		             screenW/2-f2.stringWidth("email:")/2,
		              screenH*5/7,bg);
		    drawSTR("joopererer@yahoo.com.cn",f2,73|146<<8|182<<16,
		             screenW/2-f2.stringWidth("joopererer@yahoo.com.cn")/2,
		              screenH*6/7,bg);
		}break;
		}
	}
    /**************/
	/*   画星星    */
	/*************/
	private void drawStart(Graphics bg) {
		if(isHit){
			int x,y;
			int w = starts_img.getWidth();
			x = (int)(Starts_Positions[index][0]*scale_x);
			y = (int)(Starts_Positions[index][1]*scale_y);
			bg.setClip(x, y, w, starts_img.getHeight());
			bg.drawImage(starts_img, x, y, 20);	
		}
	}
	/**************/
	/*   画锤子    */
	/*************/
	private void drawSNK(Graphics bg) {
		if(hasMove){
			int w = snk_img.getWidth()/4;  //图片宽
			int h = snk_img.getHeight();  //图片高
			bg.setClip((int)(Snk_Positions[index][0]*scale_x),
					   (int)(Snk_Positions[index][1]*scale_y), w, h);
			bg.drawImage(snk_img, (int)(Snk_Positions[index][0]*scale_x-frame*w),
					              (int)(Snk_Positions[index][1]*scale_y), 20);
			if(count%speed==0){
			    frame++;  //变换帧   
			}
			count++;
		}
	}
	/*x2*/
	private void drawDoubleScore(Graphics g,int i) {
		bg.setClip(0, 0, screenW, screenH);
		if(i>0){  //加分提示
			g.drawImage(times_2, sc_x, sc_y, 20);
		}else{  //减分提示
			g.drawImage(devide_2, sc_x, sc_y, 20);
		}
	}
	
	/*********************************************************************/
	/*                            游戏线程                                     */
	/*********************************************************************/
	public void run() {
		while(running){
			long startTime = System.currentTimeMillis();
			gameLogic();
		    repaint();
		    if(System.currentTimeMillis() - lastTime > 1000){
		        lastTime = System.currentTimeMillis();
		        cps = second;
		        second = 0;
		        //改变游戏时间
		        if(GameState==game_Start)
		        	game_time-=2;
		    }else{
		        second++;
		    }
		    long takenTime;
		    if((takenTime=System.currentTimeMillis()-startTime) < 1000/CPS){    //FPS
		    	try {
					Thread.sleep(1000/CPS-takenTime);
				} catch (InterruptedException e) {
					e.printStackTrace();
				}
		    }
		}
	}
	
	//来电处理
	public static void phoneIn(){
		if(GameState==game_Start){
			GameState = game_Pause;
		}
	}
	//获取缩放比率
	public static double getScaleX(){
		return scale_x;
	}
	public static double getScaleY(){
		return scale_y;
	}
	
	/*********************************************************************/
	/*                          游戏逻辑判断                                    */
	/*********************************************************************/
	private void gameLogic(){
		switch(GameState){
		case game_Menu:{
		    if(menu_index>4)
		    	menu_index = 0;
		    if(menu_index<0)
		    	menu_index = 4;
		}break;
		case game_Start:{
			if(game_time <= 0){           //游戏时间到达
				if(job==0 && !LevelUp){    //判断是否通关
					LevelUp = true;
					level++;
					GameState = game_Pass;
					done = false;
					lx = -screenW/2;
			        rx = screenW;
			        //sound
			        if(sound_on_off==true)
			            p2.playAudio();
				}else{
					GameState = game_Over;  //游戏结束
			        done = false;
				    lx = -screenW/2;
			        rx = screenW;
			        //sound
			        if(sound_on_off==true)
			            p3.playAudio();
				}
			}
			/*玩家操作*/
			if(!isHit){
			    if(timer==game_sp){
			        mouse.changeFrame();  //变换帧
			        timer=0;
			    }else
				    timer++;  //计时器累加
		    }else{  //当被击中
		    	mouse.setFrame(3);
		    	if(timer==game_sp*6){
		    		mouse.setFrame(17);
		    		isHit = false;
		    		Add = false;
		    		timer = 0;
		    	}else{
		    		timer++;  //计时器累加
		    	}
		    }
			/*是否命中*/
			if(mouse.isOut()&&(mouse.getIndex()==key-49)&&(!isHit)){
				if(frame>=2)
		    		isHit = true;	
			}
			/*锤子逻辑*/
			if(frame>4){
				frame = 0;
				count = 0;  //计数器归零
				hasMove = false;  //恢复键位
				Minus = false;
			}
			/*地鼠*/
			if(level==3){
			    if((rmd.nextInt()>>>1)%10==0)    //1/10几率闪现
			    	if(mouse.getFrame()==2)
			    	    mouse.setFrame(6);
			}
			/*分数记录*/
			if(hasMove)
			    UpdateScore();
			//双倍分数
			if(sc_y>screenH/10)
				sc_y--;
			else
				sc_x = sc_y = 0;
		}break;
		case game_Pass:
			if(lx < 0)
			    lx+=2;
			if(rx > screenW/2)
				rx-=2;
			if(done/*&&(!wait)*/){
				if(level>MaxLevel){
					GameState = game_Over; 
				}else{
				    GameState = game_Start;
				    initGame();
				}
			}

⌨️ 快捷键说明

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