多平台统一管理软件接口,如何实现多平台统一管理软件接口
373
2022-08-31
Java+swing实现经典贪吃蛇游戏
目录前言主要设计功能截图代码实现总结
前言
贪吃蛇(也叫做贪食蛇)游戏是一款休闲益智类游戏,有PC和手机等多平台版本。既简单又耐玩。该游戏通过控制蛇头方向吃东西,从而使得蛇变得越来越长。
本程序是通过java的swing来实现《贪吃蛇大作战》这款游戏。
主要需求
1、通过上下左右控制蛇的方向,寻找吃的东西,每吃一口就能得到一定的积分,蛇的身体会变长
2、蛇头碰到自己的身体,则算失败
主要设计
1、设置swing的窗体大小
2、随机初始化蛇的位置和食物的位置,且食物不能落在蛇的身体上。
4、添加键盘监听器,监听上下左右的方向键,来控制蛇的上下左右运动
5、蛇运行时,头向前走一步,增加一个头部节点,去掉尾部节点。
6、蛇吃了一个食物后,蛇的尾部节点添加一个节点,食物消失。
7、食物每次被蛇吃掉后,要随机再次生成一个新的食物节点。
8、有个计数器,统计蛇的长度和积分,吃一个食物,蛇的长度+1,积分+10
9、通过按空格开始/暂停游戏
功能截图
代码实现
启动类
public class StartGame {
public static void main(String[] args) {
JFrame jf=new JFrame("贪吃蛇大作战");
jf.setBounds(100, 100, 905, 720);
jf.setResizable(false);
jf.setDefaultCloseOperation(WindowConstants.EXIThttp://_ON_CLOSE);
jf.add(new GamePanel());
jf.setVisible(true);
}
}
游戏核心类
public class GamePanel extends JPanel implements KeyListener,ActionListener{
//蛇的数据结构
static int i=0;
int length;
int[] snakex=new int[http://600];
int[] snakey=new int[600];
String fx;
boolean isStart=false;
boolean isfail=false;
int lx,ly;//吃食物后多出来一个的坐标
//目标的数据结构
int foodx,foody;
//随机数
Random random =new Random();
//计时器
Timer timer=new Timer(100, this);
int score;
public GamePanel(){
init();
//添加键盘监听器
this.addKeyListener(this);
//必须设置可以获得焦点才能监听到键盘事件
this.setFocusable(true);
timer.start();
}
public void init(){
score=0;
length=3;
snakex[0]=100;snakey[0]=100;
snakex[1]=75;snakey[1]=100;
snakex[2]=50;snakey[2]=100;
fx="R";
foodx=25+25*random.nextInt(850/25);
foody=75+25*random.nextInt(600/25);
}
protected void paintComponent(Graphics g) {
super.paintComponent(g);//清屏,这样不会闪烁
this.setBackground(Color.white);
Data.headicno.paintIcon(this, g, 25, 11);
g.setColor(new Color(104,197,107));
g.fillRect(25, 75, 850, 600);
//蛇头的绘制
if(fx.equals("U")){
Data.upicno.paintIcon(this, g, snakex[0], snakey[0]);
}else if(fx.equals("D")){
Data.downicno.paintIcon(this, g, snakex[0], snakey[0]);
}else if(fx.equals("L")){
Data.lefticno.paintIcon(this, g, snakex[0], snakey[0]);
}else if(fx.equals("R")){
Data.righticno.paintIcon(this, g, snakex[0], snakey[0]);
}
//蛇身体绘制
for(int i=1;i Data.bodyicno.paintIcon(this, g, snakex[i], snakey[i]); } //食物的绘制 Data.foodicon.paintIcon(this, g, foodx, foody); //暂停开始状态的绘制 if(isStart==false){ g.setFont(new Font("微软雅黑",Font.BOLD,40)); g.setColor(Color.WHITE); g.drawString("按空格开始/暂停游戏", 275, 350); } //失败情况的绘制 if(isfail==true){ g.setFont(new Font("微软雅黑",Font.BOLD,40)); g.setColor(Color.red); g.drawString("失败!按空格重新开始", 275, 350); } //积分的绘制 g.setColor(Color.PINK); g.setFont(new Font("微软雅黑", Font.ITALIC, 15)); g.drawString("长度: "+length, 800, 30); g.drawString("积分: "+score, 800, 55); } //实现键盘监听的接口方法 @Override public void keyPressed(KeyEvent e) { int keycode=e.getKeyCode(); //空格键暂停或者重开 if(keycode==KeyEvent.VK_SPACE){ if(isfail==true){ System.out.println(1); init(); isfail=false; } else{ System.out.println(2); isStart=!isStart; repaint(); } } //上下左右 if(keycode==KeyEvent.VK_UP){ fx="U"; }else if(keycode==KeyEvent.VK_DOWN){ fx="D"; //System.out.println("down"); }else if(keycode==KeyEvent.VK_LEFT){ fx="L"; }else if(keycode==KeyEvent.VK_RIGHT){ fx="R"; } } @Override public void keyReleased(KeyEvent e) {} @Override public void keyTyped(KeyEvent e){} @Override public void actionPerformed(ActionEvent e) { if(isStart==true&&isfail==false){ //身体移动 lx=snakex[length-1]; ly=snakey[length-1]; for(int i=length-1;i>0;--i){ snakex[i]=snakex[i-1]; snakey[i]=snakey[i-1]; } //头移动 if(fx=="U"){ snakey[0]-=25; if(snakey[0]<75)snakey[0]=650; }else if(fx=="D"){ snakey[0]+=25; if(snakey[0]>650)snakey[0]=75; }else if(fx=="L"){ snakex[0]-=25; if(snakex[0]<25)snakex[0]=850; }else if(fx=="R"){ snakex[0]+=25; if(snakex[0]>850)snakex[0]=25; } //失败判定 for(int i=1;i if(snakex[i]==snakex[0]&&snakey[i]==snakey[0]){ isfail=true; } } //吃食物 if(snakex[0]==foodx&&snakey[0]==foody){ length++; score+=10; snakex[length-1]=lx; snakey[length-1]=ly; foodx=25+25*random.nextInt(850/25); foody=75+25*random.nextInt(600/25); } repaint(); } } } 总结 通过此次的《贪吃蛇大作战》游戏实现,让我对swing的相关知识有了进一步的了解,对java这门语言也有了比以前更深刻的认识。 java的一些基本语法,比如数据类型、运算符、程序流程控制和数组等,理解更加透彻。java最核心的核心就是面向对象思想,对于这一个概念,终于悟到了一些。 以上就是Java+swing实现经典贪吃蛇游戏的详细内容,更多关于Java swing贪吃蛇的资料请关注我们其它相关文章!
Data.bodyicno.paintIcon(this, g, snakex[i], snakey[i]);
}
//食物的绘制
Data.foodicon.paintIcon(this, g, foodx, foody);
//暂停开始状态的绘制
if(isStart==false){
g.setFont(new Font("微软雅黑",Font.BOLD,40));
g.setColor(Color.WHITE);
g.drawString("按空格开始/暂停游戏", 275, 350);
}
//失败情况的绘制
if(isfail==true){
g.setFont(new Font("微软雅黑",Font.BOLD,40));
g.setColor(Color.red);
g.drawString("失败!按空格重新开始", 275, 350);
}
//积分的绘制
g.setColor(Color.PINK);
g.setFont(new Font("微软雅黑", Font.ITALIC, 15));
g.drawString("长度: "+length, 800, 30);
g.drawString("积分: "+score, 800, 55);
}
//实现键盘监听的接口方法
@Override
public void keyPressed(KeyEvent e) {
int keycode=e.getKeyCode();
//空格键暂停或者重开
if(keycode==KeyEvent.VK_SPACE){
if(isfail==true){
System.out.println(1);
init();
isfail=false;
}
else{
System.out.println(2);
isStart=!isStart;
repaint();
}
}
//上下左右
if(keycode==KeyEvent.VK_UP){
fx="U";
}else if(keycode==KeyEvent.VK_DOWN){
fx="D";
//System.out.println("down");
}else if(keycode==KeyEvent.VK_LEFT){
fx="L";
}else if(keycode==KeyEvent.VK_RIGHT){
fx="R";
}
}
@Override
public void keyReleased(KeyEvent e) {}
@Override
public void keyTyped(KeyEvent e){}
@Override
public void actionPerformed(ActionEvent e) {
if(isStart==true&&isfail==false){
//身体移动
lx=snakex[length-1];
ly=snakey[length-1];
for(int i=length-1;i>0;--i){
snakex[i]=snakex[i-1];
snakey[i]=snakey[i-1];
}
//头移动
if(fx=="U"){
snakey[0]-=25;
if(snakey[0]<75)snakey[0]=650;
}else if(fx=="D"){
snakey[0]+=25;
if(snakey[0]>650)snakey[0]=75;
}else if(fx=="L"){
snakex[0]-=25;
if(snakex[0]<25)snakex[0]=850;
}else if(fx=="R"){
snakex[0]+=25;
if(snakex[0]>850)snakex[0]=25;
}
//失败判定
for(int i=1;i if(snakex[i]==snakex[0]&&snakey[i]==snakey[0]){ isfail=true; } } //吃食物 if(snakex[0]==foodx&&snakey[0]==foody){ length++; score+=10; snakex[length-1]=lx; snakey[length-1]=ly; foodx=25+25*random.nextInt(850/25); foody=75+25*random.nextInt(600/25); } repaint(); } } } 总结 通过此次的《贪吃蛇大作战》游戏实现,让我对swing的相关知识有了进一步的了解,对java这门语言也有了比以前更深刻的认识。 java的一些基本语法,比如数据类型、运算符、程序流程控制和数组等,理解更加透彻。java最核心的核心就是面向对象思想,对于这一个概念,终于悟到了一些。 以上就是Java+swing实现经典贪吃蛇游戏的详细内容,更多关于Java swing贪吃蛇的资料请关注我们其它相关文章!
if(snakex[i]==snakex[0]&&snakey[i]==snakey[0]){
isfail=true;
}
}
//吃食物
if(snakex[0]==foodx&&snakey[0]==foody){
length++;
score+=10;
snakex[length-1]=lx;
snakey[length-1]=ly;
foodx=25+25*random.nextInt(850/25);
foody=75+25*random.nextInt(600/25);
}
repaint();
}
}
}
总结
通过此次的《贪吃蛇大作战》游戏实现,让我对swing的相关知识有了进一步的了解,对java这门语言也有了比以前更深刻的认识。
java的一些基本语法,比如数据类型、运算符、程序流程控制和数组等,理解更加透彻。java最核心的核心就是面向对象思想,对于这一个概念,终于悟到了一些。
以上就是Java+swing实现经典贪吃蛇游戏的详细内容,更多关于Java swing贪吃蛇的资料请关注我们其它相关文章!
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~