效果展示一、游戏界面
二、得分情况
项目介绍项目背景“贪吃蛇大作战”游戏是一个经典的游戏,它因操作简单、娱乐性强,自从计算机实现以来,深受广大电脑玩家的喜爱,本项目基于java技术,开发了一个 操作简单、界面美观、功能较齐全 的“贪吃蛇”游戏。本游戏的开发旨在帮助学习java技术和了解软件开发流程。
总体需求 本系统主要是完成贪吃蛇游戏的基本操作,用户可自己练习和娱乐。需要满足以下几点要求:
(1)利用方向键来改变蛇的运行方向。
(2)空格键暂停或继续游戏,并在随机的地方产生食物。
(3)吃到食物就变成新的蛇体(蛇身长度变长,游戏继续)。
实现过程(1)绘制窗体对象。
(2)静态ui设计(包括小蛇,食物,游戏区域和标题区域)。
(3)使用键盘监听事件和定时器实现小蛇的移动。
(4)小蛇与食物碰撞的实现。
(5)定义变量存放小蛇长度,遍历数组实现小蛇身体的增加功能。
(6)退出条件:当游戏积分到达指定分数,游戏退出。
代码展示主类 :demo类
package demo;/** * 1.画出窗体对象 * * * @author 青00-java * */public class demo0 { }
mypanel类 构造方法
package demo; import java.awt.color;import java.awt.component;import java.awt.font;import java.awt.graphics;import java.awt.event.actionevent;import java.awt.event.actionlistener;import java.awt.event.keyevent;import java.awt.event.keylistener;import java.util.random; import javax.swing.imageicon;import javax.swing.jpanel;import javax.swing.timer;//画布类public class mypanel extends jpanel implements keylistener,actionlistener{//继承 private static final component this = null;//键盘监听交互接口int length;int score;int[] snakex=new int[500];//坐标int[] snakey=new int[500];string fx;boolean ifstart=false;//定时器timer timer =new timer(100,this);int foodx;int foody;random random =new random(); public mypanel(){ init(); //添加监听事件 this.setfocusable(true); this.addkeylistener(this); score=0;}
初始化方法
public void init(){ length=3; fx="r"; //初始化小蛇的位置 snakex[0]=100; snakey[0]=150; snakex[1]=75; snakey[1]=150; snakex[2]=50; snakey[2]=150; foodx=25+25*random.nextint(57); foody=125+25*random.nextint(27); system.out.println(foodx); system.out.println(foody); timer.start();}
绘制方法
@override protected void paintcomponent(graphics g){//画笔对象 super.paintcomponent(g); //绘制顶部的标题 new imageicon("c:/users/desktop/img/title2.png").painticon(this,g,25,11);//创建对象 //绘制游戏区域 g.fillrect(25, 125, 1450, 700); //绘制小蛇 //蛇头 new imageicon("c:/users/desktop/img/l.png").painticon(this, g, snakex[0], snakey[0]); //蛇身 for(int i=1;i<length;i++){ new imageicon("c:/users/desktop/img/body.png").painticon(this, g, snakex[i], snakey[i]); } //游戏的提示语 if(ifstart==false){ g.setcolor(color.white); g.setfont(new font("微软雅黑",font.bold,40)); g.drawstring("按压空格键继续游戏", 550,500); g.drawstring("无尽模式", 650,400); } //画出食物的位置 new imageicon("c:/users/desktop/img/body.png").painticon(this, g, foodx, foody); } @override//按压 public void keypressed(keyevent e) { int keycode=e.getkeycode(); if(keycode==keyevent.vk_space){ ifstart=!ifstart; } if(ifstart==true){ if(keycode==keyevent.vk_left&&fx!="r"){ fx="l"; }else if(keycode==keyevent.vk_right&&fx!="l"){ fx="r"; }else if(keycode==keyevent.vk_up&&fx!="d"){ fx="u"; }else if(keycode==keyevent.vk_down&&fx!="u"){ fx="d"; } } repaint();}
定时器执行方法
@override public void actionperformed(actionevent e) { //改变蛇的位置 if(ifstart==true){ for(int i=length-1;i>0;i--){ snakex[i]=snakex[i-1]; snakey[i]=snakey[i-1]; } if(fx.equals("l")){ snakex[0]=snakex[0]-25; if(snakex[0]<25){ snakex[0]=1450; } }else if(fx.equals("r")){ snakex[0]=snakex[0]+25; if(snakex[0]>1450){ snakex[0]=25; } }else if(fx.equals("u")){ snakey[0]=snakey[0]-25; if(snakey[0]<120){ snakey[0]=800; } }else if(fx.equals("d")){ snakey[0]=snakey[0]+25; if(snakey[0]>800){ snakey[0]=120; } } //判断是否吃了食物 if(snakex[0]==foodx&&snakey[0]==foody){ length++; score++; if(score==100){ ifstart=!ifstart; } foodx=25+25*random.nextint(57); foody=125+25*random.nextint(27); system.out.print("当前食物坐标("+foodx+","); system.out.print(foody+")"); system.out.println("|||当前分数:"+score+" "); } repaint(); } timer.start(); } @override public void keyreleased(keyevent arg0) { // todo auto-generated method stub } @override public void keytyped(keyevent arg0) { // todo auto-generated method stub }}
框架ui类
package demo; import javax.swing.jframe; public class ui { public static void main(string[] args){ jframe frame=new jframe("无尽版贪吃蛇"); frame.setsize(1500, 900); frame.setlocationrelativeto(null);//居中显示 frame.setdefaultcloseoperation(jframe.exit_on_close); frame.setresizable(true); frame.add(new mypanel()); frame.setvisible(true); } }
项目结构
以上就是java实现贪吃蛇大作战小游戏的代码怎么写的详细内容。