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(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。