java弹幕小游戏1.0版本
java弹幕小游戏的最初版本,供大家参考,具体内容如下
最近在学习javaSE,根据b站视频老师的讲解,也参考了他的代码,做了一个弹幕小游戏,也增添了一些自己的代码进去,因为只是最简单的游戏体,以后会慢慢做完整,所以如果有错误,或者代码不够整洁的话,可以帮我改正,谢谢啦。
父类
importjava.awt.*; publicclassGameObject{ //游戏物体的父类 Imageimg; doublex,y; intspeed=3; intwidth,height; publicvoiddrawSelf(Graphicsg){ g.drawImage(img,(int)x,(int)y,null); } publicGameObject(Imageimg,doublex,doubley,intX_speed,intY_speed,intwidth,intheight){ this.img=img; this.x=x; this.y=y; this.speed=speed; this.width=width; this.height=height; } publicGameObject(Imageimg,doublex,doubley){ this.img=img; this.x=x; this.y=y; } publicGameObject(){} //返回物体所在的矩形,便于后续的碰撞检测 publicRectanglegetRect(){ returnnewRectangle((int)x,(int)y,width,height); } }
弹幕类
importcom.sun.xml.internal.ws.model.wsdl.WSDLPortProperties; importjava.awt.*; publicclassShellextendsGameObject{ doubledegree; publicShell(){ x=200; y=200; width=10; height=10; speed=2; speed=2; //弧度 degree=Math.random()*Math.PI*2; } publicvoiddraw(Graphicsg){ Colorc=g.getColor(); g.setColor(Color.YELLOW); g.fillOval((int)x,(int)y,width,height); //炮弹沿着任意角度去飞 x+=speed*Math.cos(degree); y+=speed*Math.sin(degree); if(x<0||x>Constant.GAME_WIDTH-width){ degree=Math.PI-degree; } if(y<40||y>Constant.GAME_HEIGHT-height){ degree=-degree; } g.setColor(c); } }
飞机类
importjava.awt.*; importjava.awt.event.KeyAdapter; importjava.awt.event.KeyEvent; publicclassPlaneextendsGameObject{ booleanleft,right,up,down; booleanlive=true;//飞机是否活着 booleanleftflag,rightflag,upflag,downflag;//这些布尔值判断当碰到上下左右的边框时的状态 //如果活着画出来 publicvoiddrawSelf(Graphicsg){ if(live){ g.drawImage(img,(int)x,(int)y,null); //根据方向进行不同的移动 if(left){ x-=speed; } if(right){ x+=speed; } if(up){ y-=speed; } if(down){ y+=speed; } } } publicPlane(Imageimg,doublex,doubley){ this.img=img; this.x=x; this.y=y; this.speed=3; this.width=img.getWidth(null); this.height=img.getHeight(null); } //按下某个键,增加相应的方向 publicvoidaddDirection(KeyEvente){ switch(e.getKeyCode()){ caseKeyEvent.VK_LEFT: left=true; break; caseKeyEvent.VK_UP: up=true; break; caseKeyEvent.VK_RIGHT: right=true; break; caseKeyEvent.VK_DOWN: down=true; break; } } //按下某个键,取消相应的方向 publicvoidminusDirection(KeyEvente){ switch(e.getKeyCode()){ caseKeyEvent.VK_LEFT: left=false; break; caseKeyEvent.VK_UP: up=false; break; caseKeyEvent.VK_RIGHT: right=false; break; caseKeyEvent.VK_DOWN: down=false; break; } } }
爆炸类
importjava.awt.*; //爆炸类 publicclassExplode{ doublex,y;//爆炸的位置 staticImage[]imgs=newImage[16]; static{ for(inti=0;i<16;i++){ imgs[i]=PlayGameFrame.GameUtil.getImage("image/explode/e"+(i+1)+".gif"); imgs[i].getWidth(null); } } intcount; publicvoiddraw(Graphicsg){ if(count<=15){ g.drawImage(imgs[count],(int)x,(int)y,null); count++; } } publicExplode(doublex,doubley){ this.x=x; this.y=y; } }
常量类
publicclassConstant{ publicstaticfinalintGAME_WIDTH=500; publicstaticfinalintGAME_HEIGHT=500; }
主类
importjdk.internal.cmm.SystemResourcePressureImpl; importjavax.imageio.ImageIO; importjavax.swing.*; importjava.awt.*; importjava.awt.event.KeyAdapter; importjava.awt.event.KeyEvent; importjava.awt.event.WindowAdapter; importjava.awt.event.WindowEvent; importjava.awt.image.BufferedImage; importjava.io.IOException; importjava.net.URL; importjava.awt.Rectangle; importjava.util.Date; /** *飞机游戏的主窗口 */ classPlayGameFrameextendsFrame{ ImageplaneImg=GameUtil.getImage("image/plane.png"); Imagenightsky=GameUtil.getImage("image/nightsky.jpg"); //定义飞机的坐标 Planeplane=newPlane(planeImg,250,250); //定义炮弹 Shell[]shells=newShell[50]; Explodeboom; DatestartTime=newDate(); DateendTime; intperiod;//游戏持续的时间 /** *画图 */ @Override publicvoidpaint(Graphicsg){//自动被调用,g这个变量相当于一个画笔 Colorc=g.getColor(); super.paint(g);//防止黑屏 g.drawImage(nightsky,0,0,null); plane.drawSelf(g);//画飞机 if(plane.x<=Constant.GAME_WIDTH-plane.width&&plane.x>=30&&plane.y<=Constant.GAME_HEIGHT-30&&plane.y>=0)plane.speed=10; elseplane.speed=-plane.speed; //画出所有的炮弹 for(inti=0;i因为是初学,还有很多地方都不会,代码也写得不到位,我会慢慢学习并改正。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。