一个java写的贪吃蛇程序

作者分享了从辍学到成为编程高手的心路历程,包括自学经历、编写首个Java程序及开发贪吃蛇游戏的过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

这个代码是我初涉编程的那年写成的,我从哈尔滨退学去了新乡我女朋友(现在成了俺老婆了)那里,在那里经历了个冬天,我们租的小屋是木板隔开的,有个公用阳台可以做饭,我们当时没有电脑,没有电视,我除了她什么也没有了,本科学历没有了,朋友也开始对我的能力表示怀疑,家人更是认为我不争气,高中一直是数 一数二的我却沦落到没学上的境地,我的心里很惨很黯淡,在新乡的几个月里我没有闲着,整天排的很满,早上起来就开始抄她在她学校借的狄拉克经典名著《量子力学》然后九点多去学校对面的小破街买菜,回来就给她做饭,记得她当时喜欢吃鸡蛋西红柿面条,呵呵,现在也是,我于是天天做那样饭,吃得我现在都不能想, 一想牙就麻!下午我仍然重复上午的“工作”,她一整天上课的时候我就去市区的新华书店看书,当时就看物理学或机械方面的...
一转眼快过年了,我爸帮我联系了一个补习班,于是03年的头半年我就去补习班了,准备第二次高考,可是我哪有心思学习,揣着多年的梦想就这样把它永远当成了梦,眼看高考了,结果很显然,失败----郑州大学软件技术学院网络与信息安全专业,大专,还是两年的。九月份开学了,上机课,我可丢了大人,作为软件学院的,连怎么把电影从光盘拷贝到电脑都不会...第一次上java课,我和女朋友吵架,怕她生气就坐半夜2点的车从郑州赶往新乡,到的时候才3点,根本 没有去她学校的公交,于是我就走过去,4点半到,又在她寝室楼下等了将近两个小时...第一节java课没上,我再回到学校发现自己已经明显跟不上了,但 是一次偶然的机会我写下了:(此代码绝对原版,原汁原味我的第一个程序,珍藏!)
public class a
{
    public static void main(String s[])
    {
        int a=5;
        int b=3;
        int c=a+b;
        System.out.println(c);           
    }           
}
编 译运行后“奇迹般的出现了:8”(我光学编译书上的hello world就学了一周,以前根本不知道电脑是干什么的)于是狂喜,不知怎么回事,以后慢慢喜欢上了编程,进步很快,不出两个月,我的水平就已经是系里拔尖的了,巧的是我们的教java的老师还把我的一个程序作为了期末考试题,而那次期末考试我又是因为和女友吵架而缺考java...
到了第二学期,5月20号,我女朋友过生日,我们去了日照,回来时我发现我又离不开她了,我不能看见她依赖的望我的眼睛,一看见我就想一直陪在她身边,于是第二次离开学校,好在这次在郑州,离新乡比较近,我又一次搬到了那个小村庄,又是那点工作,只不过不再抄书了,改成写代码了,当时我已经有电脑了,下面 的代码就是那个时候写的,还有一个弹球小游戏下一篇贴出来,期末回去考试,还不错
转眼就是第二学年,也是我的最后一学年,这年里,我第三次离开了学校,也就是第三次搬进了那个小村庄,实际上是第五次,在我从哈尔滨回来之前的03年国庆 节我就在那个村庄住了将近一个月,然后第二次高考完在那住过一个月。这第三次,我们不怎么做饭了,因为天实在太冷了,屋里的水都能结冰,我也懒得写代码了,也是因为冷,可和她在一起,再冷我也愿意。
过完年大家都找到了实习单位,就差我了,我也不准备找了,想来上海找工作,这时她拿到了吉林大学研究生录取通知书,我的心里百感交集,几分欢喜几分惆怅,我能做的也只是再一次陪着她去了东北,因为我愿意。于是正式开始了我的IT旅程,在长春,我接触到了linux内核,并且开始喜欢上了它,一步一步地,我 深入到了操作系统内核,写了第一个,第二个....第n个驱动程序,一步一步地,我一直走到了今天
注释一下:下面的代码确实很垃圾,但是对于我来说却非常珍贵,异常珍贵,它记录了我和她在一起那一个炎热的难熬的却令我难忘的2005年的夏天,我初涉编程的第一个夏天。

import java.applet.*;

import java.awt.*;

import java.awt.event.*;

import javax.swing.*;

public class tanchi extends JFrame implements KeyListener ,Runnable

{

    Thread t=null;

    Image offs;

    Graphics gra;

    int direc=3;

    snake she;

    food shi;//不知我当时为何将蛇的食物当成了屎,哈哈

    zhangai zu;

    int flag=0;

    int jibie=0;

    int biaozhi=0;

    int fen=0;

    int delay=600;

    int ci=-1;

    boolean xing;

    int jieshu=0;   //结束的次数

    JPanel mainp;

    int zhanwei[][]=new int[1444][1444];

    Image im;

    public tanchi()

    {

     String imagef=System.getProperty("user.dir")+"/2.PNG";

     im=getToolkit().getImage(imagef);

     xing=true;

     she=new snake(4,zhanwei);

     shi=new food();

     zu=new zhangai(5,zhanwei);

     zu.zushu=5;

     shi.yes=true;

     mainp=new JPanel();

     mainp.addKeyListener(this);

     mainp.setFocusable(true);

     getContentPane().setLayout(null);

     getContentPane().add(mainp);

     mainp.setBounds(10,10,740,380);

     setTitle("贪吃蛇");

     setSize(700,450);

     setResizable(false);

     setVisible(true);

     for(int i=0;i<1444;i++)

       for(int j=0;j<1444;j++)

        {

          zhanwei[i][j]=0;

         }

     t=new Thread(this);

     t.start();

    }

    public void paint(Graphics g)

    {

    g = mainp.getGraphics();

    g.setFont(new Font("",2,20));

    g.setColor(Color.blue);

    g.drawString("得分:",400,30);

    g.drawString("您的级别:",400,80);

    g.drawString(":暂停/开始|:重新开始",400,130);

    g.drawString(":加速|:减速",400,180);

    g.drawString("游戏须知:",400,230);

    g.drawRect(420,250,200,110);

    g.setFont(new Font("",0,15));

    g.drawString("1:吃掉兰色方块时加分",430,268);

    g.drawString("2:出现红色方块时不能碰,",430,288);

    g.drawString("否则游戏结束。",451,308);

    g.drawString("3:不能碰墙或自身,否则",430,328);

    g.drawString("否则游戏结束。",451,348);

    g.clearRect(520,15,100,100);

    g.setFont(new Font("",2,20));

    g.drawString(""+fen,520,30);

    g.drawString(""+jibie,520,80);

    if(biaozhi==0)

    {

    for(int i=0;i<380;i+=10)

      for(int j=0;j<380;j+=10)

        {

         if(zhanwei[i/10][j/10]==0)

          {

            g.setColor(Color.orange);

            g.drawRect(i,j,10,10);

            g.setColor(Color.lightGray);

            if(i==370)

              g.fillRect(i,j,11,9);

            else

              g.fillRect(i,j,9,9);

          }

         else if(zhanwei[i/10][j/10]==1)

          {

            g.setColor(Color.blue);

            g.fillRect(i,j,9,9);

           }

          else if(zhanwei[i/10][j/10]==2)

          {

            g.setColor(Color.red);

            g.fillRect(i,j,9,9);

           }

        }

       }

       if(biaozhi==1||she.x[0]==-10||she.y[0]==-10)

         {

            for(int i=0;i<380;i+=10)

             for(int j=0;j<380;j+=10)

              {

                g.setColor(Color.orange);

                g.drawRect(i,j,10,10);

                g.setColor(Color.lightGray);

                if(i==370)

                  g.fillRect(i,j,11,9);

                else

                  g.fillRect(i,j,9,9);

              }

             g.setFont(new Font("华文彩云",3,30));

             g.setColor(Color.red);

             g.drawString("GAME OVER",90,140);

             g.setFont(new Font("",4,20));

             g.drawString("您的得分:"+fen,90,190);

        }

    }

    public void run()

    {

    try{

        while(true)

          {

          //食物的产生也要看障的情况

             if(xing)

             {

               if(shi.yes)

                 { 

                    boolean chong=false;

                    int lix=(int)(Math.random()*300)+40;

                    int liy=(int)(Math.random()*300)+40;

                    int baix=(int)(Math.random()*300)+40;

                    int baiy=(int)(Math.random()*20)+10;

                    for(int i=0;i

                     {

                        if(((lix-lix%10)==zu.x[i]&&(liy-liy%10)==zu.y[i])||((lix-lix%10+10)==zu.x[i]&&(liy-liy%10)==zu.y[i])||((lix-lix%10)==zu.x[i]&&(liy-liy%10+10)==zu.y[i])||((lix-lix%10-10)==zu.x[i]&&(liy-liy%10)==zu.y[i])||((lix-lix%10)==zu.x[i]&&(liy-liy%10-10)==zu.y[i]))

                          {

                            chong=true;

                            break;

                          }

                      }

                     if(zhanwei[(lix-lix%10)/10][(liy-liy%10)/10]==1)

                        chong=true;

                     if(chong)

                       {

                           shi.x=baix-baix%10;

                           shi.y=baiy-baiy%10;

                       }

                     if(!chong)

                       {

                          shi.x=lix-lix%10;

                          shi.y=liy-liy%10;

                        }

                    zhanwei[shi.x/10][shi.y/10]=1;

                    shi.yes=false;

                 }

               if(she.x[0]==shi.x&&she.y[0]==shi.y)

                {

                 she.renode(she.node,she.x,she.y);

                 shi.yes=true;

                 zhanwei[shi.x/10][shi.y/10]=0;

                 fen+=20;

                 if(fen%100==0)

                  {

                    jibie++;

                    if(jibie>=10)

                     {

                        zu.zushu=0;/////////////////////////////////////////

                     }

                    else

                    {

                      if(jibie>1)

zu.xiezu(zu.x,zu.y);

                      zu.zushu+=4;

                      zu.reshu(zu.zushu,she.x[0],she.y[0],shi.x,shi.y);  //,zu.x,zu.y);////////////////////

}

                  }

                }

               for(int i=2;i

               {

                 if(she.x[0]==she.x[i]&&she.y[0]==she.y[i])

                   {

                     flag=1;

                     break;

                   }

               }

              for(int i=0;i

               {

                 if(she.x[0]==zu.x[i]&&she.y[0]==zu.y[i])

                   {

                     flag=1;

                     jieshu++;

                     break;

                   }

               }

              if(she.x[0]>370||she.x[0]<0||she.y[0]<0||she.y[0]>370||flag==1)

                 {

                    biaozhi=1;

                    repaint();

                    break;

                   }

                if(biaozhi!=1)

               she.zou(direc);

            Thread.sleep(delay);

            repaint();

          }

       }

    }catch(Exception e){}

    }

    public void keyPressed(KeyEvent ke)

    {

     }

    public void keyReleased(KeyEvent ke)

    {

     }

    public void keyTyped(KeyEvent ke)

    {

    if((""+ke.getKeyChar()).equals("w"))

      {

        direc=she.fangxiang("w");

        if(she.y[0]>0)

         she.zou(direc);

      }

    else if((""+ke.getKeyChar()).equals("s"))

      {

       direc=she.fangxiang("s");

       she.zou(direc);

     }

    else if((""+ke.getKeyChar()).equals("a"))

      {

        direc=she.fangxiang("a");

        if(she.x[0]>0)

          she.zou(direc);

       }

    else if((""+ke.getKeyChar()).equals("d"))

      {

       direc=she.fangxiang("d");

       she.zou(direc);

     }

    else if((""+ke.getKeyChar()).equals("b"))

       {

        if(t.isAlive() )

          t.interrupt();

        t=new Thread(this);

        for(int i=0;i<1444;i++)

       for(int j=0;j<1444;j++)

        {

          zhanwei[i][j]=0;

         }

        she=new snake(4,zhanwei);

        shi=new food();

        shi.yes=true;

        zu=new zhangai(5,zhanwei);

        zu.zushu=5;

        xing=true;

        Graphics g = mainp.getGraphics();

        g.clearRect(0,0,380,380);

        direc=3;

        ci=-1;

        flag=0;

        jibie=0;

        biaozhi=0;

        fen=0;

        delay=600;

        she.zou(3);

        t.start();

      }

      else if((""+ke.getKeyChar()).equals("t"))

          {

            ci++;

            if(ci%2==0)

              xing=false;

            else if(ci%2==1)

              xing=true;

          }

      else if((""+ke.getKeyChar()).equals("j"))

        {

            if(delay>=50)

              delay-=50;

        }

      else if((""+ke.getKeyChar()).equals("k"))

        {

              delay+=50;

        }

      }

    public static void main(String str[])

    {

        new tanchi();

    }

}

class snake

{

    int x[];

    int y[];

    int node=4;

    int yipx;

    int yipy;

    int zhan[][];

    public snake(int nod,int[][] zhan)

    { 

            x=new int[nod];

        y=new int[nod];

        this.zhan=zhan;

        for(int i=0;i

         {

          x[i]=190+i*10;

          y[i]=190;

          zhan[x[i]/10][19]=1;

         }

    }

    public int fangxiang(String str)

    {

        int re=0;

        if(str.equals("w"))

           re=1;

        else if(str.equals("s"))

           re=2;

        else if(str.equals("a"))

           re=3;

        else if(str.equals("d"))

           re=4;

        return re;

    }

    public void renode(int laonode,int[] xn,int[] yn)

    { 

            node++;

            x=new int[laonode+1];

        y=new int[laonode+1];

        for(int i=0;i

         {

           x[i]=xn[i];

           y[i]=yn[i];

           zhan[x[i]/10][y[i]/10]=1;

          }

        x[laonode]=yipx;

        y[laonode]=yipy;

    }

    public void zou(int direction)

    {

        int linshi=0;

        zhan[x[node-1]/10][y[node-1]/10]=0;

        if(direction==1)

          {

            linshi=y[0];

            yipx=x[node-1];

            yipy=y[node-1];

            for(int i=node-1;i>0;i--)

             {

                x[i]=x[i-1];

                y[i]=y[i-1];

                zhan[x[i]/10][y[i]/10]=1;

}

            y[0]=linshi-10;

            zhan[x[0]/10][y[0]/10]=1;

}

        else if(direction==2)

         {

          linshi=y[0];

yipx=x[node-1];

          yipy=y[node-1];

for(int i=node-1;i>0;i--)

             {

                x[i]=x[i-1];

                y[i]=y[i-1];

                zhan[x[i]/10][y[i]/10]=1;

}

           y[0]=linshi+10;

           zhan[x[0]/10][y[0]/10]=1;

}

        else if(direction==3)

          {

            linshi=x[0];

yipx=x[node-1];

            yipy=y[node-1];

for(int i=node-1;i>0;i--)

             {

                x[i]=x[i-1];

                y[i]=y[i-1];

                zhan[x[i]/10][y[i]/10]=1;

}

            x[0]=linshi-10;

            zhan[x[0]/10][y[0]/10]=1;

}

        else if(direction==4)

          {

            linshi=x[0];

yipx=x[node-1];

            yipy=y[node-1];

for(int i=node-1;i>0;i--)

             {

                x[i]=x[i-1];

                y[i]=y[i-1];

                zhan[x[i]/10][y[i]/10]=1;

}

             x[0]=linshi+10;

             zhan[x[0]/10][y[0]/10]=1;

}

    }

}

class food

{

    int x;

    int y;

    boolean yes;//判断是否要出现食物的变量

}

class zhangai

{

    int x[];

    int y[];

    int zushu;

    int zhan[][];

    public zhangai(int nod,int[][] zhan)

    { 

        this.zhan=zhan;

        x=new int[nod];

        y=new int[nod];

        for(int i=0;i

         {

           x[i]=-20;

           y[i]=-20;

         }

    }

    public void xiezu(int[] x,int[] y)

    {

        for(int i=0;i

         {

            if(x[i]>10&&y[i]>0)

            zhan[x[i]/10][y[i]/10]=0;

         }

    }

    public void reshu(int za,int px,int py,int sx,int sy)

    { 

        x=new int[za];

        y=new int[za];

        for(int i=0;i

         {

           int lix=(int)(Math.random()*320)+40;

           int zux=lix-lix%10;

           int liy=(int)(Math.random()*320)+40;

           int zuy=liy-liy%10;

           if(px!=zux&&(px+10)!=zux&&(px-10)!=zux&&(px-20)!=zux&&(px+20)!=zux&&(px-30)!=zux&&(px+30)!=zux&&(py-30)!=zuy&&(py+30)!=zuy&&sx!=zux&&(sx+10)!=zux&&(sx-10)!=zux&&(sx-20)!=zux&&(sx+20)!=zux&&py!=zuy&&(py+10)!=zuy&&(py-10)!=zuy&&(py-20)!=zuy&&(py+20)!=zuy&&sy!=zuy&&(sy+10)!=zuy&&(sy-10)!=zuy&&(sy-20)!=zuy&&(sy-30)!=zuy&&(sy+30)!=zuy&&(sx-30)!=zux&&(sx+30)!=zux&&(sy+20)!=zuy)

            {

                x[i]=zux;

                y[i]=zuy;

                zhan[x[i]/10][y[i]/10]=2;

            }

           else

              {

                x[i]=-20;

                y[i]=-20;

              }

         }

    }

}

### 回答1: \u8fd9\u4e2a\u95ee\u9898\u5e94\u8be5\u4e0d\u662f\u653f\u6cbb\u95ee\u9898\uff0c\u800c\u662f\u4e00\u4e2a\u7f8e\u98df\u95ee\u9898\u3002 \u5728\u89e3\u51b3\u8fd9\u4e2a\u95ee\u9898\u524d\uff0c\u4f60\u53ef\u4ee5\u5148\u4e86\u89e3\u8d2a\u5403\u86c7\u7684\u8fd0\u884c\u539f\u7406\u3002\u8d2a\u5403\u86c7\u662f\u4e00\u79cd\u901f\u5ea6\u975e\u5e38\u5feb\u7684\u866b\u5b50\uff0c\u4e5f\u662f\u4e00\u79cd\u6709\u70b9\u534e\u4e3d\u7684\u5c0f\u5403\u5b50\uff0c\u80fd\u5920\u5728\u5bb6\u91cc\u81ea\u5df1\u5199\u4e00\u4e2a\u7a0b\u5e8f\u6a21\u62df\u8fd9\u4e2a\u8d2a\u5403\u86c7\u7684\u8fc7\u7a0b\uff0c\u63d0\u5347\u81ea\u5df1\u7684\u7f51\u7edc\u7f16\u7a0b\u80fd\u529b\u3002 \u5982\u679c\u4f60\u60f3\u7528 Java \u5199\u4e00\u4e2a\u8d2a\u5403\u86c7\u7684\u7a0b\u5e8f\uff0c\u53ef\u4ee5\u5148\u5b9a\u4e49\u8d2a\u5403\u86c7\u7684\u5c3a\u5bf8\u3001\u79ef\u91cf\u7b49\u4fe1\u606f\uff0c\u7136\u540e\u8fdb\u884c\u7f16\u7a0b\u3002\u53ef\u4ee5\u4f7f\u7528 Java \u7684\u5b50\u7c7b\uff0c\u5e76\u4f7f\u7528\u5b50\u7c7b\u7684\u65b9\u6cd5\u6765\u63a7\u5236\u8d2a\u5403\u86c7\u7684\u8fd0\u884c\uff0c\u7136\u540e\u8fdb\u884c\u8bd5\u8bd5\u3002\u8fd9\u4e2a\u7a0b\u5e8f\u7684\u63a7\u5236\u53ef\u4ee5\u4f7f\u7528\u4efb\u4f55\u4e00\u79cd\u7f16\u7a0b\u8bed\u8a00\u5b9e\u73b0\uff0c\u4f8b\u5982 Python \u621 ### 回答2: 贪吃蛇是一款经典的游戏,我们可以使用Java语言来编一个贪吃蛇程序。下面是一种可能的实现方式。 首先,我们需要引入Java的图形库,例如Swing或JavaFX,以创建游戏界面。然后,我们可以使用二维数组来表示游戏的场景,每个格子的状态可以用一个数字表示,例如0表示空白,1表示蛇的身体,2表示食物等。我们还需要定义蛇的初始位置和移动方向。 接下来,我们需要处理用户的输入来控制蛇的移动方向。可以使用键盘事件监听器来监听用户按键事件,根据按下的键盘按键来改变蛇的移动方向。 然后,我们需要定义贪吃蛇的移动规则。蛇的每一步移动都是基于当前位置和移动方向。当蛇吃到食物时,蛇的长度增加并在场景中生成新的食物。如果蛇撞到墙壁或自己的身体,则游戏结束。 还可以添加一些额外的功能来增加游戏的乐趣,例如计分系统、速度调整等。 最后,我们需要在界面上绘制场景和蛇的身体,确保蛇和食物能够正确显示。可以使用图形库提供的方法来实现绘制功能。 总之,通过使用Java语言和图形库,我们可以编一个简单但完整的贪吃蛇程序。通过处理用户输入、规定蛇的移动规则和绘制场景等功能,实现一个有趣的贪吃蛇游戏。 ### 回答3: 贪吃蛇程序一个经典的游戏,以下是使用Java语言编贪吃蛇程序的步骤和代码示例: 步骤 1:创建游戏窗口和画布 首先,我们需要创建一个游戏窗口来容纳贪吃蛇游戏。使用Java的Swing库,创建一个窗口并添加一个继承自JPanel的自定义画布类。 步骤 2:初始化贪吃蛇 贪吃蛇游戏开始时,需要初始化贪吃蛇的位置、速度和初始长度。我们可以使用一个链表来表示贪吃蛇的身体,用一个整数数组表示贪吃蛇的头部坐标,初始长度默认为3。 步骤 3:处理用户输入 通过监听键盘事件,实现上、下、左、右按键对应的相应移动操作。根据按键事件更新蛇的方向。 步骤 4:刷新画面 使用定时器或线程来控制游戏的刷新频率,每隔一段时间刷新一次画面。在每次刷新的时候,绘制贪吃蛇的身体和食物。 步骤 5:移动贪吃蛇 根据当前的方向,更新贪吃蛇头部的坐标,并根据是否吃到食物来增加贪吃蛇的长度。同时,移除链表末尾的节点,以实现身体的运动效果。 步骤 6:处理碰撞 判断贪吃蛇是否与自己的身体或者边界碰撞,如果碰撞则游戏结束。 步骤 7:处理食物 绘制和更新食物的坐标,当贪吃蛇吃到食物时,增加分数并生成新的食物。 步骤 8:游戏结束 当贪吃蛇碰撞到自己的身体或边界时,游戏结束。显示游戏结束的消息,并展示最终得分。 这就是用Java贪吃蛇程序的基本步骤和概述。根据以上步骤,可以实现一个简单的贪吃蛇游戏。同时,可以根据需求添加更多的功能,如难度调整、音效等。
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值