实验要求:实现贪吃蛇游戏基本功能,屏幕上随机出现一个“食物”,称为豆子,上下左右控制“蛇”的移动,吃到“豆子”以后“蛇”的身体加长一点,得分增加,“蛇”碰到边界或,蛇头与蛇身相撞,蛇死亡,游戏结束。为游戏设计初始欢迎界面,游戏界面,游戏结束界面。
贪吃蛇的设计分为四个板块:游戏界面设计、游戏过程、游戏结束和功能扩展。
游戏界面设计包括界面构造、蛇的构造、食物构造;游戏过程包括蛇的移动、蛇吃食物、碰撞检测;游戏结束包括结束界面;扩展功能包括功能食物、移动速度、得分记录。
首先对蛇的长度以及位置进行设置并设置食物随机出现、定时器:
int snakelong=2;//蛇当前长度 int[] Snakex=new int[100]; int[] Snakey=new int[100]; Random random=new Random(); int foodx; int foody; Timer timer=new Timer(100, this);//定时器 int started=0;//游戏信息 0-未开始 1-开始 2-结束 int fx=1;//蛇的方向 0-左 1-右 2-上 3-下
然后进行贪吃蛇界面的设计:
public void myJFrame() { this.setTitle("贪吃蛇大作战"); this.setSize(800, 600); this.setDefaultCloseOperation(Snake.EXIT_ON_CLOSE);//界面可退出 this.setResizable(false);//界面不能改变 this.addKeyListener(this); this.setVisible(true); // 蛇的初识位置 Snakex[0]=60; Snakey[0]=100; Snakex[1]=40; Snakey[1]=100; // 随机食物的初识位置 foodx=random.nextInt(39); foody=random.nextInt(22); foodx=foodx*20; foody=foody*20+80; }
界面构造、蛇的构造、食物构造:
public void paint(Graphics g) { g.setColor(Color.BLUE); g.fillRect(0, 0, 800, 600); g.setColor(Color.black); g.fillRect(0, 80, 800, 520); for (int i=0;i键盘上上下左右以及游戏的开始以及结束:
@Override public void keyPressed(KeyEvent e) { int key=e.getKeyCode(); if (key==KeyEvent.VK_SPACE) { if (started==0) { started=1; } else if(started==1) { started=0; } else if (started==2) { started=0; snakelong=2;//蛇当前长度 //蛇的初识位置 Snakex[0]=60; Snakey[0]=100; Snakex[1]=40; Snakey[1]= 100; // 随机食物的初识位置 foodx=random.nextInt(39); foody=random.nextInt(22); foodx=foodx*20; foody=foody*20+80; // 初始化方向 fx=1; } repaint(); timer.start(); } else if(key==KeyEvent.VK_LEFT) { if (fx!= 1) { fx=0; } } else if(key==KeyEvent.VK_RIGHT) { if (fx!=0) { fx=1; } } else if(key==KeyEvent.VK_UP) { if (fx!=3) { fx=2; } } else if (key == KeyEvent.VK_DOWN) { if (fx!=2) { fx=3; } } }事件监听:
@Override public void actionPerformed(ActionEvent e) { // 判断游戏是否开始 if (started==1) { // 通过循环控制蛇移动 for (int i=snakelong-1;i>0;i--) { Snakex[i]=Snakex[i-1]; Snakey[i]=Snakey[i-1]; } // 判断蛇移动的方向 if (fx==0) {//蛇的方向 0-左 1-右 2-上 3-下 Snakex[0]=Snakex[0]-20; } else if (fx==1) { Snakex[0]=Snakex[0] + 20; } else if (fx==2) { Snakey[0]=Snakey[0] - 20; } else if (fx==3) { Snakey[0]=Snakey[0] + 20; } // 判断是否撞墙 if (Snakex[0]<0||Snakex[0]>780||Snakey[0]<80||Snakey[0]>580) { started=2; } // 判断蛇是否吃到了食物 if (Snakex[0]==foodx&&Snakey[0]==foody) { snakelong++; foodx=random.nextInt(39); foody=random.nextInt(22); foodx=foodx*20; foody=foody*20+80; System.out.println(foodx +","+foody); } // 判断是否吃到了自己 for (int i=1;i你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧
文章题目:贪吃蛇小游戏-创新互联
当前网址:http://cdkjz.cn/article/hpchj.html