java 简单贪吃蛇

时间:2023-02-26 07:27:53

1. [代码]java 简单程序     跳至 [1] [全屏预览]
package com.snake;
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
import java.util.*;
public class SnakeGame extends JFrame implements KeyListener{

private int stat=1,direction=0,bodylen=6,headx=7,heady=8,
tailx=1,taily=8,tail,foodx,foody,food;//初始化定义变量
public final int EAST=1,WEST=2,SOUTH=3,NORTH=4;//方向常量
int [][] fillblock=new int [20][20];//定义蛇身所占位置
public SnakeGame() {//构造函数 
super("贪吃蛇");
setSize(510,510);
setLocationRelativeTo(null);
setVisible(true);//设定窗口属性
addKeyListener(this);//添加监听
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
for(int i=1;i<=7;i++) fillblock[i][8]=EAST;//初始化蛇身属性   
direction=EAST;//方向初始化的设置
FoodLocate(); //定位食物  
while (stat==1){
fillblock[headx][heady]=direction;   
switch(direction)
{
 case 1:headx++;break;
 case 2:headx--;break;      
 case 3:heady++;break;
 case 4:heady--;break;  
}//蛇头的前进
if(heady>19||headx>19||tailx>19||taily>19||heady<0||headx<0||tailx<0||taily<0||fillblock[headx][heady]!=0)
{   
stat=0;     
break;  
} //判断游戏是否结束
try
{
Thread.sleep(100); 
}catch(InterruptedException e){}//延迟
fillblock[headx][heady]=direction;
    if(headx==foodx&&heady==foody)
    {//吃到食物  
 FoodLocate();
 food=2;
 try{  
 Thread.sleep(100); 

 catch(InterruptedException e){}//延迟
}
    if(food!=0)food--;    
    else{tail=fillblock[tailx][taily];
    fillblock[tailx][taily]=0;//蛇尾的消除  
    switch(tail)
    {
            case 1:tailx++;break; 
            case 2:tailx--;break; 
            case 3:taily++;break;  
            case 4:taily--;break; 
    }//蛇尾的前进
    }          
    repaint(); 
    }css3
if(stat==0)
 JOptionPane.showMessageDialog(null,"GAME OVER","Game Over",JOptionPane.INFORMATION_MESSAGE);
}http://www.huiyi8.com/moban/​
    public void keyPressed(KeyEvent e)
    {//按键响应
    int keyCode=e.getKeyCode();    
    if(stat==1) switch(keyCode)
    {  
        case KeyEvent.VK_UP:if(direction!=SOUTH) direction=NORTH;break;  
        case KeyEvent.VK_DOWN:if(direction!=NORTH)direction=SOUTH;break;         
        case KeyEvent.VK_LEFT:if(direction!=EAST)direction=WEST;break;    
        case KeyEvent.VK_RIGHT:if (direction!=WEST)direction=EAST;break;        
    }
    }
    public void keyReleased(KeyEvent e){}//空函数
    public void keyTyped(KeyEvent e){} //空函数   
    public void FoodLocate()
    {//定位食物坐标
    do{        
     Random r=new Random();   
     foodx=r.nextInt(20); 
     foody=r.nextInt(20);
      }
    while (fillblock[foodx][foody]!=0);
    }
    public void paint(Graphics g)
    {//画图  
    super.paint(g);
    g.setColor(Color.BLUE);
    for(int i=0;i<20;i++) 
    for(int j=0;j<20;j++)
    if (fillblock[i][j]!=0)
    g.fillRect(25*i+5,25*j+5,24,24);
    g.setColor(Color.RED);
    g.fillRect(foodx*25+5,foody*25+5,24,24);   
    }
    public static void main(String[] args) 
    {//主程序 
    SnakeGame application=new SnakeGame();  
    }
 }

java 简单贪吃蛇的更多相关文章

  1. java实现贪吃蛇游戏

    最简单的4个java类就可以实现贪吃蛇: main函数: package tcs; public class GreedSnake { public static void main(String[] ...

  2. Java实现贪吃蛇游戏【代码】

    花了两个下午写了一个贪吃蛇小游戏,本人想写这游戏很长时间了.作为以前诺基亚手机上的经典游戏,贪吃蛇和俄罗斯方块一样,都曾经在我们的童年给我们带来了很多乐趣.世间万物斗转星移,诺基亚曾经作为手机业的龙头 ...

  3. Java实现贪吃蛇游戏&lpar;含账号注册登录,排行榜功能&rpar;

    这是我第一次工程实践的作业,选题很多,但我只对其中的游戏开发感兴趣,可游戏就两三个类型,最终还是选择了贪吃蛇.其实就贪吃蛇本身的代码实现还算是比较简单的,可是实践要求代码行达到一定数量,所以我就额外给 ...

  4. 用OpenGL简单编写的一个最简单贪吃蛇游戏

    刚学OpenGL的时候,写的一个最简单的贪吃蛇游戏代码 如下: //贪吃蛇游戏 #include<stdio.h> #include<stdlib.h> #include&lt ...

  5. 用Java开发贪吃蛇游戏

    贪吃蛇游戏的设计步骤: Part 1: 设计游戏图纸 画出900*700的白色窗口 在窗口上添加画布 在画布上添加标题 在画布上添加黑色游戏区 Part 2: 放置静态的蛇:一个头.两个身体 加上开始 ...

  6. ege图形库之简单贪吃蛇&lpar;c&plus;&plus;&rpar;

    第二次做动画显示效果的小程序,心血来潮想做下儿时的经典游戏----贪吃蛇.由于时间有限,只是简单地做了基本功能,有时间后再完善更多功能. 由于个人水平有限,可能代码有些地方可以改进.不足之处敬请指出. ...

  7. Java实现贪吃蛇

    游戏界面基本布局 贪吃蛇是基于JFrame的一款小游戏.它主要有两部分组成,一个是显示区域,一个是按钮区域.这两个区域都用JPanel来实现. 首先需要创建一个基于JFrame的类,例如创建一个MyF ...

  8. 用GUI实现java版贪吃蛇小游戏

    项目结构 新建一个JFrame窗口,作为程序入口 public class GameStart{ public static void main(String[] args) { JFrame jFr ...

  9. python版本的简单贪吃蛇

    先看看效果,白色的条是蛇(简单勿怪,有研究的同学请告知做的美观点),做了一个笑脸是糖果,背景弄了一个图, 代码也是从其他人那边弄来的,改了一部分直接可以在window上直接运行 代码如下: #codi ...

随机推荐

  1. adapter&period;notifyDataSetChanged&lpar;&rpar;&semi; 没有反应

    为什么是这样,以下是我总结的一些原因: 1.数据源没有更新,调用notifyDataSetChanged无效. 2.数据源更新了,但是它指向新的引用,调用notifyDataSetChanged无效. ...

  2. Linux网路编程系列-网络I&sol;O模型

    应用程序从网络中拿数据,要经历两个阶段:1.等待数据准备好-分组到达,被拷贝到内核缓冲区,组装数据报:2.数据从内核缓冲区拷贝至用户态应用程序的缓冲区.Unix下五个I/O模型: 阻塞I/O: 进程调 ...

  3. 729 - The Hamming Distance Problem

      // 题意: // 输入两个整数N, H,按照字典序输出所有长度为N,恰好包含H个1的01串 // 规模:1<=H<=N<=16 // 算法A:2^N枚举,输出1的个数为H的.采 ...

  4. HTTP协议-标签简介

    这个系列的文章要讨论的是如何通过ASP.net服务器端技术来优化客户端缓存策略,而且让这种策略变得可配置和可扩展.我们要了解的知识从HTTP协议中相关属性对客户端缓存的影响,到ASP.NET如何控制这 ...

  5. What does wildcard address in InetSocketAddress mean&quest;

    In the docs for the constructor InetSocketAddress(int port) it says: Creates a socket address where ...

  6. BZOJ 1211&colon; &lbrack;HNOI2004&rsqb;树的计数&lpar; 组合数学 &rpar;

    知道prufer序列就能写...就是求个可重集的排列...先判掉奇怪的情况, 然后答案是(N-2)!/π(d[i]-1)! -------------------------------------- ...

  7. javascript时间函数

    //时间函数 var myDate = new Date(); myDate.getYear();        //获取当前年份(2位) myDate.getFullYear();    //获取完 ...

  8. TControl&period;GetDeviceContext会给图形控件建立新的坐标原点和建立新的剪裁区域

    这是取得DC句柄的其中一种方法(会重定义原点和建立新的剪裁区): function TControl.GetDeviceContext(var WindowHandle: HWnd): HDC; be ...

  9. Angular2&period;js——数据显示

    显示数据,即属性绑定机制把数据显示到用户界面上. 在Angular中最典型的数据显示方式,就是把HTML模板中的控件绑定到Angular组件的属性. 接下来介绍几种数据显示的语法和代码片段. 使用插值 ...

  10. JavaWeb三大组件之一Filter知识总结

    [1] Filter简介    > Filter翻译为中文是过滤器的意思.    > Filter是JavaWeb的三大web组件之一Servlet.Filter.Listener    ...